Merge mysql.com:/usr/home/bar/mysql-4.1.b19741v0
into mysql.com:/usr/home/bar/mysql-4.1.b19741
This commit is contained in:
commit
7ff64de172
@ -550,13 +550,13 @@ static struct my_option my_long_options[] =
|
|||||||
{"force", 'f', "Continue even if we get an sql error.",
|
{"force", 'f', "Continue even if we get an sql error.",
|
||||||
(gptr*) &ignore_errors, (gptr*) &ignore_errors, 0, GET_BOOL, NO_ARG, 0, 0,
|
(gptr*) &ignore_errors, (gptr*) &ignore_errors, 0, GET_BOOL, NO_ARG, 0, 0,
|
||||||
0, 0, 0, 0},
|
0, 0, 0, 0},
|
||||||
{"no-named-commands", 'g',
|
|
||||||
"Named commands are disabled. Use \\* form only, or use named commands only in the beginning of a line ending with a semicolon (;) Since version 10.9 the client now starts with this option ENABLED by default! Disable with '-G'. Long format commands still work from the first line. WARNING: option deprecated; use --disable-named-commands instead.",
|
|
||||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
||||||
{"named-commands", 'G',
|
{"named-commands", 'G',
|
||||||
"Enable named commands. Named commands mean this program's internal commands; see mysql> help . When enabled, the named commands can be used from any line of the query, otherwise only from the first line, before an enter. Disable with --disable-named-commands. This option is disabled by default.",
|
"Enable named commands. Named commands mean this program's internal commands; see mysql> help . When enabled, the named commands can be used from any line of the query, otherwise only from the first line, before an enter. Disable with --disable-named-commands. This option is disabled by default.",
|
||||||
(gptr*) &named_cmds, (gptr*) &named_cmds, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
(gptr*) &named_cmds, (gptr*) &named_cmds, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||||
0, 0},
|
0, 0},
|
||||||
|
{"no-named-commands", 'g',
|
||||||
|
"Named commands are disabled. Use \\* form only, or use named commands only in the beginning of a line ending with a semicolon (;) Since version 10.9 the client now starts with this option ENABLED by default! Disable with '-G'. Long format commands still work from the first line. WARNING: option deprecated; use --disable-named-commands instead.",
|
||||||
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"ignore-spaces", 'i', "Ignore space after function names.", 0, 0, 0,
|
{"ignore-spaces", 'i', "Ignore space after function names.", 0, 0, 0,
|
||||||
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"local-infile", OPT_LOCAL_INFILE, "Enable/disable LOAD DATA LOCAL INFILE.",
|
{"local-infile", OPT_LOCAL_INFILE, "Enable/disable LOAD DATA LOCAL INFILE.",
|
||||||
@ -575,13 +575,6 @@ static struct my_option my_long_options[] =
|
|||||||
NO_ARG, 1, 0, 0, 0, 0, 0},
|
NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||||
{"skip-line-numbers", 'L', "Don't write line number for errors. WARNING: -L is deprecated, use long version of this option instead.", 0, 0, 0, GET_NO_ARG,
|
{"skip-line-numbers", 'L', "Don't write line number for errors. WARNING: -L is deprecated, use long version of this option instead.", 0, 0, 0, GET_NO_ARG,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#ifdef USE_POPEN
|
|
||||||
{"no-pager", OPT_NOPAGER,
|
|
||||||
"Disable pager and print to stdout. See interactive help (\\h) also. WARNING: option deprecated; use --disable-pager instead.",
|
|
||||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
||||||
#endif
|
|
||||||
{"no-tee", OPT_NOTEE, "Disable outfile. See interactive help (\\h) also. WARNING: option deprecated; use --disable-tee instead", 0, 0, 0, GET_NO_ARG,
|
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
||||||
{"unbuffered", 'n', "Flush buffer after each query.", (gptr*) &unbuffered,
|
{"unbuffered", 'n', "Flush buffer after each query.", (gptr*) &unbuffered,
|
||||||
(gptr*) &unbuffered, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
(gptr*) &unbuffered, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"column-names", OPT_COLUMN_NAMES, "Write column names in results.",
|
{"column-names", OPT_COLUMN_NAMES, "Write column names in results.",
|
||||||
@ -601,8 +594,11 @@ static struct my_option my_long_options[] =
|
|||||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#ifdef USE_POPEN
|
#ifdef USE_POPEN
|
||||||
{"pager", OPT_PAGER,
|
{"pager", OPT_PAGER,
|
||||||
"Pager to use to display results. If you don't supply an option the default pager is taken from your ENV variable PAGER. Valid pagers are less, more, cat [> filename], etc. See interactive help (\\h) also. This option does not work in batch mode.",
|
"Pager to use to display results. If you don't supply an option the default pager is taken from your ENV variable PAGER. Valid pagers are less, more, cat [> filename], etc. See interactive help (\\h) also. This option does not work in batch mode. Disable with --disable-pager. This option is disabled by default.",
|
||||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"no-pager", OPT_NOPAGER,
|
||||||
|
"Disable pager and print to stdout. See interactive help (\\h) also. WARNING: option deprecated; use --disable-pager instead.",
|
||||||
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"password", 'p',
|
{"password", 'p',
|
||||||
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
||||||
@ -643,8 +639,10 @@ static struct my_option my_long_options[] =
|
|||||||
{"debug-info", 'T', "Print some debug info at exit.", (gptr*) &info_flag,
|
{"debug-info", 'T', "Print some debug info at exit.", (gptr*) &info_flag,
|
||||||
(gptr*) &info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
(gptr*) &info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"tee", OPT_TEE,
|
{"tee", OPT_TEE,
|
||||||
"Append everything into outfile. See interactive help (\\h) also. Does not work in batch mode.",
|
"Append everything into outfile. See interactive help (\\h) also. Does not work in batch mode. Disable with --disable-tee. This option is disabled by default.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"no-tee", OPT_NOTEE, "Disable outfile. See interactive help (\\h) also. WARNING: option deprecated; use --disable-tee instead", 0, 0, 0, GET_NO_ARG,
|
||||||
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#ifndef DONT_ALLOW_USER_CHANGE
|
#ifndef DONT_ALLOW_USER_CHANGE
|
||||||
{"user", 'u', "User for login if not current user.", (gptr*) ¤t_user,
|
{"user", 'u', "User for login if not current user.", (gptr*) ¤t_user,
|
||||||
(gptr*) ¤t_user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
(gptr*) ¤t_user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@ -1725,7 +1723,14 @@ static int com_server_help(String *buffer __attribute__((unused)),
|
|||||||
|
|
||||||
if (help_arg[0] != '\'')
|
if (help_arg[0] != '\'')
|
||||||
{
|
{
|
||||||
(void) strxnmov(cmd_buf, sizeof(cmd_buf), "help '", help_arg, "'", NullS);
|
char *end_arg= strend(help_arg);
|
||||||
|
if(--end_arg)
|
||||||
|
{
|
||||||
|
while (my_isspace(charset_info,*end_arg))
|
||||||
|
end_arg--;
|
||||||
|
*++end_arg= '\0';
|
||||||
|
}
|
||||||
|
(void) strxnmov(cmd_buf, sizeof(cmd_buf), "help '", help_arg, "'", NullS);
|
||||||
server_cmd= cmd_buf;
|
server_cmd= cmd_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1811,9 +1816,13 @@ com_help(String *buffer __attribute__((unused)),
|
|||||||
{
|
{
|
||||||
reg1 int i, j;
|
reg1 int i, j;
|
||||||
char * help_arg= strchr(line,' '), buff[32], *end;
|
char * help_arg= strchr(line,' '), buff[32], *end;
|
||||||
|
|
||||||
if (help_arg)
|
if (help_arg)
|
||||||
return com_server_help(buffer,line,help_arg+1);
|
{
|
||||||
|
while (my_isspace(charset_info,*help_arg))
|
||||||
|
help_arg++;
|
||||||
|
if (*help_arg)
|
||||||
|
return com_server_help(buffer,line,help_arg);
|
||||||
|
}
|
||||||
|
|
||||||
put_info("\nFor information about MySQL products and services, visit:\n"
|
put_info("\nFor information about MySQL products and services, visit:\n"
|
||||||
" http://www.mysql.com/\n"
|
" http://www.mysql.com/\n"
|
||||||
|
@ -147,7 +147,7 @@ const char *user = 0, *host = 0, *unix_sock = 0, *opt_basedir="./";
|
|||||||
static int port = 0;
|
static int port = 0;
|
||||||
static my_bool opt_big_test= 0, opt_compress= 0, silent= 0, verbose = 0;
|
static my_bool opt_big_test= 0, opt_compress= 0, silent= 0, verbose = 0;
|
||||||
static my_bool tty_password= 0, ps_protocol= 0, ps_protocol_enabled= 0;
|
static my_bool tty_password= 0, ps_protocol= 0, ps_protocol_enabled= 0;
|
||||||
static uint start_lineno, *lineno;
|
static uint start_lineno= 0, *lineno;
|
||||||
const char *manager_user="root",*manager_host=0;
|
const char *manager_user="root",*manager_host=0;
|
||||||
char *manager_pass=0;
|
char *manager_pass=0;
|
||||||
int manager_port=MYSQL_MANAGER_PORT;
|
int manager_port=MYSQL_MANAGER_PORT;
|
||||||
@ -580,7 +580,7 @@ static void die(const char *fmt, ...)
|
|||||||
if (cur_file && cur_file != file_stack)
|
if (cur_file && cur_file != file_stack)
|
||||||
fprintf(stderr, "In included file \"%s\": ",
|
fprintf(stderr, "In included file \"%s\": ",
|
||||||
cur_file->file_name);
|
cur_file->file_name);
|
||||||
if (start_lineno != 0)
|
if (start_lineno > 0)
|
||||||
fprintf(stderr, "At line %u: ", start_lineno);
|
fprintf(stderr, "At line %u: ", start_lineno);
|
||||||
vfprintf(stderr, fmt, args);
|
vfprintf(stderr, fmt, args);
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
@ -4072,6 +4072,8 @@ int main(int argc, char **argv)
|
|||||||
parser.current_line += current_line_inc;
|
parser.current_line += current_line_inc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start_lineno= 0;
|
||||||
|
|
||||||
if (!query_executed && result_file && my_stat(result_file, &res_info, 0))
|
if (!query_executed && result_file && my_stat(result_file, &res_info, 0))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -2380,12 +2380,16 @@ then
|
|||||||
man_dirs="man"
|
man_dirs="man"
|
||||||
man1_files=`ls -1 $srcdir/man/*.1 | sed -e 's;^.*man/;;'`
|
man1_files=`ls -1 $srcdir/man/*.1 | sed -e 's;^.*man/;;'`
|
||||||
man1_files=`echo $man1_files`
|
man1_files=`echo $man1_files`
|
||||||
|
man8_files=`ls -1 $srcdir/man/*.8 | sed -e 's;^.*man/;;'`
|
||||||
|
man8_files=`echo $man8_files`
|
||||||
else
|
else
|
||||||
man_dirs=""
|
man_dirs=""
|
||||||
man1_files=""
|
man1_files=""
|
||||||
|
man8_files=""
|
||||||
fi
|
fi
|
||||||
AC_SUBST(man_dirs)
|
AC_SUBST(man_dirs)
|
||||||
AC_SUBST(man1_files)
|
AC_SUBST(man1_files)
|
||||||
|
AC_SUBST(man8_files)
|
||||||
|
|
||||||
# Shall we build the bench code?
|
# Shall we build the bench code?
|
||||||
AC_ARG_WITH(bench,
|
AC_ARG_WITH(bench,
|
||||||
|
@ -73,7 +73,10 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
|
|||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (flag)
|
if (flag)
|
||||||
|
{
|
||||||
info->last_pos= NULL; /* For heap_rnext/heap_rprev */
|
info->last_pos= NULL; /* For heap_rnext/heap_rprev */
|
||||||
|
info->lastkey_len= 0;
|
||||||
|
}
|
||||||
|
|
||||||
custom_arg.keyseg= keyinfo->seg;
|
custom_arg.keyseg= keyinfo->seg;
|
||||||
custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos);
|
custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos);
|
||||||
|
@ -945,14 +945,11 @@ ibool
|
|||||||
ibuf_fixed_addr_page(
|
ibuf_fixed_addr_page(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
/* out: TRUE if a fixed address ibuf i/o page */
|
/* out: TRUE if a fixed address ibuf i/o page */
|
||||||
|
ulint space, /* in: space id */
|
||||||
ulint page_no)/* in: page number */
|
ulint page_no)/* in: page number */
|
||||||
{
|
{
|
||||||
if ((ibuf_bitmap_page(page_no))
|
return((space == 0 && page_no == IBUF_TREE_ROOT_PAGE_NO)
|
||||||
|| (page_no == IBUF_TREE_ROOT_PAGE_NO)) {
|
|| ibuf_bitmap_page(page_no));
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -976,7 +973,7 @@ ibuf_page(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ibuf_fixed_addr_page(page_no)) {
|
if (ibuf_fixed_addr_page(space, page_no)) {
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
@ -1024,7 +1021,7 @@ ibuf_page_low(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ibuf_fixed_addr_page(page_no)) {
|
if (ibuf_fixed_addr_page(space, page_no)) {
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
@ -2931,7 +2928,7 @@ ibuf_merge_or_delete_for_page(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ibuf_fixed_addr_page(page_no) || fsp_descr_page(page_no)
|
if (ibuf_fixed_addr_page(space, page_no) || fsp_descr_page(page_no)
|
||||||
|| trx_sys_hdr_page(space, page_no)) {
|
|| trx_sys_hdr_page(space, page_no)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,8 @@
|
|||||||
## Process this file with automake to create Makefile.in
|
## Process this file with automake to create Makefile.in
|
||||||
|
|
||||||
man1_MANS = @man1_files@
|
man1_MANS = @man1_files@
|
||||||
EXTRA_DIST = $(man1_MANS)
|
man8_MANS = @man8_files@
|
||||||
|
EXTRA_DIST = $(man1_MANS) $(man8_MANS)
|
||||||
|
|
||||||
# Don't update the files from bitkeeper
|
# Don't update the files from bitkeeper
|
||||||
%::SCCS/s.%
|
%::SCCS/s.%
|
||||||
|
@ -60,6 +60,7 @@ dist-hook:
|
|||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(distdir)/std_data
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/lib/init_db.sql $(distdir)/lib
|
$(INSTALL_DATA) $(srcdir)/lib/init_db.sql $(distdir)/lib
|
||||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
||||||
|
|
||||||
@ -83,6 +84,7 @@ install-data-local:
|
|||||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.*001 $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.*001 $(DESTDIR)$(testdir)/std_data
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
||||||
|
44
mysql-test/r/bug20328.result
Normal file
44
mysql-test/r/bug20328.result
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
? (\?) Synonym for `help'.
|
||||||
|
clear (\c) Clear command.
|
||||||
|
connect (\r) Reconnect to the server. Optional arguments are db and host.
|
||||||
|
delimiter (\d) Set query delimiter.
|
||||||
|
edit (\e) Edit command with $EDITOR.
|
||||||
|
ego (\G) Send command to mysql server, display result vertically.
|
||||||
|
exit (\q) Exit mysql. Same as quit.
|
||||||
|
go (\g) Send command to mysql server.
|
||||||
|
help (\h) Display this help.
|
||||||
|
nopager (\n) Disable pager, print to stdout.
|
||||||
|
notee (\t) Don't write into outfile.
|
||||||
|
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
|
||||||
|
print (\p) Print current command.
|
||||||
|
prompt (\R) Change your mysql prompt.
|
||||||
|
quit (\q) Quit mysql.
|
||||||
|
rehash (\#) Rebuild completion hash.
|
||||||
|
source (\.) Execute an SQL script file. Takes a file name as an argument.
|
||||||
|
status (\s) Get status information from the server.
|
||||||
|
system (\!) Execute a system shell command.
|
||||||
|
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
|
||||||
|
use (\u) Use another database. Takes database name as argument.
|
||||||
|
charset_name(\C) Switch to another charset. Might be needed for processing binlog.
|
||||||
|
? (\?) Synonym for `help'.
|
||||||
|
clear (\c) Clear command.
|
||||||
|
connect (\r) Reconnect to the server. Optional arguments are db and host.
|
||||||
|
delimiter (\d) Set query delimiter.
|
||||||
|
edit (\e) Edit command with $EDITOR.
|
||||||
|
ego (\G) Send command to mysql server, display result vertically.
|
||||||
|
exit (\q) Exit mysql. Same as quit.
|
||||||
|
go (\g) Send command to mysql server.
|
||||||
|
help (\h) Display this help.
|
||||||
|
nopager (\n) Disable pager, print to stdout.
|
||||||
|
notee (\t) Don't write into outfile.
|
||||||
|
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
|
||||||
|
print (\p) Print current command.
|
||||||
|
prompt (\R) Change your mysql prompt.
|
||||||
|
quit (\q) Quit mysql.
|
||||||
|
rehash (\#) Rebuild completion hash.
|
||||||
|
source (\.) Execute an SQL script file. Takes a file name as an argument.
|
||||||
|
status (\s) Get status information from the server.
|
||||||
|
system (\!) Execute a system shell command.
|
||||||
|
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
|
||||||
|
use (\u) Use another database. Takes database name as argument.
|
||||||
|
charset_name(\C) Switch to another charset. Might be needed for processing binlog.
|
@ -824,6 +824,7 @@ select 1, min(a) from t1m where 1=99;
|
|||||||
1 NULL
|
1 NULL
|
||||||
select 1, min(1) from t1m where a=99;
|
select 1, min(1) from t1m where a=99;
|
||||||
1 min(1)
|
1 min(1)
|
||||||
|
1 NULL
|
||||||
select 1, min(1) from t1m where 1=99;
|
select 1, min(1) from t1m where 1=99;
|
||||||
1 min(1)
|
1 min(1)
|
||||||
1 NULL
|
1 NULL
|
||||||
@ -835,6 +836,7 @@ select 1, max(a) from t1m where 1=99;
|
|||||||
1 NULL
|
1 NULL
|
||||||
select 1, max(1) from t1m where a=99;
|
select 1, max(1) from t1m where a=99;
|
||||||
1 max(1)
|
1 max(1)
|
||||||
|
1 NULL
|
||||||
select 1, max(1) from t1m where 1=99;
|
select 1, max(1) from t1m where 1=99;
|
||||||
1 max(1)
|
1 max(1)
|
||||||
1 NULL
|
1 NULL
|
||||||
|
@ -1036,4 +1036,32 @@ a c
|
|||||||
abc abc abc
|
abc abc abc
|
||||||
xyz xyz xyz
|
xyz xyz xyz
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (s varchar(10));
|
||||||
|
INSERT INTO t1 VALUES ('yadda'), ('yaddy');
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(s) > 'ab';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t1.s AS `s` from test.t1 where (trim(test.t1.s) > _latin1'ab')
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM('y' FROM s) > 'ab';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t1.s AS `s` from test.t1 where (trim(both _latin1'y' from test.t1.s) > _latin1'ab')
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(LEADING 'y' FROM s) > 'ab';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t1.s AS `s` from test.t1 where (trim(leading _latin1'y' from test.t1.s) > _latin1'ab')
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(TRAILING 'y' FROM s) > 'ab';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t1.s AS `s` from test.t1 where (trim(trailing _latin1'y' from test.t1.s) > _latin1'ab')
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t1.s AS `s` from test.t1 where (trim(both _latin1'y' from test.t1.s) > _latin1'ab')
|
||||||
|
DROP TABLE t1;
|
||||||
End of 4.1 tests
|
End of 4.1 tests
|
||||||
|
@ -383,7 +383,7 @@ GRANT SELECT (c) ON `mysqltest_2`.`t1` TO 'mysqltest_3'@'localhost'
|
|||||||
update mysqltest_1.t1, mysqltest_1.t2 set q=10 where b=1;
|
update mysqltest_1.t1, mysqltest_1.t2 set q=10 where b=1;
|
||||||
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'q' in table 't1'
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'q' in table 't1'
|
||||||
update mysqltest_1.t1, mysqltest_2.t2 set d=20 where d=1;
|
update mysqltest_1.t1, mysqltest_2.t2 set d=20 where d=1;
|
||||||
ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'd' in table 't2'
|
ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 't1'
|
||||||
update mysqltest_2.t1, mysqltest_1.t2 set c=20 where b=1;
|
update mysqltest_2.t1, mysqltest_1.t2 set c=20 where b=1;
|
||||||
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 't1'
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 't1'
|
||||||
update mysqltest_2.t1, mysqltest_2.t2 set d=10 where s=2;
|
update mysqltest_2.t1, mysqltest_2.t2 set d=10 where s=2;
|
||||||
@ -402,6 +402,7 @@ revoke all on mysqltest_2.t1 from mysqltest_3@localhost;
|
|||||||
revoke all on mysqltest_2.t2 from mysqltest_3@localhost;
|
revoke all on mysqltest_2.t2 from mysqltest_3@localhost;
|
||||||
grant all on mysqltest_2.* to mysqltest_3@localhost;
|
grant all on mysqltest_2.* to mysqltest_3@localhost;
|
||||||
grant select on *.* to mysqltest_3@localhost;
|
grant select on *.* to mysqltest_3@localhost;
|
||||||
|
grant select on mysqltest_2.t1 to mysqltest_3@localhost;
|
||||||
flush privileges;
|
flush privileges;
|
||||||
use mysqltest_1;
|
use mysqltest_1;
|
||||||
update mysqltest_2.t1, mysqltest_2.t2 set c=500,d=600;
|
update mysqltest_2.t1, mysqltest_2.t2 set c=500,d=600;
|
||||||
@ -409,11 +410,11 @@ update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
|||||||
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'a' in table 't1'
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'a' in table 't1'
|
||||||
use mysqltest_2;
|
use mysqltest_2;
|
||||||
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
||||||
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysqltest_1'
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
|
||||||
update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
|
update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
|
||||||
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysqltest_1'
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't2'
|
||||||
update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
|
update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
|
||||||
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysqltest_1'
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
|
||||||
select t1.*,t2.* from mysqltest_1.t1,mysqltest_1.t2;
|
select t1.*,t2.* from mysqltest_1.t1,mysqltest_1.t2;
|
||||||
a q b r
|
a q b r
|
||||||
10 2 1 2
|
10 2 1 2
|
||||||
|
@ -143,3 +143,13 @@ flush privileges;
|
|||||||
drop user mysqltest_3@host3;
|
drop user mysqltest_3@host3;
|
||||||
drop user mysqltest_1@host1, mysqltest_2@host2, mysqltest_4@host4,
|
drop user mysqltest_1@host1, mysqltest_2@host2, mysqltest_4@host4,
|
||||||
mysqltest_5@host5, mysqltest_6@host6, mysqltest_7@host7;
|
mysqltest_5@host5, mysqltest_6@host6, mysqltest_7@host7;
|
||||||
|
create database mysqltest_1;
|
||||||
|
grant select, insert, update on `mysqltest\_1`.* to mysqltest_1@localhost;
|
||||||
|
set sql_log_off = 1;
|
||||||
|
ERROR HY000: Access denied; you need the SUPER privilege for this operation
|
||||||
|
set sql_log_bin = 0;
|
||||||
|
ERROR HY000: Access denied; you need the SUPER privilege for this operation
|
||||||
|
delete from mysql.user where user like 'mysqltest\_1';
|
||||||
|
delete from mysql.db where user like 'mysqltest\_1';
|
||||||
|
drop database mysqltest_1;
|
||||||
|
flush privileges;
|
||||||
|
@ -246,3 +246,38 @@ DELETE from t1 where a < 100;
|
|||||||
SELECT * from t1;
|
SELECT * from t1;
|
||||||
a
|
a
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1(a int not null, key using btree(a)) engine=heap;
|
||||||
|
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
|
||||||
|
select a from t1 where a > 2;
|
||||||
|
a
|
||||||
|
3
|
||||||
|
3
|
||||||
|
3
|
||||||
|
3
|
||||||
|
delete from t1 where a < 4;
|
||||||
|
select a from t1;
|
||||||
|
a
|
||||||
|
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
|
||||||
|
select a from t1 where a > 4;
|
||||||
|
a
|
||||||
|
delete from t1 where a > 4;
|
||||||
|
select a from t1;
|
||||||
|
a
|
||||||
|
3
|
||||||
|
3
|
||||||
|
1
|
||||||
|
3
|
||||||
|
3
|
||||||
|
1
|
||||||
|
2
|
||||||
|
2
|
||||||
|
2
|
||||||
|
select a from t1 where a > 3;
|
||||||
|
a
|
||||||
|
delete from t1 where a >= 2;
|
||||||
|
select a from t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
|
End of 4.1 tests
|
||||||
|
@ -2,3 +2,47 @@
|
|||||||
1
|
1
|
||||||
ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
ERROR at line 1: USE must be followed by a database name
|
ERROR at line 1: USE must be followed by a database name
|
||||||
|
? (\?) Synonym for `help'.
|
||||||
|
clear (\c) Clear command.
|
||||||
|
connect (\r) Reconnect to the server. Optional arguments are db and host.
|
||||||
|
delimiter (\d) Set query delimiter.
|
||||||
|
edit (\e) Edit command with $EDITOR.
|
||||||
|
ego (\G) Send command to mysql server, display result vertically.
|
||||||
|
exit (\q) Exit mysql. Same as quit.
|
||||||
|
go (\g) Send command to mysql server.
|
||||||
|
help (\h) Display this help.
|
||||||
|
nopager (\n) Disable pager, print to stdout.
|
||||||
|
notee (\t) Don't write into outfile.
|
||||||
|
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
|
||||||
|
print (\p) Print current command.
|
||||||
|
prompt (\R) Change your mysql prompt.
|
||||||
|
quit (\q) Quit mysql.
|
||||||
|
rehash (\#) Rebuild completion hash.
|
||||||
|
source (\.) Execute an SQL script file. Takes a file name as an argument.
|
||||||
|
status (\s) Get status information from the server.
|
||||||
|
system (\!) Execute a system shell command.
|
||||||
|
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
|
||||||
|
use (\u) Use another database. Takes database name as argument.
|
||||||
|
charset_name(\C) Switch to another charset. Might be needed for processing binlog.
|
||||||
|
? (\?) Synonym for `help'.
|
||||||
|
clear (\c) Clear command.
|
||||||
|
connect (\r) Reconnect to the server. Optional arguments are db and host.
|
||||||
|
delimiter (\d) Set query delimiter.
|
||||||
|
edit (\e) Edit command with $EDITOR.
|
||||||
|
ego (\G) Send command to mysql server, display result vertically.
|
||||||
|
exit (\q) Exit mysql. Same as quit.
|
||||||
|
go (\g) Send command to mysql server.
|
||||||
|
help (\h) Display this help.
|
||||||
|
nopager (\n) Disable pager, print to stdout.
|
||||||
|
notee (\t) Don't write into outfile.
|
||||||
|
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
|
||||||
|
print (\p) Print current command.
|
||||||
|
prompt (\R) Change your mysql prompt.
|
||||||
|
quit (\q) Quit mysql.
|
||||||
|
rehash (\#) Rebuild completion hash.
|
||||||
|
source (\.) Execute an SQL script file. Takes a file name as an argument.
|
||||||
|
status (\s) Get status information from the server.
|
||||||
|
system (\!) Execute a system shell command.
|
||||||
|
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
|
||||||
|
use (\u) Use another database. Takes database name as argument.
|
||||||
|
charset_name(\C) Switch to another charset. Might be needed for processing binlog.
|
||||||
|
@ -282,7 +282,7 @@ t9 MyISAM 9 Dynamic 2 220 440 4294967295 2048 0 NULL # # # latin1_swedish_ci NUL
|
|||||||
prepare stmt4 from ' show status like ''Threads_running'' ';
|
prepare stmt4 from ' show status like ''Threads_running'' ';
|
||||||
execute stmt4;
|
execute stmt4;
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Threads_running 1
|
Threads_running #
|
||||||
prepare stmt4 from ' show variables like ''sql_mode'' ';
|
prepare stmt4 from ' show variables like ''sql_mode'' ';
|
||||||
execute stmt4;
|
execute stmt4;
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
|
@ -2744,3 +2744,78 @@ SELECT i='1e+01',i=1e+01, i in (1e+01), i in ('1e+01') FROM t1;
|
|||||||
i='1e+01' i=1e+01 i in (1e+01) i in ('1e+01')
|
i='1e+01' i=1e+01 i in (1e+01) i in ('1e+01')
|
||||||
0 1 1 1
|
0 1 1 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a int, b int);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,1), (4,10);
|
||||||
|
CREATE TABLE t2 (a int PRIMARY KEY, b int, KEY b (b));
|
||||||
|
INSERT INTO t2 VALUES (1,NULL), (2,10);
|
||||||
|
ALTER TABLE t1 ENABLE KEYS;
|
||||||
|
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t2 index b b 5 NULL 2 Using index
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
a b a b
|
||||||
|
1 NULL 1 1
|
||||||
|
1 NULL 2 1
|
||||||
|
1 NULL 4 10
|
||||||
|
2 10 4 10
|
||||||
|
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t2 index b b 5 NULL 2 Using index
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
a b a b
|
||||||
|
1 NULL 1 1
|
||||||
|
1 NULL 2 1
|
||||||
|
1 NULL 4 10
|
||||||
|
2 10 4 10
|
||||||
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
CREATE TABLE t1 (key1 float default NULL, UNIQUE KEY key1 (key1));
|
||||||
|
CREATE TABLE t2 (key2 float default NULL, UNIQUE KEY key2 (key2));
|
||||||
|
INSERT INTO t1 VALUES (0.3762),(0.3845),(0.6158),(0.7941);
|
||||||
|
INSERT INTO t2 VALUES (1.3762),(1.3845),(1.6158),(1.7941);
|
||||||
|
explain select max(key1) from t1 where key1 <= 0.6158;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
explain select max(key2) from t2 where key2 <= 1.6158;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
explain select min(key1) from t1 where key1 >= 0.3762;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
explain select min(key2) from t2 where key2 >= 1.3762;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
explain select max(key1), min(key2) from t1, t2
|
||||||
|
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
explain select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
explain select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
|
select max(key1) from t1 where key1 <= 0.6158;
|
||||||
|
max(key1)
|
||||||
|
0.61580002307892
|
||||||
|
select max(key2) from t2 where key2 <= 1.6158;
|
||||||
|
max(key2)
|
||||||
|
1.6158000230789
|
||||||
|
select min(key1) from t1 where key1 >= 0.3762;
|
||||||
|
min(key1)
|
||||||
|
0.37619999051094
|
||||||
|
select min(key2) from t2 where key2 >= 1.3762;
|
||||||
|
min(key2)
|
||||||
|
1.3761999607086
|
||||||
|
select max(key1), min(key2) from t1, t2
|
||||||
|
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||||
|
max(key1) min(key2)
|
||||||
|
0.61580002307892 1.3761999607086
|
||||||
|
select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||||
|
max(key1)
|
||||||
|
0.61580002307892
|
||||||
|
select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||||
|
min(key1)
|
||||||
|
0.37619999051094
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
@ -539,7 +539,7 @@ EXPLAIN EXTENDED SELECT MAX(numreponse) FROM t1 WHERE numeropost='1';
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select max(test.t1.numreponse) AS `MAX(numreponse)` from test.t1 where (test.t1.numeropost = _latin1'1')
|
Note 1003 select max(test.t1.numreponse) AS `MAX(numreponse)` from test.t1
|
||||||
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT MAX(numreponse) FROM t1 WHERE numeropost='1');
|
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT MAX(numreponse) FROM t1 WHERE numeropost='1');
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 const PRIMARY,numreponse PRIMARY 7 const,const 1 Using index
|
1 PRIMARY t1 const PRIMARY,numreponse PRIMARY 7 const,const 1 Using index
|
||||||
@ -2868,3 +2868,30 @@ select 1 from dual where 1 < any (select 2 from dual);
|
|||||||
select 1 from dual where 1 < all (select 2 from dual where 1!=1);
|
select 1 from dual where 1 < all (select 2 from dual where 1!=1);
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
|
create table t1 (s1 char);
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
select * from t1 where (s1 < any (select s1 from t1));
|
||||||
|
s1
|
||||||
|
1
|
||||||
|
select * from t1 where not (s1 < any (select s1 from t1));
|
||||||
|
s1
|
||||||
|
2
|
||||||
|
select * from t1 where (s1 < ALL (select s1+1 from t1));
|
||||||
|
s1
|
||||||
|
1
|
||||||
|
select * from t1 where not(s1 < ALL (select s1+1 from t1));
|
||||||
|
s1
|
||||||
|
2
|
||||||
|
select * from t1 where (s1+1 = ANY (select s1 from t1));
|
||||||
|
s1
|
||||||
|
1
|
||||||
|
select * from t1 where NOT(s1+1 = ANY (select s1 from t1));
|
||||||
|
s1
|
||||||
|
2
|
||||||
|
select * from t1 where (s1 = ALL (select s1/s1 from t1));
|
||||||
|
s1
|
||||||
|
1
|
||||||
|
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
||||||
|
s1
|
||||||
|
2
|
||||||
|
drop table t1;
|
||||||
|
@ -130,3 +130,15 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
5 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 32 func 1 Using index; Using where
|
5 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 32 func 1 Using index; Using where
|
||||||
6 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 32 func 1 Using index; Using where
|
6 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 32 func 1 Using index; Using where
|
||||||
drop table t1, t2, t3, t4;
|
drop table t1, t2, t3, t4;
|
||||||
|
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (a int(10), PRIMARY KEY (a)) Engine=InnoDB;
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
CREATE TABLE t3 (a int(10), b int(10), c int(10),
|
||||||
|
PRIMARY KEY (a)) Engine=InnoDB;
|
||||||
|
INSERT INTO t3 VALUES (1,2,1);
|
||||||
|
SELECT t1.* FROM t1 WHERE (SELECT COUNT(*) FROM t3,t2 WHERE t3.c=t2.a
|
||||||
|
and t2.a='1' AND t1.a=t3.b) > 0;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
9
mysql-test/t/bug20328.test
Normal file
9
mysql-test/t/bug20328.test
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# This test should work in embedded server after we fix mysqltest
|
||||||
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #20328: mysql client interprets commands in comments
|
||||||
|
#
|
||||||
|
--exec echo 'help' | $MYSQL
|
||||||
|
--exec echo 'help ' | $MYSQL
|
||||||
|
|
@ -698,4 +698,19 @@ SELECT a, CONCAT(a,' ',a) AS c FROM t1
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#17526: WRONG PRINT for TRIM FUNCTION with two arguments
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (s varchar(10));
|
||||||
|
INSERT INTO t1 VALUES ('yadda'), ('yaddy');
|
||||||
|
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(s) > 'ab';
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM('y' FROM s) > 'ab';
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(LEADING 'y' FROM s) > 'ab';
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(TRAILING 'y' FROM s) > 'ab';
|
||||||
|
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 4.1 tests
|
--echo End of 4.1 tests
|
||||||
|
@ -323,7 +323,7 @@ connection conn1;
|
|||||||
show grants for mysqltest_3@localhost;
|
show grants for mysqltest_3@localhost;
|
||||||
--error 1143
|
--error 1143
|
||||||
update mysqltest_1.t1, mysqltest_1.t2 set q=10 where b=1;
|
update mysqltest_1.t1, mysqltest_1.t2 set q=10 where b=1;
|
||||||
--error 1143
|
--error 1142
|
||||||
update mysqltest_1.t1, mysqltest_2.t2 set d=20 where d=1;
|
update mysqltest_1.t1, mysqltest_2.t2 set d=20 where d=1;
|
||||||
--error 1143
|
--error 1143
|
||||||
update mysqltest_2.t1, mysqltest_1.t2 set c=20 where b=1;
|
update mysqltest_2.t1, mysqltest_1.t2 set c=20 where b=1;
|
||||||
@ -343,6 +343,8 @@ revoke all on mysqltest_2.t2 from mysqltest_3@localhost;
|
|||||||
#test the db/table level privileges
|
#test the db/table level privileges
|
||||||
grant all on mysqltest_2.* to mysqltest_3@localhost;
|
grant all on mysqltest_2.* to mysqltest_3@localhost;
|
||||||
grant select on *.* to mysqltest_3@localhost;
|
grant select on *.* to mysqltest_3@localhost;
|
||||||
|
# Next grant is needed to trigger bug#7391. Do not optimize!
|
||||||
|
grant select on mysqltest_2.t1 to mysqltest_3@localhost;
|
||||||
flush privileges;
|
flush privileges;
|
||||||
disconnect conn1;
|
disconnect conn1;
|
||||||
connect (conn2,localhost,mysqltest_3,,);
|
connect (conn2,localhost,mysqltest_3,,);
|
||||||
@ -354,11 +356,11 @@ update mysqltest_2.t1, mysqltest_2.t2 set c=500,d=600;
|
|||||||
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
||||||
use mysqltest_2;
|
use mysqltest_2;
|
||||||
#the following used to succeed, it must fail now.
|
#the following used to succeed, it must fail now.
|
||||||
--error 1044
|
--error 1142
|
||||||
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
||||||
--error 1044
|
--error 1142
|
||||||
update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
|
update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
|
||||||
--error 1044
|
--error 1142
|
||||||
update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
|
update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
|
||||||
#lets see the result
|
#lets see the result
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -238,5 +238,22 @@ connect (con9,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
|||||||
disconnect con9;
|
disconnect con9;
|
||||||
connection default;
|
connection default;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug# 16180 - Setting SQL_LOG_OFF without SUPER privilege is silently ignored
|
||||||
|
#
|
||||||
|
create database mysqltest_1;
|
||||||
|
grant select, insert, update on `mysqltest\_1`.* to mysqltest_1@localhost;
|
||||||
|
connect (con10,localhost,mysqltest_1,,);
|
||||||
|
connection con10;
|
||||||
|
--error 1227
|
||||||
|
set sql_log_off = 1;
|
||||||
|
--error 1227
|
||||||
|
set sql_log_bin = 0;
|
||||||
|
disconnect con10;
|
||||||
|
connection default;
|
||||||
|
delete from mysql.user where user like 'mysqltest\_1';
|
||||||
|
delete from mysql.db where user like 'mysqltest\_1';
|
||||||
|
drop database mysqltest_1;
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -164,4 +164,22 @@ DELETE from t1 where a < 100;
|
|||||||
SELECT * from t1;
|
SELECT * from t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
#
|
||||||
|
# Bug #9719: problem with delete
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1(a int not null, key using btree(a)) engine=heap;
|
||||||
|
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
|
||||||
|
select a from t1 where a > 2;
|
||||||
|
delete from t1 where a < 4;
|
||||||
|
select a from t1;
|
||||||
|
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
|
||||||
|
select a from t1 where a > 4;
|
||||||
|
delete from t1 where a > 4;
|
||||||
|
select a from t1;
|
||||||
|
select a from t1 where a > 3;
|
||||||
|
delete from t1 where a >= 2;
|
||||||
|
select a from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo End of 4.1 tests
|
||||||
|
@ -27,3 +27,9 @@
|
|||||||
# client comment recognized, but parameter missing => error
|
# client comment recognized, but parameter missing => error
|
||||||
--exec echo "use" > $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
--exec echo "use" > $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #20328: mysql client interprets commands in comments
|
||||||
|
#
|
||||||
|
--exec echo 'help' | $MYSQL
|
||||||
|
--exec echo 'help ' | $MYSQL
|
||||||
|
@ -107,7 +107,8 @@ create table t4 (f text character set cp932);
|
|||||||
--exec $MYSQL --default-character-set=cp932 test -e "insert into t4 values(_cp932'ƒ\');"
|
--exec $MYSQL --default-character-set=cp932 test -e "insert into t4 values(_cp932'ƒ\');"
|
||||||
flush logs;
|
flush logs;
|
||||||
rename table t3 to t03, t4 to t04;
|
rename table t3 to t03, t4 to t04;
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000004 | $MYSQL --default-character-set=utf8
|
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000004 > $MYSQL_TEST_DIR/var/tmp/bug16217.sql
|
||||||
|
--exec $MYSQL --default-character-set=utf8 < $MYSQL_TEST_DIR/var/tmp/bug16217.sql
|
||||||
# original and recovered data must be equal
|
# original and recovered data must be equal
|
||||||
select HEX(f) from t03;
|
select HEX(f) from t03;
|
||||||
select HEX(f) from t3;
|
select HEX(f) from t3;
|
||||||
@ -123,7 +124,8 @@ flush logs;
|
|||||||
# resulted binlog, parly consisting of multi-byte utf8 chars,
|
# resulted binlog, parly consisting of multi-byte utf8 chars,
|
||||||
# must be digestable for both client and server. In 4.1 the client
|
# must be digestable for both client and server. In 4.1 the client
|
||||||
# should use default-character-set same as the server.
|
# should use default-character-set same as the server.
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000006 | $MYSQL
|
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000006 > $MYSQL_TEST_DIR/var/tmp/bug14157.sql
|
||||||
|
--exec $MYSQL < $MYSQL_TEST_DIR/var/tmp/bug14157.sql
|
||||||
select * from t5 /* must be (1),(1) */;
|
select * from t5 /* must be (1),(1) */;
|
||||||
|
|
||||||
# clean up
|
# clean up
|
||||||
|
@ -305,6 +305,7 @@ prepare stmt4 from ' show table status from test like ''t9%'' ';
|
|||||||
--replace_result 2147483647 4294967295
|
--replace_result 2147483647 4294967295
|
||||||
# Bug#4288
|
# Bug#4288
|
||||||
execute stmt4;
|
execute stmt4;
|
||||||
|
--replace_column 2 #
|
||||||
prepare stmt4 from ' show status like ''Threads_running'' ';
|
prepare stmt4 from ' show status like ''Threads_running'' ';
|
||||||
execute stmt4;
|
execute stmt4;
|
||||||
prepare stmt4 from ' show variables like ''sql_mode'' ';
|
prepare stmt4 from ' show variables like ''sql_mode'' ';
|
||||||
|
@ -2297,4 +2297,49 @@ INSERT INTO t1 VALUES (10);
|
|||||||
SELECT i='1e+01',i=1e+01, i in (1e+01), i in ('1e+01') FROM t1;
|
SELECT i='1e+01',i=1e+01, i in (1e+01), i in ('1e+01') FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a int, b int);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,1), (4,10);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (a int PRIMARY KEY, b int, KEY b (b));
|
||||||
|
INSERT INTO t2 VALUES (1,NULL), (2,10);
|
||||||
|
ALTER TABLE t1 ENABLE KEYS;
|
||||||
|
|
||||||
|
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||||
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
#
|
||||||
|
# Bug #20954 "avg(keyval) retuns 0.38 but max(keyval) returns an empty set"
|
||||||
|
#
|
||||||
|
--disable_ps_protocol
|
||||||
|
CREATE TABLE t1 (key1 float default NULL, UNIQUE KEY key1 (key1));
|
||||||
|
CREATE TABLE t2 (key2 float default NULL, UNIQUE KEY key2 (key2));
|
||||||
|
INSERT INTO t1 VALUES (0.3762),(0.3845),(0.6158),(0.7941);
|
||||||
|
INSERT INTO t2 VALUES (1.3762),(1.3845),(1.6158),(1.7941);
|
||||||
|
|
||||||
|
explain select max(key1) from t1 where key1 <= 0.6158;
|
||||||
|
explain select max(key2) from t2 where key2 <= 1.6158;
|
||||||
|
explain select min(key1) from t1 where key1 >= 0.3762;
|
||||||
|
explain select min(key2) from t2 where key2 >= 1.3762;
|
||||||
|
explain select max(key1), min(key2) from t1, t2
|
||||||
|
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||||
|
explain select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||||
|
explain select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||||
|
|
||||||
|
select max(key1) from t1 where key1 <= 0.6158;
|
||||||
|
select max(key2) from t2 where key2 <= 1.6158;
|
||||||
|
select min(key1) from t1 where key1 >= 0.3762;
|
||||||
|
select min(key2) from t2 where key2 >= 1.3762;
|
||||||
|
select max(key1), min(key2) from t1, t2
|
||||||
|
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||||
|
select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||||
|
select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
--enable_ps_protocol
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -1844,4 +1844,21 @@ select 1 from dual where 2 > any (select 1);
|
|||||||
select 1 from dual where 2 > all (select 1);
|
select 1 from dual where 2 > all (select 1);
|
||||||
select 1 from dual where 1 < any (select 2 from dual);
|
select 1 from dual where 1 < any (select 2 from dual);
|
||||||
select 1 from dual where 1 < all (select 2 from dual where 1!=1);
|
select 1 from dual where 1 < all (select 2 from dual where 1!=1);
|
||||||
|
|
||||||
|
# BUG#20975 Wrong query results for subqueries within NOT
|
||||||
|
create table t1 (s1 char);
|
||||||
|
insert into t1 values (1),(2);
|
||||||
|
|
||||||
|
select * from t1 where (s1 < any (select s1 from t1));
|
||||||
|
select * from t1 where not (s1 < any (select s1 from t1));
|
||||||
|
|
||||||
|
select * from t1 where (s1 < ALL (select s1+1 from t1));
|
||||||
|
select * from t1 where not(s1 < ALL (select s1+1 from t1));
|
||||||
|
|
||||||
|
select * from t1 where (s1+1 = ANY (select s1 from t1));
|
||||||
|
select * from t1 where NOT(s1+1 = ANY (select s1 from t1));
|
||||||
|
|
||||||
|
select * from t1 where (s1 = ALL (select s1/s1 from t1));
|
||||||
|
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
||||||
|
drop table t1;
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -150,3 +150,21 @@ EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JO
|
|||||||
|
|
||||||
drop table t1, t2, t3, t4;
|
drop table t1, t2, t3, t4;
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #20792: Incorrect results from aggregate subquery
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (a int(10), PRIMARY KEY (a)) Engine=InnoDB;
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
|
||||||
|
CREATE TABLE t3 (a int(10), b int(10), c int(10),
|
||||||
|
PRIMARY KEY (a)) Engine=InnoDB;
|
||||||
|
INSERT INTO t3 VALUES (1,2,1);
|
||||||
|
|
||||||
|
SELECT t1.* FROM t1 WHERE (SELECT COUNT(*) FROM t3,t2 WHERE t3.c=t2.a
|
||||||
|
and t2.a='1' AND t1.a=t3.b) > 0;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
@ -110,7 +110,7 @@ uint bitmap_set_next(MY_BITMAP *map)
|
|||||||
{
|
{
|
||||||
uchar *bitmap=map->bitmap;
|
uchar *bitmap=map->bitmap;
|
||||||
uint bit_found = MY_BIT_NONE;
|
uint bit_found = MY_BIT_NONE;
|
||||||
uint bitmap_size=map->bitmap_size*8;
|
uint bitmap_size=map->bitmap_size;
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
DBUG_ASSERT(map->bitmap);
|
DBUG_ASSERT(map->bitmap);
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
#!/usr/bin/perl
|
#!@PERL@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2003 MySQL AB
|
||||||
|
# For a more info consult the file COPYRIGHT distributed with this file.
|
||||||
|
#
|
||||||
# fill_func_tables - parse ../Docs/manual.texi
|
# fill_func_tables - parse ../Docs/manual.texi
|
||||||
|
#
|
||||||
# Original version by vva
|
# Original version by Victor Vagin <vva@mysql.com>
|
||||||
|
#
|
||||||
|
|
||||||
my $cat_name= "";
|
my $cat_name= "";
|
||||||
my $func_name= "";
|
my $func_name= "";
|
||||||
|
@ -80,7 +80,7 @@ mkdir $BASE $BASE/bin $BASE/docs \
|
|||||||
|
|
||||||
if [ $BASE_SYSTEM != "netware" ] ; then
|
if [ $BASE_SYSTEM != "netware" ] ; then
|
||||||
mkdir $BASE/share/mysql $BASE/tests $BASE/sql-bench $BASE/man \
|
mkdir $BASE/share/mysql $BASE/tests $BASE/sql-bench $BASE/man \
|
||||||
$BASE/man/man1 $BASE/data $BASE/data/mysql $BASE/data/test
|
$BASE/man/man1 $BASE/man/man8 $BASE/data $BASE/data/mysql $BASE/data/test
|
||||||
|
|
||||||
chmod o-rwx $BASE/data $BASE/data/*
|
chmod o-rwx $BASE/data $BASE/data/*
|
||||||
fi
|
fi
|
||||||
@ -203,6 +203,7 @@ if [ $BASE_SYSTEM != "netware" ] ; then
|
|||||||
fi
|
fi
|
||||||
if [ -d man ] ; then
|
if [ -d man ] ; then
|
||||||
$CP man/*.1 $BASE/man/man1
|
$CP man/*.1 $BASE/man/man1
|
||||||
|
$CP man/*.8 $BASE/man/man8
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -287,7 +288,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Make safe_mysqld a symlink to mysqld_safe for backwards portability
|
# Make safe_mysqld a symlink to mysqld_safe for backwards portability
|
||||||
# To be removed in MySQL 4.1
|
|
||||||
(cd $BASE/bin ; ln -s mysqld_safe safe_mysqld )
|
(cd $BASE/bin ; ln -s mysqld_safe safe_mysqld )
|
||||||
|
|
||||||
# Clean up if we did this from a bk tree
|
# Clean up if we did this from a bk tree
|
||||||
|
@ -206,7 +206,7 @@ copy_dir_files()
|
|||||||
for i in *.c *.cpp *.h *.ih *.i *.ic *.asm *.def *.hpp *.yy \
|
for i in *.c *.cpp *.h *.ih *.i *.ic *.asm *.def *.hpp *.yy \
|
||||||
README INSTALL* LICENSE AUTHORS NEWS ChangeLog \
|
README INSTALL* LICENSE AUTHORS NEWS ChangeLog \
|
||||||
*.inc *.test *.result *.pem Moscow_leap des_key_file \
|
*.inc *.test *.result *.pem Moscow_leap des_key_file \
|
||||||
*.vcproj *.sln *.dat *.000001 *.require *.opt
|
*.vcproj *.sln *.dat *.000001 *.require *.opt *.cnf
|
||||||
do
|
do
|
||||||
if [ -f $i ]
|
if [ -f $i ]
|
||||||
then
|
then
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) 2002-2003 MySQL AB
|
# Copyright (C) 2002-2003 MySQL AB
|
||||||
# For a more info consult the file COPYRIGHT distributed with this file.
|
# For a more info consult the file COPYRIGHT distributed with this file.
|
||||||
|
@ -3099,6 +3099,28 @@ Item *Item_cond_or::neg_transformer(THD *thd) /* NOT(a OR b OR ...) -> */
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Item *Item_func_nop_all::neg_transformer(THD *thd)
|
||||||
|
{
|
||||||
|
/* "NOT (e $cmp$ ANY (SELECT ...)) -> e $rev_cmp$" ALL (SELECT ...) */
|
||||||
|
Item_func_not_all *new_item= new Item_func_not_all(args[0]);
|
||||||
|
Item_allany_subselect *allany= (Item_allany_subselect*)args[0];
|
||||||
|
allany->func= allany->func_creator(FALSE);
|
||||||
|
allany->all= !allany->all;
|
||||||
|
allany->upper_item= new_item;
|
||||||
|
return new_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
Item *Item_func_not_all::neg_transformer(THD *thd)
|
||||||
|
{
|
||||||
|
/* "NOT (e $cmp$ ALL (SELECT ...)) -> e $rev_cmp$" ANY (SELECT ...) */
|
||||||
|
Item_func_nop_all *new_item= new Item_func_nop_all(args[0]);
|
||||||
|
Item_allany_subselect *allany= (Item_allany_subselect*)args[0];
|
||||||
|
allany->all= !allany->all;
|
||||||
|
allany->func= allany->func_creator(TRUE);
|
||||||
|
allany->upper_item= new_item;
|
||||||
|
return new_item;
|
||||||
|
}
|
||||||
|
|
||||||
Item *Item_func_eq::negated_item() /* a = b -> a != b */
|
Item *Item_func_eq::negated_item() /* a = b -> a != b */
|
||||||
{
|
{
|
||||||
return new Item_func_ne(args[0], args[1]);
|
return new Item_func_ne(args[0], args[1]);
|
||||||
|
@ -268,6 +268,7 @@ public:
|
|||||||
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; };
|
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; };
|
||||||
void set_sub_test(Item_maxmin_subselect *item) { test_sub_item= item; };
|
void set_sub_test(Item_maxmin_subselect *item) { test_sub_item= item; };
|
||||||
bool empty_underlying_subquery();
|
bool empty_underlying_subquery();
|
||||||
|
Item *neg_transformer(THD *thd);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -278,6 +279,7 @@ public:
|
|||||||
Item_func_nop_all(Item *a) :Item_func_not_all(a) {}
|
Item_func_nop_all(Item *a) :Item_func_not_all(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "<nop>"; }
|
const char *func_name() const { return "<nop>"; }
|
||||||
|
Item *neg_transformer(THD *thd);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1444,6 +1444,23 @@ void Item_func_trim::fix_length_and_dec()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Item_func_trim::print(String *str)
|
||||||
|
{
|
||||||
|
if (arg_count == 1)
|
||||||
|
{
|
||||||
|
Item_func::print(str);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
str->append(Item_func_trim::func_name());
|
||||||
|
str->append('(');
|
||||||
|
str->append(mode_name());
|
||||||
|
str->append(' ');
|
||||||
|
args[1]->print(str);
|
||||||
|
str->append(" from ",6);
|
||||||
|
args[0]->print(str);
|
||||||
|
str->append(')');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Item_func_password */
|
/* Item_func_password */
|
||||||
|
|
||||||
|
@ -218,6 +218,8 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "trim"; }
|
const char *func_name() const { return "trim"; }
|
||||||
|
void print(String *str);
|
||||||
|
virtual const char *mode_name() const { return "both"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -228,6 +230,7 @@ public:
|
|||||||
Item_func_ltrim(Item *a) :Item_func_trim(a) {}
|
Item_func_ltrim(Item *a) :Item_func_trim(a) {}
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
const char *func_name() const { return "ltrim"; }
|
const char *func_name() const { return "ltrim"; }
|
||||||
|
const char *mode_name() const { return "leading"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -238,6 +241,7 @@ public:
|
|||||||
Item_func_rtrim(Item *a) :Item_func_trim(a) {}
|
Item_func_rtrim(Item *a) :Item_func_trim(a) {}
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
const char *func_name() const { return "rtrim"; }
|
const char *func_name() const { return "rtrim"; }
|
||||||
|
const char *mode_name() const { return "trailing"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -542,14 +542,14 @@ Item_in_subselect::Item_in_subselect(Item * left_exp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Item_allany_subselect::Item_allany_subselect(Item * left_exp,
|
Item_allany_subselect::Item_allany_subselect(Item * left_exp,
|
||||||
Comp_creator *fn,
|
chooser_compare_func_creator fc,
|
||||||
st_select_lex *select_lex,
|
st_select_lex *select_lex,
|
||||||
bool all_arg)
|
bool all_arg)
|
||||||
:Item_in_subselect(), all(all_arg)
|
:Item_in_subselect(), all(all_arg), func_creator(fc)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Item_in_subselect::Item_in_subselect");
|
DBUG_ENTER("Item_in_subselect::Item_in_subselect");
|
||||||
left_expr= left_exp;
|
left_expr= left_exp;
|
||||||
func= fn;
|
func= func_creator(all_arg);
|
||||||
init(select_lex, new select_exists_subselect(this));
|
init(select_lex, new select_exists_subselect(this));
|
||||||
max_columns= 1;
|
max_columns= 1;
|
||||||
abort_on_null= 0;
|
abort_on_null= 0;
|
||||||
|
@ -251,14 +251,13 @@ public:
|
|||||||
/* ALL/ANY/SOME subselect */
|
/* ALL/ANY/SOME subselect */
|
||||||
class Item_allany_subselect :public Item_in_subselect
|
class Item_allany_subselect :public Item_in_subselect
|
||||||
{
|
{
|
||||||
protected:
|
|
||||||
Comp_creator *func;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
chooser_compare_func_creator func_creator;
|
||||||
|
Comp_creator *func;
|
||||||
bool all;
|
bool all;
|
||||||
|
|
||||||
Item_allany_subselect(Item * left_expr, Comp_creator *f,
|
Item_allany_subselect(Item * left_expr, chooser_compare_func_creator fc,
|
||||||
st_select_lex *select_lex, bool all);
|
st_select_lex *select_lex, bool all);
|
||||||
|
|
||||||
// only ALL subquery has upper not
|
// only ALL subquery has upper not
|
||||||
subs_type substype() { return all?ALL_SUBS:ANY_SUBS; }
|
subs_type substype() { return all?ALL_SUBS:ANY_SUBS; }
|
||||||
|
@ -387,8 +387,9 @@ enum enum_var_type
|
|||||||
OPT_DEFAULT, OPT_SESSION, OPT_GLOBAL
|
OPT_DEFAULT, OPT_SESSION, OPT_GLOBAL
|
||||||
};
|
};
|
||||||
class sys_var;
|
class sys_var;
|
||||||
#include "item.h"
|
class Comp_creator;
|
||||||
typedef Comp_creator* (*chooser_compare_func_creator)(bool invert);
|
typedef Comp_creator* (*chooser_compare_func_creator)(bool invert);
|
||||||
|
#include "item.h"
|
||||||
/* sql_parse.cc */
|
/* sql_parse.cc */
|
||||||
void free_items(Item *item);
|
void free_items(Item *item);
|
||||||
void cleanup_items(Item *item);
|
void cleanup_items(Item *item);
|
||||||
|
@ -2646,6 +2646,11 @@ You should consider changing lower_case_table_names to 1 or 2",
|
|||||||
mysql_real_data_home);
|
mysql_real_data_home);
|
||||||
lower_case_table_names= 0;
|
lower_case_table_names= 0;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lower_case_file_system=
|
||||||
|
(test_if_case_insensitive(mysql_real_data_home) == 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Reset table_alias_charset, now that lower_case_table_names is set. */
|
/* Reset table_alias_charset, now that lower_case_table_names is set. */
|
||||||
table_alias_charset= (lower_case_table_names ?
|
table_alias_charset= (lower_case_table_names ?
|
||||||
|
@ -424,7 +424,8 @@ static sys_var_thd_bit sys_sql_big_tables("sql_big_tables", 0,
|
|||||||
static sys_var_thd_bit sys_big_selects("sql_big_selects", 0,
|
static sys_var_thd_bit sys_big_selects("sql_big_selects", 0,
|
||||||
set_option_bit,
|
set_option_bit,
|
||||||
OPTION_BIG_SELECTS);
|
OPTION_BIG_SELECTS);
|
||||||
static sys_var_thd_bit sys_log_off("sql_log_off", 0,
|
static sys_var_thd_bit sys_log_off("sql_log_off",
|
||||||
|
check_log_update,
|
||||||
set_option_bit,
|
set_option_bit,
|
||||||
OPTION_LOG_OFF);
|
OPTION_LOG_OFF);
|
||||||
static sys_var_thd_bit sys_log_update("sql_log_update",
|
static sys_var_thd_bit sys_log_update("sql_log_update",
|
||||||
|
@ -5442,7 +5442,7 @@ Item * all_any_subquery_creator(Item *left_expr,
|
|||||||
return new Item_func_not(new Item_in_subselect(left_expr, select_lex));
|
return new Item_func_not(new Item_in_subselect(left_expr, select_lex));
|
||||||
|
|
||||||
Item_allany_subselect *it=
|
Item_allany_subselect *it=
|
||||||
new Item_allany_subselect(left_expr, (*cmp)(all), select_lex, all);
|
new Item_allany_subselect(left_expr, cmp, select_lex, all);
|
||||||
if (all)
|
if (all)
|
||||||
return it->upper_item= new Item_func_not_all(it); /* ALL */
|
return it->upper_item= new Item_func_not_all(it); /* ALL */
|
||||||
|
|
||||||
|
@ -547,6 +547,24 @@ JOIN::optimize()
|
|||||||
}
|
}
|
||||||
zero_result_cause= "Select tables optimized away";
|
zero_result_cause= "Select tables optimized away";
|
||||||
tables_list= 0; // All tables resolved
|
tables_list= 0; // All tables resolved
|
||||||
|
/*
|
||||||
|
Extract all table-independent conditions and replace the WHERE
|
||||||
|
clause with them. All other conditions were computed by opt_sum_query
|
||||||
|
and the MIN/MAX/COUNT function(s) have been replaced by constants,
|
||||||
|
so there is no need to compute the whole WHERE clause again.
|
||||||
|
Notice that make_cond_for_table() will always succeed to remove all
|
||||||
|
computed conditions, because opt_sum_query() is applicable only to
|
||||||
|
conjunctions.
|
||||||
|
*/
|
||||||
|
if (conds)
|
||||||
|
{
|
||||||
|
COND *table_independent_conds=
|
||||||
|
make_cond_for_table(conds, PSEUDO_TABLE_BITS, 0);
|
||||||
|
DBUG_EXECUTE("where",
|
||||||
|
print_where(table_independent_conds,
|
||||||
|
"where after opt_sum_query()"););
|
||||||
|
conds= table_independent_conds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!tables_list)
|
if (!tables_list)
|
||||||
@ -2143,8 +2161,11 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end,
|
|||||||
/* field = expression OR field IS NULL */
|
/* field = expression OR field IS NULL */
|
||||||
old->level= and_level;
|
old->level= and_level;
|
||||||
old->optimize= KEY_OPTIMIZE_REF_OR_NULL;
|
old->optimize= KEY_OPTIMIZE_REF_OR_NULL;
|
||||||
/* Remember the NOT NULL value */
|
/*
|
||||||
if (old->val->is_null())
|
Remember the NOT NULL value unless the value does not depend
|
||||||
|
on other tables.
|
||||||
|
*/
|
||||||
|
if (!old->val->used_tables() && old->val->is_null())
|
||||||
old->val= new_fields->val;
|
old->val= new_fields->val;
|
||||||
/* The referred expression can be NULL: */
|
/* The referred expression can be NULL: */
|
||||||
old->null_rejecting= 0;
|
old->null_rejecting= 0;
|
||||||
@ -4452,10 +4473,16 @@ return_zero_rows(JOIN *join, select_result *result,TABLE_LIST *tables,
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
used only in JOIN::clear
|
||||||
|
*/
|
||||||
static void clear_tables(JOIN *join)
|
static void clear_tables(JOIN *join)
|
||||||
{
|
{
|
||||||
for (uint i=0 ; i < join->tables ; i++)
|
/*
|
||||||
|
must clear only the non-const tables, as const tables
|
||||||
|
are not re-calculated.
|
||||||
|
*/
|
||||||
|
for (uint i=join->const_tables ; i < join->tables ; i++)
|
||||||
mark_as_null_row(join->table[i]); // All fields are NULL
|
mark_as_null_row(join->table[i]); // All fields are NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5240,12 +5267,14 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||||||
param->group_length : 0,
|
param->group_length : 0,
|
||||||
NullS))
|
NullS))
|
||||||
{
|
{
|
||||||
bitmap_clear_bit(&temp_pool, temp_pool_slot);
|
if (temp_pool_slot != MY_BIT_NONE)
|
||||||
|
bitmap_clear_bit(&temp_pool, temp_pool_slot);
|
||||||
DBUG_RETURN(NULL); /* purecov: inspected */
|
DBUG_RETURN(NULL); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
if (!(param->copy_field=copy=new Copy_field[field_count]))
|
if (!(param->copy_field=copy=new Copy_field[field_count]))
|
||||||
{
|
{
|
||||||
bitmap_clear_bit(&temp_pool, temp_pool_slot);
|
if (temp_pool_slot != MY_BIT_NONE)
|
||||||
|
bitmap_clear_bit(&temp_pool, temp_pool_slot);
|
||||||
my_free((gptr) table,MYF(0)); /* purecov: inspected */
|
my_free((gptr) table,MYF(0)); /* purecov: inspected */
|
||||||
DBUG_RETURN(NULL); /* purecov: inspected */
|
DBUG_RETURN(NULL); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
@ -5668,7 +5697,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||||||
*/
|
*/
|
||||||
*table->blob_field= 0;
|
*table->blob_field= 0;
|
||||||
free_tmp_table(thd,table); /* purecov: inspected */
|
free_tmp_table(thd,table); /* purecov: inspected */
|
||||||
bitmap_clear_bit(&temp_pool, temp_pool_slot);
|
if (temp_pool_slot != MY_BIT_NONE)
|
||||||
|
bitmap_clear_bit(&temp_pool, temp_pool_slot);
|
||||||
DBUG_RETURN(NULL); /* purecov: inspected */
|
DBUG_RETURN(NULL); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5831,7 +5861,8 @@ free_tmp_table(THD *thd, TABLE *entry)
|
|||||||
my_free((gptr) entry->record[0],MYF(0));
|
my_free((gptr) entry->record[0],MYF(0));
|
||||||
free_io_cache(entry);
|
free_io_cache(entry);
|
||||||
|
|
||||||
bitmap_clear_bit(&temp_pool, entry->temp_pool_slot);
|
if (entry->temp_pool_slot != MY_BIT_NONE)
|
||||||
|
bitmap_clear_bit(&temp_pool, entry->temp_pool_slot);
|
||||||
|
|
||||||
my_free((gptr) entry,MYF(0));
|
my_free((gptr) entry,MYF(0));
|
||||||
thd->proc_info=save_proc_info;
|
thd->proc_info=save_proc_info;
|
||||||
|
@ -628,7 +628,7 @@ int mysql_multi_update_lock(THD *thd,
|
|||||||
if (!using_lock_tables)
|
if (!using_lock_tables)
|
||||||
tl->table->reginfo.lock_type= tl->lock_type;
|
tl->table->reginfo.lock_type= tl->lock_type;
|
||||||
if (check_access(thd, wants, tl->db, &tl->grant.privilege, 0, 0) ||
|
if (check_access(thd, wants, tl->db, &tl->grant.privilege, 0, 0) ||
|
||||||
(grant_option && check_grant(thd, wants, tl, 0, 0, 0)))
|
(grant_option && check_grant(thd, wants, tl, 0, 1, 0)))
|
||||||
{
|
{
|
||||||
tl->next= save;
|
tl->next= save;
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
@ -546,7 +546,7 @@ fi
|
|||||||
%doc %attr(644, root, man) %{_mandir}/man1/myisamlog.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/myisamlog.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/myisampack.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/myisampack.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_explain_log.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_explain_log.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqld.1*
|
%doc %attr(644, root, man) %{_mandir}/man8/mysqld.8*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqld_multi.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysqld_multi.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_privilege_tables.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_privilege_tables.1*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user