From: Marc Alff Date: August 27 2010 9:23pm Subject: bzr commit into mysql-5.5-bugfixing branch (marc.alff:3193) List-Archive: http://lists.mysql.com/commits/117054 Message-Id: <20100827212405.44D6745E80@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8906032279637691526==" --===============8906032279637691526== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-55576/ based on revid:marc.alff@stripped 3193 Marc Alff 2010-08-27 [merge] local merge removed: include/mysql/plugin.h.pp added: include/mysql/plugin_audit.h.pp include/mysql/plugin_ftparser.h.pp mysql-test/r/handler_read_last.result mysql-test/r/mysql_not_windows.result mysql-test/suite/perfschema/r/bad_option_3.result mysql-test/suite/perfschema/r/bad_option_4.result mysql-test/suite/perfschema/r/bad_option_5.result mysql-test/suite/perfschema/r/short_option_1.result mysql-test/suite/perfschema/r/short_option_2.result mysql-test/suite/perfschema/t/bad_option_3.test mysql-test/suite/perfschema/t/bad_option_4.test mysql-test/suite/perfschema/t/bad_option_5.test mysql-test/suite/perfschema/t/short_option_1-master.opt mysql-test/suite/perfschema/t/short_option_1.test mysql-test/suite/perfschema/t/short_option_2-master.opt mysql-test/suite/perfschema/t/short_option_2.test mysql-test/t/handler_read_last.test mysql-test/t/mysql_not_windows.test modified: Makefile.am cmake/abi_check.cmake cmake/do_abi_check.cmake mysql-test/mysql-test-run.pl mysql-test/r/create.result mysql-test/r/ctype_utf32.result mysql-test/r/insert_select.result mysql-test/r/join.result mysql-test/r/join_outer.result mysql-test/r/mysql.result mysql-test/r/null_key.result mysql-test/r/partition.result mysql-test/r/select.result mysql-test/r/single_delete_update.result mysql-test/r/subselect3.result mysql-test/r/update.result mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result mysql-test/suite/ndb/r/ndb_binlog_log_bin.result mysql-test/suite/ndb/r/ndb_binlog_multi.result mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result mysql-test/t/ctype_utf32.test mysql-test/t/mysql.test mysys/my_getopt.c sql/mysqld.cc sql/set_var.cc storage/myisam/mi_key.c storage/perfschema/pfs.cc storage/perfschema/pfs_stat.h === modified file 'Makefile.am' --- a/Makefile.am 2010-07-29 12:32:11 +0000 +++ b/Makefile.am 2010-08-27 06:45:35 +0000 @@ -264,7 +264,8 @@ test-full-qa: # Headers which need to be checked for abi/api compatibility. # -API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin.h \ +API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin_audit.h \ + $(top_srcdir)/include/mysql/plugin_ftparser.h \ $(top_srcdir)/include/mysql.h \ $(top_srcdir)/include/mysql/psi/psi_abi_v1.h \ $(top_srcdir)/include/mysql/psi/psi_abi_v2.h === modified file 'cmake/abi_check.cmake' --- a/cmake/abi_check.cmake 2010-07-20 19:53:39 +0000 +++ b/cmake/abi_check.cmake 2010-08-27 06:45:35 +0000 @@ -15,7 +15,8 @@ # # Headers which need to be checked for abi/api compatibility are in -# API_PREPROCESSOR_HEADER. +# API_PREPROCESSOR_HEADER. plugin.h is tested implicitly via +# plugin_audit.h and plugin_ftparser.h. # # We use gcc specific preprocessing command and sed/diff, so it will # only be run on Unix and only if gcc is used. @@ -27,7 +28,8 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYS SET(COMPILER ${CMAKE_C_COMPILER}) ENDIF() SET(API_PREPROCESSOR_HEADER - ${CMAKE_SOURCE_DIR}/include/mysql/plugin.h + ${CMAKE_SOURCE_DIR}/include/mysql/plugin_audit.h + ${CMAKE_SOURCE_DIR}/include/mysql/plugin_ftparser.h ${CMAKE_SOURCE_DIR}/include/mysql.h ${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h ${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h @@ -38,18 +40,18 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYS -DCOMPILER=${COMPILER} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} - "-DDMYSQL_ABI_CHECK -DABI_HEADERS=${API_PREPROCESSOR_HEADER}" + "-DABI_HEADERS=${API_PREPROCESSOR_HEADER}" -P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake VERBATIM ) ADD_CUSTOM_TARGET(abi_check_all COMMAND ${CMAKE_COMMAND} - -DCMAKE_C_COMPILER=${COMPILER} - -DCMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} - -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} - "-DMYSQL_ABI_CHECK -DABI_HEADERS=${API_PREPROCESSOR_HEADER}" - -P ${CMAKE_SOURCE_DIR}/cmake/scripts/do_abi_check.cmake + -DCOMPILER=${COMPILER} + -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DBINARY_DIR=${CMAKE_BINARY_DIR} + "-DABI_HEADERS=${API_PREPROCESSOR_HEADER}" + -P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake VERBATIM ) ENDIF() === modified file 'cmake/do_abi_check.cmake' --- a/cmake/do_abi_check.cmake 2009-11-09 11:32:48 +0000 +++ b/cmake/do_abi_check.cmake 2010-08-27 06:45:35 +0000 @@ -56,8 +56,9 @@ FOREACH(file ${ABI_HEADERS}) SET(tmpfile ${file}.pp.tmp) EXECUTE_PROCESS( COMMAND ${COMPILER} - -E -nostdinc -dI -I${SOURCE_DIR}/include -I${BINARY_DIR}/include - -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql ${file} + -E -nostdinc -dI -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include + -I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql + ${file} ERROR_QUIET OUTPUT_FILE ${tmpfile}) EXECUTE_PROCESS( COMMAND sed -e === removed file 'include/mysql/plugin.h.pp' --- a/include/mysql/plugin.h.pp 2010-08-18 07:14:06 +0000 +++ b/include/mysql/plugin.h.pp 1970-01-01 00:00:00 +0000 @@ -1,168 +0,0 @@ -#include -#include -extern struct my_snprintf_service_st { - size_t (*my_snprintf_type)(char*, size_t, const char*, ...); - size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); -} *my_snprintf_service; -size_t my_snprintf(char* to, size_t n, const char* fmt, ...); -size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); -#include -struct st_mysql_lex_string -{ - char *str; - size_t length; -}; -typedef struct st_mysql_lex_string MYSQL_LEX_STRING; -extern struct thd_alloc_service_st { - void *(*thd_alloc_func)(void*, unsigned int); - void *(*thd_calloc_func)(void*, unsigned int); - char *(*thd_strdup_func)(void*, const char *); - char *(*thd_strmake_func)(void*, const char *, unsigned int); - void *(*thd_memdup_func)(void*, const void*, unsigned int); - MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, - const char *, unsigned int, int); -} *thd_alloc_service; -void *thd_alloc(void* thd, unsigned int size); -void *thd_calloc(void* thd, unsigned int size); -char *thd_strdup(void* thd, const char *str); -char *thd_strmake(void* thd, const char *str, unsigned int size); -void *thd_memdup(void* thd, const void* str, unsigned int size); -MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, - const char *str, unsigned int size, - int allocate_lex_string); -struct st_mysql_xid { - long formatID; - long gtrid_length; - long bqual_length; - char data[128]; -}; -typedef struct st_mysql_xid MYSQL_XID; -enum enum_mysql_show_type -{ - SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG, - SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, - SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, - SHOW_always_last -}; -struct st_mysql_show_var { - const char *name; - char *value; - enum enum_mysql_show_type type; -}; -typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *); -struct st_mysql_sys_var; -struct st_mysql_value; -typedef int (*mysql_var_check_func)(void* thd, - struct st_mysql_sys_var *var, - void *save, struct st_mysql_value *value); -typedef void (*mysql_var_update_func)(void* thd, - struct st_mysql_sys_var *var, - void *var_ptr, const void *save); -struct st_mysql_plugin -{ - int type; - void *info; - const char *name; - const char *author; - const char *descr; - int license; - int (*init)(void *); - int (*deinit)(void *); - unsigned int version; - struct st_mysql_show_var *status_vars; - struct st_mysql_sys_var **system_vars; - void * __reserved1; -}; -#include "plugin_ftparser.h" -#include "plugin.h" -enum enum_ftparser_mode -{ - MYSQL_FTPARSER_SIMPLE_MODE= 0, - MYSQL_FTPARSER_WITH_STOPWORDS= 1, - MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 -}; -enum enum_ft_token_type -{ - FT_TOKEN_EOF= 0, - FT_TOKEN_WORD= 1, - FT_TOKEN_LEFT_PAREN= 2, - FT_TOKEN_RIGHT_PAREN= 3, - FT_TOKEN_STOPWORD= 4 -}; -typedef struct st_mysql_ftparser_boolean_info -{ - enum enum_ft_token_type type; - int yesno; - int weight_adjust; - char wasign; - char trunc; - char prev; - char *quot; -} MYSQL_FTPARSER_BOOLEAN_INFO; -typedef struct st_mysql_ftparser_param -{ - int (*mysql_parse)(struct st_mysql_ftparser_param *, - char *doc, int doc_len); - int (*mysql_add_word)(struct st_mysql_ftparser_param *, - char *word, int word_len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); - void *ftparser_state; - void *mysql_ftparam; - struct charset_info_st *cs; - char *doc; - int length; - int flags; - enum enum_ftparser_mode mode; -} MYSQL_FTPARSER_PARAM; -struct st_mysql_ftparser -{ - int interface_version; - int (*parse)(MYSQL_FTPARSER_PARAM *param); - int (*init)(MYSQL_FTPARSER_PARAM *param); - int (*deinit)(MYSQL_FTPARSER_PARAM *param); -}; -struct st_mysql_daemon -{ - int interface_version; -}; -struct st_mysql_information_schema -{ - int interface_version; -}; -struct st_mysql_storage_engine -{ - int interface_version; -}; -struct handlerton; - struct Mysql_replication { - int interface_version; - }; -struct st_mysql_value -{ - int (*value_type)(struct st_mysql_value *); - const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); - int (*val_real)(struct st_mysql_value *, double *realbuf); - int (*val_int)(struct st_mysql_value *, long long *intbuf); - int (*is_unsigned)(struct st_mysql_value *); -}; -int thd_in_lock_tables(const void* thd); -int thd_tablespace_op(const void* thd); -long long thd_test_options(const void* thd, long long test_options); -int thd_sql_command(const void* thd); -const char *thd_proc_info(void* thd, const char *info); -void **thd_ha_data(const void* thd, const struct handlerton *hton); -void thd_storage_lock_wait(void* thd, long long value); -int thd_tx_isolation(const void* thd); -char *thd_security_context(void* thd, char *buffer, unsigned int length, - unsigned int max_query_len); -void thd_inc_row_count(void* thd); -int mysql_tmpfile(const char *prefix); -int thd_killed(const void* thd); -unsigned long thd_get_thread_id(const void* thd); -void thd_get_xid(const void* thd, MYSQL_XID *xid); -void mysql_query_cache_invalidate4(void* thd, - const char *key, unsigned int key_length, - int using_trx); -void *thd_get_ha_data(const void* thd, const struct handlerton *hton); -void thd_set_ha_data(void* thd, const struct handlerton *hton, - const void *ha_data); === added file 'include/mysql/plugin_audit.h.pp' --- a/include/mysql/plugin_audit.h.pp 1970-01-01 00:00:00 +0000 +++ b/include/mysql/plugin_audit.h.pp 2010-08-27 06:45:35 +0000 @@ -0,0 +1,196 @@ +#include "plugin.h" +#include +#include +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +#include +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG, + SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_always_last +}; +struct st_mysql_show_var { + const char *name; + char *value; + enum enum_mysql_show_type type; +}; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; +}; +#include "plugin_ftparser.h" +#include "plugin.h" +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + struct charset_info_st *cs; + char *doc; + int length; + int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +const char *thd_proc_info(void* thd, const char *info); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +char *thd_security_context(void* thd, char *buffer, unsigned int length, + unsigned int max_query_len); +void thd_inc_row_count(void* thd); +int mysql_tmpfile(const char *prefix); +int thd_killed(const void* thd); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +struct mysql_event +{ + unsigned int event_class; +}; +struct mysql_event_general +{ + unsigned int event_class; + unsigned int event_subclass; + int general_error_code; + unsigned long general_thread_id; + const char *general_user; + unsigned int general_user_length; + const char *general_command; + unsigned int general_command_length; + const char *general_query; + unsigned int general_query_length; + struct charset_info_st *general_charset; + unsigned long long general_time; + unsigned long long general_rows; +}; +struct st_mysql_audit +{ + int interface_version; + void (*release_thd)(void*); + void (*event_notify)(void*, const struct mysql_event *); + unsigned long class_mask[1]; +}; === added file 'include/mysql/plugin_ftparser.h.pp' --- a/include/mysql/plugin_ftparser.h.pp 1970-01-01 00:00:00 +0000 +++ b/include/mysql/plugin_ftparser.h.pp 2010-08-27 06:45:35 +0000 @@ -0,0 +1,168 @@ +#include "plugin.h" +#include +#include +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +#include +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG, + SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_always_last +}; +struct st_mysql_show_var { + const char *name; + char *value; + enum enum_mysql_show_type type; +}; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; +}; +#include "plugin_ftparser.h" +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +const char *thd_proc_info(void* thd, const char *info); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +char *thd_security_context(void* thd, char *buffer, unsigned int length, + unsigned int max_query_len); +void thd_inc_row_count(void* thd); +int mysql_tmpfile(const char *prefix); +int thd_killed(const void* thd); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + struct charset_info_st *cs; + char *doc; + int length; + int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-08-23 08:48:27 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-08-25 13:55:22 +0000 @@ -2155,9 +2155,8 @@ sub environment_setup { # mysqlhotcopy # ---------------------------------------------------- my $mysqlhotcopy= - mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy"); - # Since mysqltest interprets the real path as "false" in an if, - # use 1 ("true") to indicate "not exists" so it can be tested for + mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy") || + mtr_pl_maybe_exists("$path_client_bindir/mysqlhotcopy"); if ($mysqlhotcopy) { $ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy; === modified file 'mysql-test/r/create.result' --- a/mysql-test/r/create.result 2010-08-18 09:35:41 +0000 +++ b/mysql-test/r/create.result 2010-08-25 19:00:38 +0000 @@ -1542,6 +1542,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/ctype_utf32.result' --- a/mysql-test/r/ctype_utf32.result 2010-08-20 11:14:11 +0000 +++ b/mysql-test/r/ctype_utf32.result 2010-08-26 12:36:33 +0000 @@ -1114,5 +1114,18 @@ format(123,2,'no_NO') 123,00 DROP TABLE t1; # +# Bug#42511 mysqld: ctype-ucs2.c:2044: my_strnncollsp_utf32: Assertion (tlen % 4) == 0' faied +# +CREATE TABLE t1 ( +b char(250) CHARACTER SET utf32, +key (b) +) ENGINE=MYISAM; +INSERT INTO t1 VALUES ('d'),('f'); +SELECT * FROM t1 WHERE b BETWEEN 'a' AND 'z'; +b +d +f +DROP TABLE t1; +# # End of 5.5 tests # === added file 'mysql-test/r/handler_read_last.result' --- a/mysql-test/r/handler_read_last.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/handler_read_last.result 2010-08-25 19:00:38 +0000 @@ -0,0 +1,60 @@ +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a INT, INDEX (a)); +INSERT INTO t1 VALUES (),(),(),(),(),(),(),(),(),(); +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a LIMIT 1; +a +NULL +SHOW STATUS LIKE 'HANDLER_READ%'; +Variable_name Value +Handler_read_first 1 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 0 +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a DESC LIMIT 1; +a +NULL +SHOW STATUS LIKE 'HANDLER_READ%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 1 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 0 +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a LIMIT 3; +a +NULL +NULL +NULL +SHOW STATUS LIKE 'HANDLER_READ%'; +Variable_name Value +Handler_read_first 1 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 2 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 0 +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a DESC LIMIT 3; +a +NULL +NULL +NULL +SHOW STATUS LIKE 'HANDLER_READ%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 1 +Handler_read_next 0 +Handler_read_prev 2 +Handler_read_rnd 0 +Handler_read_rnd_next 0 +DROP TABLE t1; === modified file 'mysql-test/r/insert_select.result' --- a/mysql-test/r/insert_select.result 2009-09-22 21:41:37 +0000 +++ b/mysql-test/r/insert_select.result 2010-08-25 19:00:38 +0000 @@ -694,6 +694,7 @@ show status like 'Handler_read%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/join.result' --- a/mysql-test/r/join.result 2010-04-29 20:33:06 +0000 +++ b/mysql-test/r/join.result 2010-08-25 19:00:38 +0000 @@ -854,6 +854,7 @@ show status like 'Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/join_outer.result' --- a/mysql-test/r/join_outer.result 2010-06-01 07:57:23 +0000 +++ b/mysql-test/r/join_outer.result 2010-08-25 19:00:38 +0000 @@ -1238,6 +1238,7 @@ show status like 'Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 5 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/mysql.result' --- a/mysql-test/r/mysql.result 2010-08-19 11:35:47 +0000 +++ b/mysql-test/r/mysql.result 2010-08-25 08:17:15 +0000 @@ -432,8 +432,5 @@ Bug #47147: mysql client option --skip-c *************************** 1. row *************************** 1 -Bug #54466 client 5.5 built from source lacks "pager" support -a -1 End of tests === added file 'mysql-test/r/mysql_not_windows.result' --- a/mysql-test/r/mysql_not_windows.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysql_not_windows.result 2010-08-25 08:17:15 +0000 @@ -0,0 +1,5 @@ +Bug #54466 client 5.5 built from source lacks "pager" support +a +1 + +End of tests === modified file 'mysql-test/r/null_key.result' --- a/mysql-test/r/null_key.result 2008-03-11 12:47:16 +0000 +++ b/mysql-test/r/null_key.result 2010-08-25 19:00:38 +0000 @@ -424,6 +424,7 @@ SHOW STATUS LIKE "handler_read%"; Variable_name Value Handler_read_first 0 Handler_read_key 6 +Handler_read_last 0 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/partition.result' --- a/mysql-test/r/partition.result 2010-05-28 05:47:58 +0000 +++ b/mysql-test/r/partition.result 2010-08-25 19:00:38 +0000 @@ -359,6 +359,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -377,6 +378,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -407,6 +409,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 @@ -423,6 +426,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 @@ -439,6 +443,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 @@ -455,6 +460,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/select.result' --- a/mysql-test/r/select.result 2010-07-15 13:47:50 +0000 +++ b/mysql-test/r/select.result 2010-08-25 19:00:38 +0000 @@ -4338,6 +4338,7 @@ SHOW STATUS LIKE 'Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/single_delete_update.result' --- a/mysql-test/r/single_delete_update.result 2010-06-22 20:32:29 +0000 +++ b/mysql-test/r/single_delete_update.result 2010-08-25 19:00:38 +0000 @@ -25,6 +25,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -41,6 +42,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -74,6 +76,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -90,6 +93,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 5 @@ -120,6 +124,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -136,6 +141,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -170,6 +176,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -186,6 +193,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -214,6 +222,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -230,6 +239,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -256,6 +266,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -272,6 +283,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -301,6 +313,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 7 Handler_read_prev 0 Handler_read_rnd 4 @@ -322,6 +335,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 7 Handler_read_prev 0 Handler_read_rnd 8 @@ -357,6 +371,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 0 @@ -373,6 +388,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 0 @@ -406,6 +422,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -422,6 +439,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 5 @@ -464,6 +482,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -486,6 +505,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 1 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 0 @@ -502,6 +522,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 1 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 0 @@ -536,6 +557,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -552,6 +574,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 5 @@ -590,6 +613,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -606,6 +630,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 5 @@ -641,6 +666,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -657,6 +683,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -691,6 +718,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -707,6 +735,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 5 @@ -735,6 +764,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -751,6 +781,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -778,6 +809,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -794,6 +826,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -824,6 +857,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 7 Handler_read_prev 0 Handler_read_rnd 4 @@ -845,6 +879,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 7 Handler_read_prev 0 Handler_read_rnd 8 @@ -884,6 +919,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 0 @@ -900,6 +936,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 5 @@ -938,6 +975,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -954,6 +992,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 5 @@ -990,6 +1029,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 4 Handler_read_prev 0 Handler_read_rnd 0 @@ -1012,6 +1052,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 1 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 0 @@ -1028,6 +1069,7 @@ SHOW STATUS LIKE 'Handler_read_%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 1 Handler_read_next 0 Handler_read_prev 4 Handler_read_rnd 5 === modified file 'mysql-test/r/subselect3.result' --- a/mysql-test/r/subselect3.result 2010-03-24 15:03:44 +0000 +++ b/mysql-test/r/subselect3.result 2010-08-25 19:00:38 +0000 @@ -113,6 +113,7 @@ show status like '%Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/r/update.result' --- a/mysql-test/r/update.result 2010-07-19 09:21:24 +0000 +++ b/mysql-test/r/update.result 2010-08-25 19:00:38 +0000 @@ -273,6 +273,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -284,6 +285,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 2 @@ -294,6 +296,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 1 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -304,6 +307,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 1 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -315,6 +319,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 0 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 1 @@ -368,6 +373,7 @@ show status like 'handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 1 Handler_read_prev 0 Handler_read_rnd 1 @@ -405,6 +411,7 @@ show status like '%Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 1 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -415,6 +422,7 @@ show status like '%Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 2 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -424,6 +432,7 @@ show status like '%Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 3 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 @@ -433,6 +442,7 @@ show status like '%Handler_read%'; Variable_name Value Handler_read_first 0 Handler_read_key 3 +Handler_read_last 0 Handler_read_next 0 Handler_read_prev 0 Handler_read_rnd 0 === modified file 'mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result 2010-08-25 14:13:20 +0000 @@ -193,4 +193,4 @@ mysqld-bin.000001 # Table_map 2 # table_ mysqld-bin.000001 # Write_rows 2 # table_id: # mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 2 # COMMIT -mysqld-bin.000001 # Query 2 # use `test`; drop table t2 +mysqld-bin.000001 # Query 2 # use `test`; DROP TABLE `t2` /* generated by server */ === modified file 'mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result 2010-08-25 14:13:20 +0000 @@ -7,5 +7,5 @@ create table t1 (a int primary key, b in insert into t1 values (1, 1); show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -mysqld-bin.000001 # Query 1 # use `test`; drop table if exists t1 +mysqld-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */ drop database mysqltest; === modified file 'mysql-test/suite/ndb/r/ndb_binlog_log_bin.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_log_bin.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_log_bin.result 2010-08-25 14:13:20 +0000 @@ -47,8 +47,8 @@ mysqld-bin.000001 # Table_map 1 # table_ mysqld-bin.000001 # Write_rows 1 # table_id: # mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 1 # COMMIT -mysqld-bin.000001 # Query 1 # use `mysqltest`; drop table t1 -mysqld-bin.000001 # Query 1 # use `mysqltest`; drop table t2 +mysqld-bin.000001 # Query 1 # use `mysqltest`; DROP TABLE `t1` /* generated by server */ +mysqld-bin.000001 # Query 1 # use `mysqltest`; DROP TABLE `t2` /* generated by server */ mysqld-bin.000001 # Query 1 # use `mysqltest`; create table t1 (d int key, e int) engine=ndb mysqld-bin.000001 # Query 1 # use `mysqltest`; create table t2 (d int key, e int) engine=ndb mysqld-bin.000001 # Query 1 # BEGIN === modified file 'mysql-test/suite/ndb/r/ndb_binlog_multi.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_multi.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_multi.result 2010-08-25 14:13:20 +0000 @@ -37,7 +37,7 @@ mysqld-bin.000001 # Table_map 1 # table_ mysqld-bin.000001 # Write_rows 1 # table_id: # mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 1 # COMMIT -mysqld-bin.000001 # Query 1 # use `test`; DROP TABLE t2 +mysqld-bin.000001 # Query 1 # use `test`; DROP TABLE `t2` /* generated by server */ SELECT inserts,updates,deletes,schemaops FROM mysql.ndb_binlog_index WHERE epoch=; inserts updates deletes schemaops @@ -73,7 +73,7 @@ mysqld-bin.000001 # Table_map 2 # table_ mysqld-bin.000001 # Write_rows 2 # table_id: # mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 2 # COMMIT -mysqld-bin.000001 # Query 2 # use `test`; drop table t1 +mysqld-bin.000001 # Query 2 # use `test`; DROP TABLE `t1` /* generated by server */ SELECT inserts,updates,deletes,schemaops FROM mysql.ndb_binlog_index WHERE epoch > AND epoch <= ; inserts updates deletes schemaops === added file 'mysql-test/suite/perfschema/r/bad_option_3.result' --- a/mysql-test/suite/perfschema/r/bad_option_3.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/bad_option_3.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,2 @@ +Found: unknown option '-x' +Found: Aborting === added file 'mysql-test/suite/perfschema/r/bad_option_4.result' --- a/mysql-test/suite/perfschema/r/bad_option_4.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/bad_option_4.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,2 @@ +Found: Can't change dir to.*bad_option_h_param +Found: Aborting === added file 'mysql-test/suite/perfschema/r/bad_option_5.result' --- a/mysql-test/suite/perfschema/r/bad_option_5.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/bad_option_5.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,2 @@ +Found: unknown option '-X' +Found: Aborting === added file 'mysql-test/suite/perfschema/r/short_option_1.result' --- a/mysql-test/suite/perfschema/r/short_option_1.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/short_option_1.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,27 @@ +select 'Ok, the server started' as result; +result +Ok, the server started +select @@SQL_MODE; +@@SQL_MODE +REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI +show variables like 'sql_mode'; +Variable_name Value +sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI +select @@character_set_server; +@@character_set_server +utf8 +show variables like 'character_set_system'; +Variable_name Value +character_set_system utf8 +show variables like 'log'; +Variable_name Value +log ON +show variables like 'general_log'; +Variable_name Value +general_log ON +show variables like 'new'; +Variable_name Value +new ON +show variables like 'log_warnings'; +Variable_name Value +log_warnings 3 === added file 'mysql-test/suite/perfschema/r/short_option_2.result' --- a/mysql-test/suite/perfschema/r/short_option_2.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/short_option_2.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,9 @@ +select 'Ok, the server started' as result; +result +Ok, the server started +select @@SQL_MODE; +@@SQL_MODE +REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI +select @@log_warnings; +@@log_warnings +5 === added file 'mysql-test/suite/perfschema/t/bad_option_3.test' --- a/mysql-test/suite/perfschema/t/bad_option_3.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/bad_option_3.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,49 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check error handling for invalid server start options + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_3.txt; +--error 0,1 +--remove_file $outfile +--error 2 +--exec $MYSQLD_BOOTSTRAP_CMD --loose-console -a -x > $outfile 2>&1 + +perl; + use strict; + use warnings; + my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_3.txt"; + open(FILE, "<", $fname) or die; + my @lines= ; + # those must be in the file for the test to pass + my @patterns= + ("unknown option '-x'", + "Aborting"); + foreach my $one_line (@lines) + { + foreach my $one_pattern (@patterns) + { + # print pattern, not line, to get a stable output + print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/); + } + } + close FILE; +EOF +--remove_file $outfile + === added file 'mysql-test/suite/perfschema/t/bad_option_4.test' --- a/mysql-test/suite/perfschema/t/bad_option_4.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/bad_option_4.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,49 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check error handling for invalid server start options + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_4.txt; +--error 0,1 +--remove_file $outfile +--error 1 +--exec $MYSQLD_BOOTSTRAP_CMD --loose-console -a -h bad_option_h_param > $outfile 2>&1 + +perl; + use strict; + use warnings; + my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_4.txt"; + open(FILE, "<", $fname) or die; + my @lines= ; + # those must be in the file for the test to pass + my @patterns= + ("Can't change dir to.*bad_option_h_param", + "Aborting"); + foreach my $one_line (@lines) + { + foreach my $one_pattern (@patterns) + { + # print pattern, not line, to get a stable output + print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/); + } + } + close FILE; +EOF +--remove_file $outfile + === added file 'mysql-test/suite/perfschema/t/bad_option_5.test' --- a/mysql-test/suite/perfschema/t/bad_option_5.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/bad_option_5.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,52 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check error handling for invalid server start options + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_5.txt; +--error 0,1 +--remove_file $outfile +--error 2 +--exec $MYSQLD_BOOTSTRAP_CMD --loose-console -aXbroken > $outfile 2>&1 + +# -aXbroken should be parsed as -a -Xbroken, or --ansi -Xbroken, +# therefore the -X option is what the server should complain about + +perl; + use strict; + use warnings; + my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_5.txt"; + open(FILE, "<", $fname) or die; + my @lines= ; + # those must be in the file for the test to pass + my @patterns= + ("unknown option '-X'", + "Aborting"); + foreach my $one_line (@lines) + { + foreach my $one_pattern (@patterns) + { + # print pattern, not line, to get a stable output + print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/); + } + } + close FILE; +EOF +--remove_file $outfile + === added file 'mysql-test/suite/perfschema/t/short_option_1-master.opt' --- a/mysql-test/suite/perfschema/t/short_option_1-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_1-master.opt 2010-08-26 00:59:28 +0000 @@ -0,0 +1 @@ +-a -n -Cutf8 --collation=utf8_bin -l -T12 -W3 === added file 'mysql-test/suite/perfschema/t/short_option_1.test' --- a/mysql-test/suite/perfschema/t/short_option_1.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_1.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,35 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check server start for short server start options + +select 'Ok, the server started' as result; + +# See the associated -master.opt file. + +select @@SQL_MODE; +show variables like 'sql_mode'; + +select @@character_set_server; +show variables like 'character_set_system'; + +show variables like 'log'; +show variables like 'general_log'; + +show variables like 'new'; + +show variables like 'log_warnings'; + === added file 'mysql-test/suite/perfschema/t/short_option_2-master.opt' --- a/mysql-test/suite/perfschema/t/short_option_2-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_2-master.opt 2010-08-26 00:59:28 +0000 @@ -0,0 +1 @@ +-aW5 === added file 'mysql-test/suite/perfschema/t/short_option_2.test' --- a/mysql-test/suite/perfschema/t/short_option_2.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_2.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,29 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check server start for short server start options + +select 'Ok, the server started' as result; + +# See the associated -master.opt file. +# -aW5 should be parsed as -a -W5, which are two separate short options +# stuffed inside a single argv[i] argument. + +# Should contain ANSI, since we started the server with -a (stands for --ansi) +select @@SQL_MODE; + +# Should be 5, since we started the server with -W5 +select @@log_warnings; === modified file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result' --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result 2010-05-26 14:34:25 +0000 +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result 2010-08-25 14:13:20 +0000 @@ -25,7 +25,7 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; drop table t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) @@ -204,7 +204,7 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; drop table t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) @@ -240,7 +240,7 @@ slave-bin.000001 # Table_map # # table_i slave-bin.000001 # Write_rows # # table_id: # slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F slave-bin.000001 # Query # # COMMIT -slave-bin.000001 # Query # # use `test`; drop table t1 +slave-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ slave-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB slave-bin.000001 # Query # # BEGIN slave-bin.000001 # Table_map # # table_id: # (test.t1) === modified file 'mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result' --- a/mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result 2010-05-26 14:34:25 +0000 +++ b/mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result 2010-08-25 14:13:20 +0000 @@ -37,7 +37,7 @@ master-bin.000001 # Write_rows # # table master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 -master-bin.000001 # Query # # use `test`; DROP TABLE t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ **** On Master **** CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB; INSERT INTO t1 VALUES (1,1), (2,2); @@ -72,7 +72,7 @@ master-bin.000001 # Write_rows # # table master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 -master-bin.000001 # Query # # use `test`; DROP TABLE t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) @@ -86,4 +86,4 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; DROP TABLE t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ === modified file 'mysql-test/t/ctype_utf32.test' --- a/mysql-test/t/ctype_utf32.test 2010-08-20 11:14:11 +0000 +++ b/mysql-test/t/ctype_utf32.test 2010-08-26 12:36:33 +0000 @@ -819,5 +819,16 @@ SELECT * FROM t1; DROP TABLE t1; --echo # +--echo # Bug#42511 mysqld: ctype-ucs2.c:2044: my_strnncollsp_utf32: Assertion (tlen % 4) == 0' faied +--echo # +CREATE TABLE t1 ( + b char(250) CHARACTER SET utf32, + key (b) +) ENGINE=MYISAM; +INSERT INTO t1 VALUES ('d'),('f'); +SELECT * FROM t1 WHERE b BETWEEN 'a' AND 'z'; +DROP TABLE t1; + +--echo # --echo # End of 5.5 tests --echo # === added file 'mysql-test/t/handler_read_last.test' --- a/mysql-test/t/handler_read_last.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/handler_read_last.test 2010-08-25 19:00:38 +0000 @@ -0,0 +1,40 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (a INT, INDEX (a)); +INSERT INTO t1 VALUES (),(),(),(),(),(),(),(),(),(); + +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a LIMIT 1; +SHOW STATUS LIKE 'HANDLER_READ%'; + +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a DESC LIMIT 1; +SHOW STATUS LIKE 'HANDLER_READ%'; + +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a LIMIT 3; +SHOW STATUS LIKE 'HANDLER_READ%'; + +FLUSH STATUS; +SELECT a FROM t1 ORDER BY a DESC LIMIT 3; +SHOW STATUS LIKE 'HANDLER_READ%'; + +DROP TABLE t1; + === modified file 'mysql-test/t/mysql.test' --- a/mysql-test/t/mysql.test 2010-08-19 11:35:47 +0000 +++ b/mysql-test/t/mysql.test 2010-08-25 08:17:15 +0000 @@ -425,11 +425,5 @@ drop table t1; --echo --exec $MYSQL --skip-column-names --vertical test -e "select 1 as a" -# -# Bug #54466 client 5.5 built from source lacks "pager" support -# ---echo Bug #54466 client 5.5 built from source lacks "pager" support ---exec $MYSQL --pager test -e "select 1 as a" - --echo --echo End of tests === added file 'mysql-test/t/mysql_not_windows.test' --- a/mysql-test/t/mysql_not_windows.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysql_not_windows.test 2010-08-25 08:17:15 +0000 @@ -0,0 +1,15 @@ +-- source include/not_windows.inc +# This test should work in embedded server after we fix mysqltest +-- source include/not_embedded.inc +# +# Testing the MySQL command line client(mysql) +# + +# +# Bug #54466 client 5.5 built from source lacks "pager" support +# +--echo Bug #54466 client 5.5 built from source lacks "pager" support +--exec $MYSQL --pager test -e "select 1 as a" + +--echo +--echo End of tests === modified file 'mysys/my_getopt.c' --- a/mysys/my_getopt.c 2010-08-05 12:34:19 +0000 +++ b/mysys/my_getopt.c 2010-08-26 14:34:18 +0000 @@ -98,6 +98,49 @@ void my_getopt_register_get_addr(my_geto matches with one of the options in struct 'my_option'. Check that option was given an argument if it requires one Call the optional 'get_one_option()' function once for each option. + + Note that handle_options() can be invoked multiple times to + parse a command line in several steps. + In this case, use the global flag @c my_getopt_skip_unknown to indicate + that options unknown in the current step should be preserved in the + command line for later parsing in subsequent steps. + + For 'long' options (--a_long_option), @c my_getopt_skip_unknown is + fully supported. Command line parameters such as: + - "--a_long_option" + - "--a_long_option=value" + - "--a_long_option value" + will be preserved as is when the option is not known. + + For 'short' options (-S), support for @c my_getopt_skip_unknown + comes with some limitation, because several short options + can also be specified together in the same command line argument, + as in "-XYZ". + + The first use case supported is: all short options are declared. + handle_options() will be able to interpret "-XYZ" as one of: + - an unknown X option + - "-X -Y -Z", three short options with no arguments + - "-X -YZ", where Y is a short option with argument Z + - "-XYZ", where X is a short option with argument YZ + based on the full short options specifications. + + The second use case supported is: no short option is declared. + handle_options() will reject "-XYZ" as unknown, to be parsed later. + + The use case that is explicitly not supported is to provide + only a partial list of short options to handle_options(). + This function can not be expected to extract some option Y + in the middle of the string "-XYZ" in these conditions, + without knowing if X will be declared an option later. + + Note that this limitation only impacts parsing of several + short options from the same command line argument, + as in "mysqld -anW5". + When each short option is properly separated out in the command line + argument, for example in "mysqld -a -n -w5", the code would actually + work even with partial options specs given at each stage. + @param [in, out] argc command line options (count) @param [in, out] argv command line options (values) @param [in] longopts descriptor of all valid options @@ -464,14 +507,40 @@ int handle_options(int *argc, char ***ar } if (!opt_found) { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: unknown option '-%c'", - my_progname, *optend); - return EXIT_UNKNOWN_OPTION; + if (my_getopt_skip_unknown) + { + /* + We are currently parsing a single argv[] argument + of the form "-XYZ". + One or the argument found (say Y) is not an option. + Hack the string "-XYZ" to make a "-YZ" substring in it, + and push that to the output as an unrecognized parameter. + */ + DBUG_ASSERT(optend > *pos); + DBUG_ASSERT(optend >= cur_arg); + DBUG_ASSERT(optend <= *pos + strlen(*pos)); + DBUG_ASSERT(*optend); + optend--; + optend[0]= '-'; /* replace 'X' or '-' by '-' */ + (*argv)[argvpos++]= optend; + /* + Do not continue to parse at the current "-XYZ" argument, + skip to the next argv[] argument instead. + */ + optend= (char*) " "; + } + else + { + if (my_getopt_print_errors) + my_getopt_error_reporter(ERROR_LEVEL, + "%s: unknown option '-%c'", + my_progname, *optend); + return EXIT_UNKNOWN_OPTION; + } } } - (*argc)--; /* option handled (short), decrease argument count */ + if (opt_found) + (*argc)--; /* option handled (short), decrease argument count */ continue; } if ((error= setval(optp, value, argument, set_maximum_value))) @@ -479,7 +548,7 @@ int handle_options(int *argc, char ***ar if (get_one_option && get_one_option(optp->id, optp, argument)) return EXIT_UNSPECIFIED_ERROR; - (*argc)--; /* option handled (short or long), decrease argument count */ + (*argc)--; /* option handled (long), decrease argument count */ } else /* non-option found */ (*argv)[argvpos++]= cur_arg; === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2010-08-20 08:24:32 +0000 +++ b/sql/mysqld.cc 2010-08-25 19:00:38 +0000 @@ -6439,6 +6439,7 @@ SHOW_VAR status_vars[]= { {"Handler_prepare", (char*) offsetof(STATUS_VAR, ha_prepare_count), SHOW_LONG_STATUS}, {"Handler_read_first", (char*) offsetof(STATUS_VAR, ha_read_first_count), SHOW_LONG_STATUS}, {"Handler_read_key", (char*) offsetof(STATUS_VAR, ha_read_key_count), SHOW_LONG_STATUS}, + {"Handler_read_last", (char*) offsetof(STATUS_VAR, ha_read_last_count), SHOW_LONG_STATUS}, {"Handler_read_next", (char*) offsetof(STATUS_VAR, ha_read_next_count), SHOW_LONG_STATUS}, {"Handler_read_prev", (char*) offsetof(STATUS_VAR, ha_read_prev_count), SHOW_LONG_STATUS}, {"Handler_read_rnd", (char*) offsetof(STATUS_VAR, ha_read_rnd_count), SHOW_LONG_STATUS}, === modified file 'sql/set_var.cc' --- a/sql/set_var.cc 2010-07-27 10:25:53 +0000 +++ b/sql/set_var.cc 2010-08-26 00:59:28 +0000 @@ -153,6 +153,17 @@ sys_var::sys_var(sys_var_chain *chain, c guard(lock), offset(off), on_check(on_check_func), on_update(on_update_func), is_os_charset(FALSE) { + /* + There is a limitation in handle_options() related to short options: + - either all short options should be declared when parsing in multiple stages, + - or none should be declared. + Because a lot of short options are used in the normal parsing phase + for mysqld, we enforce here that no short option is present + in the first (PARSE_EARLY) stage. + See handle_options() for details. + */ + DBUG_ASSERT(parse_flag == PARSE_NORMAL || getopt_id <= 0 || getopt_id >= 255); + name.str= name_arg; name.length= strlen(name_arg); DBUG_ASSERT(name.length <= NAME_CHAR_LEN); === modified file 'storage/myisam/mi_key.c' --- a/storage/myisam/mi_key.c 2010-07-23 20:17:55 +0000 +++ b/storage/myisam/mi_key.c 2010-08-26 12:36:33 +0000 @@ -253,18 +253,17 @@ uint _mi_pack_key(register MI_INFO *info pos=old; if (keyseg->flag & HA_SPACE_PACK) { - uchar *end=pos+length; if (type == HA_KEYTYPE_NUM) { - while (pos < end && pos[0] == ' ') - pos++; + uchar *end= pos + length; + while (pos < end && pos[0] == ' ') + pos++; + length= (uint) (end - pos); } else if (type != HA_KEYTYPE_BINARY) { - while (end > pos && end[-1] == ' ') - end--; + length= cs->cset->lengthsp(cs, (char*) pos, length); } - length=(uint) (end-pos); FIX_LENGTH(cs, pos, length, char_length); store_key_length_inc(key,char_length); memcpy((uchar*) key,pos,(size_t) char_length); === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2010-08-19 22:24:07 +0000 +++ b/storage/perfschema/pfs.cc 2010-08-26 15:45:25 +0000 @@ -1625,18 +1625,26 @@ static void end_mutex_wait_v1(PSI_mutex_ if (flag_events_waits_history_long) insert_events_waits_history_long(wait); - if (rc == 0 && wait->m_timer_state == TIMER_STATE_TIMED) + if (rc == 0) { /* Thread safe: we are protected by the instrumented mutex */ - PFS_single_stat_chain *stat; PFS_mutex *mutex= pfs_locker->m_target.m_mutex; + PFS_single_stat_chain *stat= find_per_thread_mutex_class_wait_stat(wait->m_thread, mutex->m_class); mutex->m_owner= wait->m_thread; mutex->m_last_locked= wait->m_timer_end; - ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; - aggregate_single_stat_chain(&mutex->m_wait_stat, wait_time); - stat= find_per_thread_mutex_class_wait_stat(wait->m_thread, mutex->m_class); - aggregate_single_stat_chain(stat, wait_time); + /* If timed then aggregate stats, else increment the value counts only */ + if (wait->m_timer_state == TIMER_STATE_TIMED) + { + ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; + aggregate_single_stat_chain(&mutex->m_wait_stat, wait_time); + aggregate_single_stat_chain(stat, wait_time); + } + else + { + increment_single_stat_chain(&mutex->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1682,20 +1690,26 @@ static void end_rwlock_rdwait_v1(PSI_rwl The statistics generated are not safe, which is why they are just statistics, not facts. */ - PFS_single_stat_chain *stat; PFS_rwlock *rwlock= pfs_locker->m_target.m_rwlock; + PFS_single_stat_chain *stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); + if (rwlock->m_readers == 0) rwlock->m_last_read= wait->m_timer_end; rwlock->m_writer= NULL; rwlock->m_readers++; + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&rwlock->m_wait_stat, wait_time); - stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); aggregate_single_stat_chain(stat, wait_time); } + else + { + increment_single_stat_chain(&rwlock->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1735,21 +1749,26 @@ static void end_rwlock_wrwait_v1(PSI_rwl if (rc == 0) { /* Thread safe : we are protected by the instrumented rwlock */ - PFS_single_stat_chain *stat; PFS_rwlock *rwlock= pfs_locker->m_target.m_rwlock; + PFS_single_stat_chain *stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); rwlock->m_writer= wait->m_thread; rwlock->m_last_written= wait->m_timer_end; /* Reset the readers stats, they could be off */ rwlock->m_readers= 0; rwlock->m_last_read= 0; + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&rwlock->m_wait_stat, wait_time); - stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); aggregate_single_stat_chain(stat, wait_time); } + else + { + increment_single_stat_chain(&rwlock->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1803,16 +1822,21 @@ static void end_cond_wait_v1(PSI_cond_lo in condition B. This is accepted, the data will be slightly inaccurate. */ - PFS_single_stat_chain *stat; PFS_cond *cond= pfs_locker->m_target.m_cond; + PFS_single_stat_chain *stat= find_per_thread_cond_class_wait_stat(wait->m_thread, cond->m_class); + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&cond->m_wait_stat, wait_time); - stat= find_per_thread_cond_class_wait_stat(wait->m_thread, cond->m_class); aggregate_single_stat_chain(stat, wait_time); } + else + { + increment_single_stat_chain(&cond->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1855,12 +1879,18 @@ static void end_table_wait_v1(PSI_table_ if (flag_events_waits_history_long) insert_events_waits_history_long(wait); + PFS_table *table= pfs_locker->m_target.m_table; + + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { - PFS_table *table= pfs_locker->m_target.m_table; ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&table->m_wait_stat, wait_time); } + else + { + increment_single_stat_chain(&table->m_wait_stat); + } /* There is currently no per table and per thread aggregation. @@ -1962,14 +1992,21 @@ static void end_file_wait_v1(PSI_file_lo if (flag_events_waits_history_long) insert_events_waits_history_long(wait); - PFS_single_stat_chain *stat; PFS_file *file= pfs_locker->m_target.m_file; + PFS_single_stat_chain *stat= find_per_thread_file_class_wait_stat(wait->m_thread, file->m_class); - ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; - aggregate_single_stat_chain(&file->m_wait_stat, wait_time); - stat= find_per_thread_file_class_wait_stat(wait->m_thread, - file->m_class); - aggregate_single_stat_chain(stat, wait_time); + /* If timed then aggregate stats, else increment the value counts only */ + if (wait->m_timer_state == TIMER_STATE_TIMED) + { + ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; + aggregate_single_stat_chain(&file->m_wait_stat, wait_time); + aggregate_single_stat_chain(stat, wait_time); + } + else + { + increment_single_stat_chain(&file->m_wait_stat); + increment_single_stat_chain(stat); + } PFS_file_class *klass= file->m_class; === modified file 'storage/perfschema/pfs_stat.h' --- a/storage/perfschema/pfs_stat.h 2010-07-15 23:44:45 +0000 +++ b/storage/perfschema/pfs_stat.h 2010-08-26 15:45:25 +0000 @@ -83,6 +83,22 @@ inline void aggregate_single_stat_chain( while (stat); } +/** + Increment the value counts in a statistic chain. + Used for instruments that are 'ENABLED' but not 'TIMED'. + @param stat the aggregated statistic chain +*/ +inline void increment_single_stat_chain(PFS_single_stat_chain *stat) +{ + do + { + if (*stat->m_control_flag) + stat->m_count++; + stat= stat->m_parent; + } + while (stat); +} + /** Statistics for COND usage. */ struct PFS_cond_stat { --===============8906032279637691526== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-\ # 55576/ # testament_sha1: 3c697f3081bdb4912a0c6bc946a276d935058102 # timestamp: 2010-08-27 15:24:05 -0600 # base_revision_id: marc.alff@stripped\ # nci9ruqp4xq9yeno # # Begin bundle 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 --===============8906032279637691526==--