mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge bk-internal:/home/bk/mysql-5.0-build
into pilot.mysql.com:/data/msvensson/mysql/mysql-5.0-build
This commit is contained in:
@ -27,6 +27,8 @@ EXTRA_DIST = FINISH.sh \
|
|||||||
compile-alpha-cxx \
|
compile-alpha-cxx \
|
||||||
compile-alpha-debug \
|
compile-alpha-debug \
|
||||||
compile-amd64-debug-max \
|
compile-amd64-debug-max \
|
||||||
|
compile-amd64-gcov \
|
||||||
|
compile-amd64-gprof \
|
||||||
compile-amd64-max \
|
compile-amd64-max \
|
||||||
compile-amd64-max-sci \
|
compile-amd64-max-sci \
|
||||||
compile-darwin-mwcc \
|
compile-darwin-mwcc \
|
||||||
@ -54,6 +56,8 @@ EXTRA_DIST = FINISH.sh \
|
|||||||
compile-pentium-valgrind-max \
|
compile-pentium-valgrind-max \
|
||||||
compile-pentium64-debug \
|
compile-pentium64-debug \
|
||||||
compile-pentium64-debug-max \
|
compile-pentium64-debug-max \
|
||||||
|
compile-pentium64-gcov \
|
||||||
|
compile-pentium64-gprof \
|
||||||
compile-pentium64-max-sci \
|
compile-pentium64-max-sci \
|
||||||
compile-pentium64-valgrind-max \
|
compile-pentium64-valgrind-max \
|
||||||
compile-ppc \
|
compile-ppc \
|
||||||
@ -61,6 +65,10 @@ EXTRA_DIST = FINISH.sh \
|
|||||||
compile-ppc-debug-max \
|
compile-ppc-debug-max \
|
||||||
compile-ppc-debug-max-no-ndb \
|
compile-ppc-debug-max-no-ndb \
|
||||||
compile-ppc-max \
|
compile-ppc-max \
|
||||||
|
compile-solaris-amd64 \
|
||||||
|
compile-solaris-amd64-debug \
|
||||||
|
compile-solaris-amd64-forte \
|
||||||
|
compile-solaris-amd64-forte-debug \
|
||||||
compile-solaris-sparc \
|
compile-solaris-sparc \
|
||||||
compile-solaris-sparc-debug \
|
compile-solaris-sparc-debug \
|
||||||
compile-solaris-sparc-forte \
|
compile-solaris-sparc-forte \
|
||||||
|
@ -78,6 +78,10 @@ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF
|
|||||||
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF")
|
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF")
|
||||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")
|
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")
|
||||||
|
|
||||||
|
#TODO: update the code and remove the disabled warnings
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805")
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805")
|
||||||
|
|
||||||
IF(CMAKE_GENERATOR MATCHES "Visual Studio 8")
|
IF(CMAKE_GENERATOR MATCHES "Visual Studio 8")
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
|
||||||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
|
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
|
||||||
|
@ -1125,6 +1125,7 @@ int main(int argc,char *argv[])
|
|||||||
}
|
}
|
||||||
if (mysql_server_init(emb_argc, emb_argv, (char**) server_default_groups))
|
if (mysql_server_init(emb_argc, emb_argv, (char**) server_default_groups))
|
||||||
{
|
{
|
||||||
|
put_error(NULL);
|
||||||
free_defaults(defaults_argv);
|
free_defaults(defaults_argv);
|
||||||
my_end(0);
|
my_end(0);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -1215,21 +1216,35 @@ sig_handler mysql_sigint(int sig)
|
|||||||
char kill_buffer[40];
|
char kill_buffer[40];
|
||||||
MYSQL *kill_mysql= NULL;
|
MYSQL *kill_mysql= NULL;
|
||||||
|
|
||||||
signal(SIGINT, mysql_sigint);
|
|
||||||
|
|
||||||
/* terminate if no query being executed, or we already tried interrupting */
|
/* terminate if no query being executed, or we already tried interrupting */
|
||||||
if (!executing_query || interrupted_query++)
|
if (!executing_query || interrupted_query++)
|
||||||
mysql_end(sig);
|
goto err;
|
||||||
|
|
||||||
kill_mysql= mysql_init(kill_mysql);
|
kill_mysql= mysql_init(kill_mysql);
|
||||||
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
|
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
|
||||||
"", opt_mysql_port, opt_mysql_unix_port,0))
|
"", opt_mysql_port, opt_mysql_unix_port,0))
|
||||||
mysql_end(sig);
|
goto err;
|
||||||
/* kill_buffer is always big enough because max length of %lu is 15 */
|
/* kill_buffer is always big enough because max length of %lu is 15 */
|
||||||
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
|
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
|
||||||
mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
|
mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
|
||||||
mysql_close(kill_mysql);
|
mysql_close(kill_mysql);
|
||||||
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
|
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
err:
|
||||||
|
#ifdef _WIN32
|
||||||
|
/*
|
||||||
|
When SIGINT is raised on Windows, the OS creates a new thread to handle the
|
||||||
|
interrupt. Once that thread completes, the main thread continues running
|
||||||
|
only to find that it's resources have already been free'd when the sigint
|
||||||
|
handler called mysql_end().
|
||||||
|
*/
|
||||||
|
mysql_thread_end();
|
||||||
|
return;
|
||||||
|
#else
|
||||||
|
mysql_end(sig);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
sig_handler mysql_end(int sig)
|
sig_handler mysql_end(int sig)
|
||||||
@ -1270,7 +1285,7 @@ sig_handler mysql_end(int sig)
|
|||||||
my_free(current_prompt,MYF(MY_ALLOW_ZERO_PTR));
|
my_free(current_prompt,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
mysql_server_end();
|
mysql_server_end();
|
||||||
free_defaults(defaults_argv);
|
free_defaults(defaults_argv);
|
||||||
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
|
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : MY_CHECK_ERROR);
|
||||||
exit(status.exit_status);
|
exit(status.exit_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1474,7 +1474,7 @@ int main(int argc, char** argv)
|
|||||||
DBUG_ENTER("main");
|
DBUG_ENTER("main");
|
||||||
DBUG_PROCESS(argv[0]);
|
DBUG_PROCESS(argv[0]);
|
||||||
|
|
||||||
init_time(); // for time functions
|
my_init_time(); // for time functions
|
||||||
|
|
||||||
parse_args(&argc, (char***)&argv);
|
parse_args(&argc, (char***)&argv);
|
||||||
defaults_argv=argv;
|
defaults_argv=argv;
|
||||||
|
@ -109,6 +109,8 @@ static char *opt_password=0,*current_user=0,
|
|||||||
*log_error_file= NULL;
|
*log_error_file= NULL;
|
||||||
static char **defaults_argv= 0;
|
static char **defaults_argv= 0;
|
||||||
static char compatible_mode_normal_str[255];
|
static char compatible_mode_normal_str[255];
|
||||||
|
/* Server supports character_set_results session variable? */
|
||||||
|
static my_bool server_supports_switching_charsets= TRUE;
|
||||||
static ulong opt_compatible_mode= 0;
|
static ulong opt_compatible_mode= 0;
|
||||||
#define MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL 1
|
#define MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL 1
|
||||||
#define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2
|
#define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2
|
||||||
@ -1011,11 +1013,27 @@ static int mysql_query_with_error_report(MYSQL *mysql_con, MYSQL_RES **res,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Switch charset for results to some specified charset. If the server does not
|
||||||
|
support character_set_results variable, nothing can be done here. As for
|
||||||
|
whether something should be done here, future new callers of this function
|
||||||
|
should be aware that the server lacking the facility of switching charsets is
|
||||||
|
treated as success.
|
||||||
|
|
||||||
|
@note If the server lacks support, then nothing is changed and no error
|
||||||
|
condition is returned.
|
||||||
|
|
||||||
|
@returns whether there was an error or not
|
||||||
|
*/
|
||||||
static int switch_character_set_results(MYSQL *mysql, const char *cs_name)
|
static int switch_character_set_results(MYSQL *mysql, const char *cs_name)
|
||||||
{
|
{
|
||||||
char query_buffer[QUERY_LENGTH];
|
char query_buffer[QUERY_LENGTH];
|
||||||
size_t query_length;
|
size_t query_length;
|
||||||
|
|
||||||
|
/* Server lacks facility. This is not an error, by arbitrary decision . */
|
||||||
|
if (!server_supports_switching_charsets)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
query_length= my_snprintf(query_buffer,
|
query_length= my_snprintf(query_buffer,
|
||||||
sizeof (query_buffer),
|
sizeof (query_buffer),
|
||||||
"SET SESSION character_set_results = '%s'",
|
"SET SESSION character_set_results = '%s'",
|
||||||
@ -1111,11 +1129,14 @@ static int connect_to_db(char *host, char *user,char *passwd)
|
|||||||
DB_error(&mysql_connection, "when trying to connect");
|
DB_error(&mysql_connection, "when trying to connect");
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
Don't dump SET NAMES with a pre-4.1 server (bug#7997).
|
|
||||||
*/
|
|
||||||
if (mysql_get_server_version(&mysql_connection) < 40100)
|
if (mysql_get_server_version(&mysql_connection) < 40100)
|
||||||
|
{
|
||||||
|
/* Don't dump SET NAMES with a pre-4.1 server (bug#7997). */
|
||||||
opt_set_charset= 0;
|
opt_set_charset= 0;
|
||||||
|
|
||||||
|
/* Don't switch charsets for 4.1 and earlier. (bug#34192). */
|
||||||
|
server_supports_switching_charsets= FALSE;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
As we're going to set SQL_MODE, it would be lost on reconnect, so we
|
As we're going to set SQL_MODE, it would be lost on reconnect, so we
|
||||||
cannot reconnect.
|
cannot reconnect.
|
||||||
@ -3285,6 +3306,7 @@ static int do_show_master_status(MYSQL *mysql_con)
|
|||||||
my_printf_error(0, "Error: Binlogging on server not active",
|
my_printf_error(0, "Error: Binlogging on server not active",
|
||||||
MYF(0));
|
MYF(0));
|
||||||
mysql_free_result(master);
|
mysql_free_result(master);
|
||||||
|
maybe_exit(EX_MYSQLERR);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
mysql_free_result(master);
|
mysql_free_result(master);
|
||||||
|
@ -550,6 +550,17 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wait_query_thread_end(struct st_connection *con)
|
||||||
|
{
|
||||||
|
if (!con->query_done)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&con->mutex);
|
||||||
|
while (!con->query_done)
|
||||||
|
pthread_cond_wait(&con->cond, &con->mutex);
|
||||||
|
pthread_mutex_unlock(&con->mutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#else /*EMBEDDED_LIBRARY*/
|
#else /*EMBEDDED_LIBRARY*/
|
||||||
|
|
||||||
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)
|
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)
|
||||||
@ -4071,7 +4082,14 @@ void do_close_connection(struct st_command *command)
|
|||||||
con->mysql.net.vio = 0;
|
con->mysql.net.vio = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
/*
|
||||||
|
As query could be still executed in a separate theread
|
||||||
|
we need to check if the query's thread was finished and probably wait
|
||||||
|
(embedded-server specific)
|
||||||
|
*/
|
||||||
|
wait_query_thread_end(con);
|
||||||
|
#endif /*EMBEDDED_LIBRARY*/
|
||||||
if (con->stmt)
|
if (con->stmt)
|
||||||
mysql_stmt_close(con->stmt);
|
mysql_stmt_close(con->stmt);
|
||||||
con->stmt= 0;
|
con->stmt= 0;
|
||||||
@ -4361,6 +4379,9 @@ void do_connect(struct st_command *command)
|
|||||||
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EMBEDDED_LIBRARY
|
||||||
|
con_slot->query_done= 1;
|
||||||
|
#endif
|
||||||
if (!mysql_init(&con_slot->mysql))
|
if (!mysql_init(&con_slot->mysql))
|
||||||
die("Failed on mysql_init()");
|
die("Failed on mysql_init()");
|
||||||
if (opt_compress || con_compress)
|
if (opt_compress || con_compress)
|
||||||
@ -5848,16 +5869,11 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
|
|||||||
}
|
}
|
||||||
#ifdef EMBEDDED_LIBRARY
|
#ifdef EMBEDDED_LIBRARY
|
||||||
/*
|
/*
|
||||||
Here we handle 'reap' command, so we need to check if the
|
Here we handle 'reap' command, so we need to check if the
|
||||||
query's thread was finished and probably wait
|
query's thread was finished and probably wait
|
||||||
*/
|
*/
|
||||||
else if (flags & QUERY_REAP_FLAG)
|
else if (flags & QUERY_REAP_FLAG)
|
||||||
{
|
wait_query_thread_end(cn);
|
||||||
pthread_mutex_lock(&cn->mutex);
|
|
||||||
while (!cn->query_done)
|
|
||||||
pthread_cond_wait(&cn->cond, &cn->mutex);
|
|
||||||
pthread_mutex_unlock(&cn->mutex);
|
|
||||||
}
|
|
||||||
#endif /*EMBEDDED_LIBRARY*/
|
#endif /*EMBEDDED_LIBRARY*/
|
||||||
if (!(flags & QUERY_REAP_FLAG))
|
if (!(flags & QUERY_REAP_FLAG))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -136,6 +136,8 @@ struct editline {
|
|||||||
|
|
||||||
protected int el_editmode(EditLine *, int, const char **);
|
protected int el_editmode(EditLine *, int, const char **);
|
||||||
|
|
||||||
|
#define el_isprint(x) ((unsigned char) (x) < 0x80 ? isprint(x) : 1)
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define EL_ABORT(a) do { \
|
#define EL_ABORT(a) do { \
|
||||||
fprintf(el->el_errfile, "%s, %d: ", \
|
fprintf(el->el_errfile, "%s, %d: ", \
|
||||||
|
@ -618,7 +618,7 @@ key__decode_char(char *buf, int cnt, int ch)
|
|||||||
} else if (ch == '\\') {
|
} else if (ch == '\\') {
|
||||||
buf[cnt++] = '\\';
|
buf[cnt++] = '\\';
|
||||||
buf[cnt] = '\\';
|
buf[cnt] = '\\';
|
||||||
} else if (ch == ' ' || (isprint(ch) && !isspace(ch))) {
|
} else if (ch == ' ' || (el_isprint(ch) && !isspace(ch))) {
|
||||||
buf[cnt] = ch;
|
buf[cnt] = ch;
|
||||||
} else {
|
} else {
|
||||||
buf[cnt++] = '\\';
|
buf[cnt++] = '\\';
|
||||||
@ -660,7 +660,7 @@ key__decode_str(const char *str, char *buf, const char *sep)
|
|||||||
} else if (*p == '^' || *p == '\\') {
|
} else if (*p == '^' || *p == '\\') {
|
||||||
*b++ = '\\';
|
*b++ = '\\';
|
||||||
*b++ = *p;
|
*b++ = *p;
|
||||||
} else if (*p == ' ' || (isprint((unsigned char) *p) &&
|
} else if (*p == ' ' || (el_isprint((unsigned char) *p) &&
|
||||||
!isspace((unsigned char) *p))) {
|
!isspace((unsigned char) *p))) {
|
||||||
*b++ = *p;
|
*b++ = *p;
|
||||||
} else {
|
} else {
|
||||||
|
@ -961,7 +961,7 @@ map_init_nls(EditLine *el)
|
|||||||
el_action_t *map = el->el_map.key;
|
el_action_t *map = el->el_map.key;
|
||||||
|
|
||||||
for (i = 0200; i <= 0377; i++)
|
for (i = 0200; i <= 0377; i++)
|
||||||
if (isprint(i))
|
if (el_isprint(i))
|
||||||
map[i] = ED_INSERT;
|
map[i] = ED_INSERT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -508,7 +508,7 @@ el_gets(EditLine *el, int *nread)
|
|||||||
el->el_chared.c_redo.pos < el->el_chared.c_redo.lim) {
|
el->el_chared.c_redo.pos < el->el_chared.c_redo.lim) {
|
||||||
if (cmdnum == VI_DELETE_PREV_CHAR &&
|
if (cmdnum == VI_DELETE_PREV_CHAR &&
|
||||||
el->el_chared.c_redo.pos != el->el_chared.c_redo.buf
|
el->el_chared.c_redo.pos != el->el_chared.c_redo.buf
|
||||||
&& isprint((unsigned char)el->el_chared.c_redo.pos[-1]))
|
&& el_isprint((unsigned char)el->el_chared.c_redo.pos[-1]))
|
||||||
el->el_chared.c_redo.pos--;
|
el->el_chared.c_redo.pos--;
|
||||||
else
|
else
|
||||||
*el->el_chared.c_redo.pos++ = ch;
|
*el->el_chared.c_redo.pos++ = ch;
|
||||||
|
@ -88,7 +88,7 @@ private void
|
|||||||
re_addc(EditLine *el, int c)
|
re_addc(EditLine *el, int c)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (isprint(c)) {
|
if (el_isprint(c)) {
|
||||||
re_putc(el, c, 1);
|
re_putc(el, c, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -964,7 +964,7 @@ re_refresh_cursor(EditLine *el)
|
|||||||
h = 1;
|
h = 1;
|
||||||
v++;
|
v++;
|
||||||
}
|
}
|
||||||
} else if (!isprint((unsigned char) c)) {
|
} else if (!el_isprint((unsigned char) c)) {
|
||||||
h += 3;
|
h += 3;
|
||||||
if (h > th) { /* if overflow, compensate */
|
if (h > th) { /* if overflow, compensate */
|
||||||
h = h - th;
|
h = h - th;
|
||||||
@ -1057,7 +1057,7 @@ re_fastaddc(EditLine *el)
|
|||||||
char mc = (c == '\177') ? '?' : (c | 0100);
|
char mc = (c == '\177') ? '?' : (c | 0100);
|
||||||
re_fastputc(el, '^');
|
re_fastputc(el, '^');
|
||||||
re_fastputc(el, mc);
|
re_fastputc(el, mc);
|
||||||
} else if (isprint((unsigned char) c)) { /* normal char */
|
} else if (el_isprint((unsigned char) c)) { /* normal char */
|
||||||
re_fastputc(el, c);
|
re_fastputc(el, c);
|
||||||
} else {
|
} else {
|
||||||
re_fastputc(el, '\\');
|
re_fastputc(el, '\\');
|
||||||
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
|||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
# The Docs Makefile.am parses this line!
|
# The Docs Makefile.am parses this line!
|
||||||
# remember to also change ndb version below and update version.c in ndb
|
# remember to also change ndb version below and update version.c in ndb
|
||||||
AM_INIT_AUTOMAKE(mysql, 5.0.58)
|
AM_INIT_AUTOMAKE(mysql, 5.0.62)
|
||||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||||
|
|
||||||
PROTOCOL_VERSION=10
|
PROTOCOL_VERSION=10
|
||||||
@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
|
|||||||
# ndb version
|
# ndb version
|
||||||
NDB_VERSION_MAJOR=5
|
NDB_VERSION_MAJOR=5
|
||||||
NDB_VERSION_MINOR=0
|
NDB_VERSION_MINOR=0
|
||||||
NDB_VERSION_BUILD=58
|
NDB_VERSION_BUILD=62
|
||||||
NDB_VERSION_STATUS=""
|
NDB_VERSION_STATUS=""
|
||||||
|
|
||||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||||
@ -1763,15 +1763,18 @@ AC_ARG_WITH(debug,
|
|||||||
if test "$with_debug" = "yes"
|
if test "$with_debug" = "yes"
|
||||||
then
|
then
|
||||||
# Medium debug.
|
# Medium debug.
|
||||||
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
|
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
|
||||||
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS"
|
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS"
|
||||||
elif test "$with_debug" = "full"
|
elif test "$with_debug" = "full"
|
||||||
then
|
then
|
||||||
# Full debug. Very slow in some cases
|
# Full debug. Very slow in some cases
|
||||||
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
||||||
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
||||||
else
|
else
|
||||||
# Optimized version. No debug
|
# Optimized version. No debug
|
||||||
|
AC_DEFINE([DBUG_OFF], [1], [Don't use libdbug])
|
||||||
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
|
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
|
||||||
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
|
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
|
||||||
fi
|
fi
|
||||||
|
2851
dbug/dbug.c
2851
dbug/dbug.c
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,13 @@
|
|||||||
#ifdef DBUG_OFF /* We are testing dbug */
|
#ifdef DBUG_OFF /* We are testing dbug */
|
||||||
#undef DBUG_OFF
|
|
||||||
#endif
|
int factorial(register int value) {
|
||||||
|
if(value > 1) {
|
||||||
|
value *= factorial(value-1);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
|
|
||||||
@ -15,3 +22,6 @@ register int value)
|
|||||||
DBUG_PRINT ("result", ("result is %d", value));
|
DBUG_PRINT ("result", ("result is %d", value));
|
||||||
DBUG_RETURN (value);
|
DBUG_RETURN (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
297
dbug/user.r
297
dbug/user.r
@ -672,52 +672,26 @@ from the standard include directory.
|
|||||||
.SP 2
|
.SP 2
|
||||||
.BL 20
|
.BL 20
|
||||||
.LI DBUG_ENTER\
|
.LI DBUG_ENTER\
|
||||||
Used to tell the runtime support module the name of the function
|
Used to tell the runtime support module the name of the function being
|
||||||
being entered.
|
entered. The argument must be of type "pointer to character". The
|
||||||
The argument must be of type "pointer to character".
|
DBUG_ENTER macro must precede all executable lines in the function
|
||||||
The
|
just entered, and must come after all local declarations. Each
|
||||||
DBUG_ENTER
|
DBUG_ENTER macro must have a matching DBUG_RETURN or DBUG_VOID_RETURN
|
||||||
macro must precede all executable lines in the
|
macro at the function exit points. DBUG_ENTER macros used without a
|
||||||
function just entered, and must come after all local declarations.
|
matching DBUG_RETURN or DBUG_VOID_RETURN macro will cause warning
|
||||||
Each
|
messages from the
|
||||||
DBUG_ENTER
|
|
||||||
macro must have a matching
|
|
||||||
DBUG_RETURN
|
|
||||||
or
|
|
||||||
DBUG_VOID_RETURN
|
|
||||||
macro
|
|
||||||
at the function exit points.
|
|
||||||
DBUG_ENTER
|
|
||||||
macros used without a matching
|
|
||||||
DBUG_RETURN
|
|
||||||
or
|
|
||||||
DBUG_VOID_RETURN
|
|
||||||
macro
|
|
||||||
will cause warning messages from the
|
|
||||||
.I dbug
|
.I dbug
|
||||||
package runtime support module.
|
package runtime support module.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_ENTER\ ("main");\fR
|
EX:\ \fCDBUG_ENTER\ ("main");\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_RETURN\
|
.LI DBUG_RETURN\
|
||||||
Used at each exit point of a function containing a
|
Used at each exit point of a function containing a DBUG_ENTER macro at
|
||||||
DBUG_ENTER
|
the entry point. The argument is the value to return. Functions
|
||||||
macro
|
which return no value (void) should use the DBUG_VOID_RETURN macro.
|
||||||
at the entry point.
|
It is an error to have a DBUG_RETURN or DBUG_VOID_RETURN macro in a
|
||||||
The argument is the value to return.
|
function which has no matching DBUG_ENTER macro, and the compiler will
|
||||||
Functions which return no value (void) should use the
|
complain if the macros are actually used (expanded).
|
||||||
DBUG_VOID_RETURN
|
|
||||||
macro.
|
|
||||||
It
|
|
||||||
is an error to have a
|
|
||||||
DBUG_RETURN
|
|
||||||
or
|
|
||||||
DBUG_VOID_RETURN
|
|
||||||
macro in a function
|
|
||||||
which has no matching
|
|
||||||
DBUG_ENTER
|
|
||||||
macro, and the compiler will complain
|
|
||||||
if the macros are actually used (expanded).
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_RETURN\ (value);\fR
|
EX:\ \fCDBUG_RETURN\ (value);\fR
|
||||||
.br
|
.br
|
||||||
@ -727,24 +701,20 @@ EX:\ \fCDBUG_VOID_RETURN;\fR
|
|||||||
Used to name the current process being executed.
|
Used to name the current process being executed.
|
||||||
A typical argument for this macro is "argv[0]", though
|
A typical argument for this macro is "argv[0]", though
|
||||||
it will be perfectly happy with any other string.
|
it will be perfectly happy with any other string.
|
||||||
|
Im multi-threaded environment threads may have different names.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_PROCESS\ (argv[0]);\fR
|
EX:\ \fCDBUG_PROCESS\ (argv[0]);\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_PUSH\
|
.LI DBUG_PUSH\
|
||||||
Sets a new debugger state by pushing the current
|
Sets a new debugger state by pushing the current
|
||||||
.B dbug
|
.B dbug
|
||||||
state onto an
|
state onto an internal stack and setting up the new state using the
|
||||||
internal stack and setting up the new state using the debug control
|
debug control string passed as the macro argument. The most common
|
||||||
string passed as the macro argument.
|
usage is to set the state specified by a debug control string
|
||||||
The most common usage is to set the state specified by a debug
|
retrieved from the argument list. If the control string is
|
||||||
control string retrieved from the argument list.
|
.I incremental,
|
||||||
Note that the leading "-#" in a debug control string specified
|
the new state is a copy of the old state, modified by the control
|
||||||
as a command line argument must
|
string.
|
||||||
.B not
|
|
||||||
be passed as part of the macro argument.
|
|
||||||
The proper usage is to pass a pointer to the first character
|
|
||||||
.B after
|
|
||||||
the "-#" string.
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_PUSH\ (\&(argv[i][2]));\fR
|
EX:\ \fCDBUG_PUSH\ (\&(argv[i][2]));\fR
|
||||||
.br
|
.br
|
||||||
@ -755,32 +725,38 @@ EX:\ \fCDBUG_PUSH\ ("");\fR
|
|||||||
.LI DBUG_POP\
|
.LI DBUG_POP\
|
||||||
Restores the previous debugger state by popping the state stack.
|
Restores the previous debugger state by popping the state stack.
|
||||||
Attempting to pop more states than pushed will be ignored and no
|
Attempting to pop more states than pushed will be ignored and no
|
||||||
warning will be given.
|
warning will be given. The DBUG_POP macro has no arguments.
|
||||||
The
|
|
||||||
DBUG_POP
|
|
||||||
macro has no arguments.
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_POP\ ();\fR
|
EX:\ \fCDBUG_POP\ ();\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
|
.LI DBUG_SET\
|
||||||
|
Modifies the current debugger state on top of the stack or pushes
|
||||||
|
a new state if the current is set to the initial settings, using
|
||||||
|
the debug control string passed as the macro argument. Unless
|
||||||
|
.I incremental
|
||||||
|
control string is used (see below), it's equivalent to a combination of
|
||||||
|
DBUG_POP and DBUG_PUSH.
|
||||||
|
.SP 1
|
||||||
|
EX:\ \fCDBUG_SET\ ("d:t");\fR
|
||||||
|
.br
|
||||||
|
EX:\ \fCDBUG_SET\ ("+d,info");\fR
|
||||||
|
.br
|
||||||
|
EX:\ \fCDBUG_SET\ ("+t:-d");\fR
|
||||||
|
.SP 1
|
||||||
.LI DBUG_FILE\
|
.LI DBUG_FILE\
|
||||||
The
|
The DBUG_FILE macro is used to do explicit I/O on the debug output
|
||||||
DBUG_FILE
|
stream. It is used in the same manner as the symbols "stdout" and
|
||||||
macro is used to do explicit I/O on the debug output
|
"stderr" in the standard I/O package.
|
||||||
stream.
|
|
||||||
It is used in the same manner as the symbols "stdout" and "stderr"
|
|
||||||
in the standard I/O package.
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCfprintf\ (DBUG_FILE,\ "Doing\ my\ own\ I/O!\\n");\fR
|
EX:\ \fCfprintf\ (DBUG_FILE,\ "Doing\ my\ own\ I/O!\\n");\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_EXECUTE\
|
.LI DBUG_EXECUTE\
|
||||||
The DBUG_EXECUTE macro is used to execute any arbitrary C code.
|
The DBUG_EXECUTE macro is used to execute any arbitrary C code. The
|
||||||
The first argument is the debug keyword, used to trigger execution
|
first argument is the debug keyword, used to trigger execution of the
|
||||||
of the code specified as the second argument.
|
code specified as the second argument. This macro must be used
|
||||||
This macro must be used cautiously because, like the
|
cautiously because, like the DBUG_PRINT macro, it is automatically
|
||||||
DBUG_PRINT
|
selected by default whenever the 'd' flag has no argument list (i.e.,
|
||||||
macro,
|
a "-#d:t" control string).
|
||||||
it is automatically selected by default whenever the 'd' flag has
|
|
||||||
no argument list (i.e., a "-#d:t" control string).
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_EXECUTE\ ("status",\ print_status\ ());\fR
|
EX:\ \fCDBUG_EXECUTE\ ("status",\ print_status\ ());\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
@ -794,17 +770,40 @@ artificial delay checking for race conditions.
|
|||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_EXECUTE_IF\ ("crashme",\ abort\ ());\fR
|
EX:\ \fCDBUG_EXECUTE_IF\ ("crashme",\ abort\ ());\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_N\
|
.LI DBUG_EVALUATE\
|
||||||
These macros, where N is in the range 2-5, are currently obsolete
|
The DBUG_EVALUATE macro is similar to DBUG_EXECUTE, but it can be used in
|
||||||
and will be removed in a future release.
|
the expression context. The first argument is the debug keyword that is used to
|
||||||
Use the new DBUG_PRINT macro.
|
choose whether the second (keyword is enabled) or the third (keyword is not
|
||||||
|
enabled) argument is evaluated. When
|
||||||
|
.B dbug
|
||||||
|
is compiled off, the third argument is evaluated.
|
||||||
|
.SP 1
|
||||||
|
EX:\fC
|
||||||
|
.br
|
||||||
|
printf("Info-debug is %s",
|
||||||
|
.br
|
||||||
|
DBUG_EVALUATE\ ("info", "ON", "OFF"));\fR
|
||||||
|
.SP 1
|
||||||
|
.LI DBUG_EVALUATE_IF\
|
||||||
|
Works like DBUG_EVALUATE macro, but the second argument is
|
||||||
|
.B not
|
||||||
|
evaluated, if the keyword is not explicitly listed in
|
||||||
|
the 'd' flag. Like DBUG_EXECUTE_IF this could be used to conditionally execute
|
||||||
|
"dangerous" actions.
|
||||||
|
.SP 1
|
||||||
|
EX:\fC
|
||||||
|
.br
|
||||||
|
if (prepare_transaction () ||
|
||||||
|
.br
|
||||||
|
DBUG_EVALUATE ("crashme", (abort (), 0), 0) ||
|
||||||
|
.br
|
||||||
|
commit_transaction () )\fR
|
||||||
|
.SP 1
|
||||||
.LI DBUG_PRINT\
|
.LI DBUG_PRINT\
|
||||||
Used to do printing via the "fprintf" library function on the
|
Used to do printing via the "fprintf" library function on the current
|
||||||
current debug stream,
|
debug stream, DBUG_FILE. The first argument is a debug keyword, the
|
||||||
DBUG_FILE.
|
second is a format string and the corresponding argument list. Note
|
||||||
The first argument is a debug keyword, the second is a format string
|
that the format string and argument list are all one macro argument
|
||||||
and the corresponding argument list.
|
|
||||||
Note that the format string and argument list are all one macro argument
|
|
||||||
and
|
and
|
||||||
.B must
|
.B must
|
||||||
be enclosed in parentheses.
|
be enclosed in parentheses.
|
||||||
@ -816,10 +815,10 @@ EX:\ \fCDBUG_PRINT\ ("type",\ ("type\ is\ %x", type));\fR
|
|||||||
EX:\ \fCDBUG_PRINT\ ("stp",\ ("%x\ ->\ %s", stp, stp\ ->\ name));\fR
|
EX:\ \fCDBUG_PRINT\ ("stp",\ ("%x\ ->\ %s", stp, stp\ ->\ name));\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_DUMP\
|
.LI DBUG_DUMP\
|
||||||
Used to dump a memory block in hex via the "fprintf" library function on the
|
Used to dump a memory block in hex via the "fprintf" library function
|
||||||
current debug stream, DBUG_FILE.
|
on the current debug stream, DBUG_FILE. The first argument is a debug
|
||||||
The first argument is a debug keyword, the second is a pointer to
|
keyword, the second is a pointer to a memory to dump, the third is a
|
||||||
a memory to dump, the third is a number of bytes to dump.
|
number of bytes to dump.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
|
EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
@ -875,13 +874,28 @@ library. So there will be no need to disable asserts separately with NDEBUG.
|
|||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_ASSERT(\ a\ >\ 0\ );\fR
|
EX:\ \fCDBUG_ASSERT(\ a\ >\ 0\ );\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_OUTPUT\
|
.LI DBUG_EXPLAIN\
|
||||||
In multi-threaded environment disables (or enables) any
|
Generates control string corresponding to the current debug state.
|
||||||
.I dbug
|
The macro takes two arguments - a buffer to store the result string
|
||||||
output from the current thread.
|
into and its length. The macro (which could be used as a function)
|
||||||
|
returns 1 if the control string didn't fit into the buffer and was
|
||||||
|
truncated and 0 otherwise.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_OUTPUT(\ 0\ );\fR
|
EX:\fC
|
||||||
|
.br
|
||||||
|
char buf[256];
|
||||||
|
.br
|
||||||
|
DBUG_EXPLAIN( buf, sizeof(buf) );\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
|
.LI DBUG_SET_INITIAL\
|
||||||
|
.LI DBUG_EXPLAIN_INITIAL\
|
||||||
|
.br
|
||||||
|
These two macros are identical to DBUG_SET and DBUG_EXPLAIN, but they
|
||||||
|
operate on the debug state that any new thread starts from.
|
||||||
|
Modifying
|
||||||
|
.I initial
|
||||||
|
value does not affect threads that are already running. Obviously,
|
||||||
|
these macros are only useful in the multi-threaded environment.
|
||||||
.LE
|
.LE
|
||||||
|
|
||||||
.SK
|
.SK
|
||||||
@ -893,42 +907,51 @@ DEBUG CONTROL STRING
|
|||||||
The debug control string is used to set the state of the debugger
|
The debug control string is used to set the state of the debugger
|
||||||
via the
|
via the
|
||||||
.B DBUG_PUSH
|
.B DBUG_PUSH
|
||||||
macro.
|
or
|
||||||
This section summarizes the currently available debugger options
|
.B DBUG_SET
|
||||||
and the flag characters which enable or disable them.
|
macros. Control string consists of colon separate flags. Colons
|
||||||
Argument lists enclosed in '[' and ']' are optional.
|
that are part of ':\\', ':/', or '::' are not considered flag
|
||||||
|
separators. A flag may take an argument or a list of arguments.
|
||||||
|
If a control string starts from a '+' sign it works
|
||||||
|
.I incrementally,
|
||||||
|
that is, it can modify existing state without overriding it. In such a
|
||||||
|
string every flag may be preceded by a '+' or '-' to enable or disable
|
||||||
|
a corresponding option in the debugger state. This section summarizes
|
||||||
|
the currently available debugger options and the flag characters which
|
||||||
|
enable or disable them. Argument lists enclosed in '[' and ']' are
|
||||||
|
optional.
|
||||||
.SP 2
|
.SP 2
|
||||||
.BL 22
|
.BL 22
|
||||||
.LI a[,file]
|
.LI a[,file]
|
||||||
Redirect the debugger output stream and append it to the specified file.
|
Redirect the debugger output stream and append it to the specified
|
||||||
The default output stream is stderr.
|
file. The default output stream is stderr. A null argument list
|
||||||
A null argument list causes output to be redirected to stdout.
|
causes output to be redirected to stdout.
|
||||||
Double the colon, if you want it in the path
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX: \fCa,C::\\tmp\\log\fR
|
EX: \fCa,C:\\tmp\\log\fR
|
||||||
.LI A[,file]
|
.LI A[,file]
|
||||||
Like 'a[,file]' but ensure that data are written after each write
|
Like 'a[,file]' but ensure that data are written after each write
|
||||||
(this typically implies flush or close/reopen). It helps to get
|
(this typically implies flush or close/reopen). It helps to get
|
||||||
a complete log file in case of crashes. This mode is implied in
|
a complete log file in case of crashes. This mode is implicit in
|
||||||
multi-threaded environment.
|
multi-threaded environment.
|
||||||
.LI d[,keywords]
|
.LI d[,keywords]
|
||||||
Enable output from macros with specified keywords.
|
Enable output from macros with specified keywords.
|
||||||
A null list of keywords implies that all keywords are selected.
|
An empty list of keywords implies that all keywords are selected.
|
||||||
.LI D[,time]
|
.LI D[,time]
|
||||||
Delay for specified time after each output line, to let output drain.
|
Delay for specified time after each output line, to let output drain.
|
||||||
Time is given in tenths of a second (value of 10 is one second).
|
Time is given in tenths of a second (value of 10 is one second).
|
||||||
Default is zero.
|
Default is zero.
|
||||||
.LI f[,functions]
|
.LI f[,functions]
|
||||||
Limit debugger actions to the specified list of functions.
|
Limit debugger actions to the specified list of functions.
|
||||||
A null list of functions implies that all functions are selected.
|
An empty list of functions implies that all functions are selected.
|
||||||
.LI F
|
.LI F
|
||||||
Mark each debugger output line with the name of the source file
|
Mark each debugger output line with the name of the source file
|
||||||
containing the macro causing the output.
|
containing the macro causing the output.
|
||||||
.LI i
|
.LI i
|
||||||
Mark each debugger output line with the PID of the current process.
|
Mark each debugger output line with the PID (or thread ID) of the
|
||||||
|
current process.
|
||||||
.LI g,[functions]
|
.LI g,[functions]
|
||||||
Enable profiling for the specified list of functions.
|
Enable profiling for the specified list of functions.
|
||||||
By default profiling is enabled for all functions.
|
An empty list of functions enables profiling for all functions.
|
||||||
See
|
See
|
||||||
.B PROFILING\ WITH\ DBUG
|
.B PROFILING\ WITH\ DBUG
|
||||||
below.
|
below.
|
||||||
@ -946,20 +969,18 @@ Like 'a[,file]' but overwrite old file, do not append.
|
|||||||
.LI O[,file]
|
.LI O[,file]
|
||||||
Like 'A[,file]' but overwrite old file, do not append.
|
Like 'A[,file]' but overwrite old file, do not append.
|
||||||
.LI p[,processes]
|
.LI p[,processes]
|
||||||
Limit debugger actions to the specified processes.
|
Limit debugger actions to the specified processes. An empty list
|
||||||
A null list implies all processes.
|
implies all processes. This is useful for processes which run child
|
||||||
This is useful for processes which run child processes.
|
processes. Note that each debugger output line can be marked with the
|
||||||
Note that each debugger output line can be marked with the name of
|
name of the current process via the 'P' flag. The process name must
|
||||||
the current process via the 'P' flag.
|
match the argument passed to the
|
||||||
The process name must match the argument passed to the
|
|
||||||
.B DBUG_PROCESS
|
.B DBUG_PROCESS
|
||||||
macro.
|
macro.
|
||||||
.LI P
|
.LI P
|
||||||
Mark each debugger output line with the name of the current process.
|
Mark each debugger output line with the name of the current process.
|
||||||
Most useful when used with a process which runs child processes that
|
Most useful when used with a process which runs child processes that
|
||||||
are also being debugged.
|
are also being debugged. Note that the parent process must arrange
|
||||||
Note that the parent process must arrange for the debugger control
|
for the debugger control string to be passed to the child processes.
|
||||||
string to be passed to the child processes.
|
|
||||||
.LI r
|
.LI r
|
||||||
Used in conjunction with the
|
Used in conjunction with the
|
||||||
.B DBUG_PUSH
|
.B DBUG_PUSH
|
||||||
@ -981,7 +1002,59 @@ and
|
|||||||
Enable function control flow tracing.
|
Enable function control flow tracing.
|
||||||
The maximum nesting depth is specified by N, and defaults to
|
The maximum nesting depth is specified by N, and defaults to
|
||||||
200.
|
200.
|
||||||
|
.LI T
|
||||||
|
Mark each debugger output line with the current timestamp.
|
||||||
|
The value is printed with microsecond resolution, as returned by
|
||||||
|
.I gettimeofday()
|
||||||
|
system call. The actual resolution is OS- and hardware-dependent.
|
||||||
.LE
|
.LE
|
||||||
|
|
||||||
|
.SK
|
||||||
|
.B
|
||||||
|
MULTI-THREADED DEBUGGING
|
||||||
|
.R
|
||||||
|
|
||||||
|
.P
|
||||||
|
When
|
||||||
|
.I dbug
|
||||||
|
is used in a multi-threaded environment there are few differences from a single-threaded
|
||||||
|
case to keep in mind. This section tries to summarize them.
|
||||||
|
.SP 2
|
||||||
|
.BL 5
|
||||||
|
.LI
|
||||||
|
Every thread has its own stack of debugger states.
|
||||||
|
.B DBUG_PUSH
|
||||||
|
and
|
||||||
|
.B DBUG_POP
|
||||||
|
affect only the thread that executed them.
|
||||||
|
.LI
|
||||||
|
At the bottom of the stack for all threads there is the common
|
||||||
|
.I initial
|
||||||
|
state. Changes to this state (for example, with
|
||||||
|
.B DBUG_SET_INITIAL
|
||||||
|
macro) affect all new threads and all running threads that didn't
|
||||||
|
.B DBUG_PUSH
|
||||||
|
yet.
|
||||||
|
.LI
|
||||||
|
Every thread can have its own name, that can be set with
|
||||||
|
.B DBUG_PROCESS
|
||||||
|
macro. Thus, "-#p,name1,name2" can be used to limit the output to specific threads.
|
||||||
|
.LI
|
||||||
|
When printing directly to
|
||||||
|
.B DBUG_FILE
|
||||||
|
it may be necessary to prevent other threads from writing something between two parts
|
||||||
|
of logically indivisible output. It is done with
|
||||||
|
.B DBUG_LOCK_FILE
|
||||||
|
and
|
||||||
|
.B DBUG_UNLOCK_FILE
|
||||||
|
macors. See the appropriate section for examples.
|
||||||
|
.LI
|
||||||
|
"-#o,file" and "-#O,file" are treated as "-#a,file" and "-#A,file" respectively. That is
|
||||||
|
all writes to a file are always followed by a flush.
|
||||||
|
.LI
|
||||||
|
"-#i" prints not a PID but a thread id in the form of "T@nnn"
|
||||||
|
.LE
|
||||||
|
|
||||||
.SK
|
.SK
|
||||||
.B
|
.B
|
||||||
PROFILING WITH DBUG
|
PROFILING WITH DBUG
|
||||||
|
@ -153,7 +153,9 @@ int main(int argc, char **argv) {
|
|||||||
my_init();
|
my_init();
|
||||||
|
|
||||||
if (argc > argcnt && argv[argcnt][0] == '-' && argv[argcnt][1] == '#')
|
if (argc > argcnt && argv[argcnt][0] == '-' && argv[argcnt][1] == '#')
|
||||||
|
{
|
||||||
DBUG_PUSH(argv[argcnt++]+2);
|
DBUG_PUSH(argv[argcnt++]+2);
|
||||||
|
}
|
||||||
|
|
||||||
if (argc > argcnt)
|
if (argc > argcnt)
|
||||||
the_set = argv[argcnt++];
|
the_set = argv[argcnt++];
|
||||||
|
@ -617,7 +617,6 @@ err:
|
|||||||
static int get_options(int argc,char *argv[])
|
static int get_options(int argc,char *argv[])
|
||||||
{
|
{
|
||||||
char *pos,*progname;
|
char *pos,*progname;
|
||||||
DEBUGGER_OFF;
|
|
||||||
|
|
||||||
progname= argv[0];
|
progname= argv[0];
|
||||||
|
|
||||||
@ -646,7 +645,6 @@ static int get_options(int argc,char *argv[])
|
|||||||
printf("Usage: %s [-?ABIKLsWv] [-m#] [-t#]\n",progname);
|
printf("Usage: %s [-?ABIKLsWv] [-m#] [-t#]\n",progname);
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (++pos);
|
DBUG_PUSH (++pos);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -157,14 +157,12 @@ typedef uint rf_SetTimer;
|
|||||||
|
|
||||||
#define Socket_defined
|
#define Socket_defined
|
||||||
#define my_socket SOCKET
|
#define my_socket SOCKET
|
||||||
#define bool BOOL
|
|
||||||
#define SIGPIPE SIGINT
|
#define SIGPIPE SIGINT
|
||||||
#define RETQSORTTYPE void
|
#define RETQSORTTYPE void
|
||||||
#define QSORT_TYPE_IS_VOID
|
#define QSORT_TYPE_IS_VOID
|
||||||
#define RETSIGTYPE void
|
#define RETSIGTYPE void
|
||||||
#define SOCKET_SIZE_TYPE int
|
#define SOCKET_SIZE_TYPE int
|
||||||
#define my_socket_defined
|
#define my_socket_defined
|
||||||
#define bool_defined
|
|
||||||
#define byte_defined
|
#define byte_defined
|
||||||
#define HUGE_PTR
|
#define HUGE_PTR
|
||||||
#define STDCALL __stdcall /* Used by libmysql.dll */
|
#define STDCALL __stdcall /* Used by libmysql.dll */
|
||||||
@ -403,4 +401,4 @@ inline double ulonglong2double(ulonglong value)
|
|||||||
#define HAVE_CHARSET_ujis 1
|
#define HAVE_CHARSET_ujis 1
|
||||||
#define HAVE_CHARSET_utf8 1
|
#define HAVE_CHARSET_utf8 1
|
||||||
#define HAVE_UCA_COLLATIONS 1
|
#define HAVE_UCA_COLLATIONS 1
|
||||||
|
#define HAVE_BOOL 1
|
||||||
|
@ -20,15 +20,18 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
#if !defined(DBUG_OFF) && !defined(_lint)
|
#if !defined(DBUG_OFF) && !defined(_lint)
|
||||||
extern int _db_on_,_no_db_;
|
struct _db_code_state_;
|
||||||
extern FILE *_db_fp_;
|
extern int _db_keyword_(struct _db_code_state_ *cs, const char *keyword);
|
||||||
extern char *_db_process_;
|
|
||||||
extern int _db_keyword_(const char *keyword);
|
|
||||||
extern int _db_strict_keyword_(const char *keyword);
|
extern int _db_strict_keyword_(const char *keyword);
|
||||||
|
extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len);
|
||||||
|
extern int _db_explain_init_(char *buf, size_t len);
|
||||||
extern void _db_setjmp_(void);
|
extern void _db_setjmp_(void);
|
||||||
extern void _db_longjmp_(void);
|
extern void _db_longjmp_(void);
|
||||||
|
extern void _db_process_(const char *name);
|
||||||
extern void _db_push_(const char *control);
|
extern void _db_push_(const char *control);
|
||||||
extern void _db_pop_(void);
|
extern void _db_pop_(void);
|
||||||
|
extern void _db_set_(struct _db_code_state_ *cs, const char *control);
|
||||||
|
extern void _db_set_init_(const char *control);
|
||||||
extern void _db_enter_(const char *_func_,const char *_file_,uint _line_,
|
extern void _db_enter_(const char *_func_,const char *_file_,uint _line_,
|
||||||
const char **_sfunc_,const char **_sfile_,
|
const char **_sfunc_,const char **_sfile_,
|
||||||
uint *_slevel_, char ***);
|
uint *_slevel_, char ***);
|
||||||
@ -37,68 +40,73 @@ extern void _db_return_(uint _line_,const char **_sfunc_,const char **_sfile_,
|
|||||||
extern void _db_pargs_(uint _line_,const char *keyword);
|
extern void _db_pargs_(uint _line_,const char *keyword);
|
||||||
extern void _db_doprnt_ _VARARGS((const char *format,...))
|
extern void _db_doprnt_ _VARARGS((const char *format,...))
|
||||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||||
extern void _db_dump_(uint _line_,const char *keyword,const char *memory,
|
extern void _db_dump_(uint _line_,const char *keyword,
|
||||||
uint length);
|
const unsigned char *memory, size_t length);
|
||||||
extern void _db_output_(uint flag);
|
|
||||||
extern void _db_end_(void);
|
extern void _db_end_(void);
|
||||||
extern void _db_lock_file(void);
|
extern void _db_lock_file_(void);
|
||||||
extern void _db_unlock_file(void);
|
extern void _db_unlock_file_(void);
|
||||||
|
extern FILE *_db_fp_(void);
|
||||||
|
|
||||||
#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
|
#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
|
||||||
char **_db_framep_; \
|
char **_db_framep_; \
|
||||||
_db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
|
_db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
|
||||||
&_db_framep_)
|
&_db_framep_)
|
||||||
#define DBUG_LEAVE \
|
#define DBUG_LEAVE \
|
||||||
(_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_))
|
_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_)
|
||||||
#define DBUG_RETURN(a1) {DBUG_LEAVE; return(a1);}
|
#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0)
|
||||||
#define DBUG_VOID_RETURN {DBUG_LEAVE; return;}
|
#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
|
||||||
#define DBUG_EXECUTE(keyword,a1) \
|
#define DBUG_EXECUTE(keyword,a1) \
|
||||||
{if (_db_on_) {if (_db_keyword_ (keyword)) { a1 }}}
|
do {if (_db_keyword_(0, (keyword))) { a1 }} while(0)
|
||||||
|
#define DBUG_EXECUTE_IF(keyword,a1) \
|
||||||
|
do {if (_db_strict_keyword_ (keyword)) { a1 } } while(0)
|
||||||
|
#define DBUG_EVALUATE(keyword,a1,a2) \
|
||||||
|
(_db_keyword_(0,(keyword)) ? (a1) : (a2))
|
||||||
|
#define DBUG_EVALUATE_IF(keyword,a1,a2) \
|
||||||
|
(_db_strict_keyword_((keyword)) ? (a1) : (a2))
|
||||||
#define DBUG_PRINT(keyword,arglist) \
|
#define DBUG_PRINT(keyword,arglist) \
|
||||||
{if (_db_on_) {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;}}
|
do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0)
|
||||||
#define DBUG_PUSH(a1) _db_push_ (a1)
|
#define DBUG_PUSH(a1) _db_push_ (a1)
|
||||||
#define DBUG_POP() _db_pop_ ()
|
#define DBUG_POP() _db_pop_ ()
|
||||||
#define DBUG_PROCESS(a1) (_db_process_ = a1)
|
#define DBUG_SET(a1) _db_set_ (0, (a1))
|
||||||
#define DBUG_FILE (_db_fp_)
|
#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1)
|
||||||
|
#define DBUG_PROCESS(a1) _db_process_(a1)
|
||||||
|
#define DBUG_FILE _db_fp_()
|
||||||
#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
|
#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
|
||||||
#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
|
#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
|
||||||
#define DBUG_DUMP(keyword,a1,a2)\
|
#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2)
|
||||||
{if (_db_on_) {_db_dump_(__LINE__,keyword,a1,a2);}}
|
|
||||||
#define DBUG_IN_USE (_db_fp_ && _db_fp_ != stderr)
|
|
||||||
#define DEBUGGER_OFF _no_db_=1;_db_on_=0;
|
|
||||||
#define DEBUGGER_ON _no_db_=0
|
|
||||||
#define DBUG_END() _db_end_ ()
|
#define DBUG_END() _db_end_ ()
|
||||||
#define DBUG_LOCK_FILE { _db_lock_file(); }
|
#define DBUG_LOCK_FILE _db_lock_file_()
|
||||||
#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
|
#define DBUG_UNLOCK_FILE _db_unlock_file_()
|
||||||
#define DBUG_OUTPUT(A) { _db_output_(A); }
|
|
||||||
#define DBUG_ASSERT(A) assert(A)
|
#define DBUG_ASSERT(A) assert(A)
|
||||||
#define DBUG_EXECUTE_IF(keyword,a1) \
|
#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len))
|
||||||
{if (_db_on_) {if (_db_strict_keyword_ (keyword)) { a1 }}}
|
#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len))
|
||||||
#define IF_DBUG(A) A
|
#define IF_DBUG(A) A
|
||||||
#else /* No debugger */
|
#else /* No debugger */
|
||||||
|
|
||||||
#define DBUG_ENTER(a1)
|
#define DBUG_ENTER(a1)
|
||||||
#define DBUG_RETURN(a1) return(a1)
|
|
||||||
#define DBUG_VOID_RETURN return
|
|
||||||
#define DBUG_EXECUTE(keyword,a1) {}
|
|
||||||
#define DBUG_EXECUTE_IF(keyword,a1) {}
|
|
||||||
#define DBUG_PRINT(keyword,arglist) {}
|
|
||||||
#define DBUG_PUSH(a1) {}
|
|
||||||
#define DBUG_POP() {}
|
|
||||||
#define DBUG_PROCESS(a1) {}
|
|
||||||
#define DBUG_FILE (stderr)
|
|
||||||
#define DBUG_SETJMP setjmp
|
|
||||||
#define DBUG_LONGJMP longjmp
|
|
||||||
#define DBUG_DUMP(keyword,a1,a2) {}
|
|
||||||
#define DBUG_IN_USE 0
|
|
||||||
#define DEBUGGER_OFF
|
|
||||||
#define DEBUGGER_ON
|
|
||||||
#define DBUG_END()
|
|
||||||
#define DBUG_LOCK_FILE
|
|
||||||
#define DBUG_UNLOCK_FILE
|
|
||||||
#define DBUG_OUTPUT(A)
|
|
||||||
#define DBUG_ASSERT(A) {}
|
|
||||||
#define DBUG_LEAVE
|
#define DBUG_LEAVE
|
||||||
|
#define DBUG_RETURN(a1) do { return(a1); } while(0)
|
||||||
|
#define DBUG_VOID_RETURN do { return; } while(0)
|
||||||
|
#define DBUG_EXECUTE(keyword,a1) do { } while(0)
|
||||||
|
#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0)
|
||||||
|
#define DBUG_EVALUATE(keyword,a1,a2) (a2)
|
||||||
|
#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2)
|
||||||
|
#define DBUG_PRINT(keyword,arglist) do { } while(0)
|
||||||
|
#define DBUG_PUSH(a1)
|
||||||
|
#define DBUG_SET(a1)
|
||||||
|
#define DBUG_SET_INITIAL(a1)
|
||||||
|
#define DBUG_POP()
|
||||||
|
#define DBUG_PROCESS(a1)
|
||||||
|
#define DBUG_SETJMP(a1) setjmp(a1)
|
||||||
|
#define DBUG_LONGJMP(a1) longjmp(a1)
|
||||||
|
#define DBUG_DUMP(keyword,a1,a2)
|
||||||
|
#define DBUG_END()
|
||||||
|
#define DBUG_ASSERT(A)
|
||||||
|
#define DBUG_LOCK_FILE
|
||||||
|
#define DBUG_FILE (stderr)
|
||||||
|
#define DBUG_UNLOCK_FILE
|
||||||
|
#define DBUG_EXPLAIN(buf,len)
|
||||||
|
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
||||||
#define IF_DBUG(A)
|
#define IF_DBUG(A)
|
||||||
#endif
|
#endif
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -980,7 +980,7 @@ typedef int myf; /* Type of MyFlags in my_funcs */
|
|||||||
typedef char byte; /* Smallest addressable unit */
|
typedef char byte; /* Smallest addressable unit */
|
||||||
#endif
|
#endif
|
||||||
typedef char my_bool; /* Small bool */
|
typedef char my_bool; /* Small bool */
|
||||||
#if !defined(bool) && !defined(bool_defined) && (!defined(HAVE_BOOL) || !defined(__cplusplus))
|
#if !defined(bool) && (!defined(HAVE_BOOL) || !defined(__cplusplus))
|
||||||
typedef char bool; /* Ordinary boolean values 0 1 */
|
typedef char bool; /* Ordinary boolean values 0 1 */
|
||||||
#endif
|
#endif
|
||||||
/* Macros for converting *constants* to the right type */
|
/* Macros for converting *constants* to the right type */
|
||||||
|
@ -181,7 +181,7 @@ extern int pthread_mutex_destroy (pthread_mutex_t *);
|
|||||||
#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
|
#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
|
||||||
#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
|
#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
|
||||||
#define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B))
|
#define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B))
|
||||||
#define pthread_kill(A,B) pthread_dummy(ESRCH)
|
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
||||||
#endif /* OS2 */
|
#endif /* OS2 */
|
||||||
|
|
||||||
/* Dummy defines for easier code */
|
/* Dummy defines for easier code */
|
||||||
@ -445,14 +445,14 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res);
|
|||||||
#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
|
#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
|
||||||
#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D))
|
#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D))
|
||||||
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
||||||
#define pthread_kill(A,B) pthread_dummy(ESRCH)
|
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
||||||
#undef pthread_detach_this_thread
|
#undef pthread_detach_this_thread
|
||||||
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
|
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DARWIN5_THREADS
|
#ifdef HAVE_DARWIN5_THREADS
|
||||||
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
||||||
#define pthread_kill(A,B) pthread_dummy(ESRCH)
|
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
||||||
#define pthread_condattr_init(A) pthread_dummy(0)
|
#define pthread_condattr_init(A) pthread_dummy(0)
|
||||||
#define pthread_condattr_destroy(A) pthread_dummy(0)
|
#define pthread_condattr_destroy(A) pthread_dummy(0)
|
||||||
#undef pthread_detach_this_thread
|
#undef pthread_detach_this_thread
|
||||||
@ -472,7 +472,7 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res);
|
|||||||
#ifndef pthread_sigmask
|
#ifndef pthread_sigmask
|
||||||
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
|
||||||
#endif
|
#endif
|
||||||
#define pthread_kill(A,B) pthread_dummy(ESRCH)
|
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
||||||
#undef pthread_detach_this_thread
|
#undef pthread_detach_this_thread
|
||||||
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
|
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
|
||||||
#elif !defined(__NETWARE__) /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */
|
#elif !defined(__NETWARE__) /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */
|
||||||
|
@ -94,7 +94,7 @@ long calc_daynr(uint year,uint month,uint day);
|
|||||||
uint calc_days_in_year(uint year);
|
uint calc_days_in_year(uint year);
|
||||||
uint year_2000_handling(uint year);
|
uint year_2000_handling(uint year);
|
||||||
|
|
||||||
void init_time(void);
|
void my_init_time(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
|
|
||||||
extern const char *unknown_sqlstate;
|
extern const char *unknown_sqlstate;
|
||||||
|
extern const char *cant_connect_sqlstate;
|
||||||
extern const char *not_error_sqlstate;
|
extern const char *not_error_sqlstate;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -298,16 +298,12 @@ mysql_debug(const char *debug __attribute__((unused)))
|
|||||||
{
|
{
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
char *env;
|
char *env;
|
||||||
if (_db_on_)
|
|
||||||
return; /* Already using debugging */
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH(debug);
|
DBUG_PUSH(debug);
|
||||||
}
|
}
|
||||||
else if ((env = getenv("MYSQL_DEBUG")))
|
else if ((env = getenv("MYSQL_DEBUG")))
|
||||||
{
|
{
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH(env);
|
DBUG_PUSH(env);
|
||||||
#if !defined(_WINVER) && !defined(WINVER)
|
#if !defined(_WINVER) && !defined(WINVER)
|
||||||
puts("\n-------------------------------------------------------");
|
puts("\n-------------------------------------------------------");
|
||||||
@ -1486,7 +1482,7 @@ my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql)
|
|||||||
|
|
||||||
const char *STDCALL mysql_sqlstate(MYSQL *mysql)
|
const char *STDCALL mysql_sqlstate(MYSQL *mysql)
|
||||||
{
|
{
|
||||||
return mysql->net.sqlstate;
|
return mysql ? mysql->net.sqlstate : cant_connect_sqlstate;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint STDCALL mysql_warning_count(MYSQL *mysql)
|
uint STDCALL mysql_warning_count(MYSQL *mysql)
|
||||||
@ -2448,7 +2444,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length)
|
|||||||
my_bool res;
|
my_bool res;
|
||||||
|
|
||||||
DBUG_ENTER("execute");
|
DBUG_ENTER("execute");
|
||||||
DBUG_DUMP("packet", packet, length);
|
DBUG_DUMP("packet", (uchar*)packet, length);
|
||||||
|
|
||||||
mysql->last_used_con= mysql;
|
mysql->last_used_con= mysql;
|
||||||
int4store(buff, stmt->stmt_id); /* Send stmt id to server */
|
int4store(buff, stmt->stmt_id); /* Send stmt id to server */
|
||||||
@ -2456,7 +2452,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length)
|
|||||||
int4store(buff+5, 1); /* iteration count */
|
int4store(buff+5, 1); /* iteration count */
|
||||||
|
|
||||||
res= test(cli_advanced_command(mysql, COM_STMT_EXECUTE, buff, sizeof(buff),
|
res= test(cli_advanced_command(mysql, COM_STMT_EXECUTE, buff, sizeof(buff),
|
||||||
packet, length, 1, NULL) ||
|
packet, length, 1, stmt) ||
|
||||||
(*mysql->methods->read_query_result)(mysql));
|
(*mysql->methods->read_query_result)(mysql));
|
||||||
stmt->affected_rows= mysql->affected_rows;
|
stmt->affected_rows= mysql->affected_rows;
|
||||||
stmt->server_status= mysql->server_status;
|
stmt->server_status= mysql->server_status;
|
||||||
@ -2673,7 +2669,7 @@ stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row)
|
|||||||
int4store(buff + 4, stmt->prefetch_rows); /* number of rows to fetch */
|
int4store(buff + 4, stmt->prefetch_rows); /* number of rows to fetch */
|
||||||
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_FETCH,
|
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_FETCH,
|
||||||
buff, sizeof(buff), NullS, 0,
|
buff, sizeof(buff), NullS, 0,
|
||||||
1, NULL))
|
1, stmt))
|
||||||
{
|
{
|
||||||
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
||||||
return 1;
|
return 1;
|
||||||
@ -3340,7 +3336,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number,
|
|||||||
*/
|
*/
|
||||||
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_SEND_LONG_DATA,
|
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_SEND_LONG_DATA,
|
||||||
buff, sizeof(buff), data,
|
buff, sizeof(buff), data,
|
||||||
length, 1, NULL))
|
length, 1, stmt))
|
||||||
{
|
{
|
||||||
set_stmt_errmsg(stmt, mysql->net.last_error,
|
set_stmt_errmsg(stmt, mysql->net.last_error,
|
||||||
mysql->net.last_errno, mysql->net.sqlstate);
|
mysql->net.last_errno, mysql->net.sqlstate);
|
||||||
@ -4737,6 +4733,13 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
|
|||||||
MYSQL_DATA *result= &stmt->result;
|
MYSQL_DATA *result= &stmt->result;
|
||||||
DBUG_ENTER("mysql_stmt_store_result");
|
DBUG_ENTER("mysql_stmt_store_result");
|
||||||
|
|
||||||
|
if (!mysql)
|
||||||
|
{
|
||||||
|
/* mysql can be reset in mysql_close called from mysql_reconnect */
|
||||||
|
set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate);
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
|
|
||||||
mysql= mysql->last_used_con;
|
mysql= mysql->last_used_con;
|
||||||
|
|
||||||
if (!stmt->field_count)
|
if (!stmt->field_count)
|
||||||
@ -4762,7 +4765,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
|
|||||||
int4store(buff, stmt->stmt_id);
|
int4store(buff, stmt->stmt_id);
|
||||||
int4store(buff + 4, (int)~0); /* number of rows to fetch */
|
int4store(buff + 4, (int)~0); /* number of rows to fetch */
|
||||||
if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff),
|
if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff),
|
||||||
NullS, 0, 1, NULL))
|
NullS, 0, 1, stmt))
|
||||||
{
|
{
|
||||||
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@ -4949,7 +4952,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags)
|
|||||||
char buff[MYSQL_STMT_HEADER]; /* packet header: 4 bytes for stmt id */
|
char buff[MYSQL_STMT_HEADER]; /* packet header: 4 bytes for stmt id */
|
||||||
int4store(buff, stmt->stmt_id);
|
int4store(buff, stmt->stmt_id);
|
||||||
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_RESET, buff,
|
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_RESET, buff,
|
||||||
sizeof(buff), 0, 0, 0, NULL))
|
sizeof(buff), 0, 0, 0, stmt))
|
||||||
{
|
{
|
||||||
set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
|
set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
|
||||||
mysql->net.sqlstate);
|
mysql->net.sqlstate);
|
||||||
|
@ -47,6 +47,8 @@ C_MODE_START
|
|||||||
#include <sql_common.h>
|
#include <sql_common.h>
|
||||||
#include "embedded_priv.h"
|
#include "embedded_priv.h"
|
||||||
|
|
||||||
|
extern unsigned int mysql_server_last_errno;
|
||||||
|
extern char mysql_server_last_error[MYSQL_ERRMSG_SIZE];
|
||||||
static my_bool emb_read_query_result(MYSQL *mysql);
|
static my_bool emb_read_query_result(MYSQL *mysql);
|
||||||
|
|
||||||
|
|
||||||
@ -1084,3 +1086,11 @@ bool Protocol::net_store_data(const char *from, uint length)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void vprint_msg_to_log(enum loglevel level __attribute__((unused)),
|
||||||
|
const char *format, va_list argsi)
|
||||||
|
{
|
||||||
|
vsnprintf(mysql_server_last_error, sizeof(mysql_server_last_error),
|
||||||
|
format, argsi);
|
||||||
|
mysql_server_last_errno= CR_UNKNOWN_ERROR;
|
||||||
|
}
|
||||||
|
@ -741,7 +741,7 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
|||||||
char llbuff[22];
|
char llbuff[22];
|
||||||
uint diff_pos[2];
|
uint diff_pos[2];
|
||||||
DBUG_ENTER("chk_index");
|
DBUG_ENTER("chk_index");
|
||||||
DBUG_DUMP("buff",(byte*) buff,mi_getint(buff));
|
DBUG_DUMP("buff",(uchar*) buff,mi_getint(buff));
|
||||||
|
|
||||||
/* TODO: implement appropriate check for RTree keys */
|
/* TODO: implement appropriate check for RTree keys */
|
||||||
if (keyinfo->flag & HA_SPATIAL)
|
if (keyinfo->flag & HA_SPATIAL)
|
||||||
@ -799,9 +799,9 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
|||||||
(flag=ha_key_cmp(keyinfo->seg,info->lastkey,key,key_length,
|
(flag=ha_key_cmp(keyinfo->seg,info->lastkey,key,key_length,
|
||||||
comp_flag, diff_pos)) >=0)
|
comp_flag, diff_pos)) >=0)
|
||||||
{
|
{
|
||||||
DBUG_DUMP("old",(byte*) info->lastkey, info->lastkey_length);
|
DBUG_DUMP("old",(uchar*) info->lastkey, info->lastkey_length);
|
||||||
DBUG_DUMP("new",(byte*) key, key_length);
|
DBUG_DUMP("new",(uchar*) key, key_length);
|
||||||
DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
|
DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
|
||||||
|
|
||||||
if (comp_flag & SEARCH_FIND && flag == 0)
|
if (comp_flag & SEARCH_FIND && flag == 0)
|
||||||
mi_check_print_error(param,"Found duplicated key at page %s",llstr(page,llbuff));
|
mi_check_print_error(param,"Found duplicated key at page %s",llstr(page,llbuff));
|
||||||
@ -870,8 +870,8 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
|||||||
DBUG_PRINT("test",("page: %s record: %s filelength: %s",
|
DBUG_PRINT("test",("page: %s record: %s filelength: %s",
|
||||||
llstr(page,llbuff),llstr(record,llbuff2),
|
llstr(page,llbuff),llstr(record,llbuff2),
|
||||||
llstr(info->state->data_file_length,llbuff3)));
|
llstr(info->state->data_file_length,llbuff3)));
|
||||||
DBUG_DUMP("key",(byte*) key,key_length);
|
DBUG_DUMP("key",(uchar*) key,key_length);
|
||||||
DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
|
DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
param->record_checksum+=(ha_checksum) record;
|
param->record_checksum+=(ha_checksum) record;
|
||||||
@ -1631,7 +1631,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
|
|||||||
{
|
{
|
||||||
if (my_errno != HA_ERR_FOUND_DUPP_KEY)
|
if (my_errno != HA_ERR_FOUND_DUPP_KEY)
|
||||||
goto err;
|
goto err;
|
||||||
DBUG_DUMP("record",(byte*) sort_param.record,share->base.pack_reclength);
|
DBUG_DUMP("record",(uchar*) sort_param.record,share->base.pack_reclength);
|
||||||
mi_check_print_info(param,"Duplicate key %2d for record at %10s against new record at %10s",
|
mi_check_print_info(param,"Duplicate key %2d for record at %10s against new record at %10s",
|
||||||
info->errkey+1,
|
info->errkey+1,
|
||||||
llstr(sort_param.start_recpos,llbuff),
|
llstr(sort_param.start_recpos,llbuff),
|
||||||
@ -1935,7 +1935,7 @@ int mi_sort_index(MI_CHECK *param, register MI_INFO *info, my_string name)
|
|||||||
for (key= 0,keyinfo= &share->keyinfo[0]; key < share->base.keys ;
|
for (key= 0,keyinfo= &share->keyinfo[0]; key < share->base.keys ;
|
||||||
key++,keyinfo++)
|
key++,keyinfo++)
|
||||||
if (keyinfo->key_alg == HA_KEY_ALG_RTREE)
|
if (keyinfo->key_alg == HA_KEY_ALG_RTREE)
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
if (!(param->testflag & T_SILENT))
|
if (!(param->testflag & T_SILENT))
|
||||||
printf("- Sorting index for MyISAM-table '%s'\n",name);
|
printf("- Sorting index for MyISAM-table '%s'\n",name);
|
||||||
@ -2062,7 +2062,7 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
|||||||
("From page: %ld, keyoffset: %lu used_length: %d",
|
("From page: %ld, keyoffset: %lu used_length: %d",
|
||||||
(ulong) pagepos, (ulong) (keypos - buff),
|
(ulong) pagepos, (ulong) (keypos - buff),
|
||||||
(int) used_length));
|
(int) used_length));
|
||||||
DBUG_DUMP("buff",(byte*) buff,used_length);
|
DBUG_DUMP("buff",(uchar*) buff,used_length);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4024,7 +4024,7 @@ static int sort_insert_key(MI_SORT_PARAM *sort_param,
|
|||||||
else if (my_pwrite(info->s->kfile,(byte*) anc_buff,
|
else if (my_pwrite(info->s->kfile,(byte*) anc_buff,
|
||||||
(uint) keyinfo->block_length,filepos, param->myf_rw))
|
(uint) keyinfo->block_length,filepos, param->myf_rw))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
DBUG_DUMP("buff",(byte*) anc_buff,mi_getint(anc_buff));
|
DBUG_DUMP("buff",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||||
|
|
||||||
/* Write separator-key to block in next level */
|
/* Write separator-key to block in next level */
|
||||||
if (sort_insert_key(sort_param,key_block+1,key_block->lastkey,filepos))
|
if (sort_insert_key(sort_param,key_block+1,key_block->lastkey,filepos))
|
||||||
@ -4129,7 +4129,7 @@ int flush_pending_blocks(MI_SORT_PARAM *sort_param)
|
|||||||
else if (my_pwrite(info->s->kfile,(byte*) key_block->buff,
|
else if (my_pwrite(info->s->kfile,(byte*) key_block->buff,
|
||||||
(uint) keyinfo->block_length,filepos, myf_rw))
|
(uint) keyinfo->block_length,filepos, myf_rw))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
DBUG_DUMP("buff",(byte*) key_block->buff,length);
|
DBUG_DUMP("buff",(uchar*) key_block->buff,length);
|
||||||
nod_flag=1;
|
nod_flag=1;
|
||||||
}
|
}
|
||||||
info->s->state.key_root[sort_param->key]=filepos; /* Last is root for tree */
|
info->s->state.key_root[sort_param->key]=filepos; /* Last is root for tree */
|
||||||
|
@ -223,7 +223,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
my_off_t leaf_page,next_block;
|
my_off_t leaf_page,next_block;
|
||||||
uchar lastkey[MI_MAX_KEY_BUFF];
|
uchar lastkey[MI_MAX_KEY_BUFF];
|
||||||
DBUG_ENTER("d_search");
|
DBUG_ENTER("d_search");
|
||||||
DBUG_DUMP("page",(byte*) anc_buff,mi_getint(anc_buff));
|
DBUG_DUMP("page",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||||
|
|
||||||
search_key_length= (comp_flag & SEARCH_FIND) ? key_length : USE_WHOLE_KEY;
|
search_key_length= (comp_flag & SEARCH_FIND) ? key_length : USE_WHOLE_KEY;
|
||||||
flag=(*keyinfo->bin_search)(info,keyinfo,anc_buff,key, search_key_length,
|
flag=(*keyinfo->bin_search)(info,keyinfo,anc_buff,key, search_key_length,
|
||||||
@ -381,7 +381,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
ret_value|=_mi_write_keypage(info,keyinfo,page,DFLT_INIT_HITS,anc_buff);
|
ret_value|=_mi_write_keypage(info,keyinfo,page,DFLT_INIT_HITS,anc_buff);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBUG_DUMP("page",(byte*) anc_buff,mi_getint(anc_buff));
|
DBUG_DUMP("page",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||||
}
|
}
|
||||||
my_afree((byte*) leaf_buff);
|
my_afree((byte*) leaf_buff);
|
||||||
DBUG_PRINT("exit",("Return: %d",ret_value));
|
DBUG_PRINT("exit",("Return: %d",ret_value));
|
||||||
@ -411,7 +411,7 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
DBUG_ENTER("del");
|
DBUG_ENTER("del");
|
||||||
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx", (long) leaf_page,
|
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx", (long) leaf_page,
|
||||||
(ulong) keypos));
|
(ulong) keypos));
|
||||||
DBUG_DUMP("leaf_buff",(byte*) leaf_buff,mi_getint(leaf_buff));
|
DBUG_DUMP("leaf_buff",(uchar*) leaf_buff,mi_getint(leaf_buff));
|
||||||
|
|
||||||
endpos=leaf_buff+mi_getint(leaf_buff);
|
endpos=leaf_buff+mi_getint(leaf_buff);
|
||||||
if (!(key_start=_mi_get_last_key(info,keyinfo,leaf_buff,keybuff,endpos,
|
if (!(key_start=_mi_get_last_key(info,keyinfo,leaf_buff,keybuff,endpos,
|
||||||
@ -428,7 +428,7 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
ret_value= -1;
|
ret_value= -1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBUG_DUMP("next_page",(byte*) next_buff,mi_getint(next_buff));
|
DBUG_DUMP("next_page",(uchar*) next_buff,mi_getint(next_buff));
|
||||||
if ((ret_value=del(info,keyinfo,key,anc_buff,next_page,next_buff,
|
if ((ret_value=del(info,keyinfo,key,anc_buff,next_page,next_buff,
|
||||||
keypos,next_block,ret_key)) >0)
|
keypos,next_block,ret_key)) >0)
|
||||||
{
|
{
|
||||||
@ -517,8 +517,8 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
DBUG_ENTER("underflow");
|
DBUG_ENTER("underflow");
|
||||||
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx",(long) leaf_page,
|
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx",(long) leaf_page,
|
||||||
(ulong) keypos));
|
(ulong) keypos));
|
||||||
DBUG_DUMP("anc_buff",(byte*) anc_buff,mi_getint(anc_buff));
|
DBUG_DUMP("anc_buff",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||||
DBUG_DUMP("leaf_buff",(byte*) leaf_buff,mi_getint(leaf_buff));
|
DBUG_DUMP("leaf_buff",(uchar*) leaf_buff,mi_getint(leaf_buff));
|
||||||
|
|
||||||
buff=info->buff;
|
buff=info->buff;
|
||||||
info->buff_used=1;
|
info->buff_used=1;
|
||||||
@ -554,7 +554,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,buff,0))
|
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,buff,0))
|
||||||
goto err;
|
goto err;
|
||||||
buff_length=mi_getint(buff);
|
buff_length=mi_getint(buff);
|
||||||
DBUG_DUMP("next",(byte*) buff,buff_length);
|
DBUG_DUMP("next",(uchar*) buff,buff_length);
|
||||||
|
|
||||||
/* find keys to make a big key-page */
|
/* find keys to make a big key-page */
|
||||||
bmove((byte*) next_keypos-key_reflength,(byte*) buff+2,
|
bmove((byte*) next_keypos-key_reflength,(byte*) buff+2,
|
||||||
@ -659,7 +659,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
goto err;
|
goto err;
|
||||||
buff_length=mi_getint(buff);
|
buff_length=mi_getint(buff);
|
||||||
endpos=buff+buff_length;
|
endpos=buff+buff_length;
|
||||||
DBUG_DUMP("prev",(byte*) buff,buff_length);
|
DBUG_DUMP("prev",(uchar*) buff,buff_length);
|
||||||
|
|
||||||
/* find keys to make a big key-page */
|
/* find keys to make a big key-page */
|
||||||
bmove((byte*) next_keypos - key_reflength,(byte*) leaf_buff+2,
|
bmove((byte*) next_keypos - key_reflength,(byte*) leaf_buff+2,
|
||||||
@ -715,8 +715,8 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
goto err;
|
goto err;
|
||||||
_mi_kpointer(info,leaf_key+key_length,leaf_page);
|
_mi_kpointer(info,leaf_key+key_length,leaf_page);
|
||||||
/* Save key in anc_buff */
|
/* Save key in anc_buff */
|
||||||
DBUG_DUMP("anc_buff",(byte*) anc_buff,anc_length);
|
DBUG_DUMP("anc_buff",(uchar*) anc_buff,anc_length);
|
||||||
DBUG_DUMP("key_to_anc",(byte*) leaf_key,key_length);
|
DBUG_DUMP("key_to_anc",(uchar*) leaf_key,key_length);
|
||||||
|
|
||||||
temp_pos=anc_buff+anc_length;
|
temp_pos=anc_buff+anc_length;
|
||||||
t_length=(*keyinfo->pack_key)(keyinfo,key_reflength,
|
t_length=(*keyinfo->pack_key)(keyinfo,key_reflength,
|
||||||
@ -737,7 +737,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
bmove((byte*) leaf_buff+2,(byte*) half_pos-nod_flag,(size_t) nod_flag);
|
bmove((byte*) leaf_buff+2,(byte*) half_pos-nod_flag,(size_t) nod_flag);
|
||||||
if (!(length=(*keyinfo->get_key)(keyinfo,nod_flag,&half_pos,leaf_key)))
|
if (!(length=(*keyinfo->get_key)(keyinfo,nod_flag,&half_pos,leaf_key)))
|
||||||
goto err;
|
goto err;
|
||||||
DBUG_DUMP("key_to_leaf",(byte*) leaf_key,length);
|
DBUG_DUMP("key_to_leaf",(uchar*) leaf_key,length);
|
||||||
t_length=(*keyinfo->pack_key)(keyinfo,nod_flag, (uchar*) 0,
|
t_length=(*keyinfo->pack_key)(keyinfo,nod_flag, (uchar*) 0,
|
||||||
(uchar*) 0, (uchar*) 0, leaf_key, &s_temp);
|
(uchar*) 0, (uchar*) 0, leaf_key, &s_temp);
|
||||||
length=(uint) ((buff+buff_length)-half_pos);
|
length=(uint) ((buff+buff_length)-half_pos);
|
||||||
|
@ -509,7 +509,7 @@ int _mi_write_part_record(MI_INFO *info,
|
|||||||
}
|
}
|
||||||
length= *reclength+head_length; /* Write only what is needed */
|
length= *reclength+head_length; /* Write only what is needed */
|
||||||
}
|
}
|
||||||
DBUG_DUMP("header",(byte*) temp,head_length);
|
DBUG_DUMP("header",(uchar*) temp,head_length);
|
||||||
|
|
||||||
/* Make a long block for one write */
|
/* Make a long block for one write */
|
||||||
record_end= *record+length-head_length;
|
record_end= *record+length-head_length;
|
||||||
@ -1137,7 +1137,7 @@ err:
|
|||||||
my_errno= HA_ERR_WRONG_IN_RECORD;
|
my_errno= HA_ERR_WRONG_IN_RECORD;
|
||||||
DBUG_PRINT("error",("to_end: 0x%lx -> 0x%lx from_end: 0x%lx -> 0x%lx",
|
DBUG_PRINT("error",("to_end: 0x%lx -> 0x%lx from_end: 0x%lx -> 0x%lx",
|
||||||
(long) to, (long) to_end, (long) from, (long) from_end));
|
(long) to, (long) to_end, (long) from, (long) from_end));
|
||||||
DBUG_DUMP("from",(byte*) info->rec_buff,info->s->base.min_pack_length);
|
DBUG_DUMP("from",(uchar*) info->rec_buff,info->s->base.min_pack_length);
|
||||||
DBUG_RETURN(MY_FILE_ERROR);
|
DBUG_RETURN(MY_FILE_ERROR);
|
||||||
} /* _mi_rec_unpack */
|
} /* _mi_rec_unpack */
|
||||||
|
|
||||||
@ -1698,7 +1698,7 @@ uint _mi_get_block_info(MI_BLOCK_INFO *info, File file, my_off_t filepos)
|
|||||||
sizeof(info->header))
|
sizeof(info->header))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
DBUG_DUMP("header",(byte*) header,MI_BLOCK_INFO_HEADER_LENGTH);
|
DBUG_DUMP("header",(uchar*) header,MI_BLOCK_INFO_HEADER_LENGTH);
|
||||||
if (info->second_read)
|
if (info->second_read)
|
||||||
{
|
{
|
||||||
if (info->header[0] <= 6 || info->header[0] == 13)
|
if (info->header[0] <= 6 || info->header[0] == 13)
|
||||||
|
@ -189,7 +189,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
|
|||||||
}
|
}
|
||||||
_mi_dpointer(info,key,filepos);
|
_mi_dpointer(info,key,filepos);
|
||||||
DBUG_PRINT("exit",("keynr: %d",keynr));
|
DBUG_PRINT("exit",("keynr: %d",keynr));
|
||||||
DBUG_DUMP("key",(byte*) start,(uint) (key-start)+keyseg->length);
|
DBUG_DUMP("key",(uchar*) start,(uint) (key-start)+keyseg->length);
|
||||||
DBUG_EXECUTE("key",
|
DBUG_EXECUTE("key",
|
||||||
_mi_print_key(DBUG_FILE,info->s->keyinfo[keynr].seg,start,
|
_mi_print_key(DBUG_FILE,info->s->keyinfo[keynr].seg,start,
|
||||||
(uint) (key-start)););
|
(uint) (key-start)););
|
||||||
|
@ -158,4 +158,5 @@ void mi_change_key_cache(KEY_CACHE *old_key_cache,
|
|||||||
*/
|
*/
|
||||||
multi_key_cache_change(old_key_cache, new_key_cache);
|
multi_key_cache_change(old_key_cache, new_key_cache);
|
||||||
pthread_mutex_unlock(&THR_LOCK_myisam);
|
pthread_mutex_unlock(&THR_LOCK_myisam);
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||||||
(byte*) myisam_file_magic, 4))
|
(byte*) myisam_file_magic, 4))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Wrong header in %s",name_buff));
|
DBUG_PRINT("error",("Wrong header in %s",name_buff));
|
||||||
DBUG_DUMP("error_dump",(char*) share->state.header.file_version,
|
DBUG_DUMP("error_dump",(uchar*) share->state.header.file_version,
|
||||||
head_length);
|
head_length);
|
||||||
my_errno=HA_ERR_NOT_A_TABLE;
|
my_errno=HA_ERR_NOT_A_TABLE;
|
||||||
goto err;
|
goto err;
|
||||||
@ -196,7 +196,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||||||
if (len != MI_BASE_INFO_SIZE)
|
if (len != MI_BASE_INFO_SIZE)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("warning",("saved_base_info_length: %d base_info_length: %d",
|
DBUG_PRINT("warning",("saved_base_info_length: %d base_info_length: %d",
|
||||||
len,MI_BASE_INFO_SIZE))
|
len,MI_BASE_INFO_SIZE));
|
||||||
}
|
}
|
||||||
disk_pos= (char*)
|
disk_pos= (char*)
|
||||||
my_n_base_info_read((uchar*) disk_cache + base_pos, &share->base);
|
my_n_base_info_read((uchar*) disk_cache + base_pos, &share->base);
|
||||||
@ -270,6 +270,9 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||||||
if (share->options & HA_OPTION_COMPRESS_RECORD)
|
if (share->options & HA_OPTION_COMPRESS_RECORD)
|
||||||
share->base.max_key_length+=2; /* For safety */
|
share->base.max_key_length+=2; /* For safety */
|
||||||
|
|
||||||
|
/* Add space for node pointer */
|
||||||
|
share->base.max_key_length+= share->base.key_reflength;
|
||||||
|
|
||||||
if (!my_multi_malloc(MY_WME,
|
if (!my_multi_malloc(MY_WME,
|
||||||
&share,sizeof(*share),
|
&share,sizeof(*share),
|
||||||
&share->state.rec_per_key_part,sizeof(long)*key_parts,
|
&share->state.rec_per_key_part,sizeof(long)*key_parts,
|
||||||
@ -791,8 +794,17 @@ static void setup_key_functions(register MI_KEYDEF *keyinfo)
|
|||||||
keyinfo->get_key= _mi_get_pack_key;
|
keyinfo->get_key= _mi_get_pack_key;
|
||||||
if (keyinfo->seg[0].flag & HA_PACK_KEY)
|
if (keyinfo->seg[0].flag & HA_PACK_KEY)
|
||||||
{ /* Prefix compression */
|
{ /* Prefix compression */
|
||||||
|
/*
|
||||||
|
_mi_prefix_search() compares end-space against ASCII blank (' ').
|
||||||
|
It cannot be used for character sets, that do not encode the
|
||||||
|
blank character like ASCII does. UCS2 is an example. All
|
||||||
|
character sets with a fixed width > 1 or a mimimum width > 1
|
||||||
|
cannot represent blank like ASCII does. In these cases we have
|
||||||
|
to use _mi_seq_search() for the search.
|
||||||
|
*/
|
||||||
if (!keyinfo->seg->charset || use_strnxfrm(keyinfo->seg->charset) ||
|
if (!keyinfo->seg->charset || use_strnxfrm(keyinfo->seg->charset) ||
|
||||||
(keyinfo->seg->flag & HA_NULL_PART))
|
(keyinfo->seg->flag & HA_NULL_PART) ||
|
||||||
|
(keyinfo->seg->charset->mbminlen > 1))
|
||||||
keyinfo->bin_search=_mi_seq_search;
|
keyinfo->bin_search=_mi_seq_search;
|
||||||
else
|
else
|
||||||
keyinfo->bin_search=_mi_prefix_search;
|
keyinfo->bin_search=_mi_prefix_search;
|
||||||
|
@ -1368,7 +1368,7 @@ uint _mi_pack_get_block_info(MI_INFO *myisam, MI_BIT_BUFF *bit_buff,
|
|||||||
VOID(my_seek(file,filepos,MY_SEEK_SET,MYF(0)));
|
VOID(my_seek(file,filepos,MY_SEEK_SET,MYF(0)));
|
||||||
if (my_read(file,(char*) header,ref_length,MYF(MY_NABP)))
|
if (my_read(file,(char*) header,ref_length,MYF(MY_NABP)))
|
||||||
return BLOCK_FATAL_ERROR;
|
return BLOCK_FATAL_ERROR;
|
||||||
DBUG_DUMP("header",(byte*) header,ref_length);
|
DBUG_DUMP("header",(uchar*) header,ref_length);
|
||||||
}
|
}
|
||||||
head_length= read_pack_length((uint) myisam->s->pack.version, header,
|
head_length= read_pack_length((uint) myisam->s->pack.version, header,
|
||||||
&info->rec_len);
|
&info->rec_len);
|
||||||
|
@ -49,7 +49,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
|||||||
{
|
{
|
||||||
DBUG_PRINT("error",("page %lu had wrong page length: %u",
|
DBUG_PRINT("error",("page %lu had wrong page length: %u",
|
||||||
(ulong) page, page_size));
|
(ulong) page, page_size));
|
||||||
DBUG_DUMP("page", (char*) tmp, keyinfo->block_length);
|
DBUG_DUMP("page", (uchar*) tmp, keyinfo->block_length);
|
||||||
info->last_keypage = HA_OFFSET_ERROR;
|
info->last_keypage = HA_OFFSET_ERROR;
|
||||||
mi_print_error(info->s, HA_ERR_CRASHED);
|
mi_print_error(info->s, HA_ERR_CRASHED);
|
||||||
my_errno = HA_ERR_CRASHED;
|
my_errno = HA_ERR_CRASHED;
|
||||||
@ -80,7 +80,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
DBUG_RETURN((-1));
|
DBUG_RETURN((-1));
|
||||||
}
|
}
|
||||||
DBUG_PRINT("page",("write page at: %lu",(long) page));
|
DBUG_PRINT("page",("write page at: %lu",(long) page));
|
||||||
DBUG_DUMP("buff",(byte*) buff,mi_getint(buff));
|
DBUG_DUMP("buff",(uchar*) buff,mi_getint(buff));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((length=keyinfo->block_length) > IO_SIZE*2 &&
|
if ((length=keyinfo->block_length) > IO_SIZE*2 &&
|
||||||
|
@ -78,7 +78,7 @@ int _mi_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
if (!(buff=_mi_fetch_keypage(info,keyinfo,pos,DFLT_INIT_HITS,info->buff,
|
if (!(buff=_mi_fetch_keypage(info,keyinfo,pos,DFLT_INIT_HITS,info->buff,
|
||||||
test(!(nextflag & SEARCH_SAVE_BUFF)))))
|
test(!(nextflag & SEARCH_SAVE_BUFF)))))
|
||||||
goto err;
|
goto err;
|
||||||
DBUG_DUMP("page",(byte*) buff,mi_getint(buff));
|
DBUG_DUMP("page",(uchar*) buff,mi_getint(buff));
|
||||||
|
|
||||||
flag=(*keyinfo->bin_search)(info,keyinfo,buff,key,key_len,nextflag,
|
flag=(*keyinfo->bin_search)(info,keyinfo,buff,key,key_len,nextflag,
|
||||||
&keypos,lastkey, &last_key);
|
&keypos,lastkey, &last_key);
|
||||||
@ -814,7 +814,7 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
DBUG_PRINT("error",
|
DBUG_PRINT("error",
|
||||||
("Found too long null packed key: %u of %u at %lx",
|
("Found too long null packed key: %u of %u at %lx",
|
||||||
length, keyseg->length, (long) *page_pos));
|
length, keyseg->length, (long) *page_pos));
|
||||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
DBUG_DUMP("key",(uchar*) *page_pos,16);
|
||||||
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
return 0;
|
return 0;
|
||||||
@ -871,7 +871,7 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Found too long packed key: %u of %u at %lx",
|
DBUG_PRINT("error",("Found too long packed key: %u of %u at %lx",
|
||||||
length, keyseg->length, (long) *page_pos));
|
length, keyseg->length, (long) *page_pos));
|
||||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
DBUG_DUMP("key",(uchar*) *page_pos,16);
|
||||||
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
return 0; /* Error */
|
return 0; /* Error */
|
||||||
@ -942,7 +942,7 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %lx",
|
DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %lx",
|
||||||
length, keyinfo->maxlength, (long) *page_pos));
|
length, keyinfo->maxlength, (long) *page_pos));
|
||||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
DBUG_DUMP("key",(uchar*) *page_pos,16);
|
||||||
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
DBUG_RETURN(0); /* Wrong key */
|
DBUG_RETURN(0); /* Wrong key */
|
||||||
|
@ -137,8 +137,8 @@ int _mi_cmp_static_record(register MI_INFO *info, register const byte *old)
|
|||||||
if (memcmp((byte*) info->rec_buff, (byte*) old,
|
if (memcmp((byte*) info->rec_buff, (byte*) old,
|
||||||
(uint) info->s->base.reclength))
|
(uint) info->s->base.reclength))
|
||||||
{
|
{
|
||||||
DBUG_DUMP("read",old,info->s->base.reclength);
|
DBUG_DUMP("read",(uchar *)old,info->s->base.reclength);
|
||||||
DBUG_DUMP("disk",info->rec_buff,info->s->base.reclength);
|
DBUG_DUMP("disk",(uchar *)info->rec_buff,info->s->base.reclength);
|
||||||
my_errno=HA_ERR_RECORD_CHANGED; /* Record have changed */
|
my_errno=HA_ERR_RECORD_CHANGED; /* Record have changed */
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
@ -647,7 +647,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
printf("test1 Ver 1.2 \n");
|
printf("test1 Ver 1.2 \n");
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (argument);
|
DBUG_PUSH (argument);
|
||||||
break;
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
|
@ -449,8 +449,8 @@ int main(int argc, char *argv[])
|
|||||||
bcmp(read_record2,read_record3,reclength))
|
bcmp(read_record2,read_record3,reclength))
|
||||||
{
|
{
|
||||||
printf("Can't find last record\n");
|
printf("Can't find last record\n");
|
||||||
DBUG_DUMP("record2",(byte*) read_record2,reclength);
|
DBUG_DUMP("record2",(uchar*) read_record2,reclength);
|
||||||
DBUG_DUMP("record3",(byte*) read_record3,reclength);
|
DBUG_DUMP("record3",(uchar*) read_record3,reclength);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
ant=1;
|
ant=1;
|
||||||
@ -863,7 +863,6 @@ err:
|
|||||||
static void get_options(int argc, char **argv)
|
static void get_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *pos,*progname;
|
char *pos,*progname;
|
||||||
DEBUGGER_OFF;
|
|
||||||
|
|
||||||
progname= argv[0];
|
progname= argv[0];
|
||||||
|
|
||||||
@ -976,7 +975,6 @@ static void get_options(int argc, char **argv)
|
|||||||
progname);
|
progname);
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (++pos);
|
DBUG_PUSH (++pos);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -119,7 +119,6 @@ int main(int argc,char **argv)
|
|||||||
static void get_options(int argc, char **argv)
|
static void get_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *pos,*progname;
|
char *pos,*progname;
|
||||||
DEBUGGER_OFF;
|
|
||||||
|
|
||||||
progname= argv[0];
|
progname= argv[0];
|
||||||
|
|
||||||
@ -149,7 +148,6 @@ static void get_options(int argc, char **argv)
|
|||||||
printf("Usage: %s [-?lKA] [-f#] [-t#]\n",progname);
|
printf("Usage: %s [-?lKA] [-f#] [-t#]\n",progname);
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (++pos);
|
DBUG_PUSH (++pos);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -476,7 +476,7 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
if (key_pos != anc_buff+2+nod_flag && (keyinfo->flag &
|
if (key_pos != anc_buff+2+nod_flag && (keyinfo->flag &
|
||||||
(HA_BINARY_PACK_KEY | HA_PACK_KEY)))
|
(HA_BINARY_PACK_KEY | HA_PACK_KEY)))
|
||||||
{
|
{
|
||||||
DBUG_DUMP("prev_key",(byte*) key_buff,_mi_keylength(keyinfo,key_buff));
|
DBUG_DUMP("prev_key",(uchar*) key_buff,_mi_keylength(keyinfo,key_buff));
|
||||||
}
|
}
|
||||||
if (keyinfo->flag & HA_PACK_KEY)
|
if (keyinfo->flag & HA_PACK_KEY)
|
||||||
{
|
{
|
||||||
@ -583,7 +583,7 @@ int _mi_split_page(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
MI_KEY_PARAM s_temp;
|
MI_KEY_PARAM s_temp;
|
||||||
DBUG_ENTER("mi_split_page");
|
DBUG_ENTER("mi_split_page");
|
||||||
LINT_INIT(after_key);
|
LINT_INIT(after_key);
|
||||||
DBUG_DUMP("buff",(byte*) buff,mi_getint(buff));
|
DBUG_DUMP("buff",(uchar*) buff,mi_getint(buff));
|
||||||
|
|
||||||
if (info->s->keyinfo+info->lastinx == keyinfo)
|
if (info->s->keyinfo+info->lastinx == keyinfo)
|
||||||
info->page_changed=1; /* Info->buff is used */
|
info->page_changed=1; /* Info->buff is used */
|
||||||
@ -630,7 +630,7 @@ int _mi_split_page(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
|
|
||||||
if (_mi_write_keypage(info,keyinfo,new_pos,DFLT_INIT_HITS,info->buff))
|
if (_mi_write_keypage(info,keyinfo,new_pos,DFLT_INIT_HITS,info->buff))
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
DBUG_DUMP("key",(byte*) key,_mi_keylength(keyinfo,key));
|
DBUG_DUMP("key",(uchar*) key,_mi_keylength(keyinfo,key));
|
||||||
DBUG_RETURN(2); /* Middle key up */
|
DBUG_RETURN(2); /* Middle key up */
|
||||||
} /* _mi_split_page */
|
} /* _mi_split_page */
|
||||||
|
|
||||||
@ -784,7 +784,7 @@ static int _mi_balance_page(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
|||||||
|
|
||||||
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,info->buff,0))
|
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,info->buff,0))
|
||||||
goto err;
|
goto err;
|
||||||
DBUG_DUMP("next",(byte*) info->buff,mi_getint(info->buff));
|
DBUG_DUMP("next",(uchar*) info->buff,mi_getint(info->buff));
|
||||||
|
|
||||||
/* Test if there is room to share keys */
|
/* Test if there is room to share keys */
|
||||||
|
|
||||||
|
@ -92,6 +92,6 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key,
|
|||||||
mi->once_flags|= RRND_PRESERVE_LASTINX;
|
mi->once_flags|= RRND_PRESERVE_LASTINX;
|
||||||
DBUG_PRINT("info", ("using table no: %d",
|
DBUG_PRINT("info", ("using table no: %d",
|
||||||
(int) (info->current_table - info->open_tables + 1)));
|
(int) (info->current_table - info->open_tables + 1)));
|
||||||
DBUG_DUMP("result key", (byte*) mi->lastkey, mi->lastkey_length);
|
DBUG_DUMP("result key", (uchar*) mi->lastkey, mi->lastkey_length);
|
||||||
DBUG_RETURN(_myrg_mi_read_record(mi,buf));
|
DBUG_RETURN(_myrg_mi_read_record(mi,buf));
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,8 @@ dist-hook:
|
|||||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||||
$(distdir)/std_data \
|
$(distdir)/std_data \
|
||||||
$(distdir)/std_data/ndb_backup50_data_be $(distdir)/std_data/ndb_backup50_data_le \
|
$(distdir)/std_data/ndb_backup50_data_be $(distdir)/std_data/ndb_backup50_data_le \
|
||||||
$(distdir)/lib
|
$(distdir)/lib \
|
||||||
|
$(distdir)/std_data/funcs_1
|
||||||
-$(INSTALL_DATA) $(srcdir)/t/*.def $(distdir)/t
|
-$(INSTALL_DATA) $(srcdir)/t/*.def $(distdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
|
||||||
-$(INSTALL_DATA) $(srcdir)/t/*.imtest $(distdir)/t
|
-$(INSTALL_DATA) $(srcdir)/t/*.imtest $(distdir)/t
|
||||||
@ -66,6 +67,7 @@ dist-hook:
|
|||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(distdir)/std_data/ndb_backup50_data_be
|
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(distdir)/std_data/ndb_backup50_data_be
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(distdir)/std_data/ndb_backup50_data_le
|
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(distdir)/std_data/ndb_backup50_data_le
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/funcs_1/* $(distdir)/std_data/funcs_1
|
||||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
||||||
-rm -rf `find $(distdir)/suite -type d -name SCCS`
|
-rm -rf `find $(distdir)/suite -type d -name SCCS`
|
||||||
|
|
||||||
@ -77,7 +79,8 @@ install-data-local:
|
|||||||
$(DESTDIR)$(testdir)/std_data \
|
$(DESTDIR)$(testdir)/std_data \
|
||||||
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \
|
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \
|
||||||
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le \
|
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le \
|
||||||
$(DESTDIR)$(testdir)/lib
|
$(DESTDIR)$(testdir)/lib \
|
||||||
|
$(DESTDIR)$(testdir)/std_data/funcs_1
|
||||||
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
||||||
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
|
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
||||||
@ -103,6 +106,7 @@ install-data-local:
|
|||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be
|
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le
|
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/funcs_1/* $(DESTDIR)$(testdir)/std_data/funcs_1
|
||||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
|
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
|
||||||
for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
|
for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
|
||||||
do \
|
do \
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -62,8 +64,22 @@ select a sounds like a from t1;
|
|||||||
select 1 from t1 order by cast(a as char(1));
|
select 1 from t1 order by cast(a as char(1));
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#27580 SPACE() function collation bug?
|
||||||
|
#
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
# Restore settings
|
# Restore settings
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
|
25
mysql-test/include/ctype_like_range_f1f2.inc
Normal file
25
mysql-test/include/ctype_like_range_f1f2.inc
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#
|
||||||
|
# Bug#32510 LIKE search fails with indexed 'eucjpms' and 'ujis' char column
|
||||||
|
#
|
||||||
|
# Testing my_ctype_like_range_xxx
|
||||||
|
# (used in LIKE optimization for an indexed column)
|
||||||
|
#
|
||||||
|
|
||||||
|
# Create table using @@character_set_connection and @@collation_connection
|
||||||
|
# for the string columns.
|
||||||
|
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
|
||||||
|
# Check pattern (important for ucs2, utf16, utf32)
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
|
||||||
|
--echo 3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
DROP TABLE t1;
|
3
mysql-test/include/show_binary_logs.inc
Normal file
3
mysql-test/include/show_binary_logs.inc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
--replace_column 2 #
|
||||||
|
show binary logs;
|
@ -1,4 +1,10 @@
|
|||||||
--let $binlog_start=98
|
# $binlog_start can be set by caller or take a default value
|
||||||
--replace_column 5 #
|
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\//
|
if (!$binlog_start)
|
||||||
|
{
|
||||||
|
let $binlog_start=98;
|
||||||
|
}
|
||||||
|
--replace_result $binlog_start <binlog_start>
|
||||||
|
--replace_column 2 # 4 # 5 #
|
||||||
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/
|
||||||
--eval show binlog events from $binlog_start
|
--eval show binlog events from $binlog_start
|
||||||
|
@ -3756,9 +3756,9 @@ sub mysqld_arguments ($$$$) {
|
|||||||
{
|
{
|
||||||
# By default, prevent the started mysqld to access files outside of vardir
|
# By default, prevent the started mysqld to access files outside of vardir
|
||||||
my $secure_file_dir= $opt_vardir;
|
my $secure_file_dir= $opt_vardir;
|
||||||
if ( $opt_suite ne "main" )
|
if ( $opt_suite ne "main" and $opt_suite ne "funcs_1" )
|
||||||
{
|
{
|
||||||
# When running a suite other than default allow the mysqld
|
# When running a suite other than default or funcs_1 allow the mysqld
|
||||||
# access to subdirs of mysql-test/ in order to make it possible
|
# access to subdirs of mysql-test/ in order to make it possible
|
||||||
# to "load data" from the suites data/ directory.
|
# to "load data" from the suites data/ directory.
|
||||||
$secure_file_dir= $glob_mysql_test_dir;
|
$secure_file_dir= $glob_mysql_test_dir;
|
||||||
|
@ -1325,6 +1325,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
39
mysql-test/r/binlog_index.result
Normal file
39
mysql-test/r/binlog_index.result
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
flush logs;
|
||||||
|
flush logs;
|
||||||
|
flush logs;
|
||||||
|
show binary logs;
|
||||||
|
Log_name File_size
|
||||||
|
master-bin.000001 #
|
||||||
|
master-bin.000002 #
|
||||||
|
master-bin.000003 #
|
||||||
|
master-bin.000004 #
|
||||||
|
purge binary logs TO 'master-bin.000004';
|
||||||
|
Warnings:
|
||||||
|
Warning 1477 Being purged log MYSQLTEST_VARDIR/log/master-bin.000001 was not found
|
||||||
|
*** must show a list starting from the 'TO' argument of PURGE ***
|
||||||
|
show binary logs;
|
||||||
|
Log_name File_size
|
||||||
|
master-bin.000004 #
|
||||||
|
reset master;
|
||||||
|
flush logs;
|
||||||
|
flush logs;
|
||||||
|
flush logs;
|
||||||
|
*** must be a warning master-bin.000001 was not found ***
|
||||||
|
Warnings:
|
||||||
|
Warning 1477 Being purged log MYSQLTEST_VARDIR/log/master-bin.000001 was not found
|
||||||
|
*** must show one record, of the active binlog, left in the index file after PURGE ***
|
||||||
|
show binary logs;
|
||||||
|
Log_name File_size
|
||||||
|
master-bin.000004 #
|
||||||
|
reset master;
|
||||||
|
flush logs;
|
||||||
|
flush logs;
|
||||||
|
flush logs;
|
||||||
|
purge binary logs TO 'master-bin.000002';
|
||||||
|
ERROR HY000: Fatal error during log purge
|
||||||
|
show warnings;
|
||||||
|
Level Code Message
|
||||||
|
Error 1377 a problem with deleting MYSQLTEST_VARDIR/log/master-bin.000001; consider examining correspondence of your binlog index file to the actual binlog files
|
||||||
|
Error 1377 Fatal error during log purge
|
||||||
|
reset master;
|
||||||
|
End of tests
|
@ -21,3 +21,19 @@ show status like "binlog_cache_disk_use";
|
|||||||
Variable_name Value
|
Variable_name Value
|
||||||
Binlog_cache_disk_use 1
|
Binlog_cache_disk_use 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
CREATE FUNCTION bug23333()
|
||||||
|
RETURNS int(11)
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SELECT COUNT(*) FROM t1 INTO @a;
|
||||||
|
RETURN @a;
|
||||||
|
END|
|
||||||
|
INSERT INTO t2 VALUES (2),(10+bug23333());
|
||||||
|
SHOW MASTER STATUS;
|
||||||
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
|
# 184136
|
||||||
|
DROP FUNCTION bug23333;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -16,10 +16,10 @@ create table t2 (a int, b int) ENGINE=MyISAM;
|
|||||||
reset master;
|
reset master;
|
||||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
||||||
ERROR 70100: Query execution was interrupted
|
ERROR 70100: Query execution was interrupted
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Begin_load_query 1 # ;file_id=1;block_len=12
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12
|
||||||
master-bin.000001 133 Execute_load_query 1 # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=1
|
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=#
|
||||||
select
|
select
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||||
is not null;
|
is not null;
|
||||||
|
@ -138,3 +138,20 @@ ALTER TABLE t1 DROP INDEX a;
|
|||||||
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
||||||
DELETE FROM t1 WHERE a=10;
|
DELETE FROM t1 WHERE a=10;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
reset master;
|
||||||
|
create table t1 (a int auto_increment, primary key (a)) engine=blackhole;
|
||||||
|
insert into t1 values (11), (NULL), (NULL), (NULL);
|
||||||
|
set insert_id= 3;
|
||||||
|
insert into t1 values (NULL), (33), (NULL);
|
||||||
|
set insert_id= 5;
|
||||||
|
insert into t1 values (55), (NULL);
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int auto_increment, primary key (a)) engine=blackhole
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values (11), (NULL), (NULL), (NULL)
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=3
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values (NULL), (33), (NULL)
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values (55), (NULL)
|
||||||
|
drop table t1;
|
||||||
|
@ -53,3 +53,41 @@ a b
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: ''
|
Warning 1292 Truncated incorrect DOUBLE value: ''
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
CREATE TABLE t1 (b int(2) zerofill, c int(2) zerofill);
|
||||||
|
INSERT INTO t1 (b,c) VALUES (1,2), (1,1), (2,2);
|
||||||
|
SELECT CONCAT(b,c), CONCAT(b,c) = '0101' FROM t1;
|
||||||
|
CONCAT(b,c) CONCAT(b,c) = '0101'
|
||||||
|
0102 0
|
||||||
|
0101 1
|
||||||
|
0202 0
|
||||||
|
EXPLAIN EXTENDED SELECT b,c FROM t1 WHERE b = 1 AND CONCAT(b,c) = '0101';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`b` = 1) and (concat(_binary'01',`test`.`t1`.`c`) = _latin1'0101'))
|
||||||
|
SELECT b,c FROM t1 WHERE b = 1 AND CONCAT(b,c) = '0101';
|
||||||
|
b c
|
||||||
|
01 01
|
||||||
|
CREATE TABLE t2 (a int);
|
||||||
|
INSERT INTO t2 VALUES (1),(2);
|
||||||
|
SELECT a,
|
||||||
|
(SELECT COUNT(*) FROM t1
|
||||||
|
WHERE b = t2.a AND CONCAT(b,c) = CONCAT('0',t2.a,'01')) x
|
||||||
|
FROM t2 ORDER BY a;
|
||||||
|
a x
|
||||||
|
1 1
|
||||||
|
2 0
|
||||||
|
EXPLAIN EXTENDED
|
||||||
|
SELECT a,
|
||||||
|
(SELECT COUNT(*) FROM t1
|
||||||
|
WHERE b = t2.a AND CONCAT(b,c) = CONCAT('0',t2.a,'01')) x
|
||||||
|
FROM t2 ORDER BY a;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using filesort
|
||||||
|
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
|
||||||
|
Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
|
||||||
|
Note 1003 select `test`.`t2`.`a` AS `a`,(select count(0) AS `COUNT(*)` from `test`.`t1` where ((`test`.`t1`.`b` = `test`.`t2`.`a`) and (concat(`test`.`t1`.`b`,`test`.`t1`.`c`) = concat(_latin1'0',`test`.`t2`.`a`,_latin1'01')))) AS `x` from `test`.`t2` order by `test`.`t2`.`a`
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -1532,4 +1532,18 @@ Handler_read_prev 0
|
|||||||
Handler_read_rnd 0
|
Handler_read_rnd 0
|
||||||
Handler_read_rnd_next 7
|
Handler_read_rnd_next 7
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING BTREE (c1));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY (c1) USING BTREE);
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING BTREE (c1) USING HASH) ENGINE=MEMORY;
|
||||||
|
SHOW INDEX FROM t1;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
t1 1 c1 1 c1 NULL 0 NULL NULL YES HASH
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY;
|
||||||
|
SHOW INDEX FROM t1;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -3,6 +3,8 @@ SET @test_character_set= 'big5';
|
|||||||
SET @test_collation= 'big5_chinese_ci';
|
SET @test_collation= 'big5_chinese_ci';
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -69,10 +71,27 @@ select 1 from t1 order by cast(a as char(1));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=big5
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
SET NAMES big5;
|
SET NAMES big5;
|
||||||
SET collation_connection='big5_chinese_ci';
|
SET collation_connection='big5_chinese_ci';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
@ -124,6 +143,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='big5_bin';
|
SET collation_connection='big5_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -174,6 +210,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET NAMES big5;
|
SET NAMES big5;
|
||||||
CREATE TABLE t1 (a text) character set big5;
|
CREATE TABLE t1 (a text) character set big5;
|
||||||
INSERT INTO t1 VALUES ('<27><>');
|
INSERT INTO t1 VALUES ('<27><>');
|
||||||
|
@ -2,6 +2,192 @@ DROP TABLE IF EXISTS t1;
|
|||||||
SHOW COLLATION LIKE 'cp1250_czech_cs';
|
SHOW COLLATION LIKE 'cp1250_czech_cs';
|
||||||
Collation Charset Id Default Compiled Sortlen
|
Collation Charset Id Default Compiled Sortlen
|
||||||
cp1250_czech_cs cp1250 34 Yes 2
|
cp1250_czech_cs cp1250 34 Yes 2
|
||||||
|
SET @test_character_set= 'cp1250';
|
||||||
|
SET @test_collation= 'cp1250_general_ci';
|
||||||
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
|
SET character_set_server= @test_character_set;
|
||||||
|
SET collation_server= @test_collation;
|
||||||
|
CREATE DATABASE d1;
|
||||||
|
USE d1;
|
||||||
|
CREATE TABLE t1 (c CHAR(10), KEY(c));
|
||||||
|
SHOW FULL COLUMNS FROM t1;
|
||||||
|
Field Type Collation Null Key Default Extra Privileges Comment
|
||||||
|
c char(10) cp1250_general_ci YES MUL NULL
|
||||||
|
INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
|
||||||
|
SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
|
||||||
|
want3results
|
||||||
|
aaa
|
||||||
|
aaaa
|
||||||
|
aaaaa
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
|
||||||
|
SHOW FULL COLUMNS FROM t1;
|
||||||
|
Field Type Collation Null Key Default Extra Privileges Comment
|
||||||
|
c1 varchar(15) cp1250_general_ci YES MUL NULL
|
||||||
|
INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
|
||||||
|
SELECT c1 as want3results from t1 where c1 like 'l%';
|
||||||
|
want3results
|
||||||
|
location
|
||||||
|
loberge
|
||||||
|
lotre
|
||||||
|
SELECT c1 as want3results from t1 where c1 like 'lo%';
|
||||||
|
want3results
|
||||||
|
location
|
||||||
|
loberge
|
||||||
|
lotre
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'loc%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'loca%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locat%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locati%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locatio%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'location%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
select 1 from t1 order by cast(a as char(1));
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=cp1250
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
|
DROP DATABASE d1;
|
||||||
|
USE test;
|
||||||
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
|
SET @test_character_set= 'cp1250';
|
||||||
|
SET @test_collation= 'cp1250_czech_cs';
|
||||||
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
|
SET character_set_server= @test_character_set;
|
||||||
|
SET collation_server= @test_collation;
|
||||||
|
CREATE DATABASE d1;
|
||||||
|
USE d1;
|
||||||
|
CREATE TABLE t1 (c CHAR(10), KEY(c));
|
||||||
|
SHOW FULL COLUMNS FROM t1;
|
||||||
|
Field Type Collation Null Key Default Extra Privileges Comment
|
||||||
|
c char(10) cp1250_czech_cs YES MUL NULL
|
||||||
|
INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
|
||||||
|
SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
|
||||||
|
want3results
|
||||||
|
aaa
|
||||||
|
aaaa
|
||||||
|
aaaaa
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
|
||||||
|
SHOW FULL COLUMNS FROM t1;
|
||||||
|
Field Type Collation Null Key Default Extra Privileges Comment
|
||||||
|
c1 varchar(15) cp1250_czech_cs YES MUL NULL
|
||||||
|
INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
|
||||||
|
SELECT c1 as want3results from t1 where c1 like 'l%';
|
||||||
|
want3results
|
||||||
|
location
|
||||||
|
loberge
|
||||||
|
lotre
|
||||||
|
SELECT c1 as want3results from t1 where c1 like 'lo%';
|
||||||
|
want3results
|
||||||
|
location
|
||||||
|
loberge
|
||||||
|
lotre
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'loc%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'loca%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locat%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locati%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locatio%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'location%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
select 1 from t1 order by cast(a as char(1));
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) collate cp1250_czech_cs default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=cp1250 COLLATE=cp1250_czech_cs
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
|
DROP DATABASE d1;
|
||||||
|
USE test;
|
||||||
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
CREATE TABLE t1 (a char(16)) character set cp1250 collate cp1250_czech_cs;
|
CREATE TABLE t1 (a char(16)) character set cp1250 collate cp1250_czech_cs;
|
||||||
INSERT INTO t1 VALUES ('');
|
INSERT INTO t1 VALUES ('');
|
||||||
SELECT a, length(a), a='', a=' ', a=' ' FROM t1;
|
SELECT a, length(a), a='', a=' ', a=' ' FROM t1;
|
||||||
|
@ -6,6 +6,8 @@ SET @test_character_set= 'cp932';
|
|||||||
SET @test_collation= 'cp932_japanese_ci';
|
SET @test_collation= 'cp932_japanese_ci';
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -72,10 +74,27 @@ select 1 from t1 order by cast(a as char(1));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=cp932
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
set names cp932;
|
set names cp932;
|
||||||
set character_set_database = cp932;
|
set character_set_database = cp932;
|
||||||
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932;
|
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932;
|
||||||
@ -11399,6 +11418,23 @@ cp932_japanese_ci 6109
|
|||||||
cp932_japanese_ci 61
|
cp932_japanese_ci 61
|
||||||
cp932_japanese_ci 6120
|
cp932_japanese_ci 6120
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='cp932_bin';
|
SET collation_connection='cp932_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -11409,6 +11445,23 @@ cp932_bin 6109
|
|||||||
cp932_bin 61
|
cp932_bin 61
|
||||||
cp932_bin 6120
|
cp932_bin 6120
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
create table t2 (a char(1));
|
create table t2 (a char(1));
|
||||||
insert into t2 values ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
insert into t2 values ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||||
insert into t2 values ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
insert into t2 values ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||||
|
@ -40,6 +40,6 @@ IN ind DECIMAL(10,2))
|
|||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||||
END
|
END
|
||||||
master-bin.000001 776 Query 1 995 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
master-bin.000001 776 Query 1 987 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
||||||
master-bin.000001 995 Query 1 1084 use `test`; DROP PROCEDURE bug18293
|
master-bin.000001 987 Query 1 1076 use `test`; DROP PROCEDURE bug18293
|
||||||
master-bin.000001 1084 Query 1 1163 use `test`; DROP TABLE t4
|
master-bin.000001 1076 Query 1 1155 use `test`; DROP TABLE t4
|
||||||
|
@ -9809,6 +9809,23 @@ eucjpms_japanese_ci 6109
|
|||||||
eucjpms_japanese_ci 61
|
eucjpms_japanese_ci 61
|
||||||
eucjpms_japanese_ci 6120
|
eucjpms_japanese_ci 6120
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='eucjpms_bin';
|
SET collation_connection='eucjpms_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -9819,6 +9836,23 @@ eucjpms_bin 6109
|
|||||||
eucjpms_bin 61
|
eucjpms_bin 61
|
||||||
eucjpms_bin 6120
|
eucjpms_bin 6120
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
select hex(convert(_eucjpms 0xA5FE41 using ucs2));
|
select hex(convert(_eucjpms 0xA5FE41 using ucs2));
|
||||||
hex(convert(_eucjpms 0xA5FE41 using ucs2))
|
hex(convert(_eucjpms 0xA5FE41 using ucs2))
|
||||||
003F0041
|
003F0041
|
||||||
|
@ -3,6 +3,8 @@ SET @test_character_set= 'euckr';
|
|||||||
SET @test_collation= 'euckr_korean_ci';
|
SET @test_collation= 'euckr_korean_ci';
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -69,10 +71,27 @@ select 1 from t1 order by cast(a as char(1));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=euckr
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
SET NAMES euckr;
|
SET NAMES euckr;
|
||||||
SET collation_connection='euckr_korean_ci';
|
SET collation_connection='euckr_korean_ci';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
@ -124,6 +143,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='euckr_bin';
|
SET collation_connection='euckr_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -174,6 +210,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET NAMES euckr;
|
SET NAMES euckr;
|
||||||
CREATE TABLE t1 (a text) character set euckr;
|
CREATE TABLE t1 (a text) character set euckr;
|
||||||
INSERT INTO t1 VALUES (0xA2E6),(0xFEF7);
|
INSERT INTO t1 VALUES (0xA2E6),(0xFEF7);
|
||||||
|
@ -3,6 +3,8 @@ SET @test_character_set= 'gb2312';
|
|||||||
SET @test_collation= 'gb2312_chinese_ci';
|
SET @test_collation= 'gb2312_chinese_ci';
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -69,10 +71,27 @@ select 1 from t1 order by cast(a as char(1));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=gb2312
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
SET NAMES gb2312;
|
SET NAMES gb2312;
|
||||||
SET collation_connection='gb2312_chinese_ci';
|
SET collation_connection='gb2312_chinese_ci';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
@ -124,6 +143,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='gb2312_bin';
|
SET collation_connection='gb2312_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -174,6 +210,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET NAMES gb2312;
|
SET NAMES gb2312;
|
||||||
CREATE TABLE t1 (a text) character set gb2312;
|
CREATE TABLE t1 (a text) character set gb2312;
|
||||||
INSERT INTO t1 VALUES (0xA2A1),(0xD7FE);
|
INSERT INTO t1 VALUES (0xA2A1),(0xD7FE);
|
||||||
|
@ -3,6 +3,8 @@ SET @test_character_set= 'gbk';
|
|||||||
SET @test_collation= 'gbk_chinese_ci';
|
SET @test_collation= 'gbk_chinese_ci';
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -69,10 +71,27 @@ select 1 from t1 order by cast(a as char(1));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
SET NAMES gbk;
|
SET NAMES gbk;
|
||||||
SET collation_connection='gbk_chinese_ci';
|
SET collation_connection='gbk_chinese_ci';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
@ -124,6 +143,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='gbk_bin';
|
SET collation_connection='gbk_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -174,6 +210,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET NAMES gbk;
|
SET NAMES gbk;
|
||||||
CREATE TABLE t1 (a text) character set gbk;
|
CREATE TABLE t1 (a text) character set gbk;
|
||||||
INSERT INTO t1 VALUES (0xA3A0),(0xA1A1);
|
INSERT INTO t1 VALUES (0xA3A0),(0xA1A1);
|
||||||
|
@ -121,6 +121,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='sjis_bin';
|
SET collation_connection='sjis_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -171,6 +188,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET NAMES sjis;
|
SET NAMES sjis;
|
||||||
SELECT HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\') FROM DUAL;
|
SELECT HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\') FROM DUAL;
|
||||||
HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\')
|
HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>\')
|
||||||
|
@ -2538,6 +2538,8 @@ SET @test_character_set= 'utf8';
|
|||||||
SET @test_collation= 'utf8_swedish_ci';
|
SET @test_collation= 'utf8_swedish_ci';
|
||||||
SET @safe_character_set_server= @@character_set_server;
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
SET @safe_collation_server= @@collation_server;
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
SET character_set_server= @test_character_set;
|
SET character_set_server= @test_character_set;
|
||||||
SET collation_server= @test_collation;
|
SET collation_server= @test_collation;
|
||||||
CREATE DATABASE d1;
|
CREATE DATABASE d1;
|
||||||
@ -2604,10 +2606,27 @@ select 1 from t1 order by cast(a as char(1));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) collate utf8_swedish_ci default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
DROP DATABASE d1;
|
DROP DATABASE d1;
|
||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
create table t1 (a varchar(1)) character set utf8 collate utf8_estonian_ci;
|
create table t1 (a varchar(1)) character set utf8 collate utf8_estonian_ci;
|
||||||
insert into t1 values ('A'),('B'),('C'),('a'),('b'),('c');
|
insert into t1 values ('A'),('B'),('C'),('a'),('b'),('c');
|
||||||
select a, a regexp '[a]' from t1 order by binary a;
|
select a, a regexp '[a]' from t1 order by binary a;
|
||||||
@ -2815,5 +2834,22 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F20025
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
set names utf8;
|
set names utf8;
|
||||||
End for 5.0 tests
|
End for 5.0 tests
|
||||||
|
@ -1,4 +1,97 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
SET @test_character_set= 'ucs2';
|
||||||
|
SET @test_collation= 'ucs2_general_ci';
|
||||||
|
SET @safe_character_set_server= @@character_set_server;
|
||||||
|
SET @safe_collation_server= @@collation_server;
|
||||||
|
SET @safe_character_set_client= @@character_set_client;
|
||||||
|
SET @safe_character_set_results= @@character_set_results;
|
||||||
|
SET character_set_server= @test_character_set;
|
||||||
|
SET collation_server= @test_collation;
|
||||||
|
CREATE DATABASE d1;
|
||||||
|
USE d1;
|
||||||
|
CREATE TABLE t1 (c CHAR(10), KEY(c));
|
||||||
|
SHOW FULL COLUMNS FROM t1;
|
||||||
|
Field Type Collation Null Key Default Extra Privileges Comment
|
||||||
|
c char(10) ucs2_general_ci YES MUL NULL
|
||||||
|
INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
|
||||||
|
SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
|
||||||
|
want3results
|
||||||
|
aaa
|
||||||
|
aaaa
|
||||||
|
aaaaa
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
|
||||||
|
SHOW FULL COLUMNS FROM t1;
|
||||||
|
Field Type Collation Null Key Default Extra Privileges Comment
|
||||||
|
c1 varchar(15) ucs2_general_ci YES MUL NULL
|
||||||
|
INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
|
||||||
|
SELECT c1 as want3results from t1 where c1 like 'l%';
|
||||||
|
want3results
|
||||||
|
location
|
||||||
|
loberge
|
||||||
|
lotre
|
||||||
|
SELECT c1 as want3results from t1 where c1 like 'lo%';
|
||||||
|
want3results
|
||||||
|
location
|
||||||
|
loberge
|
||||||
|
lotre
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'loc%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'loca%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locat%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locati%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'locatio%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
SELECT c1 as want1result from t1 where c1 like 'location%';
|
||||||
|
want1result
|
||||||
|
location
|
||||||
|
DROP TABLE t1;
|
||||||
|
create table t1 (a set('a') not null);
|
||||||
|
insert into t1 values (),();
|
||||||
|
Warnings:
|
||||||
|
Warning 1364 Field 'a' doesn't have a default value
|
||||||
|
select cast(a as char(1)) from t1;
|
||||||
|
cast(a as char(1))
|
||||||
|
|
||||||
|
|
||||||
|
select a sounds like a from t1;
|
||||||
|
a sounds like a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
select 1 from t1 order by cast(a as char(1));
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
|
set names utf8;
|
||||||
|
create table t1 (
|
||||||
|
name varchar(10),
|
||||||
|
level smallint unsigned);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`name` varchar(10) default NULL,
|
||||||
|
`level` smallint(5) unsigned default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=ucs2
|
||||||
|
insert into t1 values ('string',1);
|
||||||
|
select concat(name,space(level)), concat(name, repeat(' ',level)) from t1;
|
||||||
|
concat(name,space(level)) concat(name, repeat(' ',level))
|
||||||
|
string string
|
||||||
|
drop table t1;
|
||||||
|
DROP DATABASE d1;
|
||||||
|
USE test;
|
||||||
|
SET character_set_server= @safe_character_set_server;
|
||||||
|
SET collation_server= @safe_collation_server;
|
||||||
|
SET character_set_client= @safe_character_set_client;
|
||||||
|
SET character_set_results= @safe_character_set_results;
|
||||||
SET NAMES latin1;
|
SET NAMES latin1;
|
||||||
SET character_set_connection=ucs2;
|
SET character_set_connection=ucs2;
|
||||||
select 'a' = 'a', 'a' = 'a ', 'a ' = 'a';
|
select 'a' = 'a', 'a' = 'a ', 'a ' = 'a';
|
||||||
@ -613,6 +706,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F20025
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET NAMES latin1;
|
SET NAMES latin1;
|
||||||
SET collation_connection='ucs2_bin';
|
SET collation_connection='ucs2_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
@ -642,6 +752,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F20025
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
select hex(substr(_ucs2 0x00e400e50068,1));
|
select hex(substr(_ucs2 0x00e400e50068,1));
|
||||||
hex(substr(_ucs2 0x00e400e50068,1))
|
hex(substr(_ucs2 0x00e400e50068,1))
|
||||||
00E400E50068
|
00E400E50068
|
||||||
|
@ -21,4 +21,14 @@ INSERT INTO t1 VALUES('A', 'A'), ('B', 'B'), ('C', 'C');
|
|||||||
INSERT INTO t1 VALUES('A ', 'A ');
|
INSERT INTO t1 VALUES('A ', 'A ');
|
||||||
ERROR 23000: Duplicate entry '' for key 1
|
ERROR 23000: Duplicate entry '' for key 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL,
|
||||||
|
KEY(c1)
|
||||||
|
) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('marshall\'s');
|
||||||
|
INSERT INTO t1 VALUES ('marsh');
|
||||||
|
CHECK TABLE t1 EXTENDED;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -2257,6 +2257,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
SET collation_connection='ujis_bin';
|
SET collation_connection='ujis_bin';
|
||||||
create table t1 select repeat('a',4000) a;
|
create table t1 select repeat('a',4000) a;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
@ -2307,6 +2324,23 @@ select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
|||||||
c2h
|
c2h
|
||||||
ab_def
|
ab_def
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 AS
|
||||||
|
SELECT 10 AS a, REPEAT('a',20) AS b, REPEAT('a',8) AS c, REPEAT('a',8) AS d;
|
||||||
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ADD KEY(b);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (1, repeat(0xF1F2,5));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (2, repeat(0xF1F2,10));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3, repeat(0xF1F2,11));
|
||||||
|
INSERT INTO t1 (a, b) VALUES (4, repeat(0xF1F2,12));
|
||||||
|
SELECT hex(concat(repeat(0xF1F2, 10), '%'));
|
||||||
|
hex(concat(repeat(0xF1F2, 10), '%'))
|
||||||
|
F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F225
|
||||||
|
3 rows expected
|
||||||
|
SELECT a, hex(b), c FROM t1 WHERE b LIKE concat(repeat(0xF1F2,10), '%');
|
||||||
|
a hex(b) c
|
||||||
|
2 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
3 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
4 F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2F1F2
|
||||||
|
DROP TABLE t1;
|
||||||
select hex(convert(_ujis 0xA5FE41 using ucs2));
|
select hex(convert(_ujis 0xA5FE41 using ucs2));
|
||||||
hex(convert(_ujis 0xA5FE41 using ucs2))
|
hex(convert(_ujis 0xA5FE41 using ucs2))
|
||||||
003F0041
|
003F0041
|
||||||
|
@ -2045,6 +2045,32 @@ select 1 from t1 order by a;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
|
CREATE TABLE t1 (a INT, b INT, KEY(a,b));
|
||||||
|
INSERT INTO t1 VALUES(NULL,1),(1,NULL),(NULL,NULL),(1,1),(2,2);
|
||||||
|
CREATE TABLE t1 (a INT, b INT, KEY(a,b)) ENGINE=federated
|
||||||
|
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
|
||||||
|
SELECT * FROM t1 WHERE a IS NULL;
|
||||||
|
a b
|
||||||
|
NULL NULL
|
||||||
|
NULL 1
|
||||||
|
SELECT * FROM t1 WHERE a IS NOT NULL;
|
||||||
|
a b
|
||||||
|
1 NULL
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
SELECT * FROM t1 WHERE a=1 AND b=1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SELECT * FROM t1 WHERE a IS NULL AND b=1;
|
||||||
|
a b
|
||||||
|
NULL 1
|
||||||
|
SELECT * FROM t1 WHERE a IS NOT NULL AND b=1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
|
||||||
|
DROP TABLE t1;
|
||||||
DROP TABLE IF EXISTS federated.t1;
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
DROP DATABASE IF EXISTS federated;
|
DROP DATABASE IF EXISTS federated;
|
||||||
DROP TABLE IF EXISTS federated.t1;
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
|
@ -72,3 +72,4 @@ flush tables with read lock;
|
|||||||
unlock tables;
|
unlock tables;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
set session low_priority_updates=default;
|
set session low_priority_updates=default;
|
||||||
|
select benchmark(200, (select sin(1))) > 1000;
|
||||||
|
@ -931,4 +931,19 @@ SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY b) FROM t1;
|
|||||||
GROUP_CONCAT(DISTINCT b, a ORDER BY b)
|
GROUP_CONCAT(DISTINCT b, a ORDER BY b)
|
||||||
11,22,32
|
11,22,32
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
INSERT INTO t1 VALUES (),();
|
||||||
|
SELECT s1.d1 FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
t1.a as d1,
|
||||||
|
GROUP_CONCAT(DISTINCT t1.a) AS d2
|
||||||
|
FROM
|
||||||
|
t1 AS t1,
|
||||||
|
t1 AS t2
|
||||||
|
GROUP BY 1
|
||||||
|
) AS s1;
|
||||||
|
d1
|
||||||
|
NULL
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -1419,4 +1419,10 @@ Note 1003 select (`test`.`t1`.`a` + 1) AS `y` from `test`.`t1` group by (`test`.
|
|||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET SQL_MODE=DEFAULT;
|
SET SQL_MODE=DEFAULT;
|
||||||
|
CREATE TABLE t1(a DOUBLE);
|
||||||
|
INSERT INTO t1 VALUES (10), (20);
|
||||||
|
SELECT AVG(a), CAST(AVG(a) AS DECIMAL) FROM t1;
|
||||||
|
AVG(a) CAST(AVG(a) AS DECIMAL)
|
||||||
|
15 15
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -207,6 +207,25 @@ test
|
|||||||
SELECT NAME_CONST('test', 'test');
|
SELECT NAME_CONST('test', 'test');
|
||||||
test
|
test
|
||||||
test
|
test
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
SELECT NAME_CONST('flag',1) * MAX(a) FROM t1;
|
||||||
|
NAME_CONST('flag',1) * MAX(a)
|
||||||
|
3
|
||||||
|
SELECT NAME_CONST('flag',1.5) * MAX(a) FROM t1;
|
||||||
|
NAME_CONST('flag',1.5) * MAX(a)
|
||||||
|
4.5
|
||||||
|
SELECT NAME_CONST('flag',-1) * MAX(a) FROM t1;
|
||||||
|
NAME_CONST('flag',-1) * MAX(a)
|
||||||
|
-3
|
||||||
|
SELECT NAME_CONST('flag',-1.5) * MAX(a) FROM t1;
|
||||||
|
NAME_CONST('flag',-1.5) * MAX(a)
|
||||||
|
-4.5
|
||||||
|
SELECT NAME_CONST('flag', SQRT(4)) * MAX(a) FROM t1;
|
||||||
|
ERROR HY000: Incorrect arguments to NAME_CONST
|
||||||
|
SELECT NAME_CONST('flag',-SQRT(4)) * MAX(a) FROM t1;
|
||||||
|
ERROR HY000: Incorrect arguments to NAME_CONST
|
||||||
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (a int);
|
CREATE TABLE t1 (a int);
|
||||||
INSERT INTO t1 VALUES (5), (2);
|
INSERT INTO t1 VALUES (5), (2);
|
||||||
SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t;
|
SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t;
|
||||||
@ -225,4 +244,7 @@ select min(a) from t1 group by inet_ntoa(a);
|
|||||||
min(a)
|
min(a)
|
||||||
-2
|
-2
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SELECT NAME_CONST('var', 'value') COLLATE latin1_general_cs;
|
||||||
|
NAME_CONST('var', 'value') COLLATE latin1_general_cs
|
||||||
|
value
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -666,6 +666,8 @@ timestampadd(SQL_TSI_SECOND, 1, date)
|
|||||||
select timestampadd(SQL_TSI_FRAC_SECOND, 1, date) from t1;
|
select timestampadd(SQL_TSI_FRAC_SECOND, 1, date) from t1;
|
||||||
timestampadd(SQL_TSI_FRAC_SECOND, 1, date)
|
timestampadd(SQL_TSI_FRAC_SECOND, 1, date)
|
||||||
2003-01-02 00:00:00.000001
|
2003-01-02 00:00:00.000001
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 'FRAC_SECOND' is deprecated; use 'MICROSECOND' instead
|
||||||
select timestampdiff(MONTH, '2001-02-01', '2001-05-01') as a;
|
select timestampdiff(MONTH, '2001-02-01', '2001-05-01') as a;
|
||||||
a
|
a
|
||||||
3
|
3
|
||||||
@ -699,6 +701,8 @@ a
|
|||||||
select timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a;
|
select timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a;
|
||||||
a
|
a
|
||||||
7689538999999
|
7689538999999
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 'FRAC_SECOND' is deprecated; use 'MICROSECOND' instead
|
||||||
select timestampdiff(SQL_TSI_DAY, '1986-02-01', '1986-03-01') as a1,
|
select timestampdiff(SQL_TSI_DAY, '1986-02-01', '1986-03-01') as a1,
|
||||||
timestampdiff(SQL_TSI_DAY, '1900-02-01', '1900-03-01') as a2,
|
timestampdiff(SQL_TSI_DAY, '1900-02-01', '1900-03-01') as a2,
|
||||||
timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
|
timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
|
||||||
@ -1069,6 +1073,7 @@ timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
|
Warning 1287 'FRAC_SECOND' is deprecated; use 'MICROSECOND' instead
|
||||||
Note 1003 select timestampdiff(WEEK,_latin1'2001-02-01',_latin1'2001-05-01') AS `a1`,timestampdiff(SECOND_FRAC,_latin1'2001-02-01 12:59:59.120000',_latin1'2001-05-01 12:58:58.119999') AS `a2`
|
Note 1003 select timestampdiff(WEEK,_latin1'2001-02-01',_latin1'2001-05-01') AS `a1`,timestampdiff(SECOND_FRAC,_latin1'2001-02-01 12:59:59.120000',_latin1'2001-05-01 12:58:58.119999') AS `a2`
|
||||||
select last_day('2005-00-00');
|
select last_day('2005-00-00');
|
||||||
last_day('2005-00-00')
|
last_day('2005-00-00')
|
||||||
@ -1285,4 +1290,22 @@ DATE_ADD(20071108, INTERVAL 1 DAY)
|
|||||||
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
|
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
|
||||||
LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND
|
LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND
|
||||||
2007-12-30 23:59:59
|
2007-12-30 23:59:59
|
||||||
|
SELECT TIMESTAMPADD(FRAC_SECOND, 1, '2008-02-18');
|
||||||
|
TIMESTAMPADD(FRAC_SECOND, 1, '2008-02-18')
|
||||||
|
2008-02-18 00:00:00.000001
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 'FRAC_SECOND' is deprecated; use 'MICROSECOND' instead
|
||||||
|
SELECT TIMESTAMPDIFF(FRAC_SECOND, '2008-02-17', '2008-02-18');
|
||||||
|
TIMESTAMPDIFF(FRAC_SECOND, '2008-02-17', '2008-02-18')
|
||||||
|
86400000000
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 'FRAC_SECOND' is deprecated; use 'MICROSECOND' instead
|
||||||
|
SELECT DATE_ADD('2008-02-18', INTERVAL 1 FRAC_SECOND);
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FRAC_SECOND)' at line 1
|
||||||
|
SELECT DATE_SUB('2008-02-18', INTERVAL 1 FRAC_SECOND);
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FRAC_SECOND)' at line 1
|
||||||
|
SELECT '2008-02-18' + INTERVAL 1 FRAC_SECOND;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FRAC_SECOND' at line 1
|
||||||
|
SELECT '2008-02-18' - INTERVAL 1 FRAC_SECOND;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FRAC_SECOND' at line 1
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -1129,4 +1129,26 @@ DROP USER mysqltest_1@localhost;
|
|||||||
DROP DATABASE db27878;
|
DROP DATABASE db27878;
|
||||||
use test;
|
use test;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
drop table if exists test;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 'test'
|
||||||
|
drop function if exists test_function;
|
||||||
|
Warnings:
|
||||||
|
Note 1305 FUNCTION test_function does not exist
|
||||||
|
drop view if exists v1;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 'test.v1'
|
||||||
|
create table test (col1 varchar(30));
|
||||||
|
create function test_function() returns varchar(30)
|
||||||
|
begin
|
||||||
|
declare tmp varchar(30);
|
||||||
|
select col1 from test limit 1 into tmp;
|
||||||
|
return '1';
|
||||||
|
end|
|
||||||
|
create view v1 as select test.* from test where test.col1=test_function();
|
||||||
|
grant update (col1) on v1 to 'greg'@'localhost';
|
||||||
|
drop user 'greg'@'localhost';
|
||||||
|
drop view v1;
|
||||||
|
drop table test;
|
||||||
|
drop function test_function;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -138,3 +138,20 @@ SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by
|
|||||||
user host db select_priv
|
user host db select_priv
|
||||||
DROP USER CUser2@localhost;
|
DROP USER CUser2@localhost;
|
||||||
DROP USER CUser2@LOCALHOST;
|
DROP USER CUser2@LOCALHOST;
|
||||||
|
CREATE DATABASE mysqltest_1;
|
||||||
|
CREATE TABLE mysqltest_1.t1 (a INT);
|
||||||
|
CREATE USER 'mysqltest1'@'%';
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest_1`.* TO 'mysqltest1'@'%';
|
||||||
|
REVOKE SELECT ON `mysqltest_1`.* FROM 'mysqltest1'@'%';
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest\_1`.* TO 'mysqltest1'@'%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
SHOW GRANTS;
|
||||||
|
Grants for mysqltest1@%
|
||||||
|
GRANT USAGE ON *.* TO 'mysqltest1'@'%'
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest\_1`.* TO 'mysqltest1'@'%'
|
||||||
|
GRANT UPDATE ON `mysqltest_1`.* TO 'mysqltest1'@'%'
|
||||||
|
SELECT * FROM mysqltest_1.t1;
|
||||||
|
a
|
||||||
|
DROP USER 'mysqltest1'@'%';
|
||||||
|
DROP DATABASE mysqltest_1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -1213,4 +1213,150 @@ FROM t1;
|
|||||||
ERROR 21000: Subquery returns more than 1 row
|
ERROR 21000: Subquery returns more than 1 row
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET @@sql_mode = @old_sql_mode;
|
SET @@sql_mode = @old_sql_mode;
|
||||||
|
#
|
||||||
|
# Bug#27219: Aggregate functions in ORDER BY.
|
||||||
|
#
|
||||||
|
SET @save_sql_mode=@@sql_mode;
|
||||||
|
SET @@sql_mode='ONLY_FULL_GROUP_BY';
|
||||||
|
CREATE TABLE t1 (a INT, b INT, c INT DEFAULT 0);
|
||||||
|
INSERT INTO t1 (a, b) VALUES (3,3), (2,2), (3,3), (2,2), (3,3), (4,4);
|
||||||
|
CREATE TABLE t2 SELECT * FROM t1;
|
||||||
|
SELECT 1 FROM t1 ORDER BY COUNT(*);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 ORDER BY COUNT(*) + 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 ORDER BY COUNT(*) + a;
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT 1 FROM t1 ORDER BY COUNT(*), 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 ORDER BY COUNT(*), a;
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT 1 FROM t1 ORDER BY SUM(a);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 ORDER BY SUM(a + 1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 ORDER BY SUM(a) + 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 ORDER BY SUM(a), b;
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT a FROM t1 ORDER BY COUNT(b);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2);
|
||||||
|
a
|
||||||
|
3
|
||||||
|
2
|
||||||
|
3
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a), t2.a FROM t2);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2 ORDER BY t2.a);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1 ORDER BY (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1
|
||||||
|
WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||||
|
HAVING t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||||
|
HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||||
|
HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||||
|
HAVING t1.a > ANY (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1
|
||||||
|
WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT 1 FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1 FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT 1 FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT 1 FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT t1.a FROM t1
|
||||||
|
WHERE t1.a = (SELECT t2.a FROM t2 GROUP BY t2.a
|
||||||
|
ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1);
|
||||||
|
a
|
||||||
|
4
|
||||||
|
SELECT t1.a, SUM(t1.b) FROM t1
|
||||||
|
WHERE t1.a = (SELECT SUM(t2.b) FROM t2 GROUP BY t2.a
|
||||||
|
ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1)
|
||||||
|
GROUP BY t1.a;
|
||||||
|
a SUM(t1.b)
|
||||||
|
4 4
|
||||||
|
SELECT t1.a, SUM(t1.b) FROM t1
|
||||||
|
WHERE t1.a = (SELECT SUM(t2.b) FROM t2
|
||||||
|
ORDER BY SUM(t2.b) + SUM(t1.b) LIMIT 1)
|
||||||
|
GROUP BY t1.a;
|
||||||
|
a SUM(t1.b)
|
||||||
|
SELECT t1.a, SUM(t1.b) FROM t1
|
||||||
|
WHERE t1.a = (SELECT SUM(t2.b) FROM t2
|
||||||
|
ORDER BY SUM(t2.b + t1.a) LIMIT 1)
|
||||||
|
GROUP BY t1.a;
|
||||||
|
a SUM(t1.b)
|
||||||
|
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||||
|
HAVING (1, 1) = (SELECT SUM(t1.a), t1.a FROM t2 LIMIT 1);
|
||||||
|
a
|
||||||
|
select avg (
|
||||||
|
(select
|
||||||
|
(select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
|
||||||
|
from t1 as outr order by outr.a limit 1))
|
||||||
|
from t1 as most_outer;
|
||||||
|
avg (
|
||||||
|
(select
|
||||||
|
(select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
|
||||||
|
from t1 as outr order by outr.a limit 1))
|
||||||
|
29.0000
|
||||||
|
select avg (
|
||||||
|
(select (
|
||||||
|
(select sum(outr.a + innr.a) from t1 as innr limit 1)) as tt
|
||||||
|
from t1 as outr order by count(outr.a) limit 1)) as tt
|
||||||
|
from t1 as most_outer;
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
select (select sum(outr.a + t1.a) from t1 limit 1) as tt from t1 as outr order by outr.a;
|
||||||
|
tt
|
||||||
|
29
|
||||||
|
29
|
||||||
|
35
|
||||||
|
35
|
||||||
|
35
|
||||||
|
41
|
||||||
|
SET sql_mode=@save_sql_mode;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -256,6 +256,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -1417,8 +1417,19 @@ select * from `information_schema`.`VIEWS` where `TABLE_SCHEMA` = NULL;
|
|||||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||||
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
||||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||||
End of 5.0 tests.
|
|
||||||
show fields from information_schema.table_names;
|
show fields from information_schema.table_names;
|
||||||
ERROR 42S02: Unknown table 'table_names' in information_schema
|
ERROR 42S02: Unknown table 'table_names' in information_schema
|
||||||
show keys from information_schema.table_names;
|
show keys from information_schema.table_names;
|
||||||
ERROR 42S02: Unknown table 'table_names' in information_schema
|
ERROR 42S02: Unknown table 'table_names' in information_schema
|
||||||
|
USE information_schema;
|
||||||
|
SET max_heap_table_size = 16384;
|
||||||
|
CREATE TABLE test.t1( a INT );
|
||||||
|
SELECT *
|
||||||
|
FROM tables ta
|
||||||
|
JOIN collations co ON ( co.collation_name = ta.table_catalog )
|
||||||
|
JOIN character_sets cs ON ( cs.character_set_name = ta.table_catalog );
|
||||||
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
|
||||||
|
DROP TABLE test.t1;
|
||||||
|
SET max_heap_table_size = DEFAULT;
|
||||||
|
USE test;
|
||||||
|
End of 5.0 tests.
|
||||||
|
@ -1901,6 +1901,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -1240,4 +1240,10 @@ t1 CREATE TABLE `t1` (
|
|||||||
UNIQUE KEY `aa` (`a`(1))
|
UNIQUE KEY `aa` (`a`(1))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set @my_innodb_autoextend_increment=@@global.innodb_autoextend_increment;
|
||||||
|
set global innodb_autoextend_increment=8;
|
||||||
|
set global innodb_autoextend_increment=@my_innodb_autoextend_increment;
|
||||||
|
set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency;
|
||||||
|
set global innodb_commit_concurrency=0;
|
||||||
|
set global innodb_commit_concurrency=@my_innodb_commit_concurrency;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -94,6 +94,9 @@ drop table t1;
|
|||||||
prepare s from "select 1 limit ?";
|
prepare s from "select 1 limit ?";
|
||||||
set @a='qwe';
|
set @a='qwe';
|
||||||
execute s using @a;
|
execute s using @a;
|
||||||
|
1
|
||||||
|
set @a=-1;
|
||||||
|
execute s using @a;
|
||||||
ERROR HY000: Incorrect arguments to EXECUTE
|
ERROR HY000: Incorrect arguments to EXECUTE
|
||||||
prepare s from "select 1 limit 1, ?";
|
prepare s from "select 1 limit 1, ?";
|
||||||
execute s using @a;
|
execute s using @a;
|
||||||
@ -101,4 +104,10 @@ ERROR HY000: Incorrect arguments to EXECUTE
|
|||||||
prepare s from "select 1 limit ?, ?";
|
prepare s from "select 1 limit ?, ?";
|
||||||
execute s using @a, @a;
|
execute s using @a, @a;
|
||||||
ERROR HY000: Incorrect arguments to EXECUTE
|
ERROR HY000: Incorrect arguments to EXECUTE
|
||||||
|
set @a=14632475938453979136;
|
||||||
|
execute s using @a, @a;
|
||||||
|
1
|
||||||
|
set @a=-14632475938453979136;
|
||||||
|
execute s using @a, @a;
|
||||||
|
ERROR HY000: Incorrect arguments to EXECUTE
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -252,3 +252,79 @@ SELECT * FROM t1;
|
|||||||
c1 c2 c3 c4
|
c1 c2 c3 c4
|
||||||
10 1970-02-01 01:02:03 1.1e-100 1.1e+100
|
10 1970-02-01 01:02:03 1.1e-100 1.1e+100
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# --
|
||||||
|
# -- Bug#35469: server crash with LOAD DATA INFILE to a VIEW.
|
||||||
|
# --
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP VIEW IF EXISTS v1;
|
||||||
|
DROP VIEW IF EXISTS v2;
|
||||||
|
DROP VIEW IF EXISTS v3;
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 INT, c2 VARCHAR(255));
|
||||||
|
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE VIEW v2 AS SELECT 1 + 2 AS c0, c1, c2 FROM t1;
|
||||||
|
CREATE VIEW v3 AS SELECT 1 AS d1, 2 AS d2;
|
||||||
|
|
||||||
|
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v1
|
||||||
|
FIELDS ESCAPED BY '\\'
|
||||||
|
TERMINATED BY ','
|
||||||
|
ENCLOSED BY '"'
|
||||||
|
LINES TERMINATED BY '\n' (c1, c2);
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1 c2
|
||||||
|
1 "string1"
|
||||||
|
2 "string2"
|
||||||
|
3 "string3"
|
||||||
|
|
||||||
|
SELECT * FROM v1;
|
||||||
|
c1 c2
|
||||||
|
1 "string1"
|
||||||
|
2 "string2"
|
||||||
|
3 "string3"
|
||||||
|
|
||||||
|
DELETE FROM t1;
|
||||||
|
|
||||||
|
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v2
|
||||||
|
FIELDS ESCAPED BY '\\'
|
||||||
|
TERMINATED BY ','
|
||||||
|
ENCLOSED BY '"'
|
||||||
|
LINES TERMINATED BY '\n' (c1, c2);
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1 c2
|
||||||
|
1 "string1"
|
||||||
|
2 "string2"
|
||||||
|
3 "string3"
|
||||||
|
|
||||||
|
SELECT * FROM v2;
|
||||||
|
c0 c1 c2
|
||||||
|
3 1 "string1"
|
||||||
|
3 2 "string2"
|
||||||
|
3 3 "string3"
|
||||||
|
|
||||||
|
DELETE FROM t1;
|
||||||
|
|
||||||
|
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v2
|
||||||
|
FIELDS ESCAPED BY '\\'
|
||||||
|
TERMINATED BY ','
|
||||||
|
ENCLOSED BY '"'
|
||||||
|
LINES TERMINATED BY '\n' (c0, c2);
|
||||||
|
ERROR HY000: Invalid column reference (v2.c0) in LOAD DATA
|
||||||
|
|
||||||
|
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v3
|
||||||
|
FIELDS ESCAPED BY '\\'
|
||||||
|
TERMINATED BY ','
|
||||||
|
ENCLOSED BY '"'
|
||||||
|
LINES TERMINATED BY '\n' (d1, d2);
|
||||||
|
ERROR HY000: The target table v3 of the LOAD is not updatable
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP VIEW v2;
|
||||||
|
DROP VIEW v3;
|
||||||
|
|
||||||
|
# -- End of Bug#35469.
|
||||||
|
@ -918,4 +918,26 @@ id ref
|
|||||||
3 2
|
3 2
|
||||||
4 5
|
4 5
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
CREATE TABLE m1(a INT) ENGINE=MERGE;
|
||||||
|
SHOW CREATE TABLE m1;
|
||||||
|
Table Create Table
|
||||||
|
m1 CREATE TABLE `m1` (
|
||||||
|
`a` int(11) default NULL
|
||||||
|
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
|
||||||
|
DROP TABLE m1;
|
||||||
|
CREATE TABLE m1(a INT) ENGINE=MERGE UNION=();
|
||||||
|
SHOW CREATE TABLE m1;
|
||||||
|
Table Create Table
|
||||||
|
m1 CREATE TABLE `m1` (
|
||||||
|
`a` int(11) default NULL
|
||||||
|
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
|
||||||
|
ALTER TABLE m1 UNION=(t1);
|
||||||
|
ALTER TABLE m1 UNION=();
|
||||||
|
SHOW CREATE TABLE m1;
|
||||||
|
Table Create Table
|
||||||
|
m1 CREATE TABLE `m1` (
|
||||||
|
`a` int(11) default NULL
|
||||||
|
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
|
||||||
|
DROP TABLE t1, m1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -6,12 +6,12 @@ begin;
|
|||||||
insert into t1 values(1);
|
insert into t1 values(1);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(1)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(1)
|
||||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 347 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -21,12 +21,12 @@ insert into t2 select * from t1;
|
|||||||
rollback;
|
rollback;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(2)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(2)
|
||||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 347 Query 1 # use `test`; ROLLBACK
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -39,15 +39,15 @@ rollback to savepoint my_savepoint;
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(3)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(3)
|
||||||
master-bin.000001 253 Query 1 # use `test`; savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; savepoint my_savepoint
|
||||||
master-bin.000001 338 Query 1 # use `test`; insert into t1 values(4)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(4)
|
||||||
master-bin.000001 425 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 519 Query 1 # use `test`; rollback to savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; rollback to savepoint my_savepoint
|
||||||
master-bin.000001 616 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -65,16 +65,16 @@ select a from t1 order by a;
|
|||||||
a
|
a
|
||||||
5
|
5
|
||||||
7
|
7
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(5)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(5)
|
||||||
master-bin.000001 253 Query 1 # use `test`; savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; savepoint my_savepoint
|
||||||
master-bin.000001 338 Query 1 # use `test`; insert into t1 values(6)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(6)
|
||||||
master-bin.000001 425 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 519 Query 1 # use `test`; rollback to savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; rollback to savepoint my_savepoint
|
||||||
master-bin.000001 616 Query 1 # use `test`; insert into t1 values(7)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(7)
|
||||||
master-bin.000001 703 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -87,46 +87,46 @@ insert into t2 select * from t1;
|
|||||||
select get_lock("a",10);
|
select get_lock("a",10);
|
||||||
get_lock("a",10)
|
get_lock("a",10)
|
||||||
1
|
1
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(8)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(8)
|
||||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 347 Query 1 # use `test`; ROLLBACK
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
insert into t1 values(9);
|
insert into t1 values(9);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(9)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(9)
|
||||||
master-bin.000001 253 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 280 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
insert into t1 values(10);
|
insert into t1 values(10);
|
||||||
begin;
|
begin;
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(10)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
|
||||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 281 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
insert into t1 values(11);
|
insert into t1 values(11);
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(10)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
|
||||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 281 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 375 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 443 Query 1 # use `test`; insert into t1 values(11)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(11)
|
||||||
master-bin.000001 531 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
alter table t2 engine=INNODB;
|
alter table t2 engine=INNODB;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
@ -135,12 +135,12 @@ begin;
|
|||||||
insert into t1 values(12);
|
insert into t1 values(12);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(12)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(12)
|
||||||
master-bin.000001 254 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 348 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -148,7 +148,7 @@ begin;
|
|||||||
insert into t1 values(13);
|
insert into t1 values(13);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
rollback;
|
rollback;
|
||||||
show binlog events from 98;
|
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
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
@ -160,11 +160,11 @@ insert into t1 values(15);
|
|||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
rollback to savepoint my_savepoint;
|
rollback to savepoint my_savepoint;
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(14)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(14)
|
||||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -180,12 +180,12 @@ select a from t1 order by a;
|
|||||||
a
|
a
|
||||||
16
|
16
|
||||||
18
|
18
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(16)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
|
||||||
master-bin.000001 254 Query 1 # use `test`; insert into t1 values(18)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
|
||||||
master-bin.000001 342 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
alter table t2 type=MyISAM;
|
alter table t2 type=MyISAM;
|
||||||
@ -232,35 +232,35 @@ insert into t2 values (3);
|
|||||||
select get_lock("lock1",60);
|
select get_lock("lock1",60);
|
||||||
get_lock("lock1",60)
|
get_lock("lock1",60)
|
||||||
1
|
1
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(16)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
|
||||||
master-bin.000001 254 Query 1 # use `test`; insert into t1 values(18)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
|
||||||
master-bin.000001 342 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 369 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 437 Query 1 # use `test`; delete from t1
|
master-bin.000001 # Query # # use `test`; delete from t1
|
||||||
master-bin.000001 514 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 541 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 609 Query 1 # use `test`; delete from t2
|
master-bin.000001 # Query # # use `test`; delete from t2
|
||||||
master-bin.000001 686 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 713 Query 1 # use `test`; alter table t2 type=MyISAM
|
master-bin.000001 # Query # # use `test`; alter table t2 type=MyISAM
|
||||||
master-bin.000001 802 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 870 Query 1 # use `test`; insert into t1 values (1)
|
master-bin.000001 # Query # # use `test`; insert into t1 values (1)
|
||||||
master-bin.000001 958 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 985 Query 1 # use `test`; insert into t2 values (20)
|
master-bin.000001 # Query # # use `test`; insert into t2 values (20)
|
||||||
master-bin.000001 1074 Query 1 # use `test`; drop table t1,t2
|
master-bin.000001 # Query # # use `test`; drop table t1,t2
|
||||||
master-bin.000001 1153 Query 1 # use `test`; create temporary table ti (a int) engine=innodb
|
master-bin.000001 # Query # # use `test`; create temporary table ti (a int) engine=innodb
|
||||||
master-bin.000001 1263 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 1331 Query 1 # use `test`; insert into ti values(1)
|
master-bin.000001 # Query # # use `test`; insert into ti values(1)
|
||||||
master-bin.000001 1418 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 1445 Query 1 # use `test`; create temporary table t1 (a int) engine=myisam
|
master-bin.000001 # Query # # use `test`; create temporary table t1 (a int) engine=myisam
|
||||||
master-bin.000001 1555 Query 1 # use `test`; insert t1 values (1)
|
master-bin.000001 # Query # # use `test`; insert t1 values (1)
|
||||||
master-bin.000001 1638 Query 1 # use `test`; create table t0 (n int)
|
master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
||||||
master-bin.000001 1724 Query 1 # use `test`; insert t0 select * from t1
|
master-bin.000001 # Query # # use `test`; insert t0 select * from t1
|
||||||
master-bin.000001 1813 Query 1 # use `test`; insert into t0 select GET_LOCK("lock1",null)
|
master-bin.000001 # Query # # use `test`; insert into t0 select GET_LOCK("lock1",null)
|
||||||
master-bin.000001 1920 Query 1 # use `test`; create table t2 (n int) engine=innodb
|
master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
|
||||||
master-bin.000001 2020 Query 1 # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
||||||
do release_lock("lock1");
|
do release_lock("lock1");
|
||||||
drop table t0,t2;
|
drop table t0,t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -447,7 +447,7 @@ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
|||||||
ERROR 23000: Duplicate entry '2' for key 1
|
ERROR 23000: Duplicate entry '2' for key 1
|
||||||
show master status /* the offset must denote there is the query */;
|
show master status /* the offset must denote there is the query */;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 369
|
master-bin.000001 230
|
||||||
select count(*) from t1 /* must be 4 */;
|
select count(*) from t1 /* must be 4 */;
|
||||||
count(*)
|
count(*)
|
||||||
4
|
4
|
||||||
|
@ -545,7 +545,7 @@ a b
|
|||||||
4 4
|
4 4
|
||||||
show master status /* there must be the UPDATE query event */;
|
show master status /* there must be the UPDATE query event */;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 328
|
master-bin.000001 189
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
insert into t1 values (1,2),(3,4),(4,4);
|
insert into t1 values (1,2),(3,4),(4,4);
|
||||||
@ -555,7 +555,7 @@ UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
|||||||
ERROR 23000: Duplicate entry '4' for key 1
|
ERROR 23000: Duplicate entry '4' for key 1
|
||||||
show master status /* there must be the UPDATE query event */;
|
show master status /* there must be the UPDATE query event */;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 343
|
master-bin.000001 204
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
drop table if exists t1, t2, t3;
|
drop table if exists t1, t2, t3;
|
||||||
CREATE TABLE t1 (a int, PRIMARY KEY (a));
|
CREATE TABLE t1 (a int, PRIMARY KEY (a));
|
||||||
@ -573,8 +573,8 @@ count(*)
|
|||||||
select count(*) from t3 /* must be 1 */;
|
select count(*) from t3 /* must be 1 */;
|
||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
show binlog events from 98;
|
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
|
||||||
master-bin.000001 98 Query 1 # use `test`; delete t3.* from t2,t3 where t2.a=t3.a
|
master-bin.000001 # Query # # use `test`; delete t3.* from t2,t3 where t2.a=t3.a
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
end of tests
|
end of tests
|
||||||
|
@ -1104,6 +1104,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
1
mysql-test/r/mysqldump-no-binlog.result
Normal file
1
mysql-test/r/mysqldump-no-binlog.result
Normal file
@ -0,0 +1 @@
|
|||||||
|
mysqldump: Error: Binlogging on server not active
|
@ -3306,7 +3306,7 @@ grant RELOAD on *.* to mysqltest_1@localhost;
|
|||||||
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
|
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
|
||||||
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
|
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
|
||||||
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
|
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
|
||||||
CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=537;
|
CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=#;
|
||||||
SET @saved_cs_client = @@character_set_client;
|
SET @saved_cs_client = @@character_set_client;
|
||||||
SET character_set_client = utf8;
|
SET character_set_client = utf8;
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
|
@ -429,3 +429,21 @@ Handler_read_prev 0
|
|||||||
Handler_read_rnd 0
|
Handler_read_rnd 0
|
||||||
Handler_read_rnd_next 5
|
Handler_read_rnd_next 5
|
||||||
DROP TABLE t1,t2,t3,t4;
|
DROP TABLE t1,t2,t3,t4;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int(11) default NULL,
|
||||||
|
b int(11) default NULL,
|
||||||
|
KEY a (a,b)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (0,10),(0,11),(0,12);
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a int(11) default NULL,
|
||||||
|
b int(11) default NULL,
|
||||||
|
KEY a (a)
|
||||||
|
);
|
||||||
|
INSERT INTO t2 VALUES (3,NULL),(3,11),(3,12);
|
||||||
|
SELECT * FROM t2 inner join t1 WHERE ( t1.a = 0 OR t1.a IS NULL) AND t2.a = 3 AND t2.b = t1.b;
|
||||||
|
a b a b
|
||||||
|
3 11 0 11
|
||||||
|
3 12 0 12
|
||||||
|
drop table t1, t2;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -1064,3 +1064,15 @@ a b
|
|||||||
10 00:00:10
|
10 00:00:10
|
||||||
0 00:00:00
|
0 00:00:00
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#31590: Wrong error message on sort buffer being too small.
|
||||||
|
#
|
||||||
|
create table t1(a int, b tinytext);
|
||||||
|
insert into t1 values (1,2),(3,2);
|
||||||
|
set session sort_buffer_size= 30000;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect sort_buffer_size value: '30000'
|
||||||
|
set session max_sort_length= 2180;
|
||||||
|
select * from t1 order by b;
|
||||||
|
ERROR HY001: Out of sort memory; increase server sort buffer size
|
||||||
|
drop table t1;
|
||||||
|
@ -1709,4 +1709,186 @@ a b
|
|||||||
9999999999999999 14632475938453979136
|
9999999999999999 14632475938453979136
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
drop view if exists v1;
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
insert into t1 values (1,1), (2,2), (3,3);
|
||||||
|
insert into t1 values (3,1), (1,2), (2,3);
|
||||||
|
prepare stmt from "create view v1 as select * from t1";
|
||||||
|
execute stmt;
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1`
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 (c,d) as select a,b from t1";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d` from `t1`
|
||||||
|
select * from v1;
|
||||||
|
c d
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d` from `t1`
|
||||||
|
select * from v1;
|
||||||
|
c d
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 (c) as select b+1 from t1";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`b` + 1) AS `c` from `t1`
|
||||||
|
select * from v1;
|
||||||
|
c
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`b` + 1) AS `c` from `t1`
|
||||||
|
select * from v1;
|
||||||
|
c
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 (c,d,e,f) as select a,b,a in (select a+2 from t1), a = all (select a from t1) from t1";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) AS `a+2` from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` AS `a` from `t1`) AS `f` from `t1`
|
||||||
|
select * from v1;
|
||||||
|
c d e f
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) AS `a+2` from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` AS `a` from `t1`) AS `f` from `t1`
|
||||||
|
select * from v1;
|
||||||
|
c d e f
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create or replace view v1 as select 1";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`
|
||||||
|
select * from v1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`
|
||||||
|
select * from v1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 as select 1, 1";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`,1 AS `My_exp_1`
|
||||||
|
select * from v1;
|
||||||
|
1 My_exp_1
|
||||||
|
1 1
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`,1 AS `My_exp_1`
|
||||||
|
select * from v1;
|
||||||
|
1 My_exp_1
|
||||||
|
1 1
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 (x) as select a from t1 where a > 1";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `x` from `t1` where (`t1`.`a` > 1)
|
||||||
|
select * from v1;
|
||||||
|
x
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `x` from `t1` where (`t1`.`a` > 1)
|
||||||
|
select * from v1;
|
||||||
|
x
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||||
|
execute stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `b`.`a` AS `a`,`b`.`b` AS `b` from `t1` `b`
|
||||||
|
select * from v1;
|
||||||
|
a b
|
||||||
|
drop view v1;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
show create view v1;
|
||||||
|
View Create View
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `b`.`a` AS `a`,`b`.`b` AS `b` from `t1` `b`
|
||||||
|
select * from v1;
|
||||||
|
a b
|
||||||
|
drop view v1;
|
||||||
|
prepare stmt from "create view v1 (a,b,c) as select * from t1";
|
||||||
|
execute stmt;
|
||||||
|
ERROR HY000: View's SELECT and view's field list have different column counts
|
||||||
|
execute stmt;
|
||||||
|
ERROR HY000: View's SELECT and view's field list have different column counts
|
||||||
|
deallocate prepare stmt;
|
||||||
|
drop table t1;
|
||||||
|
create temporary table t1 (a int, b int);
|
||||||
|
prepare stmt from "create view v1 as select * from t1";
|
||||||
|
execute stmt;
|
||||||
|
ERROR HY000: View's SELECT refers to a temporary table 't1'
|
||||||
|
execute stmt;
|
||||||
|
ERROR HY000: View's SELECT refers to a temporary table 't1'
|
||||||
|
deallocate prepare stmt;
|
||||||
|
drop table t1;
|
||||||
|
prepare stmt from "create view v1 as select * from t1";
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
prepare stmt from "select ?";
|
||||||
|
set @arg= 123456789.987654321;
|
||||||
|
select @arg;
|
||||||
|
@arg
|
||||||
|
123456789.987654321
|
||||||
|
execute stmt using @arg;
|
||||||
|
?
|
||||||
|
123456789.987654321
|
||||||
|
set @arg= "string";
|
||||||
|
select @arg;
|
||||||
|
@arg
|
||||||
|
string
|
||||||
|
execute stmt using @arg;
|
||||||
|
?
|
||||||
|
string
|
||||||
|
set @arg= 123456;
|
||||||
|
select @arg;
|
||||||
|
@arg
|
||||||
|
123456
|
||||||
|
execute stmt using @arg;
|
||||||
|
?
|
||||||
|
123456
|
||||||
|
set @arg= cast(-12345.54321 as decimal(20, 10));
|
||||||
|
select @arg;
|
||||||
|
@arg
|
||||||
|
-12345.5432100000
|
||||||
|
execute stmt using @arg;
|
||||||
|
?
|
||||||
|
-12345.5432100000
|
||||||
|
deallocate prepare stmt;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -1654,3 +1654,30 @@ set GLOBAL query_cache_type=default;
|
|||||||
set GLOBAL query_cache_limit=default;
|
set GLOBAL query_cache_limit=default;
|
||||||
set GLOBAL query_cache_min_res_unit=default;
|
set GLOBAL query_cache_min_res_unit=default;
|
||||||
set GLOBAL query_cache_size=default;
|
set GLOBAL query_cache_size=default;
|
||||||
|
use test;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SET GLOBAL query_cache_size=10*1024*1024;
|
||||||
|
SET @save_concurrent_insert= @@concurrent_insert;
|
||||||
|
SET GLOBAL concurrent_insert= 0;
|
||||||
|
CREATE TABLE t1 (c1 INT NOT NULL) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 (c1) VALUES (1), (2);
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'concurrent_insert';
|
||||||
|
Variable_name Value
|
||||||
|
concurrent_insert 0
|
||||||
|
SHOW STATUS LIKE 'Qcache_hits';
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_hits 0
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SHOW STATUS LIKE 'Qcache_hits';
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_hits 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL concurrent_insert= @save_concurrent_insert;
|
||||||
|
SET GLOBAL query_cache_size= default;
|
||||||
|
@ -1153,3 +1153,55 @@ explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range dateval dateval 4 NULL 2 Using where
|
1 SIMPLE t1 range dateval dateval 4 NULL 2 Using where
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(32), index (a)
|
||||||
|
) DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A');
|
||||||
|
SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||||
|
a
|
||||||
|
B
|
||||||
|
B
|
||||||
|
EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range a a 35 NULL 3 Using where; Using index
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1));
|
||||||
|
INSERT INTO t1 VALUES (127),(254),(0),(1),(255);
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255;
|
||||||
|
COUNT(*)
|
||||||
|
4
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1;
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1));
|
||||||
|
INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127);
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127;
|
||||||
|
COUNT(*)
|
||||||
|
4
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0;
|
||||||
|
COUNT(*)
|
||||||
|
5
|
||||||
|
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128;
|
||||||
|
COUNT(*)
|
||||||
|
4
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -434,3 +434,12 @@ SELECT @x;
|
|||||||
@x
|
@x
|
||||||
99
|
99
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
SELECT ROW(a, 1) IN (SELECT SUM(b), 1) FROM t1 GROUP BY a;
|
||||||
|
ROW(a, 1) IN (SELECT SUM(b), 1)
|
||||||
|
1
|
||||||
|
SELECT ROW(a, 1) IN (SELECT SUM(b), 3) FROM t1 GROUP BY a;
|
||||||
|
ROW(a, 1) IN (SELECT SUM(b), 3)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
165
mysql-test/r/rpl_auto_increment_bug33029.result
Normal file
165
mysql-test/r/rpl_auto_increment_bug33029.result
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
|
DROP PROCEDURE IF EXISTS p2;
|
||||||
|
DROP TRIGGER IF EXISTS tr1;
|
||||||
|
DROP FUNCTION IF EXISTS f1;
|
||||||
|
CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY);
|
||||||
|
CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY);
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
DECLARE ins_count INT DEFAULT 10;
|
||||||
|
WHILE ins_count > 0 DO
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SET ins_count = ins_count - 1;
|
||||||
|
END WHILE;
|
||||||
|
DELETE FROM t1 WHERE id = 1;
|
||||||
|
DELETE FROM t1 WHERE id = 2;
|
||||||
|
DELETE FROM t2 WHERE id = 1;
|
||||||
|
DELETE FROM t2 WHERE id = 2;
|
||||||
|
END//
|
||||||
|
CREATE PROCEDURE p2()
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE id = f1(3);
|
||||||
|
DELETE FROM t1 WHERE id = f1(4);
|
||||||
|
DELETE FROM t2 WHERE id = 3;
|
||||||
|
DELETE FROM t2 WHERE id = 4;
|
||||||
|
END//
|
||||||
|
CREATE TRIGGER tr1 BEFORE DELETE
|
||||||
|
ON t1 FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO t2 VALUES (NULL);
|
||||||
|
END//
|
||||||
|
CREATE FUNCTION f1 (i int) RETURNS int
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO t2 VALUES (NULL);
|
||||||
|
RETURN i;
|
||||||
|
END//
|
||||||
|
CALL p1();
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=1
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=2
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=3
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=5
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=7
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=8
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=9
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = 1
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = 2
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 1
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 2
|
||||||
|
# Result on master
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
# Result on slave
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
DROP TRIGGER tr1;
|
||||||
|
CALL p2();
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=11
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = f1(3)
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = f1(4)
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 3
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 4
|
||||||
|
# Result on master
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
12
|
||||||
|
13
|
||||||
|
14
|
||||||
|
15
|
||||||
|
16
|
||||||
|
17
|
||||||
|
18
|
||||||
|
19
|
||||||
|
# Result on slave
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
12
|
||||||
|
13
|
||||||
|
14
|
||||||
|
15
|
||||||
|
16
|
||||||
|
17
|
||||||
|
18
|
||||||
|
19
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
|
DROP PROCEDURE IF EXISTS p2;
|
||||||
|
DROP FUNCTION IF EXISTS f1;
|
||||||
|
DROP TRIGGER IF EXISTS tr1;
|
38
mysql-test/r/rpl_bug33931.result
Normal file
38
mysql-test/r/rpl_bug33931.result
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
reset master;
|
||||||
|
stop slave;
|
||||||
|
reset slave;
|
||||||
|
start slave;
|
||||||
|
show slave status;
|
||||||
|
Slave_IO_State #
|
||||||
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_PORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File
|
||||||
|
Read_Master_Log_Pos 4
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File
|
||||||
|
Slave_IO_Running No
|
||||||
|
Slave_SQL_Running No
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos 0
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
@ -8,15 +8,53 @@ reset master;
|
|||||||
change master to master_host="127.0.0.1",master_port=SLAVE_PORT,master_user="root";
|
change master to master_host="127.0.0.1",master_port=SLAVE_PORT,master_user="root";
|
||||||
start slave;
|
start slave;
|
||||||
create table t1 (n int);
|
create table t1 (n int);
|
||||||
|
stop slave;
|
||||||
|
create table t2 (n int);
|
||||||
|
show tables;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
t2
|
||||||
|
create table t3 (n int) engine=innodb;
|
||||||
|
set @a=1;
|
||||||
|
insert into t3 values(@a);
|
||||||
|
begin;
|
||||||
|
insert into t3 values(2);
|
||||||
|
insert into t3 values(3);
|
||||||
|
commit;
|
||||||
|
insert into t3 values(4);
|
||||||
|
start slave until master_log_file="slave-bin.000001",master_log_pos=195;
|
||||||
|
Warnings:
|
||||||
|
Note 1278 It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart
|
||||||
|
show tables;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
t2
|
||||||
|
start slave until master_log_file="slave-bin.000001",master_log_pos=438;
|
||||||
|
Warnings:
|
||||||
|
Note 1278 It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart
|
||||||
|
select * from t3;
|
||||||
|
n
|
||||||
|
1
|
||||||
|
start slave until master_log_file="slave-bin.000001",master_log_pos=663;
|
||||||
|
Warnings:
|
||||||
|
Note 1278 It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart
|
||||||
|
select * from t3;
|
||||||
|
n
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
start slave;
|
||||||
create table t4 (n int);
|
create table t4 (n int);
|
||||||
create table t5 (n int);
|
create table t5 (n int);
|
||||||
create table t6 (n int);
|
create table t6 (n int);
|
||||||
show tables;
|
show tables;
|
||||||
Tables_in_test
|
Tables_in_test
|
||||||
t1
|
t1
|
||||||
|
t2
|
||||||
|
t3
|
||||||
t4
|
t4
|
||||||
t5
|
t5
|
||||||
t6
|
t6
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
drop table t1,t4,t5,t6;
|
drop table t1,t2,t3,t4,t5,t6;
|
||||||
|
@ -77,7 +77,8 @@ load data infile '../std_data_ln/rpl_loaddata2.dat' into table t2 fields
|
|||||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||||
'\n##\n' starting by '>' ignore 1 lines;
|
'\n##\n' starting by '>' ignore 1 lines;
|
||||||
ERROR 23000: Duplicate entry '2003-03-22' for key 1
|
ERROR 23000: Duplicate entry '2003-03-22' for key 1
|
||||||
drop table t2;
|
set @@global.sql_slave_skip_counter=1;
|
||||||
|
start slave;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||||
|
@ -16,3 +16,9 @@ select master_pos_wait('master-bin.999999',0);
|
|||||||
stop slave sql_thread;
|
stop slave sql_thread;
|
||||||
master_pos_wait('master-bin.999999',0)
|
master_pos_wait('master-bin.999999',0)
|
||||||
NULL
|
NULL
|
||||||
|
"*** must be empty ***"
|
||||||
|
show slave status;
|
||||||
|
"*** must be NULL ***"
|
||||||
|
select master_pos_wait('foo', 98);
|
||||||
|
master_pos_wait('foo', 98)
|
||||||
|
NULL
|
||||||
|
@ -6,6 +6,10 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|||||||
start slave;
|
start slave;
|
||||||
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||||
create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||||
|
SET @@global.max_allowed_packet=1024;
|
||||||
|
SET @@global.net_buffer_length=1024;
|
||||||
|
STOP SLAVE;
|
||||||
|
START SLAVE;
|
||||||
select @@net_buffer_length, @@max_allowed_packet;
|
select @@net_buffer_length, @@max_allowed_packet;
|
||||||
@@net_buffer_length @@max_allowed_packet
|
@@net_buffer_length @@max_allowed_packet
|
||||||
1024 1024
|
1024 1024
|
||||||
|
@ -53,3 +53,4 @@ Master_SSL_Cipher
|
|||||||
Master_SSL_Key
|
Master_SSL_Key
|
||||||
Seconds_Behind_Master NULL
|
Seconds_Behind_Master NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
drop table t1;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user