Merge mysql.com:/users/lthalmann/bkroot/mysql-5.1-new-rpl
into mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge BitKeeper/etc/ignore: auto-union Makefile.am: Auto merged client/mysqldump.c: Auto merged mysql-test/r/information_schema.result: Auto merged mysql-test/t/disabled.def: Auto merged sql/CMakeLists.txt: Auto merged sql/Makefile.am: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/log.cc: Auto merged sql/log_event.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/sp_head.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/table.h: Auto merged storage/innobase/handler/ha_innodb.cc: Auto merged mysql-test/r/mysqldump.result: Restoring rpl tree mysqldump test file to main tree test files mysql-test/r/status.result: Manual merge mysql-test/t/mysqldump.test: Restoring rpl tree mysqldump test file to main tree test files
This commit is contained in:
commit
c441c64e98
@ -1322,6 +1322,7 @@ mysql-test/r/udf.log
|
|||||||
mysql-test/share/mysql
|
mysql-test/share/mysql
|
||||||
mysql-test/std_data/*.pem
|
mysql-test/std_data/*.pem
|
||||||
mysql-test/t/index_merge.load
|
mysql-test/t/index_merge.load
|
||||||
|
mysql-test/t/rpl_truncate_4ndb.test
|
||||||
mysql-test/var
|
mysql-test/var
|
||||||
mysql-test/var/*
|
mysql-test/var/*
|
||||||
mysql.kdevprj
|
mysql.kdevprj
|
||||||
|
10
Makefile.am
10
Makefile.am
@ -24,11 +24,11 @@ EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \
|
|||||||
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
||||||
@readline_topdir@ sql-common \
|
@readline_topdir@ sql-common \
|
||||||
@thread_dirs@ pstack \
|
@thread_dirs@ pstack \
|
||||||
@sql_union_dirs@ storage plugin \
|
@sql_union_dirs@ unittest storage plugin \
|
||||||
@sql_server@ scripts @man_dirs@ tests \
|
@sql_server@ scripts @man_dirs@ tests \
|
||||||
netware @libmysqld_dirs@ \
|
netware @libmysqld_dirs@ \
|
||||||
mysql-test support-files @tools_dirs@ \
|
mysql-test support-files @tools_dirs@ \
|
||||||
unittest win
|
win
|
||||||
|
|
||||||
DIST_SUBDIRS = $(SUBDIRS) BUILD
|
DIST_SUBDIRS = $(SUBDIRS) BUILD
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ test-unit:
|
|||||||
|
|
||||||
test-ps:
|
test-ps:
|
||||||
cd mysql-test ; \
|
cd mysql-test ; \
|
||||||
./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=statement
|
./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=mixed
|
||||||
|
|
||||||
test-nr:
|
test-nr:
|
||||||
cd mysql-test ; \
|
cd mysql-test ; \
|
||||||
@ -125,6 +125,10 @@ test-pr:
|
|||||||
./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=row
|
./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=row
|
||||||
|
|
||||||
test-ns:
|
test-ns:
|
||||||
|
cd mysql-test ; \
|
||||||
|
./mysql-test-run.pl $(force) --mysqld=--binlog-format=mixed
|
||||||
|
|
||||||
|
test-binlog-statement:
|
||||||
cd mysql-test ; \
|
cd mysql-test ; \
|
||||||
./mysql-test-run.pl $(force) --mysqld=--binlog-format=statement
|
./mysql-test-run.pl $(force) --mysqld=--binlog-format=statement
|
||||||
|
|
||||||
|
@ -671,13 +671,13 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
tty_password=1;
|
tty_password=1;
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
if (!(md_result_file = my_fopen(argument, O_WRONLY | FILE_BINARY,
|
if (!(md_result_file= my_fopen(argument, O_WRONLY | FILE_BINARY,
|
||||||
MYF(MY_WME))))
|
MYF(MY_WME))))
|
||||||
exit(1);
|
exit(1);
|
||||||
break;
|
break;
|
||||||
case 'W':
|
case 'W':
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
opt_protocol = MYSQL_PROTOCOL_PIPE;
|
opt_protocol= MYSQL_PROTOCOL_PIPE;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case 'N':
|
case 'N':
|
||||||
@ -692,7 +692,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
#include <sslopt-case.h>
|
#include <sslopt-case.h>
|
||||||
case 'V': print_version(); exit(0);
|
case 'V': print_version(); exit(0);
|
||||||
case 'X':
|
case 'X':
|
||||||
opt_xml = 1;
|
opt_xml= 1;
|
||||||
extended_insert= opt_drop= opt_lock=
|
extended_insert= opt_drop= opt_lock=
|
||||||
opt_disable_keys= opt_autocommit= opt_create_db= 0;
|
opt_disable_keys= opt_autocommit= opt_create_db= 0;
|
||||||
break;
|
break;
|
||||||
@ -1582,7 +1582,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
const char *insert_option;
|
const char *insert_option;
|
||||||
char name_buff[NAME_LEN+3],table_buff[NAME_LEN*2+3];
|
char name_buff[NAME_LEN+3],table_buff[NAME_LEN*2+3];
|
||||||
char table_buff2[NAME_LEN*2+3], query_buff[QUERY_LENGTH];
|
char table_buff2[NAME_LEN*2+3], query_buff[QUERY_LENGTH];
|
||||||
FILE *sql_file = md_result_file;
|
FILE *sql_file= md_result_file;
|
||||||
int len;
|
int len;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
@ -1626,7 +1626,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
opt_quoted_table= quote_name(table, table_buff2, 0);
|
opt_quoted_table= quote_name(table, table_buff2, 0);
|
||||||
|
|
||||||
if (opt_order_by_primary)
|
if (opt_order_by_primary)
|
||||||
order_by = primary_key_fields(result_table);
|
order_by= primary_key_fields(result_table);
|
||||||
|
|
||||||
if (!opt_xml && !mysql_query_with_error_report(mysql, 0, query_buff))
|
if (!opt_xml && !mysql_query_with_error_report(mysql, 0, query_buff))
|
||||||
{
|
{
|
||||||
@ -1678,7 +1678,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
field= mysql_fetch_field_direct(result, 0);
|
field= mysql_fetch_field_direct(result, 0);
|
||||||
if (strcmp(field->name, "View") == 0)
|
if (strcmp(field->name, "View") == 0)
|
||||||
{
|
{
|
||||||
char *scv_buff = NULL;
|
char *scv_buff= NULL;
|
||||||
|
|
||||||
verbose_msg("-- It's a view, create dummy table for view\n");
|
verbose_msg("-- It's a view, create dummy table for view\n");
|
||||||
|
|
||||||
@ -1715,7 +1715,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
@ -2085,7 +2085,7 @@ static void dump_triggers_for_table (char *table, char *db)
|
|||||||
char name_buff[NAME_LEN*4+3], table_buff[NAME_LEN*2+3];
|
char name_buff[NAME_LEN*4+3], table_buff[NAME_LEN*2+3];
|
||||||
char query_buff[QUERY_LENGTH];
|
char query_buff[QUERY_LENGTH];
|
||||||
uint old_opt_compatible_mode=opt_compatible_mode;
|
uint old_opt_compatible_mode=opt_compatible_mode;
|
||||||
FILE *sql_file = md_result_file;
|
FILE *sql_file= md_result_file;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
|
||||||
@ -2329,15 +2329,15 @@ static void dump_table(char *table, char *db)
|
|||||||
end= strmov(end,buff);
|
end= strmov(end,buff);
|
||||||
if (where || order_by)
|
if (where || order_by)
|
||||||
{
|
{
|
||||||
query = alloc_query_str((ulong) ((end - query) + 1 +
|
query= alloc_query_str((ulong) ((end - query) + 1 +
|
||||||
(where ? strlen(where) + 7 : 0) +
|
(where ? strlen(where) + 7 : 0) +
|
||||||
(order_by ? strlen(order_by) + 10 : 0)));
|
(order_by ? strlen(order_by) + 10 : 0)));
|
||||||
end = strmov(query, query_buf);
|
end= strmov(query, query_buf);
|
||||||
|
|
||||||
if (where)
|
if (where)
|
||||||
end = strxmov(end, " WHERE ", where, NullS);
|
end= strxmov(end, " WHERE ", where, NullS);
|
||||||
if (order_by)
|
if (order_by)
|
||||||
end = strxmov(end, " ORDER BY ", order_by, NullS);
|
end= strxmov(end, " ORDER BY ", order_by, NullS);
|
||||||
}
|
}
|
||||||
if (mysql_real_query(mysql, query, (uint) (end - query)))
|
if (mysql_real_query(mysql, query, (uint) (end - query)))
|
||||||
{
|
{
|
||||||
@ -2358,10 +2358,10 @@ static void dump_table(char *table, char *db)
|
|||||||
result_table);
|
result_table);
|
||||||
if (where || order_by)
|
if (where || order_by)
|
||||||
{
|
{
|
||||||
query = alloc_query_str((ulong) (strlen(query) + 1 +
|
query= alloc_query_str((ulong) (strlen(query) + 1 +
|
||||||
(where ? strlen(where) + 7 : 0) +
|
(where ? strlen(where) + 7 : 0) +
|
||||||
(order_by ? strlen(order_by) + 10 : 0)));
|
(order_by ? strlen(order_by) + 10 : 0)));
|
||||||
end = strmov(query, query_buf);
|
end= strmov(query, query_buf);
|
||||||
|
|
||||||
if (where)
|
if (where)
|
||||||
{
|
{
|
||||||
@ -2370,7 +2370,7 @@ static void dump_table(char *table, char *db)
|
|||||||
fprintf(md_result_file, "-- WHERE: %s\n", where);
|
fprintf(md_result_file, "-- WHERE: %s\n", where);
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
end = strxmov(end, " WHERE ", where, NullS);
|
end= strxmov(end, " WHERE ", where, NullS);
|
||||||
}
|
}
|
||||||
if (order_by)
|
if (order_by)
|
||||||
{
|
{
|
||||||
@ -2379,7 +2379,7 @@ static void dump_table(char *table, char *db)
|
|||||||
fprintf(md_result_file, "-- ORDER BY: %s\n", order_by);
|
fprintf(md_result_file, "-- ORDER BY: %s\n", order_by);
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
end = strxmov(end, " ORDER BY ", order_by, NullS);
|
end= strxmov(end, " ORDER BY ", order_by, NullS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!opt_xml && !opt_compact)
|
if (!opt_xml && !opt_compact)
|
||||||
@ -2455,12 +2455,12 @@ static void dump_table(char *table, char *db)
|
|||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < mysql_num_fields(res); i++)
|
for (i= 0; i < mysql_num_fields(res); i++)
|
||||||
{
|
{
|
||||||
int is_blob;
|
int is_blob;
|
||||||
ulong length= lengths[i];
|
ulong length= lengths[i];
|
||||||
|
|
||||||
if (!(field = mysql_fetch_field(res)))
|
if (!(field= mysql_fetch_field(res)))
|
||||||
{
|
{
|
||||||
my_snprintf(query, QUERY_LENGTH,
|
my_snprintf(query, QUERY_LENGTH,
|
||||||
"%s: Not enough fields from table %s! Aborting.\n",
|
"%s: Not enough fields from table %s! Aborting.\n",
|
||||||
@ -2532,7 +2532,7 @@ static void dump_table(char *table, char *db)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* change any strings ("inf", "-inf", "nan") into NULL */
|
/* change any strings ("inf", "-inf", "nan") into NULL */
|
||||||
char *ptr = row[i];
|
char *ptr= row[i];
|
||||||
if (my_isalpha(charset_info, *ptr) || (*ptr == '-' &&
|
if (my_isalpha(charset_info, *ptr) || (*ptr == '-' &&
|
||||||
my_isalpha(charset_info, ptr[1])))
|
my_isalpha(charset_info, ptr[1])))
|
||||||
dynstr_append(&extended_row, "NULL");
|
dynstr_append(&extended_row, "NULL");
|
||||||
@ -2592,7 +2592,7 @@ static void dump_table(char *table, char *db)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* change any strings ("inf", "-inf", "nan") into NULL */
|
/* change any strings ("inf", "-inf", "nan") into NULL */
|
||||||
char *ptr = row[i];
|
char *ptr= row[i];
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
{
|
{
|
||||||
print_xml_tag1(md_result_file, "\t\t", "field name=",
|
print_xml_tag1(md_result_file, "\t\t", "field name=",
|
||||||
@ -2638,10 +2638,10 @@ static void dump_table(char *table, char *db)
|
|||||||
{
|
{
|
||||||
ulong row_length;
|
ulong row_length;
|
||||||
dynstr_append(&extended_row,")");
|
dynstr_append(&extended_row,")");
|
||||||
row_length = 2 + extended_row.length;
|
row_length= 2 + extended_row.length;
|
||||||
if (total_length + row_length < opt_net_buffer_length)
|
if (total_length + row_length < opt_net_buffer_length)
|
||||||
{
|
{
|
||||||
total_length += row_length;
|
total_length+= row_length;
|
||||||
fputc(',',md_result_file); /* Always row break */
|
fputc(',',md_result_file); /* Always row break */
|
||||||
fputs(extended_row.str,md_result_file);
|
fputs(extended_row.str,md_result_file);
|
||||||
}
|
}
|
||||||
@ -2653,7 +2653,7 @@ static void dump_table(char *table, char *db)
|
|||||||
|
|
||||||
fputs(insert_pat.str,md_result_file);
|
fputs(insert_pat.str,md_result_file);
|
||||||
fputs(extended_row.str,md_result_file);
|
fputs(extended_row.str,md_result_file);
|
||||||
total_length = row_length+init_length;
|
total_length= row_length+init_length;
|
||||||
}
|
}
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
@ -2718,15 +2718,15 @@ err:
|
|||||||
|
|
||||||
static char *getTableName(int reset)
|
static char *getTableName(int reset)
|
||||||
{
|
{
|
||||||
static MYSQL_RES *res = NULL;
|
static MYSQL_RES *res= NULL;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
if (!(res = mysql_list_tables(mysql,NullS)))
|
if (!(res= mysql_list_tables(mysql,NullS)))
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
if ((row = mysql_fetch_row(res)))
|
if ((row= mysql_fetch_row(res)))
|
||||||
return((char*) row[0]);
|
return((char*) row[0]);
|
||||||
|
|
||||||
if (reset)
|
if (reset)
|
||||||
@ -2734,7 +2734,7 @@ static char *getTableName(int reset)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
mysql_free_result(res);
|
mysql_free_result(res);
|
||||||
res = NULL;
|
res= NULL;
|
||||||
}
|
}
|
||||||
return(NULL);
|
return(NULL);
|
||||||
} /* getTableName */
|
} /* getTableName */
|
||||||
@ -2872,7 +2872,7 @@ static int dump_all_databases()
|
|||||||
|
|
||||||
if (mysql_query_with_error_report(mysql, &tableres, "SHOW DATABASES"))
|
if (mysql_query_with_error_report(mysql, &tableres, "SHOW DATABASES"))
|
||||||
return 1;
|
return 1;
|
||||||
while ((row = mysql_fetch_row(tableres)))
|
while ((row= mysql_fetch_row(tableres)))
|
||||||
{
|
{
|
||||||
if (dump_all_tables_in_db(row[0]))
|
if (dump_all_tables_in_db(row[0]))
|
||||||
result=1;
|
result=1;
|
||||||
@ -2880,13 +2880,13 @@ static int dump_all_databases()
|
|||||||
if (seen_views)
|
if (seen_views)
|
||||||
{
|
{
|
||||||
if (mysql_query(mysql, "SHOW DATABASES") ||
|
if (mysql_query(mysql, "SHOW DATABASES") ||
|
||||||
!(tableres = mysql_store_result(mysql)))
|
!(tableres= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
my_printf_error(0, "Error: Couldn't execute 'SHOW DATABASES': %s",
|
my_printf_error(0, "Error: Couldn't execute 'SHOW DATABASES': %s",
|
||||||
MYF(0), mysql_error(mysql));
|
MYF(0), mysql_error(mysql));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
while ((row = mysql_fetch_row(tableres)))
|
while ((row= mysql_fetch_row(tableres)))
|
||||||
{
|
{
|
||||||
if (dump_all_views_in_db(row[0]))
|
if (dump_all_views_in_db(row[0]))
|
||||||
result=1;
|
result=1;
|
||||||
@ -3332,7 +3332,7 @@ static int do_show_master_status(MYSQL *mysql_con)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
row = mysql_fetch_row(master);
|
row= mysql_fetch_row(master);
|
||||||
if (row && row[0] && row[1])
|
if (row && row[0] && row[1])
|
||||||
{
|
{
|
||||||
/* SHOW MASTER STATUS reports file and position */
|
/* SHOW MASTER STATUS reports file and position */
|
||||||
@ -3459,7 +3459,7 @@ static void print_value(FILE *file, MYSQL_RES *result, MYSQL_ROW row,
|
|||||||
MYSQL_FIELD *field;
|
MYSQL_FIELD *field;
|
||||||
mysql_field_seek(result, 0);
|
mysql_field_seek(result, 0);
|
||||||
|
|
||||||
for ( ; (field = mysql_fetch_field(result)) ; row++)
|
for ( ; (field= mysql_fetch_field(result)) ; row++)
|
||||||
{
|
{
|
||||||
if (!strcmp(field->name,name))
|
if (!strcmp(field->name,name))
|
||||||
{
|
{
|
||||||
@ -3587,17 +3587,19 @@ char check_if_ignore_table(const char *table_name, char *table_type)
|
|||||||
|
|
||||||
static char *primary_key_fields(const char *table_name)
|
static char *primary_key_fields(const char *table_name)
|
||||||
{
|
{
|
||||||
MYSQL_RES *res = NULL;
|
MYSQL_RES *res= NULL;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
/* SHOW KEYS FROM + table name * 2 (escaped) + 2 quotes + \0 */
|
/* SHOW KEYS FROM + table name * 2 (escaped) + 2 quotes + \0 */
|
||||||
char show_keys_buff[15 + NAME_LEN * 2 + 3];
|
char show_keys_buff[15 + NAME_LEN * 2 + 3];
|
||||||
uint result_length = 0;
|
uint result_length= 0;
|
||||||
char *result = 0;
|
char *result= 0;
|
||||||
|
char buff[NAME_LEN * 2 + 3];
|
||||||
|
char *quoted_field;
|
||||||
|
|
||||||
my_snprintf(show_keys_buff, sizeof(show_keys_buff),
|
my_snprintf(show_keys_buff, sizeof(show_keys_buff),
|
||||||
"SHOW KEYS FROM %s", table_name);
|
"SHOW KEYS FROM %s", table_name);
|
||||||
if (mysql_query(mysql, show_keys_buff) ||
|
if (mysql_query(mysql, show_keys_buff) ||
|
||||||
!(res = mysql_store_result(mysql)))
|
!(res= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Warning: Couldn't read keys from table %s;"
|
fprintf(stderr, "Warning: Couldn't read keys from table %s;"
|
||||||
" records are NOT sorted (%s)\n",
|
" records are NOT sorted (%s)\n",
|
||||||
@ -3612,12 +3614,14 @@ static char *primary_key_fields(const char *table_name)
|
|||||||
* row, and UNIQUE keys come before others. So we only need to check
|
* row, and UNIQUE keys come before others. So we only need to check
|
||||||
* the first key, not all keys.
|
* the first key, not all keys.
|
||||||
*/
|
*/
|
||||||
if ((row = mysql_fetch_row(res)) && atoi(row[1]) == 0)
|
if ((row= mysql_fetch_row(res)) && atoi(row[1]) == 0)
|
||||||
{
|
{
|
||||||
/* Key is unique */
|
/* Key is unique */
|
||||||
do
|
do
|
||||||
result_length += strlen(row[4]) + 1; /* + 1 for ',' or \0 */
|
{
|
||||||
while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1);
|
quoted_field= quote_name(row[4], buff, 0);
|
||||||
|
result_length+= strlen(quoted_field) + 1; /* + 1 for ',' or \0 */
|
||||||
|
} while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build the ORDER BY clause result */
|
/* Build the ORDER BY clause result */
|
||||||
@ -3625,17 +3629,21 @@ static char *primary_key_fields(const char *table_name)
|
|||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
/* result (terminating \0 is already in result_length) */
|
/* result (terminating \0 is already in result_length) */
|
||||||
result = my_malloc(result_length + 10, MYF(MY_WME));
|
result= my_malloc(result_length + 10, MYF(MY_WME));
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error: Not enough memory to store ORDER BY clause\n");
|
fprintf(stderr, "Error: Not enough memory to store ORDER BY clause\n");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
mysql_data_seek(res, 0);
|
mysql_data_seek(res, 0);
|
||||||
row = mysql_fetch_row(res);
|
row= mysql_fetch_row(res);
|
||||||
end = strmov(result, row[4]);
|
quoted_field= quote_name(row[4], buff, 0);
|
||||||
while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1)
|
end= strmov(result, quoted_field);
|
||||||
end = strxmov(end, ",", row[4], NullS);
|
while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1)
|
||||||
|
{
|
||||||
|
quoted_field= quote_name(row[4], buff, 0);
|
||||||
|
end= strxmov(end, ",", quoted_field, NullS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -3703,7 +3711,7 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
char table_buff[NAME_LEN*2+3];
|
char table_buff[NAME_LEN*2+3];
|
||||||
char table_buff2[NAME_LEN*2+3];
|
char table_buff2[NAME_LEN*2+3];
|
||||||
char query[QUERY_LENGTH];
|
char query[QUERY_LENGTH];
|
||||||
FILE *sql_file = md_result_file;
|
FILE *sql_file= md_result_file;
|
||||||
DBUG_ENTER("get_view_structure");
|
DBUG_ENTER("get_view_structure");
|
||||||
|
|
||||||
if (opt_no_create_info) /* Don't write table creation info */
|
if (opt_no_create_info) /* Don't write table creation info */
|
||||||
|
@ -280,6 +280,8 @@ AC_DEFUN([MYSQL_CONFIGURE_PLUGINS],[
|
|||||||
_MYSQL_EMIT_PLUGIN_ACTIONS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
|
_MYSQL_EMIT_PLUGIN_ACTIONS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
|
||||||
AC_SUBST([mysql_se_dirs])
|
AC_SUBST([mysql_se_dirs])
|
||||||
AC_SUBST([mysql_pg_dirs])
|
AC_SUBST([mysql_pg_dirs])
|
||||||
|
AC_SUBST([mysql_se_unittest_dirs])
|
||||||
|
AC_SUBST([mysql_pg_unittest_dirs])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
@ -410,9 +412,15 @@ dnl Although this is "pretty", it breaks libmysqld build
|
|||||||
[AC_CONFIG_FILES($6/Makefile)]
|
[AC_CONFIG_FILES($6/Makefile)]
|
||||||
)
|
)
|
||||||
ifelse(m4_substr($6, 0, 8), [storage/],
|
ifelse(m4_substr($6, 0, 8), [storage/],
|
||||||
[mysql_se_dirs="$mysql_se_dirs ]m4_substr($6, 8)",
|
[
|
||||||
|
[mysql_se_dirs="$mysql_se_dirs ]m4_substr($6, 8)"
|
||||||
|
mysql_se_unittest_dirs="$mysql_se_unittest_dirs ../$6"
|
||||||
|
],
|
||||||
m4_substr($6, 0, 7), [plugin/],
|
m4_substr($6, 0, 7), [plugin/],
|
||||||
[mysql_pg_dirs="$mysql_pg_dirs ]m4_substr($6, 7)",
|
[
|
||||||
|
[mysql_pg_dirs="$mysql_pg_dirs ]m4_substr($6, 7)"
|
||||||
|
mysql_pg_unittest_dirs="$mysql_pg_unittest_dirs ../$6"
|
||||||
|
],
|
||||||
[AC_FATAL([don't know how to handle plugin dir ]$6)])
|
[AC_FATAL([don't know how to handle plugin dir ]$6)])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
@ -59,24 +59,4 @@ insert into t1 values(null);
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# Test of binlogging of INSERT_ID with INSERT DELAYED
|
-- source extra/binlog_tests/binlog_insert_delayed.test
|
||||||
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
|
||||||
# First, avoid BUG#20627:
|
|
||||||
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
|
||||||
# Verify that only one INSERT_ID event is binlogged.
|
|
||||||
insert delayed into t1 values (207);
|
|
||||||
|
|
||||||
# We use sleeps between statements, that's the only way to get a
|
|
||||||
# repeatable binlog in a normal test run and under Valgrind.
|
|
||||||
# It may be that the "binlog missing rows" of BUG#20821 shows up
|
|
||||||
# here.
|
|
||||||
sleep 2;
|
|
||||||
insert delayed into t1 values (null);
|
|
||||||
sleep 2;
|
|
||||||
insert delayed into t1 values (300);
|
|
||||||
sleep 2; # time for the delayed queries to reach disk
|
|
||||||
select * from t1;
|
|
||||||
--replace_column 2 # 5 #
|
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
|
||||||
show binlog events from 102;
|
|
||||||
drop table t1;
|
|
||||||
|
28
mysql-test/extra/binlog_tests/binlog_insert_delayed.test
Normal file
28
mysql-test/extra/binlog_tests/binlog_insert_delayed.test
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Test of binlogging of INSERT_ID with INSERT DELAYED
|
||||||
|
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
||||||
|
# First, avoid BUG#20627:
|
||||||
|
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
||||||
|
# Verify that only one INSERT_ID event is binlogged.
|
||||||
|
# Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed
|
||||||
|
insert delayed into t1 values (207);
|
||||||
|
|
||||||
|
# We use sleeps between statements, that's the only way to get a
|
||||||
|
# repeatable binlog in a normal test run and under Valgrind. The
|
||||||
|
# reason is that without sleeps, rows of different INSERT DELAYEDs
|
||||||
|
# sometimes group together and sometimes not, so the table may be
|
||||||
|
# unlocked/relocked causing a different number of table map log
|
||||||
|
# events.
|
||||||
|
sleep 2;
|
||||||
|
insert delayed into t1 values (null);
|
||||||
|
sleep 2;
|
||||||
|
insert delayed into t1 values (300);
|
||||||
|
sleep 2; # time for the delayed queries to reach disk
|
||||||
|
insert delayed into t1 values (null),(null),(null),(null);
|
||||||
|
sleep 2;
|
||||||
|
insert delayed into t1 values (null),(null),(400),(null);
|
||||||
|
sleep 2;
|
||||||
|
select * from t1;
|
||||||
|
--replace_column 2 # 5 #
|
||||||
|
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||||
|
show binlog events from 102;
|
||||||
|
drop table t1;
|
@ -31,4 +31,4 @@ connection master;
|
|||||||
SET FOREIGN_KEY_CHECKS=0;
|
SET FOREIGN_KEY_CHECKS=0;
|
||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
DROP TABLE IF EXISTS t1,t2,t3;
|
||||||
SET FOREIGN_KEY_CHECKS=1;
|
SET FOREIGN_KEY_CHECKS=1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
@ -289,8 +289,30 @@ select * from t1;
|
|||||||
select * from t2;
|
select * from t2;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
drop table t1, t2;
|
drop table t1;
|
||||||
drop function insid;
|
drop function insid;
|
||||||
|
|
||||||
sync_slave_with_master;
|
truncate table t2;
|
||||||
|
create table t1 (n int primary key auto_increment not null,
|
||||||
|
b int, unique(b));
|
||||||
|
delimiter |;
|
||||||
|
create procedure foo()
|
||||||
|
begin
|
||||||
|
insert into t1 values(null,10);
|
||||||
|
insert ignore into t1 values(null,10);
|
||||||
|
insert ignore into t1 values(null,10);
|
||||||
|
insert into t2 values(null,3);
|
||||||
|
end|
|
||||||
|
delimiter ;|
|
||||||
|
call foo();
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
drop table t1, t2;
|
||||||
|
drop procedure foo;
|
||||||
|
sync_slave_with_master;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
# See if replication of a "LOAD DATA in an autoincrement column"
|
# See if replication of a "LOAD DATA in an autoincrement column"
|
||||||
# Honours autoincrement values
|
# Honours autoincrement values
|
||||||
|
@ -3,27 +3,51 @@
|
|||||||
|
|
||||||
# Consider making these part of the basic RBR tests.
|
# Consider making these part of the basic RBR tests.
|
||||||
|
|
||||||
-- source include/have_binlog_format_row.inc
|
connection master;
|
||||||
-- source include/master-slave.inc
|
--disable_warnings
|
||||||
|
--disable_query_log
|
||||||
|
DROP TABLE IF EXISTS t1_int,t1_bit,t1_char,t1_nodef;
|
||||||
|
DROP TABLE IF EXISTS t2,t3,t4,t5,t6,t9;
|
||||||
|
--enable_query_log
|
||||||
|
--enable_warnings
|
||||||
|
sync_slave_with_master;
|
||||||
|
STOP SLAVE;
|
||||||
|
SET GLOBAL SQL_MODE='STRICT_ALL_TABLES';
|
||||||
|
START SLAVE;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
eval CREATE TABLE t1_int (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||||
|
eval CREATE TABLE t1_bit (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||||
|
eval CREATE TABLE t1_char (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||||
|
eval CREATE TABLE t1_nodef (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||||
eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||||
eval CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
eval CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||||
eval CREATE TABLE t4 (a INT) ENGINE=$engine_type;
|
eval CREATE TABLE t4 (a INT) ENGINE=$engine_type;
|
||||||
eval CREATE TABLE t5 (a INT, b INT, c INT) ENGINE=$engine_type;
|
eval CREATE TABLE t5 (a INT, b INT, c INT) ENGINE=$engine_type;
|
||||||
eval CREATE TABLE t6 (a INT, b INT, c INT) ENGINE=$engine_type;
|
eval CREATE TABLE t6 (a INT, b INT, c INT) ENGINE=$engine_type;
|
||||||
|
eval CREATE TABLE t7 (a INT NOT NULL) ENGINE=$engine_type;
|
||||||
|
eval CREATE TABLE t8 (a INT NOT NULL) ENGINE=$engine_type;
|
||||||
|
|
||||||
# Table used to detect that slave is running
|
# Table used to detect that slave is running
|
||||||
eval CREATE TABLE t9 (a INT PRIMARY KEY) ENGINE=$engine_type;
|
eval CREATE TABLE t9 (a INT) ENGINE=$engine_type;
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# On the slave, we add one column last in table 't1',
|
|
||||||
ALTER TABLE t1 ADD x INT DEFAULT 42;
|
# On the slave, we add one INT column last in table 't1_int',
|
||||||
# ... add one column in the middle of table 't2', and
|
ALTER TABLE t1_int ADD x INT DEFAULT 42;
|
||||||
ALTER TABLE t2 ADD x INT DEFAULT 42 AFTER a;
|
# ... and add BIT columns last in table 't1_bit' to ensure that we
|
||||||
# ... add one column first in table 't3'.
|
# have at least one extra null byte on the slave,
|
||||||
ALTER TABLE t3 ADD x INT DEFAULT 42 FIRST;
|
ALTER TABLE t1_bit
|
||||||
|
ADD x BIT(3) DEFAULT b'011',
|
||||||
|
ADD y BIT(5) DEFAULT b'10101',
|
||||||
|
ADD z BIT(2) DEFAULT b'10';
|
||||||
|
# ... and add one CHAR column last in table 't1_char',
|
||||||
|
ALTER TABLE t1_char ADD x CHAR(20) DEFAULT 'Just a test';
|
||||||
|
# ... and add one non-nullable INT column last in table 't1_text'
|
||||||
|
# with no default,
|
||||||
|
ALTER TABLE t1_nodef ADD x INT NOT NULL;
|
||||||
|
# ... and remove the last column in t2
|
||||||
|
ALTER TABLE t2 DROP b;
|
||||||
# ... change the type of the single column in table 't4'
|
# ... change the type of the single column in table 't4'
|
||||||
ALTER TABLE t4 MODIFY a FLOAT;
|
ALTER TABLE t4 MODIFY a FLOAT;
|
||||||
# ... change the type of the middle column of table 't5'
|
# ... change the type of the middle column of table 't5'
|
||||||
@ -31,19 +55,67 @@ ALTER TABLE t5 MODIFY b FLOAT;
|
|||||||
# ... change the type of the last column of table 't6'
|
# ... change the type of the last column of table 't6'
|
||||||
ALTER TABLE t6 MODIFY c FLOAT;
|
ALTER TABLE t6 MODIFY c FLOAT;
|
||||||
|
|
||||||
# Each of these should generate an error and stop the slave
|
# ... add one byte worth of null bytes to the table on the slave
|
||||||
|
ALTER TABLE t7 ADD e1 INT, ADD e2 INT, ADD e3 INT, ADD e4 INT,
|
||||||
|
ADD e5 INT, ADD e6 INT, ADD e7 INT, ADD e8 INT;
|
||||||
|
|
||||||
|
# ... add 8 columns that are nullable: t8 will not be entirely
|
||||||
|
# nullable and have no null bits (just an X bit)
|
||||||
|
ALTER TABLE t8 ADD e1 INT NOT NULL DEFAULT 0, ADD e2 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e3 INT NOT NULL DEFAULT 0, ADD e4 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e5 INT NOT NULL DEFAULT 0, ADD e6 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e7 INT NOT NULL DEFAULT 0, ADD e8 INT NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
|
# Insert some values for tables on slave side. These should not be
|
||||||
|
# modified when the row from the master is applied.
|
||||||
|
INSERT INTO t1_int VALUES (2, 4, 4711);
|
||||||
|
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
|
||||||
|
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
connection master;
|
connection master;
|
||||||
INSERT INTO t9 VALUES (1);
|
INSERT INTO t1_int VALUES (1,2);
|
||||||
|
INSERT INTO t1_int VALUES (2,5);
|
||||||
|
INSERT INTO t1_bit VALUES (1,2);
|
||||||
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
|
||||||
|
# Each of these inserts should generate an error and stop the slave
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t9 VALUES (2);
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# Now slave is guaranteed to be running
|
# Now slave is guaranteed to be running
|
||||||
connection master;
|
connection master;
|
||||||
INSERT INTO t1 VALUES (1,2);
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
connection slave;
|
connection slave;
|
||||||
wait_for_slave_to_stop;
|
wait_for_slave_to_stop;
|
||||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||||
--vertical_results
|
--query_vertical SHOW SLAVE STATUS
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
|
|
||||||
@ -56,24 +128,8 @@ INSERT INTO t2 VALUES (2,4);
|
|||||||
connection slave;
|
connection slave;
|
||||||
wait_for_slave_to_stop;
|
wait_for_slave_to_stop;
|
||||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||||
--vertical_results
|
--query_vertical SHOW SLAVE STATUS
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
|
||||||
START SLAVE;
|
|
||||||
|
|
||||||
connection master;
|
|
||||||
INSERT INTO t9 VALUES (3);
|
|
||||||
sync_slave_with_master;
|
|
||||||
# Now slave is guaranteed to be running
|
|
||||||
connection master;
|
|
||||||
INSERT INTO t3 VALUES (3,6);
|
|
||||||
connection slave;
|
|
||||||
wait_for_slave_to_stop;
|
|
||||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
||||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
|
||||||
--vertical_results
|
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
|
|
||||||
@ -86,9 +142,8 @@ INSERT INTO t4 VALUES (4);
|
|||||||
connection slave;
|
connection slave;
|
||||||
wait_for_slave_to_stop;
|
wait_for_slave_to_stop;
|
||||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||||
--vertical_results
|
--query_vertical SHOW SLAVE STATUS
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
|
|
||||||
@ -101,9 +156,8 @@ INSERT INTO t5 VALUES (5,10,25);
|
|||||||
connection slave;
|
connection slave;
|
||||||
wait_for_slave_to_stop;
|
wait_for_slave_to_stop;
|
||||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||||
--vertical_results
|
--query_vertical SHOW SLAVE STATUS
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
|
|
||||||
@ -116,14 +170,65 @@ INSERT INTO t6 VALUES (6,12,36);
|
|||||||
connection slave;
|
connection slave;
|
||||||
wait_for_slave_to_stop;
|
wait_for_slave_to_stop;
|
||||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||||
--vertical_results
|
--query_vertical SHOW SLAVE STATUS
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t9 VALUES (6);
|
||||||
|
sync_slave_with_master;
|
||||||
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||||
|
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||||
|
--query_vertical SHOW SLAVE STATUS
|
||||||
|
|
||||||
|
# Testing some tables extra field that can be null and cannot be null
|
||||||
|
# (but have default values)
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t7 VALUES (1),(2),(3);
|
||||||
|
INSERT INTO t8 VALUES (1),(2),(3);
|
||||||
|
SELECT * FROM t7;
|
||||||
|
SELECT * FROM t8;
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t7;
|
||||||
|
SELECT * FROM t8;
|
||||||
|
|
||||||
|
# We will now try to update and then delete a row on the master where
|
||||||
|
# the extra field on the slave does not have a default value. This
|
||||||
|
# update should not generate an error even though there is no default
|
||||||
|
# for the extra column.
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
TRUNCATE t1_nodef;
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
|
INSERT INTO t1_nodef VALUES (2,4);
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
--echo **** On Slave ****
|
||||||
|
connection slave;
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2,3);
|
||||||
|
INSERT INTO t1_nodef VALUES (2,4,6);
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
DELETE FROM t1_nodef WHERE a=2;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
|
||||||
|
--echo **** Cleanup ****
|
||||||
connection master;
|
connection master;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t9;
|
DROP TABLE IF EXISTS t1_int,t1_bit,t1_char,t1_nodef;
|
||||||
|
DROP TABLE IF EXISTS t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
create table t1 (word char(20) not null);
|
create table t1 (word char(20) not null);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# This test will fail if the server/client does not support enough charsets.
|
# This test will fail if the server/client does not support enough charsets.
|
||||||
|
|
||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
4
mysql-test/include/have_binlog_format_mixed.inc
Normal file
4
mysql-test/include/have_binlog_format_mixed.inc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-- require r/have_binlog_format_mixed.require
|
||||||
|
disable_query_log;
|
||||||
|
show variables like "binlog_format";
|
||||||
|
enable_query_log;
|
@ -0,0 +1,5 @@
|
|||||||
|
--require r/have_binlog_format_statement.require
|
||||||
|
--disable_query_log
|
||||||
|
--replace_result MIXED STATEMENT
|
||||||
|
show variables like "binlog_format";
|
||||||
|
--enable_query_log
|
@ -28,7 +28,6 @@ INSERT INTO t1 VALUES(412,1,'Testing MySQL databases is a cool ',
|
|||||||
select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
|
select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
--sleep 5
|
|
||||||
--echo --- Select from t1 on slave ---
|
--echo --- Select from t1 on slave ---
|
||||||
select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
|
select id,hex(b1),vc,bc,d,f,total,y,t from t1 order by id;
|
||||||
|
|
||||||
@ -44,7 +43,6 @@ SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
|
|||||||
# into the binlog other wise we will miss the update.
|
# into the binlog other wise we will miss the update.
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
--sleep 5
|
|
||||||
--echo --- Check Update on slave ---
|
--echo --- Check Update on slave ---
|
||||||
SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
|
SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412;
|
||||||
|
|
||||||
@ -56,7 +54,6 @@ DELETE FROM t1 WHERE id = 42;
|
|||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
--sleep 5
|
|
||||||
--echo --- Show current count on slave for t1 ---
|
--echo --- Show current count on slave for t1 ---
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
|
|
||||||
|
23
mysql-test/include/safe_set_to_maybe_ro_var.inc
Normal file
23
mysql-test/include/safe_set_to_maybe_ro_var.inc
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# to mask out the error - never abort neither log in result file - in setting
|
||||||
|
# to read-only variable.
|
||||||
|
# It is assumed that the new value is equal to one the var was set to.
|
||||||
|
# Such situation happens particularily with binlog_format that becomes read-only
|
||||||
|
# with ndb default storage.
|
||||||
|
#
|
||||||
|
# when generate results always watch the file to find what is expected,
|
||||||
|
# the SET query may fail
|
||||||
|
|
||||||
|
# script accepts $maybe_ro_var the var name and $val4var the value
|
||||||
|
|
||||||
|
### USAGE:
|
||||||
|
### let $maybe_ro_var= ...
|
||||||
|
### let $val4var= ...
|
||||||
|
### include/safe_set_to_maybe_ro_var.inc
|
||||||
|
|
||||||
|
--disable_result_log
|
||||||
|
--disable_abort_on_error
|
||||||
|
eval SET $maybe_ro_var = $val4var;
|
||||||
|
--enable_abort_on_error
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
eval SELECT $maybe_ro_var;
|
@ -250,11 +250,21 @@ set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
|||||||
insert delayed into t1 values (207);
|
insert delayed into t1 values (207);
|
||||||
insert delayed into t1 values (null);
|
insert delayed into t1 values (null);
|
||||||
insert delayed into t1 values (300);
|
insert delayed into t1 values (300);
|
||||||
|
insert delayed into t1 values (null),(null),(null),(null);
|
||||||
|
insert delayed into t1 values (null),(null),(400),(null);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a
|
a
|
||||||
207
|
207
|
||||||
208
|
208
|
||||||
300
|
300
|
||||||
|
301
|
||||||
|
302
|
||||||
|
303
|
||||||
|
304
|
||||||
|
305
|
||||||
|
306
|
||||||
|
400
|
||||||
|
401
|
||||||
show binlog events from 102;
|
show binlog events from 102;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
||||||
@ -268,4 +278,12 @@ master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
|||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
32
mysql-test/r/binlog_statement_insert_delayed.result
Normal file
32
mysql-test/r/binlog_statement_insert_delayed.result
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
||||||
|
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
||||||
|
insert delayed into t1 values (207);
|
||||||
|
insert delayed into t1 values (null);
|
||||||
|
insert delayed into t1 values (300);
|
||||||
|
insert delayed into t1 values (null),(null),(null),(null);
|
||||||
|
insert delayed into t1 values (null),(null),(400),(null);
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
207
|
||||||
|
208
|
||||||
|
300
|
||||||
|
301
|
||||||
|
302
|
||||||
|
303
|
||||||
|
304
|
||||||
|
305
|
||||||
|
306
|
||||||
|
400
|
||||||
|
401
|
||||||
|
show binlog events from 102;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (207)
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=208
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (300)
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=301
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null),(null),(null),(null)
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=305
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null),(null),(400),(null)
|
||||||
|
drop table t1;
|
@ -160,11 +160,21 @@ set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
|||||||
insert delayed into t1 values (207);
|
insert delayed into t1 values (207);
|
||||||
insert delayed into t1 values (null);
|
insert delayed into t1 values (null);
|
||||||
insert delayed into t1 values (300);
|
insert delayed into t1 values (300);
|
||||||
|
insert delayed into t1 values (null),(null),(null),(null);
|
||||||
|
insert delayed into t1 values (null),(null),(400),(null);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a
|
a
|
||||||
207
|
207
|
||||||
208
|
208
|
||||||
300
|
300
|
||||||
|
301
|
||||||
|
302
|
||||||
|
303
|
||||||
|
304
|
||||||
|
305
|
||||||
|
306
|
||||||
|
400
|
||||||
|
401
|
||||||
show binlog events from 102;
|
show binlog events from 102;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
||||||
@ -172,8 +182,18 @@ master-bin.000001 # Intvar 1 # INSERT_ID=127
|
|||||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values(null)
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values(null)
|
||||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
||||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (207)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Intvar 1 # INSERT_ID=208
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (300)
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
2
mysql-test/r/have_binlog_format_mixed.require
Normal file
2
mysql-test/r/have_binlog_format_mixed.require
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Variable_name Value
|
||||||
|
binlog_format MIXED
|
@ -46,6 +46,8 @@ COLUMN_PRIVILEGES
|
|||||||
ENGINES
|
ENGINES
|
||||||
EVENTS
|
EVENTS
|
||||||
FILES
|
FILES
|
||||||
|
GLOBAL_STATUS
|
||||||
|
GLOBAL_VARIABLES
|
||||||
KEY_COLUMN_USAGE
|
KEY_COLUMN_USAGE
|
||||||
PARTITIONS
|
PARTITIONS
|
||||||
PLUGINS
|
PLUGINS
|
||||||
@ -54,6 +56,8 @@ REFERENTIAL_CONSTRAINTS
|
|||||||
ROUTINES
|
ROUTINES
|
||||||
SCHEMATA
|
SCHEMATA
|
||||||
SCHEMA_PRIVILEGES
|
SCHEMA_PRIVILEGES
|
||||||
|
SESSION_STATUS
|
||||||
|
SESSION_VARIABLES
|
||||||
STATISTICS
|
STATISTICS
|
||||||
TABLES
|
TABLES
|
||||||
TABLE_CONSTRAINTS
|
TABLE_CONSTRAINTS
|
||||||
@ -758,6 +762,7 @@ table_schema table_name column_name
|
|||||||
information_schema COLUMNS COLUMN_TYPE
|
information_schema COLUMNS COLUMN_TYPE
|
||||||
information_schema EVENTS EVENT_DEFINITION
|
information_schema EVENTS EVENT_DEFINITION
|
||||||
information_schema EVENTS SQL_MODE
|
information_schema EVENTS SQL_MODE
|
||||||
|
information_schema GLOBAL_VARIABLES VARIABLE_VALUE
|
||||||
information_schema PARTITIONS PARTITION_EXPRESSION
|
information_schema PARTITIONS PARTITION_EXPRESSION
|
||||||
information_schema PARTITIONS SUBPARTITION_EXPRESSION
|
information_schema PARTITIONS SUBPARTITION_EXPRESSION
|
||||||
information_schema PARTITIONS PARTITION_DESCRIPTION
|
information_schema PARTITIONS PARTITION_DESCRIPTION
|
||||||
@ -765,6 +770,7 @@ information_schema PLUGINS PLUGIN_DESCRIPTION
|
|||||||
information_schema PROCESSLIST INFO
|
information_schema PROCESSLIST INFO
|
||||||
information_schema ROUTINES ROUTINE_DEFINITION
|
information_schema ROUTINES ROUTINE_DEFINITION
|
||||||
information_schema ROUTINES SQL_MODE
|
information_schema ROUTINES SQL_MODE
|
||||||
|
information_schema SESSION_VARIABLES VARIABLE_VALUE
|
||||||
information_schema TRIGGERS ACTION_CONDITION
|
information_schema TRIGGERS ACTION_CONDITION
|
||||||
information_schema TRIGGERS ACTION_STATEMENT
|
information_schema TRIGGERS ACTION_STATEMENT
|
||||||
information_schema TRIGGERS SQL_MODE
|
information_schema TRIGGERS SQL_MODE
|
||||||
@ -847,7 +853,7 @@ delete from mysql.db where user='mysqltest_4';
|
|||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT table_schema, count(*) FROM information_schema.TABLES where TABLE_SCHEMA!='cluster' GROUP BY TABLE_SCHEMA;
|
SELECT table_schema, count(*) FROM information_schema.TABLES where TABLE_SCHEMA!='cluster' GROUP BY TABLE_SCHEMA;
|
||||||
table_schema count(*)
|
table_schema count(*)
|
||||||
information_schema 23
|
information_schema 27
|
||||||
mysql 21
|
mysql 21
|
||||||
create table t1 (i int, j int);
|
create table t1 (i int, j int);
|
||||||
create trigger trg1 before insert on t1 for each row
|
create trigger trg1 before insert on t1 for each row
|
||||||
@ -1240,6 +1246,8 @@ COLUMN_PRIVILEGES TABLE_SCHEMA
|
|||||||
ENGINES ENGINE
|
ENGINES ENGINE
|
||||||
EVENTS EVENT_SCHEMA
|
EVENTS EVENT_SCHEMA
|
||||||
FILES TABLE_SCHEMA
|
FILES TABLE_SCHEMA
|
||||||
|
GLOBAL_STATUS VARIABLE_NAME
|
||||||
|
GLOBAL_VARIABLES VARIABLE_NAME
|
||||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||||
PARTITIONS TABLE_SCHEMA
|
PARTITIONS TABLE_SCHEMA
|
||||||
PLUGINS PLUGIN_NAME
|
PLUGINS PLUGIN_NAME
|
||||||
@ -1248,6 +1256,8 @@ REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA
|
|||||||
ROUTINES ROUTINE_SCHEMA
|
ROUTINES ROUTINE_SCHEMA
|
||||||
SCHEMATA SCHEMA_NAME
|
SCHEMATA SCHEMA_NAME
|
||||||
SCHEMA_PRIVILEGES TABLE_SCHEMA
|
SCHEMA_PRIVILEGES TABLE_SCHEMA
|
||||||
|
SESSION_STATUS VARIABLE_NAME
|
||||||
|
SESSION_VARIABLES VARIABLE_NAME
|
||||||
STATISTICS TABLE_SCHEMA
|
STATISTICS TABLE_SCHEMA
|
||||||
TABLES TABLE_SCHEMA
|
TABLES TABLE_SCHEMA
|
||||||
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
|
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
|
||||||
@ -1278,6 +1288,8 @@ COLUMN_PRIVILEGES TABLE_SCHEMA
|
|||||||
ENGINES ENGINE
|
ENGINES ENGINE
|
||||||
EVENTS EVENT_SCHEMA
|
EVENTS EVENT_SCHEMA
|
||||||
FILES TABLE_SCHEMA
|
FILES TABLE_SCHEMA
|
||||||
|
GLOBAL_STATUS VARIABLE_NAME
|
||||||
|
GLOBAL_VARIABLES VARIABLE_NAME
|
||||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||||
PARTITIONS TABLE_SCHEMA
|
PARTITIONS TABLE_SCHEMA
|
||||||
PLUGINS PLUGIN_NAME
|
PLUGINS PLUGIN_NAME
|
||||||
@ -1286,6 +1298,8 @@ REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA
|
|||||||
ROUTINES ROUTINE_SCHEMA
|
ROUTINES ROUTINE_SCHEMA
|
||||||
SCHEMATA SCHEMA_NAME
|
SCHEMATA SCHEMA_NAME
|
||||||
SCHEMA_PRIVILEGES TABLE_SCHEMA
|
SCHEMA_PRIVILEGES TABLE_SCHEMA
|
||||||
|
SESSION_STATUS VARIABLE_NAME
|
||||||
|
SESSION_VARIABLES VARIABLE_NAME
|
||||||
STATISTICS TABLE_SCHEMA
|
STATISTICS TABLE_SCHEMA
|
||||||
TABLES TABLE_SCHEMA
|
TABLES TABLE_SCHEMA
|
||||||
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
|
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
|
||||||
|
@ -13,6 +13,8 @@ COLUMN_PRIVILEGES
|
|||||||
ENGINES
|
ENGINES
|
||||||
EVENTS
|
EVENTS
|
||||||
FILES
|
FILES
|
||||||
|
GLOBAL_STATUS
|
||||||
|
GLOBAL_VARIABLES
|
||||||
KEY_COLUMN_USAGE
|
KEY_COLUMN_USAGE
|
||||||
PARTITIONS
|
PARTITIONS
|
||||||
PLUGINS
|
PLUGINS
|
||||||
@ -21,6 +23,8 @@ REFERENTIAL_CONSTRAINTS
|
|||||||
ROUTINES
|
ROUTINES
|
||||||
SCHEMATA
|
SCHEMATA
|
||||||
SCHEMA_PRIVILEGES
|
SCHEMA_PRIVILEGES
|
||||||
|
SESSION_STATUS
|
||||||
|
SESSION_VARIABLES
|
||||||
STATISTICS
|
STATISTICS
|
||||||
TABLES
|
TABLES
|
||||||
TABLE_CONSTRAINTS
|
TABLE_CONSTRAINTS
|
||||||
|
@ -87,6 +87,8 @@ Database: information_schema
|
|||||||
| ENGINES |
|
| ENGINES |
|
||||||
| EVENTS |
|
| EVENTS |
|
||||||
| FILES |
|
| FILES |
|
||||||
|
| GLOBAL_STATUS |
|
||||||
|
| GLOBAL_VARIABLES |
|
||||||
| KEY_COLUMN_USAGE |
|
| KEY_COLUMN_USAGE |
|
||||||
| PARTITIONS |
|
| PARTITIONS |
|
||||||
| PLUGINS |
|
| PLUGINS |
|
||||||
@ -95,6 +97,8 @@ Database: information_schema
|
|||||||
| ROUTINES |
|
| ROUTINES |
|
||||||
| SCHEMATA |
|
| SCHEMATA |
|
||||||
| SCHEMA_PRIVILEGES |
|
| SCHEMA_PRIVILEGES |
|
||||||
|
| SESSION_STATUS |
|
||||||
|
| SESSION_VARIABLES |
|
||||||
| STATISTICS |
|
| STATISTICS |
|
||||||
| TABLES |
|
| TABLES |
|
||||||
| TABLE_CONSTRAINTS |
|
| TABLE_CONSTRAINTS |
|
||||||
@ -115,6 +119,8 @@ Database: INFORMATION_SCHEMA
|
|||||||
| ENGINES |
|
| ENGINES |
|
||||||
| EVENTS |
|
| EVENTS |
|
||||||
| FILES |
|
| FILES |
|
||||||
|
| GLOBAL_STATUS |
|
||||||
|
| GLOBAL_VARIABLES |
|
||||||
| KEY_COLUMN_USAGE |
|
| KEY_COLUMN_USAGE |
|
||||||
| PARTITIONS |
|
| PARTITIONS |
|
||||||
| PLUGINS |
|
| PLUGINS |
|
||||||
@ -123,6 +129,8 @@ Database: INFORMATION_SCHEMA
|
|||||||
| ROUTINES |
|
| ROUTINES |
|
||||||
| SCHEMATA |
|
| SCHEMATA |
|
||||||
| SCHEMA_PRIVILEGES |
|
| SCHEMA_PRIVILEGES |
|
||||||
|
| SESSION_STATUS |
|
||||||
|
| SESSION_VARIABLES |
|
||||||
| STATISTICS |
|
| STATISTICS |
|
||||||
| TABLES |
|
| TABLES |
|
||||||
| TABLE_CONSTRAINTS |
|
| TABLE_CONSTRAINTS |
|
||||||
|
@ -267,5 +267,30 @@ select * from t2;
|
|||||||
id last_id
|
id last_id
|
||||||
4 0
|
4 0
|
||||||
8 0
|
8 0
|
||||||
drop table t1, t2;
|
drop table t1;
|
||||||
drop function insid;
|
drop function insid;
|
||||||
|
truncate table t2;
|
||||||
|
create table t1 (n int primary key auto_increment not null,
|
||||||
|
b int, unique(b));
|
||||||
|
create procedure foo()
|
||||||
|
begin
|
||||||
|
insert into t1 values(null,10);
|
||||||
|
insert ignore into t1 values(null,10);
|
||||||
|
insert ignore into t1 values(null,10);
|
||||||
|
insert into t2 values(null,3);
|
||||||
|
end|
|
||||||
|
call foo();
|
||||||
|
select * from t1;
|
||||||
|
n b
|
||||||
|
1 10
|
||||||
|
select * from t2;
|
||||||
|
id last_id
|
||||||
|
1 3
|
||||||
|
select * from t1;
|
||||||
|
n b
|
||||||
|
1 10
|
||||||
|
select * from t2;
|
||||||
|
id last_id
|
||||||
|
1 3
|
||||||
|
drop table t1, t2;
|
||||||
|
drop procedure foo;
|
||||||
|
@ -28,7 +28,7 @@ day id category name
|
|||||||
2003-03-22 2416 a bbbbb
|
2003-03-22 2416 a bbbbb
|
||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
slave-bin.000001 1248
|
slave-bin.000001 1276
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t3;
|
drop table t3;
|
||||||
@ -39,7 +39,7 @@ set global sql_slave_skip_counter=1;
|
|||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
||||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 1765 # # master-bin.000001 Yes Yes # 0 0 1765 # None 0 No #
|
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 1793 # # master-bin.000001 Yes Yes # 0 0 1793 # None 0 No #
|
||||||
set sql_log_bin=0;
|
set sql_log_bin=0;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
set sql_log_bin=1;
|
set sql_log_bin=1;
|
||||||
@ -49,7 +49,7 @@ change master to master_user='test';
|
|||||||
change master to master_user='root';
|
change master to master_user='root';
|
||||||
show slave status;
|
show slave status;
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
||||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 1800 # # master-bin.000001 No No # 0 0 1800 # None 0 No #
|
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 1828 # # master-bin.000001 No No # 0 0 1828 # None 0 No #
|
||||||
set global sql_slave_skip_counter=1;
|
set global sql_slave_skip_counter=1;
|
||||||
start slave;
|
start slave;
|
||||||
set sql_log_bin=0;
|
set sql_log_bin=0;
|
||||||
|
@ -30,16 +30,16 @@ a b
|
|||||||
2 2
|
2 2
|
||||||
3 3
|
3 3
|
||||||
4 4
|
4 4
|
||||||
7 5
|
5 5
|
||||||
10 6
|
6 6
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 1
|
1 1
|
||||||
2 2
|
2 2
|
||||||
3 3
|
3 3
|
||||||
4 4
|
4 4
|
||||||
7 5
|
5 5
|
||||||
10 6
|
6 6
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a int unsigned not null auto_increment primary key,
|
a int unsigned not null auto_increment primary key,
|
||||||
|
@ -5,9 +5,6 @@ reset slave;
|
|||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
SET BINLOG_FORMAT=MIXED;
|
SET BINLOG_FORMAT=MIXED;
|
||||||
SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
|
||||||
@@GLOBAL.BINLOG_FORMAT @@SESSION.BINLOG_FORMAT
|
|
||||||
STATEMENT MIXED
|
|
||||||
SET GLOBAL BINLOG_FORMAT=MIXED;
|
SET GLOBAL BINLOG_FORMAT=MIXED;
|
||||||
SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
||||||
@@GLOBAL.BINLOG_FORMAT @@SESSION.BINLOG_FORMAT
|
@@GLOBAL.BINLOG_FORMAT @@SESSION.BINLOG_FORMAT
|
||||||
|
@ -60,3 +60,43 @@ master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
|
|||||||
master-bin.000001 102 Query 1 188 use `test`; CREATE TABLE t1 (a INT)
|
master-bin.000001 102 Query 1 188 use `test`; CREATE TABLE t1 (a INT)
|
||||||
master-bin.000001 188 Table_map 1 227 table_id: # (test.t1)
|
master-bin.000001 188 Table_map 1 227 table_id: # (test.t1)
|
||||||
master-bin.000001 227 Write_rows 1 266 table_id: # flags: STMT_END_F
|
master-bin.000001 227 Write_rows 1 266 table_id: # flags: STMT_END_F
|
||||||
|
DROP TABLE t1;
|
||||||
|
================ Test for BUG#17620 ================
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
**** On Slave ****
|
||||||
|
SET GLOBAL QUERY_CACHE_SIZE=0;
|
||||||
|
**** On Master ****
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
**** On Slave ****
|
||||||
|
SET GLOBAL QUERY_CACHE_SIZE=16*1024*1024;
|
||||||
|
**** On Master ****
|
||||||
|
INSERT INTO t1 VALUES (4),(5),(6);
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
**** On Master ****
|
||||||
|
INSERT INTO t1 VALUES (7),(8),(9);
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -5,7 +5,10 @@ reset slave;
|
|||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
SET BINLOG_FORMAT=ROW;
|
SET @@BINLOG_FORMAT = ROW;
|
||||||
|
SELECT @@BINLOG_FORMAT;
|
||||||
|
@@BINLOG_FORMAT
|
||||||
|
ROW
|
||||||
**** Partition RANGE testing ****
|
**** Partition RANGE testing ****
|
||||||
CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255),
|
CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(255),
|
||||||
bc CHAR(255), d DECIMAL(10,4) DEFAULT 0,
|
bc CHAR(255), d DECIMAL(10,4) DEFAULT 0,
|
||||||
|
381
mysql-test/r/rpl_row_tabledefs_2myisam.result
Normal file
381
mysql-test/r/rpl_row_tabledefs_2myisam.result
Normal file
@ -0,0 +1,381 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
STOP SLAVE;
|
||||||
|
SET GLOBAL SQL_MODE='STRICT_ALL_TABLES';
|
||||||
|
START SLAVE;
|
||||||
|
CREATE TABLE t1_int (a INT PRIMARY KEY, b INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t1_bit (a INT PRIMARY KEY, b INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t1_char (a INT PRIMARY KEY, b INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t1_nodef (a INT PRIMARY KEY, b INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t4 (a INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t5 (a INT, b INT, c INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t6 (a INT, b INT, c INT) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t7 (a INT NOT NULL) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t8 (a INT NOT NULL) ENGINE='MyISAM';
|
||||||
|
CREATE TABLE t9 (a INT) ENGINE='MyISAM';
|
||||||
|
ALTER TABLE t1_int ADD x INT DEFAULT 42;
|
||||||
|
ALTER TABLE t1_bit
|
||||||
|
ADD x BIT(3) DEFAULT b'011',
|
||||||
|
ADD y BIT(5) DEFAULT b'10101',
|
||||||
|
ADD z BIT(2) DEFAULT b'10';
|
||||||
|
ALTER TABLE t1_char ADD x CHAR(20) DEFAULT 'Just a test';
|
||||||
|
ALTER TABLE t1_nodef ADD x INT NOT NULL;
|
||||||
|
ALTER TABLE t2 DROP b;
|
||||||
|
ALTER TABLE t4 MODIFY a FLOAT;
|
||||||
|
ALTER TABLE t5 MODIFY b FLOAT;
|
||||||
|
ALTER TABLE t6 MODIFY c FLOAT;
|
||||||
|
ALTER TABLE t7 ADD e1 INT, ADD e2 INT, ADD e3 INT, ADD e4 INT,
|
||||||
|
ADD e5 INT, ADD e6 INT, ADD e7 INT, ADD e8 INT;
|
||||||
|
ALTER TABLE t8 ADD e1 INT NOT NULL DEFAULT 0, ADD e2 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e3 INT NOT NULL DEFAULT 0, ADD e4 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e5 INT NOT NULL DEFAULT 0, ADD e6 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e7 INT NOT NULL DEFAULT 0, ADD e8 INT NOT NULL DEFAULT 0;
|
||||||
|
INSERT INTO t1_int VALUES (2, 4, 4711);
|
||||||
|
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
|
||||||
|
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
|
||||||
|
**** On Master ****
|
||||||
|
INSERT INTO t1_int VALUES (1,2);
|
||||||
|
INSERT INTO t1_int VALUES (2,5);
|
||||||
|
INSERT INTO t1_bit VALUES (1,2);
|
||||||
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
a b x
|
||||||
|
2 5 4711
|
||||||
|
1 2 42
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
|
2 5 5 1C 1
|
||||||
|
1 2 3 15 2
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
a b x
|
||||||
|
2 5 Foo is a bar
|
||||||
|
1 2 Just a test
|
||||||
|
**** On Master ****
|
||||||
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
a b x
|
||||||
|
2 10 4711
|
||||||
|
1 2 42
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
|
2 10 5 1C 1
|
||||||
|
1 2 3 15 2
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
a b x
|
||||||
|
2 10 Foo is a bar
|
||||||
|
1 2 Just a test
|
||||||
|
INSERT INTO t9 VALUES (2);
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1364
|
||||||
|
Last_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (2);
|
||||||
|
INSERT INTO t2 VALUES (2,4);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (4);
|
||||||
|
INSERT INTO t4 VALUES (4);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (5);
|
||||||
|
INSERT INTO t5 VALUES (5,10,25);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (6);
|
||||||
|
INSERT INTO t6 VALUES (6,12,36);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (6);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running Yes
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
INSERT INTO t7 VALUES (1),(2),(3);
|
||||||
|
INSERT INTO t8 VALUES (1),(2),(3);
|
||||||
|
SELECT * FROM t7;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t8;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t7;
|
||||||
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
|
1 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
2 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
3 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
SELECT * FROM t8;
|
||||||
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
|
1 0 0 0 0 0 0 0 0
|
||||||
|
2 0 0 0 0 0 0 0 0
|
||||||
|
3 0 0 0 0 0 0 0 0
|
||||||
|
**** On Master ****
|
||||||
|
TRUNCATE t1_nodef;
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
|
INSERT INTO t1_nodef VALUES (2,4);
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
**** On Slave ****
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2,3);
|
||||||
|
INSERT INTO t1_nodef VALUES (2,4,6);
|
||||||
|
**** On Master ****
|
||||||
|
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b
|
||||||
|
1 4
|
||||||
|
2 4
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b x
|
||||||
|
1 4 3
|
||||||
|
2 4 6
|
||||||
|
**** On Master ****
|
||||||
|
DELETE FROM t1_nodef WHERE a=2;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b
|
||||||
|
1 4
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b x
|
||||||
|
1 4 3
|
||||||
|
**** Cleanup ****
|
||||||
|
DROP TABLE IF EXISTS t1_int,t1_bit,t1_char,t1_nodef;
|
||||||
|
DROP TABLE IF EXISTS t2,t3,t4,t5,t6,t7,t8,t9;
|
381
mysql-test/r/rpl_row_tabledefs_3innodb.result
Normal file
381
mysql-test/r/rpl_row_tabledefs_3innodb.result
Normal file
@ -0,0 +1,381 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
STOP SLAVE;
|
||||||
|
SET GLOBAL SQL_MODE='STRICT_ALL_TABLES';
|
||||||
|
START SLAVE;
|
||||||
|
CREATE TABLE t1_int (a INT PRIMARY KEY, b INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t1_bit (a INT PRIMARY KEY, b INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t1_char (a INT PRIMARY KEY, b INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t1_nodef (a INT PRIMARY KEY, b INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t4 (a INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t5 (a INT, b INT, c INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t6 (a INT, b INT, c INT) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t7 (a INT NOT NULL) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t8 (a INT NOT NULL) ENGINE='InnoDB';
|
||||||
|
CREATE TABLE t9 (a INT) ENGINE='InnoDB';
|
||||||
|
ALTER TABLE t1_int ADD x INT DEFAULT 42;
|
||||||
|
ALTER TABLE t1_bit
|
||||||
|
ADD x BIT(3) DEFAULT b'011',
|
||||||
|
ADD y BIT(5) DEFAULT b'10101',
|
||||||
|
ADD z BIT(2) DEFAULT b'10';
|
||||||
|
ALTER TABLE t1_char ADD x CHAR(20) DEFAULT 'Just a test';
|
||||||
|
ALTER TABLE t1_nodef ADD x INT NOT NULL;
|
||||||
|
ALTER TABLE t2 DROP b;
|
||||||
|
ALTER TABLE t4 MODIFY a FLOAT;
|
||||||
|
ALTER TABLE t5 MODIFY b FLOAT;
|
||||||
|
ALTER TABLE t6 MODIFY c FLOAT;
|
||||||
|
ALTER TABLE t7 ADD e1 INT, ADD e2 INT, ADD e3 INT, ADD e4 INT,
|
||||||
|
ADD e5 INT, ADD e6 INT, ADD e7 INT, ADD e8 INT;
|
||||||
|
ALTER TABLE t8 ADD e1 INT NOT NULL DEFAULT 0, ADD e2 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e3 INT NOT NULL DEFAULT 0, ADD e4 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e5 INT NOT NULL DEFAULT 0, ADD e6 INT NOT NULL DEFAULT 0,
|
||||||
|
ADD e7 INT NOT NULL DEFAULT 0, ADD e8 INT NOT NULL DEFAULT 0;
|
||||||
|
INSERT INTO t1_int VALUES (2, 4, 4711);
|
||||||
|
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
|
||||||
|
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
|
||||||
|
**** On Master ****
|
||||||
|
INSERT INTO t1_int VALUES (1,2);
|
||||||
|
INSERT INTO t1_int VALUES (2,5);
|
||||||
|
INSERT INTO t1_bit VALUES (1,2);
|
||||||
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
a b x
|
||||||
|
2 5 4711
|
||||||
|
1 2 42
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
|
2 5 5 1C 1
|
||||||
|
1 2 3 15 2
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
a b x
|
||||||
|
2 5 Foo is a bar
|
||||||
|
1 2 Just a test
|
||||||
|
**** On Master ****
|
||||||
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
a b x
|
||||||
|
2 10 4711
|
||||||
|
1 2 42
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
|
2 10 5 1C 1
|
||||||
|
1 2 3 15 2
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
a b x
|
||||||
|
2 10 Foo is a bar
|
||||||
|
1 2 Just a test
|
||||||
|
INSERT INTO t9 VALUES (2);
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1364
|
||||||
|
Last_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (2);
|
||||||
|
INSERT INTO t2 VALUES (2,4);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (4);
|
||||||
|
INSERT INTO t4 VALUES (4);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (5);
|
||||||
|
INSERT INTO t5 VALUES (5,10,25);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (6);
|
||||||
|
INSERT INTO t6 VALUES (6,12,36);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 1522
|
||||||
|
Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
|
START SLAVE;
|
||||||
|
INSERT INTO t9 VALUES (6);
|
||||||
|
SHOW SLAVE STATUS;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running Yes
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
INSERT INTO t7 VALUES (1),(2),(3);
|
||||||
|
INSERT INTO t8 VALUES (1),(2),(3);
|
||||||
|
SELECT * FROM t7;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t8;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t7;
|
||||||
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
|
1 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
2 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
3 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
SELECT * FROM t8;
|
||||||
|
a e1 e2 e3 e4 e5 e6 e7 e8
|
||||||
|
1 0 0 0 0 0 0 0 0
|
||||||
|
2 0 0 0 0 0 0 0 0
|
||||||
|
3 0 0 0 0 0 0 0 0
|
||||||
|
**** On Master ****
|
||||||
|
TRUNCATE t1_nodef;
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
|
INSERT INTO t1_nodef VALUES (2,4);
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
**** On Slave ****
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2,3);
|
||||||
|
INSERT INTO t1_nodef VALUES (2,4,6);
|
||||||
|
**** On Master ****
|
||||||
|
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b
|
||||||
|
1 4
|
||||||
|
2 4
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b x
|
||||||
|
1 4 3
|
||||||
|
2 4 6
|
||||||
|
**** On Master ****
|
||||||
|
DELETE FROM t1_nodef WHERE a=2;
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b
|
||||||
|
1 4
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT * FROM t1_nodef;
|
||||||
|
a b x
|
||||||
|
1 4 3
|
||||||
|
**** Cleanup ****
|
||||||
|
DROP TABLE IF EXISTS t1_int,t1_bit,t1_char,t1_nodef;
|
||||||
|
DROP TABLE IF EXISTS t2,t3,t4,t5,t6,t7,t8,t9;
|
@ -4,21 +4,96 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
STOP SLAVE;
|
||||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
SET GLOBAL SQL_MODE='STRICT_ALL_TABLES';
|
||||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
START SLAVE;
|
||||||
CREATE TABLE t4 (a INT) ENGINE=myisam;
|
CREATE TABLE t1_int (a INT PRIMARY KEY, b INT) ENGINE='NDB';
|
||||||
CREATE TABLE t5 (a INT, b INT, c INT) ENGINE=myisam;
|
CREATE TABLE t1_bit (a INT PRIMARY KEY, b INT) ENGINE='NDB';
|
||||||
CREATE TABLE t6 (a INT, b INT, c INT) ENGINE=myisam;
|
CREATE TABLE t1_char (a INT PRIMARY KEY, b INT) ENGINE='NDB';
|
||||||
CREATE TABLE t9 (a INT PRIMARY KEY) ENGINE=myisam;
|
CREATE TABLE t1_nodef (a INT PRIMARY KEY, b INT) ENGINE='NDB';
|
||||||
ALTER TABLE t1 ADD x INT DEFAULT 42;
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE='NDB';
|
||||||
ALTER TABLE t2 ADD x INT DEFAULT 42 AFTER a;
|
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE='NDB';
|
||||||
ALTER TABLE t3 ADD x INT DEFAULT 42 FIRST;
|
CREATE TABLE t4 (a INT) ENGINE='NDB';
|
||||||
|
CREATE TABLE t5 (a INT, b INT, c INT) ENGINE='NDB';
|
||||||
|
CREATE TABLE t6 (a INT, b INT, c INT) ENGINE='NDB';
|
||||||
|
CREATE TABLE t9 (a INT) ENGINE='NDB';
|
||||||
|
ALTER TABLE t1_int ADD x INT DEFAULT 42;
|
||||||
|
ALTER TABLE t1_bit
|
||||||
|
ADD x BIT(3) DEFAULT b'011',
|
||||||
|
ADD y BIT(5) DEFAULT b'10101',
|
||||||
|
ADD z BIT(2) DEFAULT b'10';
|
||||||
|
ALTER TABLE t1_char ADD x CHAR(20) DEFAULT 'Just a test';
|
||||||
|
ALTER TABLE t1_nodef ADD x INT NOT NULL;
|
||||||
|
ALTER TABLE t2 DROP b;
|
||||||
ALTER TABLE t4 MODIFY a FLOAT;
|
ALTER TABLE t4 MODIFY a FLOAT;
|
||||||
ALTER TABLE t5 MODIFY b FLOAT;
|
ALTER TABLE t5 MODIFY b FLOAT;
|
||||||
ALTER TABLE t6 MODIFY c FLOAT;
|
ALTER TABLE t6 MODIFY c FLOAT;
|
||||||
INSERT INTO t9 VALUES (1);
|
INSERT INTO t1_int VALUES (2, 4, 4711);
|
||||||
INSERT INTO t1 VALUES (1,2);
|
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
|
||||||
|
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
|
||||||
|
**** On Master ****
|
||||||
|
INSERT INTO t1_int VALUES (1,2);
|
||||||
|
INSERT INTO t1_int VALUES (2,5);
|
||||||
|
INSERT INTO t1_bit VALUES (1,2);
|
||||||
|
INSERT INTO t1_bit VALUES (2,5);
|
||||||
|
INSERT INTO t1_char VALUES (1,2);
|
||||||
|
INSERT INTO t1_char VALUES (2,5);
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 5
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
a b x
|
||||||
|
1 2 42
|
||||||
|
2 5 42
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
|
1 2 3 15 2
|
||||||
|
2 5 3 15 2
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
a b x
|
||||||
|
1 2 Just a test
|
||||||
|
2 5 Just a test
|
||||||
|
**** On Master ****
|
||||||
|
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||||
|
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||||
|
SELECT * FROM t1_int;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
SELECT * FROM t1_bit;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
SELECT * FROM t1_char;
|
||||||
|
a b
|
||||||
|
1 2
|
||||||
|
2 10
|
||||||
|
**** On Slave ****
|
||||||
|
SELECT a,b,x FROM t1_int;
|
||||||
|
a b x
|
||||||
|
1 2 42
|
||||||
|
2 10 42
|
||||||
|
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||||
|
a b HEX(x) HEX(y) HEX(z)
|
||||||
|
1 2 3 15 2
|
||||||
|
2 10 3 15 2
|
||||||
|
SELECT a,b,x FROM t1_char;
|
||||||
|
a b x
|
||||||
|
1 2 Just a test
|
||||||
|
2 10 Just a test
|
||||||
|
INSERT INTO t9 VALUES (2);
|
||||||
|
INSERT INTO t1_nodef VALUES (1,2);
|
||||||
SHOW SLAVE STATUS;
|
SHOW SLAVE STATUS;
|
||||||
Slave_IO_State #
|
Slave_IO_State #
|
||||||
Master_Host 127.0.0.1
|
Master_Host 127.0.0.1
|
||||||
@ -26,7 +101,7 @@ Master_User root
|
|||||||
Master_Port MASTER_PORT
|
Master_Port MASTER_PORT
|
||||||
Connect_Retry 1
|
Connect_Retry 1
|
||||||
Master_Log_File master-bin.000001
|
Master_Log_File master-bin.000001
|
||||||
Read_Master_Log_Pos 1042
|
Read_Master_Log_Pos #
|
||||||
Relay_Log_File #
|
Relay_Log_File #
|
||||||
Relay_Log_Pos #
|
Relay_Log_Pos #
|
||||||
Relay_Master_Log_File master-bin.000001
|
Relay_Master_Log_File master-bin.000001
|
||||||
@ -38,10 +113,10 @@ Replicate_Do_Table
|
|||||||
Replicate_Ignore_Table
|
Replicate_Ignore_Table
|
||||||
Replicate_Wild_Do_Table
|
Replicate_Wild_Do_Table
|
||||||
Replicate_Wild_Ignore_Table
|
Replicate_Wild_Ignore_Table
|
||||||
Last_Errno 1454
|
Last_Errno 1364
|
||||||
Last_Error Table width mismatch - received 2 columns, test.t1 has 3 columns
|
Last_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef
|
||||||
Skip_Counter 0
|
Skip_Counter 0
|
||||||
Exec_Master_Log_Pos 968
|
Exec_Master_Log_Pos #
|
||||||
Relay_Log_Space #
|
Relay_Log_Space #
|
||||||
Until_Condition None
|
Until_Condition None
|
||||||
Until_Log_File
|
Until_Log_File
|
||||||
@ -64,7 +139,7 @@ Master_User root
|
|||||||
Master_Port MASTER_PORT
|
Master_Port MASTER_PORT
|
||||||
Connect_Retry 1
|
Connect_Retry 1
|
||||||
Master_Log_File master-bin.000001
|
Master_Log_File master-bin.000001
|
||||||
Read_Master_Log_Pos 1185
|
Read_Master_Log_Pos #
|
||||||
Relay_Log_File #
|
Relay_Log_File #
|
||||||
Relay_Log_Pos #
|
Relay_Log_Pos #
|
||||||
Relay_Master_Log_File master-bin.000001
|
Relay_Master_Log_File master-bin.000001
|
||||||
@ -76,48 +151,10 @@ Replicate_Do_Table
|
|||||||
Replicate_Ignore_Table
|
Replicate_Ignore_Table
|
||||||
Replicate_Wild_Do_Table
|
Replicate_Wild_Do_Table
|
||||||
Replicate_Wild_Ignore_Table
|
Replicate_Wild_Ignore_Table
|
||||||
Last_Errno 1454
|
Last_Errno 1514
|
||||||
Last_Error Table width mismatch - received 2 columns, test.t2 has 3 columns
|
Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns
|
||||||
Skip_Counter 0
|
Skip_Counter 0
|
||||||
Exec_Master_Log_Pos 1111
|
Exec_Master_Log_Pos #
|
||||||
Relay_Log_Space #
|
|
||||||
Until_Condition None
|
|
||||||
Until_Log_File
|
|
||||||
Until_Log_Pos 0
|
|
||||||
Master_SSL_Allowed No
|
|
||||||
Master_SSL_CA_File
|
|
||||||
Master_SSL_CA_Path
|
|
||||||
Master_SSL_Cert
|
|
||||||
Master_SSL_Cipher
|
|
||||||
Master_SSL_Key
|
|
||||||
Seconds_Behind_Master #
|
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
|
||||||
START SLAVE;
|
|
||||||
INSERT INTO t9 VALUES (3);
|
|
||||||
INSERT INTO t3 VALUES (3,6);
|
|
||||||
SHOW SLAVE STATUS;
|
|
||||||
Slave_IO_State #
|
|
||||||
Master_Host 127.0.0.1
|
|
||||||
Master_User root
|
|
||||||
Master_Port MASTER_PORT
|
|
||||||
Connect_Retry 1
|
|
||||||
Master_Log_File master-bin.000001
|
|
||||||
Read_Master_Log_Pos 1328
|
|
||||||
Relay_Log_File #
|
|
||||||
Relay_Log_Pos #
|
|
||||||
Relay_Master_Log_File master-bin.000001
|
|
||||||
Slave_IO_Running Yes
|
|
||||||
Slave_SQL_Running No
|
|
||||||
Replicate_Do_DB
|
|
||||||
Replicate_Ignore_DB
|
|
||||||
Replicate_Do_Table
|
|
||||||
Replicate_Ignore_Table
|
|
||||||
Replicate_Wild_Do_Table
|
|
||||||
Replicate_Wild_Ignore_Table
|
|
||||||
Last_Errno 1454
|
|
||||||
Last_Error Table width mismatch - received 2 columns, test.t3 has 3 columns
|
|
||||||
Skip_Counter 0
|
|
||||||
Exec_Master_Log_Pos 1254
|
|
||||||
Relay_Log_Space #
|
Relay_Log_Space #
|
||||||
Until_Condition None
|
Until_Condition None
|
||||||
Until_Log_File
|
Until_Log_File
|
||||||
@ -140,7 +177,7 @@ Master_User root
|
|||||||
Master_Port MASTER_PORT
|
Master_Port MASTER_PORT
|
||||||
Connect_Retry 1
|
Connect_Retry 1
|
||||||
Master_Log_File master-bin.000001
|
Master_Log_File master-bin.000001
|
||||||
Read_Master_Log_Pos 1466
|
Read_Master_Log_Pos #
|
||||||
Relay_Log_File #
|
Relay_Log_File #
|
||||||
Relay_Log_Pos #
|
Relay_Log_Pos #
|
||||||
Relay_Master_Log_File master-bin.000001
|
Relay_Master_Log_File master-bin.000001
|
||||||
@ -152,10 +189,10 @@ Replicate_Do_Table
|
|||||||
Replicate_Ignore_Table
|
Replicate_Ignore_Table
|
||||||
Replicate_Wild_Do_Table
|
Replicate_Wild_Do_Table
|
||||||
Replicate_Wild_Ignore_Table
|
Replicate_Wild_Ignore_Table
|
||||||
Last_Errno 1454
|
Last_Errno 1514
|
||||||
Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4
|
Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4
|
||||||
Skip_Counter 0
|
Skip_Counter 0
|
||||||
Exec_Master_Log_Pos 1397
|
Exec_Master_Log_Pos #
|
||||||
Relay_Log_Space #
|
Relay_Log_Space #
|
||||||
Until_Condition None
|
Until_Condition None
|
||||||
Until_Log_File
|
Until_Log_File
|
||||||
@ -178,7 +215,7 @@ Master_User root
|
|||||||
Master_Port MASTER_PORT
|
Master_Port MASTER_PORT
|
||||||
Connect_Retry 1
|
Connect_Retry 1
|
||||||
Master_Log_File master-bin.000001
|
Master_Log_File master-bin.000001
|
||||||
Read_Master_Log_Pos 1614
|
Read_Master_Log_Pos #
|
||||||
Relay_Log_File #
|
Relay_Log_File #
|
||||||
Relay_Log_Pos #
|
Relay_Log_Pos #
|
||||||
Relay_Master_Log_File master-bin.000001
|
Relay_Master_Log_File master-bin.000001
|
||||||
@ -190,10 +227,10 @@ Replicate_Do_Table
|
|||||||
Replicate_Ignore_Table
|
Replicate_Ignore_Table
|
||||||
Replicate_Wild_Do_Table
|
Replicate_Wild_Do_Table
|
||||||
Replicate_Wild_Ignore_Table
|
Replicate_Wild_Ignore_Table
|
||||||
Last_Errno 1454
|
Last_Errno 1514
|
||||||
Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4
|
Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4
|
||||||
Skip_Counter 0
|
Skip_Counter 0
|
||||||
Exec_Master_Log_Pos 1535
|
Exec_Master_Log_Pos #
|
||||||
Relay_Log_Space #
|
Relay_Log_Space #
|
||||||
Until_Condition None
|
Until_Condition None
|
||||||
Until_Log_File
|
Until_Log_File
|
||||||
@ -216,7 +253,7 @@ Master_User root
|
|||||||
Master_Port MASTER_PORT
|
Master_Port MASTER_PORT
|
||||||
Connect_Retry 1
|
Connect_Retry 1
|
||||||
Master_Log_File master-bin.000001
|
Master_Log_File master-bin.000001
|
||||||
Read_Master_Log_Pos 1762
|
Read_Master_Log_Pos #
|
||||||
Relay_Log_File #
|
Relay_Log_File #
|
||||||
Relay_Log_Pos #
|
Relay_Log_Pos #
|
||||||
Relay_Master_Log_File master-bin.000001
|
Relay_Master_Log_File master-bin.000001
|
||||||
@ -228,10 +265,10 @@ Replicate_Do_Table
|
|||||||
Replicate_Ignore_Table
|
Replicate_Ignore_Table
|
||||||
Replicate_Wild_Do_Table
|
Replicate_Wild_Do_Table
|
||||||
Replicate_Wild_Ignore_Table
|
Replicate_Wild_Ignore_Table
|
||||||
Last_Errno 1454
|
Last_Errno 1514
|
||||||
Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4
|
Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4
|
||||||
Skip_Counter 0
|
Skip_Counter 0
|
||||||
Exec_Master_Log_Pos 1683
|
Exec_Master_Log_Pos #
|
||||||
Relay_Log_Space #
|
Relay_Log_Space #
|
||||||
Until_Condition None
|
Until_Condition None
|
||||||
Until_Log_File
|
Until_Log_File
|
||||||
@ -245,4 +282,5 @@ Master_SSL_Key
|
|||||||
Seconds_Behind_Master #
|
Seconds_Behind_Master #
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t9;
|
DROP TABLE IF EXISTS t1_int,t1_bit,t1_char,t1_nodef;
|
||||||
|
DROP TABLE IF EXISTS t2,t3,t4,t5,t6,t9;
|
@ -7,6 +7,8 @@ start slave;
|
|||||||
drop database if exists mysqltest1;
|
drop database if exists mysqltest1;
|
||||||
create database mysqltest1;
|
create database mysqltest1;
|
||||||
use mysqltest1;
|
use mysqltest1;
|
||||||
|
set session binlog_format=row;
|
||||||
|
set global binlog_format=row;
|
||||||
show global variables like "binlog_format%";
|
show global variables like "binlog_format%";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
binlog_format ROW
|
binlog_format ROW
|
||||||
@ -358,6 +360,28 @@ count(*)
|
|||||||
select count(*) from t16;
|
select count(*) from t16;
|
||||||
count(*)
|
count(*)
|
||||||
3
|
3
|
||||||
|
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
|
||||||
|
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;
|
||||||
show binlog events from 102;
|
show binlog events from 102;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
||||||
@ -659,4 +683,323 @@ master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
|||||||
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t16)
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t16)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t16 values("try_66_")
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t16 values("try_66_")
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; DROP TABLE IF EXISTS t11
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE t11 (song VARCHAR(255))
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t11)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; INSERT INTO t11 VALUES('Careful With That Axe, Eugene')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; DROP TABLE IF EXISTS t12
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE t12 (data LONG)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t12)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
show binlog events from 102;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
||||||
|
master-bin.000001 # Query 1 # create database mysqltest1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE t1 (a varchar(100))
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("work_8_")
|
||||||
|
master-bin.000001 # User var 1 # @`string`=_latin1 0x656D657267656E63795F375F COLLATE latin1_swedish_ci
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select @'string'
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("work_9_")
|
||||||
|
master-bin.000001 # User var 1 # @`string`=_latin1 0x656D657267656E63795F375F COLLATE latin1_swedish_ci
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select @'string'
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("for_10_")
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select "yesterday_11_"
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("work_13_")
|
||||||
|
master-bin.000001 # User var 1 # @`string`=_latin1 0x656D657267656E63795F31325F COLLATE latin1_swedish_ci
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select @'string'
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("work_14_")
|
||||||
|
master-bin.000001 # User var 1 # @`string`=_latin1 0x656D657267656E63795F31325F COLLATE latin1_swedish_ci
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select @'string'
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("for_15_")
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select "yesterday_16_"
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values("work_18_")
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # User var 1 # @`string`=_latin1 0x656D657267656E63795F31375F COLLATE latin1_swedish_ci
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select @'string'
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select "yesterday_21_"
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # User var 1 # @`string`=_latin1 0x656D657267656E63795F31375F COLLATE latin1_swedish_ci
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select @'string'
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select "yesterday_24_"
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE `t2` (
|
||||||
|
`rpad(UUID(),100,' ')` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||||
|
)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE `t3` (
|
||||||
|
`1` varbinary(36) NOT NULL DEFAULT ''
|
||||||
|
)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t3)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE `t4` (
|
||||||
|
`a` varchar(100) DEFAULT NULL
|
||||||
|
)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t4)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t5 select * from t1 where 3 in (select 1 union select 2 union select curdate() union select 3)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t5)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo()
|
||||||
|
begin
|
||||||
|
insert into t1 values("work_25_");
|
||||||
|
insert into t1 values(concat("for_26_",UUID()));
|
||||||
|
insert into t1 select "yesterday_27_";
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` 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
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function foo3() returns bigint unsigned
|
||||||
|
begin
|
||||||
|
set session binlog_format=row; # rejected for stored funcs
|
||||||
|
insert into t1 values("alarm");
|
||||||
|
return 100;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo4(x varchar(100))
|
||||||
|
begin
|
||||||
|
insert into t1 values(concat("work_250_",x));
|
||||||
|
insert into t1 select "yesterday_270_";
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(concat("work_250_", NAME_CONST('x',_latin1'hello')))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select "yesterday_270_"
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(concat("work_250_", NAME_CONST('x',_latin1'world')))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 select "yesterday_270_"
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function foo3
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function foo3() returns bigint unsigned
|
||||||
|
begin
|
||||||
|
insert into t1 values("foo3_32_");
|
||||||
|
call foo();
|
||||||
|
return 100;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function foo4() returns bigint unsigned
|
||||||
|
begin
|
||||||
|
insert into t2 select foo3();
|
||||||
|
return 100;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function foo5() returns bigint unsigned
|
||||||
|
begin
|
||||||
|
insert into t2 select UUID();
|
||||||
|
return 100;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function foo6(x varchar(100)) returns bigint unsigned
|
||||||
|
begin
|
||||||
|
insert into t2 select x;
|
||||||
|
return 100;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `foo6`(_latin1'foo6_1_')
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select uuid()
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t11 (data varchar(255))
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t11)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger t11_bi before insert on t11 for each row
|
||||||
|
begin
|
||||||
|
set NEW.data = concat(NEW.data,UUID());
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t11)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t20 select * from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t21 select * from t2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t22 select * from t3
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1,t2,t3
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int primary key auto_increment, b varchar(100))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 (a int primary key auto_increment, b varchar(100))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t3 (b varchar(100))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function f (x varchar(100)) returns int deterministic
|
||||||
|
begin
|
||||||
|
insert into t1 values(null,x);
|
||||||
|
insert into t2 values(null,x);
|
||||||
|
return 1;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=3
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(null,"try_44_")
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t12 select * from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int, b varchar(100), key(a))
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f`(_latin1'try_45_')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t13 select * from t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int primary key auto_increment, b varchar(100))
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; create table t14 (unique (a)) select * from t2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; truncate table t2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function f1 (x varchar(100)) returns int deterministic
|
||||||
|
begin
|
||||||
|
insert into t1 values(null,x);
|
||||||
|
return 1;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function f2 (x varchar(100)) returns int deterministic
|
||||||
|
begin
|
||||||
|
insert into t2 values(null,x);
|
||||||
|
return 1;
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t3)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` 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
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f1`(_latin1'try_53_')
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `f2`(_latin1'try_54_')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; drop function f2
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1 for each row
|
||||||
|
begin
|
||||||
|
insert into t2 values(null,"try_55_");
|
||||||
|
end
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t1)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t2)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: #
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t1 modify a int, drop primary key
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(null,"try_57_")
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE `t16` (
|
||||||
|
`UUID()` varchar(36) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||||
|
)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t16)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t16)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t16 values("try_66_")
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; DROP TABLE IF EXISTS t11
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE t11 (song VARCHAR(255))
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t11)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; INSERT INTO t11 VALUES('Careful With That Axe, Eugene')
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; DROP TABLE IF EXISTS t12
|
||||||
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE t12 (data LONG)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t12)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
drop database mysqltest1;
|
drop database mysqltest1;
|
||||||
|
@ -3,6 +3,10 @@ show status like 'Table_lock%';
|
|||||||
Variable_name Value
|
Variable_name Value
|
||||||
Table_locks_immediate 0
|
Table_locks_immediate 0
|
||||||
Table_locks_waited 0
|
Table_locks_waited 0
|
||||||
|
select * from information_schema.session_status where variable_name like 'Table_lock%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
TABLE_LOCKS_IMMEDIATE 0.0000000
|
||||||
|
TABLE_LOCKS_WAITED 0.0000000
|
||||||
SET SQL_LOG_BIN=0;
|
SET SQL_LOG_BIN=0;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1(n int) engine=myisam;
|
create table t1(n int) engine=myisam;
|
||||||
@ -16,6 +20,10 @@ show status like 'Table_lock%';
|
|||||||
Variable_name Value
|
Variable_name Value
|
||||||
Table_locks_immediate 3
|
Table_locks_immediate 3
|
||||||
Table_locks_waited 1
|
Table_locks_waited 1
|
||||||
|
select * from information_schema.session_status where variable_name like 'Table_lock%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
TABLE_LOCKS_IMMEDIATE 3.0000000
|
||||||
|
TABLE_LOCKS_WAITED 1.0000000
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select 1;
|
select 1;
|
||||||
1
|
1
|
||||||
@ -53,21 +61,36 @@ FLUSH STATUS;
|
|||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 1
|
Max_used_connections 1
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_USED_CONNECTIONS 2.0000000
|
||||||
SET @save_thread_cache_size=@@thread_cache_size;
|
SET @save_thread_cache_size=@@thread_cache_size;
|
||||||
SET GLOBAL thread_cache_size=3;
|
SET GLOBAL thread_cache_size=3;
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 3
|
Max_used_connections 3
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_USED_CONNECTIONS 4.0000000
|
||||||
FLUSH STATUS;
|
FLUSH STATUS;
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 2
|
Max_used_connections 2
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_USED_CONNECTIONS 3.0000000
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 3
|
Max_used_connections 3
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_USED_CONNECTIONS 4.0000000
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 4
|
Max_used_connections 4
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_USED_CONNECTIONS 5.0000000
|
||||||
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
||||||
show status like 'com_show_status';
|
show status like 'com_show_status';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
|
@ -103,21 +103,36 @@ set max_join_size=100;
|
|||||||
show variables like 'max_join_size';
|
show variables like 'max_join_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
max_join_size 100
|
max_join_size 100
|
||||||
|
select * from information_schema.session_variables where variable_name like 'max_join_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_JOIN_SIZE 100
|
||||||
show global variables like 'max_join_size';
|
show global variables like 'max_join_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
max_join_size 10
|
max_join_size 10
|
||||||
|
select * from information_schema.global_variables where variable_name like 'max_join_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_JOIN_SIZE 10
|
||||||
set GLOBAL max_join_size=2000;
|
set GLOBAL max_join_size=2000;
|
||||||
show global variables like 'max_join_size';
|
show global variables like 'max_join_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
max_join_size 2000
|
max_join_size 2000
|
||||||
|
select * from information_schema.global_variables where variable_name like 'max_join_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_JOIN_SIZE 2000
|
||||||
set max_join_size=DEFAULT;
|
set max_join_size=DEFAULT;
|
||||||
show variables like 'max_join_size';
|
show variables like 'max_join_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
max_join_size 2000
|
max_join_size 2000
|
||||||
|
select * from information_schema.session_variables where variable_name like 'max_join_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_JOIN_SIZE 2000
|
||||||
set GLOBAL max_join_size=DEFAULT;
|
set GLOBAL max_join_size=DEFAULT;
|
||||||
show global variables like 'max_join_size';
|
show global variables like 'max_join_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
max_join_size HA_POS_ERROR
|
max_join_size HA_POS_ERROR
|
||||||
|
select * from information_schema.global_variables where variable_name like 'max_join_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MAX_JOIN_SIZE HA_POS_ERROR
|
||||||
set @@max_join_size=1000, @@global.max_join_size=2000;
|
set @@max_join_size=1000, @@global.max_join_size=2000;
|
||||||
select @@local.max_join_size, @@global.max_join_size;
|
select @@local.max_join_size, @@global.max_join_size;
|
||||||
@@local.max_join_size @@global.max_join_size
|
@@local.max_join_size @@global.max_join_size
|
||||||
@ -149,14 +164,23 @@ set global concurrent_insert=2;
|
|||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
concurrent_insert 2
|
concurrent_insert 2
|
||||||
|
select * from information_schema.session_variables where variable_name like 'concurrent_insert';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
CONCURRENT_INSERT 2
|
||||||
set global concurrent_insert=1;
|
set global concurrent_insert=1;
|
||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
concurrent_insert 1
|
concurrent_insert 1
|
||||||
|
select * from information_schema.session_variables where variable_name like 'concurrent_insert';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
CONCURRENT_INSERT 1
|
||||||
set global concurrent_insert=0;
|
set global concurrent_insert=0;
|
||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
concurrent_insert 0
|
concurrent_insert 0
|
||||||
|
select * from information_schema.session_variables where variable_name like 'concurrent_insert';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
CONCURRENT_INSERT 0
|
||||||
set global concurrent_insert=DEFAULT;
|
set global concurrent_insert=DEFAULT;
|
||||||
select @@concurrent_insert;
|
select @@concurrent_insert;
|
||||||
@@concurrent_insert
|
@@concurrent_insert
|
||||||
@ -165,26 +189,44 @@ set global timed_mutexes=ON;
|
|||||||
show variables like 'timed_mutexes';
|
show variables like 'timed_mutexes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
timed_mutexes ON
|
timed_mutexes ON
|
||||||
|
select * from information_schema.session_variables where variable_name like 'timed_mutexes';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
TIMED_MUTEXES ON
|
||||||
set global timed_mutexes=0;
|
set global timed_mutexes=0;
|
||||||
show variables like 'timed_mutexes';
|
show variables like 'timed_mutexes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
timed_mutexes OFF
|
timed_mutexes OFF
|
||||||
|
select * from information_schema.session_variables where variable_name like 'timed_mutexes';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
TIMED_MUTEXES OFF
|
||||||
set storage_engine=MYISAM, storage_engine="HEAP", global storage_engine="MERGE";
|
set storage_engine=MYISAM, storage_engine="HEAP", global storage_engine="MERGE";
|
||||||
show local variables like 'storage_engine';
|
show local variables like 'storage_engine';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
storage_engine MEMORY
|
storage_engine MEMORY
|
||||||
|
select * from information_schema.session_variables where variable_name like 'storage_engine';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
STORAGE_ENGINE MEMORY
|
||||||
show global variables like 'storage_engine';
|
show global variables like 'storage_engine';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
storage_engine MRG_MYISAM
|
storage_engine MRG_MYISAM
|
||||||
|
select * from information_schema.global_variables where variable_name like 'storage_engine';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
STORAGE_ENGINE MRG_MYISAM
|
||||||
set GLOBAL query_cache_size=100000;
|
set GLOBAL query_cache_size=100000;
|
||||||
set GLOBAL myisam_max_sort_file_size=2000000;
|
set GLOBAL myisam_max_sort_file_size=2000000;
|
||||||
show global variables like 'myisam_max_sort_file_size';
|
show global variables like 'myisam_max_sort_file_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
myisam_max_sort_file_size 1048576
|
myisam_max_sort_file_size 1048576
|
||||||
|
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MYISAM_MAX_SORT_FILE_SIZE 1048576
|
||||||
set GLOBAL myisam_max_sort_file_size=default;
|
set GLOBAL myisam_max_sort_file_size=default;
|
||||||
show variables like 'myisam_max_sort_file_size';
|
show variables like 'myisam_max_sort_file_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
myisam_max_sort_file_size FILE_SIZE
|
myisam_max_sort_file_size FILE_SIZE
|
||||||
|
select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MYISAM_MAX_SORT_FILE_SIZE FILE_SIZE
|
||||||
set global net_retry_count=10, session net_retry_count=10;
|
set global net_retry_count=10, session net_retry_count=10;
|
||||||
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
|
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
|
||||||
set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600;
|
set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600;
|
||||||
@ -194,12 +236,24 @@ net_buffer_length 1024
|
|||||||
net_read_timeout 300
|
net_read_timeout 300
|
||||||
net_retry_count 10
|
net_retry_count 10
|
||||||
net_write_timeout 200
|
net_write_timeout 200
|
||||||
|
select * from information_schema.global_variables where variable_name like 'net_%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
NET_BUFFER_LENGTH 1024
|
||||||
|
NET_READ_TIMEOUT 300
|
||||||
|
NET_RETRY_COUNT 10
|
||||||
|
NET_WRITE_TIMEOUT 200
|
||||||
show session variables like 'net_%';
|
show session variables like 'net_%';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
net_buffer_length 2048
|
net_buffer_length 2048
|
||||||
net_read_timeout 600
|
net_read_timeout 600
|
||||||
net_retry_count 10
|
net_retry_count 10
|
||||||
net_write_timeout 500
|
net_write_timeout 500
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
NET_BUFFER_LENGTH 2048
|
||||||
|
NET_READ_TIMEOUT 600
|
||||||
|
NET_RETRY_COUNT 10
|
||||||
|
NET_WRITE_TIMEOUT 500
|
||||||
set session net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000;
|
set session net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000;
|
||||||
show global variables like 'net_%';
|
show global variables like 'net_%';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
@ -207,24 +261,45 @@ net_buffer_length 1024
|
|||||||
net_read_timeout 900
|
net_read_timeout 900
|
||||||
net_retry_count 10
|
net_retry_count 10
|
||||||
net_write_timeout 1000
|
net_write_timeout 1000
|
||||||
|
select * from information_schema.global_variables where variable_name like 'net_%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
NET_BUFFER_LENGTH 1024
|
||||||
|
NET_READ_TIMEOUT 900
|
||||||
|
NET_RETRY_COUNT 10
|
||||||
|
NET_WRITE_TIMEOUT 1000
|
||||||
show session variables like 'net_%';
|
show session variables like 'net_%';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
net_buffer_length 7168
|
net_buffer_length 7168
|
||||||
net_read_timeout 600
|
net_read_timeout 600
|
||||||
net_retry_count 10
|
net_retry_count 10
|
||||||
net_write_timeout 500
|
net_write_timeout 500
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
NET_BUFFER_LENGTH 7168
|
||||||
|
NET_READ_TIMEOUT 600
|
||||||
|
NET_RETRY_COUNT 10
|
||||||
|
NET_WRITE_TIMEOUT 500
|
||||||
set net_buffer_length=1;
|
set net_buffer_length=1;
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
net_buffer_length 1024
|
net_buffer_length 1024
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
NET_BUFFER_LENGTH 1024
|
||||||
set net_buffer_length=2000000000;
|
set net_buffer_length=2000000000;
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
net_buffer_length 1048576
|
net_buffer_length 1048576
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
NET_BUFFER_LENGTH 1048576
|
||||||
set character set cp1251_koi8;
|
set character set cp1251_koi8;
|
||||||
show variables like "character_set_client";
|
show variables like "character_set_client";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
character_set_client cp1251
|
character_set_client cp1251
|
||||||
|
select * from information_schema.session_variables where variable_name like 'character_set_client';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
CHARACTER_SET_CLIENT cp1251
|
||||||
select @@timestamp>0;
|
select @@timestamp>0;
|
||||||
@@timestamp>0
|
@@timestamp>0
|
||||||
1
|
1
|
||||||
@ -239,6 +314,13 @@ query_prealloc_size 8192
|
|||||||
range_alloc_block_size 2048
|
range_alloc_block_size 2048
|
||||||
transaction_alloc_block_size 8192
|
transaction_alloc_block_size 8192
|
||||||
transaction_prealloc_size 4096
|
transaction_prealloc_size 4096
|
||||||
|
select * from information_schema.session_variables where variable_name like '%alloc%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
QUERY_ALLOC_BLOCK_SIZE 8192
|
||||||
|
QUERY_PREALLOC_SIZE 8192
|
||||||
|
RANGE_ALLOC_BLOCK_SIZE 2048
|
||||||
|
TRANSACTION_ALLOC_BLOCK_SIZE 8192
|
||||||
|
TRANSACTION_PREALLOC_SIZE 4096
|
||||||
set @@range_alloc_block_size=1024*16;
|
set @@range_alloc_block_size=1024*16;
|
||||||
set @@query_alloc_block_size=1024*17+2;
|
set @@query_alloc_block_size=1024*17+2;
|
||||||
set @@query_prealloc_size=1024*18;
|
set @@query_prealloc_size=1024*18;
|
||||||
@ -254,6 +336,13 @@ query_prealloc_size 18432
|
|||||||
range_alloc_block_size 16384
|
range_alloc_block_size 16384
|
||||||
transaction_alloc_block_size 19456
|
transaction_alloc_block_size 19456
|
||||||
transaction_prealloc_size 20480
|
transaction_prealloc_size 20480
|
||||||
|
select * from information_schema.session_variables where variable_name like '%alloc%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
QUERY_ALLOC_BLOCK_SIZE 17408
|
||||||
|
QUERY_PREALLOC_SIZE 18432
|
||||||
|
RANGE_ALLOC_BLOCK_SIZE 16384
|
||||||
|
TRANSACTION_ALLOC_BLOCK_SIZE 19456
|
||||||
|
TRANSACTION_PREALLOC_SIZE 20480
|
||||||
set @@range_alloc_block_size=default;
|
set @@range_alloc_block_size=default;
|
||||||
set @@query_alloc_block_size=default, @@query_prealloc_size=default;
|
set @@query_alloc_block_size=default, @@query_prealloc_size=default;
|
||||||
set transaction_alloc_block_size=default, @@transaction_prealloc_size=default;
|
set transaction_alloc_block_size=default, @@transaction_prealloc_size=default;
|
||||||
@ -264,6 +353,13 @@ query_prealloc_size 8192
|
|||||||
range_alloc_block_size 2048
|
range_alloc_block_size 2048
|
||||||
transaction_alloc_block_size 8192
|
transaction_alloc_block_size 8192
|
||||||
transaction_prealloc_size 4096
|
transaction_prealloc_size 4096
|
||||||
|
select * from information_schema.session_variables where variable_name like '%alloc%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
QUERY_ALLOC_BLOCK_SIZE 8192
|
||||||
|
QUERY_PREALLOC_SIZE 8192
|
||||||
|
RANGE_ALLOC_BLOCK_SIZE 2048
|
||||||
|
TRANSACTION_ALLOC_BLOCK_SIZE 8192
|
||||||
|
TRANSACTION_PREALLOC_SIZE 4096
|
||||||
SELECT @@version LIKE 'non-existent';
|
SELECT @@version LIKE 'non-existent';
|
||||||
@@version LIKE 'non-existent'
|
@@version LIKE 'non-existent'
|
||||||
0
|
0
|
||||||
@ -485,6 +581,9 @@ set global myisam_max_sort_file_size=4294967296;
|
|||||||
show global variables like 'myisam_max_sort_file_size';
|
show global variables like 'myisam_max_sort_file_size';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
myisam_max_sort_file_size MAX_FILE_SIZE
|
myisam_max_sort_file_size MAX_FILE_SIZE
|
||||||
|
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MYISAM_MAX_SORT_FILE_SIZE MAX_FILE_SIZE
|
||||||
set global myisam_max_sort_file_size=default;
|
set global myisam_max_sort_file_size=default;
|
||||||
select @@global.max_user_connections,@@local.max_join_size;
|
select @@global.max_user_connections,@@local.max_join_size;
|
||||||
@@global.max_user_connections @@local.max_join_size
|
@@global.max_user_connections @@local.max_join_size
|
||||||
@ -524,18 +623,30 @@ set @tstlw = @@log_warnings;
|
|||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
log_warnings 1
|
log_warnings 1
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
LOG_WARNINGS 1
|
||||||
set global log_warnings = 0;
|
set global log_warnings = 0;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
log_warnings 0
|
log_warnings 0
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
LOG_WARNINGS 0
|
||||||
set global log_warnings = 42;
|
set global log_warnings = 42;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
log_warnings 42
|
log_warnings 42
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
LOG_WARNINGS 42
|
||||||
set global log_warnings = @tstlw;
|
set global log_warnings = @tstlw;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
log_warnings 1
|
log_warnings 1
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
LOG_WARNINGS 1
|
||||||
create table t1 (
|
create table t1 (
|
||||||
c1 tinyint,
|
c1 tinyint,
|
||||||
c2 smallint,
|
c2 smallint,
|
||||||
@ -567,10 +678,16 @@ SET GLOBAL MYISAM_DATA_POINTER_SIZE= 7;
|
|||||||
SHOW VARIABLES LIKE 'MYISAM_DATA_POINTER_SIZE';
|
SHOW VARIABLES LIKE 'MYISAM_DATA_POINTER_SIZE';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
myisam_data_pointer_size 7
|
myisam_data_pointer_size 7
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'MYISAM_DATA_POINTER_SIZE';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
MYISAM_DATA_POINTER_SIZE 7
|
||||||
SET GLOBAL table_open_cache=-1;
|
SET GLOBAL table_open_cache=-1;
|
||||||
SHOW VARIABLES LIKE 'table_open_cache';
|
SHOW VARIABLES LIKE 'table_open_cache';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
table_open_cache 1
|
table_open_cache 1
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'table_open_cache';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
TABLE_OPEN_CACHE 1
|
||||||
SET GLOBAL table_open_cache=DEFAULT;
|
SET GLOBAL table_open_cache=DEFAULT;
|
||||||
set character_set_results=NULL;
|
set character_set_results=NULL;
|
||||||
select ifnull(@@character_set_results,"really null");
|
select ifnull(@@character_set_results,"really null");
|
||||||
@ -639,21 +756,36 @@ set @@sql_big_selects = 1;
|
|||||||
show variables like 'sql_big_selects';
|
show variables like 'sql_big_selects';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
sql_big_selects ON
|
sql_big_selects ON
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_big_selects';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
SQL_BIG_SELECTS ON
|
||||||
set @@sql_big_selects = @old_sql_big_selects;
|
set @@sql_big_selects = @old_sql_big_selects;
|
||||||
set @@sql_notes = 0, @@sql_warnings = 0;
|
set @@sql_notes = 0, @@sql_warnings = 0;
|
||||||
show variables like 'sql_notes';
|
show variables like 'sql_notes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
sql_notes OFF
|
sql_notes OFF
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_notes';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
SQL_NOTES OFF
|
||||||
show variables like 'sql_warnings';
|
show variables like 'sql_warnings';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
sql_warnings OFF
|
sql_warnings OFF
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_warnings';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
SQL_WARNINGS OFF
|
||||||
set @@sql_notes = 1, @@sql_warnings = 1;
|
set @@sql_notes = 1, @@sql_warnings = 1;
|
||||||
show variables like 'sql_notes';
|
show variables like 'sql_notes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
sql_notes ON
|
sql_notes ON
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_notes';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
SQL_NOTES ON
|
||||||
show variables like 'sql_warnings';
|
show variables like 'sql_warnings';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
sql_warnings ON
|
sql_warnings ON
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_warnings';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
SQL_WARNINGS ON
|
||||||
select @@system_time_zone;
|
select @@system_time_zone;
|
||||||
@@system_time_zone
|
@@system_time_zone
|
||||||
#
|
#
|
||||||
@ -667,12 +799,21 @@ select @@basedir, @@datadir, @@tmpdir;
|
|||||||
show variables like 'basedir';
|
show variables like 'basedir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
basedir #
|
basedir #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'basedir';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
BASEDIR #
|
||||||
show variables like 'datadir';
|
show variables like 'datadir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
datadir #
|
datadir #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'datadir';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
DATADIR #
|
||||||
show variables like 'tmpdir';
|
show variables like 'tmpdir';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
tmpdir #
|
tmpdir #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'tmpdir';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
TMPDIR #
|
||||||
select @@ssl_ca, @@ssl_capath, @@ssl_cert, @@ssl_cipher, @@ssl_key;
|
select @@ssl_ca, @@ssl_capath, @@ssl_cert, @@ssl_cipher, @@ssl_key;
|
||||||
@@ssl_ca @@ssl_capath @@ssl_cert @@ssl_cipher @@ssl_key
|
@@ssl_ca @@ssl_capath @@ssl_cert @@ssl_cipher @@ssl_key
|
||||||
# # # # #
|
# # # # #
|
||||||
@ -683,12 +824,22 @@ ssl_capath #
|
|||||||
ssl_cert #
|
ssl_cert #
|
||||||
ssl_cipher #
|
ssl_cipher #
|
||||||
ssl_key #
|
ssl_key #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'ssl%';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
SSL_CA #
|
||||||
|
SSL_CAPATH #
|
||||||
|
SSL_CERT #
|
||||||
|
SSL_CIPHER #
|
||||||
|
SSL_KEY #
|
||||||
select @@log_queries_not_using_indexes;
|
select @@log_queries_not_using_indexes;
|
||||||
@@log_queries_not_using_indexes
|
@@log_queries_not_using_indexes
|
||||||
0
|
0
|
||||||
show variables like 'log_queries_not_using_indexes';
|
show variables like 'log_queries_not_using_indexes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
log_queries_not_using_indexes OFF
|
log_queries_not_using_indexes OFF
|
||||||
|
select * from information_schema.session_variables where variable_name like 'log_queries_not_using_indexes';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
LOG_QUERIES_NOT_USING_INDEXES OFF
|
||||||
select @@"";
|
select @@"";
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '""' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '""' at line 1
|
||||||
select @@&;
|
select @@&;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# Taken FROM the select test
|
# Taken FROM the select test
|
||||||
#
|
#
|
||||||
-- source include/have_archive.inc
|
-- source include/have_archive.inc
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1,t2,t3;
|
drop table if exists t1,t2,t3;
|
||||||
|
9
mysql-test/t/binlog_statement_insert_delayed.test
Normal file
9
mysql-test/t/binlog_statement_insert_delayed.test
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# This test is to verify replication with INSERT DELAY through
|
||||||
|
# unrecommended STATEMENT binlog format
|
||||||
|
|
||||||
|
-- source include/not_embedded.inc
|
||||||
|
-- source include/have_binlog_format_statement.inc
|
||||||
|
-- disable_query_log
|
||||||
|
reset master; # get rid of previous tests binlog
|
||||||
|
-- enable_query_log
|
||||||
|
-- source extra/binlog_tests/binlog_insert_delayed.test
|
@ -13,6 +13,6 @@ drop table t1;
|
|||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed.inc
|
||||||
-- source extra/binlog_tests/binlog.test
|
-- source extra/binlog_tests/binlog.test
|
||||||
|
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/blackhole.test
|
-- source extra/binlog_tests/blackhole.test
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/ctype_cp932.test
|
-- source extra/binlog_tests/ctype_cp932.test
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# This is a wrapper for binlog.test so that the same test case can be used
|
# This is a wrapper for binlog.test so that the same test case can be used
|
||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/ctype_ucs_binlog.test
|
-- source extra/binlog_tests/ctype_ucs_binlog.test
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# This is a wrapper for binlog.test so that the same test case can be used
|
# This is a wrapper for binlog.test so that the same test case can be used
|
||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/drop_temp_table.test
|
-- source extra/binlog_tests/drop_temp_table.test
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# This is a wrapper for binlog.test so that the same test case can be used
|
# This is a wrapper for binlog.test so that the same test case can be used
|
||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/innodb_stat.test
|
-- source extra/binlog_tests/innodb_stat.test
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# This is a wrapper for binlog.test so that the same test case can be used
|
# This is a wrapper for binlog.test so that the same test case can be used
|
||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/insert_select-binlog.test
|
-- source extra/binlog_tests/insert_select-binlog.test
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This is a wrapper for binlog.test so that the same test case can be used
|
# This is a wrapper for binlog.test so that the same test case can be used
|
||||||
# For both statement and row based bin logs 9/19/2005 [jbm]
|
# For both statement and row based bin logs 9/19/2005 [jbm]
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/mix_innodb_myisam_binlog.test
|
-- source extra/binlog_tests/mix_innodb_myisam_binlog.test
|
||||||
|
|
||||||
# This piece below cannot be put into
|
# This piece below cannot be put into
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# inconsistency between binlog and the internal list of temp tables.
|
# inconsistency between binlog and the internal list of temp tables.
|
||||||
|
|
||||||
# This does not work for RBR yet.
|
# This does not work for RBR yet.
|
||||||
--source include/have_binlog_format_statement.inc
|
--source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This is a wrapper for binlog.test so that the same test case can be used
|
# This is a wrapper for binlog.test so that the same test case can be used
|
||||||
# For both statement and row based bin logs 11/07/2005 [jbm]
|
# For both statement and row based bin logs 11/07/2005 [jbm]
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/binlog_tests/ctype_cp932_binlog.test
|
-- source extra/binlog_tests/ctype_cp932_binlog.test
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
--replace_result ROW <format> STATEMENT <format>
|
--replace_result ROW <format> STATEMENT <format> MIXED <format>
|
||||||
SHOW GLOBAL VARIABLES LIKE "%_format%";
|
SHOW GLOBAL VARIABLES LIKE "%_format%";
|
||||||
--replace_result ROW <format> STATEMENT <format>
|
--replace_result ROW <format> STATEMENT <format> MIXED <format>
|
||||||
SHOW SESSION VARIABLES LIKE "%_format%";
|
SHOW SESSION VARIABLES LIKE "%_format%";
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -36,7 +36,7 @@ set datetime_format= '%H:%i:%s.%f %m-%d-%Y';
|
|||||||
set datetime_format= '%h:%i:%s %p %Y-%m-%d';
|
set datetime_format= '%h:%i:%s %p %Y-%m-%d';
|
||||||
set datetime_format= '%h:%i:%s.%f %p %Y-%m-%d';
|
set datetime_format= '%h:%i:%s.%f %p %Y-%m-%d';
|
||||||
|
|
||||||
--replace_result ROW <format> STATEMENT <format>
|
--replace_result ROW <format> STATEMENT <format> MIXED <format>
|
||||||
SHOW SESSION VARIABLES LIKE "%format";
|
SHOW SESSION VARIABLES LIKE "%format";
|
||||||
|
|
||||||
--error 1231
|
--error 1231
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# We are using .opt file since we need small binlog size
|
# We are using .opt file since we need small binlog size
|
||||||
# TODO: Need to look at making a row based version once the new row based client is completed. [jbm]
|
# TODO: Need to look at making a row based version once the new row based client is completed. [jbm]
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
# Embedded server doesn't support binlogging
|
# Embedded server doesn't support binlogging
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# and a few others.
|
# and a few others.
|
||||||
|
|
||||||
# TODO: Need to look at making row based version once new binlog client is complete.
|
# TODO: Need to look at making row based version once new binlog client is complete.
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
# Embedded server doesn't support binlogging
|
# Embedded server doesn't support binlogging
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
-- source include/have_ndb.inc
|
-- source include/have_ndb.inc
|
||||||
-- source include/have_multi_ndb.inc
|
-- source include/have_multi_ndb.inc
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
connection server2;
|
connection server2;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
# in row-based, it hangs waiting for an offset which is never
|
# in row-based, it hangs waiting for an offset which is never
|
||||||
# reached (the "sync_with_master 1"), logically.
|
# reached (the "sync_with_master 1"), logically.
|
||||||
|
|
||||||
--source include/have_binlog_format_statement.inc
|
--source include/have_binlog_format_mixed_or_statement.inc
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
connection slave;
|
connection slave;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# replicated LOAD DATA INFILE correctly when it has binlog_*_db rules.
|
# replicated LOAD DATA INFILE correctly when it has binlog_*_db rules.
|
||||||
# This is for BUG#1100 (LOAD DATA INFILE was half-logged).
|
# This is for BUG#1100 (LOAD DATA INFILE was half-logged).
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Mixed DDL-DML (CREATE ... SELECT ...) statements can only be
|
# Mixed DDL-DML (CREATE ... SELECT ...) statements can only be
|
||||||
# replicated properly in statement-based replication.
|
# replicated properly in statement-based replication.
|
||||||
# Currently statement based due to bug 12345
|
# Currently statement based due to bug 12345
|
||||||
--source include/have_binlog_format_statement.inc
|
--source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
-- source include/have_row_based.inc
|
-- source include/have_row_based.inc
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
-- source include/not_ndb_default.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
# Test that the slave temporarily switches to ROW when seeing binrow
|
# Test that the slave temporarily switches to ROW when seeing binrow
|
||||||
# events when it is in STATEMENT or MIXED mode
|
# events when it is in STATEMENT or MIXED mode
|
||||||
|
|
||||||
SET BINLOG_FORMAT=MIXED;
|
SET BINLOG_FORMAT=MIXED;
|
||||||
SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
|
||||||
SET GLOBAL BINLOG_FORMAT=MIXED;
|
SET GLOBAL BINLOG_FORMAT=MIXED;
|
||||||
SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# TBF - difference in row level logging
|
# TBF - difference in row level logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# - Test creating a duplicate key error and recover from it
|
# - Test creating a duplicate key error and recover from it
|
||||||
|
|
||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
@ -54,3 +54,43 @@ UPDATE t1 SET a=99 WHERE a = 0;
|
|||||||
--replace_result $SERVER_VERSION SERVER_VERSION
|
--replace_result $SERVER_VERSION SERVER_VERSION
|
||||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# BUG#17620: Replicate (Row Based) Fails when Query Cache enabled on
|
||||||
|
# slave
|
||||||
|
--echo ================ Test for BUG#17620 ================
|
||||||
|
--disable_query_log
|
||||||
|
--source include/master-slave-reset.inc
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--echo **** On Slave ****
|
||||||
|
connection slave;
|
||||||
|
SET GLOBAL QUERY_CACHE_SIZE=0;
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SET GLOBAL QUERY_CACHE_SIZE=16*1024*1024;
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t1 VALUES (4),(5),(6);
|
||||||
|
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t1 VALUES (7),(8),(9);
|
||||||
|
|
||||||
|
--echo **** On Slave ****
|
||||||
|
sync_slave_with_master;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -8,12 +8,17 @@
|
|||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
--source include/have_row_based.inc
|
--source include/have_row_based.inc
|
||||||
|
--source include/have_binlog_format_row.inc
|
||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
|
--source include/not_ndb_default.inc
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
connection master;
|
connection master;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
SET BINLOG_FORMAT=ROW;
|
|
||||||
|
let $maybe_ro_var = @@BINLOG_FORMAT;
|
||||||
|
let $val4var = ROW;
|
||||||
|
--source include/safe_set_to_maybe_ro_var.inc
|
||||||
|
|
||||||
--echo **** Partition RANGE testing ****
|
--echo **** Partition RANGE testing ****
|
||||||
|
|
||||||
|
8
mysql-test/t/rpl_row_tabledefs_2myisam.test
Normal file
8
mysql-test/t/rpl_row_tabledefs_2myisam.test
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
-- source include/have_binlog_format_row.inc
|
||||||
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
|
let $engine_type = 'MyISAM';
|
||||||
|
-- source extra/rpl_tests/rpl_row_tabledefs.test
|
||||||
|
|
||||||
|
|
9
mysql-test/t/rpl_row_tabledefs_3innodb.test
Normal file
9
mysql-test/t/rpl_row_tabledefs_3innodb.test
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
-- source include/have_binlog_format_row.inc
|
||||||
|
-- source include/have_innodb.inc
|
||||||
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
|
let $engine_type = 'InnoDB';
|
||||||
|
-- source extra/rpl_tests/rpl_row_tabledefs.test
|
||||||
|
|
||||||
|
|
@ -3,6 +3,6 @@
|
|||||||
# Date: 2006-01-11
|
# Date: 2006-01-11
|
||||||
# Purpose: Engine Wrapper for rpl_stm_EE_err2.test
|
# Purpose: Engine Wrapper for rpl_stm_EE_err2.test
|
||||||
##############################
|
##############################
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
let $engine_type=myisam;
|
let $engine_type=myisam;
|
||||||
-- source extra/rpl_tests/rpl_stm_EE_err2.test
|
-- source extra/rpl_tests/rpl_stm_EE_err2.test
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# depends on the binlog output
|
# depends on the binlog output
|
||||||
--source include/have_binlog_format_statement.inc
|
--source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
let $rename_event_pos= 652;
|
let $rename_event_pos= 652;
|
||||||
-- source extra/rpl_tests/rpl_flsh_tbls.test
|
-- source extra/rpl_tests/rpl_flsh_tbls.test
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
let $engine_type=MyISAM;
|
let $engine_type=MyISAM;
|
||||||
-- source extra/rpl_tests/rpl_log.test
|
-- source extra/rpl_tests/rpl_log.test
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# Test of manual relay log rotation with FLUSH LOGS.
|
# Test of manual relay log rotation with FLUSH LOGS.
|
||||||
|
|
||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/rpl_tests/rpl_max_relay_size.test
|
-- source extra/rpl_tests/rpl_max_relay_size.test
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# one binlog event containing all queries)
|
# one binlog event containing all queries)
|
||||||
|
|
||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/rpl_tests/rpl_multi_query.test
|
-- source extra/rpl_tests/rpl_multi_query.test
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#should proceed in a correct way.
|
#should proceed in a correct way.
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
# first, cause a duplicate key problem on the slave
|
# first, cause a duplicate key problem on the slave
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# case. So this test is meaningul only in statement-based (and if it was
|
# case. So this test is meaningul only in statement-based (and if it was
|
||||||
# enabled in row-based, it would fail as expected).
|
# enabled in row-based, it would fail as expected).
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# TBF - difference in row level logging
|
# TBF - difference in row level logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source extra/rpl_tests/rpl_reset_slave.test
|
-- source extra/rpl_tests/rpl_reset_slave.test
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
# Test is dependent on binlog positions
|
# Test is dependent on binlog positions
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
-- source include/have_binlog_format_row.inc
|
-- source include/have_row_based.inc
|
||||||
|
-- source include/not_ndb_default.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
@ -8,6 +9,9 @@ create database mysqltest1;
|
|||||||
--enable_warnings
|
--enable_warnings
|
||||||
use mysqltest1;
|
use mysqltest1;
|
||||||
|
|
||||||
|
set session binlog_format=row;
|
||||||
|
set global binlog_format=row;
|
||||||
|
|
||||||
show global variables like "binlog_format%";
|
show global variables like "binlog_format%";
|
||||||
show session variables like "binlog_format%";
|
show session variables like "binlog_format%";
|
||||||
select @@global.binlog_format, @@session.binlog_format;
|
select @@global.binlog_format, @@session.binlog_format;
|
||||||
@ -462,6 +466,41 @@ if ($you_want_to_test_UDF)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#20863 If binlog format is changed between update and unlock of
|
||||||
|
# tables, wrong binlog
|
||||||
|
#
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
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;
|
||||||
|
|
||||||
|
--query_vertical SELECT * FROM t11
|
||||||
|
sync_slave_with_master;
|
||||||
|
USE mysqltest1;
|
||||||
|
--query_vertical SELECT * FROM t11
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
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;
|
||||||
|
|
||||||
|
--replace_column 2 # 5 #
|
||||||
|
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||||
|
show binlog events from 102;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
# as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID
|
# as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID
|
||||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_master.sql
|
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_master.sql
|
||||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_slave.sql
|
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_slave.sql
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# drop table t1 t2 t3 are included int master-slave.inc
|
# drop table t1 t2 t3 are included int master-slave.inc
|
||||||
# meaningful only in statement-based:
|
# meaningful only in statement-based:
|
||||||
|
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Test of triggers with replication
|
# Test of triggers with replication
|
||||||
# Adding statement include due to Bug 12574
|
# Adding statement include due to Bug 12574
|
||||||
# TODO: Remove statement include once 12574 is patched
|
# TODO: Remove statement include once 12574 is patched
|
||||||
--source include/have_binlog_format_statement.inc
|
--source include/have_binlog_format_mixed_or_statement.inc
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
--source include/not_ndb_default.inc
|
||||||
let $engine=MyISAM;
|
let $engine=MyISAM;
|
||||||
--source extra/rpl_tests/rpl_truncate.test
|
--source extra/rpl_tests/rpl_truncate.test
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/not_ndb_default.inc
|
||||||
|
|
||||||
let $engine=InnoDB;
|
let $engine=InnoDB;
|
||||||
--source extra/rpl_tests/rpl_truncate.test
|
--source extra/rpl_tests/rpl_truncate.test
|
||||||
|
@ -13,6 +13,7 @@ connect (con2,localhost,root,,);
|
|||||||
|
|
||||||
flush status;
|
flush status;
|
||||||
show status like 'Table_lock%';
|
show status like 'Table_lock%';
|
||||||
|
select * from information_schema.session_status where variable_name like 'Table_lock%';
|
||||||
connection con1;
|
connection con1;
|
||||||
SET SQL_LOG_BIN=0;
|
SET SQL_LOG_BIN=0;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
@ -34,6 +35,7 @@ unlock tables;
|
|||||||
connection con1;
|
connection con1;
|
||||||
reap;
|
reap;
|
||||||
show status like 'Table_lock%';
|
show status like 'Table_lock%';
|
||||||
|
select * from information_schema.session_status where variable_name like 'Table_lock%';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
disconnect con2;
|
disconnect con2;
|
||||||
@ -102,6 +104,7 @@ while ($wait_more)
|
|||||||
|
|
||||||
# Prerequisite.
|
# Prerequisite.
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Save original setting.
|
# Save original setting.
|
||||||
SET @save_thread_cache_size=@@thread_cache_size;
|
SET @save_thread_cache_size=@@thread_cache_size;
|
||||||
@ -115,6 +118,7 @@ disconnect con2;
|
|||||||
|
|
||||||
# Check that max_used_connections still reflects maximum value.
|
# Check that max_used_connections still reflects maximum value.
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Check that after flush max_used_connections equals to current number
|
# Check that after flush max_used_connections equals to current number
|
||||||
# of connections. First wait for previous disconnect to finish.
|
# of connections. First wait for previous disconnect to finish.
|
||||||
@ -138,15 +142,18 @@ while ($wait_more)
|
|||||||
--enable_result_log
|
--enable_result_log
|
||||||
# Check that we don't count disconnected thread any longer.
|
# Check that we don't count disconnected thread any longer.
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Check that max_used_connections is updated when cached thread is
|
# Check that max_used_connections is updated when cached thread is
|
||||||
# reused...
|
# reused...
|
||||||
connect (con2,localhost,root,,);
|
connect (con2,localhost,root,,);
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
|
||||||
# ...and when new thread is created.
|
# ...and when new thread is created.
|
||||||
connect (con3,localhost,root,,);
|
connect (con3,localhost,root,,);
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Restore original setting.
|
# Restore original setting.
|
||||||
connection default;
|
connection default;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Requires statement logging
|
# Requires statement logging
|
||||||
-- source include/have_binlog_format_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
# TODO: Create row based version once $MYSQL_BINLOG has new RB version
|
# TODO: Create row based version once $MYSQL_BINLOG has new RB version
|
||||||
# Embedded server does not support binlogging
|
# Embedded server does not support binlogging
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
|
@ -83,16 +83,24 @@ drop table t1;
|
|||||||
set GLOBAL max_join_size=10;
|
set GLOBAL max_join_size=10;
|
||||||
set max_join_size=100;
|
set max_join_size=100;
|
||||||
show variables like 'max_join_size';
|
show variables like 'max_join_size';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'max_join_size';
|
||||||
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
||||||
show global variables like 'max_join_size';
|
show global variables like 'max_join_size';
|
||||||
|
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
||||||
|
select * from information_schema.global_variables where variable_name like 'max_join_size';
|
||||||
set GLOBAL max_join_size=2000;
|
set GLOBAL max_join_size=2000;
|
||||||
show global variables like 'max_join_size';
|
show global variables like 'max_join_size';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'max_join_size';
|
||||||
set max_join_size=DEFAULT;
|
set max_join_size=DEFAULT;
|
||||||
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
||||||
show variables like 'max_join_size';
|
show variables like 'max_join_size';
|
||||||
|
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
||||||
|
select * from information_schema.session_variables where variable_name like 'max_join_size';
|
||||||
set GLOBAL max_join_size=DEFAULT;
|
set GLOBAL max_join_size=DEFAULT;
|
||||||
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
||||||
show global variables like 'max_join_size';
|
show global variables like 'max_join_size';
|
||||||
|
--replace_result 18446744073709551615 HA_POS_ERROR 4294967295 HA_POS_ERROR
|
||||||
|
select * from information_schema.global_variables where variable_name like 'max_join_size';
|
||||||
set @@max_join_size=1000, @@global.max_join_size=2000;
|
set @@max_join_size=1000, @@global.max_join_size=2000;
|
||||||
select @@local.max_join_size, @@global.max_join_size;
|
select @@local.max_join_size, @@global.max_join_size;
|
||||||
select @@identity, length(@@version)>0;
|
select @@identity, length(@@version)>0;
|
||||||
@ -106,50 +114,68 @@ set big_tables=OFF, big_tables=ON, big_tables=0, big_tables=1, big_tables="OFF",
|
|||||||
|
|
||||||
set global concurrent_insert=2;
|
set global concurrent_insert=2;
|
||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'concurrent_insert';
|
||||||
set global concurrent_insert=1;
|
set global concurrent_insert=1;
|
||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'concurrent_insert';
|
||||||
set global concurrent_insert=0;
|
set global concurrent_insert=0;
|
||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'concurrent_insert';
|
||||||
set global concurrent_insert=DEFAULT;
|
set global concurrent_insert=DEFAULT;
|
||||||
select @@concurrent_insert;
|
select @@concurrent_insert;
|
||||||
|
|
||||||
set global timed_mutexes=ON;
|
set global timed_mutexes=ON;
|
||||||
show variables like 'timed_mutexes';
|
show variables like 'timed_mutexes';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'timed_mutexes';
|
||||||
set global timed_mutexes=0;
|
set global timed_mutexes=0;
|
||||||
show variables like 'timed_mutexes';
|
show variables like 'timed_mutexes';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'timed_mutexes';
|
||||||
|
|
||||||
set storage_engine=MYISAM, storage_engine="HEAP", global storage_engine="MERGE";
|
set storage_engine=MYISAM, storage_engine="HEAP", global storage_engine="MERGE";
|
||||||
show local variables like 'storage_engine';
|
show local variables like 'storage_engine';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'storage_engine';
|
||||||
show global variables like 'storage_engine';
|
show global variables like 'storage_engine';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'storage_engine';
|
||||||
set GLOBAL query_cache_size=100000;
|
set GLOBAL query_cache_size=100000;
|
||||||
|
|
||||||
set GLOBAL myisam_max_sort_file_size=2000000;
|
set GLOBAL myisam_max_sort_file_size=2000000;
|
||||||
show global variables like 'myisam_max_sort_file_size';
|
show global variables like 'myisam_max_sort_file_size';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
set GLOBAL myisam_max_sort_file_size=default;
|
set GLOBAL myisam_max_sort_file_size=default;
|
||||||
--replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE
|
--replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE
|
||||||
show variables like 'myisam_max_sort_file_size';
|
show variables like 'myisam_max_sort_file_size';
|
||||||
|
--replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE
|
||||||
|
select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
|
|
||||||
set global net_retry_count=10, session net_retry_count=10;
|
set global net_retry_count=10, session net_retry_count=10;
|
||||||
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
|
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
|
||||||
set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600;
|
set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600;
|
||||||
show global variables like 'net_%';
|
show global variables like 'net_%';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'net_%';
|
||||||
show session variables like 'net_%';
|
show session variables like 'net_%';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_%';
|
||||||
set session net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000;
|
set session net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000;
|
||||||
show global variables like 'net_%';
|
show global variables like 'net_%';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'net_%';
|
||||||
show session variables like 'net_%';
|
show session variables like 'net_%';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_%';
|
||||||
set net_buffer_length=1;
|
set net_buffer_length=1;
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
||||||
set net_buffer_length=2000000000;
|
set net_buffer_length=2000000000;
|
||||||
show variables like 'net_buffer_length';
|
show variables like 'net_buffer_length';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
|
||||||
|
|
||||||
set character set cp1251_koi8;
|
set character set cp1251_koi8;
|
||||||
show variables like "character_set_client";
|
show variables like "character_set_client";
|
||||||
|
select * from information_schema.session_variables where variable_name like 'character_set_client';
|
||||||
select @@timestamp>0;
|
select @@timestamp>0;
|
||||||
|
|
||||||
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
||||||
select ROUND(RAND(),5);
|
select ROUND(RAND(),5);
|
||||||
|
|
||||||
show variables like '%alloc%';
|
show variables like '%alloc%';
|
||||||
|
select * from information_schema.session_variables where variable_name like '%alloc%';
|
||||||
set @@range_alloc_block_size=1024*16;
|
set @@range_alloc_block_size=1024*16;
|
||||||
set @@query_alloc_block_size=1024*17+2;
|
set @@query_alloc_block_size=1024*17+2;
|
||||||
set @@query_prealloc_size=1024*18;
|
set @@query_prealloc_size=1024*18;
|
||||||
@ -157,10 +183,12 @@ set @@transaction_alloc_block_size=1024*20-1;
|
|||||||
set @@transaction_prealloc_size=1024*21-1;
|
set @@transaction_prealloc_size=1024*21-1;
|
||||||
select @@query_alloc_block_size;
|
select @@query_alloc_block_size;
|
||||||
show variables like '%alloc%';
|
show variables like '%alloc%';
|
||||||
|
select * from information_schema.session_variables where variable_name like '%alloc%';
|
||||||
set @@range_alloc_block_size=default;
|
set @@range_alloc_block_size=default;
|
||||||
set @@query_alloc_block_size=default, @@query_prealloc_size=default;
|
set @@query_alloc_block_size=default, @@query_prealloc_size=default;
|
||||||
set transaction_alloc_block_size=default, @@transaction_prealloc_size=default;
|
set transaction_alloc_block_size=default, @@transaction_prealloc_size=default;
|
||||||
show variables like '%alloc%';
|
show variables like '%alloc%';
|
||||||
|
select * from information_schema.session_variables where variable_name like '%alloc%';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #10904 Illegal mix of collations between
|
# Bug #10904 Illegal mix of collations between
|
||||||
@ -363,6 +391,8 @@ set global ft_boolean_syntax = @@init_connect;
|
|||||||
set global myisam_max_sort_file_size=4294967296;
|
set global myisam_max_sort_file_size=4294967296;
|
||||||
--replace_result 4294967296 MAX_FILE_SIZE 2146435072 MAX_FILE_SIZE
|
--replace_result 4294967296 MAX_FILE_SIZE 2146435072 MAX_FILE_SIZE
|
||||||
show global variables like 'myisam_max_sort_file_size';
|
show global variables like 'myisam_max_sort_file_size';
|
||||||
|
--replace_result 4294967296 MAX_FILE_SIZE 2146435072 MAX_FILE_SIZE
|
||||||
|
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
set global myisam_max_sort_file_size=default;
|
set global myisam_max_sort_file_size=default;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -398,12 +428,16 @@ SELECT @@global.local.key_buffer_size;
|
|||||||
# BUG#5135: cannot turn on log_warnings with SET in 4.1 (and 4.0)
|
# BUG#5135: cannot turn on log_warnings with SET in 4.1 (and 4.0)
|
||||||
set @tstlw = @@log_warnings;
|
set @tstlw = @@log_warnings;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
set global log_warnings = 0;
|
set global log_warnings = 0;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
set global log_warnings = 42;
|
set global log_warnings = 42;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
set global log_warnings = @tstlw;
|
set global log_warnings = @tstlw;
|
||||||
show global variables like 'log_warnings';
|
show global variables like 'log_warnings';
|
||||||
|
select * from information_schema.global_variables where variable_name like 'log_warnings';
|
||||||
|
|
||||||
#
|
#
|
||||||
# BUG#4788 show create table provides incorrect statement
|
# BUG#4788 show create table provides incorrect statement
|
||||||
@ -435,6 +469,7 @@ drop table t1;
|
|||||||
|
|
||||||
SET GLOBAL MYISAM_DATA_POINTER_SIZE= 7;
|
SET GLOBAL MYISAM_DATA_POINTER_SIZE= 7;
|
||||||
SHOW VARIABLES LIKE 'MYISAM_DATA_POINTER_SIZE';
|
SHOW VARIABLES LIKE 'MYISAM_DATA_POINTER_SIZE';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'MYISAM_DATA_POINTER_SIZE';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #6958: negative arguments to integer options wrap around
|
# Bug #6958: negative arguments to integer options wrap around
|
||||||
@ -442,6 +477,7 @@ SHOW VARIABLES LIKE 'MYISAM_DATA_POINTER_SIZE';
|
|||||||
|
|
||||||
SET GLOBAL table_open_cache=-1;
|
SET GLOBAL table_open_cache=-1;
|
||||||
SHOW VARIABLES LIKE 'table_open_cache';
|
SHOW VARIABLES LIKE 'table_open_cache';
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'table_open_cache';
|
||||||
SET GLOBAL table_open_cache=DEFAULT;
|
SET GLOBAL table_open_cache=DEFAULT;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -527,6 +563,7 @@ select @@global.character_set_filesystem;
|
|||||||
set @old_sql_big_selects = @@sql_big_selects;
|
set @old_sql_big_selects = @@sql_big_selects;
|
||||||
set @@sql_big_selects = 1;
|
set @@sql_big_selects = 1;
|
||||||
show variables like 'sql_big_selects';
|
show variables like 'sql_big_selects';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_big_selects';
|
||||||
set @@sql_big_selects = @old_sql_big_selects;
|
set @@sql_big_selects = @old_sql_big_selects;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -535,10 +572,14 @@ set @@sql_big_selects = @old_sql_big_selects;
|
|||||||
#
|
#
|
||||||
set @@sql_notes = 0, @@sql_warnings = 0;
|
set @@sql_notes = 0, @@sql_warnings = 0;
|
||||||
show variables like 'sql_notes';
|
show variables like 'sql_notes';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_notes';
|
||||||
show variables like 'sql_warnings';
|
show variables like 'sql_warnings';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_warnings';
|
||||||
set @@sql_notes = 1, @@sql_warnings = 1;
|
set @@sql_notes = 1, @@sql_warnings = 1;
|
||||||
show variables like 'sql_notes';
|
show variables like 'sql_notes';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_notes';
|
||||||
show variables like 'sql_warnings';
|
show variables like 'sql_warnings';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'sql_warnings';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #12792: @@system_time_zone is not SELECTable.
|
# Bug #12792: @@system_time_zone is not SELECTable.
|
||||||
@ -565,9 +606,15 @@ select @@basedir, @@datadir, @@tmpdir;
|
|||||||
--replace_column 2 #
|
--replace_column 2 #
|
||||||
show variables like 'basedir';
|
show variables like 'basedir';
|
||||||
--replace_column 2 #
|
--replace_column 2 #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'basedir';
|
||||||
|
--replace_column 2 #
|
||||||
show variables like 'datadir';
|
show variables like 'datadir';
|
||||||
--replace_column 2 #
|
--replace_column 2 #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'datadir';
|
||||||
|
--replace_column 2 #
|
||||||
show variables like 'tmpdir';
|
show variables like 'tmpdir';
|
||||||
|
--replace_column 2 #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'tmpdir';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #19606: make ssl settings available via SHOW VARIABLES and @@variables
|
# Bug #19606: make ssl settings available via SHOW VARIABLES and @@variables
|
||||||
@ -577,6 +624,8 @@ show variables like 'tmpdir';
|
|||||||
select @@ssl_ca, @@ssl_capath, @@ssl_cert, @@ssl_cipher, @@ssl_key;
|
select @@ssl_ca, @@ssl_capath, @@ssl_cert, @@ssl_cipher, @@ssl_key;
|
||||||
--replace_column 2 #
|
--replace_column 2 #
|
||||||
show variables like 'ssl%';
|
show variables like 'ssl%';
|
||||||
|
--replace_column 2 #
|
||||||
|
select * from information_schema.session_variables where variable_name like 'ssl%';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #19616: make log_queries_not_using_indexes available in SHOW VARIABLES
|
# Bug #19616: make log_queries_not_using_indexes available in SHOW VARIABLES
|
||||||
@ -584,6 +633,7 @@ show variables like 'ssl%';
|
|||||||
#
|
#
|
||||||
select @@log_queries_not_using_indexes;
|
select @@log_queries_not_using_indexes;
|
||||||
show variables like 'log_queries_not_using_indexes';
|
show variables like 'log_queries_not_using_indexes';
|
||||||
|
select * from information_schema.session_variables where variable_name like 'log_queries_not_using_indexes';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#20908: Crash if select @@""
|
# Bug#20908: Crash if select @@""
|
||||||
|
@ -53,7 +53,7 @@ ADD_EXECUTABLE(mysqld ../sql-common/client.c derror.cc des_key_file.cc
|
|||||||
rpl_tblmap.cc sql_binlog.cc event_scheduler.cc event_data_objects.cc
|
rpl_tblmap.cc sql_binlog.cc event_scheduler.cc event_data_objects.cc
|
||||||
event_queue.cc event_db_repository.cc
|
event_queue.cc event_db_repository.cc
|
||||||
sql_tablespace.cc events.cc ../sql-common/my_user.c
|
sql_tablespace.cc events.cc ../sql-common/my_user.c
|
||||||
partition_info.cc rpl_injector.cc sql_locale.cc
|
partition_info.cc rpl_utility.cc rpl_injector.cc sql_locale.cc
|
||||||
${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
|
${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
|
||||||
${PROJECT_SOURCE_DIR}/sql/sql_yacc.h
|
${PROJECT_SOURCE_DIR}/sql/sql_yacc.h
|
||||||
${PROJECT_SOURCE_DIR}/include/mysqld_error.h
|
${PROJECT_SOURCE_DIR}/include/mysqld_error.h
|
||||||
|
@ -52,7 +52,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
|
|||||||
ha_partition.h \
|
ha_partition.h \
|
||||||
ha_ndbcluster.h ha_ndbcluster_binlog.h \
|
ha_ndbcluster.h ha_ndbcluster_binlog.h \
|
||||||
ha_ndbcluster_tables.h \
|
ha_ndbcluster_tables.h \
|
||||||
opt_range.h protocol.h rpl_tblmap.h \
|
opt_range.h protocol.h rpl_tblmap.h rpl_utility.h \
|
||||||
log.h sql_show.h rpl_rli.h \
|
log.h sql_show.h rpl_rli.h \
|
||||||
sql_select.h structs.h table.h sql_udf.h hash_filo.h \
|
sql_select.h structs.h table.h sql_udf.h hash_filo.h \
|
||||||
lex.h lex_symbol.h sql_acl.h sql_crypt.h \
|
lex.h lex_symbol.h sql_acl.h sql_crypt.h \
|
||||||
@ -93,7 +93,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
|
|||||||
sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc \
|
sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc \
|
||||||
sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc \
|
sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc \
|
||||||
slave.cc sql_repl.cc rpl_filter.cc rpl_tblmap.cc \
|
slave.cc sql_repl.cc rpl_filter.cc rpl_tblmap.cc \
|
||||||
rpl_injector.cc \
|
rpl_utility.cc rpl_injector.cc \
|
||||||
sql_union.cc sql_derived.cc \
|
sql_union.cc sql_derived.cc \
|
||||||
client.c sql_client.cc mini_client_errors.c pack.c\
|
client.c sql_client.cc mini_client_errors.c pack.c\
|
||||||
stacktrace.c repl_failsafe.h repl_failsafe.cc \
|
stacktrace.c repl_failsafe.h repl_failsafe.cc \
|
||||||
|
45
sql/field.cc
45
sql/field.cc
@ -1257,6 +1257,16 @@ void Field::hash(ulong *nr, ulong *nr2)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my_size_t
|
||||||
|
Field::do_last_null_byte() const
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(null_ptr == NULL || (byte*) null_ptr >= table->record[0]);
|
||||||
|
if (null_ptr)
|
||||||
|
return (byte*) null_ptr - table->record[0] + 1;
|
||||||
|
else
|
||||||
|
return LAST_NULL_BYTE_UNDEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Field::copy_from_tmp(int row_offset)
|
void Field::copy_from_tmp(int row_offset)
|
||||||
{
|
{
|
||||||
@ -8094,6 +8104,33 @@ Field_bit::Field_bit(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
my_size_t
|
||||||
|
Field_bit::do_last_null_byte() const
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Code elsewhere is assuming that bytes are 8 bits, so I'm using
|
||||||
|
that value instead of the correct one: CHAR_BIT.
|
||||||
|
|
||||||
|
REFACTOR SUGGESTION (Matz): Change to use the correct number of
|
||||||
|
bits. On systems with CHAR_BIT > 8 (not very common), the storage
|
||||||
|
will lose the extra bits.
|
||||||
|
*/
|
||||||
|
DBUG_PRINT("debug", ("bit_ofs=%d, bit_len=%d, bit_ptr=%p",
|
||||||
|
bit_ofs, bit_len, bit_ptr));
|
||||||
|
uchar *result;
|
||||||
|
if (bit_len == 0)
|
||||||
|
result= null_ptr;
|
||||||
|
else if (bit_ofs + bit_len > 8)
|
||||||
|
result= bit_ptr + 1;
|
||||||
|
else
|
||||||
|
result= bit_ptr;
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
return (byte*) result - table->record[0] + 1;
|
||||||
|
else
|
||||||
|
return LAST_NULL_BYTE_UNDEF;
|
||||||
|
}
|
||||||
|
|
||||||
Field *Field_bit::new_key_field(MEM_ROOT *root,
|
Field *Field_bit::new_key_field(MEM_ROOT *root,
|
||||||
struct st_table *new_table,
|
struct st_table *new_table,
|
||||||
char *new_ptr, uchar *new_null_ptr,
|
char *new_ptr, uchar *new_null_ptr,
|
||||||
@ -8345,6 +8382,14 @@ const char *Field_bit::unpack(char *to, const char *from)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Field_bit::set_default()
|
||||||
|
{
|
||||||
|
my_ptrdiff_t const offset= table->s->default_values - table->record[0];
|
||||||
|
uchar bits= get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
|
||||||
|
set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
|
||||||
|
Field::set_default();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Bit field support for non-MyISAM tables.
|
Bit field support for non-MyISAM tables.
|
||||||
*/
|
*/
|
||||||
|
46
sql/field.h
46
sql/field.h
@ -217,6 +217,33 @@ public:
|
|||||||
{ if (null_ptr) null_ptr[row_offset]&= (uchar) ~null_bit; }
|
{ if (null_ptr) null_ptr[row_offset]&= (uchar) ~null_bit; }
|
||||||
inline bool maybe_null(void) { return null_ptr != 0 || table->maybe_null; }
|
inline bool maybe_null(void) { return null_ptr != 0 || table->maybe_null; }
|
||||||
inline bool real_maybe_null(void) { return null_ptr != 0; }
|
inline bool real_maybe_null(void) { return null_ptr != 0; }
|
||||||
|
|
||||||
|
enum {
|
||||||
|
LAST_NULL_BYTE_UNDEF= 0
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Find the position of the last null byte for the field.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
last_null_byte()
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Return a pointer to the last byte of the null bytes where the
|
||||||
|
field conceptually is placed.
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
The position of the last null byte relative to the beginning of
|
||||||
|
the record. If the field does not use any bits of the null
|
||||||
|
bytes, the value 0 (LAST_NULL_BYTE_UNDEF) is returned.
|
||||||
|
*/
|
||||||
|
my_size_t last_null_byte() const {
|
||||||
|
my_size_t bytes= do_last_null_byte();
|
||||||
|
DBUG_PRINT("debug", ("last_null_byte() ==> %d", bytes));
|
||||||
|
DBUG_ASSERT(bytes <= table->s->null_bytes);
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void make_field(Send_field *);
|
virtual void make_field(Send_field *);
|
||||||
virtual void sort_string(char *buff,uint length)=0;
|
virtual void sort_string(char *buff,uint length)=0;
|
||||||
virtual bool optimize_range(uint idx, uint part);
|
virtual bool optimize_range(uint idx, uint part);
|
||||||
@ -377,6 +404,20 @@ public:
|
|||||||
friend class Item_sum_min;
|
friend class Item_sum_min;
|
||||||
friend class Item_sum_max;
|
friend class Item_sum_max;
|
||||||
friend class Item_func_group_concat;
|
friend class Item_func_group_concat;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/*
|
||||||
|
Primitive for implementing last_null_byte().
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
do_last_null_byte()
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Primitive for the implementation of the last_null_byte()
|
||||||
|
function. This represents the inheritance interface and can be
|
||||||
|
overridden by subclasses.
|
||||||
|
*/
|
||||||
|
virtual my_size_t do_last_null_byte() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1412,6 +1453,8 @@ public:
|
|||||||
void sql_type(String &str) const;
|
void sql_type(String &str) const;
|
||||||
char *pack(char *to, const char *from, uint max_length=~(uint) 0);
|
char *pack(char *to, const char *from, uint max_length=~(uint) 0);
|
||||||
const char *unpack(char* to, const char *from);
|
const char *unpack(char* to, const char *from);
|
||||||
|
virtual void set_default();
|
||||||
|
|
||||||
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
|
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
|
||||||
char *new_ptr, uchar *new_null_ptr,
|
char *new_ptr, uchar *new_null_ptr,
|
||||||
uint new_null_bit);
|
uint new_null_bit);
|
||||||
@ -1432,6 +1475,9 @@ public:
|
|||||||
Field::move_field_offset(ptr_diff);
|
Field::move_field_offset(ptr_diff);
|
||||||
bit_ptr= ADD_TO_PTR(bit_ptr, ptr_diff, uchar*);
|
bit_ptr= ADD_TO_PTR(bit_ptr, ptr_diff, uchar*);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual my_size_t do_last_null_byte() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -3171,7 +3171,7 @@ int MYSQL_BIN_LOG::
|
|||||||
flush_and_set_pending_rows_event(THD *thd, Rows_log_event* event)
|
flush_and_set_pending_rows_event(THD *thd, Rows_log_event* event)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("MYSQL_BIN_LOG::flush_and_set_pending_rows_event(event)");
|
DBUG_ENTER("MYSQL_BIN_LOG::flush_and_set_pending_rows_event(event)");
|
||||||
DBUG_ASSERT(thd->current_stmt_binlog_row_based && mysql_bin_log.is_open());
|
DBUG_ASSERT(mysql_bin_log.is_open());
|
||||||
DBUG_PRINT("enter", ("event=%p", event));
|
DBUG_PRINT("enter", ("event=%p", event));
|
||||||
|
|
||||||
int error= 0;
|
int error= 0;
|
||||||
@ -3416,9 +3416,6 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Forget those values, for next binlogger: */
|
|
||||||
thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt= 0;
|
|
||||||
thd->auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
439
sql/log_event.cc
439
sql/log_event.cc
@ -24,6 +24,7 @@
|
|||||||
#include "mysql_priv.h"
|
#include "mysql_priv.h"
|
||||||
#include "slave.h"
|
#include "slave.h"
|
||||||
#include "rpl_filter.h"
|
#include "rpl_filter.h"
|
||||||
|
#include "rpl_utility.h"
|
||||||
#include <my_dir.h>
|
#include <my_dir.h>
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
#include <base64.h>
|
#include <base64.h>
|
||||||
@ -5290,38 +5291,141 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
|
|||||||
|
|
||||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
|
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
|
||||||
/*
|
/*
|
||||||
Unpack a row into a record. The row is assumed to only consist of the fields
|
Unpack a row into a record.
|
||||||
for which the bitset represented by 'arr' and 'bits'; the other parts of the
|
|
||||||
record are left alone.
|
SYNOPSIS
|
||||||
|
unpack_row()
|
||||||
|
rli Relay log info
|
||||||
|
table Table to unpack into
|
||||||
|
colcnt Number of columns to read from record
|
||||||
|
record Record where the data should be unpacked
|
||||||
|
row Packed row data
|
||||||
|
cols Pointer to columns data to fill in
|
||||||
|
row_end Pointer to variable that will hold the value of the
|
||||||
|
one-after-end position for the row
|
||||||
|
master_reclength
|
||||||
|
Pointer to variable that will be set to the length of the
|
||||||
|
record on the master side
|
||||||
|
rw_set Pointer to bitmap that holds either the read_set or the
|
||||||
|
write_set of the table
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
The row is assumed to only consist of the fields for which the
|
||||||
|
bitset represented by 'arr' and 'bits'; the other parts of the
|
||||||
|
record are left alone.
|
||||||
|
|
||||||
|
At most 'colcnt' columns are read: if the table is larger than
|
||||||
|
that, the remaining fields are not filled in.
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
|
||||||
|
Error code, or zero if no error. The following error codes can
|
||||||
|
be returned:
|
||||||
|
|
||||||
|
ER_NO_DEFAULT_FOR_FIELD
|
||||||
|
Returned if one of the fields existing on the slave but not on
|
||||||
|
the master does not have a default value (and isn't nullable)
|
||||||
*/
|
*/
|
||||||
static char const *unpack_row(TABLE *table,
|
static int
|
||||||
byte *record, char const *row,
|
unpack_row(RELAY_LOG_INFO *rli,
|
||||||
MY_BITMAP const *cols)
|
TABLE *table, uint const colcnt, byte *record,
|
||||||
|
char const *row, MY_BITMAP const *cols,
|
||||||
|
char const **row_end, ulong *master_reclength,
|
||||||
|
MY_BITMAP* const rw_set, Log_event_type const event_type)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(record && row);
|
DBUG_ASSERT(record && row);
|
||||||
|
|
||||||
MY_BITMAP *write_set= table->write_set;
|
|
||||||
my_size_t const n_null_bytes= table->s->null_bytes;
|
|
||||||
my_ptrdiff_t const offset= record - (byte*) table->record[0];
|
my_ptrdiff_t const offset= record - (byte*) table->record[0];
|
||||||
|
my_size_t master_null_bytes= table->s->null_bytes;
|
||||||
|
|
||||||
memcpy(record, row, n_null_bytes);
|
if (colcnt != table->s->fields)
|
||||||
char const *ptr= row + n_null_bytes;
|
{
|
||||||
|
Field **fptr= &table->field[colcnt-1];
|
||||||
|
do
|
||||||
|
master_null_bytes= (*fptr)->last_null_byte();
|
||||||
|
while (master_null_bytes == Field::LAST_NULL_BYTE_UNDEF &&
|
||||||
|
fptr-- > table->field);
|
||||||
|
|
||||||
|
/*
|
||||||
|
If master_null_bytes is LAST_NULL_BYTE_UNDEF (0) at this time,
|
||||||
|
there were no nullable fields nor BIT fields at all in the
|
||||||
|
columns that are common to the master and the slave. In that
|
||||||
|
case, there is only one null byte holding the X bit.
|
||||||
|
|
||||||
|
OBSERVE! There might still be nullable columns following the
|
||||||
|
common columns, so table->s->null_bytes might be greater than 1.
|
||||||
|
*/
|
||||||
|
if (master_null_bytes == Field::LAST_NULL_BYTE_UNDEF)
|
||||||
|
master_null_bytes= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBUG_ASSERT(master_null_bytes <= table->s->null_bytes);
|
||||||
|
memcpy(record, row, master_null_bytes); // [1]
|
||||||
|
int error= 0;
|
||||||
|
|
||||||
|
bitmap_set_all(rw_set);
|
||||||
|
|
||||||
bitmap_set_all(write_set);
|
|
||||||
Field **const begin_ptr = table->field;
|
Field **const begin_ptr = table->field;
|
||||||
for (Field **field_ptr= begin_ptr ; *field_ptr ; ++field_ptr)
|
Field **field_ptr;
|
||||||
|
char const *ptr= row + master_null_bytes;
|
||||||
|
Field **const end_ptr= begin_ptr + colcnt;
|
||||||
|
for (field_ptr= begin_ptr ; field_ptr < end_ptr ; ++field_ptr)
|
||||||
{
|
{
|
||||||
Field *const f= *field_ptr;
|
Field *const f= *field_ptr;
|
||||||
|
|
||||||
if (bitmap_is_set(cols, (uint) (field_ptr - begin_ptr)))
|
if (bitmap_is_set(cols, field_ptr - begin_ptr))
|
||||||
{
|
{
|
||||||
/* Field...::unpack() cannot return 0 */
|
|
||||||
ptr= f->unpack(f->ptr + offset, ptr);
|
ptr= f->unpack(f->ptr + offset, ptr);
|
||||||
|
/* Field...::unpack() cannot return 0 */
|
||||||
|
DBUG_ASSERT(ptr != NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
bitmap_clear_bit(write_set, (uint) (field_ptr - begin_ptr));
|
bitmap_clear_bit(rw_set, field_ptr - begin_ptr);
|
||||||
}
|
}
|
||||||
return ptr;
|
|
||||||
|
*row_end = ptr;
|
||||||
|
if (master_reclength)
|
||||||
|
{
|
||||||
|
if (*field_ptr)
|
||||||
|
*master_reclength = (*field_ptr)->ptr - (char*) table->record[0];
|
||||||
|
else
|
||||||
|
*master_reclength = table->s->reclength;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Set properties for remaining columns, if there are any. We let the
|
||||||
|
corresponding bit in the write_set be set, to write the value if
|
||||||
|
it was not there already. We iterate over all remaining columns,
|
||||||
|
even if there were an error, to get as many error messages as
|
||||||
|
possible. We are still able to return a pointer to the next row,
|
||||||
|
so redo that.
|
||||||
|
|
||||||
|
This generation of error messages is only relevant when inserting
|
||||||
|
new rows.
|
||||||
|
*/
|
||||||
|
for ( ; *field_ptr ; ++field_ptr)
|
||||||
|
{
|
||||||
|
uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
|
||||||
|
|
||||||
|
DBUG_PRINT("debug", ("flags = 0x%x, mask = 0x%x, flags & mask = 0x%x",
|
||||||
|
(*field_ptr)->flags, mask,
|
||||||
|
(*field_ptr)->flags & mask));
|
||||||
|
|
||||||
|
if (event_type == WRITE_ROWS_EVENT &&
|
||||||
|
((*field_ptr)->flags & mask) == mask)
|
||||||
|
{
|
||||||
|
slave_print_msg(ERROR_LEVEL, rli, ER_NO_DEFAULT_FOR_FIELD,
|
||||||
|
"Field `%s` of table `%s`.`%s` "
|
||||||
|
"has no default value and cannot be NULL",
|
||||||
|
(*field_ptr)->field_name, table->s->db.str,
|
||||||
|
table->s->table_name.str);
|
||||||
|
error = ER_NO_DEFAULT_FOR_FIELD;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(*field_ptr)->set_default();
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Rows_log_event::exec_event(st_relay_log_info *rli)
|
int Rows_log_event::exec_event(st_relay_log_info *rli)
|
||||||
@ -5425,6 +5529,9 @@ int Rows_log_event::exec_event(st_relay_log_info *rli)
|
|||||||
/*
|
/*
|
||||||
When the open and locking succeeded, we add all the tables to
|
When the open and locking succeeded, we add all the tables to
|
||||||
the table map and remove them from tables to lock.
|
the table map and remove them from tables to lock.
|
||||||
|
|
||||||
|
We also invalidate the query cache for all the tables, since
|
||||||
|
they will now be changed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TABLE_LIST *ptr;
|
TABLE_LIST *ptr;
|
||||||
@ -5433,6 +5540,9 @@ int Rows_log_event::exec_event(st_relay_log_info *rli)
|
|||||||
rli->m_table_map.set_table(ptr->table_id, ptr->table);
|
rli->m_table_map.set_table(ptr->table_id, ptr->table);
|
||||||
rli->touching_table(ptr->db, ptr->table_name, ptr->table_id);
|
rli->touching_table(ptr->db, ptr->table_name, ptr->table_id);
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_QUERY_CACHE
|
||||||
|
query_cache.invalidate_locked_for_write(rli->tables_to_lock);
|
||||||
|
#endif
|
||||||
rli->clear_tables_to_lock();
|
rli->clear_tables_to_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5477,7 +5587,11 @@ int Rows_log_event::exec_event(st_relay_log_info *rli)
|
|||||||
error= do_before_row_operations(table);
|
error= do_before_row_operations(table);
|
||||||
while (error == 0 && row_start < (const char*) m_rows_end)
|
while (error == 0 && row_start < (const char*) m_rows_end)
|
||||||
{
|
{
|
||||||
char const *row_end= do_prepare_row(thd, table, row_start);
|
char const *row_end= NULL;
|
||||||
|
if ((error= do_prepare_row(thd, rli, table, row_start, &row_end)))
|
||||||
|
break; // We should perform the after-row operation even in
|
||||||
|
// the case of error
|
||||||
|
|
||||||
DBUG_ASSERT(row_end != NULL); // cannot happen
|
DBUG_ASSERT(row_end != NULL); // cannot happen
|
||||||
DBUG_ASSERT(row_end <= (const char*)m_rows_end);
|
DBUG_ASSERT(row_end <= (const char*)m_rows_end);
|
||||||
|
|
||||||
@ -5682,7 +5796,7 @@ void Rows_log_event::pack_info(Protocol *protocol)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Table_map_log_event member functions
|
Table_map_log_event member functions and support functions
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5924,72 +6038,9 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
|
|||||||
*/
|
*/
|
||||||
DBUG_ASSERT(m_table->in_use);
|
DBUG_ASSERT(m_table->in_use);
|
||||||
|
|
||||||
/*
|
table_def const def(m_coltype, m_colcnt);
|
||||||
Check that the number of columns and the field types in the
|
if (def.compatible_with(rli, m_table))
|
||||||
event match the number of columns and field types in the opened
|
|
||||||
table.
|
|
||||||
*/
|
|
||||||
uint col= m_table->s->fields;
|
|
||||||
|
|
||||||
if (col == m_colcnt)
|
|
||||||
{
|
{
|
||||||
while (col-- > 0)
|
|
||||||
if (m_table->field[col]->type() != m_coltype[col])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
TABLE_SHARE const *const tsh= m_table->s;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Check the following termination conditions:
|
|
||||||
|
|
||||||
(col == m_table->s->fields)
|
|
||||||
==> (m_table->s->fields != m_colcnt)
|
|
||||||
(0 <= col < m_table->s->fields)
|
|
||||||
==> (m_table->field[col]->type() != m_coltype[col])
|
|
||||||
|
|
||||||
Logically, A ==> B is equivalent to !A || B
|
|
||||||
|
|
||||||
Since col is unsigned, is suffices to check that col <=
|
|
||||||
tsh->fields. If col wrapped (by decreasing col when it is 0),
|
|
||||||
the number will be UINT_MAX, which is greater than tsh->fields.
|
|
||||||
*/
|
|
||||||
DBUG_ASSERT(!(col == tsh->fields) || tsh->fields != m_colcnt);
|
|
||||||
DBUG_ASSERT(!(col < tsh->fields) ||
|
|
||||||
(m_table->field[col]->type() != m_coltype[col]));
|
|
||||||
|
|
||||||
if (col <= tsh->fields)
|
|
||||||
{
|
|
||||||
/* purecov: begin inspected */
|
|
||||||
/*
|
|
||||||
If we get here, the number of columns in the event didn't
|
|
||||||
match the number of columns in the table on the slave, *or*
|
|
||||||
there were a column in the table on the slave that did not
|
|
||||||
have the same type as given in the event.
|
|
||||||
|
|
||||||
If 'col' has the value that was assigned to it, it was a
|
|
||||||
mismatch between the number of columns on the master and the
|
|
||||||
slave.
|
|
||||||
*/
|
|
||||||
if (col == tsh->fields)
|
|
||||||
{
|
|
||||||
DBUG_ASSERT(tsh->db.str && tsh->table_name.str);
|
|
||||||
slave_print_msg(ERROR_LEVEL, rli, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
|
||||||
"Table width mismatch - "
|
|
||||||
"received %u columns, %s.%s has %u columns",
|
|
||||||
m_colcnt, tsh->db.str, tsh->table_name.str, tsh->fields);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DBUG_ASSERT(col < m_colcnt && col < tsh->fields);
|
|
||||||
DBUG_ASSERT(tsh->db.str && tsh->table_name.str);
|
|
||||||
slave_print_msg(ERROR_LEVEL, rli, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
|
||||||
"Column %d type mismatch - "
|
|
||||||
"received type %d, %s.%s has type %d",
|
|
||||||
col, m_coltype[col], tsh->db.str, tsh->table_name.str,
|
|
||||||
m_table->field[col]->type());
|
|
||||||
}
|
|
||||||
|
|
||||||
thd->query_error= 1;
|
thd->query_error= 1;
|
||||||
error= ERR_BAD_TABLE_DEF;
|
error= ERR_BAD_TABLE_DEF;
|
||||||
goto err;
|
goto err;
|
||||||
@ -6188,19 +6239,21 @@ int Write_rows_log_event::do_after_row_operations(TABLE *table, int error)
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const *Write_rows_log_event::do_prepare_row(THD *thd, TABLE *table,
|
int Write_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
|
||||||
char const *row_start)
|
TABLE *table,
|
||||||
|
char const *row_start,
|
||||||
|
char const **row_end)
|
||||||
{
|
{
|
||||||
char const *ptr= row_start;
|
|
||||||
DBUG_ASSERT(table != NULL);
|
DBUG_ASSERT(table != NULL);
|
||||||
/*
|
DBUG_ASSERT(row_start && row_end);
|
||||||
This assertion actually checks that there is at least as many
|
|
||||||
columns on the slave as on the master.
|
int error;
|
||||||
*/
|
error= unpack_row(rli,
|
||||||
DBUG_ASSERT(table->s->fields >= m_width);
|
table, m_width, table->record[0],
|
||||||
DBUG_ASSERT(ptr);
|
row_start, &m_cols, row_end, &m_master_reclength,
|
||||||
ptr= unpack_row(table, (byte*)table->record[0], ptr, &m_cols);
|
table->write_set, WRITE_ROWS_EVENT);
|
||||||
return ptr;
|
bitmap_copy(table->read_set, table->write_set);
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -6247,21 +6300,111 @@ namespace {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Replace the provided record in the database.
|
Copy "extra" columns from record[1] to record[0].
|
||||||
|
|
||||||
Similar to how it is done in <code>mysql_insert()</code>, we first
|
Copy the extra fields that are not present on the master but are
|
||||||
try to do a <code>ha_write_row()</code> and of that fails due to
|
present on the slave from record[1] to record[0]. This is used
|
||||||
duplicated keys (or indices), we do an <code>ha_update_row()</code>
|
after fetching a record that are to be updated, either inside
|
||||||
or a <code>ha_delete_row()</code> instead.
|
replace_record() or as part of executing an update_row().
|
||||||
|
|
||||||
@param thd Thread context for writing the record.
|
|
||||||
@param table Table to which record should be written.
|
|
||||||
|
|
||||||
@return Error code on failure, 0 on success.
|
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
replace_record(THD *thd, TABLE *table)
|
copy_extra_record_fields(TABLE *table,
|
||||||
|
my_size_t master_reclength,
|
||||||
|
my_ptrdiff_t master_fields)
|
||||||
{
|
{
|
||||||
|
DBUG_PRINT("info", ("Copying to %p "
|
||||||
|
"from field %d at offset %u "
|
||||||
|
"to field %d at offset %u",
|
||||||
|
table->record[0],
|
||||||
|
master_fields, master_reclength,
|
||||||
|
table->s->fields, table->s->reclength));
|
||||||
|
/*
|
||||||
|
Copying the extra fields of the slave that does not exist on
|
||||||
|
master into record[0] (which are basically the default values).
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(master_reclength <= table->s->reclength);
|
||||||
|
if (master_reclength < table->s->reclength)
|
||||||
|
bmove_align(table->record[0] + master_reclength,
|
||||||
|
table->record[1] + master_reclength,
|
||||||
|
table->s->reclength - master_reclength);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Bit columns are special. We iterate over all the remaining
|
||||||
|
columns and copy the "extra" bits to the new record. This is
|
||||||
|
not a very good solution: it should be refactored on
|
||||||
|
opportunity.
|
||||||
|
|
||||||
|
REFACTORING SUGGESTION (Matz). Introduce a member function
|
||||||
|
similar to move_field_offset() called copy_field_offset() to
|
||||||
|
copy field values and implement it for all Field subclasses. Use
|
||||||
|
this function to copy data from the found record to the record
|
||||||
|
that are going to be inserted.
|
||||||
|
|
||||||
|
The copy_field_offset() function need to be a virtual function,
|
||||||
|
which in this case will prevent copying an entire range of
|
||||||
|
fields efficiently.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
Field **field_ptr= table->field + master_fields;
|
||||||
|
for ( ; *field_ptr ; ++field_ptr)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Set the null bit according to the values in record[1]
|
||||||
|
*/
|
||||||
|
if ((*field_ptr)->maybe_null() &&
|
||||||
|
(*field_ptr)->is_null_in_record(reinterpret_cast<uchar*>(table->record[1])))
|
||||||
|
(*field_ptr)->set_null();
|
||||||
|
else
|
||||||
|
(*field_ptr)->set_notnull();
|
||||||
|
|
||||||
|
/*
|
||||||
|
Do the extra work for special columns.
|
||||||
|
*/
|
||||||
|
switch ((*field_ptr)->real_type())
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
/* Nothing to do */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FIELD_TYPE_BIT:
|
||||||
|
Field_bit *f= static_cast<Field_bit*>(*field_ptr);
|
||||||
|
my_ptrdiff_t const offset= table->record[1] - table->record[0];
|
||||||
|
uchar const bits=
|
||||||
|
get_rec_bits(f->bit_ptr + offset, f->bit_ofs, f->bit_len);
|
||||||
|
set_rec_bits(bits, f->bit_ptr, f->bit_ofs, f->bit_len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0; // All OK
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Replace the provided record in the database.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
replace_record()
|
||||||
|
thd Thread context for writing the record.
|
||||||
|
table Table to which record should be written.
|
||||||
|
master_reclength
|
||||||
|
Offset to first column that is not present on the master,
|
||||||
|
alternatively the length of the record on the master
|
||||||
|
side.
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
Error code on failure, 0 on success.
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Similar to how it is done in mysql_insert(), we first try to do
|
||||||
|
a ha_write_row() and of that fails due to duplicated keys (or
|
||||||
|
indices), we do an ha_update_row() or a ha_delete_row() instead.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
replace_record(THD *thd, TABLE *table,
|
||||||
|
ulong const master_reclength,
|
||||||
|
uint const master_fields)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("replace_record");
|
||||||
DBUG_ASSERT(table != NULL && thd != NULL);
|
DBUG_ASSERT(table != NULL && thd != NULL);
|
||||||
|
|
||||||
int error;
|
int error;
|
||||||
@ -6273,7 +6416,7 @@ replace_record(THD *thd, TABLE *table)
|
|||||||
if ((keynum= table->file->get_dup_key(error)) < 0)
|
if ((keynum= table->file->get_dup_key(error)) < 0)
|
||||||
{
|
{
|
||||||
/* We failed to retrieve the duplicate key */
|
/* We failed to retrieve the duplicate key */
|
||||||
return HA_ERR_FOUND_DUPP_KEY;
|
DBUG_RETURN(HA_ERR_FOUND_DUPP_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -6290,20 +6433,20 @@ replace_record(THD *thd, TABLE *table)
|
|||||||
{
|
{
|
||||||
error= table->file->rnd_pos(table->record[1], table->file->dup_ref);
|
error= table->file->rnd_pos(table->record[1], table->file->dup_ref);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (table->file->extra(HA_EXTRA_FLUSH_CACHE))
|
if (table->file->extra(HA_EXTRA_FLUSH_CACHE))
|
||||||
{
|
{
|
||||||
return my_errno;
|
DBUG_RETURN(my_errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key.get() == NULL)
|
if (key.get() == NULL)
|
||||||
{
|
{
|
||||||
key.assign(static_cast<char*>(my_alloca(table->s->max_unique_length)));
|
key.assign(static_cast<char*>(my_alloca(table->s->max_unique_length)));
|
||||||
if (key.get() == NULL)
|
if (key.get() == NULL)
|
||||||
return ENOMEM;
|
DBUG_RETURN(ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
key_copy((byte*)key.get(), table->record[0], table->key_info + keynum, 0);
|
key_copy((byte*)key.get(), table->record[0], table->key_info + keynum, 0);
|
||||||
@ -6312,7 +6455,7 @@ replace_record(THD *thd, TABLE *table)
|
|||||||
table->key_info[keynum].key_length,
|
table->key_info[keynum].key_length,
|
||||||
HA_READ_KEY_EXACT);
|
HA_READ_KEY_EXACT);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -6320,6 +6463,12 @@ replace_record(THD *thd, TABLE *table)
|
|||||||
will enable us to update it or, alternatively, delete it (so
|
will enable us to update it or, alternatively, delete it (so
|
||||||
that we can insert the new row afterwards).
|
that we can insert the new row afterwards).
|
||||||
|
|
||||||
|
First we copy the columns into table->record[0] that are not
|
||||||
|
present on the master from table->record[1], if there are any.
|
||||||
|
*/
|
||||||
|
copy_extra_record_fields(table, master_reclength, master_fields);
|
||||||
|
|
||||||
|
/*
|
||||||
REPLACE is defined as either INSERT or DELETE + INSERT. If
|
REPLACE is defined as either INSERT or DELETE + INSERT. If
|
||||||
possible, we can replace it with an UPDATE, but that will not
|
possible, we can replace it with an UPDATE, but that will not
|
||||||
work on InnoDB if FOREIGN KEY checks are necessary.
|
work on InnoDB if FOREIGN KEY checks are necessary.
|
||||||
@ -6339,22 +6488,22 @@ replace_record(THD *thd, TABLE *table)
|
|||||||
{
|
{
|
||||||
error=table->file->ha_update_row(table->record[1],
|
error=table->file->ha_update_row(table->record[1],
|
||||||
table->record[0]);
|
table->record[0]);
|
||||||
return error;
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((error= table->file->ha_delete_row(table->record[1])))
|
if ((error= table->file->ha_delete_row(table->record[1])))
|
||||||
return error;
|
DBUG_RETURN(error);
|
||||||
/* Will retry ha_write_row() with the offending row removed. */
|
/* Will retry ha_write_row() with the offending row removed. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return error;
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Write_rows_log_event::do_exec_row(TABLE *table)
|
int Write_rows_log_event::do_exec_row(TABLE *table)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(table != NULL);
|
DBUG_ASSERT(table != NULL);
|
||||||
int error= replace_record(thd, table);
|
int error= replace_record(thd, table, m_master_reclength, m_width);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
|
#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
|
||||||
@ -6640,20 +6789,23 @@ int Delete_rows_log_event::do_after_row_operations(TABLE *table, int error)
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const *Delete_rows_log_event::do_prepare_row(THD *thd, TABLE *table,
|
int Delete_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
|
||||||
char const *row_start)
|
TABLE *table,
|
||||||
|
char const *row_start,
|
||||||
|
char const **row_end)
|
||||||
{
|
{
|
||||||
char const *ptr= row_start;
|
int error;
|
||||||
DBUG_ASSERT(ptr);
|
DBUG_ASSERT(row_start && row_end);
|
||||||
/*
|
/*
|
||||||
This assertion actually checks that there is at least as many
|
This assertion actually checks that there is at least as many
|
||||||
columns on the slave as on the master.
|
columns on the slave as on the master.
|
||||||
*/
|
*/
|
||||||
DBUG_ASSERT(table->s->fields >= m_width);
|
DBUG_ASSERT(table->s->fields >= m_width);
|
||||||
|
|
||||||
DBUG_ASSERT(ptr != NULL);
|
error= unpack_row(rli,
|
||||||
ptr= unpack_row(table, table->record[0], ptr, &m_cols);
|
table, m_width, table->record[0],
|
||||||
|
row_start, &m_cols, row_end, &m_master_reclength,
|
||||||
|
table->read_set, DELETE_ROWS_EVENT);
|
||||||
/*
|
/*
|
||||||
If we will access rows using the random access method, m_key will
|
If we will access rows using the random access method, m_key will
|
||||||
be set to NULL, so we do not need to make a key copy in that case.
|
be set to NULL, so we do not need to make a key copy in that case.
|
||||||
@ -6665,7 +6817,7 @@ char const *Delete_rows_log_event::do_prepare_row(THD *thd, TABLE *table,
|
|||||||
key_copy(m_key, table->record[0], key_info, 0);
|
key_copy(m_key, table->record[0], key_info, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ptr;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Delete_rows_log_event::do_exec_row(TABLE *table)
|
int Delete_rows_log_event::do_exec_row(TABLE *table)
|
||||||
@ -6779,11 +6931,13 @@ int Update_rows_log_event::do_after_row_operations(TABLE *table, int error)
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const *Update_rows_log_event::do_prepare_row(THD *thd, TABLE *table,
|
int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
|
||||||
char const *row_start)
|
TABLE *table,
|
||||||
|
char const *row_start,
|
||||||
|
char const **row_end)
|
||||||
{
|
{
|
||||||
char const *ptr= row_start;
|
int error;
|
||||||
DBUG_ASSERT(ptr);
|
DBUG_ASSERT(row_start && row_end);
|
||||||
/*
|
/*
|
||||||
This assertion actually checks that there is at least as many
|
This assertion actually checks that there is at least as many
|
||||||
columns on the slave as on the master.
|
columns on the slave as on the master.
|
||||||
@ -6791,10 +6945,16 @@ char const *Update_rows_log_event::do_prepare_row(THD *thd, TABLE *table,
|
|||||||
DBUG_ASSERT(table->s->fields >= m_width);
|
DBUG_ASSERT(table->s->fields >= m_width);
|
||||||
|
|
||||||
/* record[0] is the before image for the update */
|
/* record[0] is the before image for the update */
|
||||||
ptr= unpack_row(table, table->record[0], ptr, &m_cols);
|
error= unpack_row(rli,
|
||||||
DBUG_ASSERT(ptr != NULL);
|
table, m_width, table->record[0],
|
||||||
|
row_start, &m_cols, row_end, &m_master_reclength,
|
||||||
|
table->read_set, UPDATE_ROWS_EVENT);
|
||||||
|
row_start = *row_end;
|
||||||
/* m_after_image is the after image for the update */
|
/* m_after_image is the after image for the update */
|
||||||
ptr= unpack_row(table, m_after_image, ptr, &m_cols);
|
error= unpack_row(rli,
|
||||||
|
table, m_width, m_after_image,
|
||||||
|
row_start, &m_cols, row_end, &m_master_reclength,
|
||||||
|
table->write_set, UPDATE_ROWS_EVENT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If we will access rows using the random access method, m_key will
|
If we will access rows using the random access method, m_key will
|
||||||
@ -6807,7 +6967,7 @@ char const *Update_rows_log_event::do_prepare_row(THD *thd, TABLE *table,
|
|||||||
key_copy(m_key, table->record[0], key_info, 0);
|
key_copy(m_key, table->record[0], key_info, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ptr;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Update_rows_log_event::do_exec_row(TABLE *table)
|
int Update_rows_log_event::do_exec_row(TABLE *table)
|
||||||
@ -6825,17 +6985,20 @@ int Update_rows_log_event::do_exec_row(TABLE *table)
|
|||||||
example, the partition engine).
|
example, the partition engine).
|
||||||
|
|
||||||
Since find_and_fetch_row() puts the fetched record (i.e., the old
|
Since find_and_fetch_row() puts the fetched record (i.e., the old
|
||||||
record) in record[0], we have to move it out of the way and into
|
record) in record[1], we can keep it there. We put the new record
|
||||||
record[1]. After that, we can put the new record (i.e., the after
|
(i.e., the after image) into record[0], and copy the fields that
|
||||||
image) into record[0].
|
are on the slave (i.e., in record[1]) into record[0], effectively
|
||||||
|
overwriting the default values that where put there by the
|
||||||
|
unpack_row() function.
|
||||||
*/
|
*/
|
||||||
bmove_align(table->record[1], table->record[0], table->s->reclength);
|
|
||||||
bmove_align(table->record[0], m_after_image, table->s->reclength);
|
bmove_align(table->record[0], m_after_image, table->s->reclength);
|
||||||
|
copy_extra_record_fields(table, m_master_reclength, m_width);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Now we should have the right row to update. The old row (the one
|
Now we have the right row to update. The old row (the one we're
|
||||||
we're looking for) has to be in record[1] and the new row has to
|
looking for) is in record[1] and the new row has is in record[0].
|
||||||
be in record[0] for all storage engines to work correctly.
|
We also have copied the original values already in the slave's
|
||||||
|
database into the after image delivered from the master.
|
||||||
*/
|
*/
|
||||||
error= table->file->ha_update_row(table->record[1], table->record[0]);
|
error= table->file->ha_update_row(table->record[1], table->record[0]);
|
||||||
|
|
||||||
|
@ -1874,6 +1874,7 @@ protected:
|
|||||||
ulong m_table_id; /* Table ID */
|
ulong m_table_id; /* Table ID */
|
||||||
MY_BITMAP m_cols; /* Bitmap denoting columns available */
|
MY_BITMAP m_cols; /* Bitmap denoting columns available */
|
||||||
ulong m_width; /* The width of the columns bitmap */
|
ulong m_width; /* The width of the columns bitmap */
|
||||||
|
ulong m_master_reclength; /* Length of record on master side */
|
||||||
|
|
||||||
/* Bit buffer in the same memory as the class */
|
/* Bit buffer in the same memory as the class */
|
||||||
uint32 m_bitbuf[128/(sizeof(uint32)*8)];
|
uint32 m_bitbuf[128/(sizeof(uint32)*8)];
|
||||||
@ -1927,12 +1928,15 @@ private:
|
|||||||
since SQL thread specific data is not available: that data is made
|
since SQL thread specific data is not available: that data is made
|
||||||
available for the do_exec function.
|
available for the do_exec function.
|
||||||
|
|
||||||
RETURN VALUE
|
|
||||||
A pointer to the start of the next row, or NULL if the preparation
|
A pointer to the start of the next row, or NULL if the preparation
|
||||||
failed. Currently, preparation cannot fail, but don't rely on this
|
failed. Currently, preparation cannot fail, but don't rely on this
|
||||||
behavior.
|
behavior.
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
Error code, if something went wrong, 0 otherwise.
|
||||||
*/
|
*/
|
||||||
virtual char const *do_prepare_row(THD*, TABLE*, char const *row_start) = 0;
|
virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*,
|
||||||
|
char const *row_start, char const **row_end) = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Primitive to do the actual execution necessary for a row.
|
Primitive to do the actual execution necessary for a row.
|
||||||
@ -2000,10 +2004,11 @@ private:
|
|||||||
gptr m_memory;
|
gptr m_memory;
|
||||||
byte *m_after_image;
|
byte *m_after_image;
|
||||||
|
|
||||||
virtual int do_before_row_operations(TABLE *table);
|
virtual int do_before_row_operations(TABLE *table);
|
||||||
virtual int do_after_row_operations(TABLE *table, int error);
|
virtual int do_after_row_operations(TABLE *table, int error);
|
||||||
virtual char const *do_prepare_row(THD*, TABLE*, char const *row_start);
|
virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*,
|
||||||
virtual int do_exec_row(TABLE *table);
|
char const *row_start, char const **row_end);
|
||||||
|
virtual int do_exec_row(TABLE *table);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2064,10 +2069,11 @@ private:
|
|||||||
byte *m_key;
|
byte *m_key;
|
||||||
byte *m_after_image;
|
byte *m_after_image;
|
||||||
|
|
||||||
virtual int do_before_row_operations(TABLE *table);
|
virtual int do_before_row_operations(TABLE *table);
|
||||||
virtual int do_after_row_operations(TABLE *table, int error);
|
virtual int do_after_row_operations(TABLE *table, int error);
|
||||||
virtual char const *do_prepare_row(THD*, TABLE*, char const *row_start);
|
virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*,
|
||||||
virtual int do_exec_row(TABLE *table);
|
char const *row_start, char const **row_end);
|
||||||
|
virtual int do_exec_row(TABLE *table);
|
||||||
#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
|
#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2134,10 +2140,11 @@ private:
|
|||||||
byte *m_key;
|
byte *m_key;
|
||||||
byte *m_after_image;
|
byte *m_after_image;
|
||||||
|
|
||||||
virtual int do_before_row_operations(TABLE *table);
|
virtual int do_before_row_operations(TABLE *table);
|
||||||
virtual int do_after_row_operations(TABLE *table, int error);
|
virtual int do_after_row_operations(TABLE *table, int error);
|
||||||
virtual char const *do_prepare_row(THD*, TABLE*, char const *row_start);
|
virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*,
|
||||||
virtual int do_exec_row(TABLE *table);
|
char const *row_start, char const **row_end);
|
||||||
|
virtual int do_exec_row(TABLE *table);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
except the part which must be in the server and in the client.
|
except the part which must be in the server and in the client.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef MYSQL_PRIV_H
|
||||||
|
#define MYSQL_PRIV_H
|
||||||
|
|
||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
@ -2040,3 +2043,5 @@ bool schema_table_store_record(THD *thd, TABLE *table);
|
|||||||
|
|
||||||
#endif /* MYSQL_SERVER */
|
#endif /* MYSQL_SERVER */
|
||||||
#endif /* MYSQL_CLIENT */
|
#endif /* MYSQL_CLIENT */
|
||||||
|
|
||||||
|
#endif /* MYSQL_PRIV_H */
|
||||||
|
@ -3120,7 +3120,11 @@ with --log-bin instead.");
|
|||||||
global_system_variables.binlog_format= BINLOG_FORMAT_ROW;
|
global_system_variables.binlog_format= BINLOG_FORMAT_ROW;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(HAVE_ROW_BASED_REPLICATION)
|
||||||
|
global_system_variables.binlog_format= BINLOG_FORMAT_MIXED;
|
||||||
|
#else
|
||||||
global_system_variables.binlog_format= BINLOG_FORMAT_STMT;
|
global_system_variables.binlog_format= BINLOG_FORMAT_STMT;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check that we have not let the format to unspecified at this point */
|
/* Check that we have not let the format to unspecified at this point */
|
||||||
@ -4886,7 +4890,13 @@ struct my_option my_long_options[] =
|
|||||||
"supports only statement-based binary logging, so only 'statement' is "
|
"supports only statement-based binary logging, so only 'statement' is "
|
||||||
"a legal value."
|
"a legal value."
|
||||||
#endif
|
#endif
|
||||||
, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
|
, 0, 0, 0, GET_STR, REQUIRED_ARG,
|
||||||
|
#ifdef HAVE_ROW_BASED_REPLICATION
|
||||||
|
BINLOG_FORMAT_MIXED
|
||||||
|
#else
|
||||||
|
BINLOG_FORMAT_STMT
|
||||||
|
#endif
|
||||||
|
, 0, 0, 0, 0, 0 },
|
||||||
{"binlog-do-db", OPT_BINLOG_DO_DB,
|
{"binlog-do-db", OPT_BINLOG_DO_DB,
|
||||||
"Tells the master it should log updates for the specified database, and exclude all others not explicitly mentioned.",
|
"Tells the master it should log updates for the specified database, and exclude all others not explicitly mentioned.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
153
sql/rpl_utility.cc
Normal file
153
sql/rpl_utility.cc
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
/* Copyright 2006 MySQL AB. All rights reserved.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
|
#include "rpl_utility.h"
|
||||||
|
|
||||||
|
uint32
|
||||||
|
field_length_from_packed(enum_field_types const field_type,
|
||||||
|
byte const *const data)
|
||||||
|
{
|
||||||
|
uint32 length;
|
||||||
|
|
||||||
|
switch (field_type) {
|
||||||
|
case MYSQL_TYPE_DECIMAL:
|
||||||
|
case MYSQL_TYPE_NEWDECIMAL:
|
||||||
|
length= ~0UL;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_YEAR:
|
||||||
|
case MYSQL_TYPE_TINY:
|
||||||
|
length= 1;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_SHORT:
|
||||||
|
length= 2;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_INT24:
|
||||||
|
length= 3;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_LONG:
|
||||||
|
length= 4;
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case MYSQL_TYPE_LONGLONG:
|
||||||
|
length= 8;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case MYSQL_TYPE_FLOAT:
|
||||||
|
length= sizeof(float);
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_DOUBLE:
|
||||||
|
length= sizeof(double);
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_NULL:
|
||||||
|
length= 0;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_NEWDATE:
|
||||||
|
length= 3;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_DATE:
|
||||||
|
length= 4;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_TIME:
|
||||||
|
length= 3;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_TIMESTAMP:
|
||||||
|
length= 4;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_DATETIME:
|
||||||
|
length= 8;
|
||||||
|
break;
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_BIT:
|
||||||
|
length= ~0UL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* This case should never be chosen */
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
/* If something goes awfully wrong, it's better to get a string than die */
|
||||||
|
case MYSQL_TYPE_STRING:
|
||||||
|
length= uint2korr(data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MYSQL_TYPE_ENUM:
|
||||||
|
case MYSQL_TYPE_SET:
|
||||||
|
case MYSQL_TYPE_VAR_STRING:
|
||||||
|
case MYSQL_TYPE_VARCHAR:
|
||||||
|
length= ~0UL; // NYI
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MYSQL_TYPE_TINY_BLOB:
|
||||||
|
case MYSQL_TYPE_MEDIUM_BLOB:
|
||||||
|
case MYSQL_TYPE_LONG_BLOB:
|
||||||
|
case MYSQL_TYPE_BLOB:
|
||||||
|
case MYSQL_TYPE_GEOMETRY:
|
||||||
|
length= ~0UL; // NYI
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* table_def member definitions *
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Is the definition compatible with a table?
|
||||||
|
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
table_def::compatible_with(RELAY_LOG_INFO *rli, TABLE *table)
|
||||||
|
const
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
We only check the initial columns for the tables.
|
||||||
|
*/
|
||||||
|
uint const cols_to_check= min(table->s->fields, size());
|
||||||
|
int error= 0;
|
||||||
|
|
||||||
|
TABLE_SHARE const *const tsh= table->s;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To get proper error reporting for all columns of the table, we
|
||||||
|
both check the width and iterate over all columns.
|
||||||
|
*/
|
||||||
|
if (tsh->fields < size())
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(tsh->db.str && tsh->table_name.str);
|
||||||
|
error= 1;
|
||||||
|
slave_print_msg(ERROR_LEVEL, rli, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
||||||
|
"Table width mismatch - "
|
||||||
|
"received %u columns, %s.%s has %u columns",
|
||||||
|
size(), tsh->db.str, tsh->table_name.str, tsh->fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint col= 0 ; col < cols_to_check ; ++col)
|
||||||
|
{
|
||||||
|
if (table->field[col]->type() != type(col))
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(col < size() && col < tsh->fields);
|
||||||
|
DBUG_ASSERT(tsh->db.str && tsh->table_name.str);
|
||||||
|
error= 1;
|
||||||
|
slave_print_msg(ERROR_LEVEL, rli, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
||||||
|
"Column %d type mismatch - "
|
||||||
|
"received type %d, %s.%s has type %d",
|
||||||
|
col, type(col), tsh->db.str, tsh->table_name.str,
|
||||||
|
table->field[col]->type());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
126
sql/rpl_utility.h
Normal file
126
sql/rpl_utility.h
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
/* Copyright 2006 MySQL AB. All rights reserved.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
|
#ifndef RPL_UTILITY_H
|
||||||
|
#define RPL_UTILITY_H
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error "Don't include this C++ header file from a non-C++ file!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "mysql_priv.h"
|
||||||
|
|
||||||
|
uint32
|
||||||
|
field_length_from_packed(enum_field_types const field_type,
|
||||||
|
byte const *const data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
A table definition from the master.
|
||||||
|
|
||||||
|
RESPONSIBILITIES
|
||||||
|
|
||||||
|
- Extract and decode table definition data from the table map event
|
||||||
|
- Check if table definition in table map is compatible with table
|
||||||
|
definition on slave
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
Currently, the only field type data available is an array of the
|
||||||
|
type operators that are present in the table map event.
|
||||||
|
|
||||||
|
TODO
|
||||||
|
|
||||||
|
Add type operands to this structure to allow detection of
|
||||||
|
difference between, e.g., BIT(5) and BIT(10).
|
||||||
|
*/
|
||||||
|
|
||||||
|
class table_def
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/*
|
||||||
|
Convenience declaration of the type of the field type data in a
|
||||||
|
table map event.
|
||||||
|
*/
|
||||||
|
typedef unsigned char field_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
table_def()
|
||||||
|
types Array of types
|
||||||
|
size Number of elements in array 'types'
|
||||||
|
*/
|
||||||
|
table_def(field_type *types, my_size_t size)
|
||||||
|
: m_type(types), m_size(size)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Return the number of fields there is type data for.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
size()
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
The number of fields that there is type data for.
|
||||||
|
*/
|
||||||
|
my_size_t size() const { return m_size; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
Return a representation of the type data for one field.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
type()
|
||||||
|
i Field index to return data for
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
|
||||||
|
Will return a representation of the type data for field
|
||||||
|
'i'. Currently, only the type identifier is returned.
|
||||||
|
*/
|
||||||
|
field_type type(my_ptrdiff_t i) const { return m_type[i]; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
Decide if the table definition is compatible with a table.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
compatible_with()
|
||||||
|
rli Pointer to relay log info
|
||||||
|
table Pointer to table to compare with.
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
Compare the definition with a table to see if it is compatible
|
||||||
|
with it. A table definition is compatible with a table if:
|
||||||
|
|
||||||
|
- the columns types of the table definition is a (not
|
||||||
|
necessarily proper) prefix of the column type of the table, or
|
||||||
|
|
||||||
|
- the other way around
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
1 if the table definition is not compatible with 'table'
|
||||||
|
0 if the table definition is compatible with 'table'
|
||||||
|
*/
|
||||||
|
int compatible_with(RELAY_LOG_INFO *rli, TABLE *table) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
my_size_t m_size; // Number of elements in the types array
|
||||||
|
field_type *m_type; // Array of type descriptors
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* RPL_UTILITY_H */
|
@ -795,7 +795,7 @@ int cmp_splocal_locations(Item_splocal * const *a, Item_splocal * const *b)
|
|||||||
This set is produced by tracking user variable reads during statement
|
This set is produced by tracking user variable reads during statement
|
||||||
execution.
|
execution.
|
||||||
|
|
||||||
Fo SPs, this has the following implications:
|
For SPs, this has the following implications:
|
||||||
1) thd->user_var_events may contain events from several SP statements and
|
1) thd->user_var_events may contain events from several SP statements and
|
||||||
needs to be valid after exection of these statements was finished. In
|
needs to be valid after exection of these statements was finished. In
|
||||||
order to achieve that, we
|
order to achieve that, we
|
||||||
@ -808,6 +808,14 @@ int cmp_splocal_locations(Item_splocal * const *a, Item_splocal * const *b)
|
|||||||
reset_dynamic(&thd->user_var_events);
|
reset_dynamic(&thd->user_var_events);
|
||||||
calls in several different places. (TODO cosider moving this into
|
calls in several different places. (TODO cosider moving this into
|
||||||
mysql_bin_log.write() function)
|
mysql_bin_log.write() function)
|
||||||
|
|
||||||
|
4.2 Auto_increment storage in binlog
|
||||||
|
|
||||||
|
As we may write two statements to binlog from one single logical statement
|
||||||
|
(case of "SELECT func1(),func2()": it is binlogged as "SELECT func1()" and
|
||||||
|
then "SELECT func2()"), we need to reset auto_increment binlog variables
|
||||||
|
after each binlogged SELECT. Otherwise, the auto_increment value of the
|
||||||
|
first SELECT would be used for the second too.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -1527,6 +1535,9 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
|
|||||||
"failed to reflect this change in the binary log");
|
"failed to reflect this change in the binary log");
|
||||||
}
|
}
|
||||||
reset_dynamic(&thd->user_var_events);
|
reset_dynamic(&thd->user_var_events);
|
||||||
|
/* Forget those values, in case more function calls are binlogged: */
|
||||||
|
thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt= 0;
|
||||||
|
thd->auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,6 +634,12 @@ bool THD::store_globals()
|
|||||||
|
|
||||||
void THD::cleanup_after_query()
|
void THD::cleanup_after_query()
|
||||||
{
|
{
|
||||||
|
if (!in_sub_stmt) /* stored functions and triggers are a special case */
|
||||||
|
{
|
||||||
|
/* Forget those values, for next binlogger: */
|
||||||
|
stmt_depends_on_first_successful_insert_id_in_prev_stmt= 0;
|
||||||
|
auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
||||||
|
}
|
||||||
if (first_successful_insert_id_in_cur_stmt > 0)
|
if (first_successful_insert_id_in_cur_stmt > 0)
|
||||||
{
|
{
|
||||||
/* set what LAST_INSERT_ID() will return */
|
/* set what LAST_INSERT_ID() will return */
|
||||||
@ -2661,7 +2667,12 @@ int THD::binlog_delete_row(TABLE* table, bool is_trans,
|
|||||||
int THD::binlog_flush_pending_rows_event(bool stmt_end)
|
int THD::binlog_flush_pending_rows_event(bool stmt_end)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("THD::binlog_flush_pending_rows_event");
|
DBUG_ENTER("THD::binlog_flush_pending_rows_event");
|
||||||
if (!current_stmt_binlog_row_based || !mysql_bin_log.is_open())
|
/*
|
||||||
|
We shall flush the pending event even if we are not in row-based
|
||||||
|
mode: it might be the case that we left row-based mode before
|
||||||
|
flushing anything (e.g., if we have explicitly locked tables).
|
||||||
|
*/
|
||||||
|
if (!mysql_bin_log.is_open())
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2727,6 +2738,21 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
DBUG_PRINT("enter", ("qtype=%d, query='%s'", qtype, query));
|
DBUG_PRINT("enter", ("qtype=%d, query='%s'", qtype, query));
|
||||||
DBUG_ASSERT(query && mysql_bin_log.is_open());
|
DBUG_ASSERT(query && mysql_bin_log.is_open());
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we are not in prelocked mode, mysql_unlock_tables() will be
|
||||||
|
called after this binlog_query(), so we have to flush the pending
|
||||||
|
rows event with the STMT_END_F set to unlock all tables at the
|
||||||
|
slave side as well.
|
||||||
|
|
||||||
|
If we are in prelocked mode, the flushing will be done inside the
|
||||||
|
top-most close_thread_tables().
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_ROW_BASED_REPLICATION
|
||||||
|
if (this->prelocked_mode == NON_PRELOCKED)
|
||||||
|
if (int error= binlog_flush_pending_rows_event(TRUE))
|
||||||
|
DBUG_RETURN(error);
|
||||||
|
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
||||||
|
|
||||||
switch (qtype) {
|
switch (qtype) {
|
||||||
case THD::MYSQL_QUERY_TYPE:
|
case THD::MYSQL_QUERY_TYPE:
|
||||||
/*
|
/*
|
||||||
@ -2740,25 +2766,7 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
case THD::ROW_QUERY_TYPE:
|
case THD::ROW_QUERY_TYPE:
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
#ifdef HAVE_ROW_BASED_REPLICATION
|
||||||
if (current_stmt_binlog_row_based)
|
if (current_stmt_binlog_row_based)
|
||||||
{
|
|
||||||
/*
|
|
||||||
If thd->lock is set, then we are not inside a stored function.
|
|
||||||
In that case, mysql_unlock_tables() will be called after this
|
|
||||||
binlog_query(), so we have to flush the pending rows event
|
|
||||||
with the STMT_END_F set to unlock all tables at the slave side
|
|
||||||
as well.
|
|
||||||
|
|
||||||
We will not flush the pending event, if thd->lock is NULL.
|
|
||||||
This means that we are inside a stored function or trigger, so
|
|
||||||
the flushing will be done inside the top-most
|
|
||||||
close_thread_tables().
|
|
||||||
*/
|
|
||||||
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
||||||
if (this->lock)
|
|
||||||
DBUG_RETURN(binlog_flush_pending_rows_event(TRUE));
|
|
||||||
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
/* Otherwise, we fall through */
|
/* Otherwise, we fall through */
|
||||||
case THD::STMT_QUERY_TYPE:
|
case THD::STMT_QUERY_TYPE:
|
||||||
|
@ -572,7 +572,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
|
|
||||||
free_underlaid_joins(thd, &thd->lex->select_lex);
|
free_underlaid_joins(thd, &thd->lex->select_lex);
|
||||||
joins_freed= TRUE;
|
joins_freed= TRUE;
|
||||||
table->file->ha_release_auto_increment();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Now all rows are inserted. Time to update logs and sends response to
|
Now all rows are inserted. Time to update logs and sends response to
|
||||||
@ -591,6 +590,11 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Do not do this release if this is a delayed insert, it would steal
|
||||||
|
auto_inc values from the delayed_insert thread as they share TABLE.
|
||||||
|
*/
|
||||||
|
table->file->ha_release_auto_increment();
|
||||||
if (!thd->prelocked_mode && table->file->ha_end_bulk_insert() && !error)
|
if (!thd->prelocked_mode && table->file->ha_end_bulk_insert() && !error)
|
||||||
{
|
{
|
||||||
table->file->print_error(my_errno,MYF(0));
|
table->file->print_error(my_errno,MYF(0));
|
||||||
@ -2114,8 +2118,16 @@ bool delayed_insert::handle_inserts(void)
|
|||||||
|
|
||||||
thd.start_time=row->start_time;
|
thd.start_time=row->start_time;
|
||||||
thd.query_start_used=row->query_start_used;
|
thd.query_start_used=row->query_start_used;
|
||||||
/* for the binlog, forget auto_increment ids generated by previous rows */
|
/*
|
||||||
// thd.auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
To get the exact auto_inc interval to store in the binlog we must not
|
||||||
|
use values from the previous interval (of the previous rows).
|
||||||
|
*/
|
||||||
|
bool log_query= (row->log_query && row->query.str != NULL);
|
||||||
|
if (log_query)
|
||||||
|
{
|
||||||
|
table->file->ha_release_auto_increment();
|
||||||
|
thd.auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
||||||
|
}
|
||||||
thd.first_successful_insert_id_in_prev_stmt=
|
thd.first_successful_insert_id_in_prev_stmt=
|
||||||
row->first_successful_insert_id_in_prev_stmt;
|
row->first_successful_insert_id_in_prev_stmt;
|
||||||
thd.stmt_depends_on_first_successful_insert_id_in_prev_stmt=
|
thd.stmt_depends_on_first_successful_insert_id_in_prev_stmt=
|
||||||
@ -2156,7 +2168,7 @@ bool delayed_insert::handle_inserts(void)
|
|||||||
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row->log_query && row->query.str != NULL && mysql_bin_log.is_open())
|
if (log_query && mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
If the query has several rows to insert, only the first row will come
|
If the query has several rows to insert, only the first row will come
|
||||||
@ -2552,7 +2564,6 @@ bool select_insert::send_data(List<Item> &values)
|
|||||||
table->next_number_field->reset();
|
table->next_number_field->reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
table->file->ha_release_auto_increment();
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2626,6 +2637,7 @@ void select_insert::send_error(uint errcode,const char *err)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ha_rollback_stmt(thd);
|
ha_rollback_stmt(thd);
|
||||||
|
table->file->ha_release_auto_increment();
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2676,6 +2688,7 @@ bool select_insert::send_eof()
|
|||||||
}
|
}
|
||||||
if ((error2=ha_autocommit_or_rollback(thd,error)) && ! error)
|
if ((error2=ha_autocommit_or_rollback(thd,error)) && ! error)
|
||||||
error=error2;
|
error=error2;
|
||||||
|
table->file->ha_release_auto_increment();
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
table->file->print_error(error,MYF(0));
|
table->file->print_error(error,MYF(0));
|
||||||
|
@ -5830,9 +5830,14 @@ void mysql_reset_thd_for_next_command(THD *thd)
|
|||||||
DBUG_ASSERT(!thd->spcont); /* not for substatements of routines */
|
DBUG_ASSERT(!thd->spcont); /* not for substatements of routines */
|
||||||
thd->free_list= 0;
|
thd->free_list= 0;
|
||||||
thd->select_number= 1;
|
thd->select_number= 1;
|
||||||
|
/*
|
||||||
|
Those two lines below are theoretically unneeded as
|
||||||
|
THD::cleanup_after_query() should take care of this already.
|
||||||
|
*/
|
||||||
thd->auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
thd->auto_inc_intervals_in_cur_stmt_for_binlog.empty();
|
||||||
thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt=
|
thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt= 0;
|
||||||
thd->query_start_used= 0;
|
|
||||||
|
thd->query_start_used= 0;
|
||||||
thd->is_fatal_error= thd->time_zone_used= 0;
|
thd->is_fatal_error= thd->time_zone_used= 0;
|
||||||
thd->server_status&= ~ (SERVER_MORE_RESULTS_EXISTS |
|
thd->server_status&= ~ (SERVER_MORE_RESULTS_EXISTS |
|
||||||
SERVER_QUERY_NO_INDEX_USED |
|
SERVER_QUERY_NO_INDEX_USED |
|
||||||
|
233
sql/sql_show.cc
233
sql/sql_show.cc
@ -1995,15 +1995,22 @@ void remove_status_vars(SHOW_VAR *list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void make_upper(char *buf)
|
||||||
|
{
|
||||||
|
for (; *buf; buf++)
|
||||||
|
*buf= my_toupper(system_charset_info, *buf);
|
||||||
|
}
|
||||||
|
|
||||||
static bool show_status_array(THD *thd, const char *wild,
|
static bool show_status_array(THD *thd, const char *wild,
|
||||||
SHOW_VAR *variables,
|
SHOW_VAR *variables,
|
||||||
enum enum_var_type value_type,
|
enum enum_var_type value_type,
|
||||||
struct system_status_var *status_var,
|
struct system_status_var *status_var,
|
||||||
const char *prefix, TABLE *table)
|
const char *prefix, TABLE *table,
|
||||||
|
bool ucase_names)
|
||||||
{
|
{
|
||||||
char buff[SHOW_VAR_FUNC_BUFF_SIZE], *prefix_end;
|
char buff[SHOW_VAR_FUNC_BUFF_SIZE], *prefix_end;
|
||||||
/* the variable name should not be longer then 80 characters */
|
/* the variable name should not be longer than 64 characters */
|
||||||
char name_buffer[80];
|
char name_buffer[64];
|
||||||
int len;
|
int len;
|
||||||
LEX_STRING null_lex_str;
|
LEX_STRING null_lex_str;
|
||||||
SHOW_VAR tmp, *var;
|
SHOW_VAR tmp, *var;
|
||||||
@ -2021,6 +2028,8 @@ static bool show_status_array(THD *thd, const char *wild,
|
|||||||
{
|
{
|
||||||
strnmov(prefix_end, variables->name, len);
|
strnmov(prefix_end, variables->name, len);
|
||||||
name_buffer[sizeof(name_buffer)-1]=0; /* Safety */
|
name_buffer[sizeof(name_buffer)-1]=0; /* Safety */
|
||||||
|
if (ucase_names)
|
||||||
|
make_upper(name_buffer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if var->type is SHOW_FUNC, call the function.
|
if var->type is SHOW_FUNC, call the function.
|
||||||
@ -2032,8 +2041,8 @@ static bool show_status_array(THD *thd, const char *wild,
|
|||||||
SHOW_TYPE show_type=var->type;
|
SHOW_TYPE show_type=var->type;
|
||||||
if (show_type == SHOW_ARRAY)
|
if (show_type == SHOW_ARRAY)
|
||||||
{
|
{
|
||||||
show_status_array(thd, wild, (SHOW_VAR *) var->value,
|
show_status_array(thd, wild, (SHOW_VAR *) var->value, value_type,
|
||||||
value_type, status_var, name_buffer, table);
|
status_var, name_buffer, table, ucase_names);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2042,7 +2051,7 @@ static bool show_status_array(THD *thd, const char *wild,
|
|||||||
{
|
{
|
||||||
char *value=var->value;
|
char *value=var->value;
|
||||||
const char *pos, *end; // We assign a lot of const's
|
const char *pos, *end; // We assign a lot of const's
|
||||||
long nr;
|
|
||||||
if (show_type == SHOW_SYS)
|
if (show_type == SHOW_SYS)
|
||||||
{
|
{
|
||||||
show_type= ((sys_var*) value)->type();
|
show_type= ((sys_var*) value)->type();
|
||||||
@ -2124,6 +2133,7 @@ static bool show_status_array(THD *thd, const char *wild,
|
|||||||
table->field[0]->store(name_buffer, strlen(name_buffer),
|
table->field[0]->store(name_buffer, strlen(name_buffer),
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
table->field[1]->store(pos, (uint32) (end - pos), system_charset_info);
|
table->field[1]->store(pos, (uint32) (end - pos), system_charset_info);
|
||||||
|
table->field[1]->set_notnull();
|
||||||
if (schema_table_store_record(thd, table))
|
if (schema_table_store_record(thd, table))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
@ -4387,7 +4397,7 @@ int fill_variables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
const char *wild= lex->wild ? lex->wild->ptr() : NullS;
|
const char *wild= lex->wild ? lex->wild->ptr() : NullS;
|
||||||
pthread_mutex_lock(&LOCK_global_system_variables);
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
||||||
res= show_status_array(thd, wild, init_vars,
|
res= show_status_array(thd, wild, init_vars,
|
||||||
lex->option_type, 0, "", tables->table);
|
lex->option_type, 0, "", tables->table, 0);
|
||||||
pthread_mutex_unlock(&LOCK_global_system_variables);
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
@ -4407,7 +4417,8 @@ int fill_status(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
(SHOW_VAR *)all_status_vars.buffer,
|
(SHOW_VAR *)all_status_vars.buffer,
|
||||||
OPT_GLOBAL,
|
OPT_GLOBAL,
|
||||||
(lex->option_type == OPT_GLOBAL ?
|
(lex->option_type == OPT_GLOBAL ?
|
||||||
&tmp: thd->initial_status_var), "",tables->table);
|
&tmp: thd->initial_status_var),
|
||||||
|
"", tables->table, 0);
|
||||||
pthread_mutex_unlock(&LOCK_status);
|
pthread_mutex_unlock(&LOCK_status);
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
@ -4556,6 +4567,21 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MYSQL_TYPE_DECIMAL:
|
||||||
|
if (!(item= new Item_decimal((longlong) fields_info->value, false)))
|
||||||
|
{
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
item->unsigned_flag= (fields_info->field_length/10000)%10;
|
||||||
|
item->decimals= fields_info->field_length%10;
|
||||||
|
item->max_length= (fields_info->field_length/100)%100;
|
||||||
|
if (item->unsigned_flag == 0)
|
||||||
|
item->max_length+= 1;
|
||||||
|
if (item->decimals > 0)
|
||||||
|
item->max_length+= 1;
|
||||||
|
item->set_name(fields_info->field_name,
|
||||||
|
strlen(fields_info->field_name), cs);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* this should be changed when Item_empty_string is fixed(in 4.1) */
|
/* this should be changed when Item_empty_string is fixed(in 4.1) */
|
||||||
if (!(item= new Item_empty_string("", 0, cs)))
|
if (!(item= new Item_empty_string("", 0, cs)))
|
||||||
@ -4995,6 +5021,173 @@ int fill_schema_files(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fill_schema_status(THD *thd, SHOW_VAR *variables,
|
||||||
|
struct system_status_var *status_var,
|
||||||
|
const char *prefix, TABLE *table)
|
||||||
|
{
|
||||||
|
SHOW_VAR tmp, *var;
|
||||||
|
SHOW_TYPE show_type;
|
||||||
|
LEX_STRING null_lex_str;
|
||||||
|
char buff[SHOW_VAR_FUNC_BUFF_SIZE];
|
||||||
|
char name_buf[64], *name_pos;
|
||||||
|
int name_len;
|
||||||
|
DBUG_ENTER("fill_schema_status");
|
||||||
|
|
||||||
|
null_lex_str.str= 0;
|
||||||
|
null_lex_str.length= 0;
|
||||||
|
|
||||||
|
name_pos= strnmov(name_buf, prefix, sizeof(name_buf) - 1);
|
||||||
|
if (*prefix)
|
||||||
|
*name_pos++= '_';
|
||||||
|
name_len= name_buf + sizeof(name_buf) - name_pos;
|
||||||
|
|
||||||
|
for (; variables->name; variables++)
|
||||||
|
{
|
||||||
|
strnmov(name_pos, variables->name, name_len);
|
||||||
|
name_buf[sizeof(name_buf) - 1]= 0;
|
||||||
|
make_upper(name_buf);
|
||||||
|
|
||||||
|
for (var= variables; var->type == SHOW_FUNC; var= &tmp)
|
||||||
|
((mysql_show_var_func)(var->value))(thd, &tmp, buff);
|
||||||
|
|
||||||
|
show_type= var->type;
|
||||||
|
|
||||||
|
if (show_type == SHOW_ARRAY)
|
||||||
|
{
|
||||||
|
fill_schema_status(thd, (SHOW_VAR*) var->value,
|
||||||
|
status_var, name_buf, table);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *value= var->value;
|
||||||
|
|
||||||
|
restore_record(table, s->default_values);
|
||||||
|
table->field[0]->store(name_buf, strlen(name_buf), system_charset_info);
|
||||||
|
|
||||||
|
if (show_type == SHOW_SYS)
|
||||||
|
{
|
||||||
|
show_type= ((sys_var*) value)->type();
|
||||||
|
value= (char*) ((sys_var*) value)->value_ptr(thd, OPT_GLOBAL,
|
||||||
|
&null_lex_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (show_type)
|
||||||
|
{
|
||||||
|
case SHOW_DOUBLE_STATUS:
|
||||||
|
value= (char*) status_var + (ulong) value;
|
||||||
|
table->field[1]->store(*(double*) value);
|
||||||
|
break;
|
||||||
|
case SHOW_LONG_STATUS:
|
||||||
|
value= (char*) status_var + (ulong) value;
|
||||||
|
/* fall through */
|
||||||
|
case SHOW_LONG:
|
||||||
|
case SHOW_LONG_NOFLUSH: /* the difference lies in refresh_status() */
|
||||||
|
table->field[1]->store((longlong) *(long*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_LONGLONG:
|
||||||
|
table->field[1]->store(*(longlong*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_HA_ROWS:
|
||||||
|
table->field[1]->store((longlong) *(ha_rows*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_BOOL:
|
||||||
|
table->field[1]->store((longlong) *(bool*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_MY_BOOL:
|
||||||
|
table->field[1]->store((longlong) *(my_bool*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_INT:
|
||||||
|
table->field[1]->store((longlong) *(uint32*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_HAVE: /* always displayed as 0 */
|
||||||
|
table->field[1]->store((longlong) 0, false);
|
||||||
|
break;
|
||||||
|
case SHOW_CHAR_PTR:
|
||||||
|
value= *(char**) value;
|
||||||
|
/* fall through */
|
||||||
|
case SHOW_CHAR: /* always displayed as 0 */
|
||||||
|
table->field[1]->store((longlong) 0, false);
|
||||||
|
break;
|
||||||
|
case SHOW_KEY_CACHE_LONG:
|
||||||
|
value= (char*) dflt_key_cache + (ulong) value;
|
||||||
|
table->field[1]->store((longlong) *(long*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_KEY_CACHE_LONGLONG:
|
||||||
|
value= (char*) dflt_key_cache + (ulong) value;
|
||||||
|
table->field[1]->store(*(longlong*) value, false);
|
||||||
|
break;
|
||||||
|
case SHOW_UNDEF: /* always displayed as 0 */
|
||||||
|
table->field[1]->store((longlong) 0, false);
|
||||||
|
break;
|
||||||
|
case SHOW_SYS: /* cannot happen */
|
||||||
|
default:
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
table->field[1]->set_notnull();
|
||||||
|
if (schema_table_store_record(thd, table))
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int fill_schema_global_status(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||||
|
{
|
||||||
|
STATUS_VAR tmp;
|
||||||
|
int res= 0;
|
||||||
|
DBUG_ENTER("fill_schema_global_status");
|
||||||
|
|
||||||
|
pthread_mutex_lock(&LOCK_status);
|
||||||
|
calc_sum_of_all_status(&tmp);
|
||||||
|
res= fill_schema_status(thd, (SHOW_VAR*) all_status_vars.buffer,
|
||||||
|
&tmp, "", tables->table);
|
||||||
|
pthread_mutex_unlock(&LOCK_status);
|
||||||
|
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int fill_schema_session_status(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||||
|
{
|
||||||
|
int res= 0;
|
||||||
|
DBUG_ENTER("fill_schema_session_status");
|
||||||
|
|
||||||
|
pthread_mutex_lock(&LOCK_status);
|
||||||
|
res= fill_schema_status(thd, (SHOW_VAR*) all_status_vars.buffer,
|
||||||
|
&thd->status_var, "", tables->table);
|
||||||
|
pthread_mutex_unlock(&LOCK_status);
|
||||||
|
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int fill_schema_global_variables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||||
|
{
|
||||||
|
int res= 0;
|
||||||
|
DBUG_ENTER("fill_schema_global_variables");
|
||||||
|
|
||||||
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
||||||
|
res= show_status_array(thd, "", init_vars, OPT_GLOBAL,
|
||||||
|
NULL, "", tables->table, 1);
|
||||||
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||||
|
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int fill_schema_session_variables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||||
|
{
|
||||||
|
int res= 0;
|
||||||
|
DBUG_ENTER("fill_schema_session_variables");
|
||||||
|
|
||||||
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
||||||
|
res= show_status_array(thd, "", init_vars, OPT_SESSION,
|
||||||
|
NULL, "", tables->table, 1);
|
||||||
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||||
|
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
}
|
||||||
|
|
||||||
ST_FIELD_INFO schema_fields_info[]=
|
ST_FIELD_INFO schema_fields_info[]=
|
||||||
{
|
{
|
||||||
{"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
{"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||||
@ -5347,6 +5540,22 @@ ST_FIELD_INFO variables_fields_info[]=
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
ST_FIELD_INFO status_fields_info[]=
|
||||||
|
{
|
||||||
|
{"VARIABLE_NAME", 64, MYSQL_TYPE_STRING, 0, 0, "Variable_name"},
|
||||||
|
{"VARIABLE_VALUE", 2207, MYSQL_TYPE_DECIMAL, 0, 0, "Value"},
|
||||||
|
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
ST_FIELD_INFO system_variables_fields_info[]=
|
||||||
|
{
|
||||||
|
{"VARIABLE_NAME", 64, MYSQL_TYPE_STRING, 0, 0, "Variable_name"},
|
||||||
|
{"VARIABLE_VALUE", 65535, MYSQL_TYPE_STRING, 0, 1, "Value"},
|
||||||
|
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
ST_FIELD_INFO processlist_fields_info[]=
|
ST_FIELD_INFO processlist_fields_info[]=
|
||||||
{
|
{
|
||||||
{"ID", 4, MYSQL_TYPE_LONG, 0, 0, "Id"},
|
{"ID", 4, MYSQL_TYPE_LONG, 0, 0, "Id"},
|
||||||
@ -5459,6 +5668,10 @@ ST_SCHEMA_TABLE schema_tables[]=
|
|||||||
Events::fill_schema_events, make_old_format, 0, -1, -1, 0},
|
Events::fill_schema_events, make_old_format, 0, -1, -1, 0},
|
||||||
{"FILES", files_fields_info, create_schema_table,
|
{"FILES", files_fields_info, create_schema_table,
|
||||||
fill_schema_files, 0, 0, -1, -1, 0},
|
fill_schema_files, 0, 0, -1, -1, 0},
|
||||||
|
{"GLOBAL_STATUS", status_fields_info, create_schema_table,
|
||||||
|
fill_schema_global_status, make_old_format, 0, -1, -1, 0},
|
||||||
|
{"GLOBAL_VARIABLES", system_variables_fields_info, create_schema_table,
|
||||||
|
fill_schema_global_variables, make_old_format, 0, -1, -1, 0},
|
||||||
{"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table,
|
{"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table,
|
||||||
get_all_tables, 0, get_schema_key_column_usage_record, 4, 5, 0},
|
get_all_tables, 0, get_schema_key_column_usage_record, 4, 5, 0},
|
||||||
{"OPEN_TABLES", open_tables_fields_info, create_schema_table,
|
{"OPEN_TABLES", open_tables_fields_info, create_schema_table,
|
||||||
@ -5478,6 +5691,10 @@ ST_SCHEMA_TABLE schema_tables[]=
|
|||||||
fill_schema_shemata, make_schemata_old_format, 0, 1, -1, 0},
|
fill_schema_shemata, make_schemata_old_format, 0, 1, -1, 0},
|
||||||
{"SCHEMA_PRIVILEGES", schema_privileges_fields_info, create_schema_table,
|
{"SCHEMA_PRIVILEGES", schema_privileges_fields_info, create_schema_table,
|
||||||
fill_schema_schema_privileges, 0, 0, -1, -1, 0},
|
fill_schema_schema_privileges, 0, 0, -1, -1, 0},
|
||||||
|
{"SESSION_STATUS", status_fields_info, create_schema_table,
|
||||||
|
fill_schema_session_status, make_old_format, 0, -1, -1, 0},
|
||||||
|
{"SESSION_VARIABLES", system_variables_fields_info, create_schema_table,
|
||||||
|
fill_schema_session_variables, make_old_format, 0, -1, -1, 0},
|
||||||
{"STATISTICS", stat_fields_info, create_schema_table,
|
{"STATISTICS", stat_fields_info, create_schema_table,
|
||||||
get_all_tables, make_old_format, get_schema_stat_record, 1, 2, 0},
|
get_all_tables, make_old_format, get_schema_stat_record, 1, 2, 0},
|
||||||
{"STATUS", variables_fields_info, create_schema_table, fill_status,
|
{"STATUS", variables_fields_info, create_schema_table, fill_status,
|
||||||
|
@ -8670,6 +8670,9 @@ load_data:
|
|||||||
FROM MASTER_SYM
|
FROM MASTER_SYM
|
||||||
{
|
{
|
||||||
Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
|
Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
|
||||||
|
WARN_DEPRECATED(yythd, "5.2", "LOAD DATA FROM MASTER",
|
||||||
|
"mysqldump or future "
|
||||||
|
"BACKUP/RESTORE DATABASE facility");
|
||||||
};
|
};
|
||||||
|
|
||||||
opt_local:
|
opt_local:
|
||||||
|
@ -474,6 +474,8 @@ enum enum_schema_tables
|
|||||||
SCH_ENGINES,
|
SCH_ENGINES,
|
||||||
SCH_EVENTS,
|
SCH_EVENTS,
|
||||||
SCH_FILES,
|
SCH_FILES,
|
||||||
|
SCH_GLOBAL_STATUS,
|
||||||
|
SCH_GLOBAL_VARIABLES,
|
||||||
SCH_KEY_COLUMN_USAGE,
|
SCH_KEY_COLUMN_USAGE,
|
||||||
SCH_OPEN_TABLES,
|
SCH_OPEN_TABLES,
|
||||||
SCH_PARTITIONS,
|
SCH_PARTITIONS,
|
||||||
@ -483,6 +485,8 @@ enum enum_schema_tables
|
|||||||
SCH_PROCEDURES,
|
SCH_PROCEDURES,
|
||||||
SCH_SCHEMATA,
|
SCH_SCHEMATA,
|
||||||
SCH_SCHEMA_PRIVILEGES,
|
SCH_SCHEMA_PRIVILEGES,
|
||||||
|
SCH_SESSION_STATUS,
|
||||||
|
SCH_SESSION_VARIABLES,
|
||||||
SCH_STATISTICS,
|
SCH_STATISTICS,
|
||||||
SCH_STATUS,
|
SCH_STATUS,
|
||||||
SCH_TABLES,
|
SCH_TABLES,
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
SUBDIRS = mytap . mysys examples
|
SUBDIRS = mytap . mysys examples
|
||||||
|
|
||||||
noinst_SCRIPTS = unit
|
|
||||||
EXTRA_DIST = unit.pl
|
EXTRA_DIST = unit.pl
|
||||||
CLEANFILES = unit
|
CLEANFILES = unit
|
||||||
|
|
||||||
unittests = mytap mysys
|
unittests = mytap mysys @mysql_se_unittest_dirs@ @mysql_pg_unittest_dirs@
|
||||||
|
|
||||||
test: unit
|
test:
|
||||||
./unit run $(unittests)
|
perl unit.pl run $(unittests)
|
||||||
|
|
||||||
unit: $(srcdir)/unit.pl
|
|
||||||
cp $(srcdir)/unit.pl $@
|
|
||||||
chmod 700 $@
|
|
||||||
|
|
||||||
|
test-verbose:
|
||||||
|
HARNESS_VERBOSE=1 perl unit.pl run $(unittests)
|
||||||
|
@ -9,7 +9,9 @@ mytap Source for the MyTAP library
|
|||||||
mysys Tests for mysys components
|
mysys Tests for mysys components
|
||||||
bitmap-t.c Unit test for MY_BITMAP
|
bitmap-t.c Unit test for MY_BITMAP
|
||||||
base64-t.c Unit test for base64 encoding functions
|
base64-t.c Unit test for base64 encoding functions
|
||||||
examples Example unit tests
|
examples Example unit tests.
|
||||||
|
core-t.c Example of raising a signal in the middle of the test
|
||||||
|
THIS TEST WILL STOP ALL FURTHER TESTING!
|
||||||
simple-t.c Example of a standard TAP unit test
|
simple-t.c Example of a standard TAP unit test
|
||||||
skip-t.c Example where some test points are skipped
|
skip-t.c Example where some test points are skipped
|
||||||
skip_all-t.c Example of a test where the entire test is skipped
|
skip_all-t.c Example of a test where the entire test is skipped
|
||||||
@ -24,6 +26,9 @@ To make and execute all unit tests in the directory:
|
|||||||
|
|
||||||
make test
|
make test
|
||||||
|
|
||||||
|
Observe that the tests in the examples/ directory are just various
|
||||||
|
examples of tests and are not expected to pass.
|
||||||
|
|
||||||
|
|
||||||
Adding unit tests
|
Adding unit tests
|
||||||
-----------------
|
-----------------
|
||||||
|
@ -5,5 +5,5 @@ AM_LDFLAGS = -L$(top_builddir)/unittest/mytap
|
|||||||
|
|
||||||
LDADD = -lmytap
|
LDADD = -lmytap
|
||||||
|
|
||||||
noinst_PROGRAMS = simple-t skip-t todo-t skip_all-t no_plan-t
|
noinst_PROGRAMS = simple-t skip-t todo-t skip_all-t no_plan-t core-t
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user