mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
due to merge
This commit is contained in:
commit
b53c4d0bac
85 changed files with 1040 additions and 507 deletions
|
@ -1,4 +1,4 @@
|
||||||
[MYSQL]
|
[MYSQL]
|
||||||
post_commit_to = "commits@lists.mysql.com"
|
post_commit_to = "commits@lists.mysql.com"
|
||||||
post_push_to = "commits@lists.mysql.com"
|
post_push_to = "commits@lists.mysql.com"
|
||||||
tree_name = "mysql-5.1"
|
tree_name = "mysql-5.1-bugteam"
|
||||||
|
|
25
.bzrignore
25
.bzrignore
|
@ -3032,3 +3032,28 @@ mysql-test/bug36522.tar
|
||||||
mysql-test/t.log
|
mysql-test/t.log
|
||||||
mysql-test/tps.log
|
mysql-test/tps.log
|
||||||
libmysqld/event_parse_data.cc
|
libmysqld/event_parse_data.cc
|
||||||
|
autom4te.cache
|
||||||
|
sql/share/czech
|
||||||
|
sql/share/danish
|
||||||
|
sql/share/dutch
|
||||||
|
sql/share/english
|
||||||
|
sql/share/estonian
|
||||||
|
sql/share/french
|
||||||
|
sql/share/german
|
||||||
|
sql/share/greek
|
||||||
|
sql/share/hungarian
|
||||||
|
sql/share/italian
|
||||||
|
sql/share/japanese
|
||||||
|
sql/share/japanese-sjis
|
||||||
|
sql/share/korean
|
||||||
|
sql/share/norwegian
|
||||||
|
sql/share/norwegian-ny
|
||||||
|
sql/share/polish
|
||||||
|
sql/share/portuguese
|
||||||
|
sql/share/romanian
|
||||||
|
sql/share/russian
|
||||||
|
sql/share/serbian
|
||||||
|
sql/share/slovak
|
||||||
|
sql/share/spanish
|
||||||
|
sql/share/swedish
|
||||||
|
sql/share/ukrainian
|
||||||
|
|
|
@ -98,6 +98,10 @@ IF(CYBOZU)
|
||||||
ADD_DEFINITIONS(-DCYBOZU)
|
ADD_DEFINITIONS(-DCYBOZU)
|
||||||
ENDIF(CYBOZU)
|
ENDIF(CYBOZU)
|
||||||
|
|
||||||
|
IF(EXTRA_DEBUG)
|
||||||
|
ADD_DEFINITIONS(-D EXTRA_DEBUG)
|
||||||
|
ENDIF(EXTRA_DEBUG)
|
||||||
|
|
||||||
# in some places we use DBUG_OFF
|
# in some places we use DBUG_OFF
|
||||||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDBUG_OFF")
|
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDBUG_OFF")
|
||||||
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")
|
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")
|
||||||
|
|
|
@ -1627,8 +1627,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||||
opt_nopager= 1;
|
opt_nopager= 1;
|
||||||
break;
|
break;
|
||||||
case OPT_MYSQL_PROTOCOL:
|
case OPT_MYSQL_PROTOCOL:
|
||||||
|
#ifndef EMBEDDED_LIBRARY
|
||||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||||
opt->name);
|
opt->name);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case OPT_SERVER_ARG:
|
case OPT_SERVER_ARG:
|
||||||
#ifdef EMBEDDED_LIBRARY
|
#ifdef EMBEDDED_LIBRARY
|
||||||
|
|
|
@ -620,6 +620,20 @@ static int run_mysqlcheck_upgrade(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int run_mysqlcheck_fixnames(void)
|
||||||
|
{
|
||||||
|
verbose("Running 'mysqlcheck'...");
|
||||||
|
return run_tool(mysqlcheck_path,
|
||||||
|
NULL, /* Send output from mysqlcheck directly to screen */
|
||||||
|
"--no-defaults",
|
||||||
|
ds_args.str,
|
||||||
|
"--all-databases",
|
||||||
|
"--fix-db-names",
|
||||||
|
"--fix-table-names",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static const char *expected_errors[]=
|
static const char *expected_errors[]=
|
||||||
{
|
{
|
||||||
"ERROR 1060", /* Duplicate column name */
|
"ERROR 1060", /* Duplicate column name */
|
||||||
|
@ -782,7 +796,8 @@ int main(int argc, char **argv)
|
||||||
/*
|
/*
|
||||||
Run "mysqlcheck" and "mysql_fix_privilege_tables.sql"
|
Run "mysqlcheck" and "mysql_fix_privilege_tables.sql"
|
||||||
*/
|
*/
|
||||||
if (run_mysqlcheck_upgrade() ||
|
if (run_mysqlcheck_fixnames() ||
|
||||||
|
run_mysqlcheck_upgrade() ||
|
||||||
run_sql_fix_privilege_tables())
|
run_sql_fix_privilege_tables())
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
17
dbug/dbug.c
17
dbug/dbug.c
|
@ -1851,13 +1851,7 @@ static void DBUGOpenFile(CODE_STATE *cs,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newfile= !EXISTS(name);
|
newfile= !EXISTS(name);
|
||||||
if (!(fp= fopen(name,
|
if (!(fp= fopen(name, append ? "a+" : "w")))
|
||||||
#if defined(MSDOS) || defined(__WIN__)
|
|
||||||
append ? "a+c" : "wc"
|
|
||||||
#else
|
|
||||||
append ? "a+" : "w"
|
|
||||||
#endif
|
|
||||||
)))
|
|
||||||
{
|
{
|
||||||
(void) fprintf(stderr, ERR_OPEN, cs->process, name);
|
(void) fprintf(stderr, ERR_OPEN, cs->process, name);
|
||||||
perror("");
|
perror("");
|
||||||
|
@ -2407,13 +2401,4 @@ int i_am_a_dummy_function() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __WIN__
|
|
||||||
char _db_doprnt_;
|
|
||||||
char _db_enter_;
|
|
||||||
char _db_pargs_;
|
|
||||||
char _db_process_;
|
|
||||||
char _db_push_;
|
|
||||||
char _db_return_;
|
|
||||||
#endif /*__WIN__*/
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -203,8 +203,8 @@ SSL_CTX* SSL_CTX_new(SSL_METHOD*);
|
||||||
SSL* SSL_new(SSL_CTX*);
|
SSL* SSL_new(SSL_CTX*);
|
||||||
int SSL_set_fd (SSL*, YASSL_SOCKET_T);
|
int SSL_set_fd (SSL*, YASSL_SOCKET_T);
|
||||||
YASSL_SOCKET_T SSL_get_fd(const SSL*);
|
YASSL_SOCKET_T SSL_get_fd(const SSL*);
|
||||||
int SSL_connect(SSL*); // if you get an error from connect
|
int SSL_connect(SSL*); /* if you get an error from connect
|
||||||
// see note at top of REAMDE
|
see note at top of REAMDE */
|
||||||
int SSL_write(SSL*, const void*, int);
|
int SSL_write(SSL*, const void*, int);
|
||||||
int SSL_read(SSL*, void*, int);
|
int SSL_read(SSL*, void*, int);
|
||||||
int SSL_accept(SSL*);
|
int SSL_accept(SSL*);
|
||||||
|
|
|
@ -1560,6 +1560,7 @@ void ClientHello::Process(input_buffer&, SSL& ssl)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ssl.matchSuite(cipher_suites_, suite_len_);
|
ssl.matchSuite(cipher_suites_, suite_len_);
|
||||||
|
if (ssl.GetError()) return;
|
||||||
ssl.set_pending(ssl.getSecurity().get_parms().suite_[1]);
|
ssl.set_pending(ssl.getSecurity().get_parms().suite_[1]);
|
||||||
|
|
||||||
if (compression_methods_ == zlib)
|
if (compression_methods_ == zlib)
|
||||||
|
|
|
@ -250,6 +250,15 @@ inline double ulonglong2double(ulonglong value)
|
||||||
#define my_off_t2double(A) ulonglong2double(A)
|
#define my_off_t2double(A) ulonglong2double(A)
|
||||||
#endif /* _WIN64 */
|
#endif /* _WIN64 */
|
||||||
|
|
||||||
|
inline ulonglong double2ulonglong(double d)
|
||||||
|
{
|
||||||
|
double t= d - (double) 0x8000000000000000ULL;
|
||||||
|
|
||||||
|
if (t >= 0)
|
||||||
|
return ((ulonglong) t) + 0x8000000000000000ULL;
|
||||||
|
return (ulonglong) d;
|
||||||
|
}
|
||||||
|
|
||||||
#if SIZEOF_OFF_T > 4
|
#if SIZEOF_OFF_T > 4
|
||||||
#define lseek(A,B,C) _lseeki64((A),(longlong) (B),(C))
|
#define lseek(A,B,C) _lseeki64((A),(longlong) (B),(C))
|
||||||
#define tell(A) _telli64(A)
|
#define tell(A) _telli64(A)
|
||||||
|
|
|
@ -108,22 +108,6 @@ extern FILE *_db_fp_(void);
|
||||||
#define DBUG_EXPLAIN(buf,len)
|
#define DBUG_EXPLAIN(buf,len)
|
||||||
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
||||||
#define IF_DBUG(A)
|
#define IF_DBUG(A)
|
||||||
|
|
||||||
#ifdef __WIN__
|
|
||||||
/*
|
|
||||||
On windows all the dll export has to be declared in the *.def file
|
|
||||||
so as we export these symbols in DEBUG mode we have to export
|
|
||||||
these in the RELEASE mode also. So below are the dummy symbols
|
|
||||||
for the RELEASE export
|
|
||||||
*/
|
|
||||||
extern char _db_doprnt_;
|
|
||||||
extern char _db_enter_;
|
|
||||||
extern char _db_pargs_;
|
|
||||||
extern char _db_process_;
|
|
||||||
extern char _db_push_;
|
|
||||||
extern char _db_return_;
|
|
||||||
#endif /*__WIN__*/
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -789,6 +789,9 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
||||||
#define ulonglong2double(A) ((double) (ulonglong) (A))
|
#define ulonglong2double(A) ((double) (ulonglong) (A))
|
||||||
#define my_off_t2double(A) ((double) (my_off_t) (A))
|
#define my_off_t2double(A) ((double) (my_off_t) (A))
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef double2ulonglong
|
||||||
|
#define double2ulonglong(A) ((ulonglong) (double) (A))
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef offsetof
|
#ifndef offsetof
|
||||||
|
|
|
@ -207,9 +207,7 @@ void STDCALL mysql_server_end()
|
||||||
/* If library called my_init(), free memory allocated by it */
|
/* If library called my_init(), free memory allocated by it */
|
||||||
if (!org_my_init_done)
|
if (!org_my_init_done)
|
||||||
{
|
{
|
||||||
my_end(MY_DONT_FREE_DBUG);
|
my_end(0);
|
||||||
/* Remove TRACING, if enabled by mysql_debug() */
|
|
||||||
DBUG_POP();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,13 +29,13 @@ ADD_DEFINITIONS(-DEMBEDDED_LIBRARY)
|
||||||
ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc
|
ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc
|
||||||
../../client/mysql.cc ../../client/readline.cc
|
../../client/mysql.cc ../../client/readline.cc
|
||||||
../../client/sql_string.cc)
|
../../client/sql_string.cc)
|
||||||
TARGET_LINK_LIBRARIES(mysql_embedded wsock32)
|
TARGET_LINK_LIBRARIES(mysql_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||||
ADD_DEPENDENCIES(mysql_embedded libmysqld)
|
ADD_DEPENDENCIES(mysql_embedded libmysqld)
|
||||||
|
|
||||||
ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.c)
|
ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.c)
|
||||||
TARGET_LINK_LIBRARIES(mysqltest_embedded wsock32)
|
TARGET_LINK_LIBRARIES(mysqltest_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||||
ADD_DEPENDENCIES(mysqltest_embedded libmysqld)
|
ADD_DEPENDENCIES(mysqltest_embedded libmysqld)
|
||||||
|
|
||||||
ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c)
|
ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c)
|
||||||
TARGET_LINK_LIBRARIES(mysql_client_test_embedded wsock32)
|
TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||||
ADD_DEPENDENCIES(mysql_client_test_embedded libmysqld)
|
ADD_DEPENDENCIES(mysql_client_test_embedded libmysqld)
|
||||||
|
|
|
@ -386,6 +386,7 @@ static void emb_free_embedded_thd(MYSQL *mysql)
|
||||||
thd->store_globals();
|
thd->store_globals();
|
||||||
thd->unlink();
|
thd->unlink();
|
||||||
delete thd;
|
delete thd;
|
||||||
|
my_pthread_setspecific_ptr(THR_THD, 0);
|
||||||
mysql->thd=0;
|
mysql->thd=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,12 +540,7 @@ int init_embedded_server(int argc, char **argv, char **groups)
|
||||||
|
|
||||||
(void) thr_setconcurrency(concurrency); // 10 by default
|
(void) thr_setconcurrency(concurrency); // 10 by default
|
||||||
|
|
||||||
if (flush_time && flush_time != ~(ulong) 0L)
|
start_handle_manager();
|
||||||
{
|
|
||||||
pthread_t hThread;
|
|
||||||
if (pthread_create(&hThread,&connection_attrib,handle_manager,0))
|
|
||||||
sql_print_error("Warning: Can't create thread to manage maintenance");
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME initialize binlog_filter and rpl_filter if not already done
|
// FIXME initialize binlog_filter and rpl_filter if not already done
|
||||||
// corresponding delete is in clean_up()
|
// corresponding delete is in clean_up()
|
||||||
|
|
|
@ -2,94 +2,6 @@ LIBRARY LIBMYSQLD
|
||||||
DESCRIPTION 'MySQL 5.1 Embedded Server Library'
|
DESCRIPTION 'MySQL 5.1 Embedded Server Library'
|
||||||
VERSION 5.1
|
VERSION 5.1
|
||||||
EXPORTS
|
EXPORTS
|
||||||
_db_process_
|
|
||||||
_db_enter_
|
|
||||||
_db_return_
|
|
||||||
_db_push_
|
|
||||||
_db_doprnt_
|
|
||||||
_db_pargs_
|
|
||||||
strnmov
|
|
||||||
get_charset
|
|
||||||
my_memmem
|
|
||||||
my_snprintf
|
|
||||||
pthread_exit
|
|
||||||
pthread_cond_signal
|
|
||||||
dynstr_append_mem
|
|
||||||
init_dynamic_string
|
|
||||||
dynstr_free
|
|
||||||
my_hash_free
|
|
||||||
my_vsnprintf
|
|
||||||
dynstr_append
|
|
||||||
my_close
|
|
||||||
my_open
|
|
||||||
dynstr_set
|
|
||||||
dynstr_append_os_quoted
|
|
||||||
my_delete
|
|
||||||
my_seek
|
|
||||||
my_write
|
|
||||||
create_temp_file
|
|
||||||
fn_format
|
|
||||||
dirname_part
|
|
||||||
my_hash_insert
|
|
||||||
my_hash_search
|
|
||||||
test_if_hard_path
|
|
||||||
my_copy
|
|
||||||
my_mkdir
|
|
||||||
my_sleep
|
|
||||||
my_strtod
|
|
||||||
pthread_cond_wait
|
|
||||||
my_strnncoll_simple
|
|
||||||
get_dynamic
|
|
||||||
my_regerror
|
|
||||||
init_dynamic_array2
|
|
||||||
pthread_create
|
|
||||||
pthread_cond_init
|
|
||||||
my_regcomp
|
|
||||||
my_regexec
|
|
||||||
my_regex_end
|
|
||||||
my_regfree
|
|
||||||
longlong2str
|
|
||||||
my_set_exception_pointers
|
|
||||||
my_print_stacktrace
|
|
||||||
my_thread_stack_size
|
|
||||||
my_safe_print_str
|
|
||||||
my_stat
|
|
||||||
_my_hash_init
|
|
||||||
pthread_attr_setstacksize
|
|
||||||
pthread_attr_init
|
|
||||||
my_dirend
|
|
||||||
wild_compare
|
|
||||||
my_dir
|
|
||||||
my_micro_time
|
|
||||||
find_type_or_exit
|
|
||||||
_dig_vec_upper
|
|
||||||
_dig_vec_lower
|
|
||||||
bmove_upp
|
|
||||||
delete_dynamic
|
|
||||||
free_defaults
|
|
||||||
getopt_compare_strings
|
|
||||||
getopt_ull_limit_value
|
|
||||||
handle_options
|
|
||||||
init_dynamic_array
|
|
||||||
insert_dynamic
|
|
||||||
int2str
|
|
||||||
is_prefix
|
|
||||||
list_add
|
|
||||||
list_delete
|
|
||||||
load_defaults
|
|
||||||
max_allowed_packet
|
|
||||||
my_cgets
|
|
||||||
my_end
|
|
||||||
my_getopt_print_errors
|
|
||||||
my_init
|
|
||||||
my_malloc
|
|
||||||
my_memdup
|
|
||||||
my_no_flags_free
|
|
||||||
my_path
|
|
||||||
my_print_help
|
|
||||||
my_print_variables
|
|
||||||
my_realloc
|
|
||||||
my_strdup
|
|
||||||
mysql_thread_end
|
mysql_thread_end
|
||||||
mysql_thread_init
|
mysql_thread_init
|
||||||
myodbc_remove_escape
|
myodbc_remove_escape
|
||||||
|
@ -162,47 +74,13 @@ EXPORTS
|
||||||
mysql_thread_safe
|
mysql_thread_safe
|
||||||
mysql_use_result
|
mysql_use_result
|
||||||
mysql_warning_count
|
mysql_warning_count
|
||||||
set_dynamic
|
|
||||||
strcend
|
|
||||||
strcont
|
|
||||||
strdup_root
|
|
||||||
strfill
|
|
||||||
strinstr
|
|
||||||
strmake
|
|
||||||
strmov
|
|
||||||
strxmov
|
|
||||||
mysql_server_end
|
mysql_server_end
|
||||||
mysql_server_init
|
mysql_server_init
|
||||||
get_tty_password
|
get_tty_password
|
||||||
sql_protocol_typelib
|
|
||||||
mysql_get_server_version
|
mysql_get_server_version
|
||||||
mysql_set_character_set
|
mysql_set_character_set
|
||||||
mysql_sqlstate
|
mysql_sqlstate
|
||||||
charsets_dir
|
|
||||||
disabled_my_option
|
|
||||||
my_charset_latin1
|
|
||||||
init_alloc_root
|
|
||||||
my_progname
|
|
||||||
get_charset_name
|
|
||||||
get_charset_by_csname
|
|
||||||
print_defaults
|
|
||||||
find_type
|
|
||||||
strxnmov
|
|
||||||
strend
|
|
||||||
my_fopen
|
|
||||||
my_fclose
|
|
||||||
unpack_filename
|
|
||||||
str2int
|
|
||||||
int10_to_str
|
|
||||||
longlong10_to_str
|
|
||||||
my_snprintf_8bit
|
|
||||||
alloc_root
|
|
||||||
free_root
|
|
||||||
my_read
|
|
||||||
llstr
|
|
||||||
mysql_get_parameters
|
mysql_get_parameters
|
||||||
mysql_thread_init
|
|
||||||
mysql_thread_end
|
|
||||||
mysql_stmt_bind_param
|
mysql_stmt_bind_param
|
||||||
mysql_stmt_bind_result
|
mysql_stmt_bind_result
|
||||||
mysql_stmt_execute
|
mysql_stmt_execute
|
||||||
|
@ -230,7 +108,3 @@ EXPORTS
|
||||||
mysql_stmt_attr_get
|
mysql_stmt_attr_get
|
||||||
mysql_stmt_attr_set
|
mysql_stmt_attr_set
|
||||||
mysql_stmt_field_count
|
mysql_stmt_field_count
|
||||||
get_defaults_options
|
|
||||||
my_charset_bin
|
|
||||||
my_charset_same
|
|
||||||
modify_defaults_file
|
|
||||||
|
|
11
mysql-test/r/ctype_filesystem.result
Normal file
11
mysql-test/r/ctype_filesystem.result
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
SET CHARACTER SET utf8;
|
||||||
|
SHOW VARIABLES like 'character_sets_dir';
|
||||||
|
Variable_name Value
|
||||||
|
character_sets_dir MYSQL_TEST_DIR/ß/
|
||||||
|
SHOW VARIABLES like 'character_set_filesystem';
|
||||||
|
Variable_name Value
|
||||||
|
character_set_filesystem latin1
|
||||||
|
SHOW VARIABLES like 'character_set_client';
|
||||||
|
Variable_name Value
|
||||||
|
character_set_client utf8
|
||||||
|
SET CHARACTER SET default;
|
|
@ -522,3 +522,12 @@ WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ref b b 5 const 4 Using where
|
1 SIMPLE t1 ref b b 5 const 4 Using where
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a CHAR(10));
|
||||||
|
INSERT INTO t1 VALUES('aaa15');
|
||||||
|
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||||
|
MATCH(a) AGAINST('aaa1* aaa14 aaa16' IN BOOLEAN MODE)
|
||||||
|
1
|
||||||
|
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||||
|
MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE)
|
||||||
|
2
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
|
@ -256,3 +256,15 @@ a
|
||||||
select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f");
|
select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f");
|
||||||
str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f")
|
str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f")
|
||||||
2003-01-02 10:11:12.001200
|
2003-01-02 10:11:12.001200
|
||||||
|
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10'),time('00:00:00');
|
||||||
|
timediff('2008-09-29 20:10:10','2008-09-30 20:10:10') time('00:00:00')
|
||||||
|
-24:00:00 00:00:00
|
||||||
|
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')>time('00:00:00');
|
||||||
|
timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')>time('00:00:00')
|
||||||
|
0
|
||||||
|
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')<time('00:00:00');
|
||||||
|
timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')<time('00:00:00')
|
||||||
|
1
|
||||||
|
SELECT CAST(time('-73:42:12') AS DECIMAL);
|
||||||
|
CAST(time('-73:42:12') AS DECIMAL)
|
||||||
|
-734212
|
||||||
|
|
|
@ -717,8 +717,6 @@ insert(_latin2'abcd',2,3,_latin2'ef'),
|
||||||
replace(_latin2'abcd',_latin2'b',_latin2'B'),
|
replace(_latin2'abcd',_latin2'b',_latin2'B'),
|
||||||
encode('abcd','ab')
|
encode('abcd','ab')
|
||||||
;
|
;
|
||||||
Warnings:
|
|
||||||
Warning 1265 Data truncated for column 'format(130,10)' at row 1
|
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
|
@ -727,7 +725,7 @@ t1 CREATE TABLE `t1` (
|
||||||
`conv(130,16,10)` varchar(64) DEFAULT NULL,
|
`conv(130,16,10)` varchar(64) DEFAULT NULL,
|
||||||
`hex(130)` varchar(6) NOT NULL DEFAULT '',
|
`hex(130)` varchar(6) NOT NULL DEFAULT '',
|
||||||
`char(130)` varbinary(4) NOT NULL DEFAULT '',
|
`char(130)` varbinary(4) NOT NULL DEFAULT '',
|
||||||
`format(130,10)` varchar(4) NOT NULL DEFAULT '',
|
`format(130,10)` varchar(37) NOT NULL DEFAULT '',
|
||||||
`left(_latin2'a',1)` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
|
`left(_latin2'a',1)` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
|
||||||
`right(_latin2'a',1)` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
|
`right(_latin2'a',1)` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
|
||||||
`lcase(_latin2'a')` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
|
`lcase(_latin2'a')` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
|
||||||
|
@ -2513,4 +2511,12 @@ SELECT HEX(c1) from v1;
|
||||||
HEX(c1)
|
HEX(c1)
|
||||||
414243
|
414243
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
create table t1(a float);
|
||||||
|
insert into t1 values (1.33);
|
||||||
|
select format(a, 2) from t1;
|
||||||
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||||
|
def format(a, 2) 253 49 4 Y 0 31 8
|
||||||
|
format(a, 2)
|
||||||
|
1.33
|
||||||
|
drop table t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
|
|
@ -1683,3 +1683,88 @@ CREATE INDEX i1 on t1 (a(3));
|
||||||
SELECT * FROM t1 WHERE a = 'abcde';
|
SELECT * FROM t1 WHERE a = 'abcde';
|
||||||
a
|
a
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE foo (a int, b int, c char(10),
|
||||||
|
PRIMARY KEY (c(3)),
|
||||||
|
KEY b (b)
|
||||||
|
) engine=innodb;
|
||||||
|
CREATE TABLE foo2 (a int, b int, c char(10),
|
||||||
|
PRIMARY KEY (c),
|
||||||
|
KEY b (b)
|
||||||
|
) engine=innodb;
|
||||||
|
CREATE TABLE bar (a int, b int, c char(10),
|
||||||
|
PRIMARY KEY (c(3)),
|
||||||
|
KEY b (b)
|
||||||
|
) engine=myisam;
|
||||||
|
INSERT INTO foo VALUES
|
||||||
|
(1,2,'abcdefghij'), (2,3,''), (3,4,'klmnopqrst'),
|
||||||
|
(4,5,'uvwxyz'), (5,6,'meotnsyglt'), (4,5,'asfdewe');
|
||||||
|
INSERT INTO bar SELECT * FROM foo;
|
||||||
|
INSERT INTO foo2 SELECT * FROM foo;
|
||||||
|
EXPLAIN SELECT c FROM bar WHERE b>2;;
|
||||||
|
id 1
|
||||||
|
select_type SIMPLE
|
||||||
|
table bar
|
||||||
|
type ALL
|
||||||
|
possible_keys b
|
||||||
|
key NULL
|
||||||
|
key_len NULL
|
||||||
|
ref NULL
|
||||||
|
rows 6
|
||||||
|
Extra Using where
|
||||||
|
EXPLAIN SELECT c FROM foo WHERE b>2;;
|
||||||
|
id 1
|
||||||
|
select_type SIMPLE
|
||||||
|
table foo
|
||||||
|
type ALL
|
||||||
|
possible_keys b
|
||||||
|
key NULL
|
||||||
|
key_len NULL
|
||||||
|
ref NULL
|
||||||
|
rows 6
|
||||||
|
Extra Using where
|
||||||
|
EXPLAIN SELECT c FROM foo2 WHERE b>2;;
|
||||||
|
id 1
|
||||||
|
select_type SIMPLE
|
||||||
|
table foo2
|
||||||
|
type range
|
||||||
|
possible_keys b
|
||||||
|
key b
|
||||||
|
key_len 5
|
||||||
|
ref NULL
|
||||||
|
rows 3
|
||||||
|
Extra Using where; Using index
|
||||||
|
EXPLAIN SELECT c FROM bar WHERE c>2;;
|
||||||
|
id 1
|
||||||
|
select_type SIMPLE
|
||||||
|
table bar
|
||||||
|
type ALL
|
||||||
|
possible_keys PRIMARY
|
||||||
|
key NULL
|
||||||
|
key_len NULL
|
||||||
|
ref NULL
|
||||||
|
rows 6
|
||||||
|
Extra Using where
|
||||||
|
EXPLAIN SELECT c FROM foo WHERE c>2;;
|
||||||
|
id 1
|
||||||
|
select_type SIMPLE
|
||||||
|
table foo
|
||||||
|
type ALL
|
||||||
|
possible_keys PRIMARY
|
||||||
|
key NULL
|
||||||
|
key_len NULL
|
||||||
|
ref NULL
|
||||||
|
rows 6
|
||||||
|
Extra Using where
|
||||||
|
EXPLAIN SELECT c FROM foo2 WHERE c>2;;
|
||||||
|
id 1
|
||||||
|
select_type SIMPLE
|
||||||
|
table foo2
|
||||||
|
type index
|
||||||
|
possible_keys PRIMARY
|
||||||
|
key b
|
||||||
|
key_len 5
|
||||||
|
ref NULL
|
||||||
|
rows 6
|
||||||
|
Extra Using where; Using index
|
||||||
|
DROP TABLE foo, bar, foo2;
|
||||||
|
End of 5.1 tests
|
||||||
|
|
|
@ -40,3 +40,4 @@ count(*)
|
||||||
65536
|
65536
|
||||||
DROP PROCEDURE sp_addRec;
|
DROP PROCEDURE sp_addRec;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
SET @@global.myisam_data_pointer_size = default;
|
||||||
|
|
|
@ -27,3 +27,25 @@ CHECK TABLE t1 EXTENDED;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 check status OK
|
test.t1 check status OK
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1(f1 int, f2 varchar(255));
|
||||||
|
insert into t1 values(1, 'foo'), (2, 'bar');
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
flush tables;
|
||||||
|
optimize table t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize error Table 'test.t1' is read only
|
||||||
|
Warnings:
|
||||||
|
Error 1036 Table 't1' is read only
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -324,7 +324,7 @@ partition by hash (a)
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` bit(27) NOT NULL DEFAULT '\0\0\0\0',
|
`a` bit(27) NOT NULL DEFAULT b'0',
|
||||||
PRIMARY KEY (`a`)
|
PRIMARY KEY (`a`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY HASH (a)
|
/*!50100 PARTITION BY HASH (a)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
MySQL error code 150: Foreign key constraint is incorrectly formed
|
MySQL error code 150: Foreign key constraint is incorrectly formed
|
||||||
Win32 error code 150: System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed.
|
Win32 error code 150: System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed.
|
||||||
OS error code 23: Too many open files in system
|
OS error code 23: Too many open files in system
|
||||||
Win32 error code 23: Data error (cyclic redundancy check).
|
Win32 error code 23: Data error (cyclic redundancy check).
|
||||||
Win32 error code 15000: The specified channel path is invalid.
|
Win32 error code 1062: The service has not been started.
|
||||||
|
Illegal error code: 30000
|
||||||
|
|
|
@ -110,7 +110,7 @@ i ts
|
||||||
362793610 1981-07-01 04:00:00
|
362793610 1981-07-01 04:00:00
|
||||||
select from_unixtime(362793609);
|
select from_unixtime(362793609);
|
||||||
from_unixtime(362793609)
|
from_unixtime(362793609)
|
||||||
1981-07-01 03:59:60
|
1981-07-01 03:59:59
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (ts timestamp);
|
create table t1 (ts timestamp);
|
||||||
set time_zone='UTC';
|
set time_zone='UTC';
|
||||||
|
|
|
@ -17,6 +17,9 @@ insert into t1 values
|
||||||
insert into t1 values
|
insert into t1 values
|
||||||
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
||||||
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
||||||
|
insert into t1 values
|
||||||
|
(unix_timestamp('2009-01-01 02:59:59'),'2009-01-01 02:59:59'),
|
||||||
|
(unix_timestamp('2009-01-01 03:00:00'),'2009-01-01 03:00:00');
|
||||||
select i, from_unixtime(i), c from t1;
|
select i, from_unixtime(i), c from t1;
|
||||||
i from_unixtime(i) c
|
i from_unixtime(i) c
|
||||||
1072904422 2004-01-01 00:00:00 2004-01-01 00:00:00
|
1072904422 2004-01-01 00:00:00 2004-01-01 00:00:00
|
||||||
|
@ -31,6 +34,8 @@ i from_unixtime(i) c
|
||||||
1099180821 2004-10-31 02:59:59 2004-10-31 02:59:59
|
1099180821 2004-10-31 02:59:59 2004-10-31 02:59:59
|
||||||
362793608 1981-07-01 03:59:59 1981-07-01 03:59:59
|
362793608 1981-07-01 03:59:59 1981-07-01 03:59:59
|
||||||
362793610 1981-07-01 04:00:00 1981-07-01 04:00:00
|
362793610 1981-07-01 04:00:00 1981-07-01 04:00:00
|
||||||
|
1230768022 2009-01-01 02:59:59 2009-01-01 02:59:59
|
||||||
|
1230768024 2009-01-01 03:00:00 2009-01-01 03:00:00
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (ts timestamp);
|
create table t1 (ts timestamp);
|
||||||
insert into t1 values (19730101235900), (20040101235900);
|
insert into t1 values (19730101235900), (20040101235900);
|
||||||
|
@ -39,3 +44,6 @@ ts
|
||||||
1973-01-01 23:59:00
|
1973-01-01 23:59:00
|
||||||
2004-01-01 23:59:00
|
2004-01-01 23:59:00
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SELECT FROM_UNIXTIME(1230768022), FROM_UNIXTIME(1230768023), FROM_UNIXTIME(1230768024);
|
||||||
|
FROM_UNIXTIME(1230768022) FROM_UNIXTIME(1230768023) FROM_UNIXTIME(1230768024)
|
||||||
|
2009-01-01 02:59:59 2009-01-01 02:59:59 2009-01-01 03:00:00
|
||||||
|
|
|
@ -708,6 +708,21 @@ HEX(b1) HEX(b2) i2
|
||||||
1 0 100
|
1 0 100
|
||||||
1 0 200
|
1 0 200
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE IF NOT EXISTS t1 (
|
||||||
|
f1 bit(2) NOT NULL default b'10',
|
||||||
|
f2 bit(14) NOT NULL default b'11110000111100'
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`f1` bit(2) NOT NULL DEFAULT b'10',
|
||||||
|
`f2` bit(14) NOT NULL DEFAULT b'11110000111100'
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE IF NOT EXISTS t1 (
|
||||||
|
f1 bit(2) NOT NULL default b''
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||||
|
ERROR 42000: Invalid default value for 'f1'
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
create table t1(a bit(7));
|
create table t1(a bit(7));
|
||||||
insert into t1 values(0x40);
|
insert into t1 values(0x40);
|
||||||
|
|
|
@ -392,4 +392,17 @@ f1 + 0e0
|
||||||
1.0000000150475e+30
|
1.0000000150475e+30
|
||||||
-1.0000000150475e+30
|
-1.0000000150475e+30
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1(d double, u bigint unsigned);
|
||||||
|
insert into t1(d) values (9.2233720368547777e+18),
|
||||||
|
(9.223372036854779e18),
|
||||||
|
(9.22337203685479e18),
|
||||||
|
(1.84e19);
|
||||||
|
update t1 set u = d;
|
||||||
|
select u from t1;
|
||||||
|
u
|
||||||
|
9223372036854775808
|
||||||
|
9223372036854779904
|
||||||
|
9223372036854790144
|
||||||
|
18400000000000000000
|
||||||
|
drop table t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
|
|
@ -491,4 +491,15 @@ update t1 join t2 on (t1.a=t2.a) set t1.id=t2.id;
|
||||||
affected rows: 127
|
affected rows: 127
|
||||||
info: Rows matched: 128 Changed: 127 Warnings: 0
|
info: Rows matched: 128 Changed: 127 Warnings: 0
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP FUNCTION IF EXISTS f1;
|
||||||
|
CREATE FUNCTION f1() RETURNS INT RETURN f1();
|
||||||
|
CREATE TABLE t1 (i INT);
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
UPDATE t1 SET i = 3 WHERE f1();
|
||||||
|
ERROR HY000: Recursive stored functions and triggers are not allowed.
|
||||||
|
UPDATE t1 SET i = f1();
|
||||||
|
ERROR HY000: Recursive stored functions and triggers are not allowed.
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP FUNCTION f1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
|
|
@ -1325,19 +1325,6 @@ ERROR HY000: Variable 'skip_show_database' is a read only variable
|
||||||
SET @@global.skip_show_database= true;
|
SET @@global.skip_show_database= true;
|
||||||
ERROR HY000: Variable 'skip_show_database' is a read only variable
|
ERROR HY000: Variable 'skip_show_database' is a read only variable
|
||||||
#
|
#
|
||||||
SHOW VARIABLES like 'socket';
|
|
||||||
Variable_name Value
|
|
||||||
socket #
|
|
||||||
SELECT @@session.socket;
|
|
||||||
ERROR HY000: Variable 'socket' is a GLOBAL variable
|
|
||||||
SELECT @@global.socket;
|
|
||||||
@@global.socket
|
|
||||||
#
|
|
||||||
SET @@session.socket= 'x';
|
|
||||||
ERROR HY000: Variable 'socket' is a read only variable
|
|
||||||
SET @@global.socket= 'x';
|
|
||||||
ERROR HY000: Variable 'socket' is a read only variable
|
|
||||||
#
|
|
||||||
SHOW VARIABLES like 'thread_stack';
|
SHOW VARIABLES like 'thread_stack';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
thread_stack #
|
thread_stack #
|
||||||
|
|
|
@ -625,7 +625,7 @@ drop table t1;
|
||||||
create table t1 (a int, b int);
|
create table t1 (a int, b int);
|
||||||
create view v1 as select a, sum(b) from t1 group by a;
|
create view v1 as select a, sum(b) from t1 group by a;
|
||||||
select b from v1 use index (some_index) where b=1;
|
select b from v1 use index (some_index) where b=1;
|
||||||
ERROR HY000: Incorrect usage of index hints and VIEW
|
ERROR 42000: Key 'some_index' doesn't exist in table 'v1'
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (col1 char(5),col2 char(5));
|
create table t1 (col1 char(5),col2 char(5));
|
||||||
|
@ -3562,11 +3562,11 @@ CREATE TABLE t1 (a INT);
|
||||||
INSERT INTO t1 VALUES (1),(2);
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
SELECT * FROM v1 USE KEY(non_existant);
|
SELECT * FROM v1 USE KEY(non_existant);
|
||||||
ERROR HY000: Incorrect usage of index hints and VIEW
|
ERROR 42000: Key 'non_existant' doesn't exist in table 'v1'
|
||||||
SELECT * FROM v1 FORCE KEY(non_existant);
|
SELECT * FROM v1 FORCE KEY(non_existant);
|
||||||
ERROR HY000: Incorrect usage of index hints and VIEW
|
ERROR 42000: Key 'non_existant' doesn't exist in table 'v1'
|
||||||
SELECT * FROM v1 IGNORE KEY(non_existant);
|
SELECT * FROM v1 IGNORE KEY(non_existant);
|
||||||
ERROR HY000: Incorrect usage of index hints and VIEW
|
ERROR 42000: Key 'non_existant' doesn't exist in table 'v1'
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
|
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
|
||||||
|
@ -3674,6 +3674,31 @@ DROP VIEW v1;
|
||||||
|
|
||||||
CREATE VIEW v1 AS SELECT 1;
|
CREATE VIEW v1 AS SELECT 1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2));
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||||
|
SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
c1 c2
|
||||||
|
2 2
|
||||||
|
SELECT * FROM t1 USE INDEX (c2) WHERE c2=2;
|
||||||
|
c1 c2
|
||||||
|
2 2
|
||||||
|
CREATE VIEW v1 AS SELECT c1, c2 FROM t1;
|
||||||
|
SHOW INDEX FROM v1;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1'
|
||||||
|
SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1'
|
||||||
|
SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1'
|
||||||
|
SELECT * FROM v1 USE INDEX (c2) WHERE c2=2;
|
||||||
|
ERROR 42000: Key 'c2' doesn't exist in table 'v1'
|
||||||
|
SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2;
|
||||||
|
ERROR 42000: Key 'c2' doesn't exist in table 'v1'
|
||||||
|
SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2;
|
||||||
|
ERROR 42000: Key 'c2' doesn't exist in table 'v1'
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
# -- End of 5.0 tests.
|
# -- End of 5.0 tests.
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
|
|
Binary file not shown.
31
mysql-test/suite/binlog/r/binlog_innodb_row.result
Normal file
31
mysql-test/suite/binlog/r/binlog_innodb_row.result
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
CREATE TABLE t1 (i int unique) ENGINE=innodb;
|
||||||
|
reset master;
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
*** the following UPDATE query wont generate any updates for the binlog ***
|
||||||
|
update t1 set i = 3 where i < 3;
|
||||||
|
ERROR 23000: Duplicate entry '3' for key 'i'
|
||||||
|
commit;
|
||||||
|
*** Results of the test: the binlog must have only Write_rows events not any Update_rows ***
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
delete from t1;
|
||||||
|
reset master;
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
*** the following UPDATE query wont generate any updates for the binlog ***
|
||||||
|
insert into t1 values (3),(4),(1),(2);
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'i'
|
||||||
|
commit;
|
||||||
|
*** Results of the test: the binlog must have only one Write_rows event not two ***
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
drop table t1;
|
|
@ -133,10 +133,6 @@ master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
|
||||||
insert into t1 values(11);
|
insert into t1 values(11);
|
||||||
commit;
|
commit;
|
||||||
show binlog events from <binlog_start>;
|
show binlog events from <binlog_start>;
|
||||||
|
@ -148,8 +144,6 @@ master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
@ -278,10 +272,6 @@ master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
|
||||||
master-bin.000001 # Query # # use `test`; drop table t1,t2
|
master-bin.000001 # Query # # use `test`; drop table t1,t2
|
||||||
master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
|
@ -382,7 +372,7 @@ master-bin.000001 # Query # # use `test`; DROP TABLE if exists t2
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t2
|
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t2
|
||||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
|
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
|
@ -400,7 +390,9 @@ master-bin.000001 # Query # # use `test`; DROP TABLE t2
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
@ -408,11 +400,7 @@ master-bin.000001 # Query # # use `test`; COMMIT
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
|
||||||
master-bin.000001 # Query # # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
||||||
master-bin.000001 # Query # # use `test`; COMMIT
|
master-bin.000001 # Query # # use `test`; COMMIT
|
||||||
|
|
42
mysql-test/suite/binlog/t/binlog_innodb_row.test
Normal file
42
mysql-test/suite/binlog/t/binlog_innodb_row.test
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#
|
||||||
|
# Tests of innodb/binlog with the row binlog format
|
||||||
|
#
|
||||||
|
source include/have_innodb.inc;
|
||||||
|
source include/have_log_bin.inc;
|
||||||
|
source include/have_binlog_format_row.inc;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #40221 Replication failure on RBR + UPDATE the primary key
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i int unique) ENGINE=innodb;
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# part 1: update can cause the dup key
|
||||||
|
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
--echo *** the following UPDATE query wont generate any updates for the binlog ***
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
update t1 set i = 3 where i < 3;
|
||||||
|
commit;
|
||||||
|
|
||||||
|
--echo *** Results of the test: the binlog must have only Write_rows events not any Update_rows ***
|
||||||
|
source include/show_binlog_events.inc;
|
||||||
|
|
||||||
|
# part 2: insert can cause the dup key
|
||||||
|
|
||||||
|
delete from t1;
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
begin;
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
--echo *** the following UPDATE query wont generate any updates for the binlog ***
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into t1 values (3),(4),(1),(2);
|
||||||
|
commit;
|
||||||
|
|
||||||
|
--echo *** Results of the test: the binlog must have only one Write_rows event not two ***
|
||||||
|
source include/show_binlog_events.inc;
|
||||||
|
|
||||||
|
drop table t1;
|
|
@ -29,44 +29,9 @@ SET @@global.max_allowed_packet=4096;
|
||||||
SET @@global.net_buffer_length=4096;
|
SET @@global.net_buffer_length=4096;
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||||
show slave status;
|
Slave_IO_Running = No (expect No)
|
||||||
Slave_IO_State #
|
==== clean up ====
|
||||||
Master_Host 127.0.0.1
|
DROP TABLE t1;
|
||||||
Master_User root
|
DROP TABLE t1;
|
||||||
Master_Port MASTER_MYPORT
|
|
||||||
Connect_Retry 1
|
|
||||||
Master_Log_File master-bin.000001
|
|
||||||
Read_Master_Log_Pos #
|
|
||||||
Relay_Log_File #
|
|
||||||
Relay_Log_Pos #
|
|
||||||
Relay_Master_Log_File master-bin.000001
|
|
||||||
Slave_IO_Running No
|
|
||||||
Slave_SQL_Running #
|
|
||||||
Replicate_Do_DB
|
|
||||||
Replicate_Ignore_DB
|
|
||||||
Replicate_Do_Table
|
|
||||||
Replicate_Ignore_Table
|
|
||||||
Replicate_Wild_Do_Table
|
|
||||||
Replicate_Wild_Ignore_Table
|
|
||||||
Last_Errno 0
|
|
||||||
Last_Error
|
|
||||||
Skip_Counter 0
|
|
||||||
Exec_Master_Log_Pos #
|
|
||||||
Relay_Log_Space #
|
|
||||||
Until_Condition None
|
|
||||||
Until_Log_File
|
|
||||||
Until_Log_Pos 0
|
|
||||||
Master_SSL_Allowed No
|
|
||||||
Master_SSL_CA_File
|
|
||||||
Master_SSL_CA_Path
|
|
||||||
Master_SSL_Cert
|
|
||||||
Master_SSL_Cipher
|
|
||||||
Master_SSL_Key
|
|
||||||
Seconds_Behind_Master #
|
|
||||||
Master_SSL_Verify_Server_Cert No
|
|
||||||
Last_IO_Errno 0
|
|
||||||
Last_IO_Error
|
|
||||||
Last_SQL_Errno 0
|
|
||||||
Last_SQL_Error
|
|
||||||
|
|
|
@ -4,34 +4,39 @@ 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;
|
||||||
|
**** Resetting master and slave ****
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
CREATE TABLE t1 (a INT, b INT);
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
|
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
|
||||||
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
||||||
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
||||||
SHOW BINLOG EVENTS FROM 216;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name #
|
Log_name #
|
||||||
Pos 216
|
Pos 106
|
||||||
Event_type Query
|
Event_type Query
|
||||||
Server_id #
|
Server_id #
|
||||||
End_log_pos 309
|
End_log_pos 199
|
||||||
Info use `test`; CREATE TABLE t1 (a INT, b INT)
|
Info use `test`; CREATE TABLE t1 (a INT, b INT)
|
||||||
Log_name #
|
Log_name #
|
||||||
Pos 309
|
Pos 199
|
||||||
Event_type Query
|
Event_type Query
|
||||||
Server_id #
|
Server_id #
|
||||||
End_log_pos 415
|
End_log_pos 305
|
||||||
Info use `test`; CREATE TABLE t2 (a INT, b INT) ENGINE=Merge
|
Info use `test`; CREATE TABLE t2 (a INT, b INT) ENGINE=Merge
|
||||||
Log_name #
|
Log_name #
|
||||||
Pos 415
|
Pos 305
|
||||||
Event_type Query
|
Event_type Query
|
||||||
Server_id #
|
Server_id #
|
||||||
End_log_pos 521
|
End_log_pos 411
|
||||||
Info use `test`; CREATE TABLE t3 (a INT, b INT) CHARSET=utf8
|
Info use `test`; CREATE TABLE t3 (a INT, b INT) CHARSET=utf8
|
||||||
Log_name #
|
Log_name #
|
||||||
Pos 521
|
Pos 411
|
||||||
Event_type Query
|
Event_type Query
|
||||||
Server_id #
|
Server_id #
|
||||||
End_log_pos 640
|
End_log_pos 530
|
||||||
Info use `test`; CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8
|
Info use `test`; CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8
|
||||||
**** On Master ****
|
**** On Master ****
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
|
@ -125,9 +130,14 @@ NULL 3 6
|
||||||
NULL 4 2
|
NULL 4 2
|
||||||
NULL 5 10
|
NULL 5 10
|
||||||
NULL 6 12
|
NULL 6 12
|
||||||
|
**** Resetting master and slave ****
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
||||||
ERROR 23000: Duplicate entry '2' for key 'b'
|
ERROR 23000: Duplicate entry '2' for key 'b'
|
||||||
SHOW BINLOG EVENTS FROM 1374;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
||||||
INSERT INTO t7 SELECT a,b FROM tt3;
|
INSERT INTO t7 SELECT a,b FROM tt3;
|
||||||
|
@ -137,18 +147,23 @@ a b
|
||||||
1 2
|
1 2
|
||||||
2 4
|
2 4
|
||||||
3 6
|
3 6
|
||||||
SHOW BINLOG EVENTS FROM 1374;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 1374 Query # 1474 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
|
# 106 Query # 206 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
|
||||||
# 1474 Query # 1542 use `test`; BEGIN
|
# 206 Query # 274 use `test`; BEGIN
|
||||||
# 1542 Table_map # 1584 table_id: # (test.t7)
|
# 274 Table_map # 316 table_id: # (test.t7)
|
||||||
# 1584 Write_rows # 1640 table_id: # flags: STMT_END_F
|
# 316 Write_rows # 372 table_id: # flags: STMT_END_F
|
||||||
# 1640 Query # 1711 use `test`; ROLLBACK
|
# 372 Query # 443 use `test`; ROLLBACK
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
2 4
|
2 4
|
||||||
3 6
|
3 6
|
||||||
|
**** Resetting master and slave ****
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
CREATE TEMPORARY TABLE tt4 (a INT, b INT);
|
CREATE TEMPORARY TABLE tt4 (a INT, b INT);
|
||||||
INSERT INTO tt4 VALUES (4,8), (5,10), (6,12);
|
INSERT INTO tt4 VALUES (4,8), (5,10), (6,12);
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
@ -156,12 +171,12 @@ INSERT INTO t7 SELECT a,b FROM tt4;
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
SHOW BINLOG EVENTS FROM 1711;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 1711 Query # 1779 use `test`; BEGIN
|
# 106 Query # 174 use `test`; BEGIN
|
||||||
# 1779 Table_map # 1821 table_id: # (test.t7)
|
# 174 Table_map # 216 table_id: # (test.t7)
|
||||||
# 1821 Write_rows # 1877 table_id: # flags: STMT_END_F
|
# 216 Write_rows # 272 table_id: # flags: STMT_END_F
|
||||||
# 1877 Query # 1946 use `test`; COMMIT
|
# 272 Query # 343 use `test`; ROLLBACK
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
a b
|
a b
|
||||||
1 2
|
1 2
|
||||||
|
@ -178,6 +193,11 @@ a b
|
||||||
4 8
|
4 8
|
||||||
5 10
|
5 10
|
||||||
6 12
|
6 12
|
||||||
|
**** Resetting master and slave ****
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
CREATE TABLE t8 LIKE t4;
|
CREATE TABLE t8 LIKE t4;
|
||||||
CREATE TABLE t9 LIKE tt4;
|
CREATE TABLE t9 LIKE tt4;
|
||||||
CREATE TEMPORARY TABLE tt5 LIKE t4;
|
CREATE TEMPORARY TABLE tt5 LIKE t4;
|
||||||
|
@ -196,10 +216,10 @@ Create Table CREATE TABLE `t9` (
|
||||||
`a` int(11) DEFAULT NULL,
|
`a` int(11) DEFAULT NULL,
|
||||||
`b` int(11) DEFAULT NULL
|
`b` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
SHOW BINLOG EVENTS FROM 1946;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 1946 Query # 2032 use `test`; CREATE TABLE t8 LIKE t4
|
# 106 Query # 192 use `test`; CREATE TABLE t8 LIKE t4
|
||||||
# 2032 Query # 2171 use `test`; CREATE TABLE `t9` (
|
# 192 Query # 331 use `test`; CREATE TABLE `t9` (
|
||||||
`a` int(11) DEFAULT NULL,
|
`a` int(11) DEFAULT NULL,
|
||||||
`b` int(11) DEFAULT NULL
|
`b` int(11) DEFAULT NULL
|
||||||
)
|
)
|
||||||
|
@ -276,9 +296,8 @@ a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 4 Format_desc # 106 Server ver: #, Binlog ver: #
|
|
||||||
# 106 Query # 192 use `test`; CREATE TABLE t1 (a INT)
|
# 106 Query # 192 use `test`; CREATE TABLE t1 (a INT)
|
||||||
# 192 Query # 260 use `test`; BEGIN
|
# 192 Query # 260 use `test`; BEGIN
|
||||||
# 260 Table_map # 301 table_id: # (test.t1)
|
# 260 Table_map # 301 table_id: # (test.t1)
|
||||||
|
@ -308,7 +327,7 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 1329 Query # 1397 use `test`; BEGIN
|
# 1329 Query # 1397 use `test`; BEGIN
|
||||||
# 1397 Table_map # 1438 table_id: # (test.t1)
|
# 1397 Table_map # 1438 table_id: # (test.t1)
|
||||||
# 1438 Write_rows # 1482 table_id: # flags: STMT_END_F
|
# 1438 Write_rows # 1482 table_id: # flags: STMT_END_F
|
||||||
# 1482 Query # 1551 use `test`; COMMIT
|
# 1482 Query # 1553 use `test`; ROLLBACK
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
Tables_in_test
|
Tables_in_test
|
||||||
t1
|
t1
|
||||||
|
@ -371,9 +390,8 @@ a
|
||||||
4
|
4
|
||||||
6
|
6
|
||||||
9
|
9
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 4 Format_desc # 106 Server ver: #, Binlog ver: #
|
|
||||||
# 106 Query # 192 use `test`; CREATE TABLE t1 (a INT)
|
# 106 Query # 192 use `test`; CREATE TABLE t1 (a INT)
|
||||||
# 192 Query # 260 use `test`; BEGIN
|
# 192 Query # 260 use `test`; BEGIN
|
||||||
# 260 Table_map # 301 table_id: # (test.t1)
|
# 260 Table_map # 301 table_id: # (test.t1)
|
||||||
|
@ -394,6 +412,11 @@ a
|
||||||
6
|
6
|
||||||
9
|
9
|
||||||
TRUNCATE TABLE t2;
|
TRUNCATE TABLE t2;
|
||||||
|
**** Resetting master and slave ****
|
||||||
|
STOP SLAVE;
|
||||||
|
RESET SLAVE;
|
||||||
|
RESET MASTER;
|
||||||
|
START SLAVE;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO t2 SELECT a*a FROM t1;
|
INSERT INTO t2 SELECT a*a FROM t1;
|
||||||
CREATE TEMPORARY TABLE tt2
|
CREATE TEMPORARY TABLE tt2
|
||||||
|
@ -406,14 +429,14 @@ Warnings:
|
||||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
a
|
a
|
||||||
SHOW BINLOG EVENTS FROM 949;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
# 949 Query # 1017 use `test`; BEGIN
|
# 106 Query # 174 use `test`; BEGIN
|
||||||
# 1017 Table_map # 1058 table_id: # (test.t2)
|
# 174 Table_map # 215 table_id: # (test.t2)
|
||||||
# 1058 Write_rows # 1102 table_id: # flags: STMT_END_F
|
# 215 Write_rows # 259 table_id: # flags: STMT_END_F
|
||||||
# 1102 Table_map # 1143 table_id: # (test.t2)
|
# 259 Table_map # 300 table_id: # (test.t2)
|
||||||
# 1143 Write_rows # 1182 table_id: # flags: STMT_END_F
|
# 300 Write_rows # 339 table_id: # flags: STMT_END_F
|
||||||
# 1182 Query # 1253 use `test`; ROLLBACK
|
# 339 Query # 410 use `test`; ROLLBACK
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
a
|
a
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
|
@ -174,6 +174,7 @@ DROP TRIGGER tr2;
|
||||||
INSERT INTO t1 VALUES (3,'master/slave');
|
INSERT INTO t1 VALUES (3,'master/slave');
|
||||||
INSERT INTO t2 VALUES (3,'master/slave');
|
INSERT INTO t2 VALUES (3,'master/slave');
|
||||||
INSERT INTO t3 VALUES (3,'master/slave');
|
INSERT INTO t3 VALUES (3,'master/slave');
|
||||||
|
COMMIT;
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
a b
|
a b
|
||||||
2 master only
|
2 master only
|
||||||
|
|
|
@ -975,3 +975,22 @@ a b
|
||||||
2 b
|
2 b
|
||||||
3 c
|
3 c
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
create table t1 ( f int ) engine = innodb;
|
||||||
|
create table log ( r int ) engine = myisam;
|
||||||
|
create trigger tr
|
||||||
|
after insert on t1
|
||||||
|
for each row insert into log values ( new.f );
|
||||||
|
set autocommit = 0;
|
||||||
|
insert into t1 values ( 1 );
|
||||||
|
rollback;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
Comparing tables master:test.log and slave:test.log
|
||||||
|
drop table t1, log;
|
||||||
|
|
|
@ -75,16 +75,25 @@ disconnect master;
|
||||||
connect (master, localhost, root);
|
connect (master, localhost, root);
|
||||||
connection master;
|
connection master;
|
||||||
|
|
||||||
CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
|
||||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||||
|
|
||||||
# The slave I/O thread must stop after trying to read the above event
|
# The slave I/O thread must stop after trying to read the above event
|
||||||
connection slave;
|
connection slave;
|
||||||
--source include/wait_for_slave_io_to_stop.inc
|
--source include/wait_for_slave_io_to_stop.inc
|
||||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
let $slave_io_running= query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1);
|
||||||
# import is only the 11th column Slave_IO_Running
|
--echo Slave_IO_Running = $slave_io_running (expect No)
|
||||||
--replace_column 1 # 7 # 8 # 9 # 12 # 22 # 23 # 33 #
|
|
||||||
query_vertical show slave status;
|
--echo ==== clean up ====
|
||||||
|
connection master;
|
||||||
|
DROP TABLE t1;
|
||||||
|
# slave is stopped
|
||||||
|
connection slave;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of tests
|
# End of tests
|
||||||
|
|
|
@ -29,6 +29,8 @@ SET GLOBAL storage_engine=memory;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
|
--source include/reset_master_and_slave.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
CREATE TABLE t1 (a INT, b INT);
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
|
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
|
||||||
|
@ -36,7 +38,7 @@ CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
|
||||||
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
--query_vertical SHOW BINLOG EVENTS FROM 216
|
--query_vertical SHOW BINLOG EVENTS FROM 106
|
||||||
--echo **** On Master ****
|
--echo **** On Master ****
|
||||||
--query_vertical SHOW CREATE TABLE t1
|
--query_vertical SHOW CREATE TABLE t1
|
||||||
--query_vertical SHOW CREATE TABLE t2
|
--query_vertical SHOW CREATE TABLE t2
|
||||||
|
@ -65,6 +67,8 @@ SELECT * FROM t5 ORDER BY a,b,c;
|
||||||
--query_vertical SHOW CREATE TABLE t6
|
--query_vertical SHOW CREATE TABLE t6
|
||||||
SELECT * FROM t6 ORDER BY a,b,c;
|
SELECT * FROM t6 ORDER BY a,b,c;
|
||||||
|
|
||||||
|
--source include/reset_master_and_slave.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
# Test for erroneous constructions
|
# Test for erroneous constructions
|
||||||
--error ER_DUP_ENTRY
|
--error ER_DUP_ENTRY
|
||||||
|
@ -72,7 +76,7 @@ CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
|
||||||
# Shouldn't be written to the binary log
|
# Shouldn't be written to the binary log
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1374;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
|
|
||||||
# Test that INSERT-SELECT works the same way as for SBR.
|
# Test that INSERT-SELECT works the same way as for SBR.
|
||||||
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
CREATE TABLE t7 (a INT, b INT UNIQUE);
|
||||||
|
@ -82,10 +86,12 @@ SELECT * FROM t7 ORDER BY a,b;
|
||||||
# Should be written to the binary log
|
# Should be written to the binary log
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1374;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
|
|
||||||
|
--source include/reset_master_and_slave.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
CREATE TEMPORARY TABLE tt4 (a INT, b INT);
|
CREATE TEMPORARY TABLE tt4 (a INT, b INT);
|
||||||
INSERT INTO tt4 VALUES (4,8), (5,10), (6,12);
|
INSERT INTO tt4 VALUES (4,8), (5,10), (6,12);
|
||||||
|
@ -94,11 +100,13 @@ INSERT INTO t7 SELECT a,b FROM tt4;
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1711;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t7 ORDER BY a,b;
|
SELECT * FROM t7 ORDER BY a,b;
|
||||||
|
|
||||||
|
--source include/reset_master_and_slave.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
CREATE TABLE t8 LIKE t4;
|
CREATE TABLE t8 LIKE t4;
|
||||||
CREATE TABLE t9 LIKE tt4;
|
CREATE TABLE t9 LIKE tt4;
|
||||||
|
@ -110,7 +118,7 @@ CREATE TEMPORARY TABLE tt7 SELECT 1;
|
||||||
--query_vertical SHOW CREATE TABLE t9
|
--query_vertical SHOW CREATE TABLE t9
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 1946;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
--echo **** On Slave ****
|
--echo **** On Slave ****
|
||||||
--query_vertical SHOW CREATE TABLE t8
|
--query_vertical SHOW CREATE TABLE t8
|
||||||
|
@ -162,7 +170,7 @@ SELECT * FROM t3 ORDER BY a;
|
||||||
SELECT * FROM t4 ORDER BY a;
|
SELECT * FROM t4 ORDER BY a;
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
SELECT TABLE_NAME,ENGINE
|
SELECT TABLE_NAME,ENGINE
|
||||||
|
@ -208,13 +216,17 @@ COMMIT;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
TRUNCATE TABLE t2;
|
TRUNCATE TABLE t2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
--source include/reset_master_and_slave.inc
|
||||||
|
|
||||||
|
connection master;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO t2 SELECT a*a FROM t1;
|
INSERT INTO t2 SELECT a*a FROM t1;
|
||||||
CREATE TEMPORARY TABLE tt2
|
CREATE TEMPORARY TABLE tt2
|
||||||
|
@ -227,7 +239,7 @@ ROLLBACK;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
--replace_column 1 # 4 #
|
--replace_column 1 # 4 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||||
SHOW BINLOG EVENTS FROM 949;
|
SHOW BINLOG EVENTS FROM 106;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
|
||||||
|
|
|
@ -121,6 +121,7 @@ DROP TRIGGER tr2;
|
||||||
INSERT INTO t1 VALUES (3,'master/slave');
|
INSERT INTO t1 VALUES (3,'master/slave');
|
||||||
INSERT INTO t2 VALUES (3,'master/slave');
|
INSERT INTO t2 VALUES (3,'master/slave');
|
||||||
INSERT INTO t3 VALUES (3,'master/slave');
|
INSERT INTO t3 VALUES (3,'master/slave');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
|
|
|
@ -467,20 +467,48 @@ drop trigger if exists t1_bi;
|
||||||
insert into t1 values (3, "c");
|
insert into t1 values (3, "c");
|
||||||
|
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
sync_slave_with_master;
|
||||||
save_master_pos;
|
|
||||||
connection slave;
|
|
||||||
sync_with_master;
|
|
||||||
|
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#40116: Uncommited changes are replicated and stay on slave after
|
||||||
|
# rollback on master
|
||||||
|
#
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
source include/master-slave-reset.inc;
|
||||||
|
source include/have_innodb.inc;
|
||||||
|
connection slave;
|
||||||
|
source include/have_innodb.inc;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
create table t1 ( f int ) engine = innodb;
|
||||||
|
create table log ( r int ) engine = myisam;
|
||||||
|
create trigger tr
|
||||||
|
after insert on t1
|
||||||
|
for each row insert into log values ( new.f );
|
||||||
|
|
||||||
|
set autocommit = 0;
|
||||||
|
insert into t1 values ( 1 );
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
let $diff_table_1=master:test.t1;
|
||||||
|
let $diff_table_2=slave:test.t1;
|
||||||
|
--source include/diff_tables.inc
|
||||||
|
|
||||||
|
let $diff_table_1=master:test.log;
|
||||||
|
let $diff_table_2=slave:test.log;
|
||||||
|
--source include/diff_tables.inc
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
drop table t1, log;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
#
|
#
|
||||||
# End of tests
|
# End of tests
|
||||||
#
|
#
|
||||||
save_master_pos;
|
|
||||||
connection slave;
|
|
||||||
sync_with_master;
|
|
||||||
|
|
2
mysql-test/t/ctype_filesystem-master.opt
Normal file
2
mysql-test/t/ctype_filesystem-master.opt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
--character-sets-dir=$MYSQL_TEST_DIR/ß
|
||||||
|
--character-set-filesystem=latin1
|
6
mysql-test/t/ctype_filesystem.test
Normal file
6
mysql-test/t/ctype_filesystem.test
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
SET CHARACTER SET utf8;
|
||||||
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
|
SHOW VARIABLES like 'character_sets_dir';
|
||||||
|
SHOW VARIABLES like 'character_set_filesystem';
|
||||||
|
SHOW VARIABLES like 'character_set_client';
|
||||||
|
SET CHARACTER SET default;
|
|
@ -12,4 +12,5 @@
|
||||||
federated_transactions : Bug#29523 Transactions do not work
|
federated_transactions : Bug#29523 Transactions do not work
|
||||||
log_tables : Bug #37798: main.log_tables fails randomly on powermacg5 and windows
|
log_tables : Bug #37798: main.log_tables fails randomly on powermacg5 and windows
|
||||||
slow_query_log_func : Bug #37962: *_func tests containing sleeps/race conditions
|
slow_query_log_func : Bug #37962: *_func tests containing sleeps/race conditions
|
||||||
|
wait_timeout_func : Bug #41225 joro wait_timeout_func fails
|
||||||
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enoiugh for pushbuild.
|
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enoiugh for pushbuild.
|
||||||
|
|
|
@ -445,3 +445,12 @@ EXPLAIN SELECT * FROM t1 FORCE INDEX(b)
|
||||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#37245 - Full text search problem
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a CHAR(10));
|
||||||
|
INSERT INTO t1 VALUES('aaa15');
|
||||||
|
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||||
|
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
|
@ -135,3 +135,20 @@ select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f");
|
||||||
--enable_ps_protocol
|
--enable_ps_protocol
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#37553: MySql Error Compare TimeDiff & Time
|
||||||
|
#
|
||||||
|
|
||||||
|
# calculations involving negative time values ignored sign
|
||||||
|
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10'),time('00:00:00');
|
||||||
|
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')>time('00:00:00');
|
||||||
|
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')<time('00:00:00');
|
||||||
|
|
||||||
|
# show that conversion to DECIMAL no longer drops sign
|
||||||
|
SELECT CAST(time('-73:42:12') AS DECIMAL);
|
||||||
|
|
||||||
|
|
||||||
|
# End of 5.0 tests
|
||||||
|
|
|
@ -1263,4 +1263,14 @@ CREATE VIEW v1 AS SELECT CHAR(0x414243) as c1;
|
||||||
SELECT HEX(c1) from v1;
|
SELECT HEX(c1) from v1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #35558 Wrong server metadata blows up the client
|
||||||
|
#
|
||||||
|
create table t1(a float);
|
||||||
|
insert into t1 values (1.33);
|
||||||
|
--enable_metadata
|
||||||
|
select format(a, 2) from t1;
|
||||||
|
--disable_metadata
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
|
@ -53,3 +53,42 @@ CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;
|
||||||
CREATE INDEX i1 on t1 (a(3));
|
CREATE INDEX i1 on t1 (a(3));
|
||||||
SELECT * FROM t1 WHERE a = 'abcde';
|
SELECT * FROM t1 WHERE a = 'abcde';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #37742: HA_EXTRA_KEYREAD flag is set when key contains only prefix of
|
||||||
|
# requested column
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE foo (a int, b int, c char(10),
|
||||||
|
PRIMARY KEY (c(3)),
|
||||||
|
KEY b (b)
|
||||||
|
) engine=innodb;
|
||||||
|
|
||||||
|
CREATE TABLE foo2 (a int, b int, c char(10),
|
||||||
|
PRIMARY KEY (c),
|
||||||
|
KEY b (b)
|
||||||
|
) engine=innodb;
|
||||||
|
|
||||||
|
CREATE TABLE bar (a int, b int, c char(10),
|
||||||
|
PRIMARY KEY (c(3)),
|
||||||
|
KEY b (b)
|
||||||
|
) engine=myisam;
|
||||||
|
|
||||||
|
INSERT INTO foo VALUES
|
||||||
|
(1,2,'abcdefghij'), (2,3,''), (3,4,'klmnopqrst'),
|
||||||
|
(4,5,'uvwxyz'), (5,6,'meotnsyglt'), (4,5,'asfdewe');
|
||||||
|
|
||||||
|
INSERT INTO bar SELECT * FROM foo;
|
||||||
|
INSERT INTO foo2 SELECT * FROM foo;
|
||||||
|
|
||||||
|
--query_vertical EXPLAIN SELECT c FROM bar WHERE b>2;
|
||||||
|
--query_vertical EXPLAIN SELECT c FROM foo WHERE b>2;
|
||||||
|
--query_vertical EXPLAIN SELECT c FROM foo2 WHERE b>2;
|
||||||
|
|
||||||
|
--query_vertical EXPLAIN SELECT c FROM bar WHERE c>2;
|
||||||
|
--query_vertical EXPLAIN SELECT c FROM foo WHERE c>2;
|
||||||
|
--query_vertical EXPLAIN SELECT c FROM foo2 WHERE c>2;
|
||||||
|
|
||||||
|
DROP TABLE foo, bar, foo2;
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
|
|
@ -105,6 +105,7 @@ SELECT count(*) from t1;
|
||||||
DROP PROCEDURE sp_addRec;
|
DROP PROCEDURE sp_addRec;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
SET @@global.myisam_data_pointer_size = default;
|
||||||
################################################################
|
################################################################
|
||||||
# End of functionality Testing for myisam_data_pointer_size #
|
# End of functionality Testing for myisam_data_pointer_size #
|
||||||
################################################################
|
################################################################
|
||||||
|
|
|
@ -31,3 +31,28 @@ FLUSH TABLES;
|
||||||
--exec $MYISAMCHK -s --unpack $MYSQLTEST_VARDIR/master-data/test/t1
|
--exec $MYISAMCHK -s --unpack $MYSQLTEST_VARDIR/master-data/test/t1
|
||||||
CHECK TABLE t1 EXTENDED;
|
CHECK TABLE t1 EXTENDED;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#40949 Debug version of MySQL server crashes when run OPTIMIZE on compressed table.
|
||||||
|
#
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
--enable_warnings
|
||||||
|
create table t1(f1 int, f2 varchar(255));
|
||||||
|
insert into t1 values(1, 'foo'), (2, 'bar');
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
insert into t1 select * from t1;
|
||||||
|
flush tables;
|
||||||
|
--exec $MYISAMPACK $MYSQLTEST_VARDIR/master-data/test/t1
|
||||||
|
optimize table t1;
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -6,6 +6,9 @@ eval select LENGTH("$MY_PERROR") > 0 as "have_perror";
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
|
||||||
|
|
||||||
--exec $MY_PERROR 150
|
--exec $MY_PERROR 150 2>&1
|
||||||
--exec $MY_PERROR 23
|
--exec $MY_PERROR 23 2>&1
|
||||||
--exec $MY_PERROR 15000
|
--exec $MY_PERROR 1062 2>&1
|
||||||
|
--error 1
|
||||||
|
--exec $MY_PERROR 30000 2>&1
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,10 @@ insert into t1 values
|
||||||
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
||||||
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
||||||
|
|
||||||
|
insert into t1 values
|
||||||
|
(unix_timestamp('2009-01-01 02:59:59'),'2009-01-01 02:59:59'),
|
||||||
|
(unix_timestamp('2009-01-01 03:00:00'),'2009-01-01 03:00:00');
|
||||||
|
|
||||||
select i, from_unixtime(i), c from t1;
|
select i, from_unixtime(i), c from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
@ -58,4 +62,12 @@ insert into t1 values (19730101235900), (20040101235900);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test Bug #39920: MySQL cannot deal with Leap Second expression in string
|
||||||
|
# literal
|
||||||
|
#
|
||||||
|
|
||||||
|
# 2009-01-01 02:59:59, 2009-01-01 02:59:60 and 2009-01-01 03:00:00
|
||||||
|
SELECT FROM_UNIXTIME(1230768022), FROM_UNIXTIME(1230768023), FROM_UNIXTIME(1230768024);
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
|
@ -352,6 +352,21 @@ SELECT HEX(b1), HEX(b2), i2 FROM t2
|
||||||
|
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #35796 SHOW CREATE TABLE and default value for BIT field
|
||||||
|
#
|
||||||
|
CREATE TABLE IF NOT EXISTS t1 (
|
||||||
|
f1 bit(2) NOT NULL default b'10',
|
||||||
|
f2 bit(14) NOT NULL default b'11110000111100'
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--error ER_INVALID_DEFAULT
|
||||||
|
CREATE TABLE IF NOT EXISTS t1 (
|
||||||
|
f1 bit(2) NOT NULL default b''
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -252,4 +252,21 @@ insert into t1 values (2e30), (-2e30);
|
||||||
select f1 + 0e0 from t1;
|
select f1 + 0e0 from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #27483: Casting 'scientific notation type' to 'unsigned bigint' fails on
|
||||||
|
# windows.
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1(d double, u bigint unsigned);
|
||||||
|
|
||||||
|
insert into t1(d) values (9.2233720368547777e+18),
|
||||||
|
(9.223372036854779e18),
|
||||||
|
(9.22337203685479e18),
|
||||||
|
(1.84e19);
|
||||||
|
|
||||||
|
update t1 set u = d;
|
||||||
|
select u from t1;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
|
@ -430,4 +430,25 @@ drop table t1,t2;
|
||||||
connection default;
|
connection default;
|
||||||
disconnect con1;
|
disconnect con1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #40745: Error during WHERE clause calculation in UPDATE
|
||||||
|
# leads to an assertion failure
|
||||||
|
#
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP FUNCTION IF EXISTS f1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE FUNCTION f1() RETURNS INT RETURN f1();
|
||||||
|
CREATE TABLE t1 (i INT);
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
|
--error ER_SP_NO_RECURSION
|
||||||
|
UPDATE t1 SET i = 3 WHERE f1();
|
||||||
|
--error ER_SP_NO_RECURSION
|
||||||
|
UPDATE t1 SET i = f1();
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
|
@ -1067,18 +1067,6 @@ SET @@global.skip_show_database= true;
|
||||||
#
|
#
|
||||||
--echo #
|
--echo #
|
||||||
--replace_column 2 #
|
--replace_column 2 #
|
||||||
SHOW VARIABLES like 'socket';
|
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
||||||
SELECT @@session.socket;
|
|
||||||
--replace_column 1 #
|
|
||||||
SELECT @@global.socket;
|
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
||||||
SET @@session.socket= 'x';
|
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
||||||
SET @@global.socket= 'x';
|
|
||||||
#
|
|
||||||
--echo #
|
|
||||||
--replace_column 2 #
|
|
||||||
SHOW VARIABLES like 'thread_stack';
|
SHOW VARIABLES like 'thread_stack';
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
SELECT @@session.thread_stack;
|
SELECT @@session.thread_stack;
|
||||||
|
|
|
@ -510,7 +510,7 @@ drop table t1;
|
||||||
#
|
#
|
||||||
create table t1 (a int, b int);
|
create table t1 (a int, b int);
|
||||||
create view v1 as select a, sum(b) from t1 group by a;
|
create view v1 as select a, sum(b) from t1 group by a;
|
||||||
--error ER_WRONG_USAGE
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
select b from v1 use index (some_index) where b=1;
|
select b from v1 use index (some_index) where b=1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -3421,11 +3421,11 @@ drop table t1;
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT);
|
||||||
INSERT INTO t1 VALUES (1),(2);
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
--error ER_WRONG_USAGE
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
SELECT * FROM v1 USE KEY(non_existant);
|
SELECT * FROM v1 USE KEY(non_existant);
|
||||||
--error ER_WRONG_USAGE
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
SELECT * FROM v1 FORCE KEY(non_existant);
|
SELECT * FROM v1 FORCE KEY(non_existant);
|
||||||
--error ER_WRONG_USAGE
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
SELECT * FROM v1 IGNORE KEY(non_existant);
|
SELECT * FROM v1 IGNORE KEY(non_existant);
|
||||||
|
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
@ -3564,6 +3564,32 @@ DROP VIEW v1;
|
||||||
CREATE VIEW v1 AS SELECT 1;
|
CREATE VIEW v1 AS SELECT 1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws an error
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2));
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||||
|
SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
SELECT * FROM t1 USE INDEX (c2) WHERE c2=2;
|
||||||
|
|
||||||
|
CREATE VIEW v1 AS SELECT c1, c2 FROM t1;
|
||||||
|
SHOW INDEX FROM v1;
|
||||||
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
|
SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
|
SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
|
SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2;
|
||||||
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
|
SELECT * FROM v1 USE INDEX (c2) WHERE c2=2;
|
||||||
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
|
SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2;
|
||||||
|
--error ER_KEY_DOES_NOT_EXITS
|
||||||
|
SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2;
|
||||||
|
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo # -----------------------------------------------------------------
|
--echo # -----------------------------------------------------------------
|
||||||
--echo # -- End of 5.0 tests.
|
--echo # -- End of 5.0 tests.
|
||||||
|
|
|
@ -368,17 +368,7 @@ void my_thread_end(void)
|
||||||
|
|
||||||
struct st_my_thread_var *_my_thread_var(void)
|
struct st_my_thread_var *_my_thread_var(void)
|
||||||
{
|
{
|
||||||
struct st_my_thread_var *tmp=
|
return my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys);
|
||||||
my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys);
|
|
||||||
#if defined(USE_TLS)
|
|
||||||
/* This can only happen in a .DLL */
|
|
||||||
if (!tmp)
|
|
||||||
{
|
|
||||||
my_thread_init();
|
|
||||||
tmp=my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3835,7 +3835,7 @@ int Field_longlong::store(double nr)
|
||||||
error= 1;
|
error= 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
res=(longlong) (ulonglong) nr;
|
res=(longlong) double2ulonglong(nr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -5114,6 +5114,9 @@ int Item_hex_string::save_in_field(Field *field, bool no_conversions)
|
||||||
|
|
||||||
ulonglong nr;
|
ulonglong nr;
|
||||||
uint32 length= str_value.length();
|
uint32 length= str_value.length();
|
||||||
|
if (!length)
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (length > 8)
|
if (length > 8)
|
||||||
{
|
{
|
||||||
nr= field->flags & UNSIGNED_FLAG ? ULONGLONG_MAX : LONGLONG_MAX;
|
nr= field->flags & UNSIGNED_FLAG ? ULONGLONG_MAX : LONGLONG_MAX;
|
||||||
|
|
|
@ -810,11 +810,11 @@ Arg_comparator::can_compare_as_dates(Item *a, Item *b, ulonglong *const_value)
|
||||||
obtained value
|
obtained value
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ulonglong
|
longlong
|
||||||
get_time_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
get_time_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
Item *warn_item, bool *is_null)
|
Item *warn_item, bool *is_null)
|
||||||
{
|
{
|
||||||
ulonglong value;
|
longlong value;
|
||||||
Item *item= **item_arg;
|
Item *item= **item_arg;
|
||||||
MYSQL_TIME ltime;
|
MYSQL_TIME ltime;
|
||||||
|
|
||||||
|
@ -826,7 +826,7 @@ get_time_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*is_null= item->get_time(<ime);
|
*is_null= item->get_time(<ime);
|
||||||
value= !*is_null ? TIME_to_ulonglong_datetime(<ime) : 0;
|
value= !*is_null ? (longlong) TIME_to_ulonglong_datetime(<ime) : 0;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Do not cache GET_USER_VAR() function as its const_item() may return TRUE
|
Do not cache GET_USER_VAR() function as its const_item() may return TRUE
|
||||||
|
@ -951,11 +951,11 @@ void Arg_comparator::set_datetime_cmp_func(Item **a1, Item **b1)
|
||||||
obtained value
|
obtained value
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ulonglong
|
longlong
|
||||||
get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
Item *warn_item, bool *is_null)
|
Item *warn_item, bool *is_null)
|
||||||
{
|
{
|
||||||
ulonglong value= 0;
|
longlong value= 0;
|
||||||
String buf, *str= 0;
|
String buf, *str= 0;
|
||||||
Item *item= **item_arg;
|
Item *item= **item_arg;
|
||||||
|
|
||||||
|
@ -993,7 +993,7 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
enum_field_types f_type= warn_item->field_type();
|
enum_field_types f_type= warn_item->field_type();
|
||||||
timestamp_type t_type= f_type ==
|
timestamp_type t_type= f_type ==
|
||||||
MYSQL_TYPE_DATE ? MYSQL_TIMESTAMP_DATE : MYSQL_TIMESTAMP_DATETIME;
|
MYSQL_TYPE_DATE ? MYSQL_TIMESTAMP_DATE : MYSQL_TIMESTAMP_DATETIME;
|
||||||
value= get_date_from_str(thd, str, t_type, warn_item->name, &error);
|
value= (longlong) get_date_from_str(thd, str, t_type, warn_item->name, &error);
|
||||||
/*
|
/*
|
||||||
If str did not contain a valid date according to the current
|
If str did not contain a valid date according to the current
|
||||||
SQL_MODE, get_date_from_str() has already thrown a warning,
|
SQL_MODE, get_date_from_str() has already thrown a warning,
|
||||||
|
@ -1047,7 +1047,7 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
int Arg_comparator::compare_datetime()
|
int Arg_comparator::compare_datetime()
|
||||||
{
|
{
|
||||||
bool a_is_null, b_is_null;
|
bool a_is_null, b_is_null;
|
||||||
ulonglong a_value, b_value;
|
longlong a_value, b_value;
|
||||||
|
|
||||||
/* Get DATE/DATETIME/TIME value of the 'a' item. */
|
/* Get DATE/DATETIME/TIME value of the 'a' item. */
|
||||||
a_value= (*get_value_func)(thd, &a, &a_cache, *b, &a_is_null);
|
a_value= (*get_value_func)(thd, &a, &a_cache, *b, &a_is_null);
|
||||||
|
|
|
@ -42,8 +42,8 @@ class Arg_comparator: public Sql_alloc
|
||||||
bool is_nulls_eq; // TRUE <=> compare for the EQUAL_FUNC
|
bool is_nulls_eq; // TRUE <=> compare for the EQUAL_FUNC
|
||||||
enum enum_date_cmp_type { CMP_DATE_DFLT= 0, CMP_DATE_WITH_DATE,
|
enum enum_date_cmp_type { CMP_DATE_DFLT= 0, CMP_DATE_WITH_DATE,
|
||||||
CMP_DATE_WITH_STR, CMP_STR_WITH_DATE };
|
CMP_DATE_WITH_STR, CMP_STR_WITH_DATE };
|
||||||
ulonglong (*get_value_func)(THD *thd, Item ***item_arg, Item **cache_arg,
|
longlong (*get_value_func)(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
Item *warn_item, bool *is_null);
|
Item *warn_item, bool *is_null);
|
||||||
public:
|
public:
|
||||||
DTCollation cmp_collation;
|
DTCollation cmp_collation;
|
||||||
|
|
||||||
|
@ -1012,7 +1012,7 @@ public:
|
||||||
*/
|
*/
|
||||||
class cmp_item_datetime :public cmp_item
|
class cmp_item_datetime :public cmp_item
|
||||||
{
|
{
|
||||||
ulonglong value;
|
longlong value;
|
||||||
public:
|
public:
|
||||||
THD *thd;
|
THD *thd;
|
||||||
/* Item used for issuing warnings. */
|
/* Item used for issuing warnings. */
|
||||||
|
|
|
@ -2259,7 +2259,7 @@ void Item_func_min_max::fix_length_and_dec()
|
||||||
|
|
||||||
uint Item_func_min_max::cmp_datetimes(ulonglong *value)
|
uint Item_func_min_max::cmp_datetimes(ulonglong *value)
|
||||||
{
|
{
|
||||||
ulonglong min_max;
|
longlong min_max;
|
||||||
uint min_max_idx= 0;
|
uint min_max_idx= 0;
|
||||||
LINT_INIT(min_max);
|
LINT_INIT(min_max);
|
||||||
|
|
||||||
|
@ -2267,7 +2267,7 @@ uint Item_func_min_max::cmp_datetimes(ulonglong *value)
|
||||||
{
|
{
|
||||||
Item **arg= args + i;
|
Item **arg= args + i;
|
||||||
bool is_null;
|
bool is_null;
|
||||||
ulonglong res= get_datetime_value(thd, &arg, 0, datetime_item, &is_null);
|
longlong res= get_datetime_value(thd, &arg, 0, datetime_item, &is_null);
|
||||||
if ((null_value= args[i]->null_value))
|
if ((null_value= args[i]->null_value))
|
||||||
return 0;
|
return 0;
|
||||||
if (i == 0 || (res < min_max ? cmp_sign : -cmp_sign) > 0)
|
if (i == 0 || (res < min_max ? cmp_sign : -cmp_sign) > 0)
|
||||||
|
|
|
@ -2033,10 +2033,11 @@ Item_func_format::Item_func_format(Item *org, Item *dec)
|
||||||
|
|
||||||
void Item_func_format::fix_length_and_dec()
|
void Item_func_format::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
collation.set(default_charset());
|
|
||||||
uint char_length= args[0]->max_length/args[0]->collation.collation->mbmaxlen;
|
uint char_length= args[0]->max_length/args[0]->collation.collation->mbmaxlen;
|
||||||
max_length= ((char_length + (char_length-args[0]->decimals)/3) *
|
uint max_sep_count= char_length/3 + (decimals ? 1 : 0) + /*sign*/1;
|
||||||
collation.collation->mbmaxlen);
|
collation.set(default_charset());
|
||||||
|
max_length= (char_length + max_sep_count + decimals) *
|
||||||
|
collation.collation->mbmaxlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -429,6 +429,7 @@ public:
|
||||||
{
|
{
|
||||||
return save_time_in_field(field);
|
return save_time_in_field(field);
|
||||||
}
|
}
|
||||||
|
bool result_as_longlong() { return TRUE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
79
sql/log.cc
79
sql/log.cc
|
@ -207,6 +207,7 @@ public:
|
||||||
truncate(0);
|
truncate(0);
|
||||||
before_stmt_pos= MY_OFF_T_UNDEF;
|
before_stmt_pos= MY_OFF_T_UNDEF;
|
||||||
trans_log.end_of_file= max_binlog_cache_size;
|
trans_log.end_of_file= max_binlog_cache_size;
|
||||||
|
DBUG_ASSERT(empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
Rows_log_event *pending() const
|
Rows_log_event *pending() const
|
||||||
|
@ -1377,8 +1378,6 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
||||||
FLAGSTR(thd->options, OPTION_NOT_AUTOCOMMIT),
|
FLAGSTR(thd->options, OPTION_NOT_AUTOCOMMIT),
|
||||||
FLAGSTR(thd->options, OPTION_BEGIN)));
|
FLAGSTR(thd->options, OPTION_BEGIN)));
|
||||||
|
|
||||||
thd->binlog_flush_pending_rows_event(TRUE);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
NULL denotes ROLLBACK with nothing to replicate: i.e., rollback of
|
NULL denotes ROLLBACK with nothing to replicate: i.e., rollback of
|
||||||
only transactional tables. If the transaction contain changes to
|
only transactional tables. If the transaction contain changes to
|
||||||
|
@ -1387,6 +1386,7 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
||||||
*/
|
*/
|
||||||
if (end_ev != NULL)
|
if (end_ev != NULL)
|
||||||
{
|
{
|
||||||
|
thd->binlog_flush_pending_rows_event(TRUE);
|
||||||
/*
|
/*
|
||||||
Doing a commit or a rollback including non-transactional tables,
|
Doing a commit or a rollback including non-transactional tables,
|
||||||
i.e., ending a transaction where we might write the transaction
|
i.e., ending a transaction where we might write the transaction
|
||||||
|
@ -1435,6 +1435,7 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data,
|
||||||
mysql_bin_log.update_table_map_version();
|
mysql_bin_log.update_table_map_version();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DBUG_ASSERT(thd->binlog_get_pending_rows_event() == NULL);
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1466,6 +1467,7 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all)
|
||||||
*/
|
*/
|
||||||
static int binlog_commit(handlerton *hton, THD *thd, bool all)
|
static int binlog_commit(handlerton *hton, THD *thd, bool all)
|
||||||
{
|
{
|
||||||
|
int error= 0;
|
||||||
DBUG_ENTER("binlog_commit");
|
DBUG_ENTER("binlog_commit");
|
||||||
binlog_trx_data *const trx_data=
|
binlog_trx_data *const trx_data=
|
||||||
(binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
|
(binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
|
||||||
|
@ -1478,60 +1480,11 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Decision table for committing a transaction. The top part, the
|
We commit the transaction if:
|
||||||
*conditions* represent different cases that can occur, and hte
|
|
||||||
bottom part, the *actions*, represent what should be done in that
|
|
||||||
particular case.
|
|
||||||
|
|
||||||
Real transaction 'all' was true
|
- We are not in a transaction and committing a statement, or
|
||||||
|
|
||||||
Statement in cache There were at least one statement in the
|
- We are in a transaction and a full transaction is committed
|
||||||
transaction cache
|
|
||||||
|
|
||||||
In transaction We are inside a transaction
|
|
||||||
|
|
||||||
Stmt modified non-trans The statement being committed modified a
|
|
||||||
non-transactional table
|
|
||||||
|
|
||||||
All modified non-trans Some statement before this one in the
|
|
||||||
transaction modified a non-transactional
|
|
||||||
table
|
|
||||||
|
|
||||||
|
|
||||||
============================= = = = = = = = = = = = = = = = =
|
|
||||||
Real transaction N N N N N N N N N N N N N N N N
|
|
||||||
Statement in cache N N N N N N N N Y Y Y Y Y Y Y Y
|
|
||||||
In transaction N N N N Y Y Y Y N N N N Y Y Y Y
|
|
||||||
Stmt modified non-trans N N Y Y N N Y Y N N Y Y N N Y Y
|
|
||||||
All modified non-trans N Y N Y N Y N Y N Y N Y N Y N Y
|
|
||||||
|
|
||||||
Action: (C)ommit/(A)ccumulate C C - C A C - C - - - - A A - A
|
|
||||||
============================= = = = = = = = = = = = = = = = =
|
|
||||||
|
|
||||||
|
|
||||||
============================= = = = = = = = = = = = = = = = =
|
|
||||||
Real transaction Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
|
|
||||||
Statement in cache N N N N N N N N Y Y Y Y Y Y Y Y
|
|
||||||
In transaction N N N N Y Y Y Y N N N N Y Y Y Y
|
|
||||||
Stmt modified non-trans N N Y Y N N Y Y N N Y Y N N Y Y
|
|
||||||
All modified non-trans N Y N Y N Y N Y N Y N Y N Y N Y
|
|
||||||
|
|
||||||
(C)ommit/(A)ccumulate/(-) - - - - C C - C - - - - C C - C
|
|
||||||
============================= = = = = = = = = = = = = = = = =
|
|
||||||
|
|
||||||
In other words, we commit the transaction if and only if both of
|
|
||||||
the following are true:
|
|
||||||
- We are not in a transaction and committing a statement
|
|
||||||
|
|
||||||
- We are in a transaction and one (or more) of the following are
|
|
||||||
true:
|
|
||||||
|
|
||||||
- A full transaction is committed
|
|
||||||
|
|
||||||
OR
|
|
||||||
|
|
||||||
- A non-transactional statement is committed and there is
|
|
||||||
no statement cached
|
|
||||||
|
|
||||||
Otherwise, we accumulate the statement
|
Otherwise, we accumulate the statement
|
||||||
*/
|
*/
|
||||||
|
@ -1544,18 +1497,18 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
|
||||||
YESNO(in_transaction),
|
YESNO(in_transaction),
|
||||||
YESNO(thd->transaction.all.modified_non_trans_table),
|
YESNO(thd->transaction.all.modified_non_trans_table),
|
||||||
YESNO(thd->transaction.stmt.modified_non_trans_table)));
|
YESNO(thd->transaction.stmt.modified_non_trans_table)));
|
||||||
if (in_transaction &&
|
if (!in_transaction || all)
|
||||||
(all ||
|
|
||||||
(!trx_data->at_least_one_stmt &&
|
|
||||||
thd->transaction.stmt.modified_non_trans_table)) ||
|
|
||||||
!in_transaction && !all)
|
|
||||||
{
|
{
|
||||||
Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
|
Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
|
||||||
qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
|
qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
|
||||||
int error= binlog_end_trans(thd, trx_data, &qev, all);
|
error= binlog_end_trans(thd, trx_data, &qev, all);
|
||||||
DBUG_RETURN(error);
|
goto end;
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
|
||||||
|
end:
|
||||||
|
if (!all)
|
||||||
|
trx_data->before_stmt_pos = MY_OFF_T_UNDEF; // part of the stmt commit
|
||||||
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1615,6 +1568,8 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
|
||||||
*/
|
*/
|
||||||
error= binlog_end_trans(thd, trx_data, 0, all);
|
error= binlog_end_trans(thd, trx_data, 0, all);
|
||||||
}
|
}
|
||||||
|
if (!all)
|
||||||
|
trx_data->before_stmt_pos = MY_OFF_T_UNDEF; // part of the stmt rollback
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ my_decimal *date2my_decimal(MYSQL_TIME *ltime, my_decimal *dec)
|
||||||
date = (ltime->year*100L + ltime->month)*100L + ltime->day;
|
date = (ltime->year*100L + ltime->month)*100L + ltime->day;
|
||||||
if (ltime->time_type > MYSQL_TIMESTAMP_DATE)
|
if (ltime->time_type > MYSQL_TIMESTAMP_DATE)
|
||||||
date= ((date*100L + ltime->hour)*100L+ ltime->minute)*100L + ltime->second;
|
date= ((date*100L + ltime->hour)*100L+ ltime->minute)*100L + ltime->second;
|
||||||
if (int2my_decimal(E_DEC_FATAL_ERROR, date, FALSE, dec))
|
if (int2my_decimal(E_DEC_FATAL_ERROR, ltime->neg ? -date : date, FALSE, dec))
|
||||||
return dec;
|
return dec;
|
||||||
if (ltime->second_part)
|
if (ltime->second_part)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1768,10 +1768,9 @@ int mysql_load(THD *thd, sql_exchange *ex, TABLE_LIST *table_list,
|
||||||
int write_record(THD *thd, TABLE *table, COPY_INFO *info);
|
int write_record(THD *thd, TABLE *table, COPY_INFO *info);
|
||||||
|
|
||||||
/* sql_manager.cc */
|
/* sql_manager.cc */
|
||||||
extern ulong volatile manager_status;
|
extern bool volatile mqh_used;
|
||||||
extern bool volatile manager_thread_in_use, mqh_used;
|
void start_handle_manager();
|
||||||
extern pthread_t manager_thread;
|
void stop_handle_manager();
|
||||||
pthread_handler_t handle_manager(void *arg);
|
|
||||||
bool mysql_manager_submit(void (*action)());
|
bool mysql_manager_submit(void (*action)());
|
||||||
|
|
||||||
|
|
||||||
|
@ -2175,8 +2174,8 @@ void make_date(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time,
|
||||||
void make_time(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time,
|
void make_time(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time,
|
||||||
String *str);
|
String *str);
|
||||||
int my_time_compare(MYSQL_TIME *a, MYSQL_TIME *b);
|
int my_time_compare(MYSQL_TIME *a, MYSQL_TIME *b);
|
||||||
ulonglong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
longlong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||||
Item *warn_item, bool *is_null);
|
Item *warn_item, bool *is_null);
|
||||||
|
|
||||||
int test_if_number(char *str,int *res,bool allow_wildcards);
|
int test_if_number(char *str,int *res,bool allow_wildcards);
|
||||||
void change_byte(uchar *,uint,char,char);
|
void change_byte(uchar *,uint,char,char);
|
||||||
|
|
|
@ -227,6 +227,12 @@ extern "C" int gethostname(char *name, int namelen);
|
||||||
|
|
||||||
extern "C" sig_handler handle_segfault(int sig);
|
extern "C" sig_handler handle_segfault(int sig);
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
#define ENABLE_TEMP_POOL 1
|
||||||
|
#else
|
||||||
|
#define ENABLE_TEMP_TOOL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Constants */
|
/* Constants */
|
||||||
|
|
||||||
const char *show_comp_option_name[]= {"YES", "NO", "DISABLED"};
|
const char *show_comp_option_name[]= {"YES", "NO", "DISABLED"};
|
||||||
|
@ -784,16 +790,6 @@ static void close_connections(void)
|
||||||
kill_cached_threads++;
|
kill_cached_threads++;
|
||||||
flush_thread_cache();
|
flush_thread_cache();
|
||||||
|
|
||||||
/* kill flush thread */
|
|
||||||
(void) pthread_mutex_lock(&LOCK_manager);
|
|
||||||
if (manager_thread_in_use)
|
|
||||||
{
|
|
||||||
DBUG_PRINT("quit", ("killing manager thread: 0x%lx",
|
|
||||||
(ulong)manager_thread));
|
|
||||||
(void) pthread_cond_signal(&COND_manager);
|
|
||||||
}
|
|
||||||
(void) pthread_mutex_unlock(&LOCK_manager);
|
|
||||||
|
|
||||||
/* kill connection thread */
|
/* kill connection thread */
|
||||||
#if !defined(__WIN__) && !defined(__NETWARE__)
|
#if !defined(__WIN__) && !defined(__NETWARE__)
|
||||||
DBUG_PRINT("quit", ("waiting for select thread: 0x%lx",
|
DBUG_PRINT("quit", ("waiting for select thread: 0x%lx",
|
||||||
|
@ -1196,6 +1192,7 @@ void clean_up(bool print_message)
|
||||||
if (cleanup_done++)
|
if (cleanup_done++)
|
||||||
return; /* purecov: inspected */
|
return; /* purecov: inspected */
|
||||||
|
|
||||||
|
stop_handle_manager();
|
||||||
release_ddl_log();
|
release_ddl_log();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3377,12 +3374,14 @@ static int init_common_variables(const char *conf_file_name, int argc,
|
||||||
sys_init_connect.value_length= strlen(opt_init_connect);
|
sys_init_connect.value_length= strlen(opt_init_connect);
|
||||||
else
|
else
|
||||||
sys_init_connect.value=my_strdup("",MYF(0));
|
sys_init_connect.value=my_strdup("",MYF(0));
|
||||||
|
sys_init_connect.is_os_charset= TRUE;
|
||||||
|
|
||||||
sys_init_slave.value_length= 0;
|
sys_init_slave.value_length= 0;
|
||||||
if ((sys_init_slave.value= opt_init_slave))
|
if ((sys_init_slave.value= opt_init_slave))
|
||||||
sys_init_slave.value_length= strlen(opt_init_slave);
|
sys_init_slave.value_length= strlen(opt_init_slave);
|
||||||
else
|
else
|
||||||
sys_init_slave.value=my_strdup("",MYF(0));
|
sys_init_slave.value=my_strdup("",MYF(0));
|
||||||
|
sys_init_slave.is_os_charset= TRUE;
|
||||||
|
|
||||||
/* check log options and issue warnings if needed */
|
/* check log options and issue warnings if needed */
|
||||||
if (opt_log && opt_logname && !(log_output_options & LOG_FILE) &&
|
if (opt_log && opt_logname && !(log_output_options & LOG_FILE) &&
|
||||||
|
@ -3405,8 +3404,13 @@ static int init_common_variables(const char *conf_file_name, int argc,
|
||||||
sys_var_slow_log_path.value= my_strdup(s, MYF(0));
|
sys_var_slow_log_path.value= my_strdup(s, MYF(0));
|
||||||
sys_var_slow_log_path.value_length= strlen(s);
|
sys_var_slow_log_path.value_length= strlen(s);
|
||||||
|
|
||||||
|
#if (ENABLE_TEMP_POOL)
|
||||||
if (use_temp_pool && bitmap_init(&temp_pool,0,1024,1))
|
if (use_temp_pool && bitmap_init(&temp_pool,0,1024,1))
|
||||||
return 1;
|
return 1;
|
||||||
|
#else
|
||||||
|
use_temp_pool= 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (my_database_names_init())
|
if (my_database_names_init())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -4036,17 +4040,6 @@ server.");
|
||||||
|
|
||||||
#ifndef EMBEDDED_LIBRARY
|
#ifndef EMBEDDED_LIBRARY
|
||||||
|
|
||||||
static void create_maintenance_thread()
|
|
||||||
{
|
|
||||||
if (flush_time && flush_time != ~(ulong) 0L)
|
|
||||||
{
|
|
||||||
pthread_t hThread;
|
|
||||||
if (pthread_create(&hThread,&connection_attrib,handle_manager,0))
|
|
||||||
sql_print_warning("Can't create thread to manage maintenance");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void create_shutdown_thread()
|
static void create_shutdown_thread()
|
||||||
{
|
{
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
|
@ -4361,7 +4354,7 @@ we force server id to 2, but this MySQL server will not act as a slave.");
|
||||||
execute_ddl_log_recovery();
|
execute_ddl_log_recovery();
|
||||||
|
|
||||||
create_shutdown_thread();
|
create_shutdown_thread();
|
||||||
create_maintenance_thread();
|
start_handle_manager();
|
||||||
|
|
||||||
if (Events::init(opt_noacl))
|
if (Events::init(opt_noacl))
|
||||||
unireg_abort(1);
|
unireg_abort(1);
|
||||||
|
@ -6315,9 +6308,14 @@ log and this option does nothing anymore.",
|
||||||
(uchar**) &opt_tc_heuristic_recover, (uchar**) &opt_tc_heuristic_recover,
|
(uchar**) &opt_tc_heuristic_recover, (uchar**) &opt_tc_heuristic_recover,
|
||||||
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"temp-pool", OPT_TEMP_POOL,
|
{"temp-pool", OPT_TEMP_POOL,
|
||||||
|
#if (ENABLE_TEMP_POOL)
|
||||||
"Using this option will cause most temporary files created to use a small set of names, rather than a unique name for each new file.",
|
"Using this option will cause most temporary files created to use a small set of names, rather than a unique name for each new file.",
|
||||||
|
#else
|
||||||
|
"This option is ignored on this OS.",
|
||||||
|
#endif
|
||||||
(uchar**) &use_temp_pool, (uchar**) &use_temp_pool, 0, GET_BOOL, NO_ARG, 1,
|
(uchar**) &use_temp_pool, (uchar**) &use_temp_pool, 0, GET_BOOL, NO_ARG, 1,
|
||||||
0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0},
|
||||||
|
|
||||||
{"timed_mutexes", OPT_TIMED_MUTEXES,
|
{"timed_mutexes", OPT_TIMED_MUTEXES,
|
||||||
"Specify whether to time mutexes (only InnoDB mutexes are currently supported)",
|
"Specify whether to time mutexes (only InnoDB mutexes are currently supported)",
|
||||||
(uchar**) &timed_mutexes, (uchar**) &timed_mutexes, 0, GET_BOOL, NO_ARG, 0,
|
(uchar**) &timed_mutexes, (uchar**) &timed_mutexes, 0, GET_BOOL, NO_ARG, 0,
|
||||||
|
|
|
@ -176,14 +176,14 @@ static sys_var_bool_ptr sys_automatic_sp_privileges(&vars, "automatic_sp_privile
|
||||||
static sys_var_const sys_back_log(&vars, "back_log",
|
static sys_var_const sys_back_log(&vars, "back_log",
|
||||||
OPT_GLOBAL, SHOW_LONG,
|
OPT_GLOBAL, SHOW_LONG,
|
||||||
(uchar*) &back_log);
|
(uchar*) &back_log);
|
||||||
static sys_var_const_str sys_basedir(&vars, "basedir", mysql_home);
|
static sys_var_const_os_str sys_basedir(&vars, "basedir", mysql_home);
|
||||||
static sys_var_long_ptr sys_binlog_cache_size(&vars, "binlog_cache_size",
|
static sys_var_long_ptr sys_binlog_cache_size(&vars, "binlog_cache_size",
|
||||||
&binlog_cache_size);
|
&binlog_cache_size);
|
||||||
static sys_var_thd_binlog_format sys_binlog_format(&vars, "binlog_format",
|
static sys_var_thd_binlog_format sys_binlog_format(&vars, "binlog_format",
|
||||||
&SV::binlog_format);
|
&SV::binlog_format);
|
||||||
static sys_var_thd_ulong sys_bulk_insert_buff_size(&vars, "bulk_insert_buffer_size",
|
static sys_var_thd_ulong sys_bulk_insert_buff_size(&vars, "bulk_insert_buffer_size",
|
||||||
&SV::bulk_insert_buff_size);
|
&SV::bulk_insert_buff_size);
|
||||||
static sys_var_const sys_character_sets_dir(&vars,
|
static sys_var_const_os sys_character_sets_dir(&vars,
|
||||||
"character_sets_dir",
|
"character_sets_dir",
|
||||||
OPT_GLOBAL, SHOW_CHAR,
|
OPT_GLOBAL, SHOW_CHAR,
|
||||||
(uchar*)
|
(uchar*)
|
||||||
|
@ -233,7 +233,7 @@ static sys_var_long_ptr sys_concurrent_insert(&vars, "concurrent_insert",
|
||||||
&myisam_concurrent_insert);
|
&myisam_concurrent_insert);
|
||||||
static sys_var_long_ptr sys_connect_timeout(&vars, "connect_timeout",
|
static sys_var_long_ptr sys_connect_timeout(&vars, "connect_timeout",
|
||||||
&connect_timeout);
|
&connect_timeout);
|
||||||
static sys_var_const_str sys_datadir(&vars, "datadir", mysql_real_data_home);
|
static sys_var_const_os_str sys_datadir(&vars, "datadir", mysql_real_data_home);
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
static sys_var_thd_dbug sys_dbug(&vars, "debug");
|
static sys_var_thd_dbug sys_dbug(&vars, "debug");
|
||||||
#endif
|
#endif
|
||||||
|
@ -466,7 +466,7 @@ static sys_var_thd_ulong sys_optimizer_search_depth(&vars, "optimizer_sea
|
||||||
static sys_var_const sys_pid_file(&vars, "pid_file",
|
static sys_var_const sys_pid_file(&vars, "pid_file",
|
||||||
OPT_GLOBAL, SHOW_CHAR,
|
OPT_GLOBAL, SHOW_CHAR,
|
||||||
(uchar*) pidfile_name);
|
(uchar*) pidfile_name);
|
||||||
static sys_var_const sys_plugin_dir(&vars, "plugin_dir",
|
static sys_var_const_os sys_plugin_dir(&vars, "plugin_dir",
|
||||||
OPT_GLOBAL, SHOW_CHAR,
|
OPT_GLOBAL, SHOW_CHAR,
|
||||||
(uchar*) opt_plugin_dir);
|
(uchar*) opt_plugin_dir);
|
||||||
static sys_var_const sys_port(&vars, "port",
|
static sys_var_const sys_port(&vars, "port",
|
||||||
|
@ -538,7 +538,7 @@ static sys_var_const sys_thread_concurrency(&vars, "thread_concurrency",
|
||||||
static sys_var_const sys_thread_stack(&vars, "thread_stack",
|
static sys_var_const sys_thread_stack(&vars, "thread_stack",
|
||||||
OPT_GLOBAL, SHOW_LONG,
|
OPT_GLOBAL, SHOW_LONG,
|
||||||
(uchar*) &my_thread_stack_size);
|
(uchar*) &my_thread_stack_size);
|
||||||
static sys_var_readonly sys_tmpdir(&vars, "tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
|
static sys_var_readonly_os sys_tmpdir(&vars, "tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
|
||||||
static sys_var_thd_ulong sys_trans_alloc_block_size(&vars, "transaction_alloc_block_size",
|
static sys_var_thd_ulong sys_trans_alloc_block_size(&vars, "transaction_alloc_block_size",
|
||||||
&SV::trans_alloc_block_size,
|
&SV::trans_alloc_block_size,
|
||||||
0, fix_trans_mem_root);
|
0, fix_trans_mem_root);
|
||||||
|
@ -589,17 +589,17 @@ static sys_var_thd_sql_mode sys_sql_mode(&vars, "sql_mode",
|
||||||
#ifdef HAVE_OPENSSL
|
#ifdef HAVE_OPENSSL
|
||||||
extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher,
|
extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher,
|
||||||
*opt_ssl_key;
|
*opt_ssl_key;
|
||||||
static sys_var_const_str_ptr sys_ssl_ca(&vars, "ssl_ca", &opt_ssl_ca);
|
static sys_var_const_os_str_ptr sys_ssl_ca(&vars, "ssl_ca", &opt_ssl_ca);
|
||||||
static sys_var_const_str_ptr sys_ssl_capath(&vars, "ssl_capath", &opt_ssl_capath);
|
static sys_var_const_os_str_ptr sys_ssl_capath(&vars, "ssl_capath", &opt_ssl_capath);
|
||||||
static sys_var_const_str_ptr sys_ssl_cert(&vars, "ssl_cert", &opt_ssl_cert);
|
static sys_var_const_os_str_ptr sys_ssl_cert(&vars, "ssl_cert", &opt_ssl_cert);
|
||||||
static sys_var_const_str_ptr sys_ssl_cipher(&vars, "ssl_cipher", &opt_ssl_cipher);
|
static sys_var_const_os_str_ptr sys_ssl_cipher(&vars, "ssl_cipher", &opt_ssl_cipher);
|
||||||
static sys_var_const_str_ptr sys_ssl_key(&vars, "ssl_key", &opt_ssl_key);
|
static sys_var_const_os_str_ptr sys_ssl_key(&vars, "ssl_key", &opt_ssl_key);
|
||||||
#else
|
#else
|
||||||
static sys_var_const_str sys_ssl_ca(&vars, "ssl_ca", NULL);
|
static sys_var_const_os_str sys_ssl_ca(&vars, "ssl_ca", NULL);
|
||||||
static sys_var_const_str sys_ssl_capath(&vars, "ssl_capath", NULL);
|
static sys_var_const_os_str sys_ssl_capath(&vars, "ssl_capath", NULL);
|
||||||
static sys_var_const_str sys_ssl_cert(&vars, "ssl_cert", NULL);
|
static sys_var_const_os_str sys_ssl_cert(&vars, "ssl_cert", NULL);
|
||||||
static sys_var_const_str sys_ssl_cipher(&vars, "ssl_cipher", NULL);
|
static sys_var_const_os_str sys_ssl_cipher(&vars, "ssl_cipher", NULL);
|
||||||
static sys_var_const_str sys_ssl_key(&vars, "ssl_key", NULL);
|
static sys_var_const_os_str sys_ssl_key(&vars, "ssl_key", NULL);
|
||||||
#endif
|
#endif
|
||||||
static sys_var_thd_enum
|
static sys_var_thd_enum
|
||||||
sys_updatable_views_with_limit(&vars, "updatable_views_with_limit",
|
sys_updatable_views_with_limit(&vars, "updatable_views_with_limit",
|
||||||
|
@ -936,6 +936,7 @@ bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex,
|
||||||
old_value= var_str->value;
|
old_value= var_str->value;
|
||||||
var_str->value= res;
|
var_str->value= res;
|
||||||
var_str->value_length= new_length;
|
var_str->value_length= new_length;
|
||||||
|
var_str->is_os_charset= FALSE;
|
||||||
rw_unlock(var_mutex);
|
rw_unlock(var_mutex);
|
||||||
my_free(old_value, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(old_value, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1805,6 +1806,13 @@ err:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CHARSET_INFO *sys_var::charset(THD *thd)
|
||||||
|
{
|
||||||
|
return is_os_charset ? thd->variables.character_set_filesystem :
|
||||||
|
system_charset_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool sys_var_thd_enum::update(THD *thd, set_var *var)
|
bool sys_var_thd_enum::update(THD *thd, set_var *var)
|
||||||
{
|
{
|
||||||
if (var->type == OPT_GLOBAL)
|
if (var->type == OPT_GLOBAL)
|
||||||
|
|
|
@ -71,9 +71,18 @@ public:
|
||||||
|
|
||||||
sys_after_update_func after_update;
|
sys_after_update_func after_update;
|
||||||
bool no_support_one_shot;
|
bool no_support_one_shot;
|
||||||
|
/*
|
||||||
|
true if the value is in character_set_filesystem,
|
||||||
|
false otherwise.
|
||||||
|
Note that we can't use a pointer to the charset as the system var is
|
||||||
|
instantiated in global scope and the charset pointers are initialized
|
||||||
|
later.
|
||||||
|
*/
|
||||||
|
bool is_os_charset;
|
||||||
sys_var(const char *name_arg, sys_after_update_func func= NULL,
|
sys_var(const char *name_arg, sys_after_update_func func= NULL,
|
||||||
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
|
Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG)
|
||||||
:name(name_arg), after_update(func), no_support_one_shot(1),
|
:name(name_arg), after_update(func), no_support_one_shot(1),
|
||||||
|
is_os_charset (FALSE),
|
||||||
binlog_status(binlog_status_arg),
|
binlog_status(binlog_status_arg),
|
||||||
m_allow_empty_value(TRUE)
|
m_allow_empty_value(TRUE)
|
||||||
{}
|
{}
|
||||||
|
@ -107,6 +116,7 @@ public:
|
||||||
{ return option_limits == 0; }
|
{ return option_limits == 0; }
|
||||||
virtual bool is_struct() { return 0; }
|
virtual bool is_struct() { return 0; }
|
||||||
virtual bool is_readonly() const { return 0; }
|
virtual bool is_readonly() const { return 0; }
|
||||||
|
CHARSET_INFO *charset(THD *thd);
|
||||||
virtual sys_var_pluginvar *cast_pluginvar() { return 0; }
|
virtual sys_var_pluginvar *cast_pluginvar() { return 0; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -291,6 +301,18 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class sys_var_const_os_str: public sys_var_const_str
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
sys_var_const_os_str(sys_var_chain *chain, const char *name_arg,
|
||||||
|
const char *value_arg)
|
||||||
|
:sys_var_const_str(chain, name_arg, value_arg)
|
||||||
|
{
|
||||||
|
is_os_charset= TRUE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class sys_var_const_str_ptr :public sys_var
|
class sys_var_const_str_ptr :public sys_var
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -320,6 +342,18 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class sys_var_const_os_str_ptr :public sys_var_const_str_ptr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
sys_var_const_os_str_ptr(sys_var_chain *chain, const char *name_arg,
|
||||||
|
char **value_arg)
|
||||||
|
:sys_var_const_str_ptr(chain, name_arg, value_arg)
|
||||||
|
{
|
||||||
|
is_os_charset= TRUE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class sys_var_enum :public sys_var
|
class sys_var_enum :public sys_var
|
||||||
{
|
{
|
||||||
uint *value;
|
uint *value;
|
||||||
|
@ -929,6 +963,19 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class sys_var_readonly_os: public sys_var_readonly
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
sys_var_readonly_os(sys_var_chain *chain, const char *name_arg, enum_var_type type,
|
||||||
|
SHOW_TYPE show_type_arg,
|
||||||
|
sys_value_ptr_func value_ptr_func_arg)
|
||||||
|
:sys_var_readonly(chain, name_arg, type, show_type_arg, value_ptr_func_arg)
|
||||||
|
{
|
||||||
|
is_os_charset= TRUE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Global-only, read-only variable. E.g. command line option.
|
Global-only, read-only variable. E.g. command line option.
|
||||||
*/
|
*/
|
||||||
|
@ -957,6 +1004,22 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class sys_var_const_os: public sys_var_const
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum_var_type var_type;
|
||||||
|
SHOW_TYPE show_type_value;
|
||||||
|
uchar *ptr;
|
||||||
|
sys_var_const_os(sys_var_chain *chain, const char *name_arg,
|
||||||
|
enum_var_type type,
|
||||||
|
SHOW_TYPE show_type_arg, uchar *ptr_arg)
|
||||||
|
:sys_var_const(chain, name_arg, type, show_type_arg, ptr_arg)
|
||||||
|
{
|
||||||
|
is_os_charset= TRUE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class sys_var_have_option: public sys_var
|
class sys_var_have_option: public sys_var
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -288,7 +288,7 @@ static void print_slave_skip_errors(void)
|
||||||
10 characters must be sufficient for a number plus {',' | '...'}
|
10 characters must be sufficient for a number plus {',' | '...'}
|
||||||
plus a NUL terminator. That is a max 6 digit number.
|
plus a NUL terminator. That is a max 6 digit number.
|
||||||
*/
|
*/
|
||||||
const int MIN_ROOM= 10;
|
const size_t MIN_ROOM= 10;
|
||||||
DBUG_ENTER("print_slave_skip_errors");
|
DBUG_ENTER("print_slave_skip_errors");
|
||||||
DBUG_ASSERT(sizeof(slave_skip_error_names) > MIN_ROOM);
|
DBUG_ASSERT(sizeof(slave_skip_error_names) > MIN_ROOM);
|
||||||
DBUG_ASSERT(MAX_SLAVE_ERROR <= 999999); // 6 digits
|
DBUG_ASSERT(MAX_SLAVE_ERROR <= 999999); // 6 digits
|
||||||
|
|
|
@ -23,8 +23,9 @@
|
||||||
|
|
||||||
#include "mysql_priv.h"
|
#include "mysql_priv.h"
|
||||||
|
|
||||||
ulong volatile manager_status;
|
|
||||||
bool volatile manager_thread_in_use;
|
static bool volatile manager_thread_in_use;
|
||||||
|
static bool abort_manager;
|
||||||
|
|
||||||
pthread_t manager_thread;
|
pthread_t manager_thread;
|
||||||
pthread_mutex_t LOCK_manager;
|
pthread_mutex_t LOCK_manager;
|
||||||
|
@ -63,7 +64,6 @@ bool mysql_manager_submit(void (*action)())
|
||||||
pthread_handler_t handle_manager(void *arg __attribute__((unused)))
|
pthread_handler_t handle_manager(void *arg __attribute__((unused)))
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
ulong status;
|
|
||||||
struct timespec abstime;
|
struct timespec abstime;
|
||||||
bool reset_flush_time = TRUE;
|
bool reset_flush_time = TRUE;
|
||||||
struct handler_cb *cb= NULL;
|
struct handler_cb *cb= NULL;
|
||||||
|
@ -72,7 +72,6 @@ pthread_handler_t handle_manager(void *arg __attribute__((unused)))
|
||||||
|
|
||||||
pthread_detach_this_thread();
|
pthread_detach_this_thread();
|
||||||
manager_thread = pthread_self();
|
manager_thread = pthread_self();
|
||||||
manager_status = 0;
|
|
||||||
manager_thread_in_use = 1;
|
manager_thread_in_use = 1;
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
|
@ -87,16 +86,14 @@ pthread_handler_t handle_manager(void *arg __attribute__((unused)))
|
||||||
set_timespec(abstime, flush_time);
|
set_timespec(abstime, flush_time);
|
||||||
reset_flush_time = FALSE;
|
reset_flush_time = FALSE;
|
||||||
}
|
}
|
||||||
while (!manager_status && (!error || error == EINTR) && !abort_loop)
|
while ((!error || error == EINTR) && !abort_manager)
|
||||||
error= pthread_cond_timedwait(&COND_manager, &LOCK_manager, &abstime);
|
error= pthread_cond_timedwait(&COND_manager, &LOCK_manager, &abstime);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (!manager_status && (!error || error == EINTR) && !abort_loop)
|
while ((!error || error == EINTR) && !abort_manager)
|
||||||
error= pthread_cond_wait(&COND_manager, &LOCK_manager);
|
error= pthread_cond_wait(&COND_manager, &LOCK_manager);
|
||||||
}
|
}
|
||||||
status = manager_status;
|
|
||||||
manager_status = 0;
|
|
||||||
if (cb == NULL)
|
if (cb == NULL)
|
||||||
{
|
{
|
||||||
cb= cb_list;
|
cb= cb_list;
|
||||||
|
@ -104,7 +101,7 @@ pthread_handler_t handle_manager(void *arg __attribute__((unused)))
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&LOCK_manager);
|
pthread_mutex_unlock(&LOCK_manager);
|
||||||
|
|
||||||
if (abort_loop)
|
if (abort_manager)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (error == ETIMEDOUT || error == ETIME)
|
if (error == ETIMEDOUT || error == ETIME)
|
||||||
|
@ -121,11 +118,42 @@ pthread_handler_t handle_manager(void *arg __attribute__((unused)))
|
||||||
my_free((uchar*)cb, MYF(0));
|
my_free((uchar*)cb, MYF(0));
|
||||||
cb= next;
|
cb= next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status)
|
|
||||||
DBUG_PRINT("error", ("manager did not handle something: %lx", status));
|
|
||||||
}
|
}
|
||||||
manager_thread_in_use = 0;
|
manager_thread_in_use = 0;
|
||||||
|
DBUG_LEAVE; // Can't use DBUG_RETURN after my_thread_end
|
||||||
my_thread_end();
|
my_thread_end();
|
||||||
DBUG_RETURN(NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Start handle manager thread */
|
||||||
|
void start_handle_manager()
|
||||||
|
{
|
||||||
|
DBUG_ENTER("start_handle_manager");
|
||||||
|
abort_manager = false;
|
||||||
|
if (flush_time && flush_time != ~(ulong) 0L)
|
||||||
|
{
|
||||||
|
pthread_t hThread;
|
||||||
|
if (pthread_create(&hThread,&connection_attrib,handle_manager,0))
|
||||||
|
sql_print_warning("Can't create handle_manager thread");
|
||||||
|
}
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Initiate shutdown of handle manager thread */
|
||||||
|
void stop_handle_manager()
|
||||||
|
{
|
||||||
|
DBUG_ENTER("stop_handle_manager");
|
||||||
|
abort_manager = true;
|
||||||
|
pthread_mutex_lock(&LOCK_manager);
|
||||||
|
if (manager_thread_in_use)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("quit", ("initiate shutdown of handle manager thread: 0x%lx",
|
||||||
|
(ulong)manager_thread));
|
||||||
|
pthread_cond_signal(&COND_manager);
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&LOCK_manager);
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -5304,8 +5304,8 @@ static bool write_log_changed_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
|
||||||
DDL_LOG_ENTRY ddl_log_entry;
|
DDL_LOG_ENTRY ddl_log_entry;
|
||||||
partition_info *part_info= lpt->part_info;
|
partition_info *part_info= lpt->part_info;
|
||||||
DDL_LOG_MEMORY_ENTRY *log_entry;
|
DDL_LOG_MEMORY_ENTRY *log_entry;
|
||||||
char tmp_path[FN_LEN];
|
char tmp_path[FN_REFLEN];
|
||||||
char normal_path[FN_LEN];
|
char normal_path[FN_REFLEN];
|
||||||
List_iterator<partition_element> part_it(part_info->partitions);
|
List_iterator<partition_element> part_it(part_info->partitions);
|
||||||
uint temp_partitions= part_info->temp_partitions.elements;
|
uint temp_partitions= part_info->temp_partitions.elements;
|
||||||
uint no_elements= part_info->partitions.elements;
|
uint no_elements= part_info->partitions.elements;
|
||||||
|
@ -5516,7 +5516,7 @@ static bool write_log_drop_shadow_frm(ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||||
partition_info *part_info= lpt->part_info;
|
partition_info *part_info= lpt->part_info;
|
||||||
DDL_LOG_MEMORY_ENTRY *log_entry;
|
DDL_LOG_MEMORY_ENTRY *log_entry;
|
||||||
DDL_LOG_MEMORY_ENTRY *exec_log_entry= NULL;
|
DDL_LOG_MEMORY_ENTRY *exec_log_entry= NULL;
|
||||||
char shadow_path[FN_LEN];
|
char shadow_path[FN_REFLEN];
|
||||||
DBUG_ENTER("write_log_drop_shadow_frm");
|
DBUG_ENTER("write_log_drop_shadow_frm");
|
||||||
|
|
||||||
build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt);
|
build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt);
|
||||||
|
@ -5559,8 +5559,8 @@ static bool write_log_rename_frm(ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||||
partition_info *part_info= lpt->part_info;
|
partition_info *part_info= lpt->part_info;
|
||||||
DDL_LOG_MEMORY_ENTRY *log_entry;
|
DDL_LOG_MEMORY_ENTRY *log_entry;
|
||||||
DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry;
|
DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry;
|
||||||
char path[FN_LEN];
|
char path[FN_REFLEN];
|
||||||
char shadow_path[FN_LEN];
|
char shadow_path[FN_REFLEN];
|
||||||
DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry;
|
DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry;
|
||||||
DBUG_ENTER("write_log_rename_frm");
|
DBUG_ENTER("write_log_rename_frm");
|
||||||
|
|
||||||
|
@ -5610,8 +5610,8 @@ static bool write_log_drop_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||||
partition_info *part_info= lpt->part_info;
|
partition_info *part_info= lpt->part_info;
|
||||||
DDL_LOG_MEMORY_ENTRY *log_entry;
|
DDL_LOG_MEMORY_ENTRY *log_entry;
|
||||||
DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry;
|
DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry;
|
||||||
char tmp_path[FN_LEN];
|
char tmp_path[FN_REFLEN];
|
||||||
char path[FN_LEN];
|
char path[FN_REFLEN];
|
||||||
uint next_entry= 0;
|
uint next_entry= 0;
|
||||||
DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry;
|
DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry;
|
||||||
DBUG_ENTER("write_log_drop_partition");
|
DBUG_ENTER("write_log_drop_partition");
|
||||||
|
@ -5669,8 +5669,8 @@ static bool write_log_add_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||||
partition_info *part_info= lpt->part_info;
|
partition_info *part_info= lpt->part_info;
|
||||||
DDL_LOG_MEMORY_ENTRY *log_entry;
|
DDL_LOG_MEMORY_ENTRY *log_entry;
|
||||||
DDL_LOG_MEMORY_ENTRY *exec_log_entry= NULL;
|
DDL_LOG_MEMORY_ENTRY *exec_log_entry= NULL;
|
||||||
char tmp_path[FN_LEN];
|
char tmp_path[FN_REFLEN];
|
||||||
char path[FN_LEN];
|
char path[FN_REFLEN];
|
||||||
uint next_entry= 0;
|
uint next_entry= 0;
|
||||||
DBUG_ENTER("write_log_add_change_partition");
|
DBUG_ENTER("write_log_add_change_partition");
|
||||||
|
|
||||||
|
@ -5723,8 +5723,8 @@ static bool write_log_final_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||||
partition_info *part_info= lpt->part_info;
|
partition_info *part_info= lpt->part_info;
|
||||||
DDL_LOG_MEMORY_ENTRY *log_entry;
|
DDL_LOG_MEMORY_ENTRY *log_entry;
|
||||||
DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry;
|
DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry;
|
||||||
char path[FN_LEN];
|
char path[FN_REFLEN];
|
||||||
char shadow_path[FN_LEN];
|
char shadow_path[FN_REFLEN];
|
||||||
DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry;
|
DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry;
|
||||||
uint next_entry= 0;
|
uint next_entry= 0;
|
||||||
DBUG_ENTER("write_log_final_change_partition");
|
DBUG_ENTER("write_log_final_change_partition");
|
||||||
|
|
|
@ -993,7 +993,7 @@ static bool get_field_default_value(THD *thd, TABLE *table,
|
||||||
{
|
{
|
||||||
bool has_default;
|
bool has_default;
|
||||||
bool has_now_default;
|
bool has_now_default;
|
||||||
|
enum enum_field_types field_type= field->type();
|
||||||
/*
|
/*
|
||||||
We are using CURRENT_TIMESTAMP instead of NOW because it is
|
We are using CURRENT_TIMESTAMP instead of NOW because it is
|
||||||
more standard
|
more standard
|
||||||
|
@ -1001,7 +1001,7 @@ static bool get_field_default_value(THD *thd, TABLE *table,
|
||||||
has_now_default= table->timestamp_field == field &&
|
has_now_default= table->timestamp_field == field &&
|
||||||
field->unireg_check != Field::TIMESTAMP_UN_FIELD;
|
field->unireg_check != Field::TIMESTAMP_UN_FIELD;
|
||||||
|
|
||||||
has_default= (field->type() != FIELD_TYPE_BLOB &&
|
has_default= (field_type != FIELD_TYPE_BLOB &&
|
||||||
!(field->flags & NO_DEFAULT_VALUE_FLAG) &&
|
!(field->flags & NO_DEFAULT_VALUE_FLAG) &&
|
||||||
field->unireg_check != Field::NEXT_NUMBER &&
|
field->unireg_check != Field::NEXT_NUMBER &&
|
||||||
!((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40))
|
!((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40))
|
||||||
|
@ -1016,7 +1016,19 @@ static bool get_field_default_value(THD *thd, TABLE *table,
|
||||||
{ // Not null by default
|
{ // Not null by default
|
||||||
char tmp[MAX_FIELD_WIDTH];
|
char tmp[MAX_FIELD_WIDTH];
|
||||||
String type(tmp, sizeof(tmp), field->charset());
|
String type(tmp, sizeof(tmp), field->charset());
|
||||||
field->val_str(&type);
|
if (field_type == MYSQL_TYPE_BIT)
|
||||||
|
{
|
||||||
|
longlong dec= field->val_int();
|
||||||
|
char *ptr= longlong2str(dec, tmp + 2, 2);
|
||||||
|
uint32 length= (uint32) (ptr - tmp);
|
||||||
|
tmp[0]= 'b';
|
||||||
|
tmp[1]= '\'';
|
||||||
|
tmp[length]= '\'';
|
||||||
|
type.length(length + 1);
|
||||||
|
quoted= 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
field->val_str(&type);
|
||||||
if (type.length())
|
if (type.length())
|
||||||
{
|
{
|
||||||
String def_val;
|
String def_val;
|
||||||
|
@ -2087,6 +2099,7 @@ static bool show_status_array(THD *thd, const char *wild,
|
||||||
COND *partial_cond= 0;
|
COND *partial_cond= 0;
|
||||||
enum_check_fields save_count_cuted_fields= thd->count_cuted_fields;
|
enum_check_fields save_count_cuted_fields= thd->count_cuted_fields;
|
||||||
bool res= FALSE;
|
bool res= FALSE;
|
||||||
|
CHARSET_INFO *charset= system_charset_info;
|
||||||
DBUG_ENTER("show_status_array");
|
DBUG_ENTER("show_status_array");
|
||||||
|
|
||||||
thd->count_cuted_fields= CHECK_FIELD_WARN;
|
thd->count_cuted_fields= CHECK_FIELD_WARN;
|
||||||
|
@ -2135,9 +2148,10 @@ static bool show_status_array(THD *thd, const char *wild,
|
||||||
|
|
||||||
if (show_type == SHOW_SYS)
|
if (show_type == SHOW_SYS)
|
||||||
{
|
{
|
||||||
show_type= ((sys_var*) value)->show_type();
|
sys_var *var= ((sys_var *) value);
|
||||||
value= (char*) ((sys_var*) value)->value_ptr(thd, value_type,
|
show_type= var->show_type();
|
||||||
&null_lex_str);
|
value= (char*) var->value_ptr(thd, value_type, &null_lex_str);
|
||||||
|
charset= var->charset(thd);
|
||||||
}
|
}
|
||||||
|
|
||||||
pos= end= buff;
|
pos= end= buff;
|
||||||
|
@ -2213,7 +2227,7 @@ static bool show_status_array(THD *thd, const char *wild,
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
table->field[1]->store(pos, (uint32) (end - pos), system_charset_info);
|
table->field[1]->store(pos, (uint32) (end - pos), charset);
|
||||||
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
|
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
|
||||||
table->field[1]->set_notnull();
|
table->field[1]->set_notnull();
|
||||||
|
|
||||||
|
|
|
@ -4319,6 +4319,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||||
table->table=0; // For query cache
|
table->table=0; // For query cache
|
||||||
if (protocol->write())
|
if (protocol->write())
|
||||||
goto err;
|
goto err;
|
||||||
|
thd->main_da.reset_diagnostics_area();
|
||||||
continue;
|
continue;
|
||||||
/* purecov: end */
|
/* purecov: end */
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,6 +715,11 @@ int mysql_update(THD *thd,
|
||||||
else
|
else
|
||||||
table->file->unlock_row();
|
table->file->unlock_row();
|
||||||
thd->row_count++;
|
thd->row_count++;
|
||||||
|
if (thd->is_error())
|
||||||
|
{
|
||||||
|
error= 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dup_key_found= 0;
|
dup_key_found= 0;
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1049,8 +1049,9 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
|
||||||
|
|
||||||
if (table->index_hints && table->index_hints->elements)
|
if (table->index_hints && table->index_hints->elements)
|
||||||
{
|
{
|
||||||
my_error(ER_WRONG_USAGE, MYF(0), "index hints", "VIEW");
|
my_error(ER_KEY_DOES_NOT_EXITS, MYF(0),
|
||||||
DBUG_RETURN(TRUE);
|
table->index_hints->head()->key_name.str, table->table_name);
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check loop via view definition */
|
/* check loop via view definition */
|
||||||
|
|
|
@ -1416,7 +1416,9 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
||||||
*/
|
*/
|
||||||
if (ha_option & HA_PRIMARY_KEY_IN_READ_INDEX)
|
if (ha_option & HA_PRIMARY_KEY_IN_READ_INDEX)
|
||||||
{
|
{
|
||||||
field->part_of_key= share->keys_in_use;
|
if (field->key_length() == key_part->length &&
|
||||||
|
!(field->flags & BLOB_FLAG))
|
||||||
|
field->part_of_key= share->keys_in_use;
|
||||||
if (field->part_of_sortkey.is_set(key))
|
if (field->part_of_sortkey.is_set(key))
|
||||||
field->part_of_sortkey= share->keys_in_use;
|
field->part_of_sortkey= share->keys_in_use;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1072,6 +1072,7 @@ Time_zone_system::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
||||||
localtime_r(&tmp_t, &tmp_tm);
|
localtime_r(&tmp_t, &tmp_tm);
|
||||||
localtime_to_TIME(tmp, &tmp_tm);
|
localtime_to_TIME(tmp, &tmp_tm);
|
||||||
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
|
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
|
||||||
|
adjust_leap_second(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1156,6 +1157,7 @@ Time_zone_utc::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
||||||
gmtime_r(&tmp_t, &tmp_tm);
|
gmtime_r(&tmp_t, &tmp_tm);
|
||||||
localtime_to_TIME(tmp, &tmp_tm);
|
localtime_to_TIME(tmp, &tmp_tm);
|
||||||
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
|
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
|
||||||
|
adjust_leap_second(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1259,6 +1261,7 @@ void
|
||||||
Time_zone_db::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
Time_zone_db::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
||||||
{
|
{
|
||||||
::gmt_sec_to_TIME(tmp, t, tz_info);
|
::gmt_sec_to_TIME(tmp, t, tz_info);
|
||||||
|
adjust_leap_second(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2279,6 +2282,24 @@ my_tz_find(THD *thd, const String *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Convert leap seconds into non-leap
|
||||||
|
|
||||||
|
This function will convert the leap seconds added by the OS to
|
||||||
|
non-leap seconds, e.g. 23:59:59, 23:59:60 -> 23:59:59, 00:00:01 ...
|
||||||
|
This check is not checking for years on purpose : although it's not a
|
||||||
|
complete check this way it doesn't require looking (and having installed)
|
||||||
|
the leap seconds table.
|
||||||
|
|
||||||
|
@param[in,out] broken down time structure as filled in by the OS
|
||||||
|
*/
|
||||||
|
|
||||||
|
void Time_zone::adjust_leap_second(MYSQL_TIME *t)
|
||||||
|
{
|
||||||
|
if (t->second == 60 || t->second == 61)
|
||||||
|
t->second= 59;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* !defined(TESTTIME) && !defined(TZINFO2SQL) */
|
#endif /* !defined(TESTTIME) && !defined(TZINFO2SQL) */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,9 @@ public:
|
||||||
allocated on MEM_ROOT and should not require destruction.
|
allocated on MEM_ROOT and should not require destruction.
|
||||||
*/
|
*/
|
||||||
virtual ~Time_zone() {};
|
virtual ~Time_zone() {};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static inline void adjust_leap_second(MYSQL_TIME *t);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Time_zone * my_tz_UTC;
|
extern Time_zone * my_tz_UTC;
|
||||||
|
|
|
@ -161,11 +161,11 @@ static int FTB_WORD_cmp(my_off_t *v, FTB_WORD *a, FTB_WORD *b)
|
||||||
|
|
||||||
static int FTB_WORD_cmp_list(CHARSET_INFO *cs, FTB_WORD **a, FTB_WORD **b)
|
static int FTB_WORD_cmp_list(CHARSET_INFO *cs, FTB_WORD **a, FTB_WORD **b)
|
||||||
{
|
{
|
||||||
/* ORDER BY word DESC, ndepth DESC */
|
/* ORDER BY word, ndepth */
|
||||||
int i= ha_compare_text(cs, (uchar*) (*b)->word+1,(*b)->len-1,
|
int i= ha_compare_text(cs, (uchar*) (*a)->word + 1, (*a)->len - 1,
|
||||||
(uchar*) (*a)->word+1,(*a)->len-1,0,0);
|
(uchar*) (*b)->word + 1, (*b)->len - 1, 0, 0);
|
||||||
if (!i)
|
if (!i)
|
||||||
i=CMP_NUM((*b)->ndepth,(*a)->ndepth);
|
i= CMP_NUM((*a)->ndepth, (*b)->ndepth);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -865,23 +865,49 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
|
||||||
FT_INFO *ftb= ftb_param->ftb;
|
FT_INFO *ftb= ftb_param->ftb;
|
||||||
FTB_WORD *ftbw;
|
FTB_WORD *ftbw;
|
||||||
int a, b, c;
|
int a, b, c;
|
||||||
|
/*
|
||||||
|
Find right-most element in the array of query words matching this
|
||||||
|
word from a document.
|
||||||
|
*/
|
||||||
for (a= 0, b= ftb->queue.elements, c= (a+b)/2; b-a>1; c= (a+b)/2)
|
for (a= 0, b= ftb->queue.elements, c= (a+b)/2; b-a>1; c= (a+b)/2)
|
||||||
{
|
{
|
||||||
ftbw= ftb->list[c];
|
ftbw= ftb->list[c];
|
||||||
if (ha_compare_text(ftb->charset, (uchar*)word, len,
|
if (ha_compare_text(ftb->charset, (uchar*)word, len,
|
||||||
(uchar*)ftbw->word+1, ftbw->len-1,
|
(uchar*)ftbw->word+1, ftbw->len-1,
|
||||||
(my_bool)(ftbw->flags&FTB_FLAG_TRUNC), 0) > 0)
|
(my_bool) (ftbw->flags & FTB_FLAG_TRUNC), 0) < 0)
|
||||||
b= c;
|
b= c;
|
||||||
else
|
else
|
||||||
a= c;
|
a= c;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
If there were no words with truncation operator, we iterate to the
|
||||||
|
beginning of an array until array element is equal to the word from
|
||||||
|
a document. This is done mainly because the same word may be
|
||||||
|
mentioned twice (or more) in the query.
|
||||||
|
|
||||||
|
In case query has words with truncation operator we must iterate
|
||||||
|
to the beginning of the array. There may be non-matching query words
|
||||||
|
between matching word with truncation operator and the right-most
|
||||||
|
matching element. E.g., if we're looking for 'aaa15' in an array of
|
||||||
|
'aaa1* aaa14 aaa15 aaa16'.
|
||||||
|
|
||||||
|
Worse of that there still may be match even if the binary search
|
||||||
|
above didn't find matching element. E.g., if we're looking for
|
||||||
|
'aaa15' in an array of 'aaa1* aaa14 aaa16'. The binary search will
|
||||||
|
stop at 'aaa16'.
|
||||||
|
*/
|
||||||
for (; c >= 0; c--)
|
for (; c >= 0; c--)
|
||||||
{
|
{
|
||||||
ftbw= ftb->list[c];
|
ftbw= ftb->list[c];
|
||||||
if (ha_compare_text(ftb->charset, (uchar*)word, len,
|
if (ha_compare_text(ftb->charset, (uchar*)word, len,
|
||||||
(uchar*)ftbw->word + 1,ftbw->len - 1,
|
(uchar*)ftbw->word + 1,ftbw->len - 1,
|
||||||
(my_bool)(ftbw->flags & FTB_FLAG_TRUNC), 0))
|
(my_bool)(ftbw->flags & FTB_FLAG_TRUNC), 0))
|
||||||
break;
|
{
|
||||||
|
if (ftb->with_scan & FTB_FLAG_TRUNC)
|
||||||
|
continue;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (ftbw->docid[1] == ftb->info->lastpos)
|
if (ftbw->docid[1] == ftb->info->lastpos)
|
||||||
continue;
|
continue;
|
||||||
ftbw->docid[1]= ftb->info->lastpos;
|
ftbw->docid[1]= ftb->info->lastpos;
|
||||||
|
|
|
@ -48,6 +48,7 @@ try
|
||||||
case "__NT__":
|
case "__NT__":
|
||||||
case "CYBOZU":
|
case "CYBOZU":
|
||||||
case "EMBED_MANIFESTS":
|
case "EMBED_MANIFESTS":
|
||||||
|
case "EXTRA_DEBUG":
|
||||||
case "WITH_EMBEDDED_SERVER":
|
case "WITH_EMBEDDED_SERVER":
|
||||||
configfile.WriteLine("SET (" + args.Item(i) + " TRUE)");
|
configfile.WriteLine("SET (" + args.Item(i) + " TRUE)");
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue