mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
Merge station.:/mnt/raid/alik/MySQL/devel/5.1
into station.:/mnt/raid/alik/MySQL/devel/5.1-rt
This commit is contained in:
commit
151444c626
137 changed files with 2763 additions and 690 deletions
|
@ -3009,5 +3009,6 @@ vio/viotest.cpp
|
|||
win/configure.data
|
||||
win/vs71cache.txt
|
||||
win/vs8cache.txt
|
||||
ylwrap
|
||||
zlib/*.ds?
|
||||
zlib/*.vcproj
|
||||
|
|
|
@ -605,6 +605,10 @@ static struct my_option my_long_options[] =
|
|||
{"column-type-info", OPT_COLUMN_TYPES, "Display column type information.",
|
||||
(uchar**) &column_types_flag, (uchar**) &column_types_flag,
|
||||
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"comments", 'c', "Preserve comments. Send comments to the server."
|
||||
" The default is --skip-comments (discard comments), enable with --comments",
|
||||
(uchar**) &preserve_comments, (uchar**) &preserve_comments,
|
||||
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"compress", 'C', "Use compression in server/client protocol.",
|
||||
(uchar**) &opt_compress, (uchar**) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0,
|
||||
0, 0, 0},
|
||||
|
@ -755,9 +759,9 @@ static struct my_option my_long_options[] =
|
|||
0, 0},
|
||||
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET,
|
||||
"Max packet length to send to, or receive from server",
|
||||
(uchar**) &opt_max_allowed_packet, (uchar**) &opt_max_allowed_packet, 0, GET_ULONG,
|
||||
REQUIRED_ARG, 16 *1024L*1024L, 4096, (longlong) 2*1024L*1024L*1024L,
|
||||
MALLOC_OVERHEAD, 1024, 0},
|
||||
(uchar**) &opt_max_allowed_packet, (uchar**) &opt_max_allowed_packet, 0,
|
||||
GET_ULONG, REQUIRED_ARG, 16 *1024L*1024L, 4096,
|
||||
(longlong) 2*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
|
||||
{"net_buffer_length", OPT_NET_BUFFER_LENGTH,
|
||||
"Buffer for TCP/IP and socket communication",
|
||||
(uchar**) &opt_net_buffer_length, (uchar**) &opt_net_buffer_length, 0, GET_ULONG,
|
||||
|
@ -765,12 +769,13 @@ static struct my_option my_long_options[] =
|
|||
{"select_limit", OPT_SELECT_LIMIT,
|
||||
"Automatic limit for SELECT when using --safe-updates",
|
||||
(uchar**) &select_limit,
|
||||
(uchar**) &select_limit, 0, GET_ULONG, REQUIRED_ARG, 1000L, 1, ~0L, 0, 1, 0},
|
||||
(uchar**) &select_limit, 0, GET_ULONG, REQUIRED_ARG, 1000L, 1, ULONG_MAX,
|
||||
0, 1, 0},
|
||||
{"max_join_size", OPT_MAX_JOIN_SIZE,
|
||||
"Automatic limit for rows in a join when using --safe-updates",
|
||||
(uchar**) &max_join_size,
|
||||
(uchar**) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ~0L, 0, 1,
|
||||
0},
|
||||
(uchar**) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ULONG_MAX,
|
||||
0, 1, 0},
|
||||
{"secure-auth", OPT_SECURE_AUTH, "Refuse client connecting to server if it"
|
||||
" uses old (pre-4.1.1) protocol", (uchar**) &opt_secure_auth,
|
||||
(uchar**) &opt_secure_auth, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
@ -779,10 +784,6 @@ static struct my_option my_long_options[] =
|
|||
{"show-warnings", OPT_SHOW_WARNINGS, "Show warnings after every statement.",
|
||||
(uchar**) &show_warnings, (uchar**) &show_warnings, 0, GET_BOOL, NO_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"comments", 'c', "Preserve comments. Send comments to the server."
|
||||
" Comments are discarded by default, enable with --enable-comments",
|
||||
(uchar**) &preserve_comments, (uchar**) &preserve_comments,
|
||||
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
|
|
@ -5050,7 +5050,7 @@ static struct my_option my_long_options[] =
|
|||
"Don't use the memory allocation checking.", 0, 0, 0, GET_NO_ARG, NO_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"sleep", 'T', "Sleep always this many seconds on sleep commands.",
|
||||
(uchar**) &opt_sleep, (uchar**) &opt_sleep, 0, GET_INT, REQUIRED_ARG, -1, 0, 0,
|
||||
(uchar**) &opt_sleep, (uchar**) &opt_sleep, 0, GET_INT, REQUIRED_ARG, -1, -1, 0,
|
||||
0, 0, 0},
|
||||
{"socket", 'S', "Socket file to use for connection.",
|
||||
(uchar**) &unix_sock, (uchar**) &unix_sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
|
||||
|
|
|
@ -200,6 +200,7 @@ double my_strtod(const char *str, char **end, int *error);
|
|||
double my_atof(const char *nptr);
|
||||
|
||||
extern char *llstr(longlong value,char *buff);
|
||||
extern char *ullstr(longlong value,char *buff);
|
||||
#ifndef HAVE_STRTOUL
|
||||
extern long strtol(const char *str, char **ptr, int base);
|
||||
extern ulong strtoul(const char *str, char **ptr, int base);
|
||||
|
|
|
@ -74,7 +74,9 @@ extern void my_print_variables(const struct my_option *options);
|
|||
extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint,
|
||||
const struct my_option *));
|
||||
|
||||
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp);
|
||||
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
|
||||
bool *fix);
|
||||
longlong getopt_ll_limit_value(longlong, const struct my_option *,bool *fix);
|
||||
my_bool getopt_compare_strings(const char *s, const char *t, uint length);
|
||||
|
||||
C_MODE_END
|
||||
|
|
|
@ -396,14 +396,17 @@ typedef struct st_udf_args
|
|||
|
||||
typedef struct st_udf_init
|
||||
{
|
||||
my_bool maybe_null; /* 1 if function can return NULL */
|
||||
unsigned int decimals; /* for real functions */
|
||||
unsigned long max_length; /* For string functions */
|
||||
char *ptr; /* free pointer for function data */
|
||||
/* 0 if result is independent of arguments */
|
||||
my_bool const_item;
|
||||
my_bool maybe_null; /* 1 if function can return NULL */
|
||||
unsigned int decimals; /* for real functions */
|
||||
unsigned long max_length; /* For string functions */
|
||||
char *ptr; /* free pointer for function data */
|
||||
my_bool const_item; /* 1 if function always returns the same value */
|
||||
void *extension;
|
||||
} UDF_INIT;
|
||||
/*
|
||||
TODO: add a notion for determinism of the UDF.
|
||||
See Item_udf_func::update_used_tables ()
|
||||
*/
|
||||
|
||||
/* Constants when using compression */
|
||||
#define NET_HEADER_SIZE 4 /* standard header size */
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
|
||||
|
||||
#undef HAVE_PSTACK /* No stacktrace */
|
||||
#undef HAVE_DLOPEN /* No udf functions */
|
||||
#undef HAVE_OPENSSL
|
||||
#undef HAVE_SMEM /* No shared memory */
|
||||
#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
|
||||
|
|
|
@ -31,8 +31,8 @@ typedef struct st_queue {
|
|||
void *first_cmp_arg;
|
||||
uint elements;
|
||||
uint max_elements;
|
||||
uint offset_to_key; /* compare is done on element+offset */
|
||||
int max_at_top; /* Set if queue_top gives max */
|
||||
uint offset_to_key; /* compare is done on element+offset */
|
||||
int max_at_top; /* Normally 1, set to -1 if queue_top gives max */
|
||||
int (*compare)(void *, uchar *,uchar *);
|
||||
uint auto_extent;
|
||||
} QUEUE;
|
||||
|
@ -43,7 +43,7 @@ typedef struct st_queue {
|
|||
#define queue_replaced(queue) _downheap(queue,1)
|
||||
#define queue_set_cmp_arg(queue, set_arg) (queue)->first_cmp_arg= set_arg
|
||||
#define queue_set_max_at_top(queue, set_arg) \
|
||||
(queue)->max_at_top= set_arg ? (-1 ^ 1) : 0
|
||||
(queue)->max_at_top= set_arg ? -1 : 1
|
||||
typedef int (*queue_compare)(void *,uchar *, uchar *);
|
||||
|
||||
int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key,
|
||||
|
|
|
@ -126,9 +126,6 @@ ENDIF(WIN32)
|
|||
ADD_DEPENDENCIES(libmysql GenError)
|
||||
TARGET_LINK_LIBRARIES(libmysql wsock32)
|
||||
|
||||
ADD_EXECUTABLE(myTest mytest.c)
|
||||
TARGET_LINK_LIBRARIES(myTest libmysql)
|
||||
|
||||
IF(EMBED_MANIFESTS)
|
||||
MYSQL_EMBED_MANIFEST("myTest" "asInvoker")
|
||||
ENDIF(EMBED_MANIFESTS)
|
||||
|
|
|
@ -31,7 +31,7 @@ include $(srcdir)/Makefile.shared
|
|||
libmysqlclient_la_SOURCES = $(target_sources)
|
||||
libmysqlclient_la_LIBADD = $(target_libadd) $(yassl_las)
|
||||
libmysqlclient_la_LDFLAGS = $(target_ldflags)
|
||||
EXTRA_DIST = Makefile.shared libmysql.def dll.c mytest.c CMakeLists.txt
|
||||
EXTRA_DIST = Makefile.shared libmysql.def dll.c CMakeLists.txt
|
||||
noinst_HEADERS = client_settings.h
|
||||
|
||||
link_sources:
|
||||
|
|
|
@ -1,175 +0,0 @@
|
|||
/*C4*/
|
||||
/****************************************************************/
|
||||
/* Author: Jethro Wright, III TS : 3/ 4/1998 9:15 */
|
||||
/* Date: 02/18/1998 */
|
||||
/* mytest.c : do some testing of the libmySQL.DLL.... */
|
||||
/* */
|
||||
/* History: */
|
||||
/* 02/18/1998 jw3 also sprach zarathustra.... */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <mysql.h>
|
||||
|
||||
#define DEFALT_SQL_STMT "SELECT * FROM db"
|
||||
#ifndef offsetof
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||
#endif
|
||||
|
||||
|
||||
/********************************************************
|
||||
**
|
||||
** main :-
|
||||
**
|
||||
********************************************************/
|
||||
|
||||
int
|
||||
main( int argc, char * argv[] )
|
||||
{
|
||||
|
||||
char szSQL[ 200 ], aszFlds[ 25 ][ 25 ], szDB[ 50 ] ;
|
||||
const char *pszT;
|
||||
int i, j, k, l, x ;
|
||||
MYSQL * myData ;
|
||||
MYSQL_RES * res ;
|
||||
MYSQL_FIELD * fd ;
|
||||
MYSQL_ROW row ;
|
||||
|
||||
//....just curious....
|
||||
printf( "sizeof( MYSQL ) == %d\n", (int) sizeof( MYSQL ) ) ;
|
||||
if ( argc == 2 )
|
||||
{
|
||||
strcpy( szDB, argv[ 1 ] ) ;
|
||||
strcpy( szSQL, DEFALT_SQL_STMT ) ;
|
||||
if (!strcmp(szDB,"--debug"))
|
||||
{
|
||||
strcpy( szDB, "mysql" ) ;
|
||||
printf("Some mysql struct information (size and offset):\n");
|
||||
printf("net:\t%3d %3d\n",(int) sizeof(myData->net),
|
||||
(int) offsetof(MYSQL,net));
|
||||
printf("host:\t%3d %3d\n",(int) sizeof(myData->host),
|
||||
(int) offsetof(MYSQL,host));
|
||||
printf("port:\t%3d %3d\n", (int) sizeof(myData->port),
|
||||
(int) offsetof(MYSQL,port));
|
||||
printf("protocol_version:\t%3d %3d\n",
|
||||
(int) sizeof(myData->protocol_version),
|
||||
(int) offsetof(MYSQL,protocol_version));
|
||||
printf("thread_id:\t%3d %3d\n",(int) sizeof(myData->thread_id),
|
||||
(int) offsetof(MYSQL,thread_id));
|
||||
printf("affected_rows:\t%3d %3d\n",(int) sizeof(myData->affected_rows),
|
||||
(int) offsetof(MYSQL,affected_rows));
|
||||
printf("packet_length:\t%3d %3d\n",(int) sizeof(myData->packet_length),
|
||||
(int) offsetof(MYSQL,packet_length));
|
||||
printf("status:\t%3d %3d\n",(int) sizeof(myData->status),
|
||||
(int) offsetof(MYSQL,status));
|
||||
printf("fields:\t%3d %3d\n",(int) sizeof(myData->fields),
|
||||
(int) offsetof(MYSQL,fields));
|
||||
printf("field_alloc:\t%3d %3d\n",(int) sizeof(myData->field_alloc),
|
||||
(int) offsetof(MYSQL,field_alloc));
|
||||
printf("free_me:\t%3d %3d\n",(int) sizeof(myData->free_me),
|
||||
(int) offsetof(MYSQL,free_me));
|
||||
printf("options:\t%3d %3d\n",(int) sizeof(myData->options),
|
||||
(int) offsetof(MYSQL,options));
|
||||
puts("");
|
||||
}
|
||||
}
|
||||
else if ( argc > 2 ) {
|
||||
strcpy( szDB, argv[ 1 ] ) ;
|
||||
strcpy( szSQL, argv[ 2 ] ) ;
|
||||
}
|
||||
else {
|
||||
strcpy( szDB, "mysql" ) ;
|
||||
strcpy( szSQL, DEFALT_SQL_STMT ) ;
|
||||
}
|
||||
//....
|
||||
|
||||
if ( (myData = mysql_init((MYSQL*) 0)) &&
|
||||
mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT,
|
||||
NULL, 0 ) )
|
||||
{
|
||||
myData->reconnect= 1;
|
||||
if ( mysql_select_db( myData, szDB ) < 0 ) {
|
||||
printf( "Can't select the %s database !\n", szDB ) ;
|
||||
mysql_close( myData ) ;
|
||||
return 2 ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf( "Can't connect to the mysql server on port %d !\n",
|
||||
MYSQL_PORT ) ;
|
||||
mysql_close( myData ) ;
|
||||
return 1 ;
|
||||
}
|
||||
//....
|
||||
if ( ! mysql_query( myData, szSQL ) ) {
|
||||
res = mysql_store_result( myData ) ;
|
||||
i = (int) mysql_num_rows( res ) ; l = 1 ;
|
||||
printf( "Query: %s\nNumber of records found: %ld\n", szSQL, i ) ;
|
||||
//....we can get the field-specific characteristics here....
|
||||
for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
|
||||
strcpy( aszFlds[ x ], fd->name ) ;
|
||||
//....
|
||||
while ( row = mysql_fetch_row( res ) ) {
|
||||
j = mysql_num_fields( res ) ;
|
||||
printf( "Record #%ld:-\n", l++ ) ;
|
||||
for ( k = 0 ; k < j ; k++ )
|
||||
printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
|
||||
(((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
|
||||
puts( "==============================\n" ) ;
|
||||
}
|
||||
mysql_free_result( res ) ;
|
||||
}
|
||||
else printf( "Couldn't execute %s on the server !\n", szSQL ) ;
|
||||
//....
|
||||
puts( "==== Diagnostic info ====" ) ;
|
||||
pszT = mysql_get_client_info() ;
|
||||
printf( "Client info: %s\n", pszT ) ;
|
||||
//....
|
||||
pszT = mysql_get_host_info( myData ) ;
|
||||
printf( "Host info: %s\n", pszT ) ;
|
||||
//....
|
||||
pszT = mysql_get_server_info( myData ) ;
|
||||
printf( "Server info: %s\n", pszT ) ;
|
||||
//....
|
||||
res = mysql_list_processes( myData ) ; l = 1 ;
|
||||
if (res)
|
||||
{
|
||||
for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
|
||||
strcpy( aszFlds[ x ], fd->name ) ;
|
||||
while ( row = mysql_fetch_row( res ) ) {
|
||||
j = mysql_num_fields( res ) ;
|
||||
printf( "Process #%ld:-\n", l++ ) ;
|
||||
for ( k = 0 ; k < j ; k++ )
|
||||
printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
|
||||
(((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
|
||||
puts( "==============================\n" ) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Got error %s when retreiving processlist\n",mysql_error(myData));
|
||||
}
|
||||
//....
|
||||
res = mysql_list_tables( myData, "%" ) ; l = 1 ;
|
||||
for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
|
||||
strcpy( aszFlds[ x ], fd->name ) ;
|
||||
while ( row = mysql_fetch_row( res ) ) {
|
||||
j = mysql_num_fields( res ) ;
|
||||
printf( "Table #%ld:-\n", l++ ) ;
|
||||
for ( k = 0 ; k < j ; k++ )
|
||||
printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
|
||||
(((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
|
||||
puts( "==============================\n" ) ;
|
||||
}
|
||||
//....
|
||||
pszT = mysql_stat( myData ) ;
|
||||
puts( pszT ) ;
|
||||
//....
|
||||
mysql_close( myData ) ;
|
||||
return 0 ;
|
||||
|
||||
}
|
|
@ -22,7 +22,7 @@ IF(WIN32)
|
|||
ADD_DEFINITIONS(-DUSE_TLS)
|
||||
ENDIF(WIN32)
|
||||
|
||||
ADD_DEFINITIONS(-DMYSQL_SERVER -DEMBEDDED_LIBRARY)
|
||||
ADD_DEFINITIONS(-DMYSQL_SERVER -DEMBEDDED_LIBRARY -DHAVE_DLOPEN)
|
||||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/libmysqld
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include "emb_qcache.h"
|
||||
#include "embedded_priv.h"
|
||||
|
||||
void Querycache_stream::store_char(char c)
|
||||
void Querycache_stream::store_uchar(uchar c)
|
||||
{
|
||||
if (data_end == cur_data)
|
||||
use_next_block(TRUE);
|
||||
|
@ -142,7 +142,7 @@ void Querycache_stream::store_safe_str(const char *str, uint str_len)
|
|||
store_int(0);
|
||||
}
|
||||
|
||||
char Querycache_stream::load_char()
|
||||
uchar Querycache_stream::load_uchar()
|
||||
{
|
||||
if (cur_data == data_end)
|
||||
use_next_block(FALSE);
|
||||
|
@ -301,8 +301,8 @@ uint emb_count_querycache_size(THD *thd)
|
|||
*data->embedded_info->prev_ptr= NULL; // this marks the last record
|
||||
cur_row= data->data;
|
||||
n_rows= data->rows;
|
||||
/* n_fields + n_rows + (field_info + strlen * n_rows) * n_fields */
|
||||
result+= (uint) (4+8 + (42 + 4*n_rows)*data->fields);
|
||||
/* n_fields + n_rows + field_info * n_fields */
|
||||
result+= (uint) (4+8 + 42*data->fields);
|
||||
|
||||
for(; field < field_end; field++)
|
||||
{
|
||||
|
@ -313,13 +313,23 @@ uint emb_count_querycache_size(THD *thd)
|
|||
result+= field->def_length;
|
||||
}
|
||||
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
if (thd->protocol == &thd->protocol_binary)
|
||||
{
|
||||
MYSQL_ROW col= cur_row->data;
|
||||
MYSQL_ROW col_end= col + data->fields;
|
||||
for (; col < col_end; col++)
|
||||
if (*col)
|
||||
result+= *(uint *)((*col) - sizeof(uint));
|
||||
result+= (uint) (4*n_rows);
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
result+= cur_row->length;
|
||||
}
|
||||
else
|
||||
{
|
||||
result+= (uint) (4*n_rows*data->fields);
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
{
|
||||
MYSQL_ROW col= cur_row->data;
|
||||
MYSQL_ROW col_end= col + data->fields;
|
||||
for (; col < col_end; col++)
|
||||
if (*col)
|
||||
result+= *(uint *)((*col) - sizeof(uint));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -353,10 +363,10 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
|
|||
{
|
||||
dst->store_int((uint)field->length);
|
||||
dst->store_int((uint)field->max_length);
|
||||
dst->store_char((char)field->type);
|
||||
dst->store_uchar((uchar)field->type);
|
||||
dst->store_short((ushort)field->flags);
|
||||
dst->store_short((ushort)field->charsetnr);
|
||||
dst->store_char((char)field->decimals);
|
||||
dst->store_uchar((uchar)field->decimals);
|
||||
dst->store_str(field->name, field->name_length);
|
||||
dst->store_str(field->table, field->table_length);
|
||||
dst->store_str(field->org_name, field->org_name_length);
|
||||
|
@ -366,14 +376,22 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
|
|||
dst->store_safe_str(field->def, field->def_length);
|
||||
}
|
||||
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
if (thd->protocol == &thd->protocol_binary)
|
||||
{
|
||||
MYSQL_ROW col= cur_row->data;
|
||||
MYSQL_ROW col_end= col + data->fields;
|
||||
for (; col < col_end; col++)
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
dst->store_str((char *) cur_row->data, cur_row->length);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
{
|
||||
uint len= *col ? *(uint *)((*col) - sizeof(uint)) : 0;
|
||||
dst->store_safe_str(*col, len);
|
||||
MYSQL_ROW col= cur_row->data;
|
||||
MYSQL_ROW col_end= col + data->fields;
|
||||
for (; col < col_end; col++)
|
||||
{
|
||||
uint len= *col ? *(uint *)((*col) - sizeof(uint)) : 0;
|
||||
dst->store_safe_str(*col, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
DBUG_ASSERT(emb_count_querycache_size(thd) == dst->stored_size);
|
||||
|
@ -408,10 +426,10 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
|
|||
{
|
||||
field->length= src->load_int();
|
||||
field->max_length= (unsigned int)src->load_int();
|
||||
field->type= (enum enum_field_types)src->load_char();
|
||||
field->type= (enum enum_field_types)src->load_uchar();
|
||||
field->flags= (unsigned int)src->load_short();
|
||||
field->charsetnr= (unsigned int)src->load_short();
|
||||
field->decimals= (unsigned int)src->load_char();
|
||||
field->decimals= src->load_uchar();
|
||||
|
||||
if (!(field->name= src->load_str(f_alloc, &field->name_length)) ||
|
||||
!(field->table= src->load_str(f_alloc,&field->table_length)) ||
|
||||
|
@ -423,26 +441,43 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
|
|||
goto err;
|
||||
}
|
||||
|
||||
row= (MYSQL_ROWS *)alloc_root(&data->alloc,
|
||||
(uint) (rows * sizeof(MYSQL_ROWS) +
|
||||
rows*(data->fields+1)*sizeof(char*)));
|
||||
end_row= row + rows;
|
||||
columns= (MYSQL_ROW)end_row;
|
||||
|
||||
data->rows= rows;
|
||||
data->data= row;
|
||||
if (!rows)
|
||||
goto return_ok;
|
||||
|
||||
for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
|
||||
if (thd->protocol == &thd->protocol_binary)
|
||||
{
|
||||
*prev_row= row;
|
||||
row->data= columns;
|
||||
MYSQL_ROW col_end= columns + data->fields;
|
||||
for (; columns < col_end; columns++)
|
||||
src->load_column(&data->alloc, columns);
|
||||
uint length;
|
||||
row= (MYSQL_ROWS *)alloc_root(&data->alloc, rows * sizeof(MYSQL_ROWS));
|
||||
end_row= row + rows;
|
||||
data->data= row;
|
||||
|
||||
*(columns++)= NULL;
|
||||
for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
|
||||
{
|
||||
*prev_row= row;
|
||||
row->data= (MYSQL_ROW) src->load_str(&data->alloc, &length);
|
||||
row->length= length;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
row= (MYSQL_ROWS *)alloc_root(&data->alloc,
|
||||
(uint) (rows * sizeof(MYSQL_ROWS) +
|
||||
rows*(data->fields+1)*sizeof(char*)));
|
||||
end_row= row + rows;
|
||||
columns= (MYSQL_ROW)end_row;
|
||||
|
||||
data->data= row;
|
||||
|
||||
for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
|
||||
{
|
||||
*prev_row= row;
|
||||
row->data= columns;
|
||||
MYSQL_ROW col_end= columns + data->fields;
|
||||
for (; columns < col_end; columns++)
|
||||
src->load_column(&data->alloc, columns);
|
||||
|
||||
*(columns++)= NULL;
|
||||
}
|
||||
}
|
||||
*prev_row= NULL;
|
||||
data->embedded_info->prev_ptr= prev_row;
|
||||
|
|
|
@ -58,7 +58,7 @@ public:
|
|||
data_end= cur_data + (block->used-headers_len);
|
||||
}
|
||||
|
||||
void store_char(char c);
|
||||
void store_uchar(uchar c);
|
||||
void store_short(ushort s);
|
||||
void store_int(uint i);
|
||||
void store_ll(ulonglong ll);
|
||||
|
@ -66,7 +66,7 @@ public:
|
|||
void store_str(const char *str, uint str_len);
|
||||
void store_safe_str(const char *str, uint str_len);
|
||||
|
||||
char load_char();
|
||||
uchar load_uchar();
|
||||
ushort load_short();
|
||||
uint load_int();
|
||||
ulonglong load_ll();
|
||||
|
|
|
@ -64,6 +64,7 @@ void embedded_get_error(MYSQL *mysql, MYSQL_DATA *data)
|
|||
net->client_last_errno= ei->last_errno;
|
||||
strmake(net->client_last_error, ei->info, sizeof(net->client_last_error)-1);
|
||||
memcpy(net->sqlstate, ei->sqlstate, sizeof(net->sqlstate));
|
||||
mysql->server_status= ei->server_status;
|
||||
my_free(data, MYF(0));
|
||||
}
|
||||
|
||||
|
@ -242,9 +243,11 @@ static my_bool emb_read_query_result(MYSQL *mysql)
|
|||
mysql->warning_count= res->embedded_info->warning_count;
|
||||
mysql->server_status= res->embedded_info->server_status;
|
||||
mysql->field_count= res->fields;
|
||||
mysql->fields= res->embedded_info->fields_list;
|
||||
mysql->affected_rows= res->embedded_info->affected_rows;
|
||||
mysql->insert_id= res->embedded_info->insert_id;
|
||||
if (!(mysql->fields= res->embedded_info->fields_list))
|
||||
{
|
||||
mysql->affected_rows= res->embedded_info->affected_rows;
|
||||
mysql->insert_id= res->embedded_info->insert_id;
|
||||
}
|
||||
net_clear_error(&mysql->net);
|
||||
mysql->info= 0;
|
||||
|
||||
|
@ -546,7 +549,6 @@ void end_embedded_server()
|
|||
{
|
||||
my_free((char*) copy_arguments_ptr, MYF(MY_ALLOW_ZERO_PTR));
|
||||
copy_arguments_ptr=0;
|
||||
release_ddl_log();
|
||||
clean_up(0);
|
||||
}
|
||||
|
||||
|
@ -1057,6 +1059,7 @@ void net_send_error_packet(THD *thd, uint sql_errno, const char *err)
|
|||
ei->last_errno= sql_errno;
|
||||
strmake(ei->info, err, sizeof(ei->info)-1);
|
||||
strmov(ei->sqlstate, mysql_errno_to_sqlstate(sql_errno));
|
||||
ei->server_status= thd->server_status;
|
||||
thd->cur_data= 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -724,6 +724,19 @@ set @@sort_buffer_size=default;
|
|||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #32815: query with ORDER BY and a possible ref_or_null access
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES
|
||||
(191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2);
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
|
||||
SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
# Test of behaviour with CREATE ... SELECT
|
||||
#
|
||||
|
||||
|
|
|
@ -434,8 +434,8 @@ execute stmt1 ;
|
|||
let $1= 3 ;
|
||||
while ($1)
|
||||
{
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
deallocate prepare stmt1 ;
|
||||
dec $1 ;
|
||||
|
|
|
@ -354,6 +354,9 @@ sub mtr_report_stats ($) {
|
|||
# BUG#29839 - lowercase_table3.test: Cannot find table test/T1
|
||||
# from the internal data dictiona
|
||||
/Cannot find table test\/BUG29839 from the internal data dictionary/ or
|
||||
# BUG#32080 - Excessive warnings on Solaris: setrlimit could not
|
||||
# change the size of core files
|
||||
/setrlimit could not change the size of core files to 'infinity'/ or
|
||||
|
||||
# rpl_extrColmaster_*.test, the slave thread produces warnings
|
||||
# when it get updates to a table that has more columns on the
|
||||
|
@ -361,7 +364,6 @@ sub mtr_report_stats ($) {
|
|||
/Slave: Unknown column 'c7' in 't15' Error_code: 1054/ or
|
||||
/Slave: Can't DROP 'c7'.* 1091/ or
|
||||
/Slave: Key column 'c6'.* 1072/
|
||||
|
||||
)
|
||||
{
|
||||
next; # Skip these lines
|
||||
|
|
|
@ -12665,7 +12665,7 @@ t6 CREATE TABLE `t6` (
|
|||
`b` tinyblob,
|
||||
`c` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=36 DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, t2, t4, t5, t6;
|
||||
create table t1 (i int) engine=archive;
|
||||
insert into t1 values (1);
|
||||
|
|
|
@ -4,14 +4,14 @@ SELECT @@session.sql_big_selects;
|
|||
1
|
||||
SELECT @@global.max_join_size;
|
||||
@@global.max_join_size
|
||||
-1
|
||||
18446744073709551615
|
||||
change_user
|
||||
SELECT @@session.sql_big_selects;
|
||||
@@session.sql_big_selects
|
||||
1
|
||||
SELECT @@global.max_join_size;
|
||||
@@global.max_join_size
|
||||
-1
|
||||
18446744073709551615
|
||||
SET @@global.max_join_size = 10000;
|
||||
SET @@session.max_join_size = default;
|
||||
change_user
|
||||
|
|
|
@ -1705,4 +1705,42 @@ create table t1 as select 1;
|
|||
create table t2 as select f1() from t1;
|
||||
drop table t1,t2;
|
||||
drop function f1;
|
||||
create table t1 like information_schema.processlist;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`ID` bigint(4) NOT NULL DEFAULT '0',
|
||||
`USER` varchar(16) NOT NULL DEFAULT '',
|
||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||
`DB` varchar(64) DEFAULT NULL,
|
||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
||||
`STATE` varchar(64) DEFAULT NULL,
|
||||
`INFO` longtext
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
drop table t1;
|
||||
create temporary table t1 like information_schema.processlist;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TEMPORARY TABLE `t1` (
|
||||
`ID` bigint(4) NOT NULL DEFAULT '0',
|
||||
`USER` varchar(16) NOT NULL DEFAULT '',
|
||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||
`DB` varchar(64) DEFAULT NULL,
|
||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
||||
`STATE` varchar(64) DEFAULT NULL,
|
||||
`INFO` longtext
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
drop table t1;
|
||||
create table t1 like information_schema.character_sets;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
|
||||
`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
drop table t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -85,3 +85,10 @@ select 1;
|
|||
1
|
||||
unlock tables;
|
||||
End of 5.0 tests
|
||||
create database mysql_test;
|
||||
create table mysql_test.t1(f1 int);
|
||||
create table mysql_test.`#sql-347f_7` (f1 int);
|
||||
create table mysql_test.`#sql-347f_8` (f1 int);
|
||||
drop table mysql_test.`#sql-347f_8`;
|
||||
drop database mysql_test;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -87,3 +87,23 @@ Warnings:
|
|||
Note 1003 select '1' AS `f1`,'1' AS `f2` from `test`.`t1` having 1
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
CREATE TABLE t1(c INT);
|
||||
INSERT INTO t1 VALUES (),();
|
||||
CREATE TABLE t2 (b INT,
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b));
|
||||
INSERT INTO t2 VALUES (),(),();
|
||||
EXPLAIN SELECT 1 FROM
|
||||
(SELECT 1 FROM t2,t1 WHERE b < c GROUP BY 1 LIMIT 1) AS d2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
X X X X X X X X X const row not found
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X Range checked for each record (index map: 0xFFFFFFFFFF)
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1955,6 +1955,117 @@ a
|
|||
2
|
||||
DROP TABLE federated.t1;
|
||||
DROP TABLE federated.t1;
|
||||
create table t1 (a varchar(256));
|
||||
drop view if exists v1;
|
||||
create view v1 as select a from t1;
|
||||
create table t1
|
||||
(a varchar(256)) engine=federated
|
||||
connection='mysql://root@127.0.0.1:SLAVE_PORT/test/v1';
|
||||
select 1 from t1 order by a;
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
drop table t1;
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
End of 5.1 tests
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
select format(1.5555,0),format(123.5555,1),format(1234.5555,2),format(12345.55555,3),format(123456.5555,4),format(1234567.5555,5),format("12345.2399",2);
|
||||
format(1.5555,0) format(123.5555,1) format(1234.5555,2) format(12345.55555,3) format(123456.5555,4) format(1234567.5555,5) format("12345.2399",2)
|
||||
2 123.6 1,234.56 12,345.556 123,456.5555 1,234,567.55550 12,345.24
|
||||
|
@ -212,6 +212,11 @@ test
|
|||
SELECT NAME_CONST('test', 'test');
|
||||
test
|
||||
test
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (5), (2);
|
||||
SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t;
|
||||
ERROR HY000: Incorrect arguments to NAME_CONST
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES (), (), ();
|
||||
SELECT NAME_CONST(a, '1') FROM t1;
|
||||
|
|
|
@ -1246,6 +1246,18 @@ select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1;
|
|||
ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation 'concat'
|
||||
set lc_time_names=en_US;
|
||||
drop table t1;
|
||||
select DATE_ADD('20071108181000', INTERVAL 1 DAY);
|
||||
DATE_ADD('20071108181000', INTERVAL 1 DAY)
|
||||
2007-11-09 18:10:00
|
||||
select DATE_ADD(20071108181000, INTERVAL 1 DAY);
|
||||
DATE_ADD(20071108181000, INTERVAL 1 DAY)
|
||||
2007-11-09 18:10:00
|
||||
select DATE_ADD('20071108', INTERVAL 1 DAY);
|
||||
DATE_ADD('20071108', INTERVAL 1 DAY)
|
||||
2007-11-09
|
||||
select DATE_ADD(20071108, INTERVAL 1 DAY);
|
||||
DATE_ADD(20071108, INTERVAL 1 DAY)
|
||||
2007-11-09
|
||||
End of 5.0 tests
|
||||
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
|
||||
date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND)
|
||||
|
|
|
@ -680,7 +680,7 @@ def test t1 t1 g g 255 4294967295 0 Y 144 0 63
|
|||
g
|
||||
select asbinary(g) from t1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def asbinary(g) 252 16777216 0 Y 128 0 63
|
||||
def asbinary(g) 252 4294967295 0 Y 128 0 63
|
||||
asbinary(g)
|
||||
drop table t1;
|
||||
create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b));
|
||||
|
@ -742,6 +742,38 @@ select geomfromtext(col9,col89) as a from t1;
|
|||
a
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
geomdata polygon NOT NULL,
|
||||
SPATIAL KEY index_geom (geomdata)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
|
||||
CREATE TABLE t2 (
|
||||
geomdata polygon NOT NULL,
|
||||
SPATIAL KEY index_geom (geomdata)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
|
||||
CREATE TABLE t3
|
||||
select
|
||||
aswkb(ws.geomdata) AS geomdatawkb
|
||||
from
|
||||
t1 ws
|
||||
union
|
||||
select
|
||||
aswkb(ws.geomdata) AS geomdatawkb
|
||||
from
|
||||
t2 ws;
|
||||
describe t3;
|
||||
Field Type Null Key Default Extra
|
||||
geomdatawkb longblob YES NULL
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
create table t1(col1 geometry default null,col15 geometrycollection not
|
||||
null,spatial index(col15),index(col1(15)))engine=myisam;
|
||||
insert into t1 set col15 = GeomFromText('POINT(6 5)');
|
||||
insert into t1 set col15 = GeomFromText('POINT(6 5)');
|
||||
check table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
End of 4.1 tests
|
||||
create table t1 (s1 geometry not null,s2 char(100));
|
||||
create trigger t1_bu before update on t1 for each row set new.s1 = null;
|
||||
|
@ -934,6 +966,12 @@ COUNT(*)
|
|||
2
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
create table `t1` (`col002` point)engine=myisam;
|
||||
insert into t1 values (),(),();
|
||||
select min(`col002`) from t1 union select `col002` from t1;
|
||||
min(`col002`)
|
||||
NULL
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
|
||||
create view v1 as select * from t1;
|
||||
|
|
|
@ -2326,3 +2326,49 @@ a
|
|||
2
|
||||
4
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3);
|
||||
INSERT INTO t1 SELECT a + 1, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2, b FROM t1;
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 12 Using temporary; Using filesort
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
a MIN(b) MAX(b)
|
||||
4 1 3
|
||||
3 1 3
|
||||
2 1 3
|
||||
1 1 3
|
||||
CREATE INDEX break_it ON t1 (a, b);
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
|
||||
a MIN(b) MAX(b)
|
||||
1 1 3
|
||||
2 1 3
|
||||
3 1 3
|
||||
4 1 3
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by; Using temporary; Using filesort
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
a MIN(b) MAX(b)
|
||||
4 1 3
|
||||
3 1 3
|
||||
2 1 3
|
||||
1 1 3
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL break_it 10 NULL 12 Using index
|
||||
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
a MIN(b) MAX(b) AVG(b)
|
||||
4 1 3 2.0000
|
||||
3 1 3 2.0000
|
||||
2 1 3 2.0000
|
||||
1 1 3 2.0000
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -342,6 +342,8 @@ create table t4 (a int);
|
|||
insert into t4 values (1),(4),(3);
|
||||
set @save_join_buffer_size=@@join_buffer_size;
|
||||
set join_buffer_size= 4000;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect join_buffer_size value: '4000'
|
||||
explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
|
||||
from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
|
||||
where (A.key1 < 500000 or A.key2 < 3)
|
||||
|
|
|
@ -1611,4 +1611,12 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
1 SIMPLE tables ALL NULL NULL NULL NULL NULL NULL Skip_open_table; Scanned all databases
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `information_schema`.`tables`
|
||||
use information_schema;
|
||||
show events;
|
||||
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
||||
show events from information_schema;
|
||||
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
||||
show events where Db= 'information_schema';
|
||||
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
||||
use test;
|
||||
End of 5.1 tests.
|
||||
|
|
|
@ -1768,6 +1768,8 @@ show variables like "innodb_thread_concurrency";
|
|||
Variable_name Value
|
||||
innodb_thread_concurrency 8
|
||||
set global innodb_thread_concurrency=1001;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect thread_concurrency value: '1001'
|
||||
show variables like "innodb_thread_concurrency";
|
||||
Variable_name Value
|
||||
innodb_thread_concurrency 1000
|
||||
|
@ -1787,6 +1789,8 @@ show variables like "innodb_concurrency_tickets";
|
|||
Variable_name Value
|
||||
innodb_concurrency_tickets 1000
|
||||
set global innodb_concurrency_tickets=0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect concurrency_tickets value: '0'
|
||||
show variables like "innodb_concurrency_tickets";
|
||||
Variable_name Value
|
||||
innodb_concurrency_tickets 1
|
||||
|
|
|
@ -677,6 +677,8 @@ INSERT INTO t1(b,c) SELECT b,c FROM t2;
|
|||
UPDATE t2 SET c='2007-01-03';
|
||||
INSERT INTO t1(b,c) SELECT b,c FROM t2;
|
||||
set @@sort_buffer_size=8192;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
3072
|
||||
|
@ -1342,6 +1344,18 @@ t1 CREATE TABLE `t1` (
|
|||
UNIQUE KEY `aa` (`a`(1))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES
|
||||
(191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2);
|
||||
EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL idx NULL NULL NULL 3 Using where; Using filesort
|
||||
SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
|
||||
id type d
|
||||
191 member 1
|
||||
NULL member 3
|
||||
NULL member 4
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
CREATE TABLE `t2` (
|
||||
`k` int(11) NOT NULL auto_increment,
|
||||
|
|
|
@ -276,6 +276,8 @@ Variable_name Value
|
|||
Key_blocks_unused KEY_BLOCKS_UNUSED
|
||||
set global keycache2.key_buffer_size=0;
|
||||
set global keycache3.key_buffer_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect key_buffer_size value: '100'
|
||||
set global keycache3.key_buffer_size=0;
|
||||
create table t1 (mytext text, FULLTEXT (mytext));
|
||||
insert t1 values ('aaabbb');
|
||||
|
|
|
@ -927,6 +927,43 @@ CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST;
|
|||
CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
|
||||
INSERT INTO t1 SELECT * FROM t2;
|
||||
INSERT INTO t1 SELECT * FROM t2;
|
||||
CREATE TABLE t3 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MERGE
|
||||
UNION(t1);
|
||||
SELECT * FROM t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
|
||||
id ref ref
|
||||
4 4 5
|
||||
4 4 5
|
||||
4 4 5
|
||||
4 4 5
|
||||
SELECT * FROM t3;
|
||||
id ref
|
||||
1 3
|
||||
2 1
|
||||
3 2
|
||||
4 5
|
||||
4 4
|
||||
1 3
|
||||
2 1
|
||||
3 2
|
||||
4 5
|
||||
4 4
|
||||
DELETE FROM a USING t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
|
||||
SELECT * FROM t3;
|
||||
id ref
|
||||
1 3
|
||||
2 1
|
||||
3 2
|
||||
4 5
|
||||
1 3
|
||||
2 1
|
||||
3 2
|
||||
4 5
|
||||
DROP TABLE t1, t2, t3;
|
||||
End of 5.0 tests
|
||||
create table t1 (c1 int, index(c1));
|
||||
create table t2 (c1 int, index(c1)) engine=merge union=(t1);
|
||||
|
|
|
@ -1809,6 +1809,28 @@ CHECK TABLE t1 EXTENDED;
|
|||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
|
||||
INSERT INTO t1 SELECT * FROM t2;
|
||||
SELECT * FROM t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
|
||||
id ref ref
|
||||
4 4 5
|
||||
SELECT * FROM t1;
|
||||
id ref
|
||||
1 3
|
||||
2 1
|
||||
3 2
|
||||
4 5
|
||||
4 4
|
||||
DELETE FROM a USING t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
|
||||
SELECT * FROM t1;
|
||||
id ref
|
||||
1 3
|
||||
2 1
|
||||
3 2
|
||||
4 5
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
create table t1 (a int not null, key `a` (a) key_block_size=1024);
|
||||
show create table t1;
|
||||
|
|
|
@ -82,4 +82,22 @@ c1 c2
|
|||
-r- =raker=
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#32533: SELECT INTO OUTFILE never escapes multibyte character
|
||||
#
|
||||
CREATE TABLE t1 (c1 VARCHAR(256));
|
||||
INSERT INTO t1 VALUES (0xC3);
|
||||
SELECT HEX(c1) FROM t1;
|
||||
HEX(c1)
|
||||
C3
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug32533.txt' FIELDS ENCLOSED BY 0xC3 FROM t1;
|
||||
TRUNCATE t1;
|
||||
SELECT HEX(LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug32533.txt'));
|
||||
HEX(LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug32533.txt'))
|
||||
C35CC3C30A
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug32533.txt' INTO TABLE t1 FIELDS ENCLOSED BY 0xC3;
|
||||
SELECT HEX(c1) FROM t1;
|
||||
HEX(c1)
|
||||
C3
|
||||
DROP TABLE t1;
|
||||
# End of 5.0 tests.
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
set global max_allowed_packet=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '100'
|
||||
set max_allowed_packet=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '100'
|
||||
set global net_buffer_length=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect net_buffer_length value: '100'
|
||||
set net_buffer_length=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect net_buffer_length value: '100'
|
||||
SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len;
|
||||
len
|
||||
1024
|
||||
|
|
|
@ -1297,6 +1297,19 @@ create table t1
|
|||
partition by key(s1) partitions 3;
|
||||
insert into t1 values (null,null);
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
c0 int,
|
||||
c1 bigint,
|
||||
c2 set('sweet'),
|
||||
key (c2,c1,c0),
|
||||
key(c0)
|
||||
) engine=myisam partition by hash (month(c0)) partitions 5;
|
||||
insert ignore into t1 set c0 = -6502262, c1 = 3992917, c2 = 35019;
|
||||
insert ignore into t1 set c0 = 241221, c1 = -6862346, c2 = 56644;
|
||||
select c1 from t1 group by (select c0 from t1 limit 1);
|
||||
c1
|
||||
-6862346
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a int)
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p1 VALUES LESS THAN (10),
|
||||
|
@ -1354,4 +1367,54 @@ PARTITION p2 VALUES LESS THAN (18446744073709551615),
|
|||
PARTITION p3 VALUES LESS THAN MAXVALUE
|
||||
);
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1
|
||||
(int_column INT, char_column CHAR(5),
|
||||
PRIMARY KEY(char_column,int_column))
|
||||
PARTITION BY KEY(char_column,int_column)
|
||||
PARTITIONS 101;
|
||||
INSERT INTO t1 (int_column, char_column) VALUES
|
||||
( 39868 ,'zZZRW'),
|
||||
( 545592 ,'zZzSD'),
|
||||
( 4936 ,'zzzsT'),
|
||||
( 9274 ,'ZzZSX'),
|
||||
( 970185 ,'ZZzTN'),
|
||||
( 786036 ,'zZzTO'),
|
||||
( 37240 ,'zZzTv'),
|
||||
( 313801 ,'zzzUM'),
|
||||
( 782427 ,'ZZZva'),
|
||||
( 907955 ,'zZZvP'),
|
||||
( 453491 ,'zzZWV'),
|
||||
( 756594 ,'ZZZXU'),
|
||||
( 718061 ,'ZZzZH');
|
||||
SELECT * FROM t1 ORDER BY char_column DESC;
|
||||
int_column char_column
|
||||
718061 ZZzZH
|
||||
756594 ZZZXU
|
||||
453491 zzZWV
|
||||
907955 zZZvP
|
||||
782427 ZZZva
|
||||
313801 zzzUM
|
||||
37240 zZzTv
|
||||
786036 zZzTO
|
||||
970185 ZZzTN
|
||||
9274 ZzZSX
|
||||
4936 zzzsT
|
||||
545592 zZzSD
|
||||
39868 zZZRW
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
||||
user CHAR(25), PRIMARY KEY(id))
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY hash(id) subpartitions 2
|
||||
(PARTITION pa1 values less than (10),
|
||||
PARTITION pa2 values less than (20),
|
||||
PARTITION pa11 values less than MAXVALUE);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`user` char(25) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa2 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
||||
drop table t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
drop database if exists db99;
|
||||
drop table if exists t1;
|
||||
create database db99;
|
||||
use db99;
|
||||
create table t1 (a int not null)
|
||||
|
@ -11,3 +12,80 @@ alter table t1 add partition (partition p2 values in (3));
|
|||
alter table t1 drop partition p2;
|
||||
use test;
|
||||
drop database db99;
|
||||
create table t1 (f1 integer) engine= ARCHIVE partition by list(f1)
|
||||
(
|
||||
partition p1 values in (1),
|
||||
partition p2 values in (NULL),
|
||||
partition p3 values in (2),
|
||||
partition p4 values in (3),
|
||||
partition p5 values in (4)
|
||||
);
|
||||
insert into t1 values (1),(2),(3),(4),(null);
|
||||
select * from t1;
|
||||
f1
|
||||
1
|
||||
NULL
|
||||
2
|
||||
3
|
||||
4
|
||||
select * from t1 where f1 < 3;
|
||||
f1
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
c int not null) engine=ARCHIVE
|
||||
partition by hash (a + 2)
|
||||
partitions 3
|
||||
(partition x1 tablespace ts1,
|
||||
partition x2 tablespace ts2,
|
||||
partition x3 tablespace ts3);
|
||||
insert into t1 values (1,1,1);
|
||||
insert into t1 values (2,1,1);
|
||||
insert into t1 values (3,1,1);
|
||||
insert into t1 values (4,1,1);
|
||||
insert into t1 values (5,1,1);
|
||||
select * from t1;
|
||||
a b c
|
||||
1 1 1
|
||||
4 1 1
|
||||
2 1 1
|
||||
5 1 1
|
||||
3 1 1
|
||||
drop table t1;
|
||||
create table t1 (a int) engine=archive partition by hash(a);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (a) */
|
||||
drop table t1;
|
||||
CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
||||
f1 VARCHAR(25),
|
||||
PRIMARY KEY(id)) ENGINE=ARCHIVE
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY hash(id) subpartitions 2
|
||||
(PARTITION pa1 values less than (10),
|
||||
PARTITION pa2 values less than (20),
|
||||
PARTITION pa3 values less than (30),
|
||||
PARTITION pa4 values less than (40),
|
||||
PARTITION pa5 values less than (50),
|
||||
PARTITION pa6 values less than (60),
|
||||
PARTITION pa7 values less than (70),
|
||||
PARTITION pa8 values less than (80),
|
||||
PARTITION pa9 values less than (90),
|
||||
PARTITION pa10 values less than (100),
|
||||
PARTITION pa11 values less than MAXVALUE);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`f1` varchar(25) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=101 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = ARCHIVE, PARTITION pa2 VALUES LESS THAN (20) ENGINE = ARCHIVE, PARTITION pa3 VALUES LESS THAN (30) ENGINE = ARCHIVE, PARTITION pa4 VALUES LESS THAN (40) ENGINE = ARCHIVE, PARTITION pa5 VALUES LESS THAN (50) ENGINE = ARCHIVE, PARTITION pa6 VALUES LESS THAN (60) ENGINE = ARCHIVE, PARTITION pa7 VALUES LESS THAN (70) ENGINE = ARCHIVE, PARTITION pa8 VALUES LESS THAN (80) ENGINE = ARCHIVE, PARTITION pa9 VALUES LESS THAN (90) ENGINE = ARCHIVE, PARTITION pa10 VALUES LESS THAN (100) ENGINE = ARCHIVE, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = ARCHIVE) */
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
100
|
||||
drop table t1;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
drop table if exists t1;
|
||||
drop table if exists t1, t2;
|
||||
create table t1 (a int unsigned)
|
||||
partition by range (a)
|
||||
(partition pnull values less than (0),
|
||||
|
|
|
@ -807,6 +807,8 @@ select @@max_prepared_stmt_count;
|
|||
@@max_prepared_stmt_count
|
||||
0
|
||||
set global max_prepared_stmt_count=10000000000000000;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_prepared_stmt_count value: '10000000000000000'
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
1048576
|
||||
|
|
|
@ -783,20 +783,20 @@ a b
|
|||
2 two
|
||||
3 three
|
||||
4 four
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
|
|
|
@ -783,20 +783,20 @@ a b
|
|||
2 two
|
||||
3 three
|
||||
4 four
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
|
|
|
@ -784,20 +784,20 @@ a b
|
|||
2 two
|
||||
3 three
|
||||
4 four
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
|
|
|
@ -826,20 +826,20 @@ a b
|
|||
2 two
|
||||
3 three
|
||||
4 four
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
|
@ -3848,20 +3848,20 @@ a b
|
|||
2 two
|
||||
3 three
|
||||
4 four
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
|
|
|
@ -1135,6 +1135,24 @@ item started price
|
|||
A1 2005-11-01 08:00:00 1000.000
|
||||
A1 2005-11-15 00:00:00 2000.000
|
||||
DROP TABLE t1;
|
||||
|
||||
BUG#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
dateval date default NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY dateval (dateval)
|
||||
) AUTO_INCREMENT=173;
|
||||
INSERT INTO t1 VALUES
|
||||
(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'),
|
||||
(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'),
|
||||
(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11');
|
||||
This must use range access:
|
||||
explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '2007-01-02 23:59:59';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range dateval dateval 4 NULL 2 Using where
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t2 (a int, b int, filler char(100));
|
||||
|
|
|
@ -4307,6 +4307,12 @@ c3
|
|||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t1 (c1 BIGINT NOT NULL);
|
||||
INSERT INTO t1 (c1) VALUES (1);
|
||||
SELECT * FROM t1 WHERE c1 > NULL + 1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
|
||||
End of 5.0 tests
|
||||
create table t1(a INT, KEY (a));
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
|
||||
|
|
|
@ -77,10 +77,9 @@ ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
|||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
a
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
a
|
||||
1
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,3);
|
||||
(SELECT 1,2,3) = ROW(1,2,3)
|
||||
1
|
||||
|
@ -1307,7 +1306,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<primary_index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on PRIMARY where (`test`.`t1`.`b` <> 30))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<primary_index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on PRIMARY where ((`test`.`t1`.`b` <> 30) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`)))))
|
||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
a
|
||||
2
|
||||
|
@ -1315,8 +1314,8 @@ a
|
|||
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 100.00
|
||||
2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t1`.`b`) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`))))
|
||||
drop table t1, t2, t3;
|
||||
|
@ -1334,9 +1333,9 @@ a
|
|||
explain extended select * from t2 where t2.a in (select a from t1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a)))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`))))
|
||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
a
|
||||
2
|
||||
|
@ -1346,7 +1345,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where (`test`.`t1`.`b` <> 30))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where ((`test`.`t1`.`b` <> 30) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`)))))
|
||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
a
|
||||
2
|
||||
|
@ -1373,7 +1372,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where (`test`.`t1`.`b` <> 30))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where ((`test`.`t1`.`b` <> 30) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`)))))
|
||||
drop table t1, t2, t3;
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (a int, b int);
|
||||
|
@ -1737,7 +1736,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
1 PRIMARY t1 ALL NULL NULL NULL NULL 12 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 100.00 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`text` AS `text` from `test`.`t1` where (not(<in_optimizer>(`test`.`t1`.`id`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`id`) in t1 on PRIMARY where (`test`.`t1`.`id` < 8))))))
|
||||
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`text` AS `text` from `test`.`t1` where (not(<in_optimizer>(`test`.`t1`.`id`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`id`) in t1 on PRIMARY where ((`test`.`t1`.`id` < 8) and (<cache>(`test`.`t1`.`id`) = `test`.`t1`.`id`)))))))
|
||||
explain extended select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY tt ALL NULL NULL NULL NULL 12 100.00 Using where
|
||||
|
@ -2304,24 +2303,27 @@ drop table t1,t2;
|
|||
CREATE TABLE t1 ( a int, b int );
|
||||
CREATE TABLE t2 ( c int, d int );
|
||||
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
|
||||
SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
|
||||
SELECT a AS abc, b FROM t1 outr WHERE b =
|
||||
(SELECT MIN(b) FROM t1 WHERE a=outr.a);
|
||||
abc b
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
|
||||
INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b =
|
||||
(SELECT MIN(b) FROM t1 WHERE a=outr.a);
|
||||
select * from t2;
|
||||
c d
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
|
||||
CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b =
|
||||
(SELECT MIN(b) FROM t1 WHERE a=outr.a);
|
||||
select * from t3;
|
||||
abc b
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
|
||||
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
select * from t2;
|
||||
|
@ -2333,7 +2335,7 @@ c d
|
|||
2 3
|
||||
3 4
|
||||
drop table t3;
|
||||
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
|
||||
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
|
||||
execute stmt1;
|
||||
select * from t3;
|
||||
abc b
|
||||
|
@ -2515,7 +2517,9 @@ INSERT INTO t1 VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,0,680
|
|||
INSERT INTO t1 VALUES ('ATF','French Southern territories','Antarctica','Antarctica',7780.00,0,0,NULL,0.00,NULL,'Terres australes françaises','Nonmetropolitan Territory of France','Jacques Chirac',NULL,'TF');
|
||||
INSERT INTO t1 VALUES ('UMI','United States Minor Outlying Islands','Oceania','Micronesia/Caribbean',16.00,0,0,NULL,0.00,NULL,'United States Minor Outlying Islands','Dependent Territory of the US','George W. Bush',NULL,'UM');
|
||||
/*!40000 ALTER TABLE t1 ENABLE KEYS */;
|
||||
SELECT DISTINCT Continent AS c FROM t1 WHERE Code <> SOME ( SELECT Code FROM t1 WHERE Continent = c AND Population < 200);
|
||||
SELECT DISTINCT Continent AS c FROM t1 outr WHERE
|
||||
Code <> SOME ( SELECT Code FROM t1 WHERE Continent = outr.Continent AND
|
||||
Population < 200);
|
||||
c
|
||||
Oceania
|
||||
drop table t1;
|
||||
|
@ -3558,22 +3562,19 @@ SELECT sql_no_cache * FROM t1 WHERE NOT EXISTS
|
|||
(SELECT i FROM t1) UNION
|
||||
(SELECT i FROM t1)
|
||||
);
|
||||
i
|
||||
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 'UNION
|
||||
(SELECT i FROM t1)
|
||||
)' at line 3
|
||||
SELECT * FROM t1
|
||||
WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
|
||||
i
|
||||
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 'UNION (SELECT i FROM t1)))' at line 2
|
||||
explain select ((select t11.i from t1 t11) union (select t12.i from t1 t12))
|
||||
from t1;
|
||||
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 'union (select t12.i from t1 t12))
|
||||
from t1' at line 1
|
||||
explain select * from t1 where not exists
|
||||
((select t11.i from t1 t11) union (select t12.i from t1 t12));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
3 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
4 UNION t12 system NULL NULL NULL NULL 0 const row not found
|
||||
NULL UNION RESULT <union2,4> ALL NULL NULL NULL NULL NULL
|
||||
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 'union (select t12.i from t1 t12))' at line 2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a VARCHAR(250), b INT auto_increment, PRIMARY KEY (b));
|
||||
insert into t1 (a) values (FLOOR(rand() * 100));
|
||||
|
@ -3666,6 +3667,8 @@ CREATE TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b));
|
|||
CREATE TABLE t2 (x int auto_increment, y int, z int,
|
||||
PRIMARY KEY (x), FOREIGN KEY (y) REFERENCES t1 (b));
|
||||
SET SESSION sort_buffer_size = 32 * 1024;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect sort_buffer_size value: '32768'
|
||||
SELECT SQL_NO_CACHE COUNT(*)
|
||||
FROM (SELECT a, b, (SELECT x FROM t2 WHERE y=b ORDER BY z DESC LIMIT 1) c
|
||||
FROM t1) t;
|
||||
|
@ -4101,6 +4104,8 @@ INSERT INTO `t1` VALUES ('asdf','2007-02-08 01:11:26');
|
|||
INSERT INTO `t2` VALUES ('abcdefghijk');
|
||||
INSERT INTO `t2` VALUES ('asdf');
|
||||
SET session sort_buffer_size=8192;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
|
||||
SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2;
|
||||
d1
|
||||
1
|
||||
|
@ -4199,6 +4204,84 @@ LEFT(t1.a1,1)
|
|||
SELECT a2 FROM t2 WHERE t2.a2 IN (SELECT t1.a1 FROM t1,t3 WHERE t1.b1=t3.a3);
|
||||
a2
|
||||
DROP TABLE t1, t2, t3;
|
||||
CREATE TABLE t1 (a CHAR(1), b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('a', 'aa');
|
||||
INSERT INTO t1 VALUES ('a', 'aaa');
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
a b
|
||||
CREATE INDEX I1 ON t1 (a);
|
||||
CREATE INDEX I2 ON t1 (b);
|
||||
EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery I1 I1 2 func 2 Using index; Using where
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
a b
|
||||
CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10));
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
CREATE INDEX I1 ON t2 (a);
|
||||
CREATE INDEX I2 ON t2 (b);
|
||||
EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery I1 I1 4 func 2 Using index; Using where
|
||||
SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
||||
a b
|
||||
EXPLAIN
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery I1 I1 2 func 2 Using index; Using where
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
||||
a b
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (1,2), (2,3), (2,4);
|
||||
EXPLAIN
|
||||
SELECT a AS out_a, MIN(b) FROM t1
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
|
||||
GROUP BY a;
|
||||
ERROR 42S22: Unknown column 'out_a' in 'where clause'
|
||||
SELECT a AS out_a, MIN(b) FROM t1
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
|
||||
GROUP BY a;
|
||||
ERROR 42S22: Unknown column 'out_a' in 'where clause'
|
||||
EXPLAIN
|
||||
SELECT a AS out_a, MIN(b) FROM t1 t1_outer
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
|
||||
GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer ALL NULL NULL NULL NULL 4 Using where; Using temporary; Using filesort
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT a AS out_a, MIN(b) FROM t1 t1_outer
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
|
||||
GROUP BY a;
|
||||
out_a MIN(b)
|
||||
1 2
|
||||
2 4
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
|
||||
2
|
||||
2
|
||||
2
|
||||
EXPLAIN EXTENDED
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select 2 AS `2` from `test`.`t1` where exists(select 1 AS `1` from `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`a`))
|
||||
EXPLAIN EXTENDED
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION
|
||||
(SELECT 1 FROM t2 WHERE t1.a = t2.a));
|
||||
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 'UNION
|
||||
(SELECT 1 FROM t2 WHERE t1.a = t2.a))' at line 2
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests.
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
|
||||
|
|
|
@ -757,6 +757,6 @@ a
|
|||
EXPLAIN SELECT a FROM t1 WHERE a NOT IN (SELECT a FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 Using index
|
||||
2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1,3 +1,104 @@
|
|||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
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 'select adddate(current_timestamp(), interval -4 day))' at line 1
|
||||
purge master logs before adddate(current_timestamp(), interval -4 day);
|
||||
create table t1(a int,b int,key(a),key(b));
|
||||
insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5),
|
||||
(6,7),(7,4),(5,3);
|
||||
select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
sum(a) a
|
||||
select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
ERROR HY000: Thread stack overrun detected
|
||||
explain select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index a a 5 NULL 9 Using where; Using index
|
||||
2 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
3 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
4 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
5 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
6 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
7 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
8 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
9 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
10 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
11 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
|
||||
12 SUBQUERY t1 range a a 5 NULL 1 Using where; Using temporary; Using filesort
|
||||
13 SUBQUERY t1 index NULL a 5 NULL 9 Using index
|
||||
explain select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
ERROR HY000: Thread stack overrun detected
|
||||
drop table t1;
|
||||
|
|
|
@ -269,6 +269,8 @@ a+0 b+0
|
|||
56 379
|
||||
68 454
|
||||
set @@max_length_for_sort_data=0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_length_for_sort_data value: '0'
|
||||
select a+0, b+0 from t1 where a > 40 and a < 70 order by 2;
|
||||
a+0 b+0
|
||||
57 135
|
||||
|
@ -672,6 +674,16 @@ COUNT(DISTINCT b,c)
|
|||
2
|
||||
2
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t1(a BIT(13), KEY(a));
|
||||
INSERT INTO t1(a) VALUES
|
||||
(65535),(65525),(65535),(65535),(65535),(65535),(65535),(65535),(65535),(65535);
|
||||
EXPLAIN SELECT 1 FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL a 3 NULL 6 Using index for group-by
|
||||
SELECT 1 FROM t1 GROUP BY a;
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
create table t1(a bit(7));
|
||||
insert into t1 values(0x40);
|
||||
|
|
|
@ -269,6 +269,8 @@ a+0 b+0
|
|||
56 379
|
||||
68 454
|
||||
set @@max_length_for_sort_data=0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_length_for_sort_data value: '0'
|
||||
select a+0, b+0 from t1 where a > 40 and a < 70 order by 2;
|
||||
a+0 b+0
|
||||
57 135
|
||||
|
|
|
@ -807,4 +807,18 @@ set @@sql_mode='TRADITIONAL';
|
|||
create table t1 (a text default '');
|
||||
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
|
||||
set @@sql_mode='';
|
||||
CREATE TABLE t (c TEXT CHARSET ASCII);
|
||||
INSERT INTO t (c) VALUES (REPEAT('1',65537));
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c' at row 1
|
||||
INSERT INTO t (c) VALUES (REPEAT('2',65536));
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c' at row 1
|
||||
INSERT INTO t (c) VALUES (REPEAT('3',65535));
|
||||
SELECT LENGTH(c), CHAR_LENGTH(c) FROM t;
|
||||
LENGTH(c) CHAR_LENGTH(c)
|
||||
65535 65535
|
||||
65535 65535
|
||||
65535 65535
|
||||
DROP TABLE t;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -211,7 +211,6 @@ a
|
|||
Warnings:
|
||||
Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
|
||||
Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
|
||||
Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
|
||||
SELECT * FROM t2 WHERE a = '0000-00-00';
|
||||
a
|
||||
0000-00-00
|
||||
|
@ -223,6 +222,44 @@ INSERT INTO t1 VALUES ('0000-00-00');
|
|||
ERROR 22007: Incorrect date value: '0000-00-00' for column 'a' at row 1
|
||||
SET SQL_MODE=DEFAULT;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a DATE);
|
||||
CREATE TABLE t2 (a DATE);
|
||||
CREATE INDEX i ON t1 (a);
|
||||
INSERT INTO t1 VALUES ('1000-00-00'),('1000-00-00');
|
||||
INSERT INTO t2 VALUES ('1000-00-00'),('1000-00-00');
|
||||
SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||
a
|
||||
1000-00-00
|
||||
1000-00-00
|
||||
SELECT * FROM t2 WHERE a = '1000-00-00';
|
||||
a
|
||||
1000-00-00
|
||||
1000-00-00
|
||||
SET SQL_MODE=TRADITIONAL;
|
||||
EXPLAIN SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref i i 4 const 1 Using where; Using index
|
||||
Warnings:
|
||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||
a
|
||||
1000-00-00
|
||||
1000-00-00
|
||||
Warnings:
|
||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
SELECT * FROM t2 WHERE a = '1000-00-00';
|
||||
a
|
||||
1000-00-00
|
||||
1000-00-00
|
||||
Warnings:
|
||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
INSERT INTO t1 VALUES ('1000-00-00');
|
||||
ERROR 22007: Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||
SET SQL_MODE=DEFAULT;
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests
|
||||
create table t1 (a date, primary key (a))engine=memory;
|
||||
insert into t1 values ('0000-01-01'), ('0000-00-01'), ('0001-01-01');
|
||||
|
|
|
@ -505,6 +505,61 @@ select sum(a) from t1 group by convert(a, datetime);
|
|||
sum(a)
|
||||
NULL
|
||||
drop table t1;
|
||||
create table t1 (id int(10) not null, cur_date datetime not null);
|
||||
create table t2 (id int(10) not null, cur_date date not null);
|
||||
insert into t1 (id, cur_date) values (1, '2007-04-25 18:30:22');
|
||||
insert into t2 (id, cur_date) values (1, '2007-04-25');
|
||||
explain extended
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.cur_date' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select '1' AS `id`,'2007-04-25 18:30:22' AS `cur_date` from `test`.`t1` where <in_optimizer>('1',<exists>(select 1 AS `Not_used` from `test`.`t1` `x1` where 0))
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
id cur_date
|
||||
explain extended
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t2.cur_date' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select '1' AS `id`,'2007-04-25' AS `cur_date` from `test`.`t2` where <in_optimizer>('1',<exists>(select 1 AS `Not_used` from `test`.`t2` `x1` where 0))
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
id cur_date
|
||||
insert into t1 (id, cur_date) values (2, '2007-04-26 18:30:22');
|
||||
insert into t2 (id, cur_date) values (2, '2007-04-26');
|
||||
explain extended
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY x1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.cur_date' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`cur_date` AS `cur_date` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`id`,<exists>(select 1 AS `Not_used` from `test`.`t1` `x1` where ((`test`.`t1`.`cur_date` = 0) and (<cache>(`test`.`t1`.`id`) = `test`.`x1`.`id`))))
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
id cur_date
|
||||
explain extended
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY x1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t2.cur_date' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`id` AS `id`,`test`.`t2`.`cur_date` AS `cur_date` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `Not_used` from `test`.`t2` `x1` where ((`test`.`t2`.`cur_date` = 0) and (<cache>(`test`.`t2`.`id`) = `test`.`x1`.`id`))))
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
id cur_date
|
||||
drop table t1,t2;
|
||||
End of 5.0 tests
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
|
||||
|
|
|
@ -365,4 +365,31 @@ DROP FUNCTION check_const_len;
|
|||
DROP PROCEDURE check_const_len_sp;
|
||||
DROP TRIGGER check_const_len_trigger;
|
||||
DROP TABLE const_len_bug;
|
||||
CREATE FUNCTION sequence RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (4),(3),(2),(1);
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT sequence() AS seq, a FROM t1 ORDER BY seq ASC;
|
||||
seq a
|
||||
1 4
|
||||
2 3
|
||||
3 2
|
||||
4 1
|
||||
SELECT sequence() AS seq, a FROM t1 ORDER BY seq DESC;
|
||||
seq a
|
||||
4 1
|
||||
3 2
|
||||
2 3
|
||||
1 4
|
||||
SELECT * FROM t1 WHERE a = sequence();
|
||||
a
|
||||
SELECT * FROM t2 WHERE a = sequence();
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
DROP FUNCTION sequence;
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests.
|
||||
|
|
|
@ -353,6 +353,13 @@ select @a:=f4, count(f4) from t1 group by 1 desc;
|
|||
2.6 1
|
||||
1.6 4
|
||||
drop table t1;
|
||||
create table t1 (f1 int);
|
||||
insert into t1 values (2), (1);
|
||||
select @i := f1 as j from t1 order by 1;
|
||||
j
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
create table t1(a int);
|
||||
insert into t1 values(5),(4),(4),(3),(2),(2),(2),(1);
|
||||
set @rownum := 0;
|
||||
|
|
|
@ -279,6 +279,8 @@ NET_READ_TIMEOUT 600
|
|||
NET_RETRY_COUNT 10
|
||||
NET_WRITE_TIMEOUT 500
|
||||
set net_buffer_length=1;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect net_buffer_length value: '1'
|
||||
show variables like 'net_buffer_length';
|
||||
Variable_name Value
|
||||
net_buffer_length 1024
|
||||
|
@ -312,14 +314,14 @@ show variables like '%alloc%';
|
|||
Variable_name Value
|
||||
query_alloc_block_size 8192
|
||||
query_prealloc_size 8192
|
||||
range_alloc_block_size 2048
|
||||
range_alloc_block_size 4096
|
||||
transaction_alloc_block_size 8192
|
||||
transaction_prealloc_size 4096
|
||||
select * from information_schema.session_variables where variable_name like '%alloc%' order by 1;
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
QUERY_ALLOC_BLOCK_SIZE 8192
|
||||
QUERY_PREALLOC_SIZE 8192
|
||||
RANGE_ALLOC_BLOCK_SIZE 2048
|
||||
RANGE_ALLOC_BLOCK_SIZE 4096
|
||||
TRANSACTION_ALLOC_BLOCK_SIZE 8192
|
||||
TRANSACTION_PREALLOC_SIZE 4096
|
||||
set @@range_alloc_block_size=1024*16;
|
||||
|
@ -351,14 +353,14 @@ show variables like '%alloc%';
|
|||
Variable_name Value
|
||||
query_alloc_block_size 8192
|
||||
query_prealloc_size 8192
|
||||
range_alloc_block_size 2048
|
||||
range_alloc_block_size 4096
|
||||
transaction_alloc_block_size 8192
|
||||
transaction_prealloc_size 4096
|
||||
select * from information_schema.session_variables where variable_name like '%alloc%' order by 1;
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
QUERY_ALLOC_BLOCK_SIZE 8192
|
||||
QUERY_PREALLOC_SIZE 8192
|
||||
RANGE_ALLOC_BLOCK_SIZE 2048
|
||||
RANGE_ALLOC_BLOCK_SIZE 4096
|
||||
TRANSACTION_ALLOC_BLOCK_SIZE 8192
|
||||
TRANSACTION_PREALLOC_SIZE 4096
|
||||
SELECT @@version LIKE 'non-existent';
|
||||
|
@ -416,6 +418,8 @@ select @@autocommit, @@big_tables;
|
|||
@@autocommit @@big_tables
|
||||
1 1
|
||||
set global binlog_cache_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect binlog_cache_size value: '100'
|
||||
set bulk_insert_buffer_size=100;
|
||||
set character set cp1251_koi8;
|
||||
set character set default;
|
||||
|
@ -444,6 +448,8 @@ set global flush_time=100;
|
|||
set insert_id=1;
|
||||
set interactive_timeout=100;
|
||||
set join_buffer_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect join_buffer_size value: '100'
|
||||
set last_insert_id=1;
|
||||
set global local_infile=1;
|
||||
set long_query_time=0.000001;
|
||||
|
@ -456,12 +462,20 @@ select @@long_query_time;
|
|||
100.000001
|
||||
set low_priority_updates=1;
|
||||
set max_allowed_packet=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '100'
|
||||
set global max_binlog_cache_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_binlog_cache_size value: '100'
|
||||
set global max_binlog_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_binlog_size value: '100'
|
||||
set global max_connect_errors=100;
|
||||
set global max_connections=100;
|
||||
set global max_delayed_threads=100;
|
||||
set max_heap_table_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_heap_table_size value: '100'
|
||||
set max_join_size=100;
|
||||
set max_sort_length=100;
|
||||
set max_tmp_tables=100;
|
||||
|
@ -472,17 +486,25 @@ select @@max_user_connections;
|
|||
set global max_write_lock_count=100;
|
||||
set myisam_sort_buffer_size=100;
|
||||
set net_buffer_length=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect net_buffer_length value: '100'
|
||||
set net_read_timeout=100;
|
||||
set net_write_timeout=100;
|
||||
set global query_cache_limit=100;
|
||||
set global query_cache_size=100;
|
||||
set global query_cache_type=demand;
|
||||
set read_buffer_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect read_buffer_size value: '100'
|
||||
set read_rnd_buffer_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect read_rnd_buffer_size value: '100'
|
||||
set global rpl_recovery_rank=100;
|
||||
set global server_id=100;
|
||||
set global slow_launch_time=100;
|
||||
set sort_buffer_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect sort_buffer_size value: '100'
|
||||
set @@max_sp_recursion_depth=10;
|
||||
select @@max_sp_recursion_depth;
|
||||
@@max_sp_recursion_depth
|
||||
|
@ -522,6 +544,8 @@ set storage_engine=myisam;
|
|||
set global thread_cache_size=100;
|
||||
set timestamp=1, timestamp=default;
|
||||
set tmp_table_size=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect tmp_table_size value: '100'
|
||||
set tx_isolation="READ-COMMITTED";
|
||||
set wait_timeout=100;
|
||||
set log_warnings=1;
|
||||
|
@ -691,6 +715,8 @@ SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'MYI
|
|||
VARIABLE_NAME VARIABLE_VALUE
|
||||
MYISAM_DATA_POINTER_SIZE 7
|
||||
SET GLOBAL table_open_cache=-1;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect table_open_cache value: '0'
|
||||
SHOW VARIABLES LIKE 'table_open_cache';
|
||||
Variable_name Value
|
||||
table_open_cache 1
|
||||
|
|
|
@ -19,6 +19,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
End of 5.0 tests.
|
||||
drop procedure if exists proc_1;
|
||||
create procedure proc_1() install plugin my_plug soname '\\root\\some_plugin.dll';
|
||||
call proc_1();
|
||||
ERROR HY000: No paths allowed for shared library
|
||||
|
|
|
@ -783,20 +783,20 @@ a b
|
|||
2 two
|
||||
3 three
|
||||
4 four
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
deallocate prepare stmt1 ;
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
|
||||
(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
|
||||
prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
|
||||
(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
|
||||
execute stmt1 ;
|
||||
ccc
|
||||
1
|
||||
|
|
|
@ -121,7 +121,7 @@ Create Table CREATE TABLE `t3` (
|
|||
`fkid` mediumint(9) DEFAULT NULL,
|
||||
`filler` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa2 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION pa3 VALUES LESS THAN (30) ENGINE = MyISAM, PARTITION pa4 VALUES LESS THAN (40) ENGINE = MyISAM, PARTITION pa5 VALUES LESS THAN (50) ENGINE = MyISAM, PARTITION pa6 VALUES LESS THAN (60) ENGINE = MyISAM, PARTITION pa7 VALUES LESS THAN (70) ENGINE = MyISAM, PARTITION pa8 VALUES LESS THAN (80) ENGINE = MyISAM, PARTITION pa9 VALUES LESS THAN (90) ENGINE = MyISAM, PARTITION pa10 VALUES LESS THAN (100) ENGINE = MyISAM, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa2 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION pa3 VALUES LESS THAN (30) ENGINE = MyISAM, PARTITION pa4 VALUES LESS THAN (40) ENGINE = MyISAM, PARTITION pa5 VALUES LESS THAN (50) ENGINE = MyISAM, PARTITION pa6 VALUES LESS THAN (60) ENGINE = MyISAM, PARTITION pa7 VALUES LESS THAN (70) ENGINE = MyISAM, PARTITION pa8 VALUES LESS THAN (80) ENGINE = MyISAM, PARTITION pa9 VALUES LESS THAN (90) ENGINE = MyISAM, PARTITION pa10 VALUES LESS THAN (100) ENGINE = MyISAM, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
|
|
|
@ -113,7 +113,7 @@ Create Table CREATE TABLE `byrange_tbl` (
|
|||
`fkid` mediumint(9) DEFAULT NULL,
|
||||
`filler` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION pa2 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (30) ENGINE = InnoDB, PARTITION pa4 VALUES LESS THAN (40) ENGINE = InnoDB, PARTITION pa5 VALUES LESS THAN (50) ENGINE = InnoDB, PARTITION pa6 VALUES LESS THAN (60) ENGINE = InnoDB, PARTITION pa7 VALUES LESS THAN (70) ENGINE = InnoDB, PARTITION pa8 VALUES LESS THAN (80) ENGINE = InnoDB, PARTITION pa9 VALUES LESS THAN (90) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (100) ENGINE = InnoDB, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION pa2 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (30) ENGINE = InnoDB, PARTITION pa4 VALUES LESS THAN (40) ENGINE = InnoDB, PARTITION pa5 VALUES LESS THAN (50) ENGINE = InnoDB, PARTITION pa6 VALUES LESS THAN (60) ENGINE = InnoDB, PARTITION pa7 VALUES LESS THAN (70) ENGINE = InnoDB, PARTITION pa8 VALUES LESS THAN (80) ENGINE = InnoDB, PARTITION pa9 VALUES LESS THAN (90) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (100) ENGINE = InnoDB, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
|
|
|
@ -1328,4 +1328,17 @@ create table t2 as select f1() from t1;
|
|||
drop table t1,t2;
|
||||
drop function f1;
|
||||
|
||||
#
|
||||
# Bug#25629 CREATE TABLE LIKE does not work with INFORMATION_SCHEMA
|
||||
#
|
||||
create table t1 like information_schema.processlist;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
create temporary table t1 like information_schema.processlist;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
create table t1 like information_schema.character_sets;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -122,3 +122,16 @@ disconnect addconroot2;
|
|||
connection default;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
# Bug#30152 MySQLD crash duing alter table causes DROP DATABASE to FAIL due to temp file
|
||||
#
|
||||
create database mysql_test;
|
||||
create table mysql_test.t1(f1 int);
|
||||
create table mysql_test.`#sql-347f_7` (f1 int);
|
||||
create table mysql_test.`#sql-347f_8` (f1 int);
|
||||
drop table mysql_test.`#sql-347f_8`;
|
||||
copy_file $MYSQLTEST_VARDIR/master-data/mysql_test/t1.frm $MYSQLTEST_VARDIR/master-data/mysql_test/#sql-347f_6.frm;
|
||||
drop database mysql_test;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -66,4 +66,32 @@ explain extended select * from t1 having 1;
|
|||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #32241: memory corruption due to large index map in 'Range checked for
|
||||
# each record'
|
||||
#
|
||||
|
||||
CREATE TABLE t1(c INT);
|
||||
INSERT INTO t1 VALUES (),();
|
||||
|
||||
CREATE TABLE t2 (b INT,
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
|
||||
KEY(b),KEY(b),KEY(b),KEY(b),KEY(b));
|
||||
|
||||
INSERT INTO t2 VALUES (),(),();
|
||||
|
||||
# We only need to make sure that there is no buffer overrun and the index map
|
||||
# is displayed correctly
|
||||
--replace_column 1 X 2 X 3 X 4 X 5 X 6 X 7 X 8 X 9 X
|
||||
EXPLAIN SELECT 1 FROM
|
||||
(SELECT 1 FROM t2,t1 WHERE b < c GROUP BY 1 LIMIT 1) AS d2;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
|
|
@ -1764,6 +1764,35 @@ DROP TABLE federated.t1;
|
|||
connection slave;
|
||||
DROP TABLE federated.t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
#
|
||||
# Bug #32374 crash with filesort when selecting from federated table and view
|
||||
#
|
||||
connection slave;
|
||||
create table t1 (a varchar(256));
|
||||
--disable_warnings
|
||||
drop view if exists v1;
|
||||
--enable_warnings
|
||||
create view v1 as select a from t1;
|
||||
--disable_query_log
|
||||
let $n= 100;
|
||||
while ($n)
|
||||
{
|
||||
insert into t1 values (repeat('a',200));
|
||||
dec $n;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
connection master;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval create table t1
|
||||
(a varchar(256)) engine=federated
|
||||
connection='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/v1';
|
||||
|
||||
select 1 from t1 order by a;
|
||||
drop table t1;
|
||||
connection slave;
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
source include/federated_cleanup.inc;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
select format(1.5555,0),format(123.5555,1),format(1234.5555,2),format(12345.55555,3),format(123456.5555,4),format(1234567.5555,5),format("12345.2399",2);
|
||||
|
@ -213,6 +213,20 @@ SELECT NAME_CONST('test', 1.0);
|
|||
SELECT NAME_CONST('test', -1.0);
|
||||
SELECT NAME_CONST('test', 'test');
|
||||
|
||||
#
|
||||
# Bug #27545: erroneous usage of NAME_CONST with a name as the first parameter
|
||||
# resolved against a column name of a derived table hangs the client
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (5), (2);
|
||||
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #32559: connection hangs on query with name_const
|
||||
#
|
||||
|
|
|
@ -766,6 +766,16 @@ select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1;
|
|||
set lc_time_names=en_US;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#32180: DATE_ADD treats datetime numeric argument as DATE
|
||||
# instead of DATETIME
|
||||
#
|
||||
|
||||
select DATE_ADD('20071108181000', INTERVAL 1 DAY);
|
||||
select DATE_ADD(20071108181000, INTERVAL 1 DAY);
|
||||
select DATE_ADD('20071108', INTERVAL 1 DAY);
|
||||
select DATE_ADD(20071108, INTERVAL 1 DAY);
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -440,6 +440,48 @@ INSERT INTO `t1` VALUES ('','0000-00-00');
|
|||
select geomfromtext(col9,col89) as a from t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #31158 Spatial, Union, LONGBLOB vs BLOB bug (crops data)
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
geomdata polygon NOT NULL,
|
||||
SPATIAL KEY index_geom (geomdata)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
geomdata polygon NOT NULL,
|
||||
SPATIAL KEY index_geom (geomdata)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
|
||||
|
||||
CREATE TABLE t3
|
||||
select
|
||||
aswkb(ws.geomdata) AS geomdatawkb
|
||||
from
|
||||
t1 ws
|
||||
union
|
||||
select
|
||||
aswkb(ws.geomdata) AS geomdatawkb
|
||||
from
|
||||
t2 ws;
|
||||
|
||||
describe t3;
|
||||
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
|
||||
#
|
||||
# Bug #30284 spatial key corruption
|
||||
#
|
||||
|
||||
create table t1(col1 geometry default null,col15 geometrycollection not
|
||||
null,spatial index(col15),index(col1(15)))engine=myisam;
|
||||
insert into t1 set col15 = GeomFromText('POINT(6 5)');
|
||||
insert into t1 set col15 = GeomFromText('POINT(6 5)');
|
||||
check table t1 extended;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@ -601,6 +643,15 @@ SELECT 1;
|
|||
|
||||
-- source include/gis_keys.inc
|
||||
|
||||
#
|
||||
# Bug #31155 gis types in union'd select cause crash
|
||||
#
|
||||
|
||||
create table `t1` (`col002` point)engine=myisam;
|
||||
insert into t1 values (),(),();
|
||||
select min(`col002`) from t1 union select `col002` from t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
|
|
|
@ -914,7 +914,31 @@ SELECT SQL_BIG_RESULT DISTINCT(a) FROM t1;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #32268: Indexed queries give bogus MIN and MAX results
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3);
|
||||
INSERT INTO t1 SELECT a + 1, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2, b FROM t1;
|
||||
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
|
||||
CREATE INDEX break_it ON t1 (a, b);
|
||||
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
|
||||
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
|
||||
EXPLAIN
|
||||
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1239,4 +1239,13 @@ select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
|||
#
|
||||
explain extended select 1 from information_schema.tables;
|
||||
|
||||
#
|
||||
# Bug#32775 problems with SHOW EVENTS and Information_Schema
|
||||
#
|
||||
use information_schema;
|
||||
show events;
|
||||
show events from information_schema;
|
||||
show events where Db= 'information_schema';
|
||||
use test;
|
||||
|
||||
--echo End of 5.1 tests.
|
||||
|
|
|
@ -578,6 +578,28 @@ CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST;
|
|||
CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug #28837: MyISAM storage engine error (134) doing delete with self-join
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
||||
INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
|
||||
INSERT INTO t1 SELECT * FROM t2;
|
||||
INSERT INTO t1 SELECT * FROM t2;
|
||||
|
||||
CREATE TABLE t3 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MERGE
|
||||
UNION(t1);
|
||||
|
||||
SELECT * FROM t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
|
||||
SELECT * FROM t3;
|
||||
DELETE FROM a USING t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
|
||||
SELECT * FROM t3;
|
||||
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -1152,6 +1152,23 @@ SET @@myisam_repair_threads=1;
|
|||
CHECK TABLE t1 EXTENDED;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#28837: MyISAM storage engine error (134) doing delete with self-join
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
||||
INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
|
||||
INSERT INTO t1 SELECT * FROM t2;
|
||||
|
||||
SELECT * FROM t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
|
||||
SELECT * FROM t1;
|
||||
DELETE FROM a USING t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
--set-variable=sort_buffer=0
|
||||
--set-variable=sort_buffer=32804
|
||||
|
|
|
@ -86,4 +86,28 @@ DROP TABLE t2;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#32533: SELECT INTO OUTFILE never escapes multibyte character
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (c1 VARCHAR(256));
|
||||
INSERT INTO t1 VALUES (0xC3);
|
||||
SELECT HEX(c1) FROM t1;
|
||||
|
||||
--let $file=$MYSQLTEST_VARDIR/tmp/bug32533.txt
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file' FIELDS ENCLOSED BY 0xC3 FROM t1
|
||||
TRUNCATE t1;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT HEX(LOAD_FILE('$file'))
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval LOAD DATA INFILE '$file' INTO TABLE t1 FIELDS ENCLOSED BY 0xC3
|
||||
SELECT HEX(c1) FROM t1;
|
||||
|
||||
--remove_file $file
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # End of 5.0 tests.
|
||||
|
|
|
@ -1543,6 +1543,24 @@ while ($cnt)
|
|||
drop table t1;
|
||||
|
||||
#
|
||||
# BUG#32272: partition crash 1: enum column
|
||||
#
|
||||
create table t1 (
|
||||
c0 int,
|
||||
c1 bigint,
|
||||
c2 set('sweet'),
|
||||
key (c2,c1,c0),
|
||||
key(c0)
|
||||
) engine=myisam partition by hash (month(c0)) partitions 5;
|
||||
|
||||
--disable_warnings
|
||||
insert ignore into t1 set c0 = -6502262, c1 = 3992917, c2 = 35019;
|
||||
insert ignore into t1 set c0 = 241221, c1 = -6862346, c2 = 56644;
|
||||
--enable_warnings
|
||||
# This must not fail assert:
|
||||
select c1 from t1 group by (select c0 from t1 limit 1);
|
||||
drop table t1;
|
||||
|
||||
# Bug #30495: optimize table t1,t2,t3 extended errors
|
||||
#
|
||||
CREATE TABLE t1(a int)
|
||||
|
@ -1594,4 +1612,51 @@ CREATE TABLE t1 (s1 BIGINT UNSIGNED)
|
|||
);
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #31890 Partitions: ORDER BY DESC in InnoDB not working
|
||||
#
|
||||
|
||||
CREATE TABLE t1
|
||||
(int_column INT, char_column CHAR(5),
|
||||
PRIMARY KEY(char_column,int_column))
|
||||
PARTITION BY KEY(char_column,int_column)
|
||||
PARTITIONS 101;
|
||||
INSERT INTO t1 (int_column, char_column) VALUES
|
||||
( 39868 ,'zZZRW'),
|
||||
( 545592 ,'zZzSD'),
|
||||
( 4936 ,'zzzsT'),
|
||||
( 9274 ,'ZzZSX'),
|
||||
( 970185 ,'ZZzTN'),
|
||||
( 786036 ,'zZzTO'),
|
||||
( 37240 ,'zZzTv'),
|
||||
( 313801 ,'zzzUM'),
|
||||
( 782427 ,'ZZZva'),
|
||||
( 907955 ,'zZZvP'),
|
||||
( 453491 ,'zzZWV'),
|
||||
( 756594 ,'ZZZXU'),
|
||||
( 718061 ,'ZZzZH');
|
||||
SELECT * FROM t1 ORDER BY char_column DESC;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #32247 Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
|
||||
#
|
||||
|
||||
CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
||||
user CHAR(25), PRIMARY KEY(id))
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY hash(id) subpartitions 2
|
||||
(PARTITION pa1 values less than (10),
|
||||
PARTITION pa2 values less than (20),
|
||||
PARTITION pa11 values less than MAXVALUE);
|
||||
--disable_query_log
|
||||
let $n= 15;
|
||||
while ($n)
|
||||
{
|
||||
insert into t1 (user) values ('mysql');
|
||||
dec $n;
|
||||
}
|
||||
--enable_query_log
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -16,7 +16,9 @@
|
|||
#
|
||||
--disable_warnings
|
||||
drop database if exists db99;
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create database db99;
|
||||
use db99;
|
||||
create table t1 (a int not null)
|
||||
|
@ -30,3 +32,76 @@ alter table t1 add partition (partition p2 values in (3));
|
|||
alter table t1 drop partition p2;
|
||||
use test;
|
||||
drop database db99;
|
||||
|
||||
create table t1 (f1 integer) engine= ARCHIVE partition by list(f1)
|
||||
(
|
||||
partition p1 values in (1),
|
||||
partition p2 values in (NULL),
|
||||
partition p3 values in (2),
|
||||
partition p4 values in (3),
|
||||
partition p5 values in (4)
|
||||
);
|
||||
|
||||
insert into t1 values (1),(2),(3),(4),(null);
|
||||
select * from t1;
|
||||
select * from t1 where f1 < 3;
|
||||
drop table t1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
c int not null) engine=ARCHIVE
|
||||
partition by hash (a + 2)
|
||||
partitions 3
|
||||
(partition x1 tablespace ts1,
|
||||
partition x2 tablespace ts2,
|
||||
partition x3 tablespace ts3);
|
||||
|
||||
insert into t1 values (1,1,1);
|
||||
insert into t1 values (2,1,1);
|
||||
insert into t1 values (3,1,1);
|
||||
insert into t1 values (4,1,1);
|
||||
insert into t1 values (5,1,1);
|
||||
|
||||
select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #32247 Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
|
||||
# (though reported as InnoDB bug, requires some ARCHIVE tests
|
||||
|
||||
create table t1 (a int) engine=archive partition by hash(a);
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
||||
f1 VARCHAR(25),
|
||||
PRIMARY KEY(id)) ENGINE=ARCHIVE
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY hash(id) subpartitions 2
|
||||
(PARTITION pa1 values less than (10),
|
||||
PARTITION pa2 values less than (20),
|
||||
PARTITION pa3 values less than (30),
|
||||
PARTITION pa4 values less than (40),
|
||||
PARTITION pa5 values less than (50),
|
||||
PARTITION pa6 values less than (60),
|
||||
PARTITION pa7 values less than (70),
|
||||
PARTITION pa8 values less than (80),
|
||||
PARTITION pa9 values less than (90),
|
||||
PARTITION pa10 values less than (100),
|
||||
PARTITION pa11 values less than MAXVALUE);
|
||||
|
||||
--disable_query_log
|
||||
let $n= 100;
|
||||
while ($n)
|
||||
{
|
||||
insert into t1 (f1) values (repeat('a',25));
|
||||
dec $n;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
show create table t1;
|
||||
select count(*) from t1;
|
||||
drop table t1;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
-- source include/have_partition.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
|
@ -757,3 +757,29 @@ DROP TABLE t1;
|
|||
# a = "C2345678901234567890";
|
||||
#select * from t1 where a = "12345678901234567890";
|
||||
#drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# BUG#30573: get wrong result with "group by" on PARTITIONed table
|
||||
#
|
||||
#create table t1 (a int);
|
||||
#insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
#CREATE TABLE t2 (
|
||||
# defid int(10) unsigned NOT NULL,
|
||||
# day int(10) unsigned NOT NULL,
|
||||
# count int(10) unsigned NOT NULL,
|
||||
# filler char(200),
|
||||
# KEY (defid,day)
|
||||
#)
|
||||
#PARTITION BY RANGE (day) (
|
||||
# PARTITION p7 VALUES LESS THAN (20070401) ,
|
||||
# PARTITION p8 VALUES LESS THAN (20070501));
|
||||
|
||||
#insert into t2 select 20, 20070311, 1, 'filler' from t1 A, t1 B;
|
||||
#insert into t2 select 20, 20070411, 1, 'filler' from t1 A, t1 B;
|
||||
#insert into t2 values(52, 20070321, 123, 'filler') ;
|
||||
#insert into t2 values(52, 20070322, 456, 'filler') ;
|
||||
|
||||
#select sum(count) from t2 ch where ch.defid in (50,52) and ch.day between 20070320 and 20070401 group by defid;
|
||||
#drop table t1, t2;
|
||||
|
||||
|
|
|
@ -935,6 +935,26 @@ SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-02 00:00:00';
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo
|
||||
--echo BUG#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
|
||||
--echo
|
||||
CREATE TABLE t1 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
dateval date default NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY dateval (dateval)
|
||||
) AUTO_INCREMENT=173;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'),
|
||||
(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'),
|
||||
(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11');
|
||||
|
||||
--echo This must use range access:
|
||||
explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '2007-01-02 23:59:59';
|
||||
|
||||
drop table t1;
|
||||
|
||||
# End of 5.0 tests
|
||||
|
||||
# BUG#22393 fix: Adjust 'ref' estimate if we have 'range' estimate for
|
||||
|
|
|
@ -3650,6 +3650,17 @@ DROP TABLE t2;
|
|||
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# Bug #32335: Error on BIGINT > NULL + 1
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (c1 BIGINT NOT NULL);
|
||||
INSERT INTO t1 (c1) VALUES (1);
|
||||
SELECT * FROM t1 WHERE c1 > NULL + 1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -32,7 +32,9 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
|||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
-- error 1108
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
-- error ER_BAD_FIELD_ERROR
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
-- error ER_BAD_FIELD_ERROR
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,3);
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,1);
|
||||
|
@ -1346,17 +1348,20 @@ drop table t1,t2;
|
|||
CREATE TABLE t1 ( a int, b int );
|
||||
CREATE TABLE t2 ( c int, d int );
|
||||
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
|
||||
SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
|
||||
INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
|
||||
SELECT a AS abc, b FROM t1 outr WHERE b =
|
||||
(SELECT MIN(b) FROM t1 WHERE a=outr.a);
|
||||
INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b =
|
||||
(SELECT MIN(b) FROM t1 WHERE a=outr.a);
|
||||
select * from t2;
|
||||
CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
|
||||
CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b =
|
||||
(SELECT MIN(b) FROM t1 WHERE a=outr.a);
|
||||
select * from t3;
|
||||
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
|
||||
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
select * from t2;
|
||||
drop table t3;
|
||||
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
|
||||
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
|
||||
execute stmt1;
|
||||
select * from t3;
|
||||
deallocate prepare stmt1;
|
||||
|
@ -1529,7 +1534,9 @@ INSERT INTO t1 VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,0,680
|
|||
INSERT INTO t1 VALUES ('ATF','French Southern territories','Antarctica','Antarctica',7780.00,0,0,NULL,0.00,NULL,'Terres australes françaises','Nonmetropolitan Territory of France','Jacques Chirac',NULL,'TF');
|
||||
INSERT INTO t1 VALUES ('UMI','United States Minor Outlying Islands','Oceania','Micronesia/Caribbean',16.00,0,0,NULL,0.00,NULL,'United States Minor Outlying Islands','Dependent Territory of the US','George W. Bush',NULL,'UM');
|
||||
/*!40000 ALTER TABLE t1 ENABLE KEYS */;
|
||||
SELECT DISTINCT Continent AS c FROM t1 WHERE Code <> SOME ( SELECT Code FROM t1 WHERE Continent = c AND Population < 200);
|
||||
SELECT DISTINCT Continent AS c FROM t1 outr WHERE
|
||||
Code <> SOME ( SELECT Code FROM t1 WHERE Continent = outr.Continent AND
|
||||
Population < 200);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
|
@ -2448,12 +2455,16 @@ DROP TABLE t1, t2;
|
|||
CREATE TABLE t1 (i INT);
|
||||
|
||||
(SELECT i FROM t1) UNION (SELECT i FROM t1);
|
||||
#TODO:not supported
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT sql_no_cache * FROM t1 WHERE NOT EXISTS
|
||||
(
|
||||
(SELECT i FROM t1) UNION
|
||||
(SELECT i FROM t1)
|
||||
);
|
||||
|
||||
#TODO:not supported
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT * FROM t1
|
||||
WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
|
||||
|
||||
|
@ -2461,7 +2472,9 @@ WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
|
|||
--error 1064
|
||||
explain select ((select t11.i from t1 t11) union (select t12.i from t1 t12))
|
||||
from t1;
|
||||
#supported
|
||||
|
||||
#TODO:not supported
|
||||
--error ER_PARSE_ERROR
|
||||
explain select * from t1 where not exists
|
||||
((select t11.i from t1 t11) union (select t12.i from t1 t12));
|
||||
|
||||
|
@ -3044,6 +3057,86 @@ SELECT LEFT(t1.a1,1) FROM t1,t3 WHERE t1.b1=t3.a3;
|
|||
SELECT a2 FROM t2 WHERE t2.a2 IN (SELECT t1.a1 FROM t1,t3 WHERE t1.b1=t3.a3);
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
#
|
||||
# Bug #30788: Inconsistent retrieval of char/varchar
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a CHAR(1), b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('a', 'aa');
|
||||
INSERT INTO t1 VALUES ('a', 'aaa');
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
CREATE INDEX I1 ON t1 (a);
|
||||
CREATE INDEX I2 ON t1 (b);
|
||||
EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
|
||||
CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10));
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
CREATE INDEX I1 ON t2 (a);
|
||||
CREATE INDEX I2 ON t2 (b);
|
||||
EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
||||
SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
||||
EXPLAIN
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #32400: Complex SELECT query returns correct result only on some
|
||||
# occasions
|
||||
#
|
||||
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (1,2), (2,3), (2,4);
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
EXPLAIN
|
||||
SELECT a AS out_a, MIN(b) FROM t1
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
|
||||
GROUP BY a;
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
SELECT a AS out_a, MIN(b) FROM t1
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
|
||||
GROUP BY a;
|
||||
|
||||
EXPLAIN
|
||||
SELECT a AS out_a, MIN(b) FROM t1 t1_outer
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
|
||||
GROUP BY a;
|
||||
|
||||
SELECT a AS out_a, MIN(b) FROM t1 t1_outer
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
|
||||
GROUP BY a;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #32036: EXISTS within a WHERE clause with a UNION crashes MySQL 5.122
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
|
||||
EXPLAIN EXTENDED
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
|
||||
|
||||
|
||||
#TODO:not supported
|
||||
--error ER_PARSE_ERROR
|
||||
EXPLAIN EXTENDED
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION
|
||||
(SELECT 1 FROM t2 WHERE t1.a = t2.a));
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
|
|
|
@ -7,3 +7,99 @@
|
|||
--error 1064
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
purge master logs before adddate(current_timestamp(), interval -4 day);
|
||||
|
||||
#
|
||||
# Bug31048: Many nested subqueries may cause server crash.
|
||||
#
|
||||
create table t1(a int,b int,key(a),key(b));
|
||||
insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5),
|
||||
(6,7),(7,4),(5,3);
|
||||
# test for the stack overflow bug
|
||||
select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
--replace_regex /overrun.*$/overrun detected/
|
||||
--error 1436
|
||||
select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
# test for the memory consumption & subquery slowness bug
|
||||
explain select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
--replace_regex /overrun.*$/overrun detected/
|
||||
--error 1436
|
||||
explain select sum(a),a from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
|
||||
select sum(a) from t1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1
|
||||
)group by b limit 1)group by b limit 1)group by b limit 1)
|
||||
group by a;
|
||||
drop table t1;
|
||||
|
||||
|
||||
|
|
|
@ -318,6 +318,21 @@ INSERT INTO t2 VALUES (3, 2, 'two'), (2, 3, 'three'), (2, 0, 'zero'),
|
|||
SELECT COUNT(DISTINCT b,c) FROM t2 GROUP BY a;
|
||||
DROP TABLE t2;
|
||||
|
||||
#
|
||||
# BUG#32556 assert in "using index for group-by" : is_last_prefix <= 0,
|
||||
# file .\opt_range.cc
|
||||
|
||||
CREATE TABLE t1(a BIT(13), KEY(a));
|
||||
--disable_warnings
|
||||
INSERT INTO t1(a) VALUES
|
||||
(65535),(65525),(65535),(65535),(65535),(65535),(65535),(65535),(65535),(65535);
|
||||
--enable_warnings
|
||||
|
||||
EXPLAIN SELECT 1 FROM t1 GROUP BY a;
|
||||
SELECT 1 FROM t1 GROUP BY a;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -436,4 +436,15 @@ set @@sql_mode='TRADITIONAL';
|
|||
create table t1 (a text default '');
|
||||
set @@sql_mode='';
|
||||
|
||||
#
|
||||
# Bug #32282: TEXT silently truncates when value is exactly 65536 bytes
|
||||
#
|
||||
|
||||
CREATE TABLE t (c TEXT CHARSET ASCII);
|
||||
INSERT INTO t (c) VALUES (REPEAT('1',65537));
|
||||
INSERT INTO t (c) VALUES (REPEAT('2',65536));
|
||||
INSERT INTO t (c) VALUES (REPEAT('3',65535));
|
||||
SELECT LENGTH(c), CHAR_LENGTH(c) FROM t;
|
||||
DROP TABLE t;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -193,6 +193,26 @@ INSERT INTO t1 VALUES ('0000-00-00');
|
|||
SET SQL_MODE=DEFAULT;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #31928: Search fails on '1000-00-00' date after sql_mode change
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a DATE);
|
||||
CREATE TABLE t2 (a DATE);
|
||||
CREATE INDEX i ON t1 (a);
|
||||
INSERT INTO t1 VALUES ('1000-00-00'),('1000-00-00');
|
||||
INSERT INTO t2 VALUES ('1000-00-00'),('1000-00-00');
|
||||
SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||
SELECT * FROM t2 WHERE a = '1000-00-00';
|
||||
SET SQL_MODE=TRADITIONAL;
|
||||
EXPLAIN SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||
SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||
SELECT * FROM t2 WHERE a = '1000-00-00';
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 VALUES ('1000-00-00');
|
||||
SET SQL_MODE=DEFAULT;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -351,6 +351,43 @@ insert into t1 values (), (), ();
|
|||
select sum(a) from t1 group by convert(a, datetime);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #32694: NOT NULL table field in a subquery produces invalid results
|
||||
#
|
||||
create table t1 (id int(10) not null, cur_date datetime not null);
|
||||
create table t2 (id int(10) not null, cur_date date not null);
|
||||
insert into t1 (id, cur_date) values (1, '2007-04-25 18:30:22');
|
||||
insert into t2 (id, cur_date) values (1, '2007-04-25');
|
||||
|
||||
explain extended
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
|
||||
explain extended
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
|
||||
insert into t1 (id, cur_date) values (2, '2007-04-26 18:30:22');
|
||||
insert into t2 (id, cur_date) values (2, '2007-04-26');
|
||||
|
||||
explain extended
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
select * from t1
|
||||
where id in (select id from t1 as x1 where (t1.cur_date is null));
|
||||
|
||||
explain extended
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
select * from t2
|
||||
where id in (select id from t2 as x1 where (t2.cur_date is null));
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
#
|
||||
# Test of storing datetime into date fields
|
||||
|
|
|
@ -415,4 +415,25 @@ DROP PROCEDURE check_const_len_sp;
|
|||
DROP TRIGGER check_const_len_trigger;
|
||||
DROP TABLE const_len_bug;
|
||||
|
||||
|
||||
#
|
||||
# Bug #30355: Incorrect ordering of UDF results
|
||||
#
|
||||
|
||||
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
|
||||
eval CREATE FUNCTION sequence RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (4),(3),(2),(1);
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
|
||||
SELECT sequence() AS seq, a FROM t1 ORDER BY seq ASC;
|
||||
SELECT sequence() AS seq, a FROM t1 ORDER BY seq DESC;
|
||||
|
||||
SELECT * FROM t1 WHERE a = sequence();
|
||||
SELECT * FROM t2 WHERE a = sequence();
|
||||
|
||||
DROP FUNCTION sequence;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
|
|
@ -239,6 +239,12 @@ select @a:=f4, count(f4) from t1 group by 1 desc;
|
|||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#32482: Crash for a query with ORDER BY a user variable.
|
||||
#
|
||||
create table t1 (f1 int);
|
||||
insert into t1 values (2), (1);
|
||||
select @i := f1 as j from t1 order by 1;
|
||||
drop table t1;
|
||||
# Bug #32260: User variables in query cause server crash
|
||||
#
|
||||
create table t1(a int);
|
||||
|
|
|
@ -36,6 +36,9 @@ EXPLAIN SELECT * FROM t1 WHERE b = (SELECT max(2));
|
|||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
--disable_warnings
|
||||
drop procedure if exists proc_1;
|
||||
--enable_warnings
|
||||
#
|
||||
# Bug #20665: All commands supported in Stored Procedures should work in
|
||||
# Prepared Statements
|
||||
|
|
|
@ -86,6 +86,7 @@ static void default_reporter(enum loglevel level,
|
|||
fprintf(stderr, "%s", "Info: ");
|
||||
vfprintf(stderr, format, args);
|
||||
va_end(args);
|
||||
fputc('\n', stderr);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
|
@ -153,7 +154,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: Option '-O' requires an argument\n",
|
||||
"%s: Option '-O' requires an argument",
|
||||
my_progname);
|
||||
return EXIT_ARGUMENT_REQUIRED;
|
||||
}
|
||||
|
@ -171,7 +172,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: Option '--set-variable' requires an argument\n",
|
||||
"%s: Option '--set-variable' requires an argument",
|
||||
my_progname);
|
||||
return EXIT_ARGUMENT_REQUIRED;
|
||||
}
|
||||
|
@ -185,7 +186,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: Option '--set-variable' requires an argument\n",
|
||||
"%s: Option '--set-variable' requires an argument",
|
||||
my_progname);
|
||||
return EXIT_ARGUMENT_REQUIRED;
|
||||
}
|
||||
|
@ -247,7 +248,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: ambiguous option '--%s-%s' (--%s-%s)\n",
|
||||
"%s: ambiguous option '--%s-%s' (--%s-%s)",
|
||||
my_progname, special_opt_prefix[i],
|
||||
cur_arg, special_opt_prefix[i],
|
||||
prev_found);
|
||||
|
@ -298,7 +299,7 @@ int handle_options(int *argc, char ***argv,
|
|||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(option_is_loose ?
|
||||
WARNING_LEVEL : ERROR_LEVEL,
|
||||
"%s: unknown variable '%s'\n",
|
||||
"%s: unknown variable '%s'",
|
||||
my_progname, cur_arg);
|
||||
if (!option_is_loose)
|
||||
return EXIT_UNKNOWN_VARIABLE;
|
||||
|
@ -308,7 +309,7 @@ int handle_options(int *argc, char ***argv,
|
|||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(option_is_loose ?
|
||||
WARNING_LEVEL : ERROR_LEVEL,
|
||||
"%s: unknown option '--%s'\n",
|
||||
"%s: unknown option '--%s'",
|
||||
my_progname, cur_arg);
|
||||
if (!option_is_loose)
|
||||
return EXIT_UNKNOWN_OPTION;
|
||||
|
@ -326,7 +327,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: variable prefix '%s' is not unique\n",
|
||||
"%s: variable prefix '%s' is not unique",
|
||||
my_progname, opt_str);
|
||||
return EXIT_VAR_PREFIX_NOT_UNIQUE;
|
||||
}
|
||||
|
@ -334,7 +335,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: ambiguous option '--%s' (%s, %s)\n",
|
||||
"%s: ambiguous option '--%s' (%s, %s)",
|
||||
my_progname, opt_str, prev_found,
|
||||
optp->name);
|
||||
return EXIT_AMBIGUOUS_OPTION;
|
||||
|
@ -357,7 +358,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: option '%s' cannot take an argument\n",
|
||||
"%s: option '%s' cannot take an argument",
|
||||
my_progname, optp->name);
|
||||
return EXIT_NO_ARGUMENT_ALLOWED;
|
||||
}
|
||||
|
@ -370,7 +371,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: option '--%s' cannot take an argument\n",
|
||||
"%s: option '--%s' cannot take an argument",
|
||||
my_progname, optp->name);
|
||||
return EXIT_NO_ARGUMENT_ALLOWED;
|
||||
}
|
||||
|
@ -392,7 +393,7 @@ int handle_options(int *argc, char ***argv,
|
|||
{
|
||||
my_getopt_error_reporter(WARNING_LEVEL,
|
||||
"%s: ignoring option '--%s' due to \
|
||||
invalid value '%s'\n",
|
||||
invalid value '%s'",
|
||||
my_progname, optp->name, optend);
|
||||
continue;
|
||||
}
|
||||
|
@ -423,7 +424,7 @@ invalid value '%s'\n",
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: option '--%s' requires an argument\n",
|
||||
"%s: option '--%s' requires an argument",
|
||||
my_progname, optp->name);
|
||||
return EXIT_ARGUMENT_REQUIRED;
|
||||
}
|
||||
|
@ -483,7 +484,7 @@ invalid value '%s'\n",
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: option '-%c' requires an argument\n",
|
||||
"%s: option '-%c' requires an argument",
|
||||
my_progname, optp->id);
|
||||
return EXIT_ARGUMENT_REQUIRED;
|
||||
}
|
||||
|
@ -496,7 +497,7 @@ invalid value '%s'\n",
|
|||
set_maximum_value)))
|
||||
{
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: Error while setting value '%s' to '%s'\n",
|
||||
"%s: Error while setting value '%s' to '%s'",
|
||||
my_progname, argument, optp->name);
|
||||
return error;
|
||||
}
|
||||
|
@ -508,7 +509,7 @@ invalid value '%s'\n",
|
|||
{
|
||||
if (my_getopt_print_errors)
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: unknown option '-%c'\n",
|
||||
"%s: unknown option '-%c'",
|
||||
my_progname, *optend);
|
||||
return EXIT_UNKNOWN_OPTION;
|
||||
}
|
||||
|
@ -519,7 +520,7 @@ invalid value '%s'\n",
|
|||
if ((error= setval(optp, value, argument, set_maximum_value)))
|
||||
{
|
||||
my_getopt_error_reporter(ERROR_LEVEL,
|
||||
"%s: Error while setting value '%s' to '%s'\n",
|
||||
"%s: Error while setting value '%s' to '%s'",
|
||||
my_progname, argument, optp->name);
|
||||
return error;
|
||||
}
|
||||
|
@ -608,13 +609,17 @@ static int setval(const struct my_option *opts, uchar* *value, char *argument,
|
|||
*((my_bool*) result_pos)= (my_bool) atoi(argument) != 0;
|
||||
break;
|
||||
case GET_INT:
|
||||
case GET_UINT: /* fall through */
|
||||
*((int*) result_pos)= (int) getopt_ll(argument, opts, &err);
|
||||
break;
|
||||
case GET_UINT:
|
||||
*((uint*) result_pos)= (uint) getopt_ull(argument, opts, &err);
|
||||
break;
|
||||
case GET_LONG:
|
||||
case GET_ULONG: /* fall through */
|
||||
*((long*) result_pos)= (long) getopt_ll(argument, opts, &err);
|
||||
break;
|
||||
case GET_ULONG:
|
||||
*((long*) result_pos)= (long) getopt_ull(argument, opts, &err);
|
||||
break;
|
||||
case GET_LL:
|
||||
*((longlong*) result_pos)= getopt_ll(argument, opts, &err);
|
||||
break;
|
||||
|
@ -778,23 +783,70 @@ static longlong eval_num_suffix(char *argument, int *error, char *option_name)
|
|||
|
||||
static longlong getopt_ll(char *arg, const struct my_option *optp, int *err)
|
||||
{
|
||||
longlong num;
|
||||
longlong num=eval_num_suffix(arg, err, (char*) optp->name);
|
||||
return getopt_ll_limit_value(num, optp, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
function: getopt_ll_limit_value
|
||||
|
||||
Applies min/max/block_size to a numeric value of an option.
|
||||
Returns "fixed" value.
|
||||
*/
|
||||
|
||||
longlong getopt_ll_limit_value(longlong num, const struct my_option *optp,
|
||||
bool *fix)
|
||||
{
|
||||
longlong old= num;
|
||||
bool adjusted= FALSE;
|
||||
char buf1[255], buf2[255];
|
||||
ulonglong block_size= (optp->block_size ? (ulonglong) optp->block_size : 1L);
|
||||
|
||||
num= eval_num_suffix(arg, err, (char*) optp->name);
|
||||
if (num > 0 && (ulonglong) num > (ulonglong) optp->max_value &&
|
||||
|
||||
if (num > 0 && ((ulonglong) num > (ulonglong) optp->max_value) &&
|
||||
optp->max_value) /* if max value is not set -> no upper limit */
|
||||
{
|
||||
char buf[22];
|
||||
my_getopt_error_reporter(WARNING_LEVEL,
|
||||
"Truncated incorrect %s value: '%s'",
|
||||
optp->name, llstr(num, buf));
|
||||
|
||||
num= (ulonglong) optp->max_value;
|
||||
adjusted= TRUE;
|
||||
}
|
||||
|
||||
switch ((optp->var_type & GET_TYPE_MASK)) {
|
||||
case GET_INT:
|
||||
if (num > (longlong) INT_MAX)
|
||||
{
|
||||
num= ((longlong) INT_MAX);
|
||||
adjusted= TRUE;
|
||||
}
|
||||
break;
|
||||
case GET_LONG:
|
||||
#if SIZEOF_LONG < SIZEOF_LONG_LONG
|
||||
if (num > (longlong) LONG_MAX)
|
||||
{
|
||||
num= ((longlong) LONG_MAX);
|
||||
adjusted= TRUE;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
DBUG_ASSERT((optp->var_type & GET_TYPE_MASK) == GET_LL);
|
||||
break;
|
||||
}
|
||||
|
||||
num= ((num - optp->sub_size) / block_size);
|
||||
num= (longlong) (num * block_size);
|
||||
return max(num, optp->min_value);
|
||||
|
||||
if (num < optp->min_value)
|
||||
{
|
||||
num= optp->min_value;
|
||||
adjusted= TRUE;
|
||||
}
|
||||
|
||||
if (fix)
|
||||
*fix= adjusted;
|
||||
else if (adjusted)
|
||||
my_getopt_error_reporter(WARNING_LEVEL,
|
||||
"option '%s': signed value %s adjusted to %s",
|
||||
optp->name, llstr(old, buf1), llstr(num, buf2));
|
||||
return num;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -806,25 +858,66 @@ static longlong getopt_ll(char *arg, const struct my_option *optp, int *err)
|
|||
|
||||
static ulonglong getopt_ull(char *arg, const struct my_option *optp, int *err)
|
||||
{
|
||||
ulonglong num;
|
||||
|
||||
num= eval_num_suffix(arg, err, (char*) optp->name);
|
||||
return getopt_ull_limit_value(num, optp);
|
||||
ulonglong num= eval_num_suffix(arg, err, (char*) optp->name);
|
||||
return getopt_ull_limit_value(num, optp, NULL);
|
||||
}
|
||||
|
||||
|
||||
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp)
|
||||
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
|
||||
bool *fix)
|
||||
{
|
||||
bool adjusted= FALSE;
|
||||
ulonglong old= num;
|
||||
char buf1[255], buf2[255];
|
||||
|
||||
if ((ulonglong) num > (ulonglong) optp->max_value &&
|
||||
optp->max_value) /* if max value is not set -> no upper limit */
|
||||
{
|
||||
num= (ulonglong) optp->max_value;
|
||||
adjusted= TRUE;
|
||||
}
|
||||
|
||||
switch ((optp->var_type & GET_TYPE_MASK)) {
|
||||
case GET_UINT:
|
||||
if (num > (ulonglong) UINT_MAX)
|
||||
{
|
||||
num= ((ulonglong) UINT_MAX);
|
||||
adjusted= TRUE;
|
||||
}
|
||||
break;
|
||||
case GET_ULONG:
|
||||
#if SIZEOF_LONG < SIZEOF_LONG_LONG
|
||||
if (num > (ulonglong) ULONG_MAX)
|
||||
{
|
||||
num= ((ulonglong) ULONG_MAX);
|
||||
adjusted= TRUE;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
DBUG_ASSERT((optp->var_type & GET_TYPE_MASK) == GET_ULL);
|
||||
break;
|
||||
}
|
||||
|
||||
if (optp->block_size > 1)
|
||||
{
|
||||
num/= (ulonglong) optp->block_size;
|
||||
num*= (ulonglong) optp->block_size;
|
||||
}
|
||||
|
||||
if (num < (ulonglong) optp->min_value)
|
||||
{
|
||||
num= (ulonglong) optp->min_value;
|
||||
adjusted= TRUE;
|
||||
}
|
||||
|
||||
if (fix)
|
||||
*fix= adjusted;
|
||||
else if (adjusted)
|
||||
my_getopt_error_reporter(WARNING_LEVEL,
|
||||
"option '%s': unsigned value %s adjusted to %s",
|
||||
optp->name, ullstr(old, buf1), ullstr(num, buf2));
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ int init_queue(QUEUE *queue, uint max_elements, uint offset_to_key,
|
|||
queue->first_cmp_arg=first_cmp_arg;
|
||||
queue->max_elements=max_elements;
|
||||
queue->offset_to_key=offset_to_key;
|
||||
queue->max_at_top= max_at_top ? (-1 ^ 1) : 0;
|
||||
queue_set_max_at_top(queue, max_at_top);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -137,7 +137,7 @@ int reinit_queue(QUEUE *queue, uint max_elements, uint offset_to_key,
|
|||
queue->compare=compare;
|
||||
queue->first_cmp_arg=first_cmp_arg;
|
||||
queue->offset_to_key=offset_to_key;
|
||||
queue->max_at_top= max_at_top ? (-1 ^ 1) : 0;
|
||||
queue_set_max_at_top(queue, max_at_top);
|
||||
resize_queue(queue, max_elements);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
@ -208,16 +208,14 @@ void delete_queue(QUEUE *queue)
|
|||
void queue_insert(register QUEUE *queue, uchar *element)
|
||||
{
|
||||
reg2 uint idx, next;
|
||||
int cmp;
|
||||
DBUG_ASSERT(queue->elements < queue->max_elements);
|
||||
queue->root[0]= element;
|
||||
idx= ++queue->elements;
|
||||
/* max_at_top swaps the comparison if we want to order by desc */
|
||||
while ((cmp= queue->compare(queue->first_cmp_arg,
|
||||
element + queue->offset_to_key,
|
||||
queue->root[(next= idx >> 1)] +
|
||||
queue->offset_to_key)) &&
|
||||
(cmp ^ queue->max_at_top) < 0)
|
||||
while ((queue->compare(queue->first_cmp_arg,
|
||||
element + queue->offset_to_key,
|
||||
queue->root[(next= idx >> 1)] +
|
||||
queue->offset_to_key) * queue->max_at_top) < 0)
|
||||
{
|
||||
queue->root[idx]= queue->root[next];
|
||||
idx= next;
|
||||
|
@ -287,19 +285,17 @@ void _downheap(register QUEUE *queue, uint idx)
|
|||
|
||||
while (idx <= half_queue)
|
||||
{
|
||||
int cmp;
|
||||
next_index=idx+idx;
|
||||
if (next_index < elements &&
|
||||
(queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
queue->root[next_index+1]+offset_to_key) ^
|
||||
queue->root[next_index+1]+offset_to_key) *
|
||||
queue->max_at_top) > 0)
|
||||
next_index++;
|
||||
if (first &&
|
||||
(((cmp=queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
element+offset_to_key)) == 0) ||
|
||||
((cmp ^ queue->max_at_top) > 0)))
|
||||
(((queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
element+offset_to_key) * queue->max_at_top) >= 0)))
|
||||
{
|
||||
queue->root[idx]= element;
|
||||
return;
|
||||
|
@ -314,7 +310,7 @@ void _downheap(register QUEUE *queue, uint idx)
|
|||
{
|
||||
if ((queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
element+offset_to_key) ^
|
||||
element+offset_to_key) *
|
||||
queue->max_at_top) < 0)
|
||||
break;
|
||||
queue->root[idx]=queue->root[next_index];
|
||||
|
@ -334,7 +330,6 @@ void _downheap(register QUEUE *queue, uint idx)
|
|||
{
|
||||
uchar *element;
|
||||
uint elements,half_queue,next_index,offset_to_key;
|
||||
int cmp;
|
||||
|
||||
offset_to_key=queue->offset_to_key;
|
||||
element=queue->root[idx];
|
||||
|
@ -346,13 +341,12 @@ void _downheap(register QUEUE *queue, uint idx)
|
|||
if (next_index < elements &&
|
||||
(queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
queue->root[next_index+1]+offset_to_key) ^
|
||||
queue->root[next_index+1]+offset_to_key) *
|
||||
queue->max_at_top) > 0)
|
||||
next_index++;
|
||||
if ((cmp=queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
element+offset_to_key)) == 0 ||
|
||||
(cmp ^ queue->max_at_top) > 0)
|
||||
if ((queue->compare(queue->first_cmp_arg,
|
||||
queue->root[next_index]+offset_to_key,
|
||||
element+offset_to_key) * queue->max_at_top) >= 0)
|
||||
break;
|
||||
queue->root[idx]=queue->root[next_index];
|
||||
idx=next_index;
|
||||
|
|
|
@ -152,7 +152,6 @@ if [ x"$TARGET" != x"release" ] ; then
|
|||
cp server-tools/instance-manager/$TARGET/*.pdb $DESTDIR/bin/
|
||||
fi
|
||||
cp tests/$TARGET/*.exe $DESTDIR/bin/
|
||||
cp libmysql/$TARGET/*.exe $DESTDIR/bin/
|
||||
cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/
|
||||
|
||||
# FIXME really needed?!
|
||||
|
|
|
@ -1105,9 +1105,14 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
|
|||
long part1,part2;
|
||||
|
||||
*was_cut= 0;
|
||||
bzero((char*) time_res, sizeof(*time_res));
|
||||
time_res->time_type=MYSQL_TIMESTAMP_DATE;
|
||||
|
||||
if (nr == LL(0) || nr >= LL(10000101000000))
|
||||
{
|
||||
time_res->time_type=MYSQL_TIMESTAMP_DATETIME;
|
||||
goto ok;
|
||||
}
|
||||
if (nr < 101)
|
||||
goto err;
|
||||
if (nr <= (YY_PART_YEAR-1)*10000L+1231L)
|
||||
|
@ -1131,6 +1136,9 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
|
|||
}
|
||||
if (nr < 101000000L)
|
||||
goto err;
|
||||
|
||||
time_res->time_type=MYSQL_TIMESTAMP_DATETIME;
|
||||
|
||||
if (nr <= (YY_PART_YEAR-1)*LL(10000000000)+LL(1231235959))
|
||||
{
|
||||
nr= nr+LL(20000000000000); /* YYMMDDHHMMSS, 2000-2069 */
|
||||
|
@ -1144,7 +1152,6 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
|
|||
ok:
|
||||
part1=(long) (nr/LL(1000000));
|
||||
part2=(long) (nr - (longlong) part1*LL(1000000));
|
||||
bzero((char*) time_res, sizeof(*time_res));
|
||||
time_res->year= (int) (part1/10000L); part1%=10000L;
|
||||
time_res->month= (int) part1 / 100;
|
||||
time_res->day= (int) part1 % 100;
|
||||
|
|
|
@ -825,8 +825,8 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */)
|
|||
if (thd->lex->sql_command == SQLCOM_SHOW_EVENTS)
|
||||
{
|
||||
DBUG_ASSERT(thd->lex->select_lex.db);
|
||||
if (check_access(thd, EVENT_ACL, thd->lex->select_lex.db, 0, 0, 0,
|
||||
is_schema_db(thd->lex->select_lex.db)))
|
||||
if (!is_schema_db(thd->lex->select_lex.db) && // There is no events in I_S
|
||||
check_access(thd, EVENT_ACL, thd->lex->select_lex.db, 0, 0, 0, 0))
|
||||
DBUG_RETURN(1);
|
||||
db= thd->lex->select_lex.db;
|
||||
}
|
||||
|
|
|
@ -5701,6 +5701,9 @@ void Field_date::sql_type(String &res) const
|
|||
1 Value was cut during conversion
|
||||
2 Wrong date string
|
||||
3 Datetime value that was cut (warning level NOTE)
|
||||
This is used by opt_range.cc:get_mm_leaf(). Note that there is a
|
||||
nearly-identical class Field_date doesn't ever return 3 from its
|
||||
store function.
|
||||
*/
|
||||
|
||||
int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs)
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#define NOT_FIXED_DEC 31
|
||||
#define DATETIME_DEC 6
|
||||
const uint32 max_field_size= (uint32) 4294967295U;
|
||||
|
||||
class Send_field;
|
||||
class Protocol;
|
||||
|
|
|
@ -1606,7 +1606,11 @@ error:
|
|||
|
||||
void ha_partition::update_create_info(HA_CREATE_INFO *create_info)
|
||||
{
|
||||
m_file[0]->update_create_info(create_info);
|
||||
info(HA_STATUS_AUTO);
|
||||
|
||||
if (!(create_info->used_fields & HA_CREATE_USED_AUTO))
|
||||
create_info->auto_increment_value= stats.auto_increment_value;
|
||||
|
||||
create_info->data_file_name= create_info->index_file_name = NULL;
|
||||
return;
|
||||
}
|
||||
|
@ -3422,14 +3426,17 @@ int ha_partition::index_init(uint inx, bool sorted)
|
|||
*/
|
||||
if (m_lock_type == F_WRLCK)
|
||||
bitmap_union(table->read_set, &m_part_info->full_part_field_set);
|
||||
else if (sorted && m_table_flags & HA_PARTIAL_COLUMN_READ)
|
||||
else if (sorted)
|
||||
{
|
||||
/*
|
||||
An ordered scan is requested and necessary fields aren't in read_set.
|
||||
This may happen e.g. with SELECT COUNT(*) FROM t1. We must ensure
|
||||
that all fields of current key are included into read_set, as
|
||||
partitioning requires them for sorting
|
||||
(see ha_partition::handle_ordered_index_scan).
|
||||
An ordered scan is requested. We must make sure all fields of the
|
||||
used index are in the read set, as partitioning requires them for
|
||||
sorting (see ha_partition::handle_ordered_index_scan).
|
||||
|
||||
The SQL layer may request an ordered index scan without having index
|
||||
fields in the read set when
|
||||
- it needs to do an ordered scan over an index prefix.
|
||||
- it evaluates ORDER BY with SELECT COUNT(*) FROM t1.
|
||||
|
||||
TODO: handle COUNT(*) queries via unordered scan.
|
||||
*/
|
||||
|
|
16
sql/item.cc
16
sql/item.cc
|
@ -1262,14 +1262,14 @@ bool Item_name_const::fix_fields(THD *thd, Item **ref)
|
|||
s.length(0);
|
||||
|
||||
if (value_item->fix_fields(thd, &value_item) ||
|
||||
name_item->fix_fields(thd, &name_item))
|
||||
name_item->fix_fields(thd, &name_item) ||
|
||||
!value_item->const_item() ||
|
||||
!name_item->const_item() ||
|
||||
!(item_name= name_item->val_str(&s))) // Can't have a NULL name
|
||||
{
|
||||
my_error(ER_RESERVED_SYNTAX, MYF(0), "NAME_CONST");
|
||||
return TRUE;
|
||||
if (!(value_item->const_item() && name_item->const_item()))
|
||||
return TRUE;
|
||||
|
||||
if (!(item_name= name_item->val_str(&s)))
|
||||
return TRUE; /* Can't have a NULL name */
|
||||
|
||||
}
|
||||
set_name(item_name->ptr(), (uint) item_name->length(), system_charset_info);
|
||||
max_length= value_item->max_length;
|
||||
decimals= value_item->decimals;
|
||||
|
@ -3693,7 +3693,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
|
|||
}
|
||||
|
||||
/* Search in SELECT and GROUP lists of the outer select. */
|
||||
if (outer_context->resolve_in_select_list)
|
||||
if (place != IN_WHERE && place != IN_ON)
|
||||
{
|
||||
if (!(ref= resolve_ref_in_select_and_group(thd, this, select)))
|
||||
return -1; /* Some error occurred (e.g. ambiguous names). */
|
||||
|
|
21
sql/item.h
21
sql/item.h
|
@ -2622,16 +2622,23 @@ class Item_cache: public Item
|
|||
protected:
|
||||
Item *example;
|
||||
table_map used_table_map;
|
||||
/*
|
||||
Field that this object will get value from. This is set/used by
|
||||
index-based subquery engines to detect and remove the equality injected
|
||||
by IN->EXISTS transformation.
|
||||
For all other uses of Item_cache, cached_field doesn't matter.
|
||||
*/
|
||||
Field *cached_field;
|
||||
enum enum_field_types cached_field_type;
|
||||
public:
|
||||
Item_cache():
|
||||
example(0), used_table_map(0), cached_field_type(MYSQL_TYPE_STRING)
|
||||
example(0), used_table_map(0), cached_field(0), cached_field_type(MYSQL_TYPE_STRING)
|
||||
{
|
||||
fixed= 1;
|
||||
null_value= 1;
|
||||
}
|
||||
Item_cache(enum_field_types field_type_arg):
|
||||
example(0), used_table_map(0), cached_field_type(field_type_arg)
|
||||
example(0), used_table_map(0), cached_field(0), cached_field_type(field_type_arg)
|
||||
{
|
||||
fixed= 1;
|
||||
null_value= 1;
|
||||
|
@ -2647,6 +2654,8 @@ public:
|
|||
decimals= item->decimals;
|
||||
collation.set(item->collation);
|
||||
unsigned_flag= item->unsigned_flag;
|
||||
if (item->type() == FIELD_ITEM)
|
||||
cached_field= ((Item_field *)item)->field;
|
||||
return 0;
|
||||
};
|
||||
virtual void store(Item *)= 0;
|
||||
|
@ -2658,6 +2667,14 @@ public:
|
|||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
void print(String *str);
|
||||
bool eq_def(Field *field)
|
||||
{
|
||||
return cached_field ? cached_field->eq_def (field) : FALSE;
|
||||
}
|
||||
bool eq(const Item *item, bool binary_cmp) const
|
||||
{
|
||||
return this == item;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@
|
|||
#include <m_ctype.h>
|
||||
#include "sql_select.h"
|
||||
|
||||
static bool convert_constant_item(THD *thd, Field *field, Item **item);
|
||||
static bool convert_constant_item(THD *thd, Item_field *field_item,
|
||||
Item **item);
|
||||
|
||||
static Item_result item_store_type(Item_result a, Item *item,
|
||||
my_bool unsigned_flag)
|
||||
|
@ -351,7 +352,7 @@ longlong Item_func_nop_all::val_int()
|
|||
SYNOPSIS
|
||||
convert_constant_item()
|
||||
thd thread handle
|
||||
field item will be converted using the type of this field
|
||||
field_item item will be converted using the type of this field
|
||||
item [in/out] reference to the item to convert
|
||||
|
||||
DESCRIPTION
|
||||
|
@ -374,8 +375,10 @@ longlong Item_func_nop_all::val_int()
|
|||
1 Item was replaced with an integer version of the item
|
||||
*/
|
||||
|
||||
static bool convert_constant_item(THD *thd, Field *field, Item **item)
|
||||
static bool convert_constant_item(THD *thd, Item_field *field_item,
|
||||
Item **item)
|
||||
{
|
||||
Field *field= field_item->field;
|
||||
int result= 0;
|
||||
|
||||
if (!(*item)->with_subselect && (*item)->const_item())
|
||||
|
@ -385,9 +388,11 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
|
|||
enum_check_fields orig_count_cuted_fields= thd->count_cuted_fields;
|
||||
my_bitmap_map *old_write_map;
|
||||
my_bitmap_map *old_read_map;
|
||||
ulonglong orig_field_val; /* original field value if valid */
|
||||
|
||||
LINT_INIT(old_write_map);
|
||||
LINT_INIT(old_read_map);
|
||||
LINT_INIT(orig_field_val);
|
||||
|
||||
if (table)
|
||||
{
|
||||
|
@ -398,7 +403,14 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
|
|||
thd->variables.sql_mode= (orig_sql_mode & ~MODE_NO_ZERO_DATE) |
|
||||
MODE_INVALID_DATES;
|
||||
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
|
||||
if (!(*item)->save_in_field(field, 1) && !((*item)->null_value))
|
||||
|
||||
/*
|
||||
Store the value of the field if it references an outer field because
|
||||
the call to save_in_field below overrides that value.
|
||||
*/
|
||||
if (field_item->depended_from)
|
||||
orig_field_val= field->val_int();
|
||||
if (!(*item)->is_null() && !(*item)->save_in_field(field, 1))
|
||||
{
|
||||
Item *tmp= new Item_int_with_ref(field->val_int(), *item,
|
||||
test(field->flags & UNSIGNED_FLAG));
|
||||
|
@ -406,6 +418,13 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
|
|||
thd->change_item_tree(item, tmp);
|
||||
result= 1; // Item was replaced
|
||||
}
|
||||
/* Restore the original field value. */
|
||||
if (field_item->depended_from)
|
||||
{
|
||||
result= field->store(orig_field_val, TRUE);
|
||||
/* orig_field_val must be a valid value that can be restored back. */
|
||||
DBUG_ASSERT(!result);
|
||||
}
|
||||
thd->variables.sql_mode= orig_sql_mode;
|
||||
thd->count_cuted_fields= orig_count_cuted_fields;
|
||||
if (table)
|
||||
|
@ -462,15 +481,14 @@ void Item_bool_func2::fix_length_and_dec()
|
|||
thd= current_thd;
|
||||
if (!thd->is_context_analysis_only())
|
||||
{
|
||||
Item *arg_real_item= args[0]->real_item();
|
||||
if (arg_real_item->type() == FIELD_ITEM)
|
||||
if (args[0]->real_item()->type() == FIELD_ITEM)
|
||||
{
|
||||
Field *field=((Item_field*) arg_real_item)->field;
|
||||
if (field->can_be_compared_as_longlong() &&
|
||||
!(arg_real_item->is_datetime() &&
|
||||
Item_field *field_item= (Item_field*) (args[0]->real_item());
|
||||
if (field_item->field->can_be_compared_as_longlong() &&
|
||||
!(field_item->is_datetime() &&
|
||||
args[1]->result_type() == STRING_RESULT))
|
||||
{
|
||||
if (convert_constant_item(thd, field,&args[1]))
|
||||
if (convert_constant_item(thd, field_item, &args[1]))
|
||||
{
|
||||
cmp.set_cmp_func(this, tmp_arg, tmp_arg+1,
|
||||
INT_RESULT); // Works for all types.
|
||||
|
@ -479,15 +497,14 @@ void Item_bool_func2::fix_length_and_dec()
|
|||
}
|
||||
}
|
||||
}
|
||||
arg_real_item= args[1]->real_item();
|
||||
if (arg_real_item->type() == FIELD_ITEM)
|
||||
if (args[1]->real_item()->type() == FIELD_ITEM)
|
||||
{
|
||||
Field *field=((Item_field*) arg_real_item)->field;
|
||||
if (field->can_be_compared_as_longlong() &&
|
||||
!(arg_real_item->is_datetime() &&
|
||||
Item_field *field_item= (Item_field*) (args[1]->real_item());
|
||||
if (field_item->field->can_be_compared_as_longlong() &&
|
||||
!(field_item->is_datetime() &&
|
||||
args[0]->result_type() == STRING_RESULT))
|
||||
{
|
||||
if (convert_constant_item(thd, field,&args[0]))
|
||||
if (convert_constant_item(thd, field_item, &args[0]))
|
||||
{
|
||||
cmp.set_cmp_func(this, tmp_arg, tmp_arg+1,
|
||||
INT_RESULT); // Works for all types.
|
||||
|
@ -1959,16 +1976,16 @@ void Item_func_between::fix_length_and_dec()
|
|||
thd->lex->sql_command != SQLCOM_CREATE_VIEW &&
|
||||
thd->lex->sql_command != SQLCOM_SHOW_CREATE)
|
||||
{
|
||||
Field *field=((Item_field*) (args[0]->real_item()))->field;
|
||||
if (field->can_be_compared_as_longlong())
|
||||
Item_field *field_item= (Item_field*) (args[0]->real_item());
|
||||
if (field_item->field->can_be_compared_as_longlong())
|
||||
{
|
||||
/*
|
||||
The following can't be recoded with || as convert_constant_item
|
||||
changes the argument
|
||||
*/
|
||||
if (convert_constant_item(thd, field,&args[1]))
|
||||
if (convert_constant_item(thd, field_item, &args[1]))
|
||||
cmp_type=INT_RESULT; // Works for all types.
|
||||
if (convert_constant_item(thd, field,&args[2]))
|
||||
if (convert_constant_item(thd, field_item, &args[2]))
|
||||
cmp_type=INT_RESULT; // Works for all types.
|
||||
}
|
||||
}
|
||||
|
@ -3603,13 +3620,13 @@ void Item_func_in::fix_length_and_dec()
|
|||
thd->lex->sql_command != SQLCOM_SHOW_CREATE &&
|
||||
cmp_type != INT_RESULT)
|
||||
{
|
||||
Field *field= ((Item_field*) (args[0]->real_item()))->field;
|
||||
if (field->can_be_compared_as_longlong())
|
||||
Item_field *field_item= (Item_field*) (args[0]->real_item());
|
||||
if (field_item->field->can_be_compared_as_longlong())
|
||||
{
|
||||
bool all_converted= TRUE;
|
||||
for (arg=args+1, arg_end=args+arg_count; arg != arg_end ; arg++)
|
||||
{
|
||||
if (!convert_constant_item (thd, field, &arg[0]))
|
||||
if (!convert_constant_item (thd, field_item, &arg[0]))
|
||||
all_converted= FALSE;
|
||||
}
|
||||
if (all_converted)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue