Commit 73570819 authored by Marc Alff's avatar Marc Alff

local merge

parents d2df3a8a c2c833e4
...@@ -264,7 +264,8 @@ test-full-qa: ...@@ -264,7 +264,8 @@ test-full-qa:
# Headers which need to be checked for abi/api compatibility. # 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.h \
$(top_srcdir)/include/mysql/psi/psi_abi_v1.h \ $(top_srcdir)/include/mysql/psi/psi_abi_v1.h \
$(top_srcdir)/include/mysql/psi/psi_abi_v2.h $(top_srcdir)/include/mysql/psi/psi_abi_v2.h
......
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
# #
# Headers which need to be checked for abi/api compatibility are in # 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 # We use gcc specific preprocessing command and sed/diff, so it will
# only be run on Unix and only if gcc is used. # only be run on Unix and only if gcc is used.
...@@ -27,7 +28,8 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux") ...@@ -27,7 +28,8 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(COMPILER ${CMAKE_C_COMPILER}) SET(COMPILER ${CMAKE_C_COMPILER})
ENDIF() ENDIF()
SET(API_PREPROCESSOR_HEADER 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.h
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h ${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h ${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h
...@@ -38,18 +40,18 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux") ...@@ -38,18 +40,18 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux")
-DCOMPILER=${COMPILER} -DCOMPILER=${COMPILER}
-DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DBINARY_DIR=${CMAKE_BINARY_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 -P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake
VERBATIM VERBATIM
) )
ADD_CUSTOM_TARGET(abi_check_all ADD_CUSTOM_TARGET(abi_check_all
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
-DCMAKE_C_COMPILER=${COMPILER} -DCOMPILER=${COMPILER}
-DCMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR}
"-DMYSQL_ABI_CHECK -DABI_HEADERS=${API_PREPROCESSOR_HEADER}" "-DABI_HEADERS=${API_PREPROCESSOR_HEADER}"
-P ${CMAKE_SOURCE_DIR}/cmake/scripts/do_abi_check.cmake -P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake
VERBATIM VERBATIM
) )
ENDIF() ENDIF()
......
...@@ -56,8 +56,9 @@ FOREACH(file ${ABI_HEADERS}) ...@@ -56,8 +56,9 @@ FOREACH(file ${ABI_HEADERS})
SET(tmpfile ${file}.pp.tmp) SET(tmpfile ${file}.pp.tmp)
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${COMPILER} COMMAND ${COMPILER}
-E -nostdinc -dI -I${SOURCE_DIR}/include -I${BINARY_DIR}/include -E -nostdinc -dI -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include
-I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql ${file} -I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql
${file}
ERROR_QUIET OUTPUT_FILE ${tmpfile}) ERROR_QUIET OUTPUT_FILE ${tmpfile})
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND sed -e COMMAND sed -e
......
#include "plugin.h"
#include <mysql/services.h>
#include <mysql/service_my_snprintf.h>
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 <mysql/service_thd_alloc.h>
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];
};
#include "plugin.h"
#include <mysql/services.h> #include <mysql/services.h>
#include <mysql/service_my_snprintf.h> #include <mysql/service_my_snprintf.h>
extern struct my_snprintf_service_st { extern struct my_snprintf_service_st {
...@@ -74,7 +75,51 @@ struct st_mysql_plugin ...@@ -74,7 +75,51 @@ struct st_mysql_plugin
void * __reserved1; void * __reserved1;
}; };
#include "plugin_ftparser.h" #include "plugin_ftparser.h"
#include "plugin.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 enum enum_ftparser_mode
{ {
MYSQL_FTPARSER_SIMPLE_MODE= 0, MYSQL_FTPARSER_SIMPLE_MODE= 0,
...@@ -121,48 +166,3 @@ struct st_mysql_ftparser ...@@ -121,48 +166,3 @@ struct st_mysql_ftparser
int (*init)(MYSQL_FTPARSER_PARAM *param); int (*init)(MYSQL_FTPARSER_PARAM *param);
int (*deinit)(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);
...@@ -2155,9 +2155,8 @@ sub environment_setup { ...@@ -2155,9 +2155,8 @@ sub environment_setup {
# mysqlhotcopy # mysqlhotcopy
# ---------------------------------------------------- # ----------------------------------------------------
my $mysqlhotcopy= my $mysqlhotcopy=
mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy"); mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy") ||
# Since mysqltest interprets the real path as "false" in an if, mtr_pl_maybe_exists("$path_client_bindir/mysqlhotcopy");
# use 1 ("true") to indicate "not exists" so it can be tested for
if ($mysqlhotcopy) if ($mysqlhotcopy)
{ {
$ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy; $ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy;
......
...@@ -1542,6 +1542,7 @@ show status like 'handler_read%'; ...@@ -1542,6 +1542,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -1114,5 +1114,18 @@ format(123,2,'no_NO') ...@@ -1114,5 +1114,18 @@ format(123,2,'no_NO')
123,00 123,00
DROP TABLE t1; 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 # End of 5.5 tests
# #
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;
...@@ -694,6 +694,7 @@ show status like 'Handler_read%'; ...@@ -694,6 +694,7 @@ show status like 'Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -854,6 +854,7 @@ show status like 'Handler_read%'; ...@@ -854,6 +854,7 @@ show status like 'Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -1238,6 +1238,7 @@ show status like 'Handler_read%'; ...@@ -1238,6 +1238,7 @@ show status like 'Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 5 Handler_read_key 5
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -432,8 +432,5 @@ Bug #47147: mysql client option --skip-column-names does not apply to vertical o ...@@ -432,8 +432,5 @@ Bug #47147: mysql client option --skip-column-names does not apply to vertical o
*************************** 1. row *************************** *************************** 1. row ***************************
1 1
Bug #54466 client 5.5 built from source lacks "pager" support
a
1
End of tests End of tests
Bug #54466 client 5.5 built from source lacks "pager" support
a
1
End of tests
...@@ -424,6 +424,7 @@ SHOW STATUS LIKE "handler_read%"; ...@@ -424,6 +424,7 @@ SHOW STATUS LIKE "handler_read%";
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 6 Handler_read_key 6
Handler_read_last 0
Handler_read_next 2 Handler_read_next 2
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -359,6 +359,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -359,6 +359,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -377,6 +378,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -377,6 +378,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -407,6 +409,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -407,6 +409,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 2 Handler_read_next 2
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -423,6 +426,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -423,6 +426,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 2 Handler_read_next 2
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -439,6 +443,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -439,6 +443,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 2 Handler_read_next 2
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -455,6 +460,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -455,6 +460,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 2 Handler_read_next 2
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -4338,6 +4338,7 @@ SHOW STATUS LIKE 'Handler_read%'; ...@@ -4338,6 +4338,7 @@ SHOW STATUS LIKE 'Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -25,6 +25,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -25,6 +25,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -41,6 +42,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -41,6 +42,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -74,6 +76,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -74,6 +76,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -90,6 +93,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -90,6 +93,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -120,6 +124,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -120,6 +124,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -136,6 +141,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -136,6 +141,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -170,6 +176,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -170,6 +176,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -186,6 +193,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -186,6 +193,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -214,6 +222,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -214,6 +222,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -230,6 +239,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -230,6 +239,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -256,6 +266,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -256,6 +266,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -272,6 +283,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -272,6 +283,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -301,6 +313,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -301,6 +313,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 7 Handler_read_next 7
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 4 Handler_read_rnd 4
...@@ -322,6 +335,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -322,6 +335,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 7 Handler_read_next 7
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 8 Handler_read_rnd 8
...@@ -357,6 +371,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -357,6 +371,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -373,6 +388,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -373,6 +388,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -406,6 +422,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -406,6 +422,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -422,6 +439,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -422,6 +439,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -464,6 +482,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -464,6 +482,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -486,6 +505,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -486,6 +505,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 1
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -502,6 +522,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -502,6 +522,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 1
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -536,6 +557,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -536,6 +557,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -552,6 +574,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -552,6 +574,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -590,6 +613,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -590,6 +613,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -606,6 +630,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -606,6 +630,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -641,6 +666,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -641,6 +666,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -657,6 +683,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -657,6 +683,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -691,6 +718,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -691,6 +718,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -707,6 +735,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -707,6 +735,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -735,6 +764,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -735,6 +764,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -751,6 +781,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -751,6 +781,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -778,6 +809,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -778,6 +809,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -794,6 +826,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -794,6 +826,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -824,6 +857,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -824,6 +857,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 7 Handler_read_next 7
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 4 Handler_read_rnd 4
...@@ -845,6 +879,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -845,6 +879,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 7 Handler_read_next 7
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 8 Handler_read_rnd 8
...@@ -884,6 +919,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -884,6 +919,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -900,6 +936,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -900,6 +936,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -938,6 +975,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -938,6 +975,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -954,6 +992,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -954,6 +992,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 5 Handler_read_rnd 5
...@@ -990,6 +1029,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -990,6 +1029,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 4 Handler_read_next 4
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -1012,6 +1052,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -1012,6 +1052,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 1
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -1028,6 +1069,7 @@ SHOW STATUS LIKE 'Handler_read_%'; ...@@ -1028,6 +1069,7 @@ SHOW STATUS LIKE 'Handler_read_%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 1
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 4 Handler_read_prev 4
Handler_read_rnd 5 Handler_read_rnd 5
......
...@@ -113,6 +113,7 @@ show status like '%Handler_read%'; ...@@ -113,6 +113,7 @@ show status like '%Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -273,6 +273,7 @@ show status like 'handler_read%'; ...@@ -273,6 +273,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -284,6 +285,7 @@ show status like 'handler_read%'; ...@@ -284,6 +285,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 2 Handler_read_rnd 2
...@@ -294,6 +296,7 @@ show status like 'handler_read%'; ...@@ -294,6 +296,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 1 Handler_read_first 1
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -304,6 +307,7 @@ show status like 'handler_read%'; ...@@ -304,6 +307,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 1
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -315,6 +319,7 @@ show status like 'handler_read%'; ...@@ -315,6 +319,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 0 Handler_read_key 0
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -368,6 +373,7 @@ show status like 'handler_read%'; ...@@ -368,6 +373,7 @@ show status like 'handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 1 Handler_read_next 1
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 1 Handler_read_rnd 1
...@@ -405,6 +411,7 @@ show status like '%Handler_read%'; ...@@ -405,6 +411,7 @@ show status like '%Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 1 Handler_read_key 1
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -415,6 +422,7 @@ show status like '%Handler_read%'; ...@@ -415,6 +422,7 @@ show status like '%Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 2 Handler_read_key 2
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -424,6 +432,7 @@ show status like '%Handler_read%'; ...@@ -424,6 +432,7 @@ show status like '%Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 3 Handler_read_key 3
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
...@@ -433,6 +442,7 @@ show status like '%Handler_read%'; ...@@ -433,6 +442,7 @@ show status like '%Handler_read%';
Variable_name Value Variable_name Value
Handler_read_first 0 Handler_read_first 0
Handler_read_key 3 Handler_read_key 3
Handler_read_last 0
Handler_read_next 0 Handler_read_next 0
Handler_read_prev 0 Handler_read_prev 0
Handler_read_rnd 0 Handler_read_rnd 0
......
...@@ -193,4 +193,4 @@ mysqld-bin.000001 # Table_map 2 # table_id: # (mysql.ndb_apply_status) ...@@ -193,4 +193,4 @@ mysqld-bin.000001 # Table_map 2 # table_id: # (mysql.ndb_apply_status)
mysqld-bin.000001 # Write_rows 2 # table_id: # mysqld-bin.000001 # Write_rows 2 # table_id: #
mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F
mysqld-bin.000001 # Query 2 # COMMIT 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 */
...@@ -7,5 +7,5 @@ create table t1 (a int primary key, b int) engine=ndb; ...@@ -7,5 +7,5 @@ create table t1 (a int primary key, b int) engine=ndb;
insert into t1 values (1, 1); insert into t1 values (1, 1);
show binlog events from <binlog_start>; show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info 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; drop database mysqltest;
...@@ -47,8 +47,8 @@ mysqld-bin.000001 # Table_map 1 # table_id: # (mysql.ndb_apply_status) ...@@ -47,8 +47,8 @@ mysqld-bin.000001 # Table_map 1 # table_id: # (mysql.ndb_apply_status)
mysqld-bin.000001 # Write_rows 1 # table_id: # mysqld-bin.000001 # Write_rows 1 # table_id: #
mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
mysqld-bin.000001 # Query 1 # COMMIT 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 `t1` /* generated by server */
mysqld-bin.000001 # Query 1 # use `mysqltest`; drop table t2 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 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 # use `mysqltest`; create table t2 (d int key, e int) engine=ndb
mysqld-bin.000001 # Query 1 # BEGIN mysqld-bin.000001 # Query 1 # BEGIN
......
...@@ -37,7 +37,7 @@ mysqld-bin.000001 # Table_map 1 # table_id: # (mysql.ndb_apply_status) ...@@ -37,7 +37,7 @@ mysqld-bin.000001 # Table_map 1 # table_id: # (mysql.ndb_apply_status)
mysqld-bin.000001 # Write_rows 1 # table_id: # mysqld-bin.000001 # Write_rows 1 # table_id: #
mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
mysqld-bin.000001 # Query 1 # COMMIT 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 SELECT inserts,updates,deletes,schemaops FROM
mysql.ndb_binlog_index WHERE epoch=<the_epoch>; mysql.ndb_binlog_index WHERE epoch=<the_epoch>;
inserts updates deletes schemaops inserts updates deletes schemaops
...@@ -73,7 +73,7 @@ mysqld-bin.000001 # Table_map 2 # table_id: # (mysql.ndb_apply_status) ...@@ -73,7 +73,7 @@ mysqld-bin.000001 # Table_map 2 # table_id: # (mysql.ndb_apply_status)
mysqld-bin.000001 # Write_rows 2 # table_id: # mysqld-bin.000001 # Write_rows 2 # table_id: #
mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F
mysqld-bin.000001 # Query 2 # COMMIT 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 SELECT inserts,updates,deletes,schemaops FROM
mysql.ndb_binlog_index WHERE epoch > <the_epoch> AND epoch <= <the_epoch2>; mysql.ndb_binlog_index WHERE epoch > <the_epoch> AND epoch <= <the_epoch2>;
inserts updates deletes schemaops inserts updates deletes schemaops
......
Found: unknown option '-x'
Found: Aborting
Found: Can't change dir to.*bad_option_h_param
Found: Aborting
Found: unknown option '-X'
Found: Aborting
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
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
# 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= <FILE>;
# 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
# 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= <FILE>;
# 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
# 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= <FILE>;
# 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
-a -n -Cutf8 --collation=utf8_bin -l -T12 -W3
# 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';
# 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;
...@@ -25,7 +25,7 @@ master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status) ...@@ -25,7 +25,7 @@ master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: #
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 # # COMMIT 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 # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB
master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Table_map # # table_id: # (test.t1)
...@@ -204,7 +204,7 @@ master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status) ...@@ -204,7 +204,7 @@ master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: #
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 # # COMMIT 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 # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB
master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Table_map # # table_id: # (test.t1)
...@@ -240,7 +240,7 @@ slave-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status) ...@@ -240,7 +240,7 @@ slave-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
slave-bin.000001 # Write_rows # # table_id: # slave-bin.000001 # Write_rows # # table_id: #
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
slave-bin.000001 # Query # # COMMIT 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 # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB
slave-bin.000001 # Query # # BEGIN slave-bin.000001 # Query # # BEGIN
slave-bin.000001 # Table_map # # table_id: # (test.t1) slave-bin.000001 # Table_map # # table_id: # (test.t1)
......
...@@ -37,7 +37,7 @@ master-bin.000001 # Write_rows # # table_id: # ...@@ -37,7 +37,7 @@ master-bin.000001 # Write_rows # # table_id: #
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 # # COMMIT master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 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 **** **** On Master ****
CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB;
INSERT INTO t1 VALUES (1,1), (2,2); INSERT INTO t1 VALUES (1,1), (2,2);
...@@ -72,7 +72,7 @@ master-bin.000001 # Write_rows # # table_id: # ...@@ -72,7 +72,7 @@ master-bin.000001 # Write_rows # # table_id: #
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 # # COMMIT master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 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 # # use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Table_map # # table_id: # (test.t1)
...@@ -86,4 +86,4 @@ master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status) ...@@ -86,4 +86,4 @@ master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: #
master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT 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 */
...@@ -818,6 +818,17 @@ SHOW CREATE TABLE t1; ...@@ -818,6 +818,17 @@ SHOW CREATE TABLE t1;
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE 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 #
--echo # End of 5.5 tests --echo # End of 5.5 tests
--echo # --echo #
# 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;
...@@ -425,11 +425,5 @@ drop table t1; ...@@ -425,11 +425,5 @@ drop table t1;
--echo --echo
--exec $MYSQL --skip-column-names --vertical test -e "select 1 as a" --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
--echo End of tests --echo End of tests
-- 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
...@@ -98,6 +98,49 @@ void my_getopt_register_get_addr(my_getopt_value func_addr) ...@@ -98,6 +98,49 @@ void my_getopt_register_get_addr(my_getopt_value func_addr)
matches with one of the options in struct 'my_option'. matches with one of the options in struct 'my_option'.
Check that option was given an argument if it requires one Check that option was given an argument if it requires one
Call the optional 'get_one_option()' function once for each option. 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] argc command line options (count)
@param [in, out] argv command line options (values) @param [in, out] argv command line options (values)
@param [in] longopts descriptor of all valid options @param [in] longopts descriptor of all valid options
...@@ -464,14 +507,40 @@ int handle_options(int *argc, char ***argv, ...@@ -464,14 +507,40 @@ int handle_options(int *argc, char ***argv,
} }
if (!opt_found) if (!opt_found)
{ {
if (my_getopt_print_errors) if (my_getopt_skip_unknown)
my_getopt_error_reporter(ERROR_LEVEL, {
"%s: unknown option '-%c'", /*
my_progname, *optend); We are currently parsing a single argv[] argument
return EXIT_UNKNOWN_OPTION; 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; continue;
} }
if ((error= setval(optp, value, argument, set_maximum_value))) if ((error= setval(optp, value, argument, set_maximum_value)))
...@@ -479,7 +548,7 @@ int handle_options(int *argc, char ***argv, ...@@ -479,7 +548,7 @@ int handle_options(int *argc, char ***argv,
if (get_one_option && get_one_option(optp->id, optp, argument)) if (get_one_option && get_one_option(optp->id, optp, argument))
return EXIT_UNSPECIFIED_ERROR; return EXIT_UNSPECIFIED_ERROR;
(*argc)--; /* option handled (short or long), decrease argument count */ (*argc)--; /* option handled (long), decrease argument count */
} }
else /* non-option found */ else /* non-option found */
(*argv)[argvpos++]= cur_arg; (*argv)[argvpos++]= cur_arg;
......
...@@ -6439,6 +6439,7 @@ SHOW_VAR status_vars[]= { ...@@ -6439,6 +6439,7 @@ SHOW_VAR status_vars[]= {
{"Handler_prepare", (char*) offsetof(STATUS_VAR, ha_prepare_count), SHOW_LONG_STATUS}, {"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_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_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_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_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}, {"Handler_read_rnd", (char*) offsetof(STATUS_VAR, ha_read_rnd_count), SHOW_LONG_STATUS},
......
...@@ -153,6 +153,17 @@ sys_var::sys_var(sys_var_chain *chain, const char *name_arg, ...@@ -153,6 +153,17 @@ sys_var::sys_var(sys_var_chain *chain, const char *name_arg,
guard(lock), offset(off), on_check(on_check_func), on_update(on_update_func), guard(lock), offset(off), on_check(on_check_func), on_update(on_update_func),
is_os_charset(FALSE) 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.str= name_arg;
name.length= strlen(name_arg); name.length= strlen(name_arg);
DBUG_ASSERT(name.length <= NAME_CHAR_LEN); DBUG_ASSERT(name.length <= NAME_CHAR_LEN);
......
...@@ -253,18 +253,17 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, ...@@ -253,18 +253,17 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
pos=old; pos=old;
if (keyseg->flag & HA_SPACE_PACK) if (keyseg->flag & HA_SPACE_PACK)
{ {
uchar *end=pos+length;
if (type == HA_KEYTYPE_NUM) if (type == HA_KEYTYPE_NUM)
{ {
while (pos < end && pos[0] == ' ') uchar *end= pos + length;
pos++; while (pos < end && pos[0] == ' ')
pos++;
length= (uint) (end - pos);
} }
else if (type != HA_KEYTYPE_BINARY) else if (type != HA_KEYTYPE_BINARY)
{ {
while (end > pos && end[-1] == ' ') length= cs->cset->lengthsp(cs, (char*) pos, length);
end--;
} }
length=(uint) (end-pos);
FIX_LENGTH(cs, pos, length, char_length); FIX_LENGTH(cs, pos, length, char_length);
store_key_length_inc(key,char_length); store_key_length_inc(key,char_length);
memcpy((uchar*) key,pos,(size_t) char_length); memcpy((uchar*) key,pos,(size_t) char_length);
......
...@@ -1625,18 +1625,26 @@ static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc) ...@@ -1625,18 +1625,26 @@ static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc)
if (flag_events_waits_history_long) if (flag_events_waits_history_long)
insert_events_waits_history_long(wait); 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 */ /* Thread safe: we are protected by the instrumented mutex */
PFS_single_stat_chain *stat;
PFS_mutex *mutex= pfs_locker->m_target.m_mutex; 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_owner= wait->m_thread;
mutex->m_last_locked= wait->m_timer_end; mutex->m_last_locked= wait->m_timer_end;
ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; /* If timed then aggregate stats, else increment the value counts only */
aggregate_single_stat_chain(&mutex->m_wait_stat, wait_time); if (wait->m_timer_state == TIMER_STATE_TIMED)
stat= find_per_thread_mutex_class_wait_stat(wait->m_thread, mutex->m_class); {
aggregate_single_stat_chain(stat, wait_time); 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--; wait->m_thread->m_wait_locker_count--;
} }
...@@ -1682,20 +1690,26 @@ static void end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc) ...@@ -1682,20 +1690,26 @@ static void end_rwlock_rdwait_v1(PSI_rwlock_locker* locker, int rc)
The statistics generated are not safe, which is why they are The statistics generated are not safe, which is why they are
just statistics, not facts. just statistics, not facts.
*/ */
PFS_single_stat_chain *stat;
PFS_rwlock *rwlock= pfs_locker->m_target.m_rwlock; 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) if (rwlock->m_readers == 0)
rwlock->m_last_read= wait->m_timer_end; rwlock->m_last_read= wait->m_timer_end;
rwlock->m_writer= NULL; rwlock->m_writer= NULL;
rwlock->m_readers++; rwlock->m_readers++;
/* If timed then aggregate stats, else increment the value counts only */
if (wait->m_timer_state == TIMER_STATE_TIMED) if (wait->m_timer_state == TIMER_STATE_TIMED)
{ {
ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; ulonglong wait_time= wait->m_timer_end - wait->m_timer_start;
aggregate_single_stat_chain(&rwlock->m_wait_stat, wait_time); 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); 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--; wait->m_thread->m_wait_locker_count--;
} }
...@@ -1735,21 +1749,26 @@ static void end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc) ...@@ -1735,21 +1749,26 @@ static void end_rwlock_wrwait_v1(PSI_rwlock_locker* locker, int rc)
if (rc == 0) if (rc == 0)
{ {
/* Thread safe : we are protected by the instrumented rwlock */ /* Thread safe : we are protected by the instrumented rwlock */
PFS_single_stat_chain *stat;
PFS_rwlock *rwlock= pfs_locker->m_target.m_rwlock; 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_writer= wait->m_thread;
rwlock->m_last_written= wait->m_timer_end; rwlock->m_last_written= wait->m_timer_end;
/* Reset the readers stats, they could be off */ /* Reset the readers stats, they could be off */
rwlock->m_readers= 0; rwlock->m_readers= 0;
rwlock->m_last_read= 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) if (wait->m_timer_state == TIMER_STATE_TIMED)
{ {
ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; ulonglong wait_time= wait->m_timer_end - wait->m_timer_start;
aggregate_single_stat_chain(&rwlock->m_wait_stat, wait_time); 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); 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--; wait->m_thread->m_wait_locker_count--;
} }
...@@ -1803,16 +1822,21 @@ static void end_cond_wait_v1(PSI_cond_locker* locker, int rc) ...@@ -1803,16 +1822,21 @@ static void end_cond_wait_v1(PSI_cond_locker* locker, int rc)
in condition B. in condition B.
This is accepted, the data will be slightly inaccurate. This is accepted, the data will be slightly inaccurate.
*/ */
PFS_single_stat_chain *stat;
PFS_cond *cond= pfs_locker->m_target.m_cond; 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) if (wait->m_timer_state == TIMER_STATE_TIMED)
{ {
ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; ulonglong wait_time= wait->m_timer_end - wait->m_timer_start;
aggregate_single_stat_chain(&cond->m_wait_stat, wait_time); 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); 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--; wait->m_thread->m_wait_locker_count--;
} }
...@@ -1855,12 +1879,18 @@ static void end_table_wait_v1(PSI_table_locker* locker) ...@@ -1855,12 +1879,18 @@ static void end_table_wait_v1(PSI_table_locker* locker)
if (flag_events_waits_history_long) if (flag_events_waits_history_long)
insert_events_waits_history_long(wait); 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) 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; ulonglong wait_time= wait->m_timer_end - wait->m_timer_start;
aggregate_single_stat_chain(&table->m_wait_stat, wait_time); 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. There is currently no per table and per thread aggregation.
...@@ -1962,14 +1992,21 @@ static void end_file_wait_v1(PSI_file_locker *locker, ...@@ -1962,14 +1992,21 @@ static void end_file_wait_v1(PSI_file_locker *locker,
if (flag_events_waits_history_long) if (flag_events_waits_history_long)
insert_events_waits_history_long(wait); insert_events_waits_history_long(wait);
PFS_single_stat_chain *stat;
PFS_file *file= pfs_locker->m_target.m_file; 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; /* If timed then aggregate stats, else increment the value counts only */
aggregate_single_stat_chain(&file->m_wait_stat, wait_time); if (wait->m_timer_state == TIMER_STATE_TIMED)
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(stat, wait_time); 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; PFS_file_class *klass= file->m_class;
......
...@@ -83,6 +83,22 @@ inline void aggregate_single_stat_chain(PFS_single_stat_chain *stat, ...@@ -83,6 +83,22 @@ inline void aggregate_single_stat_chain(PFS_single_stat_chain *stat,
while (stat); 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. */ /** Statistics for COND usage. */
struct PFS_cond_stat struct PFS_cond_stat
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment