auto-merge
This commit is contained in:
commit
e82390130e
@ -114,7 +114,13 @@ IF(MSVC)
|
||||
STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_INIT ${CMAKE_CXX_FLAGS_INIT})
|
||||
STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_DEBUG_INIT ${CMAKE_CXX_FLAGS_DEBUG_INIT})
|
||||
|
||||
|
||||
# Mark 32 bit executables large address aware so they can
|
||||
# use > 2GB address space
|
||||
IF(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
|
||||
ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
|
||||
# Disable automatic manifest generation.
|
||||
STRING(REPLACE "/MANIFEST" "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
|
||||
${CMAKE_EXE_LINKER_FLAGS})
|
||||
|
@ -243,7 +243,7 @@ static COMMANDS commands[] = {
|
||||
{ "connect",'r', com_connect,1,
|
||||
"Reconnect to the server. Optional arguments are db and host." },
|
||||
{ "delimiter", 'd', com_delimiter, 1,
|
||||
"Set statement delimiter. NOTE: Takes the rest of the line as new delimiter." },
|
||||
"Set statement delimiter." },
|
||||
#ifdef USE_POPEN
|
||||
{ "edit", 'e', com_edit, 0, "Edit command with $EDITOR."},
|
||||
#endif
|
||||
@ -2222,8 +2222,22 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
}
|
||||
if (out != line || !buffer.is_empty())
|
||||
{
|
||||
*out++='\n';
|
||||
uint length=(uint) (out-line);
|
||||
|
||||
if (length < 9 ||
|
||||
my_strnncoll (charset_info,
|
||||
(uchar *)line, 9, (const uchar *) "delimiter", 9))
|
||||
{
|
||||
/*
|
||||
Don't add a new line in case there's a DELIMITER command to be
|
||||
added to the glob buffer (e.g. on processing a line like
|
||||
"<command>;DELIMITER <non-eof>") : similar to how a new line is
|
||||
not added in the case when the DELIMITER is the first command
|
||||
entered with an empty glob buffer.
|
||||
*/
|
||||
*out++='\n';
|
||||
length++;
|
||||
}
|
||||
if (buffer.length() + length >= buffer.alloced_length())
|
||||
buffer.realloc(buffer.length()+length+IO_SIZE);
|
||||
if ((!*ml_comment || preserve_comments) && buffer.append(line, length))
|
||||
@ -2832,7 +2846,7 @@ com_charset(String *buffer __attribute__((unused)), char *line)
|
||||
param= get_arg(buff, 0);
|
||||
if (!param || !*param)
|
||||
{
|
||||
return put_info("Usage: \\C char_setname | charset charset_name",
|
||||
return put_info("Usage: \\C charset_name | charset charset_name",
|
||||
INFO_ERROR, 0);
|
||||
}
|
||||
new_cs= get_charset_by_csname(param, MY_CS_PRIMARY, MYF(MY_WME));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB
|
||||
/* Copyright 2000-2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -1129,7 +1129,8 @@ static int connect_to_db(char *host, char *user,char *passwd)
|
||||
DB_error(&mysql_connection, "when trying to connect");
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (mysql_get_server_version(&mysql_connection) < 40100)
|
||||
if ((mysql_get_server_version(&mysql_connection) < 40100) ||
|
||||
(opt_compatible_mode & 3))
|
||||
{
|
||||
/* Don't dump SET NAMES with a pre-4.1 server (bug#7997). */
|
||||
opt_set_charset= 0;
|
||||
@ -1858,11 +1859,11 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
||||
|
||||
row= mysql_fetch_row(result);
|
||||
|
||||
fprintf(sql_file,
|
||||
"SET @saved_cs_client = @@character_set_client;\n"
|
||||
"SET character_set_client = utf8;\n"
|
||||
fprintf(sql_file, (opt_compatible_mode & 3) ? "%s;\n" :
|
||||
"/*!40101 SET @saved_cs_client = @@character_set_client */;\n"
|
||||
"/*!40101 SET character_set_client = utf8 */;\n"
|
||||
"%s;\n"
|
||||
"SET character_set_client = @saved_cs_client;\n",
|
||||
"/*!40101 SET character_set_client = @saved_cs_client */;\n",
|
||||
row[1]);
|
||||
|
||||
check_io(sql_file);
|
||||
@ -3104,6 +3105,11 @@ static my_bool dump_all_views_in_db(char *database)
|
||||
char *table;
|
||||
uint numrows;
|
||||
char table_buff[NAME_LEN*2+3];
|
||||
char hash_key[2*NAME_LEN+2]; /* "db.tablename" */
|
||||
char *afterdot;
|
||||
|
||||
afterdot= strmov(hash_key, database);
|
||||
*afterdot++= '.';
|
||||
|
||||
if (init_dumping(database, init_dumping_views))
|
||||
return 1;
|
||||
@ -3113,10 +3119,15 @@ static my_bool dump_all_views_in_db(char *database)
|
||||
{
|
||||
DYNAMIC_STRING query;
|
||||
init_dynamic_string_checked(&query, "LOCK TABLES ", 256, 1024);
|
||||
for (numrows= 0 ; (table= getTableName(1)); numrows++)
|
||||
for (numrows= 0 ; (table= getTableName(1)); )
|
||||
{
|
||||
dynstr_append_checked(&query, quote_name(table, table_buff, 1));
|
||||
dynstr_append_checked(&query, " READ /*!32311 LOCAL */,");
|
||||
char *end= strmov(afterdot, table);
|
||||
if (include_table((uchar*) hash_key,end - hash_key))
|
||||
{
|
||||
numrows++;
|
||||
dynstr_append_checked(&query, quote_name(table, table_buff, 1));
|
||||
dynstr_append_checked(&query, " READ /*!32311 LOCAL */,");
|
||||
}
|
||||
}
|
||||
if (numrows && mysql_real_query(mysql, query.str, query.length-1))
|
||||
DB_error(mysql, "when using LOCK TABLES");
|
||||
@ -3130,7 +3141,11 @@ static my_bool dump_all_views_in_db(char *database)
|
||||
/* We shall continue here, if --force was given */
|
||||
}
|
||||
while ((table= getTableName(0)))
|
||||
get_view_structure(table, database);
|
||||
{
|
||||
char *end= strmov(afterdot, table);
|
||||
if (include_table((uchar*) hash_key, end - hash_key))
|
||||
get_view_structure(table, database);
|
||||
}
|
||||
if (opt_xml)
|
||||
{
|
||||
fputs("</database>\n", md_result_file);
|
||||
@ -3200,7 +3215,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
||||
DBUG_ENTER("dump_selected_tables");
|
||||
|
||||
if (init_dumping(db, init_dumping_tables))
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
|
||||
init_alloc_root(&root, 8192, 0);
|
||||
if (!(dump_tables= pos= (char**) alloc_root(&root, tables * sizeof(char *))))
|
||||
|
@ -134,7 +134,6 @@ void get_pass(char* pw, int len)
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
FILE* fp;
|
||||
my_MD5_CTX context;
|
||||
uchar digest[16];
|
||||
char pw[17];
|
||||
uint i;
|
||||
@ -147,9 +146,7 @@ int main(int argc, char** argv)
|
||||
if (!(fp=fopen(outfile,"w")))
|
||||
die("Could not open '%s'(errno=%d)",outfile,errno);
|
||||
get_pass(pw,sizeof(pw)-1);
|
||||
my_MD5Init(&context);
|
||||
my_MD5Update(&context,(uchar*) pw,sizeof(pw)-1);
|
||||
my_MD5Final(digest,&context);
|
||||
MY_MD5_HASH(digest,(uchar*) pw,sizeof(pw)-1);
|
||||
fprintf(fp,"%s:",user);
|
||||
for (i=0;i<sizeof(digest);i++)
|
||||
fprintf(fp,"%02x",digest[i]);
|
||||
|
@ -71,25 +71,22 @@ bool String::realloc(uint32 alloc_length)
|
||||
char *new_ptr;
|
||||
if (alloced)
|
||||
{
|
||||
if ((new_ptr= (char*) my_realloc(Ptr,len,MYF(MY_WME))))
|
||||
{
|
||||
Ptr=new_ptr;
|
||||
Alloced_length=len;
|
||||
}
|
||||
else
|
||||
return TRUE; // Signal error
|
||||
if (!(new_ptr= (char*) my_realloc(Ptr,len,MYF(MY_WME))))
|
||||
return TRUE; // Signal error
|
||||
}
|
||||
else if ((new_ptr= (char*) my_malloc(len,MYF(MY_WME))))
|
||||
{
|
||||
if (str_length > len - 1)
|
||||
str_length= 0;
|
||||
if (str_length) // Avoid bugs in memcpy on AIX
|
||||
memcpy(new_ptr,Ptr,str_length);
|
||||
new_ptr[str_length]=0;
|
||||
Ptr=new_ptr;
|
||||
Alloced_length=len;
|
||||
alloced=1;
|
||||
}
|
||||
else
|
||||
return TRUE; // Signal error
|
||||
Ptr= new_ptr;
|
||||
Alloced_length= len;
|
||||
}
|
||||
Ptr[alloc_length]=0; // This make other funcs shorter
|
||||
return FALSE;
|
||||
@ -125,7 +122,7 @@ bool String::set(double num,uint decimals, CHARSET_INFO *cs)
|
||||
str_charset=cs;
|
||||
if (decimals >= NOT_FIXED_DEC)
|
||||
{
|
||||
uint32 len= my_sprintf(buff,(buff, "%.14g",num));// Enough for a DATETIME
|
||||
uint32 len= my_sprintf(buff,(buff, "%.15g",num));// Enough for a DATETIME
|
||||
return copy(buff, len, &my_charset_latin1, cs, &dummy_errors);
|
||||
}
|
||||
#ifdef HAVE_FCONVERT
|
||||
@ -677,7 +674,7 @@ void String::qs_append(const char *str, uint32 len)
|
||||
void String::qs_append(double d)
|
||||
{
|
||||
char *buff = Ptr + str_length;
|
||||
str_length+= my_sprintf(buff, (buff, "%.14g", d));
|
||||
str_length+= my_sprintf(buff, (buff, "%.15g", d));
|
||||
}
|
||||
|
||||
void String::qs_append(double *d)
|
||||
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
||||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also change ndb version below and update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.79)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.80)
|
||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
|
||||
# ndb version
|
||||
NDB_VERSION_MAJOR=5
|
||||
NDB_VERSION_MINOR=0
|
||||
NDB_VERSION_BUILD=79
|
||||
NDB_VERSION_BUILD=80
|
||||
NDB_VERSION_STATUS=""
|
||||
|
||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||
@ -825,7 +825,7 @@ AC_TYPE_SIZE_T
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_SYS_WAIT
|
||||
AC_CHECK_HEADERS(fcntl.h float.h floatingpoint.h ieeefp.h limits.h \
|
||||
AC_CHECK_HEADERS(fcntl.h fenv.h float.h floatingpoint.h ieeefp.h limits.h \
|
||||
memory.h pwd.h select.h \
|
||||
stdlib.h stddef.h \
|
||||
strings.h string.h synch.h sys/mman.h sys/socket.h netinet/in.h arpa/inet.h \
|
||||
@ -2060,7 +2060,7 @@ AC_FUNC_UTIME_NULL
|
||||
AC_FUNC_VPRINTF
|
||||
|
||||
AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
|
||||
fconvert fdatasync finite fpresetsticky fpsetmask fsync ftruncate \
|
||||
fconvert fdatasync fesetround finite fpresetsticky fpsetmask fsync ftruncate \
|
||||
getcwd gethostbyaddr_r gethostbyname_r getpass getpassphrase getpwnam \
|
||||
getpwuid getrlimit getrusage getwd gmtime_r index initgroups isnan \
|
||||
localtime_r locking longjmp lrand48 madvise mallinfo memcpy memmove \
|
||||
|
@ -97,6 +97,17 @@ static HA_ERRORS ha_errlist[]=
|
||||
{ 150,"Foreign key constraint is incorrectly formed"},
|
||||
{ 151,"Cannot add a child row"},
|
||||
{ 152,"Cannot delete a parent row"},
|
||||
{ 153,"No savepoint with that name"},
|
||||
{ 154,"Non unique key block size"},
|
||||
{ 155,"The table does not exist in engine"},
|
||||
{ 156,"The table existed in storage engine"},
|
||||
{ 157,"Could not connect to storage engine"},
|
||||
{ 158,"NULLs are not supported in spatial index"},
|
||||
{ 159,"The table changed in storage engine"},
|
||||
{ 160,"The table changed in storage engine"},
|
||||
{ 161,"The table is not writable"},
|
||||
{ 162,"Failed to get the next autoinc value"},
|
||||
{ 163,"Failed to set the row autoinc value"},
|
||||
{ -30999, "DB_INCOMPLETE: Sync didn't finish"},
|
||||
{ -30998, "DB_KEYEMPTY: Key/data deleted or never created"},
|
||||
{ -30997, "DB_KEYEXIST: The key/data pair already exists"},
|
||||
|
@ -31,7 +31,6 @@ functions */
|
||||
|
||||
#include <sys/locking.h>
|
||||
#include <windows.h>
|
||||
#include <math.h> /* Because of rint() */
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#include <malloc.h>
|
||||
@ -223,13 +222,6 @@ typedef uint rf_SetTimer;
|
||||
#define inline __inline
|
||||
#endif /* __cplusplus */
|
||||
|
||||
inline double rint(double nr)
|
||||
{
|
||||
double f = floor(nr);
|
||||
double c = ceil(nr);
|
||||
return (((c-nr) >= (nr-f)) ? f :c);
|
||||
}
|
||||
|
||||
#ifdef _WIN64
|
||||
#define ulonglong2double(A) ((double) (ulonglong) (A))
|
||||
#define my_off_t2double(A) ((double) (my_off_t) (A))
|
||||
@ -281,7 +273,6 @@ inline ulonglong double2ulonglong(double d)
|
||||
#define HAVE_FLOAT_H
|
||||
#define HAVE_LIMITS_H
|
||||
#define HAVE_STDDEF_H
|
||||
#define HAVE_RINT /* defined in this file */
|
||||
#define NO_FCNTL_NONBLOCK /* No FCNTL */
|
||||
#define HAVE_ALLOCA
|
||||
#define HAVE_STRPBRK
|
||||
|
@ -377,6 +377,7 @@ enum ha_base_keytype {
|
||||
#define HA_ERR_TABLE_READONLY 161 /* The table is not writable */
|
||||
#define HA_ERR_AUTOINC_READ_FAILED 162/* Failed to get the next autoinc value */
|
||||
#define HA_ERR_AUTOINC_ERANGE 163 /* Failed to set the row autoinc value */
|
||||
/* You must also add numbers and description to extra/perror.c ! */
|
||||
|
||||
#define HA_ERR_LAST 163 /*Copy last error nr.*/
|
||||
/* Add error numbers before HA_ERR_LAST and change it accordingly. */
|
||||
|
@ -324,6 +324,9 @@ C_MODE_END
|
||||
#ifdef HAVE_FLOAT_H
|
||||
#include <float.h>
|
||||
#endif
|
||||
#ifdef HAVE_FENV_H
|
||||
#include <fenv.h> /* For fesetround() */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
@ -484,8 +487,39 @@ typedef unsigned short ushort;
|
||||
#define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1))
|
||||
#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0])))
|
||||
#ifndef HAVE_RINT
|
||||
#define rint(A) floor((A)+(((A) < 0)? -0.5 : 0.5))
|
||||
#endif
|
||||
/**
|
||||
All integers up to this number can be represented exactly as double precision
|
||||
values (DBL_MANT_DIG == 53 for IEEE 754 hardware).
|
||||
*/
|
||||
#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1)
|
||||
|
||||
/**
|
||||
rint(3) implementation for platforms that do not have it.
|
||||
Always rounds to the nearest integer with ties being rounded to the nearest
|
||||
even integer to mimic glibc's rint() behavior in the "round-to-nearest"
|
||||
FPU mode. Hardware-specific optimizations are possible (frndint on x86).
|
||||
Unlike this implementation, hardware will also honor the FPU rounding mode.
|
||||
*/
|
||||
|
||||
static inline double rint(double x)
|
||||
{
|
||||
double f, i;
|
||||
f = modf(x, &i);
|
||||
/*
|
||||
All doubles with absolute values > MAX_EXACT_INTEGER are even anyway,
|
||||
no need to check it.
|
||||
*/
|
||||
if (x > 0.0)
|
||||
i += (double) ((f > 0.5) || (f == 0.5 &&
|
||||
i <= (double) MAX_EXACT_INTEGER &&
|
||||
(longlong) i % 2));
|
||||
else
|
||||
i -= (double) ((f < -0.5) || (f == -0.5 &&
|
||||
i >= (double) -MAX_EXACT_INTEGER &&
|
||||
(longlong) i % 2));
|
||||
return i;
|
||||
}
|
||||
#endif /* HAVE_RINT */
|
||||
|
||||
/* Define some general constants */
|
||||
#ifndef TRUE
|
||||
|
@ -13,80 +13,42 @@
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/* See md5.c for explanation and copyright information. */
|
||||
|
||||
/* MD5.H - header file for MD5C.C
|
||||
/*
|
||||
* $FreeBSD: src/contrib/cvs/lib/md5.h,v 1.2 1999/12/11 15:10:02 peter Exp $
|
||||
*/
|
||||
|
||||
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
/* Unlike previous versions of this code, uint32 need not be exactly
|
||||
32 bits, merely 32 bits or more. Choosing a data type which is 32
|
||||
bits instead of 64 is not important; speed is considerably more
|
||||
important. ANSI guarantees that "unsigned long" will be big enough,
|
||||
and always using it seems to have few disadvantages. */
|
||||
typedef uint32 cvs_uint32;
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software.
|
||||
*/
|
||||
|
||||
/* GLOBAL.H - RSAREF types and constants
|
||||
*/
|
||||
|
||||
/* PROTOTYPES should be set to one if and only if the compiler supports
|
||||
function argument prototyping.
|
||||
The following makes PROTOTYPES default to 0 if it has not already
|
||||
been defined with C compiler flags.
|
||||
*/
|
||||
|
||||
/* egcs 1.1.2 under linux didn't defined it.... :( */
|
||||
|
||||
#ifndef PROTOTYPES
|
||||
#define PROTOTYPES 1 /* Assume prototypes */
|
||||
#endif
|
||||
|
||||
/* POINTER defines a generic pointer type */
|
||||
typedef unsigned char *POINTER;
|
||||
|
||||
/* UINT2 defines a two byte word */
|
||||
typedef uint16 UINT2; /* Fix for MySQL / Alpha */
|
||||
|
||||
/* UINT4 defines a four byte word */
|
||||
typedef uint32 UINT4; /* Fix for MySQL / Alpha */
|
||||
|
||||
/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
|
||||
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
|
||||
returns an empty list.
|
||||
*/
|
||||
#if PROTOTYPES
|
||||
#define PROTO_LIST(list) list
|
||||
#else
|
||||
#define PROTO_LIST(list) ()
|
||||
#endif
|
||||
/* MD5 context. */
|
||||
typedef struct {
|
||||
UINT4 state[4]; /* state (ABCD) */
|
||||
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
|
||||
unsigned char buffer[64]; /* input buffer */
|
||||
} my_MD5_CTX;
|
||||
cvs_uint32 buf[4];
|
||||
cvs_uint32 bits[2];
|
||||
unsigned char in[64];
|
||||
} my_MD5Context;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void my_MD5Init PROTO_LIST ((my_MD5_CTX *));
|
||||
void my_MD5Update PROTO_LIST
|
||||
((my_MD5_CTX *, unsigned char *, unsigned int));
|
||||
void my_MD5Final PROTO_LIST ((unsigned char [16], my_MD5_CTX *));
|
||||
void my_MD5Init (my_MD5Context *context);
|
||||
void my_MD5Update (my_MD5Context *context,
|
||||
unsigned char const *buf, unsigned len);
|
||||
void my_MD5Final (unsigned char digest[16],
|
||||
my_MD5Context *context);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define MY_MD5_HASH(digest,buf,len) \
|
||||
do { \
|
||||
my_MD5Context ctx; \
|
||||
my_MD5Init (&ctx); \
|
||||
my_MD5Update (&ctx, buf, len); \
|
||||
my_MD5Final (digest, &ctx); \
|
||||
} while (0)
|
||||
|
@ -636,6 +636,7 @@ extern int nt_share_delete(const char *name,myf MyFlags);
|
||||
extern void TERMINATE(FILE *file);
|
||||
#endif
|
||||
extern void init_glob_errs(void);
|
||||
extern void wait_for_free_space(const char *filename, int errors);
|
||||
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
|
||||
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
|
||||
extern int my_fclose(FILE *fd,myf MyFlags);
|
||||
|
@ -42,6 +42,11 @@ initial segment in buf_LRU_get_recent_limit */
|
||||
|
||||
#define BUF_LRU_INITIAL_RATIO 8
|
||||
|
||||
/* When dropping the search hash index entries before deleting an ibd
|
||||
file, we build a local array of pages belonging to that tablespace
|
||||
in the buffer pool. Following is the size of that array. */
|
||||
#define BUF_LRU_DROP_SEARCH_HASH_SIZE 1024
|
||||
|
||||
/* If we switch on the InnoDB monitor because there are too few available
|
||||
frames in the buffer pool, we set this to TRUE */
|
||||
ibool buf_lru_switched_on_innodb_mon = FALSE;
|
||||
@ -65,6 +70,120 @@ buf_LRU_block_free_hashed_page(
|
||||
buf_block_t* block); /* in: block, must contain a file page and
|
||||
be in a state where it can be freed */
|
||||
|
||||
/**********************************************************************
|
||||
Attempts to drop page hash index on a batch of pages belonging to a
|
||||
particular space id. */
|
||||
static
|
||||
void
|
||||
buf_LRU_drop_page_hash_batch(
|
||||
/*=========================*/
|
||||
ulint id, /* in: space id */
|
||||
const ulint* arr, /* in: array of page_no */
|
||||
ulint count) /* in: number of entries in array */
|
||||
{
|
||||
ulint i;
|
||||
|
||||
ut_ad(arr != NULL);
|
||||
ut_ad(count <= BUF_LRU_DROP_SEARCH_HASH_SIZE);
|
||||
|
||||
for (i = 0; i < count; ++i) {
|
||||
btr_search_drop_page_hash_when_freed(id, arr[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
When doing a DROP TABLE/DISCARD TABLESPACE we have to drop all page
|
||||
hash index entries belonging to that table. This function tries to
|
||||
do that in batch. Note that this is a 'best effort' attempt and does
|
||||
not guarantee that ALL hash entries will be removed. */
|
||||
static
|
||||
void
|
||||
buf_LRU_drop_page_hash_for_tablespace(
|
||||
/*==================================*/
|
||||
ulint id) /* in: space id */
|
||||
{
|
||||
buf_block_t* block;
|
||||
ulint* page_arr;
|
||||
ulint num_entries;
|
||||
|
||||
page_arr = ut_malloc(sizeof(ulint)
|
||||
* BUF_LRU_DROP_SEARCH_HASH_SIZE);
|
||||
mutex_enter(&buf_pool->mutex);
|
||||
|
||||
scan_again:
|
||||
num_entries = 0;
|
||||
block = UT_LIST_GET_LAST(buf_pool->LRU);
|
||||
|
||||
while (block != NULL) {
|
||||
buf_block_t* prev_block;
|
||||
|
||||
mutex_enter(&block->mutex);
|
||||
prev_block = UT_LIST_GET_PREV(LRU, block);
|
||||
|
||||
ut_a(block->state == BUF_BLOCK_FILE_PAGE);
|
||||
|
||||
if (block->space != id
|
||||
|| block->buf_fix_count > 0
|
||||
|| block->io_fix != 0) {
|
||||
/* We leave the fixed pages as is in this scan.
|
||||
To be dealt with later in the final scan. */
|
||||
mutex_exit(&block->mutex);
|
||||
goto next_page;
|
||||
}
|
||||
|
||||
ut_ad(block->space == id);
|
||||
if (block->is_hashed) {
|
||||
|
||||
/* Store the offset(i.e.: page_no) in the array
|
||||
so that we can drop hash index in a batch
|
||||
later. */
|
||||
page_arr[num_entries] = block->offset;
|
||||
mutex_exit(&block->mutex);
|
||||
ut_a(num_entries < BUF_LRU_DROP_SEARCH_HASH_SIZE);
|
||||
++num_entries;
|
||||
|
||||
if (num_entries < BUF_LRU_DROP_SEARCH_HASH_SIZE) {
|
||||
goto next_page;
|
||||
}
|
||||
/* Array full. We release the buf_pool->mutex to
|
||||
obey the latching order. */
|
||||
mutex_exit(&buf_pool->mutex);
|
||||
|
||||
buf_LRU_drop_page_hash_batch(id, page_arr,
|
||||
num_entries);
|
||||
num_entries = 0;
|
||||
mutex_enter(&buf_pool->mutex);
|
||||
} else {
|
||||
mutex_exit(&block->mutex);
|
||||
}
|
||||
|
||||
next_page:
|
||||
/* Note that we may have released the buf_pool->mutex
|
||||
above after reading the prev_block during processing
|
||||
of a page_hash_batch (i.e.: when the array was full).
|
||||
This means that prev_block can change in LRU list.
|
||||
This is OK because this function is a 'best effort'
|
||||
to drop as many search hash entries as possible and
|
||||
it does not guarantee that ALL such entries will be
|
||||
dropped. */
|
||||
block = prev_block;
|
||||
|
||||
/* If, however, block has been removed from LRU list
|
||||
to the free list then we should restart the scan.
|
||||
block->state is protected by buf_pool->mutex. */
|
||||
if (block && block->state != BUF_BLOCK_FILE_PAGE) {
|
||||
ut_a(num_entries == 0);
|
||||
goto scan_again;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_exit(&buf_pool->mutex);
|
||||
|
||||
/* Drop any remaining batch of search hashed pages. */
|
||||
buf_LRU_drop_page_hash_batch(id, page_arr, num_entries);
|
||||
ut_free(page_arr);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
Invalidates all pages belonging to a given tablespace when we are deleting
|
||||
the data file(s) of that tablespace. */
|
||||
@ -78,6 +197,14 @@ buf_LRU_invalidate_tablespace(
|
||||
ulint page_no;
|
||||
ibool all_freed;
|
||||
|
||||
/* Before we attempt to drop pages one by one we first
|
||||
attempt to drop page hash index entries in batches to make
|
||||
it more efficient. The batching attempt is a best effort
|
||||
attempt and does not guarantee that all pages hash entries
|
||||
will be dropped. We get rid of remaining page hash entries
|
||||
one by one below. */
|
||||
buf_LRU_drop_page_hash_for_tablespace(id);
|
||||
|
||||
scan_again:
|
||||
mutex_enter(&(buf_pool->mutex));
|
||||
|
||||
|
@ -1249,7 +1249,8 @@ dict_create_or_check_foreign_constraint_tables(void)
|
||||
fprintf(stderr, "InnoDB: error %lu in creation\n",
|
||||
(ulong) error);
|
||||
|
||||
ut_a(error == DB_OUT_OF_FILE_SPACE);
|
||||
ut_a(error == DB_OUT_OF_FILE_SPACE
|
||||
|| error == DB_TOO_MANY_CONCURRENT_TRXS);
|
||||
|
||||
fprintf(stderr, "InnoDB: creation failed\n");
|
||||
fprintf(stderr, "InnoDB: tablespace is full\n");
|
||||
|
@ -70,6 +70,11 @@ Created 5/24/1996 Heikki Tuuri
|
||||
work with e.g., FT indexes created by
|
||||
a later version of the engine. */
|
||||
|
||||
#define DB_TOO_MANY_CONCURRENT_TRXS 47 /* when InnoDB runs out of the
|
||||
preconfigured undo slots, this can
|
||||
only happen when there are too many
|
||||
concurrent transactions */
|
||||
|
||||
/* The following are partial failure codes */
|
||||
#define DB_FAIL 1000
|
||||
#define DB_OVERFLOW 1001
|
||||
|
@ -368,8 +368,9 @@ rec_set_field_extern_bits(
|
||||
/***************************************************************
|
||||
This is used to modify the value of an already existing field in a record.
|
||||
The previous value must have exactly the same size as the new value. If len
|
||||
is UNIV_SQL_NULL then the field is treated as an SQL null for old-style
|
||||
records. For new-style records, len must not be UNIV_SQL_NULL. */
|
||||
is UNIV_SQL_NULL then the field is treated as an SQL null.
|
||||
For records in ROW_FORMAT=COMPACT (new-style records), len must not be
|
||||
UNIV_SQL_NULL unless the field already is SQL null. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
rec_set_nth_field(
|
||||
@ -378,11 +379,7 @@ rec_set_nth_field(
|
||||
const ulint* offsets,/* in: array returned by rec_get_offsets() */
|
||||
ulint n, /* in: index number of the field */
|
||||
const void* data, /* in: pointer to the data if not SQL null */
|
||||
ulint len); /* in: length of the data or UNIV_SQL_NULL.
|
||||
If not SQL null, must have the same
|
||||
length as the previous value.
|
||||
If SQL null, previous value must be
|
||||
SQL null. */
|
||||
ulint len); /* in: length of the data or UNIV_SQL_NULL */
|
||||
/**************************************************************
|
||||
The following function returns the data size of an old-style physical
|
||||
record, that is the sum of field lengths. SQL null fields
|
||||
|
@ -1204,8 +1204,9 @@ rec_get_nth_field_size(
|
||||
/***************************************************************
|
||||
This is used to modify the value of an already existing field in a record.
|
||||
The previous value must have exactly the same size as the new value. If len
|
||||
is UNIV_SQL_NULL then the field is treated as an SQL null for old-style
|
||||
records. For new-style records, len must not be UNIV_SQL_NULL. */
|
||||
is UNIV_SQL_NULL then the field is treated as an SQL null.
|
||||
For records in ROW_FORMAT=COMPACT (new-style records), len must not be
|
||||
UNIV_SQL_NULL unless the field already is SQL null. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
rec_set_nth_field(
|
||||
@ -1215,11 +1216,7 @@ rec_set_nth_field(
|
||||
ulint n, /* in: index number of the field */
|
||||
const void* data, /* in: pointer to the data
|
||||
if not SQL null */
|
||||
ulint len) /* in: length of the data or UNIV_SQL_NULL.
|
||||
If not SQL null, must have the same
|
||||
length as the previous value.
|
||||
If SQL null, previous value must be
|
||||
SQL null. */
|
||||
ulint len) /* in: length of the data or UNIV_SQL_NULL */
|
||||
{
|
||||
byte* data2;
|
||||
ulint len2;
|
||||
@ -1227,9 +1224,11 @@ rec_set_nth_field(
|
||||
ut_ad(rec);
|
||||
ut_ad(rec_offs_validate(rec, NULL, offsets));
|
||||
|
||||
if (len == UNIV_SQL_NULL) {
|
||||
ut_ad(!rec_offs_comp(offsets));
|
||||
rec_set_nth_field_sql_null(rec, n);
|
||||
if (UNIV_UNLIKELY(len == UNIV_SQL_NULL)) {
|
||||
if (!rec_offs_nth_sql_null(offsets, n)) {
|
||||
ut_a(!rec_offs_comp(offsets));
|
||||
rec_set_nth_field_sql_null(rec, n);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -222,13 +222,16 @@ trx_undo_lists_init(
|
||||
Assigns an undo log for a transaction. A new undo log is created or a cached
|
||||
undo log reused. */
|
||||
|
||||
trx_undo_t*
|
||||
ulint
|
||||
trx_undo_assign_undo(
|
||||
/*=================*/
|
||||
/* out: the undo log, NULL if did not succeed: out of
|
||||
space */
|
||||
trx_t* trx, /* in: transaction */
|
||||
ulint type); /* in: TRX_UNDO_INSERT or TRX_UNDO_UPDATE */
|
||||
/* out: DB_SUCCESS if undo log assign
|
||||
* successful, possible error codes are:
|
||||
* ER_TOO_MANY_CONCURRENT_TRXS
|
||||
* DB_OUT_OF_FILE_SPAC
|
||||
* DB_OUT_OF_MEMORY */
|
||||
trx_t* trx, /* in: transaction */
|
||||
ulint type); /* in: TRX_UNDO_INSERT or TRX_UNDO_UPDATE */
|
||||
/**********************************************************************
|
||||
Sets the state of the undo log segment at a transaction finish. */
|
||||
|
||||
|
@ -494,7 +494,8 @@ handle_new_error:
|
||||
/* MySQL will roll back the latest SQL statement */
|
||||
} else if (err == DB_ROW_IS_REFERENCED
|
||||
|| err == DB_NO_REFERENCED_ROW
|
||||
|| err == DB_CANNOT_ADD_CONSTRAINT) {
|
||||
|| err == DB_CANNOT_ADD_CONSTRAINT
|
||||
|| err == DB_TOO_MANY_CONCURRENT_TRXS) {
|
||||
if (savept) {
|
||||
/* Roll back the latest, possibly incomplete
|
||||
insertion or update */
|
||||
|
@ -1013,6 +1013,7 @@ trx_undo_report_row_operation(
|
||||
ibool is_insert;
|
||||
trx_rseg_t* rseg;
|
||||
mtr_t mtr;
|
||||
ulint err = DB_SUCCESS;
|
||||
mem_heap_t* heap = NULL;
|
||||
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
||||
ulint* offsets = offsets_;
|
||||
@ -1024,7 +1025,7 @@ trx_undo_report_row_operation(
|
||||
|
||||
*roll_ptr = ut_dulint_zero;
|
||||
|
||||
return(DB_SUCCESS);
|
||||
return(err);
|
||||
}
|
||||
|
||||
ut_ad(thr);
|
||||
@ -1042,7 +1043,7 @@ trx_undo_report_row_operation(
|
||||
|
||||
if (trx->insert_undo == NULL) {
|
||||
|
||||
trx_undo_assign_undo(trx, TRX_UNDO_INSERT);
|
||||
err = trx_undo_assign_undo(trx, TRX_UNDO_INSERT);
|
||||
}
|
||||
|
||||
undo = trx->insert_undo;
|
||||
@ -1052,7 +1053,7 @@ trx_undo_report_row_operation(
|
||||
|
||||
if (trx->update_undo == NULL) {
|
||||
|
||||
trx_undo_assign_undo(trx, TRX_UNDO_UPDATE);
|
||||
err = trx_undo_assign_undo(trx, TRX_UNDO_UPDATE);
|
||||
|
||||
}
|
||||
|
||||
@ -1060,11 +1061,11 @@ trx_undo_report_row_operation(
|
||||
is_insert = FALSE;
|
||||
}
|
||||
|
||||
if (undo == NULL) {
|
||||
/* Did not succeed: out of space */
|
||||
if (err != DB_SUCCESS) {
|
||||
/* Did not succeed: return the error encountered */
|
||||
mutex_exit(&(trx->undo_mutex));
|
||||
|
||||
return(DB_OUT_OF_FILE_SPACE);
|
||||
return(err);
|
||||
}
|
||||
|
||||
page_no = undo->last_page_no;
|
||||
@ -1154,7 +1155,7 @@ trx_undo_report_row_operation(
|
||||
if (UNIV_LIKELY_NULL(heap)) {
|
||||
mem_heap_free(heap);
|
||||
}
|
||||
return(DB_SUCCESS);
|
||||
return(err);
|
||||
}
|
||||
|
||||
/*============== BUILDING PREVIOUS VERSION OF A RECORD ===============*/
|
||||
|
@ -374,27 +374,32 @@ trx_undo_page_init(
|
||||
/*******************************************************************
|
||||
Creates a new undo log segment in file. */
|
||||
static
|
||||
page_t*
|
||||
ulint
|
||||
trx_undo_seg_create(
|
||||
/*================*/
|
||||
/* out: segment header page x-latched, NULL
|
||||
if no space left */
|
||||
/* out: DB_SUCCESS if page creation OK
|
||||
possible error codes are:
|
||||
DB_TOO_MANY_CONCURRENT_TRXS
|
||||
DB_OUT_OF_FILE_SPACE */
|
||||
trx_rseg_t* rseg __attribute__((unused)),/* in: rollback segment */
|
||||
trx_rsegf_t* rseg_hdr,/* in: rollback segment header, page
|
||||
x-latched */
|
||||
ulint type, /* in: type of the segment: TRX_UNDO_INSERT or
|
||||
TRX_UNDO_UPDATE */
|
||||
ulint* id, /* out: slot index within rseg header */
|
||||
page_t** undo_page,
|
||||
/* out: segment header page x-latched, NULL
|
||||
if there was an error */
|
||||
mtr_t* mtr) /* in: mtr */
|
||||
{
|
||||
ulint slot_no;
|
||||
ulint space;
|
||||
page_t* undo_page;
|
||||
trx_upagef_t* page_hdr;
|
||||
trx_usegf_t* seg_hdr;
|
||||
ulint n_reserved;
|
||||
ibool success;
|
||||
|
||||
ulint err = DB_SUCCESS;
|
||||
|
||||
ut_ad(mtr && id && rseg_hdr);
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
ut_ad(mutex_own(&(rseg->mutex)));
|
||||
@ -411,7 +416,7 @@ trx_undo_seg_create(
|
||||
"InnoDB: Warning: cannot find a free slot for an undo log. Do you have too\n"
|
||||
"InnoDB: many active transactions running concurrently?\n");
|
||||
|
||||
return(NULL);
|
||||
return(DB_TOO_MANY_CONCURRENT_TRXS);
|
||||
}
|
||||
|
||||
space = buf_frame_get_space_id(rseg_hdr);
|
||||
@ -420,29 +425,29 @@ trx_undo_seg_create(
|
||||
mtr);
|
||||
if (!success) {
|
||||
|
||||
return(NULL);
|
||||
return(DB_OUT_OF_FILE_SPACE);
|
||||
}
|
||||
|
||||
/* Allocate a new file segment for the undo log */
|
||||
undo_page = fseg_create_general(space, 0,
|
||||
*undo_page = fseg_create_general(space, 0,
|
||||
TRX_UNDO_SEG_HDR + TRX_UNDO_FSEG_HEADER, TRUE, mtr);
|
||||
|
||||
fil_space_release_free_extents(space, n_reserved);
|
||||
|
||||
if (undo_page == NULL) {
|
||||
if (*undo_page == NULL) {
|
||||
/* No space left */
|
||||
|
||||
return(NULL);
|
||||
return(DB_OUT_OF_FILE_SPACE);
|
||||
}
|
||||
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
buf_page_dbg_add_level(undo_page, SYNC_TRX_UNDO_PAGE);
|
||||
buf_page_dbg_add_level(*undo_page, SYNC_TRX_UNDO_PAGE);
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
|
||||
page_hdr = undo_page + TRX_UNDO_PAGE_HDR;
|
||||
seg_hdr = undo_page + TRX_UNDO_SEG_HDR;
|
||||
page_hdr = *undo_page + TRX_UNDO_PAGE_HDR;
|
||||
seg_hdr = *undo_page + TRX_UNDO_SEG_HDR;
|
||||
|
||||
trx_undo_page_init(undo_page, type, mtr);
|
||||
trx_undo_page_init(*undo_page, type, mtr);
|
||||
|
||||
mlog_write_ulint(page_hdr + TRX_UNDO_PAGE_FREE,
|
||||
TRX_UNDO_SEG_HDR + TRX_UNDO_SEG_HDR_SIZE,
|
||||
@ -456,10 +461,11 @@ trx_undo_seg_create(
|
||||
page_hdr + TRX_UNDO_PAGE_NODE, mtr);
|
||||
|
||||
trx_rsegf_set_nth_undo(rseg_hdr, slot_no,
|
||||
buf_frame_get_page_no(undo_page), mtr);
|
||||
buf_frame_get_page_no(*undo_page), mtr);
|
||||
|
||||
*id = slot_no;
|
||||
|
||||
return(undo_page);
|
||||
return(err);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@ -1400,6 +1406,11 @@ trx_undo_mem_create(
|
||||
|
||||
undo = mem_alloc(sizeof(trx_undo_t));
|
||||
|
||||
if (undo == NULL) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
undo->id = id;
|
||||
undo->type = type;
|
||||
undo->state = TRX_UNDO_ACTIVE;
|
||||
@ -1479,11 +1490,15 @@ trx_undo_mem_free(
|
||||
/**************************************************************************
|
||||
Creates a new undo log. */
|
||||
static
|
||||
trx_undo_t*
|
||||
ulint
|
||||
trx_undo_create(
|
||||
/*============*/
|
||||
/* out: undo log object, NULL if did not
|
||||
succeed: out of space */
|
||||
/* out: DB_SUCCESS if successful in creating
|
||||
the new undo lob object, possible error
|
||||
codes are:
|
||||
DB_TOO_MANY_CONCURRENT_TRXS
|
||||
DB_OUT_OF_FILE_SPACE
|
||||
DB_OUT_OF_MEMORY*/
|
||||
trx_t* trx, /* in: transaction */
|
||||
trx_rseg_t* rseg, /* in: rollback segment memory copy */
|
||||
ulint type, /* in: type of the log: TRX_UNDO_INSERT or
|
||||
@ -1491,36 +1506,39 @@ trx_undo_create(
|
||||
dulint trx_id, /* in: id of the trx for which the undo log
|
||||
is created */
|
||||
XID* xid, /* in: X/Open transaction identification*/
|
||||
trx_undo_t** undo, /* out: the new undo log object, undefined
|
||||
* if did not succeed */
|
||||
mtr_t* mtr) /* in: mtr */
|
||||
{
|
||||
trx_rsegf_t* rseg_header;
|
||||
ulint page_no;
|
||||
ulint offset;
|
||||
ulint id;
|
||||
trx_undo_t* undo;
|
||||
page_t* undo_page;
|
||||
|
||||
ulint err;
|
||||
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
ut_ad(mutex_own(&(rseg->mutex)));
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
|
||||
if (rseg->curr_size == rseg->max_size) {
|
||||
|
||||
return(NULL);
|
||||
return(DB_OUT_OF_FILE_SPACE);
|
||||
}
|
||||
|
||||
rseg->curr_size++;
|
||||
|
||||
rseg_header = trx_rsegf_get(rseg->space, rseg->page_no, mtr);
|
||||
|
||||
undo_page = trx_undo_seg_create(rseg, rseg_header, type, &id, mtr);
|
||||
err = trx_undo_seg_create(rseg, rseg_header, type, &id,
|
||||
&undo_page, mtr);
|
||||
|
||||
if (undo_page == NULL) {
|
||||
if (err != DB_SUCCESS) {
|
||||
/* Did not succeed */
|
||||
|
||||
rseg->curr_size--;
|
||||
|
||||
return(NULL);
|
||||
return(err);
|
||||
}
|
||||
|
||||
page_no = buf_frame_get_page_no(undo_page);
|
||||
@ -1532,9 +1550,14 @@ trx_undo_create(
|
||||
undo_page + offset, mtr);
|
||||
}
|
||||
|
||||
undo = trx_undo_mem_create(rseg, id, type, trx_id, xid,
|
||||
*undo = trx_undo_mem_create(rseg, id, type, trx_id, xid,
|
||||
page_no, offset);
|
||||
return(undo);
|
||||
if (*undo == NULL) {
|
||||
|
||||
err = DB_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
return(err);
|
||||
}
|
||||
|
||||
/*================ UNDO LOG ASSIGNMENT AND CLEANUP =====================*/
|
||||
@ -1653,17 +1676,20 @@ trx_undo_mark_as_dict_operation(
|
||||
Assigns an undo log for a transaction. A new undo log is created or a cached
|
||||
undo log reused. */
|
||||
|
||||
trx_undo_t*
|
||||
ulint
|
||||
trx_undo_assign_undo(
|
||||
/*=================*/
|
||||
/* out: the undo log, NULL if did not succeed: out of
|
||||
space */
|
||||
trx_t* trx, /* in: transaction */
|
||||
ulint type) /* in: TRX_UNDO_INSERT or TRX_UNDO_UPDATE */
|
||||
/* out: DB_SUCCESS if undo log assign
|
||||
successful, possible error codes are:
|
||||
DD_TOO_MANY_CONCURRENT_TRXS
|
||||
DB_OUT_OF_FILE_SPACE DB_OUT_OF_MEMORY*/
|
||||
trx_t* trx, /* in: transaction */
|
||||
ulint type) /* in: TRX_UNDO_INSERT or TRX_UNDO_UPDATE */
|
||||
{
|
||||
trx_rseg_t* rseg;
|
||||
trx_undo_t* undo;
|
||||
mtr_t mtr;
|
||||
ulint err = DB_SUCCESS;
|
||||
|
||||
ut_ad(trx);
|
||||
ut_ad(trx->rseg);
|
||||
@ -1684,15 +1710,11 @@ trx_undo_assign_undo(
|
||||
undo = trx_undo_reuse_cached(trx, rseg, type, trx->id, &trx->xid,
|
||||
&mtr);
|
||||
if (undo == NULL) {
|
||||
undo = trx_undo_create(trx, rseg, type, trx->id, &trx->xid,
|
||||
&mtr);
|
||||
if (undo == NULL) {
|
||||
/* Did not succeed */
|
||||
err = trx_undo_create(trx, rseg, type, trx->id, &trx->xid,
|
||||
&undo, &mtr);
|
||||
if (err != DB_SUCCESS) {
|
||||
|
||||
mutex_exit(&(rseg->mutex));
|
||||
mtr_commit(&mtr);
|
||||
|
||||
return(NULL);
|
||||
goto func_exit;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1710,10 +1732,11 @@ trx_undo_assign_undo(
|
||||
trx_undo_mark_as_dict_operation(trx, undo, &mtr);
|
||||
}
|
||||
|
||||
func_exit:
|
||||
mutex_exit(&(rseg->mutex));
|
||||
mtr_commit(&mtr);
|
||||
|
||||
return(undo);
|
||||
return err;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -3786,13 +3786,13 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
|
||||
#undef NOT_FIXED_DEC
|
||||
{
|
||||
/*
|
||||
The 14 below is to ensure that the server and client has the same
|
||||
DBL_DIG below is to ensure that the server and client has the same
|
||||
precisions. This will ensure that on the same machine you get the
|
||||
same value as a string independent of the protocol you use.
|
||||
*/
|
||||
sprintf(buff, "%-*.*g", (int) min(sizeof(buff)-1,
|
||||
param->buffer_length),
|
||||
min(14,width), value);
|
||||
min(DBL_DIG, width), value);
|
||||
end= strcend(buff, ' ');
|
||||
*end= 0;
|
||||
}
|
||||
|
6
mysql-test/include/master-slave-end.inc
Normal file
6
mysql-test/include/master-slave-end.inc
Normal file
@ -0,0 +1,6 @@
|
||||
--connection master
|
||||
--sync_slave_with_master
|
||||
--connection slave
|
||||
--disable_query_log
|
||||
STOP SLAVE;
|
||||
--enable_query_log
|
@ -2,23 +2,50 @@
|
||||
# By JBM 2006-02-16 So that the code is not repeated #
|
||||
# in test cases and can be reused. #
|
||||
######################################################
|
||||
|
||||
--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "start backup" >> $NDB_TOOLS_OUTPUT
|
||||
|
||||
# there is no neat way to find the backupid, this is a hack to find it...
|
||||
# To find the backupid, we must dump this data to a table, and SELECT
|
||||
# what we want into an outfile. This could be accomplished with grep, but
|
||||
# grep isn't Windows-portable
|
||||
|
||||
--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -d sys --delimiter=',' SYSTAB_0 | grep 520093696 > $MYSQLTEST_VARDIR/tmp.dat
|
||||
--disable_query_log
|
||||
# create a table to help us out
|
||||
--disable_warnings # leave this on until done with the entire process
|
||||
# cleanup
|
||||
DROP TABLE IF EXISTS helper1;
|
||||
CREATE TABLE helper1(c1 VARCHAR(20));
|
||||
# dump raw data to file
|
||||
let $ndb_backup_file1= $MYSQLTEST_VARDIR/ndb_backup_tmp.dat;
|
||||
let $ndb_backup_file2= $MYSQLTEST_VARDIR/tmp.dat;
|
||||
--error 0,1
|
||||
--remove_file $ndb_backup_file1
|
||||
--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -d sys --delimiter=',' SYSTAB_0 > $ndb_backup_file1
|
||||
# load the table from the raw data file
|
||||
eval LOAD DATA INFILE '$ndb_backup_file1' INTO TABLE helper1;
|
||||
--remove_file $ndb_backup_file1
|
||||
# output what we need
|
||||
eval SELECT * FROM helper1 WHERE c1 LIKE '%520093696%'
|
||||
INTO OUTFILE '$ndb_backup_file2';
|
||||
# cleanup
|
||||
DROP TABLE helper1;
|
||||
--enable_warnings
|
||||
--enable_query_log
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
|
||||
DELETE FROM test.backup_info;
|
||||
|
||||
LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
|
||||
eval LOAD DATA INFILE '$ndb_backup_file2'
|
||||
INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
--remove_file $ndb_backup_file2
|
||||
|
||||
--replace_column 1 <the_backup_id>
|
||||
|
||||
SELECT @the_backup_id:=backup_id FROM test.backup_info;
|
||||
|
||||
let the_backup_id=`select @the_backup_id`;
|
||||
let $the_backup_id=`SELECT @the_backup_id`;
|
||||
|
||||
DROP TABLE test.backup_info;
|
||||
|
||||
|
21
mysql-test/include/start_slave.inc
Normal file
21
mysql-test/include/start_slave.inc
Normal file
@ -0,0 +1,21 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Issues START SLAVE on the current connection. Then waits until both
|
||||
# the IO and SQL threads have started, or until a timeout is reached.
|
||||
#
|
||||
# Please use this instead of 'START SLAVE', to reduce the risk of test
|
||||
# case bugs.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# source include/wait_for_slave_to_start.inc;
|
||||
#
|
||||
# Parameters to this macro are $slave_timeout and
|
||||
# $master_connection. See wait_for_slave_param.inc for
|
||||
# descriptions.
|
||||
|
||||
--disable_query_log
|
||||
START SLAVE;
|
||||
--enable_query_log
|
||||
--echo include/start_slave.inc
|
||||
source include/wait_for_slave_to_start.inc;
|
21
mysql-test/include/stop_slave.inc
Normal file
21
mysql-test/include/stop_slave.inc
Normal file
@ -0,0 +1,21 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Issues STOP SLAVE on the current connection. Then waits until both
|
||||
# the IO and SQL threads have stopped, or until a timeout is reached.
|
||||
#
|
||||
# Please use this instead of 'STOP SLAVE', to reduce the risk of test
|
||||
# case bugs.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# source include/wait_for_slave_to_start.inc;
|
||||
#
|
||||
# Parameters to this macro are $slave_timeout and
|
||||
# $master_connection. See wait_for_slave_param.inc for
|
||||
# descriptions.
|
||||
|
||||
--disable_query_log
|
||||
STOP SLAVE;
|
||||
--enable_query_log
|
||||
--echo include/stop_slave.inc
|
||||
source include/wait_for_slave_to_stop.inc;
|
40
mysql-test/include/wait_for_slave_sql_error.inc
Normal file
40
mysql-test/include/wait_for_slave_sql_error.inc
Normal file
@ -0,0 +1,40 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Waits until the SQL thread of the current connection has got an
|
||||
# error, or until a timeout is reached. Also waits until the SQL
|
||||
# thread has completely stopped.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# source include/wait_for_slave_sql_error.inc;
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# $slave_sql_errno
|
||||
# The expected SQL error number. This is required.
|
||||
# (After BUG#41956 has been fixed, this will be required to be a
|
||||
# symbolic name instead of a number.)
|
||||
#
|
||||
# $slave_timeout
|
||||
# See wait_for_slave_param.inc for description.
|
||||
#
|
||||
# $master_connection
|
||||
# See wait_for_slave_param.inc for description.
|
||||
|
||||
if (`SELECT '$slave_sql_errno' = ''`) {
|
||||
--echo !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_fro_slave_sql_error.inc
|
||||
exit;
|
||||
}
|
||||
|
||||
let $slave_param= Slave_SQL_Running;
|
||||
let $slave_param_value= No;
|
||||
let $slave_error_message= Failed while waiting for slave to stop the SQL thread (expecting error in the SQL thread);
|
||||
source include/wait_for_slave_param.inc;
|
||||
|
||||
# NOTE: on mysql-5.0, there is no way to distinguish slave SQL error from IO error
|
||||
let $_error= query_get_value(SHOW SLAVE STATUS, Last_Errno, 1);
|
||||
if (`SELECT '$_error' != '$slave_sql_errno'`) {
|
||||
--echo Slave stopped with wrong error code: $_error (expected $slave_sql_errno)
|
||||
source include/show_rpl_debug_info.inc;
|
||||
exit;
|
||||
}
|
39
mysql-test/include/wait_for_slave_sql_error_and_skip.inc
Normal file
39
mysql-test/include/wait_for_slave_sql_error_and_skip.inc
Normal file
@ -0,0 +1,39 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Wait for slave SQL error, skip the erroneous statement and restart
|
||||
# slave
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# let $slave_sql_error= <ERRNO>;
|
||||
# source include/wait_for_slave_sql_error_and_skip.inc;
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# $slave_sql_errno
|
||||
# The error number to wait for. This is required. (See
|
||||
# wait_for_slave_sql_error.inc)
|
||||
#
|
||||
# $show_sql_error
|
||||
# If set, will print the error to the query log.
|
||||
#
|
||||
# $slave_timeout
|
||||
# See wait_for_slave_param.inc for description.
|
||||
#
|
||||
# $master_connection
|
||||
# See wait_for_slave_param.inc for description.
|
||||
|
||||
echo --source include/wait_for_slave_sql_error_and_skip.inc;
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_error.inc;
|
||||
if ($show_sql_error)
|
||||
{
|
||||
# NOTE: on mysql-5.0, there is no way to distinguish slave SQL error from IO error
|
||||
let $error= query_get_value("SHOW SLAVE STATUS", Last_Error, 1);
|
||||
echo Last_SQL_Error = $error;
|
||||
}
|
||||
|
||||
# skip the erroneous statement
|
||||
set global sql_slave_skip_counter=1;
|
||||
source include/start_slave.inc;
|
||||
connection master;
|
78
mysql-test/include/wait_show_condition.inc
Normal file
78
mysql-test/include/wait_show_condition.inc
Normal file
@ -0,0 +1,78 @@
|
||||
# include/wait_show_condition.inc
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until the show statement ($show_statement) has at least within one of
|
||||
# the rows of the result set for the field ($field) a value which fulfils
|
||||
# a condition ($condition), or the operation times out.
|
||||
#
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# let $show_statement= SHOW PROCESSLIST;
|
||||
# let $field= State;
|
||||
# let $condition= = 'Updating';
|
||||
# --source include/wait_show_condition.inc
|
||||
#
|
||||
# OR
|
||||
#
|
||||
# let $wait_timeout= 60; # Override default of 30 seconds with 60.
|
||||
# let $show_statement= SHOW PROCESSLIST;
|
||||
# let $field= State;
|
||||
# let $condition= = 'Updating';
|
||||
# --source include/wait_show_condition.inc
|
||||
#
|
||||
# Please do not use this use routine if you can replace the SHOW statement
|
||||
# with a select. In such a case include/wait_condition.inc is recommended.
|
||||
#
|
||||
# Created: 2009-02-18 mleich
|
||||
#
|
||||
|
||||
let $max_run_time= 30;
|
||||
if ($wait_timeout)
|
||||
{
|
||||
let $max_run_time= $wait_timeout;
|
||||
}
|
||||
# Reset $wait_timeout so that its value won't be used on subsequent
|
||||
# calls, and default will be used instead.
|
||||
let $wait_timeout= 0;
|
||||
|
||||
# The smallest timespan till UNIX_TIMESTAMP() gets incremented is ~0 seconds.
|
||||
# We add one second to avoid the case that somebody measures timespans on a
|
||||
# real clock with fractions of seconds, detects that n seconds are sufficient,
|
||||
# assigns n to this routine and suffers because he sometimes gets n - 1
|
||||
# seconds in reality.
|
||||
inc $max_run_time;
|
||||
|
||||
let $found= 0;
|
||||
let $max_end_time= `SELECT UNIX_TIMESTAMP() + $max_run_time`;
|
||||
while (`SELECT UNIX_TIMESTAMP() <= $max_end_time AND $found = 0`)
|
||||
{
|
||||
# Sleep a bit to avoid too heavy load.
|
||||
real_sleep 0.2;
|
||||
let $rowno= 1;
|
||||
let $process_result= 1;
|
||||
while (`SELECT $process_result = 1 AND $found = 0`)
|
||||
{
|
||||
let $field_value= query_get_value($show_statement, $field, $rowno);
|
||||
if (`SELECT '$field_value' $condition`)
|
||||
{
|
||||
let $found= 1;
|
||||
}
|
||||
if (`SELECT '$field_value' = 'No such row'`)
|
||||
{
|
||||
# We are behind the last row of the result set.
|
||||
let $process_result= 0;
|
||||
}
|
||||
inc $rowno;
|
||||
}
|
||||
}
|
||||
if (!$found)
|
||||
{
|
||||
echo # Timeout in include/wait_show_condition.inc for $wait_condition;
|
||||
echo # show_statement : $show_statement;
|
||||
echo # field : $field;
|
||||
echo # condition : $condition;
|
||||
echo # max_run_time : $max_run_time;
|
||||
}
|
||||
|
@ -2,14 +2,23 @@
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until the passed number ($count_sessions) of concurrent sessions was
|
||||
# observed via
|
||||
# Waits until the passed number ($count_sessions) of concurrent sessions or
|
||||
# a smaller number was observed via
|
||||
# SHOW STATUS LIKE 'Threads_connected'
|
||||
# or the operation times out.
|
||||
# Note: Starting with 5.1 we could also use
|
||||
# SELECT COUNT(*) FROM information_schema.processlist
|
||||
# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this
|
||||
# runs in all versions 5.0+
|
||||
# Note:
|
||||
# 1. We wait for $current_sessions <= $count_sessions because in the use case
|
||||
# with count_sessions.inc before and wait_until_count_sessions.inc after
|
||||
# the core of the test it could happen that the disconnects of sessions
|
||||
# belonging to the preceeding test are not finished.
|
||||
# sessions at test begin($count_sessions) = m + n
|
||||
# sessions of the previous test which will be soon disconnected = n (n >= 0)
|
||||
# sessions at test end ($current sessions, assuming the test disconnects
|
||||
# all additional sessions) = m
|
||||
# 2. Starting with 5.1 we could also use
|
||||
# SELECT COUNT(*) FROM information_schema.processlist
|
||||
# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this
|
||||
# runs in all versions 5.0+
|
||||
#
|
||||
#
|
||||
# USAGE
|
||||
@ -19,7 +28,7 @@
|
||||
#
|
||||
# OR typical example of a test which uses more than one session
|
||||
# Such a test could harm successing tests if there is no server shutdown
|
||||
# and start between.cw
|
||||
# and start between.
|
||||
#
|
||||
# If the testing box is slow than the disconnect of sessions belonging to
|
||||
# the current test might happen when the successing test gets executed.
|
||||
@ -79,10 +88,14 @@
|
||||
# backup.test, grant3.test
|
||||
#
|
||||
#
|
||||
# Created: 2009-01-14 mleich
|
||||
# Created:
|
||||
# 2009-01-14 mleich
|
||||
# Modified:
|
||||
# 2009-02-24 mleich Fix Bug#43114 wait_until_count_sessions too restrictive,
|
||||
# random PB failures
|
||||
#
|
||||
|
||||
let $wait_counter= 50;
|
||||
let $wait_counter= 100;
|
||||
if ($wait_timeout)
|
||||
{
|
||||
let $wait_counter= `SELECT $wait_timeout * 10`;
|
||||
@ -93,7 +106,7 @@ let $wait_timeout= 0;
|
||||
while ($wait_counter)
|
||||
{
|
||||
let $current_sessions= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1);
|
||||
let $success= `SELECT $current_sessions = $count_sessions`;
|
||||
let $success= `SELECT $current_sessions <= $count_sessions`;
|
||||
if ($success)
|
||||
{
|
||||
let $wait_counter= 0;
|
||||
@ -107,6 +120,7 @@ while ($wait_counter)
|
||||
if (!$success)
|
||||
{
|
||||
--echo # Timeout in wait_until_count_sessions.inc
|
||||
--echo # Number of sessions expected: $count_sessions found: $current_sessions
|
||||
--echo # Number of sessions expected: <= $count_sessions found: $current_sessions
|
||||
SHOW PROCESSLIST;
|
||||
}
|
||||
|
||||
|
@ -291,7 +291,7 @@ Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
109 POINT(25.4166666666667 25.4166666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
@ -325,8 +325,8 @@ fid IsClosed(g)
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
117 POINT(55.5885277530424 17.426536064114)
|
||||
118 POINT(55.5885277530424 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
|
@ -1,5 +1,5 @@
|
||||
set SQL_LOG_BIN=0;
|
||||
drop table if exists t1, t2, t3;
|
||||
drop table if exists t1, t2, t3, t4;
|
||||
create table t4(n int);
|
||||
backup table t4 to '../bogus';
|
||||
Table Op Msg_type Msg_text
|
||||
|
@ -291,7 +291,7 @@ Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
109 POINT(25.4166666666667 25.4166666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
@ -325,8 +325,8 @@ fid IsClosed(g)
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
117 POINT(55.5885277530424 17.426536064114)
|
||||
118 POINT(55.5885277530424 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
|
@ -1,4 +1,5 @@
|
||||
drop table if exists t1;
|
||||
drop table if exists t1,t2;
|
||||
drop view if exists v1;
|
||||
create table t1(n int not null, key(n), key(n), key(n), key(n));
|
||||
check table t1 extended;
|
||||
insert into t1 values (200000);
|
||||
|
@ -1,15 +1,23 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (a int) engine=innodb;
|
||||
start transaction with consistent snapshot;
|
||||
insert into t1 values(1);
|
||||
select * from t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
# Establish connection con1 (user=root)
|
||||
# Establish connection con2 (user=root)
|
||||
# Switch to connection con1
|
||||
CREATE TABLE t1 (a INT) ENGINE=innodb;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
# Switch to connection con2
|
||||
INSERT INTO t1 VALUES(1);
|
||||
# Switch to connection con1
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
commit;
|
||||
delete from t1;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
select * from t1;
|
||||
COMMIT;
|
||||
DELETE FROM t1;
|
||||
START TRANSACTION;
|
||||
# Switch to connection con2
|
||||
INSERT INTO t1 VALUES(1);
|
||||
# Switch to connection con1
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
commit;
|
||||
drop table t1;
|
||||
COMMIT;
|
||||
# Switch to connection default + close connections con1 and con2
|
||||
DROP TABLE t1;
|
||||
|
@ -1,9 +1,9 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (n int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
select * from t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (n INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT * FROM t1;
|
||||
n
|
||||
1
|
||||
2
|
||||
3
|
||||
drop table t1;
|
||||
DROP TABLE t1;
|
||||
|
@ -155,3 +155,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||
EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
|
||||
ERROR HY000: Key 'a' doesn't exist in table 't1'
|
||||
DROP TABLE t1;
|
||||
|
@ -1,39 +1,57 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (a int) engine=innodb;
|
||||
begin;
|
||||
insert into t1 values(1);
|
||||
flush tables with read lock;
|
||||
select * from t1;
|
||||
# Establish connection con1 (user=root)
|
||||
# Establish connection con2 (user=root)
|
||||
# Establish connection con3 (user=root)
|
||||
# Switch to connection con1
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a INT) ENGINE=innodb;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES(1);
|
||||
# Switch to connection con2
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
commit;
|
||||
select * from t1;
|
||||
# Switch to connection con1
|
||||
COMMIT;
|
||||
# Switch to connection con2
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
unlock tables;
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
UNLOCK TABLES;
|
||||
# Switch to connection con1
|
||||
# Switch to connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
a
|
||||
1
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
flush tables with read lock;
|
||||
commit;
|
||||
# Switch to connection con2
|
||||
BEGIN;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
# Switch to connection con3
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
# Switch to connection con1
|
||||
COMMIT;
|
||||
# Switch to connection con2
|
||||
a
|
||||
1
|
||||
unlock tables;
|
||||
commit;
|
||||
begin;
|
||||
insert into t1 values(10);
|
||||
flush tables with read lock;
|
||||
commit;
|
||||
unlock tables;
|
||||
flush tables with read lock;
|
||||
unlock tables;
|
||||
begin;
|
||||
select * from t1;
|
||||
# Switch to connection con3
|
||||
UNLOCK TABLES;
|
||||
# Switch to connection con2
|
||||
COMMIT;
|
||||
# Switch to connection con1
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES(10);
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
COMMIT;
|
||||
UNLOCK TABLES;
|
||||
# Switch to connection con2
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
UNLOCK TABLES;
|
||||
BEGIN;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
10
|
||||
show create database test;
|
||||
SHOW CREATE DATABASE test;
|
||||
Database Create Database
|
||||
test CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */
|
||||
drop table t1;
|
||||
DROP TABLE t1;
|
||||
# Switch to connection default and close connections con1, con2, con3
|
||||
|
@ -1,15 +1,23 @@
|
||||
create table t1 (a int) engine=innodb;
|
||||
reset master;
|
||||
set autocommit=0;
|
||||
insert t1 values (1);
|
||||
flush tables with read lock;
|
||||
show master status;
|
||||
# Establish connection con1 (user=root)
|
||||
# Establish connection con2 (user=root)
|
||||
# Switch to connection con1
|
||||
CREATE TABLE t1 (a INT) ENGINE=innodb;
|
||||
RESET MASTER;
|
||||
SET AUTOCOMMIT=0;
|
||||
INSERT t1 VALUES (1);
|
||||
# Switch to connection con2
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
SHOW MASTER STATUS;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 98
|
||||
commit;
|
||||
show master status;
|
||||
# Switch to connection con1
|
||||
COMMIT;
|
||||
# Switch to connection con2
|
||||
SHOW MASTER STATUS;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 98
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
set autocommit=1;
|
||||
UNLOCK TABLES;
|
||||
# Switch to connection con1
|
||||
DROP TABLE t1;
|
||||
SET AUTOCOMMIT=1;
|
||||
# Switch to connection default and close connections con1 and con2
|
||||
|
@ -1,9 +1,12 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (kill_id int);
|
||||
insert into t1 values(connection_id());
|
||||
flush tables with read lock;
|
||||
select ((@id := kill_id) - kill_id) from t1;
|
||||
SET @old_concurrent_insert= @@global.concurrent_insert;
|
||||
SET @@global.concurrent_insert= 0;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (kill_id INT);
|
||||
INSERT INTO t1 VALUES(connection_id());
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
SELECT ((@id := kill_id) - kill_id) FROM t1;
|
||||
((@id := kill_id) - kill_id)
|
||||
0
|
||||
kill connection @id;
|
||||
drop table t1;
|
||||
KILL CONNECTION @id;
|
||||
DROP TABLE t1;
|
||||
SET @@global.concurrent_insert= @old_concurrent_insert;
|
||||
|
@ -506,3 +506,7 @@ SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||
MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE)
|
||||
2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a TEXT);
|
||||
SELECT GROUP_CONCAT(a) AS st FROM t1 HAVING MATCH(st) AGAINST('test' IN BOOLEAN MODE);
|
||||
ERROR HY000: Incorrect arguments to AGAINST
|
||||
DROP TABLE t1;
|
||||
|
@ -61,7 +61,7 @@ grp sum
|
||||
NULL NULL
|
||||
1 7
|
||||
2 20.25
|
||||
3 45.483163247594
|
||||
3 45.4831632475944
|
||||
create table t2 (grp int, a bigint unsigned, c char(10));
|
||||
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
|
||||
replace into t2 select grp, a, c from t1 limit 2,1;
|
||||
@ -1195,7 +1195,7 @@ std(s1/s2)
|
||||
0.21325764
|
||||
select std(o1/o2) from bug22555;
|
||||
std(o1/o2)
|
||||
0.21325763586649
|
||||
0.213257635866493
|
||||
select std(e1/e2) from bug22555;
|
||||
std(e1/e2)
|
||||
0.21325764
|
||||
@ -1221,7 +1221,7 @@ round(std(s1/s2), 17)
|
||||
0.21325763586649341
|
||||
select std(o1/o2) from bug22555;
|
||||
std(o1/o2)
|
||||
0.21325763586649
|
||||
0.213257635866493
|
||||
select round(std(e1/e2), 17) from bug22555;
|
||||
round(std(e1/e2), 17)
|
||||
0.21325763586649341
|
||||
@ -1246,7 +1246,7 @@ round(std(s1/s2), 17)
|
||||
0.21325763586649341
|
||||
select std(o1/o2) from bug22555;
|
||||
std(o1/o2)
|
||||
0.21325763586649
|
||||
0.213257635866493
|
||||
select round(std(e1/e2), 17) from bug22555;
|
||||
round(std(e1/e2), 17)
|
||||
0.21325763586649341
|
||||
|
@ -60,7 +60,7 @@ Warnings:
|
||||
Note 1003 select ln(exp(10)) AS `ln(exp(10))`,exp((ln(sqrt(10)) * 2)) AS `exp(ln(sqrt(10))*2)`,ln(-(1)) AS `ln(-1)`,ln(0) AS `ln(0)`,ln(NULL) AS `ln(NULL)`
|
||||
select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
|
||||
log2(8) log2(15) log2(-2) log2(0) log2(NULL)
|
||||
3 3.9068905956085 NULL NULL NULL
|
||||
3 3.90689059560852 NULL NULL NULL
|
||||
explain extended select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -68,7 +68,7 @@ Warnings:
|
||||
Note 1003 select log2(8) AS `log2(8)`,log2(15) AS `log2(15)`,log2(-(2)) AS `log2(-2)`,log2(0) AS `log2(0)`,log2(NULL) AS `log2(NULL)`
|
||||
select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
|
||||
log10(100) log10(18) log10(-4) log10(0) log10(NULL)
|
||||
2 1.2552725051033 NULL NULL NULL
|
||||
2 1.25527250510331 NULL NULL NULL
|
||||
explain extended select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -85,7 +85,7 @@ Note 1003 select pow(10,log10(10)) AS `pow(10,log10(10))`,pow(2,4) AS `power(2,4
|
||||
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
||||
select rand(999999),rand();
|
||||
rand(999999) rand()
|
||||
0.014231365187309 0.028870999839968
|
||||
0.0142313651873091 0.028870999839968
|
||||
explain extended select rand(999999),rand();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -101,7 +101,7 @@ Warnings:
|
||||
Note 1003 select pi() AS `pi()`,format(sin((pi() / 2)),6) AS `format(sin(pi()/2),6)`,format(cos((pi() / 2)),6) AS `format(cos(pi()/2),6)`,format(abs(tan(pi())),6) AS `format(abs(tan(pi())),6)`,format((1 / tan(1)),6) AS `format(cot(1),6)`,format(asin(1),6) AS `format(asin(1),6)`,format(acos(0),6) AS `format(acos(0),6)`,format(atan(1),6) AS `format(atan(1),6)`
|
||||
select degrees(pi()),radians(360);
|
||||
degrees(pi()) radians(360)
|
||||
180 6.2831853071796
|
||||
180 6.28318530717959
|
||||
SELECT ACOS(1.0);
|
||||
ACOS(1.0)
|
||||
0
|
||||
@ -321,7 +321,7 @@ mod(5, cast(-2 as unsigned)) mod(5, 18446744073709551614) mod(5, -2)
|
||||
5 5 1
|
||||
select pow(cast(-2 as unsigned), 5), pow(18446744073709551614, 5), pow(-2, 5);
|
||||
pow(cast(-2 as unsigned), 5) pow(18446744073709551614, 5) pow(-2, 5)
|
||||
2.1359870359209e+96 2.1359870359209e+96 -32
|
||||
2.13598703592091e+96 2.13598703592091e+96 -32
|
||||
CREATE TABLE t1 (a timestamp, b varchar(20), c bit(1));
|
||||
INSERT INTO t1 VALUES('1998-09-23', 'str1', 1), ('2003-03-25', 'str2', 0);
|
||||
SELECT a DIV 900 y FROM t1 GROUP BY y;
|
||||
@ -360,4 +360,34 @@ SELECT a DIV 2 FROM t1 UNION SELECT a DIV 2 FROM t1;
|
||||
a DIV 2
|
||||
0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a DOUBLE);
|
||||
INSERT INTO t1 VALUES (-1.1), (1.1),
|
||||
(-1.5), (1.5),
|
||||
(-1.9), (1.9),
|
||||
(-2.1), (2.1),
|
||||
(-2.5), (2.5),
|
||||
(-2.9), (2.9),
|
||||
# Check numbers with absolute values > 2^53 - 1
|
||||
# (see comments for MAX_EXACT_INTEGER)
|
||||
(-1e16 - 0.5), (1e16 + 0.5),
|
||||
(-1e16 - 1.5), (1e16 + 1.5);
|
||||
SELECT a, ROUND(a) FROM t1;
|
||||
a ROUND(a)
|
||||
-1.1 -1
|
||||
1.1 1
|
||||
-1.5 -2
|
||||
1.5 2
|
||||
-1.9 -2
|
||||
1.9 2
|
||||
-2.1 -2
|
||||
2.1 2
|
||||
-2.5 -2
|
||||
2.5 2
|
||||
-2.9 -3
|
||||
2.9 3
|
||||
-1e+16 -10000000000000000
|
||||
1e+16 10000000000000000
|
||||
-1e+16 -10000000000000002
|
||||
1e+16 10000000000000002
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -1131,10 +1131,10 @@ cast(rtrim(ltrim(' 20.06 ')) as decimal(19,2))
|
||||
20.06
|
||||
select conv("18383815659218730760",10,10) + 0;
|
||||
conv("18383815659218730760",10,10) + 0
|
||||
1.8383815659219e+19
|
||||
1.83838156592187e+19
|
||||
select "18383815659218730760" + 0;
|
||||
"18383815659218730760" + 0
|
||||
1.8383815659219e+19
|
||||
1.83838156592187e+19
|
||||
CREATE TABLE t1 (code varchar(10));
|
||||
INSERT INTO t1 VALUES ('a12'), ('A12'), ('a13');
|
||||
SELECT ASCII(code), code FROM t1 WHERE code='A12';
|
||||
@ -2181,4 +2181,10 @@ def format(a, 2) 253 20 4 Y 0 2 8
|
||||
format(a, 2)
|
||||
1.33
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (c DATE, aa VARCHAR(30));
|
||||
INSERT INTO t1 VALUES ('2008-12-31','aaaaaa');
|
||||
SELECT DATE_FORMAT(c, GET_FORMAT(DATE, 'eur')) h, CONCAT(UPPER(aa),', ', aa) i FROM t1;
|
||||
h i
|
||||
31.12.2008 AAAAAA, aaaaaa
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -284,7 +284,7 @@ Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
109 POINT(25.4166666666667 25.4166666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon;
|
||||
fid Area(g)
|
||||
@ -318,8 +318,8 @@ fid IsClosed(g)
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
117 POINT(55.5885277530424 17.426536064114)
|
||||
118 POINT(55.5885277530424 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon;
|
||||
fid Area(g)
|
||||
@ -651,11 +651,11 @@ insert into t1 values ('85984',GeomFromText('MULTIPOLYGON(((-115.006363
|
||||
select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from
|
||||
t1 where object_id=85998;
|
||||
object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo))
|
||||
85998 MULTIPOLYGON 0 POINT(115.31877315203 -36.237472821022)
|
||||
85998 MULTIPOLYGON 0 POINT(115.318773152032 -36.2374728210215)
|
||||
select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from
|
||||
t1 where object_id=85984;
|
||||
object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo))
|
||||
85984 MULTIPOLYGON 0 POINT(-114.87787186923 36.33101763469)
|
||||
85984 MULTIPOLYGON 0 POINT(-114.877871869233 36.3310176346905)
|
||||
drop table t1;
|
||||
create table t1 (fl geometry not null);
|
||||
insert into t1 values (1);
|
||||
|
@ -162,7 +162,7 @@ Warnings:
|
||||
Warning 1364 Field 'ssl_cipher' doesn't have a default value
|
||||
Warning 1364 Field 'x509_issuer' doesn't have a default value
|
||||
Warning 1364 Field 'x509_subject' doesn't have a default value
|
||||
insert into mysql.db (host, db, user, select_priv) values
|
||||
insert into mysql.db (host, db, user, select_priv) values
|
||||
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||
alter table mysql.db order by db asc;
|
||||
flush privileges;
|
||||
@ -262,7 +262,7 @@ drop user mysqltest_1@localhost;
|
||||
SET NAMES koi8r;
|
||||
CREATE DATABASE ÂÄ;
|
||||
USE ÂÄ;
|
||||
CREATE TABLE ÔÁÂ (ËÏÌ int);
|
||||
CREATE TABLE ÔÁÂ (ËÏÌ INT);
|
||||
GRANT SELECT ON ÂÄ.* TO ÀÚÅÒ@localhost;
|
||||
SHOW GRANTS FOR ÀÚÅÒ@localhost;
|
||||
Grants for ÀÚÅÒ@localhost
|
||||
@ -381,21 +381,21 @@ grant update (a) on mysqltest_1.t1 to mysqltest_3@localhost;
|
||||
grant select (b) on mysqltest_1.t2 to mysqltest_3@localhost;
|
||||
grant select (c) on mysqltest_2.t1 to mysqltest_3@localhost;
|
||||
grant update (d) on mysqltest_2.t2 to mysqltest_3@localhost;
|
||||
SELECT * FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
ORDER BY TABLE_NAME,COLUMN_NAME,PRIVILEGE_TYPE;
|
||||
SELECT * FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
ORDER BY TABLE_NAME,COLUMN_NAME,PRIVILEGE_TYPE;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_3'@'localhost' NULL mysqltest_1 t1 a UPDATE NO
|
||||
'mysqltest_3'@'localhost' NULL mysqltest_2 t1 c SELECT NO
|
||||
'mysqltest_3'@'localhost' NULL mysqltest_1 t2 b SELECT NO
|
||||
'mysqltest_3'@'localhost' NULL mysqltest_2 t2 d UPDATE NO
|
||||
SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
ORDER BY TABLE_NAME,PRIVILEGE_TYPE;
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
ORDER BY TABLE_NAME,PRIVILEGE_TYPE;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
SELECT * from INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
ORDER BY TABLE_SCHEMA,PRIVILEGE_TYPE;
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
ORDER BY TABLE_SCHEMA,PRIVILEGE_TYPE;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA PRIVILEGE_TYPE IS_GRANTABLE
|
||||
SELECT * from INFORMATION_SCHEMA.USER_PRIVILEGES
|
||||
WHERE GRANTEE = '''mysqltest_3''@''localhost'''
|
||||
@ -457,7 +457,7 @@ Privilege Context Comment
|
||||
Alter Tables To alter the table
|
||||
Alter routine Functions,Procedures To alter or drop stored functions/procedures
|
||||
Create Databases,Tables,Indexes To create new databases and tables
|
||||
Create routine Functions,Procedures To use CREATE FUNCTION/PROCEDURE
|
||||
Create routine Databases To use CREATE FUNCTION/PROCEDURE
|
||||
Create temporary tables Databases To use CREATE TEMPORARY TABLE
|
||||
Create view Tables To create new views
|
||||
Create user Server Admin To create new users
|
||||
@ -880,11 +880,11 @@ flush privileges;
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
CREATE DATABASE mysqltest3;
|
||||
use mysqltest3;
|
||||
USE mysqltest3;
|
||||
CREATE TABLE t_nn (c1 INT);
|
||||
CREATE VIEW v_nn AS SELECT * FROM t_nn;
|
||||
CREATE DATABASE mysqltest2;
|
||||
use mysqltest2;
|
||||
USE mysqltest2;
|
||||
CREATE TABLE t_nn (c1 INT);
|
||||
CREATE VIEW v_nn AS SELECT * FROM t_nn;
|
||||
CREATE VIEW v_yn AS SELECT * FROM t_nn;
|
||||
@ -954,7 +954,7 @@ DROP TABLE mysqltest3.t_nn;
|
||||
DROP DATABASE mysqltest3;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'mysqltest_1'@'localhost';
|
||||
DROP USER 'mysqltest_1'@'localhost';
|
||||
use test;
|
||||
USE test;
|
||||
create user mysqltest1_thisisreallytoolong;
|
||||
ERROR HY000: String 'mysqltest1_thisisreallytoolong' is too long for user name (should be no longer than 16)
|
||||
GRANT CREATE ON mysqltest.* TO 1234567890abcdefGHIKL@localhost;
|
||||
@ -1106,16 +1106,16 @@ DROP DATABASE mysqltest1;
|
||||
DROP DATABASE mysqltest2;
|
||||
DROP USER mysqltest_1@localhost;
|
||||
DROP USER mysqltest_2@localhost;
|
||||
use test;
|
||||
USE test;
|
||||
CREATE TABLE t1 (f1 int, f2 int);
|
||||
INSERT INTO t1 VALUES(1,1), (2,2);
|
||||
CREATE DATABASE db27878;
|
||||
GRANT UPDATE(f1) ON t1 TO 'mysqltest_1'@'localhost';
|
||||
GRANT SELECT ON `test`.* TO 'mysqltest_1'@'localhost';
|
||||
GRANT ALL ON db27878.* TO 'mysqltest_1'@'localhost';
|
||||
use db27878;
|
||||
USE db27878;
|
||||
CREATE SQL SECURITY INVOKER VIEW db27878.v1 AS SELECT * FROM test.t1;
|
||||
use db27878;
|
||||
USE db27878;
|
||||
UPDATE v1 SET f2 = 4;
|
||||
ERROR HY000: View 'db27878.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||
SELECT * FROM test.t1;
|
||||
@ -1127,7 +1127,7 @@ REVOKE SELECT ON `test`.* FROM 'mysqltest_1'@'localhost';
|
||||
REVOKE ALL ON db27878.* FROM 'mysqltest_1'@'localhost';
|
||||
DROP USER mysqltest_1@localhost;
|
||||
DROP DATABASE db27878;
|
||||
use test;
|
||||
USE test;
|
||||
DROP TABLE t1;
|
||||
drop table if exists test;
|
||||
Warnings:
|
||||
|
@ -433,7 +433,7 @@ USE db1;
|
||||
SELECT c FROM t2;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
|
||||
SELECT * FROM t2;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for table 't2'
|
||||
SELECT * FROM t1 JOIN t2 USING (b);
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
|
||||
USE test;
|
||||
|
@ -2429,3 +2429,18 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
Warnings:
|
||||
Note 1003 select sql_buffer_result `test`.`t1`.`a` AS `a`,(max(`test`.`t1`.`b`) + 1) AS `max(b)+1` from `test`.`t1` where (`test`.`t1`.`a` = 0) group by `test`.`t1`.`a`
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int, b int, c int, d int,
|
||||
KEY foo (c,d,a,b), KEY bar (c,a,b,d));
|
||||
INSERT INTO t1 VALUES (1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3), (1, 1, 1, 4);
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT a,b,c+1,d FROM t1;
|
||||
EXPLAIN SELECT DISTINCT c FROM t1 WHERE d=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL foo 10 NULL 9 Using where; Using index for group-by
|
||||
SELECT DISTINCT c FROM t1 WHERE d=4;
|
||||
c
|
||||
1
|
||||
2
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -75,7 +75,7 @@ t2
|
||||
t3
|
||||
t5
|
||||
v1
|
||||
select c,table_name from v1
|
||||
select c,table_name from v1
|
||||
inner join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||||
where v1.c like "t%";
|
||||
c table_name
|
||||
@ -94,7 +94,7 @@ t4 t4
|
||||
t2 t2
|
||||
t3 t3
|
||||
t5 t5
|
||||
select c,table_name from v1
|
||||
select c,table_name from v1
|
||||
left join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||||
where v1.c like "t%";
|
||||
c table_name
|
||||
@ -173,7 +173,7 @@ a int(11) YES NULL
|
||||
create view mysqltest.v1 (c) as select a from mysqltest.t1;
|
||||
grant select (a) on mysqltest.t1 to mysqltest_2@localhost;
|
||||
grant select on mysqltest.v1 to mysqltest_3;
|
||||
select table_name, column_name, privileges from information_schema.columns
|
||||
select table_name, column_name, privileges from information_schema.columns
|
||||
where table_schema = 'mysqltest' and table_name = 't1';
|
||||
table_name column_name privileges
|
||||
t1 a select
|
||||
@ -249,7 +249,7 @@ begin
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
end|
|
||||
select parameter_style, sql_data_access, dtd_identifier
|
||||
select parameter_style, sql_data_access, dtd_identifier
|
||||
from information_schema.routines;
|
||||
parameter_style sql_data_access dtd_identifier
|
||||
SQL CONTAINS SQL NULL
|
||||
@ -280,7 +280,7 @@ sub1 sub1
|
||||
select count(*) from information_schema.ROUTINES;
|
||||
count(*)
|
||||
2
|
||||
create view v1 as select routine_schema, routine_name from information_schema.routines
|
||||
create view v1 as select routine_schema, routine_name from information_schema.routines
|
||||
order by routine_schema, routine_name;
|
||||
select * from v1;
|
||||
routine_schema routine_name
|
||||
@ -532,7 +532,7 @@ drop view v1;
|
||||
create table t1(a NUMERIC(5,3), b NUMERIC(5,1), c float(5,2),
|
||||
d NUMERIC(6,4), e float, f DECIMAL(6,3), g int(11), h DOUBLE(10,3),
|
||||
i DOUBLE);
|
||||
select COLUMN_NAME,COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH,
|
||||
select COLUMN_NAME,COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH,
|
||||
CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE
|
||||
from information_schema.columns where table_name= 't1';
|
||||
COLUMN_NAME COLUMN_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE
|
||||
@ -589,7 +589,7 @@ TABLE_NAME= "vo";
|
||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
|
||||
drop view vo;
|
||||
select TABLE_NAME,TABLE_TYPE,ENGINE
|
||||
from information_schema.tables
|
||||
from information_schema.tables
|
||||
where table_schema='information_schema' limit 2;
|
||||
TABLE_NAME TABLE_TYPE ENGINE
|
||||
CHARACTER_SETS SYSTEM VIEW MEMORY
|
||||
@ -700,7 +700,7 @@ where table_schema="information_schema" and table_name="COLUMNS" and
|
||||
column_type
|
||||
varchar(64)
|
||||
varchar(64)
|
||||
select TABLE_ROWS from information_schema.tables where
|
||||
select TABLE_ROWS from information_schema.tables where
|
||||
table_schema="information_schema" and table_name="COLUMNS";
|
||||
TABLE_ROWS
|
||||
NULL
|
||||
@ -733,7 +733,7 @@ count(*)
|
||||
drop view a2, a1;
|
||||
drop table t_crashme;
|
||||
select table_schema,table_name, column_name from
|
||||
information_schema.columns
|
||||
information_schema.columns
|
||||
where data_type = 'longtext';
|
||||
table_schema table_name column_name
|
||||
information_schema COLUMNS COLUMN_DEFAULT
|
||||
@ -755,7 +755,7 @@ TABLES UPDATE_TIME datetime
|
||||
TABLES CHECK_TIME datetime
|
||||
TRIGGERS CREATED datetime
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES A
|
||||
WHERE NOT EXISTS
|
||||
WHERE NOT EXISTS
|
||||
(SELECT * FROM INFORMATION_SCHEMA.COLUMNS B
|
||||
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
|
||||
AND A.TABLE_NAME = B.TABLE_NAME);
|
||||
@ -784,7 +784,7 @@ x_float NULL NULL
|
||||
x_double_precision NULL NULL
|
||||
drop table t1;
|
||||
grant select on test.* to mysqltest_4@localhost;
|
||||
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS
|
||||
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS
|
||||
where COLUMN_NAME='TABLE_NAME';
|
||||
TABLE_NAME COLUMN_NAME PRIVILEGES
|
||||
COLUMNS TABLE_NAME select
|
||||
@ -1027,7 +1027,7 @@ BEGIN
|
||||
SELECT 'foo' FROM DUAL;
|
||||
END |
|
||||
ERROR 42000: Unknown database 'information_schema'
|
||||
select ROUTINE_NAME from routines;
|
||||
select ROUTINE_NAME from routines;
|
||||
ROUTINE_NAME
|
||||
grant all on information_schema.* to 'user1'@'localhost';
|
||||
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
||||
|
@ -188,7 +188,7 @@ Field Type Null Key Default Extra
|
||||
f1 char(4) YES NULL
|
||||
show create view v2;
|
||||
View Create View
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`testdb_2`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v2` AS select `v1`.`f1` AS `f1` from `testdb_1`.`v1`
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`testdb_2`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `v1`.`f1` AS `f1` from `testdb_1`.`v1`
|
||||
show create view testdb_1.v1;
|
||||
ERROR 42000: SHOW VIEW command denied to user 'testdb_2'@'localhost' for table 'v1'
|
||||
select table_name from information_schema.columns a
|
||||
|
17
mysql-test/r/innodb_bug42419.result
Normal file
17
mysql-test/r/innodb_bug42419.result
Normal file
@ -0,0 +1,17 @@
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b INT) ENGINE = InnoDB;
|
||||
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT = 0;
|
||||
CREATE TEMPORARY TABLE t1_tmp ( b INT );
|
||||
INSERT INTO t1_tmp (b) SELECT b FROM t1 WHERE a = 3;
|
||||
INSERT INTO t1_tmp (b) SELECT b FROM t1 WHERE a = 2;
|
||||
SET AUTOCOMMIT = 0;
|
||||
CREATE TEMPORARY TABLE t2_tmp ( a int, new_a int );
|
||||
INSERT INTO t2_tmp VALUES (1,51),(2,52),(3,53);
|
||||
UPDATE t1 SET a = (SELECT new_a FROM t2_tmp WHERE t2_tmp.a = t1.a) WHERE a = 1;
|
||||
UPDATE t1 SET a = (SELECT new_a FROM t2_tmp WHERE t2_tmp.a = t1.a) WHERE a = 2;
|
||||
INSERT INTO t1_tmp (b) SELECT b FROM t1 WHERE a = 1;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
Reap the server message for connection user2 UPDATE t1 ...
|
||||
UPDATE t1 SET a = (SELECT new_a FROM t2_tmp WHERE t2_tmp.a = t1.a) WHERE a = 3;
|
||||
DROP TABLE t1;
|
@ -291,7 +291,7 @@ Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
109 POINT(25.4166666666667 25.4166666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
@ -325,8 +325,8 @@ fid IsClosed(g)
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
117 POINT(55.5885277530424 17.426536064114)
|
||||
118 POINT(55.5885277530424 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
|
@ -51,10 +51,10 @@ ERROR HY000: Can't execute the query because you have a conflicting read lock
|
||||
UNLOCK TABLES;
|
||||
DROP DATABASE mysqltest_1;
|
||||
ERROR HY000: Can't drop database 'mysqltest_1'; database doesn't exist
|
||||
use mysql;
|
||||
USE mysql;
|
||||
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
|
||||
FLUSH TABLES;
|
||||
use mysql;
|
||||
USE mysql;
|
||||
SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
|
||||
OPTIMIZE TABLES columns_priv, db, host, user;
|
||||
Table Op Msg_type Msg_text
|
||||
@ -65,7 +65,7 @@ mysql.user optimize status OK
|
||||
UNLOCK TABLES;
|
||||
Select_priv
|
||||
N
|
||||
use test;
|
||||
USE test;
|
||||
use test;
|
||||
CREATE TABLE t1 (c1 int);
|
||||
LOCK TABLE t1 WRITE;
|
||||
@ -93,7 +93,7 @@ create table t1 (a int);
|
||||
connection: locker
|
||||
lock tables t1 read;
|
||||
connection: writer
|
||||
create table t2 like t1;;
|
||||
create table t2 like t1;
|
||||
connection: default
|
||||
kill query
|
||||
ERROR 70100: Query execution was interrupted
|
||||
|
9
mysql-test/r/lowercase_utf8.result
Normal file
9
mysql-test/r/lowercase_utf8.result
Normal file
@ -0,0 +1,9 @@
|
||||
set names utf8;
|
||||
create table `А` (id int);
|
||||
show tables from test like 'А';
|
||||
Tables_in_test (А)
|
||||
а
|
||||
show tables from test like 'а';
|
||||
Tables_in_test (а)
|
||||
а
|
||||
drop table `А`;
|
@ -375,7 +375,7 @@ update t2, t1 set t2.field=t1.field
|
||||
where t1.id1=t2.id2 and 0=1;
|
||||
delete t1, t2 from t2 inner join t1 on t1.id1=t2.id2
|
||||
where 0=1;
|
||||
delete t1, t2 from t2,t1
|
||||
delete t1, t2 from t2,t1
|
||||
where t1.id1=t2.id2 and 0=1;
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 ( a int );
|
||||
@ -443,12 +443,12 @@ delete t1 from t1,t2 where t1.col1 < (select max(col1) from t1) and t1.col1 = t2
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
drop table t1,t2;
|
||||
create table t1 (
|
||||
aclid bigint not null primary key,
|
||||
status tinyint(1) not null
|
||||
aclid bigint not null primary key,
|
||||
status tinyint(1) not null
|
||||
) engine = innodb;
|
||||
create table t2 (
|
||||
refid bigint not null primary key,
|
||||
aclid bigint, index idx_acl(aclid)
|
||||
refid bigint not null primary key,
|
||||
aclid bigint, index idx_acl(aclid)
|
||||
) engine = innodb;
|
||||
insert into t2 values(1,null);
|
||||
delete t2, t1 from t2 left join t1 on (t2.aclid=t1.aclid) where t2.refid='1';
|
||||
@ -522,7 +522,7 @@ a b
|
||||
4 4
|
||||
show master status /* there must be the UPDATE query event */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 189
|
||||
master-bin.000001 198
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,2),(3,4),(4,4);
|
||||
@ -532,7 +532,7 @@ UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
||||
ERROR 23000: Duplicate entry '4' for key 1
|
||||
show master status /* there must be the UPDATE query event */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 204
|
||||
master-bin.000001 213
|
||||
drop table t1, t2;
|
||||
drop table if exists t1, t2, t3;
|
||||
CREATE TABLE t1 (a int, PRIMARY KEY (a));
|
||||
|
@ -188,4 +188,8 @@ delimiter
|
||||
2
|
||||
@z:='1' @z=database()
|
||||
1 NULL
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
End of 5.0 tests
|
||||
|
@ -349,17 +349,35 @@ DELIMITER ;
|
||||
ROLLBACK /* added by mysqlbinlog */;
|
||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
CREATE TABLE t1 (c1 CHAR(10));
|
||||
flush logs;
|
||||
FLUSH LOGS;
|
||||
INSERT INTO t1 VALUES ('0123456789');
|
||||
flush logs;
|
||||
FLUSH LOGS;
|
||||
DROP TABLE t1;
|
||||
# Query thread_id=REMOVED exec_time=REMOVED error_code=REMOVED
|
||||
flush logs;
|
||||
create table t1(a int);
|
||||
insert into t1 values(connection_id());
|
||||
flush logs;
|
||||
drop table t1;
|
||||
We expect this value to be 1
|
||||
The bug being tested was that 'Query' lines were not preceded by '#'
|
||||
If the line is in the table, it had to have been preceded by a '#'
|
||||
|
||||
SELECT COUNT(*) AS `BUG#28293_expect_1` FROM patch WHERE a LIKE '%Query%';
|
||||
BUG#28293_expect_1
|
||||
1
|
||||
drop table t1;
|
||||
DROP TABLE patch;
|
||||
FLUSH LOGS;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES(connection_id());
|
||||
FLUSH LOGS;
|
||||
DROP TABLE t1;
|
||||
1
|
||||
DROP TABLE t1;
|
||||
shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql
|
||||
SET @@global.server_id= 4294967295;
|
||||
RESET MASTER;
|
||||
FLUSH LOGS;
|
||||
SELECT
|
||||
(@a:=LOAD_FILE("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
|
||||
IS NOT NULL;
|
||||
(@a:=LOAD_FILE("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
|
||||
IS NOT NULL
|
||||
1
|
||||
*** Unsigned server_id 4294967295 is found: 1 ***
|
||||
SET @@global.server_id= 1;
|
||||
End of 5.0 tests
|
||||
|
@ -93,73 +93,73 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET l
|
||||
|
||||
USE `test`;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t1` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||
INSERT DELAYED IGNORE INTO `t1` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t2`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t2` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
|
||||
INSERT DELAYED IGNORE INTO `t2` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t3`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t3` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t3` DISABLE KEYS */;
|
||||
INSERT DELAYED IGNORE INTO `t3` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t3` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t4`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t4` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t4` DISABLE KEYS */;
|
||||
INSERT DELAYED IGNORE INTO `t4` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t4` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t5`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t5` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t5` DISABLE KEYS */;
|
||||
INSERT DELAYED IGNORE INTO `t5` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t5` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t6`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t6` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t6` DISABLE KEYS */;
|
||||
INSERT IGNORE INTO `t6` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
@ -190,73 +190,73 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET l
|
||||
|
||||
USE `test`;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t1` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||
INSERT DELAYED INTO `t1` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t2`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t2` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
|
||||
INSERT DELAYED INTO `t2` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t3`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t3` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t3` DISABLE KEYS */;
|
||||
INSERT DELAYED INTO `t3` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t3` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t4`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t4` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t4` DISABLE KEYS */;
|
||||
INSERT DELAYED INTO `t4` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t4` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t5`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t5` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t5` DISABLE KEYS */;
|
||||
INSERT DELAYED INTO `t5` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
/*!40000 ALTER TABLE `t5` ENABLE KEYS */;
|
||||
DROP TABLE IF EXISTS `t6`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t6` (
|
||||
`id` int(8) default NULL,
|
||||
`name` varchar(32) default NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
/*!40000 ALTER TABLE `t6` DISABLE KEYS */;
|
||||
INSERT INTO `t6` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -210,7 +210,6 @@ source database
|
||||
"MySQL: The world's most popular ;open source database"
|
||||
echo message echo message
|
||||
|
||||
mysqltest: At line 1: command "false" failed
|
||||
mysqltest: At line 1: Missing argument in exec
|
||||
MySQL
|
||||
"MySQL"
|
||||
@ -378,7 +377,6 @@ mysqltest: At line 1: The argument to dec must be a variable (start with $)
|
||||
mysqltest: At line 1: End of line junk detected: "1000"
|
||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||
mysqltest: At line 1: system command 'false' failed
|
||||
system command 'NonExistsinfComamdn 2> /dev/null' failed
|
||||
test
|
||||
test2
|
||||
|
@ -291,7 +291,7 @@ Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
109 POINT(25.4166666666667 25.4166666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
@ -325,8 +325,8 @@ fid IsClosed(g)
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
117 POINT(55.5885277530424 17.426536064114)
|
||||
118 POINT(55.5885277530424 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
@ -835,7 +835,7 @@ Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
108 POINT(15 15)
|
||||
109 POINT(25.416666666667 25.416666666667)
|
||||
109 POINT(25.4166666666667 25.4166666666667)
|
||||
110 POINT(20 10)
|
||||
SELECT fid, Area(g) FROM gis_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
@ -869,8 +869,8 @@ fid IsClosed(g)
|
||||
116 0
|
||||
SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid;
|
||||
fid AsText(Centroid(g))
|
||||
117 POINT(55.588527753042 17.426536064114)
|
||||
118 POINT(55.588527753042 17.426536064114)
|
||||
117 POINT(55.5885277530424 17.426536064114)
|
||||
118 POINT(55.5885277530424 17.426536064114)
|
||||
119 POINT(2 2)
|
||||
SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid;
|
||||
fid Area(g)
|
||||
|
@ -129,9 +129,11 @@ create table t7 engine=myisam as select * from t7_c;
|
||||
create table t8 engine=myisam as select * from t8_c;
|
||||
create table t9 engine=myisam as select * from t9_c;
|
||||
create table t10 engine=myisam as select * from t10_c;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
DELETE FROM test.backup_info;
|
||||
LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
|
||||
INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
SELECT @the_backup_id:=backup_id FROM test.backup_info;
|
||||
@the_backup_id:=backup_id
|
||||
<the_backup_id>
|
||||
|
@ -227,9 +227,11 @@ hex(h3) NULL
|
||||
hex(i1) NULL
|
||||
hex(i2) NULL
|
||||
hex(i3) NULL
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
DELETE FROM test.backup_info;
|
||||
LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
|
||||
INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
SELECT @the_backup_id:=backup_id FROM test.backup_info;
|
||||
@the_backup_id:=backup_id
|
||||
<the_backup_id>
|
||||
@ -261,9 +263,11 @@ create table t4 (pk int key, a int) engine ndb;
|
||||
insert into t2 values (1,11),(2,12),(3,13),(4,14),(5,15);
|
||||
insert into t3 values (1,21),(2,22),(3,23),(4,24),(5,25);
|
||||
insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
DELETE FROM test.backup_info;
|
||||
LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
|
||||
INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
SELECT @the_backup_id:=backup_id FROM test.backup_info;
|
||||
@the_backup_id:=backup_id
|
||||
<the_backup_id>
|
||||
@ -305,9 +309,11 @@ create table t1
|
||||
insert into t1 values(1, 8388607, 16777215);
|
||||
insert into t1 values(2, -8388608, 0);
|
||||
insert into t1 values(3, -1, 1);
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
DELETE FROM test.backup_info;
|
||||
LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
|
||||
INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
SELECT @the_backup_id:=backup_id FROM test.backup_info;
|
||||
@the_backup_id:=backup_id
|
||||
<the_backup_id>
|
||||
|
@ -77,12 +77,12 @@ INSERT INTO t1 VALUES (1), (2);
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) default NULL
|
||||
);
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
LOCK TABLES `t1` WRITE;
|
||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||
@ -111,12 +111,12 @@ UNLOCK TABLES;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) default NULL
|
||||
);
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
LOCK TABLES `t1` WRITE;
|
||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||
@ -145,12 +145,12 @@ UNLOCK TABLES;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) default NULL
|
||||
);
|
||||
SET character_set_client = @saved_cs_client;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
LOCK TABLES `t1` WRITE;
|
||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||
|
@ -1,3 +1,5 @@
|
||||
set @max_allowed_packet=@@global.max_allowed_packet;
|
||||
set @net_buffer_length=@@global.net_buffer_length;
|
||||
set global max_allowed_packet=100;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '100'
|
||||
@ -33,3 +35,5 @@ len
|
||||
select length(repeat('a',2000));
|
||||
length(repeat('a',2000))
|
||||
2000
|
||||
set global max_allowed_packet=@max_allowed_packet;
|
||||
set global net_buffer_length=@net_buffer_length;
|
||||
|
@ -144,7 +144,7 @@ Key_reads 0
|
||||
load index into cache t3, t2 key (primary,b) ;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t3 preload_keys Error Table 'test.t3' doesn't exist
|
||||
test.t3 preload_keys error Corrupt
|
||||
test.t3 preload_keys status Operation failed
|
||||
test.t2 preload_keys status OK
|
||||
show status like "key_read%";
|
||||
Variable_name Value
|
||||
@ -159,7 +159,7 @@ Key_reads 0
|
||||
load index into cache t3 key (b), t2 key (c) ;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t3 preload_keys Error Table 'test.t3' doesn't exist
|
||||
test.t3 preload_keys error Corrupt
|
||||
test.t3 preload_keys status Operation failed
|
||||
test.t2 preload_keys Error Key 'c' doesn't exist in table 't2'
|
||||
test.t2 preload_keys status Operation failed
|
||||
show status like "key_read%";
|
||||
|
@ -235,7 +235,7 @@ execute stmt1;
|
||||
prepare stmt1 from "insert into t1 select i from t1";
|
||||
execute stmt1;
|
||||
execute stmt1;
|
||||
prepare stmt1 from "select * from t1 into outfile 'f1.txt'";
|
||||
prepare stmt1 from "select * from t1 into outfile '<MYSQLTEST_VARDIR>/tmp/f1.txt'";
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
drop table t1;
|
||||
@ -1386,13 +1386,13 @@ execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t4 repair Error Table 'test.t4' doesn't exist
|
||||
test.t4 repair error Corrupt
|
||||
test.t4 repair status Operation failed
|
||||
test.t3 repair status OK
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t4 repair Error Table 'test.t4' doesn't exist
|
||||
test.t4 repair error Corrupt
|
||||
test.t4 repair status Operation failed
|
||||
test.t3 repair status OK
|
||||
prepare stmt from "optimize table t1, t3, t4";
|
||||
execute stmt;
|
||||
@ -1400,23 +1400,23 @@ Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
test.t3 optimize status OK
|
||||
test.t4 optimize Error Table 'test.t4' doesn't exist
|
||||
test.t4 optimize error Corrupt
|
||||
test.t4 optimize status Operation failed
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status Table is already up to date
|
||||
test.t3 optimize status Table is already up to date
|
||||
test.t4 optimize Error Table 'test.t4' doesn't exist
|
||||
test.t4 optimize error Corrupt
|
||||
test.t4 optimize status Operation failed
|
||||
prepare stmt from "analyze table t4, t1";
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t4 analyze Error Table 'test.t4' doesn't exist
|
||||
test.t4 analyze error Corrupt
|
||||
test.t4 analyze status Operation failed
|
||||
test.t1 analyze status Table is already up to date
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t4 analyze Error Table 'test.t4' doesn't exist
|
||||
test.t4 analyze error Corrupt
|
||||
test.t4 analyze status Operation failed
|
||||
test.t1 analyze status Table is already up to date
|
||||
deallocate prepare stmt;
|
||||
drop table t1, t2, t3;
|
||||
|
@ -47,7 +47,7 @@ Note 1051 Unknown table 'ttt'
|
||||
drop table t1,t2;
|
||||
drop user test@localhost;
|
||||
#
|
||||
# Bug #27440 read_only allows create and drop database
|
||||
# Bug#27440 read_only allows create and drop database
|
||||
#
|
||||
drop database if exists mysqltest_db1;
|
||||
drop database if exists mysqltest_db2;
|
||||
|
@ -27,7 +27,7 @@ drop table t1;
|
||||
repair table t1 use_frm;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair Error Table 'test.t1' doesn't exist
|
||||
test.t1 repair error Corrupt
|
||||
test.t1 repair status Operation failed
|
||||
create table t1 engine=myisam SELECT 1,"table 1";
|
||||
flush tables;
|
||||
repair table t1;
|
||||
|
@ -443,3 +443,17 @@ SELECT ROW(a, 1) IN (SELECT SUM(b), 3) FROM t1 GROUP BY a;
|
||||
ROW(a, 1) IN (SELECT SUM(b), 3)
|
||||
0
|
||||
DROP TABLE t1;
|
||||
create table t1 (a varchar(200),
|
||||
b int unsigned not null primary key auto_increment)
|
||||
default character set 'utf8';
|
||||
create table t2 (c varchar(200),
|
||||
d int unsigned not null primary key auto_increment)
|
||||
default character set 'latin1';
|
||||
insert into t1 (a) values('abc');
|
||||
insert into t2 (c) values('abc');
|
||||
select * from t1,t2 where (a,b) = (c,d);
|
||||
a b c d
|
||||
abc 1 abc 1
|
||||
select host,user from mysql.user where (host,user) = ('localhost','test');
|
||||
host user
|
||||
drop table t1,t2;
|
||||
|
@ -16,5 +16,5 @@ Error 1205 Lock wait timeout exceeded; try restarting transaction
|
||||
OPTIMIZE TABLE non_existing;
|
||||
Table Op Msg_type Msg_text
|
||||
test.non_existing optimize Error Table 'test.non_existing' doesn't exist
|
||||
test.non_existing optimize error Corrupt
|
||||
test.non_existing optimize status Operation failed
|
||||
drop table t1;
|
||||
|
151
mysql-test/r/rpl_filter_tables_not_exist.result
Normal file
151
mysql-test/r/rpl_filter_tables_not_exist.result
Normal file
@ -0,0 +1,151 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
CREATE TABLE t1 (id int, a int);
|
||||
CREATE TABLE t2 (id int, b int);
|
||||
CREATE TABLE t3 (id int, c int);
|
||||
CREATE TABLE t4 (id int, d int);
|
||||
CREATE TABLE t5 (id int, e int);
|
||||
CREATE TABLE t6 (id int, f int);
|
||||
CREATE TABLE t7 (id int, g int);
|
||||
CREATE TABLE t8 (id int, h int);
|
||||
CREATE TABLE t9 (id int, i int);
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t3 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t4 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t5 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t6 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t7 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t8 VALUES (1, 1), (2, 2), (3, 3);
|
||||
INSERT INTO t9 VALUES (1, 1), (2, 2), (3, 3);
|
||||
[on slave]
|
||||
SHOW TABLES LIKE 't%';
|
||||
Tables_in_test (t%)
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
[on master]
|
||||
UPDATE t7 LEFT JOIN t4 ON (t4.id=t7.id) SET d=0, g=0 where t7.id=1;
|
||||
UPDATE t7 LEFT JOIN (t4, t5, t6) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t6.id) SET d=0, e=0, f=0, g=0 where t7.id=1;
|
||||
UPDATE t4 LEFT JOIN (t7, t8, t9) ON (t4.id=t7.id and t4.id=t8.id and t4.id=t9.id) SET d=0, g=0, h=0, i=0 where t4.id=1;
|
||||
UPDATE t7 LEFT JOIN (t8, t9) ON (t7.id=t8.id and t7.id=t9.id) SET g=0, h=0, i=0 where t7.id=1;
|
||||
UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET d=0 where t1.id=1;
|
||||
UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET g=0 where t1.id=1;
|
||||
UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET d=0, e=0, f=0 where t1.id=1;
|
||||
UPDATE t1 LEFT JOIN (t4, t5, t8) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t8.id) SET d=0, e=0, h=0 where t1.id=1;
|
||||
UPDATE t1 LEFT JOIN (t7, t8, t5) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t5.id) SET g=0, h=0, e=0 where t1.id=1;
|
||||
UPDATE t1 LEFT JOIN (t2, t3, t5) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t5.id) SET e=0 where t1.id=1;
|
||||
UPDATE t4 LEFT JOIN t1 ON (t1.id=t4.id) SET a=0, d=0 where t4.id=1;
|
||||
UPDATE t4 LEFT JOIN (t1, t7) ON (t4.id=t1.id and t7.id=t4.id) SET a = 0, d=0, g=0 where t4.id=1;
|
||||
UPDATE t4 LEFT JOIN (t1, t2, t3) ON (t1.id=t4.id and t2.id=t4.id and t3.id=t4.id) SET a=0, b=0, c=0, d=0 where t4.id=1;
|
||||
UPDATE t4 LEFT JOIN (t1, t2, t5) ON (t1.id=t4.id and t2.id=t4.id and t5.id=t4.id) SET a=0, b=0, e=0, d=0 where t4.id=1;
|
||||
UPDATE t4 LEFT JOIN (t1, t6, t7) ON (t4.id=t1.id and t4.id=t6.id and t4.id=t7.id) SET a=0, d=0, f=0, g=0 where t4.id=1;
|
||||
UPDATE t7 LEFT JOIN (t4, t1, t2) ON (t7.id=t4.id and t7.id=t1.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1;
|
||||
UPDATE t7 LEFT JOIN (t8, t4, t1) ON (t7.id=t8.id and t7.id=t4.id and t7.id=t1.id) SET a=0, d=0, g=0, h=0 where t7.id=1;
|
||||
UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1;
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1'
|
||||
set global sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
[on slave]
|
||||
show tables like 't%';
|
||||
Tables_in_test (t%)
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
SELECT * FROM t1;
|
||||
id a
|
||||
1 1
|
||||
2 2
|
||||
3 3
|
||||
SELECT * FROM t2;
|
||||
id b
|
||||
1 1
|
||||
2 2
|
||||
3 3
|
||||
SELECT * FROM t3;
|
||||
id c
|
||||
1 1
|
||||
2 2
|
||||
3 3
|
||||
[on master]
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
@ -2790,26 +2790,26 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
select max(key1) from t1 where key1 <= 0.6158;
|
||||
max(key1)
|
||||
0.61580002307892
|
||||
0.615800023078918
|
||||
select max(key2) from t2 where key2 <= 1.6158;
|
||||
max(key2)
|
||||
1.6158000230789
|
||||
1.61580002307892
|
||||
select min(key1) from t1 where key1 >= 0.3762;
|
||||
min(key1)
|
||||
0.37619999051094
|
||||
0.376199990510941
|
||||
select min(key2) from t2 where key2 >= 1.3762;
|
||||
min(key2)
|
||||
1.3761999607086
|
||||
1.37619996070862
|
||||
select max(key1), min(key2) from t1, t2
|
||||
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||
max(key1) min(key2)
|
||||
0.61580002307892 1.3761999607086
|
||||
0.615800023078918 1.37619996070862
|
||||
select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||
max(key1)
|
||||
0.61580002307892
|
||||
0.615800023078918
|
||||
select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||
min(key1)
|
||||
0.37619999051094
|
||||
0.376199990510941
|
||||
DROP TABLE t1,t2;
|
||||
create table t1(a bigint unsigned, b bigint);
|
||||
insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff),
|
||||
|
@ -507,9 +507,9 @@ ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysql
|
||||
drop table mysqltest.t1;
|
||||
drop database mysqltest;
|
||||
set names binary;
|
||||
delete from mysql.user
|
||||
delete from mysql.user
|
||||
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
|
||||
delete from mysql.db
|
||||
delete from mysql.db
|
||||
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
|
||||
flush privileges;
|
||||
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY;
|
||||
@ -916,7 +916,7 @@ def TRIGGERS DEFINER Definer 252 589815 14 N 17 0 33
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
t1_bi INSERT t1 SET @a = 1 BEFORE NULL root@localhost
|
||||
----------------------------------------------------------------
|
||||
SELECT
|
||||
SELECT
|
||||
TRIGGER_CATALOG,
|
||||
TRIGGER_SCHEMA,
|
||||
TRIGGER_NAME,
|
||||
@ -1094,7 +1094,7 @@ CREATE DATABASE mysqltest1;
|
||||
use mysqltest1;
|
||||
CREATE TABLE t1(ËÏÌÏÎËÁ1 INT);
|
||||
|
||||
---> Dumping mysqltest1 to show_check.mysqltest1.sql
|
||||
---> Dumping mysqltest1 to outfile1
|
||||
|
||||
|
||||
DROP DATABASE mysqltest1;
|
||||
|
@ -5,10 +5,10 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
|
||||
GRANT ALL PRIVILEGES ON `test`.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
|
||||
REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
|
||||
DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
|
||||
select user();
|
||||
user()
|
||||
SELECT USER();
|
||||
USER()
|
||||
#
|
||||
show processlist;
|
||||
SHOW PROCESSLIST;
|
||||
Id User Host db Command Time State Info
|
||||
<id> root <host> test <command> <time> <state> <info>
|
||||
<id> root <host> test <command> <time> <state> <info>
|
||||
|
@ -332,7 +332,7 @@ ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table
|
||||
drop user user_bug14533@localhost;
|
||||
drop database db_bug14533;
|
||||
CREATE DATABASE db_bug7787;
|
||||
use db_bug7787;
|
||||
USE db_bug7787;
|
||||
CREATE PROCEDURE p1()
|
||||
SHOW INNODB STATUS;
|
||||
Warnings:
|
||||
@ -352,12 +352,12 @@ GRANT SUPER ON *.* TO mysqltest_2@localhost;
|
||||
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
|
||||
|
||||
---> connection: mysqltest_2_con
|
||||
use mysqltest;
|
||||
USE mysqltest;
|
||||
CREATE PROCEDURE wl2897_p1() SELECT 1;
|
||||
CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
|
||||
|
||||
---> connection: mysqltest_1_con
|
||||
use mysqltest;
|
||||
USE mysqltest;
|
||||
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
|
||||
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
||||
CREATE DEFINER=root@localhost FUNCTION wl2897_f2() RETURNS INT RETURN 2;
|
||||
@ -373,7 +373,7 @@ Warnings:
|
||||
Note 1449 There is no 'a @ b @ c'@'localhost' registered
|
||||
|
||||
---> connection: con1root
|
||||
use mysqltest;
|
||||
USE mysqltest;
|
||||
SHOW CREATE PROCEDURE wl2897_p1;
|
||||
Procedure sql_mode Create Procedure
|
||||
wl2897_p1 CREATE DEFINER=`mysqltest_2`@`localhost` PROCEDURE `wl2897_p1`()
|
||||
@ -403,7 +403,7 @@ CREATE USER mysqltest_2@localhost;
|
||||
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
|
||||
|
||||
---> connection: mysqltest_1_con
|
||||
use mysqltest;
|
||||
USE mysqltest;
|
||||
CREATE PROCEDURE bug13198_p1()
|
||||
SELECT 1;
|
||||
CREATE FUNCTION bug13198_f1() RETURNS INT
|
||||
@ -416,7 +416,7 @@ bug13198_f1()
|
||||
1
|
||||
|
||||
---> connection: mysqltest_2_con
|
||||
use mysqltest;
|
||||
USE mysqltest;
|
||||
CALL bug13198_p1();
|
||||
1
|
||||
1
|
||||
@ -428,7 +428,7 @@ bug13198_f1()
|
||||
DROP USER mysqltest_1@localhost;
|
||||
|
||||
---> connection: mysqltest_2_con
|
||||
use mysqltest;
|
||||
USE mysqltest;
|
||||
CALL bug13198_p1();
|
||||
ERROR HY000: There is no 'mysqltest_1'@'localhost' registered
|
||||
SELECT bug13198_f1();
|
||||
@ -445,7 +445,7 @@ Host User Password
|
||||
localhost user19857 *82DC221D557298F6CE9961037DB1C90604792F5C
|
||||
|
||||
---> connection: mysqltest_2_con
|
||||
use test;
|
||||
USE test;
|
||||
CREATE PROCEDURE sp19857() DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE a INT;
|
||||
|
@ -581,7 +581,7 @@ return 2.7182818284590452354|
|
||||
set @e = e()|
|
||||
select e(), @e|
|
||||
e() @e
|
||||
2.718281828459 2.718281828459
|
||||
2.71828182845905 2.71828182845905
|
||||
drop function if exists inc|
|
||||
create function inc(i int) returns int
|
||||
return i+1|
|
||||
@ -618,7 +618,7 @@ create function fun(d double, i int, u int unsigned) returns double
|
||||
return mul(inc(i), fac(u)) / e()|
|
||||
select fun(2.3, 3, 5)|
|
||||
fun(2.3, 3, 5)
|
||||
176.58213176229
|
||||
176.582131762292
|
||||
insert into t2 values (append("xxx", "yyy"), mul(4,3), e())|
|
||||
insert into t2 values (append("a", "b"), mul(2,mul(3,4)), fun(1.7, 4, 6))|
|
||||
select * from t2 where s = append("a", "b")|
|
||||
@ -2475,7 +2475,7 @@ Privilege Context Comment
|
||||
Alter Tables To alter the table
|
||||
Alter routine Functions,Procedures To alter or drop stored functions/procedures
|
||||
Create Databases,Tables,Indexes To create new databases and tables
|
||||
Create routine Functions,Procedures To use CREATE FUNCTION/PROCEDURE
|
||||
Create routine Databases To use CREATE FUNCTION/PROCEDURE
|
||||
Create temporary tables Databases To use CREATE TEMPORARY TABLE
|
||||
Create view Tables To create new views
|
||||
Create user Server Admin To create new users
|
||||
@ -2527,7 +2527,7 @@ Privilege Context Comment
|
||||
Alter Tables To alter the table
|
||||
Alter routine Functions,Procedures To alter or drop stored functions/procedures
|
||||
Create Databases,Tables,Indexes To create new databases and tables
|
||||
Create routine Functions,Procedures To use CREATE FUNCTION/PROCEDURE
|
||||
Create routine Databases To use CREATE FUNCTION/PROCEDURE
|
||||
Create temporary tables Databases To use CREATE TEMPORARY TABLE
|
||||
Create view Tables To create new views
|
||||
Create user Server Admin To create new users
|
||||
@ -5972,9 +5972,9 @@ CREATE TABLE t3 (f1 INT, f2 FLOAT)|
|
||||
INSERT INTO t3 VALUES (1, 3.4), (1, 2), (1, 0.9), (2, 8), (2, 7)|
|
||||
SELECT SUM(f2), bug25373(f1) FROM t3 GROUP BY bug25373(f1) WITH ROLLUP|
|
||||
SUM(f2) bug25373(f1)
|
||||
6.3000000715256 1
|
||||
6.30000007152557 1
|
||||
15 2
|
||||
21.300000071526 NULL
|
||||
21.3000000715256 NULL
|
||||
DROP FUNCTION bug25373|
|
||||
DROP TABLE t3|
|
||||
DROP DATABASE IF EXISTS mysqltest1|
|
||||
|
@ -192,11 +192,11 @@ select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
|
||||
(select a from t3 where a<t2.a*4 order by 1 desc limit 1) a
|
||||
3 1
|
||||
7 2
|
||||
select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from
|
||||
select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from
|
||||
(select * from t2 where a>1) as tt;
|
||||
(select t3.a from t3 where a<8 order by 1 desc limit 1) a
|
||||
7 2
|
||||
explain extended select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from
|
||||
explain extended select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from
|
||||
(select * from t2 where a>1) as tt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived3> system NULL NULL NULL NULL 1
|
||||
@ -2303,20 +2303,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 outr WHERE b =
|
||||
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 outr WHERE b =
|
||||
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 outr WHERE b =
|
||||
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
|
||||
@ -2517,8 +2517,8 @@ 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 outr WHERE
|
||||
Code <> SOME ( SELECT Code FROM t1 WHERE Continent = outr.Continent AND
|
||||
SELECT DISTINCT Continent AS c FROM t1 outr WHERE
|
||||
Code <> SOME ( SELECT Code FROM t1 WHERE Continent = outr.Continent AND
|
||||
Population < 200);
|
||||
c
|
||||
Oceania
|
||||
@ -2628,32 +2628,32 @@ select
|
||||
count(distinct t2.userid) pass,
|
||||
groupstuff.*,
|
||||
count(t2.courseid) crse,
|
||||
t1.categoryid,
|
||||
t1.categoryid,
|
||||
t2.courseid,
|
||||
date_format(date, '%b%y') as colhead
|
||||
from t2
|
||||
join t1 on t2.courseid=t1.courseid
|
||||
from t2
|
||||
join t1 on t2.courseid=t1.courseid
|
||||
join
|
||||
(
|
||||
select
|
||||
t5.userid,
|
||||
parentid,
|
||||
parentgroup,
|
||||
childid,
|
||||
groupname,
|
||||
grouptypeid
|
||||
from t5
|
||||
join
|
||||
select
|
||||
t5.userid,
|
||||
parentid,
|
||||
parentgroup,
|
||||
childid,
|
||||
groupname,
|
||||
grouptypeid
|
||||
from t5
|
||||
join
|
||||
(
|
||||
select t4.id as parentid,
|
||||
t4.name as parentgroup,
|
||||
t4.id as childid,
|
||||
t4.name as groupname,
|
||||
t4.grouptypeid
|
||||
from t4
|
||||
) as gin on t5.groupid=gin.childid
|
||||
) as groupstuff on t2.userid = groupstuff.userid
|
||||
group by
|
||||
select t4.id as parentid,
|
||||
t4.name as parentgroup,
|
||||
t4.id as childid,
|
||||
t4.name as groupname,
|
||||
t4.grouptypeid
|
||||
from t4
|
||||
) as gin on t5.groupid=gin.childid
|
||||
) as groupstuff on t2.userid = groupstuff.userid
|
||||
group by
|
||||
groupstuff.groupname, colhead , t2.courseid;
|
||||
pass userid parentid parentgroup childid groupname grouptypeid crse categoryid courseid colhead
|
||||
1 5141 12 group2 12 group2 5 1 5 12 Aug04
|
||||
@ -2929,9 +2929,9 @@ INSERT INTO t1 VALUES("0037", "1", "2005-12-06 12:18:56");
|
||||
INSERT INTO t1 VALUES("0037", "2", "2006-01-06 12:25:53");
|
||||
INSERT INTO t1 VALUES("0048", "1", "2006-01-06 12:37:50");
|
||||
INSERT INTO t1 VALUES("0059", "1", "2006-01-06 12:37:50");
|
||||
select * from t1 r1
|
||||
where (r1.retailerID,(r1.changed)) in
|
||||
(SELECT r2.retailerId,(max(changed)) from t1 r2
|
||||
select * from t1 r1
|
||||
where (r1.retailerID,(r1.changed)) in
|
||||
(SELECT r2.retailerId,(max(changed)) from t1 r2
|
||||
group by r2.retailerId);
|
||||
retailerID statusID changed
|
||||
0026 2 2006-01-06 12:25:53
|
||||
@ -2943,41 +2943,41 @@ create table t1(a int, primary key (a));
|
||||
insert into t1 values (10);
|
||||
create table t2 (a int primary key, b varchar(32), c int, unique key b(c, b));
|
||||
insert into t2(a, c, b) values (1,10,'359'), (2,10,'35988'), (3,10,'35989');
|
||||
explain SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c DESC, t2.b DESC LIMIT 1) WHERE t1.a = 10;
|
||||
explain SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c DESC, t2.b DESC LIMIT 1) WHERE t1.a = 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system PRIMARY NULL NULL NULL 1
|
||||
1 PRIMARY r const PRIMARY PRIMARY 4 const 1
|
||||
2 DEPENDENT SUBQUERY t2 range b b 40 NULL 2 Using where
|
||||
SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c DESC, t2.b DESC LIMIT 1) WHERE t1.a = 10;
|
||||
SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c DESC, t2.b DESC LIMIT 1) WHERE t1.a = 10;
|
||||
a a b
|
||||
10 3 35989
|
||||
explain SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c, t2.b LIMIT 1) WHERE t1.a = 10;
|
||||
explain SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c, t2.b LIMIT 1) WHERE t1.a = 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system PRIMARY NULL NULL NULL 1
|
||||
1 PRIMARY r const PRIMARY PRIMARY 4 const 1
|
||||
2 DEPENDENT SUBQUERY t2 range b b 40 NULL 2 Using where
|
||||
SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c, t2.b LIMIT 1) WHERE t1.a = 10;
|
||||
SELECT sql_no_cache t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r
|
||||
ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899'
|
||||
ORDER BY t2.c, t2.b LIMIT 1) WHERE t1.a = 10;
|
||||
a a b
|
||||
10 1 359
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
field1 int NOT NULL,
|
||||
field2 int NOT NULL,
|
||||
field3 int NOT NULL,
|
||||
PRIMARY KEY (field1,field2,field3)
|
||||
CREATE TABLE t1 (
|
||||
field1 int NOT NULL,
|
||||
field2 int NOT NULL,
|
||||
field3 int NOT NULL,
|
||||
PRIMARY KEY (field1,field2,field3)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
fieldA int NOT NULL,
|
||||
fieldB int NOT NULL,
|
||||
PRIMARY KEY (fieldA,fieldB)
|
||||
CREATE TABLE t2 (
|
||||
fieldA int NOT NULL,
|
||||
fieldB int NOT NULL,
|
||||
PRIMARY KEY (fieldA,fieldB)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(1,1,1), (1,1,2), (1,2,1), (1,2,2), (1,2,3), (1,3,1);
|
||||
@ -2991,14 +2991,14 @@ field1 field2 COUNT(*)
|
||||
SELECT field1, field2
|
||||
FROM t1
|
||||
GROUP BY field1, field2
|
||||
HAVING COUNT(*) >= ALL (SELECT fieldB
|
||||
HAVING COUNT(*) >= ALL (SELECT fieldB
|
||||
FROM t2 WHERE fieldA = field1);
|
||||
field1 field2
|
||||
1 2
|
||||
SELECT field1, field2
|
||||
FROM t1
|
||||
GROUP BY field1, field2
|
||||
HAVING COUNT(*) < ANY (SELECT fieldB
|
||||
HAVING COUNT(*) < ANY (SELECT fieldB
|
||||
FROM t2 WHERE fieldA = field1);
|
||||
field1 field2
|
||||
1 1
|
||||
@ -3021,8 +3021,8 @@ a a IN (SELECT a FROM t1)
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a DATETIME);
|
||||
INSERT INTO t1 VALUES ('1998-09-23'), ('2003-03-25');
|
||||
CREATE TABLE t2 AS SELECT
|
||||
(SELECT a FROM t1 WHERE a < '2000-01-01') AS sub_a
|
||||
CREATE TABLE t2 AS SELECT
|
||||
(SELECT a FROM t1 WHERE a < '2000-01-01') AS sub_a
|
||||
FROM t1 WHERE a > '2000-01-01';
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -3188,7 +3188,7 @@ INSERT INTO t2 VALUES ( 6 );
|
||||
CREATE TABLE t3 ( c3 integer );
|
||||
INSERT INTO t3 VALUES ( 7 );
|
||||
INSERT INTO t3 VALUES ( 8 );
|
||||
SELECT c1,c2 FROM t1 LEFT JOIN t2 ON c1 = c2
|
||||
SELECT c1,c2 FROM t1 LEFT JOIN t2 ON c1 = c2
|
||||
WHERE EXISTS (SELECT c3 FROM t3 WHERE c2 IS NULL );
|
||||
c1 c2
|
||||
2 NULL
|
||||
@ -3231,20 +3231,20 @@ E1
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1(select_id BIGINT, values_id BIGINT);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
CREATE TABLE t2 (select_id BIGINT, values_id BIGINT,
|
||||
CREATE TABLE t2 (select_id BIGINT, values_id BIGINT,
|
||||
PRIMARY KEY(select_id,values_id));
|
||||
INSERT INTO t2 VALUES (0, 1), (0, 2), (0, 3), (1, 5);
|
||||
SELECT values_id FROM t1
|
||||
SELECT values_id FROM t1
|
||||
WHERE values_id IN (SELECT values_id FROM t2
|
||||
WHERE select_id IN (1, 0));
|
||||
values_id
|
||||
1
|
||||
SELECT values_id FROM t1
|
||||
SELECT values_id FROM t1
|
||||
WHERE values_id IN (SELECT values_id FROM t2
|
||||
WHERE select_id BETWEEN 0 AND 1);
|
||||
values_id
|
||||
1
|
||||
SELECT values_id FROM t1
|
||||
SELECT values_id FROM t1
|
||||
WHERE values_id IN (SELECT values_id FROM t2
|
||||
WHERE select_id = 0 OR select_id = 1);
|
||||
values_id
|
||||
@ -3259,7 +3259,7 @@ drop table t1;
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
CREATE TABLE t2 (c int, d int);
|
||||
CREATE TABLE t3 (e int);
|
||||
INSERT INTO t1 VALUES
|
||||
INSERT INTO t1 VALUES
|
||||
(1,10), (2,10), (1,20), (2,20), (3,20), (2,30), (4,40);
|
||||
INSERT INTO t2 VALUES
|
||||
(2,10), (2,20), (4,10), (5,10), (3,20), (2,40);
|
||||
@ -3322,7 +3322,7 @@ a
|
||||
2
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE MIN(b) < d AND
|
||||
WHERE MIN(b) < d AND
|
||||
EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e <= d));
|
||||
a
|
||||
2
|
||||
@ -3373,7 +3373,7 @@ a
|
||||
4
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ALL(SELECT t2.c FROM t2
|
||||
WHERE EXISTS(SELECT t3.e FROM t3
|
||||
WHERE EXISTS(SELECT t3.e FROM t3
|
||||
WHERE SUM(t1.a+t2.c) < t3.e/4));
|
||||
ERROR HY000: Invalid use of group function
|
||||
SELECT t1.a from t1 GROUP BY t1.a HAVING AVG(SUM(t1.b)) > 20;
|
||||
@ -3486,7 +3486,7 @@ mid bigint(20) unsigned NOT NULL,
|
||||
date date NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO t2 VALUES
|
||||
INSERT INTO t2 VALUES
|
||||
(1, 1, '2006-03-30'), (2, 2, '2006-04-06'), (3, 3, '2006-04-13'),
|
||||
(4, 2, '2006-04-20'), (5, 1, '2006-05-01');
|
||||
SELECT *,
|
||||
@ -3524,7 +3524,7 @@ i2 int(11) NOT NULL default '0',
|
||||
t datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (i1,i2,t)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
INSERT INTO t1 VALUES
|
||||
(24,1,'2005-03-03 16:31:31'),(24,1,'2005-05-27 12:40:07'),
|
||||
(24,1,'2005-05-27 12:40:08'),(24,1,'2005-05-27 12:40:10'),
|
||||
(24,1,'2005-05-27 12:40:25'),(24,1,'2005-05-27 12:40:30'),
|
||||
@ -3540,7 +3540,7 @@ PRIMARY KEY (i1)
|
||||
INSERT INTO t2 VALUES (24,1,'2006-06-20 12:29:40');
|
||||
EXPLAIN
|
||||
SELECT * FROM t1,t2
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t < t2.t AND t1.i2=1 AND t2.i1=t1.i1
|
||||
ORDER BY t1.t DESC LIMIT 1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
@ -3548,7 +3548,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL PRIMARY 16 NULL 11 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 range PRIMARY PRIMARY 16 NULL 5 Using where; Using index
|
||||
SELECT * FROM t1,t2
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t < t2.t AND t1.i2=1 AND t2.i1=t1.i1
|
||||
ORDER BY t1.t DESC LIMIT 1);
|
||||
i1 i2 t i1 i2 t
|
||||
@ -3557,22 +3557,22 @@ DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (i INT);
|
||||
(SELECT i FROM t1) UNION (SELECT i FROM t1);
|
||||
i
|
||||
SELECT sql_no_cache * FROM t1 WHERE NOT EXISTS
|
||||
SELECT sql_no_cache * FROM t1 WHERE NOT EXISTS
|
||||
(
|
||||
(SELECT i FROM t1) UNION
|
||||
(SELECT i FROM t1) UNION
|
||||
(SELECT i 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
|
||||
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
|
||||
SELECT * FROM t1
|
||||
WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i 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 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
|
||||
explain select * from t1 where not exists
|
||||
((select t11.i from t1 t11) union (select t12.i from t1 t12));
|
||||
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;
|
||||
@ -3591,9 +3591,9 @@ insert into t1 (a) select FLOOR(rand() * 100) from t1;
|
||||
insert into t1 (a) select FLOOR(rand() * 100) from t1;
|
||||
insert into t1 (a) select FLOOR(rand() * 100) from t1;
|
||||
insert into t1 (a) select FLOOR(rand() * 100) from t1;
|
||||
SELECT a,
|
||||
(SELECT REPEAT(' ',250) FROM t1 i1
|
||||
WHERE i1.b=t1.a ORDER BY RAND() LIMIT 1) AS a
|
||||
SELECT a,
|
||||
(SELECT REPEAT(' ',250) FROM t1 i1
|
||||
WHERE i1.b=t1.a ORDER BY RAND() LIMIT 1) AS a
|
||||
FROM t1 ORDER BY a LIMIT 5;
|
||||
a a
|
||||
0 NULL
|
||||
@ -3622,7 +3622,7 @@ COUNT(DISTINCT t1.b) (SELECT COUNT(DISTINCT t1.b))
|
||||
2 2
|
||||
1 1
|
||||
1 1
|
||||
SELECT COUNT(DISTINCT t1.b),
|
||||
SELECT COUNT(DISTINCT t1.b),
|
||||
(SELECT COUNT(DISTINCT t1.b) union select 1 from DUAL where 12 < 3)
|
||||
FROM t1 GROUP BY t1.a;
|
||||
COUNT(DISTINCT t1.b) (SELECT COUNT(DISTINCT t1.b) union select 1 from DUAL where 12 < 3)
|
||||
@ -3633,7 +3633,7 @@ SELECT (
|
||||
SELECT (
|
||||
SELECT COUNT(DISTINCT t1.b)
|
||||
)
|
||||
)
|
||||
)
|
||||
FROM t1 GROUP BY t1.a;
|
||||
(
|
||||
SELECT (
|
||||
@ -3648,8 +3648,8 @@ SELECT (
|
||||
SELECT (
|
||||
SELECT COUNT(DISTINCT t1.b)
|
||||
)
|
||||
)
|
||||
FROM t1 GROUP BY t1.a LIMIT 1)
|
||||
)
|
||||
FROM t1 GROUP BY t1.a LIMIT 1)
|
||||
FROM t1 t2
|
||||
GROUP BY t2.a;
|
||||
(
|
||||
@ -3657,7 +3657,7 @@ SELECT (
|
||||
SELECT (
|
||||
SELECT COUNT(DISTINCT t1.b)
|
||||
)
|
||||
)
|
||||
)
|
||||
FROM t1 GROUP BY t1.a LIMIT 1)
|
||||
2
|
||||
2
|
||||
@ -3669,13 +3669,13 @@ 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(*)
|
||||
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;
|
||||
COUNT(*)
|
||||
3000
|
||||
SET SESSION sort_buffer_size = 8 * 1024 * 1024;
|
||||
SELECT SQL_NO_CACHE COUNT(*)
|
||||
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;
|
||||
COUNT(*)
|
||||
@ -3736,7 +3736,7 @@ sq
|
||||
2
|
||||
4
|
||||
DEALLOCATE PREPARE stmt1;
|
||||
SELECT f2, AVG(f21),
|
||||
SELECT f2, AVG(f21),
|
||||
(SELECT t.f3 FROM t2 AS t WHERE t2.f2=t.f2 AND t.f3=MAX(t2.f3)) AS test
|
||||
FROM t2 GROUP BY f2;
|
||||
f2 AVG(f21) test
|
||||
@ -3744,12 +3744,12 @@ f2 AVG(f21) test
|
||||
2 2.0000 2004-02-29 11:11:11
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a int, b INT, c CHAR(10) NOT NULL);
|
||||
INSERT INTO t1 VALUES
|
||||
(1,1,'a'), (1,2,'b'), (1,3,'c'), (1,4,'d'), (1,5,'e'),
|
||||
(2,1,'f'), (2,2,'g'), (2,3,'h'), (3,4,'i'), (3,3,'j'),
|
||||
INSERT INTO t1 VALUES
|
||||
(1,1,'a'), (1,2,'b'), (1,3,'c'), (1,4,'d'), (1,5,'e'),
|
||||
(2,1,'f'), (2,2,'g'), (2,3,'h'), (3,4,'i'), (3,3,'j'),
|
||||
(3,2,'k'), (3,1,'l'), (1,9,'m');
|
||||
SELECT a, MAX(b),
|
||||
(SELECT t.c FROM t1 AS t WHERE t1.a=t.a AND t.b=MAX(t1.b)) AS test
|
||||
SELECT a, MAX(b),
|
||||
(SELECT t.c FROM t1 AS t WHERE t1.a=t.a AND t.b=MAX(t1.b)) AS test
|
||||
FROM t1 GROUP BY a;
|
||||
a MAX(b) test
|
||||
1 9 m
|
||||
@ -3900,7 +3900,7 @@ COUNT(*) a (SELECT MIN(m) FROM t2 WHERE m = count(*))
|
||||
2 2 2
|
||||
3 3 3
|
||||
1 4 1
|
||||
SELECT COUNT(*), a
|
||||
SELECT COUNT(*), a
|
||||
FROM t1 GROUP BY a
|
||||
HAVING (SELECT MIN(m) FROM t2 WHERE m = count(*)) > 1;
|
||||
COUNT(*) a
|
||||
@ -3931,7 +3931,7 @@ INSERT INTO t1 VALUES (1,1,0,'a'), (1,2,0,'b'), (1,3,0,'c'), (1,4,0,'d'),
|
||||
(1,5,0,'e'), (2,1,0,'f'), (2,2,0,'g'), (2,3,0,'h'), (3,4,0,'i'), (3,3,0,'j'),
|
||||
(3,2,0,'k'), (3,1,0,'l'), (1,9,0,'m'), (1,0,10,'n'), (2,0,5,'o'), (3,0,7,'p');
|
||||
SELECT a, MAX(b),
|
||||
(SELECT t.c FROM t1 AS t WHERE t1.a=t.a AND t.b=MAX(t1.b + 0)) as test
|
||||
(SELECT t.c FROM t1 AS t WHERE t1.a=t.a AND t.b=MAX(t1.b + 0)) as test
|
||||
FROM t1 GROUP BY a;
|
||||
a MAX(b) test
|
||||
1 9 m
|
||||
@ -3953,7 +3953,7 @@ a AVG(b) test
|
||||
3 2.5000 NULL
|
||||
SELECT tt.a,
|
||||
(SELECT (SELECT c FROM t1 as t WHERE t1.a=t.a AND t.d=MAX(t1.b + tt.a)
|
||||
LIMIT 1) FROM t1 WHERE t1.a=tt.a GROUP BY a LIMIT 1) as test
|
||||
LIMIT 1) FROM t1 WHERE t1.a=tt.a GROUP BY a LIMIT 1) as test
|
||||
FROM t1 as tt;
|
||||
a test
|
||||
1 n
|
||||
@ -3975,7 +3975,7 @@ a test
|
||||
SELECT tt.a,
|
||||
(SELECT (SELECT t.c FROM t1 AS t WHERE t1.a=t.a AND t.d=MAX(t1.b + tt.a)
|
||||
LIMIT 1)
|
||||
FROM t1 WHERE t1.a=tt.a GROUP BY a LIMIT 1) as test
|
||||
FROM t1 WHERE t1.a=tt.a GROUP BY a LIMIT 1) as test
|
||||
FROM t1 as tt GROUP BY tt.a;
|
||||
a test
|
||||
1 n
|
||||
@ -3984,7 +3984,7 @@ a test
|
||||
SELECT tt.a, MAX(
|
||||
(SELECT (SELECT t.c FROM t1 AS t WHERE t1.a=t.a AND t.d=MAX(t1.b + tt.a)
|
||||
LIMIT 1)
|
||||
FROM t1 WHERE t1.a=tt.a GROUP BY a LIMIT 1)) as test
|
||||
FROM t1 WHERE t1.a=tt.a GROUP BY a LIMIT 1)) as test
|
||||
FROM t1 as tt GROUP BY tt.a;
|
||||
a test
|
||||
1 n
|
||||
@ -4027,11 +4027,11 @@ COUNT(1)
|
||||
1
|
||||
SELECT SUM( (SELECT AVG( (SELECT t1.a FROM t2) ) FROM DUAL) ) FROM t1;
|
||||
ERROR HY000: Invalid use of group function
|
||||
SELECT
|
||||
SELECT
|
||||
SUM( (SELECT AVG( (SELECT COUNT(*) FROM t1 t HAVING t1.a < 12) ) FROM t2) )
|
||||
FROM t1;
|
||||
ERROR HY000: Invalid use of group function
|
||||
SELECT t1.a as XXA,
|
||||
SELECT t1.a as XXA,
|
||||
SUM( (SELECT AVG( (SELECT COUNT(*) FROM t1 t HAVING XXA < 12) ) FROM t2) )
|
||||
FROM t1;
|
||||
ERROR HY000: Invalid use of group function
|
||||
@ -4048,25 +4048,25 @@ INSERT INTO t1 VALUES
|
||||
(3,'FL'), (2,'GA'), (4,'FL'), (1,'GA'), (5,'NY'), (7,'FL'), (6,'NY');
|
||||
CREATE TABLE t2 (id int NOT NULL, INDEX idx(id));
|
||||
INSERT INTO t2 VALUES (7), (5), (1), (3);
|
||||
SELECT id, st FROM t1
|
||||
SELECT id, st FROM t1
|
||||
WHERE st IN ('GA','FL') AND EXISTS(SELECT 1 FROM t2 WHERE t2.id=t1.id);
|
||||
id st
|
||||
3 FL
|
||||
1 GA
|
||||
7 FL
|
||||
SELECT id, st FROM t1
|
||||
SELECT id, st FROM t1
|
||||
WHERE st IN ('GA','FL') AND EXISTS(SELECT 1 FROM t2 WHERE t2.id=t1.id)
|
||||
GROUP BY id;
|
||||
id st
|
||||
1 GA
|
||||
3 FL
|
||||
7 FL
|
||||
SELECT id, st FROM t1
|
||||
SELECT id, st FROM t1
|
||||
WHERE st IN ('GA','FL') AND NOT EXISTS(SELECT 1 FROM t2 WHERE t2.id=t1.id);
|
||||
id st
|
||||
2 GA
|
||||
4 FL
|
||||
SELECT id, st FROM t1
|
||||
SELECT id, st FROM t1
|
||||
WHERE st IN ('GA','FL') AND NOT EXISTS(SELECT 1 FROM t2 WHERE t2.id=t1.id)
|
||||
GROUP BY id;
|
||||
id st
|
||||
@ -4272,7 +4272,7 @@ 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
|
||||
EXPLAIN
|
||||
SELECT a AS out_a, MIN(b) FROM t1
|
||||
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
|
||||
GROUP BY a;
|
||||
@ -4281,7 +4281,7 @@ 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
|
||||
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;
|
||||
@ -4312,16 +4312,16 @@ 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 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
|
||||
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;
|
||||
create table t1(f11 int, f12 int);
|
||||
create table t2(f21 int unsigned not null, f22 int, f23 varchar(10));
|
||||
insert into t1 values(1,1),(2,2), (3, 3);
|
||||
set session sort_buffer_size= 33*1024;
|
||||
select count(*) from t1 where f12 =
|
||||
select count(*) from t1 where f12 =
|
||||
(select f22 from t2 where f22 = f12 order by f21 desc, f22, f23 limit 1);
|
||||
count(*)
|
||||
3
|
||||
@ -4362,12 +4362,12 @@ IF(
|
||||
FROM t2 VPC, t4 a2, t2 a3
|
||||
WHERE
|
||||
VPC.f4 = a2.f10 AND a3.f2 = a4
|
||||
LIMIT 1) IS NULL,
|
||||
0,
|
||||
LIMIT 1) IS NULL,
|
||||
0,
|
||||
t3.f5
|
||||
)
|
||||
) AS a6
|
||||
FROM
|
||||
FROM
|
||||
t2, t3, t1 JOIN t2 a1 ON t1.f9 = a1.f4
|
||||
GROUP BY a4;
|
||||
a4 f3 a6
|
||||
@ -4376,7 +4376,7 @@ a4 f3 a6
|
||||
DROP TABLE t1, t2, t3, t4;
|
||||
create table t1 (a float(5,4) zerofill);
|
||||
create table t2 (a float(5,4),b float(2,0));
|
||||
select t1.a from t1 where
|
||||
select t1.a from t1 where
|
||||
t1.a= (select b from t2 limit 1) and not
|
||||
t1.a= (select a from t2 limit 1) ;
|
||||
a
|
||||
@ -4407,7 +4407,7 @@ pk a
|
||||
3 30
|
||||
2 20
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (s1 char(1));
|
||||
CREATE TABLE t1 (s1 CHAR(1));
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1);
|
||||
s1
|
||||
|
@ -1,6 +1,6 @@
|
||||
drop table if exists t1;
|
||||
CREATE TABLE t1 (x1 int);
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
CREATE TABLE t1 (x1 INT);
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -8,7 +8,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -16,7 +16,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -24,7 +24,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -32,7 +32,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -40,7 +40,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -48,7 +48,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -56,7 +56,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -64,7 +64,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -72,7 +72,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -80,7 +80,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -88,7 +88,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -96,7 +96,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -104,7 +104,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -112,7 +112,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -120,7 +120,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -128,7 +128,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -136,7 +136,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -144,7 +144,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x1 x2 int;
|
||||
ALTER TABLE t1 CHANGE x1 x2 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@ -152,7 +152,7 @@ t2 CREATE TABLE `t2` (
|
||||
`xx` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 CHANGE x2 x1 int;
|
||||
ALTER TABLE t1 CHANGE x2 x1 INT;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
|
@ -13,9 +13,7 @@ GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE TABLE t1(num_value INT);
|
||||
CREATE TABLE t2(user_str TEXT);
|
||||
CREATE TRIGGER wl2818_trg1 BEFORE INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
CREATE TRIGGER wl2818_trg1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
|
||||
---> patching t1.TRG...
|
||||
|
||||
|
@ -385,12 +385,12 @@ Warning 1264 Out of range value adjusted for column 'f1' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'f1' at row 2
|
||||
select f1 + 0e0 from t1;
|
||||
f1 + 0e0
|
||||
1.0000000150475e+29
|
||||
-1.0000000150475e+29
|
||||
1.0000000150475e+30
|
||||
-1.0000000150475e+30
|
||||
1.0000000150475e+30
|
||||
-1.0000000150475e+30
|
||||
1.00000001504747e+29
|
||||
-1.00000001504747e+29
|
||||
1.00000001504747e+30
|
||||
-1.00000001504747e+30
|
||||
1.00000001504747e+30
|
||||
-1.00000001504747e+30
|
||||
drop table t1;
|
||||
create table t1(d double, u bigint unsigned);
|
||||
insert into t1(d) values (9.22337203685479e18),
|
||||
@ -401,4 +401,10 @@ u
|
||||
9223372036854790144
|
||||
18400000000000000000
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (f1 DOUBLE);
|
||||
INSERT INTO t1 VALUES(-1.79769313486231e+308);
|
||||
SELECT f1 FROM t1;
|
||||
f1
|
||||
-1.79769313486231e+308
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -236,32 +236,66 @@ set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
||||
select ROUND(RAND(),5);
|
||||
ROUND(RAND(),5)
|
||||
0.02887
|
||||
show variables like '%alloc%';
|
||||
|
||||
==+ Testing %alloc% system variables +==
|
||||
==+ NOTE: These values *must* be a multiple of 1024 +==
|
||||
==+ Other values will be rounded down to nearest multiple +==
|
||||
|
||||
==+ Show initial values +==
|
||||
SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size',
|
||||
'query_alloc_block_size', 'query_prealloc_size',
|
||||
'transaction_alloc_block_size', 'transaction_prealloc_size');
|
||||
Variable_name Value
|
||||
query_alloc_block_size 8192
|
||||
query_prealloc_size 8192
|
||||
range_alloc_block_size 4096
|
||||
transaction_alloc_block_size 8192
|
||||
transaction_prealloc_size 4096
|
||||
set @@range_alloc_block_size=1024*16;
|
||||
==+ Manipulate variable values +=
|
||||
Testing values that are multiples of 1024
|
||||
set @@range_alloc_block_size=1024*15+1024;
|
||||
set @@query_alloc_block_size=1024*15+1024*2;
|
||||
set @@query_prealloc_size=1024*18-1024;
|
||||
set @@transaction_alloc_block_size=1024*21-1024*1;
|
||||
set @@transaction_prealloc_size=1024*21-2048;
|
||||
==+ Check manipulated values ==+
|
||||
SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size',
|
||||
'query_alloc_block_size', 'query_prealloc_size',
|
||||
'transaction_alloc_block_size', 'transaction_prealloc_size');
|
||||
Variable_name Value
|
||||
query_alloc_block_size 17408
|
||||
query_prealloc_size 17408
|
||||
range_alloc_block_size 16384
|
||||
transaction_alloc_block_size 20480
|
||||
transaction_prealloc_size 19456
|
||||
==+ Manipulate variable values +==
|
||||
Testing values that are not 1024 multiples
|
||||
set @@range_alloc_block_size=1024*16+1023;
|
||||
set @@query_alloc_block_size=1024*17+2;
|
||||
set @@query_prealloc_size=1024*18;
|
||||
set @@query_prealloc_size=1024*18-1023;
|
||||
set @@transaction_alloc_block_size=1024*20-1;
|
||||
set @@transaction_prealloc_size=1024*21-1;
|
||||
select @@query_alloc_block_size;
|
||||
@@query_alloc_block_size
|
||||
17408
|
||||
show variables like '%alloc%';
|
||||
==+ Check manipulated values ==+
|
||||
SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size',
|
||||
'query_alloc_block_size', 'query_prealloc_size',
|
||||
'transaction_alloc_block_size', 'transaction_prealloc_size');
|
||||
Variable_name Value
|
||||
query_alloc_block_size 17408
|
||||
query_prealloc_size 18432
|
||||
query_prealloc_size 17408
|
||||
range_alloc_block_size 16384
|
||||
transaction_alloc_block_size 19456
|
||||
transaction_prealloc_size 20480
|
||||
==+ Set values back to the default values +==
|
||||
set @@range_alloc_block_size=default;
|
||||
set @@query_alloc_block_size=default, @@query_prealloc_size=default;
|
||||
set transaction_alloc_block_size=default, @@transaction_prealloc_size=default;
|
||||
show variables like '%alloc%';
|
||||
==+ Check the values now that they are reset +==
|
||||
SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size',
|
||||
'query_alloc_block_size', 'query_prealloc_size',
|
||||
'transaction_alloc_block_size', 'transaction_prealloc_size');
|
||||
Variable_name Value
|
||||
query_alloc_block_size 8192
|
||||
query_prealloc_size 8192
|
||||
|
@ -1667,9 +1667,9 @@ INSERT INTO t2 VALUES (4,3,'n');
|
||||
INSERT INTO t2 VALUES (6,1,'n');
|
||||
INSERT INTO t2 VALUES (8,1,'y');
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
SELECT a.col1,a.col2,b.col2,b.col3
|
||||
SELECT a.col1,a.col2,b.col2,b.col3
|
||||
FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1
|
||||
WHERE b.col2 IS NULL OR
|
||||
WHERE b.col2 IS NULL OR
|
||||
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
|
||||
col1 col2 col2 col3
|
||||
1 trudy 2 y
|
||||
@ -1681,9 +1681,9 @@ col1 col2 col2 col3
|
||||
7 carsten NULL NULL
|
||||
8 ranger 1 y
|
||||
10 matt NULL NULL
|
||||
SELECT a.col1,a.col2,b.col2,b.col3
|
||||
SELECT a.col1,a.col2,b.col2,b.col3
|
||||
FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1
|
||||
WHERE b.col2 IS NULL OR
|
||||
WHERE b.col2 IS NULL OR
|
||||
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
|
||||
col1 col2 col2 col3
|
||||
1 trudy 2 y
|
||||
@ -1737,7 +1737,7 @@ A A
|
||||
2 2
|
||||
3 3
|
||||
create table t3 as select a a,a b from t2;
|
||||
create view v2 as select * from t3 where
|
||||
create view v2 as select * from t3 where
|
||||
a in (select * from t1) or b in (select * from t2);
|
||||
select * from v2 A, v2 B where A.a = B.b;
|
||||
a b a b
|
||||
@ -1993,7 +1993,7 @@ dkjhgd
|
||||
drop view v1;
|
||||
create table t1 (f59 int, f60 int, f61 int);
|
||||
insert into t1 values (19,41,32);
|
||||
create view v1 as select f59, f60 from t1 where f59 in
|
||||
create view v1 as select f59, f60 from t1 where f59 in
|
||||
(select f59 from t1);
|
||||
update v1 set f60=2345;
|
||||
ERROR HY000: The target table v1 of the UPDATE is not updatable
|
||||
@ -2120,7 +2120,7 @@ pid int NOT NULL
|
||||
INSERT INTO t1 VALUES(1,'a','b'), (2,'c','d');
|
||||
INSERT INTO t2 values (1,1), (2,1), (2,2);
|
||||
CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
|
||||
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
|
||||
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
|
||||
WHERE t1.aid = t2.aid GROUP BY pid;
|
||||
pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
|
||||
1 a b,c d
|
||||
@ -2222,7 +2222,7 @@ group_name varchar(32) NOT NULL
|
||||
) engine = InnoDB;
|
||||
create table t2 (
|
||||
r_object_id char(16) NOT NULL,
|
||||
i_position int(11) NOT NULL,
|
||||
i_position int(11) NOT NULL,
|
||||
users_names varchar(32) default NULL
|
||||
) Engine = InnoDB;
|
||||
create view v1 as select r_object_id, group_name from t1;
|
||||
@ -2235,7 +2235,7 @@ insert into t1 values('120001a080000542','tstgroup1');
|
||||
insert into t2 values('120001a080000542',-1, 'guser01');
|
||||
insert into t2 values('120001a080000542',-2, 'guser02');
|
||||
select v1.r_object_id, v2.users_names from v1, v2
|
||||
where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
|
||||
where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
|
||||
order by users_names;
|
||||
r_object_id users_names
|
||||
120001a080000542 guser01
|
||||
@ -2385,8 +2385,8 @@ create table t4 (x int, y int, z int);
|
||||
create view v1 as
|
||||
select t1.x
|
||||
from (
|
||||
(t1 join t2 on ((t1.y = t2.y)))
|
||||
join
|
||||
(t1 join t2 on ((t1.y = t2.y)))
|
||||
join
|
||||
(t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z))
|
||||
);
|
||||
prepare stmt1 from "select count(*) from v1 where x = ?";
|
||||
@ -2562,12 +2562,12 @@ Warnings:
|
||||
Warning 1052 Column 'x' in group statement is ambiguous
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
drop table if exists t1;
|
||||
drop view if exists v1;
|
||||
create table t1 (id int);
|
||||
create view v1 as select * from t1;
|
||||
drop table t1;
|
||||
show create view v1;
|
||||
drop table if exists t1;
|
||||
drop view if exists v1;
|
||||
create table t1 (id int);
|
||||
create view v1 as select * from t1;
|
||||
drop table t1;
|
||||
show create view v1;
|
||||
drop view v1;
|
||||
//
|
||||
View Create View
|
||||
@ -2614,7 +2614,7 @@ DROP VIEW v2;
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
|
||||
td date DEFAULT NULL, KEY idx(td));
|
||||
INSERT INTO t1 VALUES
|
||||
INSERT INTO t1 VALUES
|
||||
(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
|
||||
(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
|
||||
(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
|
||||
@ -2978,10 +2978,10 @@ drop view v1;
|
||||
drop table t1;
|
||||
CREATE TABLE t1(pk int PRIMARY KEY);
|
||||
CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
|
||||
CREATE ALGORITHM=MERGE VIEW v1 AS
|
||||
CREATE ALGORITHM=MERGE VIEW v1 AS
|
||||
SELECT t1.*
|
||||
FROM t1 JOIN t2
|
||||
ON t2.fk = t1.pk AND
|
||||
FROM t1 JOIN t2
|
||||
ON t2.fk = t1.pk AND
|
||||
t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org);
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
@ -3311,7 +3311,7 @@ name char(10) NOT NULL
|
||||
INSERT INTO t1 (lid, name) VALUES
|
||||
(1, 'YES'), (2, 'NO');
|
||||
CREATE TABLE t2 (
|
||||
id int NOT NULL PRIMARY KEY,
|
||||
id int NOT NULL PRIMARY KEY,
|
||||
gid int NOT NULL,
|
||||
lid int NOT NULL,
|
||||
dt date
|
||||
@ -3410,8 +3410,8 @@ CREATE TABLE t1 (id int);
|
||||
CREATE TABLE t2 (id int, c int DEFAULT 0);
|
||||
INSERT INTO t1 (id) VALUES (1);
|
||||
INSERT INTO t2 (id) VALUES (1);
|
||||
CREATE VIEW v1 AS
|
||||
SELECT t2.c FROM t1, t2
|
||||
CREATE VIEW v1 AS
|
||||
SELECT t2.c FROM t1, t2
|
||||
WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION;
|
||||
UPDATE v1 SET c=1;
|
||||
DROP VIEW v1;
|
||||
@ -3519,7 +3519,7 @@ role_name varchar(100) default NULL,
|
||||
app_name varchar(40) NOT NULL,
|
||||
INDEX idx_app_name(app_name)
|
||||
);
|
||||
CREATE VIEW v1 AS
|
||||
CREATE VIEW v1 AS
|
||||
SELECT profile.person_id AS person_id
|
||||
FROM t1 profile, t2 userrole, t3 role
|
||||
WHERE userrole.person_id = profile.person_id AND
|
||||
@ -3531,7 +3531,7 @@ INSERT INTO t1 VALUES
|
||||
(-717462680,'ENTS Ta','0'), (-904346964,'ndard SQL\n','0');
|
||||
INSERT INTO t2 VALUES
|
||||
(1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10);
|
||||
INSERT INTO t3 VALUES
|
||||
INSERT INTO t3 VALUES
|
||||
(1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'),
|
||||
(3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'),
|
||||
(5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'),
|
||||
@ -3557,7 +3557,7 @@ i
|
||||
2
|
||||
3
|
||||
4
|
||||
select table_name, is_updatable from information_schema.views
|
||||
select table_name, is_updatable from information_schema.views
|
||||
where table_name = 'v1';
|
||||
table_name is_updatable
|
||||
v1 NO
|
||||
@ -3603,8 +3603,8 @@ DROP VIEW v2;
|
||||
DROP VIEW v3;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#29477: Not all fields of the target table were checked to have
|
||||
# a default value when inserting into a view.
|
||||
# Bug#29477 Not all fields of the target table were checked to have
|
||||
# a default value when inserting into a view.
|
||||
#
|
||||
create table t1(f1 int, f2 int not null);
|
||||
create view v1 as select f1 from t1;
|
||||
@ -3621,7 +3621,7 @@ drop table t1;
|
||||
create table t1 (a int, key(a));
|
||||
create table t2 (c int);
|
||||
create view v1 as select a b from t1;
|
||||
create view v2 as select 1 a from t2, v1 where c in
|
||||
create view v2 as select 1 a from t2, v1 where c in
|
||||
(select 1 from t1 where b = a);
|
||||
insert into t1 values (1), (1);
|
||||
insert into t2 values (1), (1);
|
||||
@ -3643,7 +3643,7 @@ MAX(a) COUNT(DISTINCT a)
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
# -----------------------------------------------------------------
|
||||
# -- Bug#34337: Server crash when Altering a view using a table name.
|
||||
# -- Bug#34337 Server crash when Altering a view using a table name.
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
@ -3660,8 +3660,8 @@ DROP TABLE t1;
|
||||
# -- End of test case for Bug#34337.
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# -- Bug#35193: VIEW query is rewritten without "FROM DUAL",
|
||||
# -- causing syntax error
|
||||
# -- Bug#35193 VIEW query is rewritten without "FROM DUAL",
|
||||
# -- causing syntax error
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
CREATE VIEW v1 AS SELECT 1 FROM DUAL WHERE 1;
|
||||
|
@ -26,7 +26,7 @@ create view v2 as select * from mysqltest.t2;
|
||||
ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 't2'
|
||||
show create view v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`mysqltest_1`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v1` AS select `mysqltest`.`t1`.`a` AS `a`,`mysqltest`.`t1`.`b` AS `b` from `mysqltest`.`t1`
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`mysqltest_1`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `mysqltest`.`t1`.`a` AS `a`,`mysqltest`.`t1`.`b` AS `b` from `mysqltest`.`t1`
|
||||
grant create view,drop,select on test.* to mysqltest_1@localhost;
|
||||
use test;
|
||||
alter view v1 as select * from mysqltest.t1;
|
||||
@ -307,7 +307,7 @@ grant create view,select on test.* to mysqltest_1@localhost;
|
||||
create view v1 as select * from mysqltest.t1;
|
||||
show create view v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`mysqltest_1`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v1` AS select `mysqltest`.`t1`.`a` AS `a`,`mysqltest`.`t1`.`b` AS `b` from `mysqltest`.`t1`
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`mysqltest_1`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `mysqltest`.`t1`.`a` AS `a`,`mysqltest`.`t1`.`b` AS `b` from `mysqltest`.`t1`
|
||||
revoke select on mysqltest.t1 from mysqltest_1@localhost;
|
||||
select * from v1;
|
||||
ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||
@ -644,7 +644,7 @@ CREATE DATABASE test2;
|
||||
CREATE TABLE test1.t0 (a VARCHAR(20));
|
||||
CREATE TABLE test2.t1 (a VARCHAR(20));
|
||||
CREATE VIEW test2.t3 AS SELECT * FROM test1.t0;
|
||||
CREATE OR REPLACE VIEW test.v1 AS
|
||||
CREATE OR REPLACE VIEW test.v1 AS
|
||||
SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb;
|
||||
DROP VIEW test.v1;
|
||||
DROP VIEW test2.t3;
|
||||
@ -788,7 +788,7 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
|
||||
DROP USER u26813@localhost;
|
||||
DROP DATABASE db26813;
|
||||
#
|
||||
# Bug#29908: A user can gain additional access through the ALTER VIEW.
|
||||
# Bug#29908 A user can gain additional access through the ALTER VIEW.
|
||||
#
|
||||
CREATE DATABASE mysqltest_29908;
|
||||
USE mysqltest_29908;
|
||||
@ -919,4 +919,30 @@ c4
|
||||
DROP DATABASE mysqltest1;
|
||||
DROP DATABASE mysqltest2;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
CREATE DATABASE db1;
|
||||
USE db1;
|
||||
CREATE TABLE t1(f1 INT, f2 INT);
|
||||
CREATE VIEW v1 AS SELECT f1, f2 FROM t1;
|
||||
GRANT SELECT (f1) ON t1 TO foo;
|
||||
GRANT SELECT (f1) ON v1 TO foo;
|
||||
USE db1;
|
||||
SELECT f1 FROM t1;
|
||||
f1
|
||||
SELECT f2 FROM t1;
|
||||
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'f2' in table 't1'
|
||||
SELECT * FROM t1;
|
||||
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 't1'
|
||||
SELECT f1 FROM v1;
|
||||
f1
|
||||
SELECT f2 FROM v1;
|
||||
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'f2' in table 'v1'
|
||||
SELECT * FROM v1;
|
||||
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1'
|
||||
USE test;
|
||||
REVOKE SELECT (f1) ON db1.t1 FROM foo;
|
||||
REVOKE SELECT (f1) ON db1.v1 FROM foo;
|
||||
DROP USER foo;
|
||||
DROP VIEW db1.v1;
|
||||
DROP TABLE db1.t1;
|
||||
DROP DATABASE db1;
|
||||
End of 5.0 tests.
|
||||
|
@ -19,4 +19,22 @@ 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
|
||||
DROP TABLE t1;
|
||||
CREATE DATABASE `TESTDB`;
|
||||
USE `TESTDB`;
|
||||
CREATE FUNCTION test_fn() RETURNS INTEGER
|
||||
BEGIN
|
||||
DECLARE rId bigint;
|
||||
RETURN rId;
|
||||
END
|
||||
//
|
||||
CREATE FUNCTION test_fn2() RETURNS INTEGER
|
||||
BEGIN
|
||||
DECLARE rId bigint;
|
||||
RETURN rId;
|
||||
END
|
||||
//
|
||||
DROP FUNCTION `TESTDB`.`test_fn`;
|
||||
DROP FUNCTION `testdb`.`test_fn2`;
|
||||
USE test;
|
||||
DROP DATABASE `TESTDB`;
|
||||
End of 5.0 tests.
|
||||
|
@ -5245,7 +5245,7 @@ WHERE select_id = 1 OR select_id IS NULL order by id;
|
||||
sqrt(my_bigint) my_bigint id
|
||||
NULL NULL 1
|
||||
NULL -9223372036854775808 2
|
||||
3037000499.976 9223372036854775807 3
|
||||
3037000499.97605 9223372036854775807 3
|
||||
0 0 4
|
||||
NULL -1 5
|
||||
2 4 6
|
||||
@ -5259,7 +5259,7 @@ WHERE select_id = 1 OR select_id IS NULL) order by id;
|
||||
sqrt(my_bigint) my_bigint id
|
||||
NULL NULL 1
|
||||
NULL -9223372036854775808 2
|
||||
3037000499.976 9223372036854775807 3
|
||||
3037000499.97605 9223372036854775807 3
|
||||
0 0 4
|
||||
NULL -1 5
|
||||
2 4 6
|
||||
|
@ -21367,7 +21367,7 @@ ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
CHECK TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 check Error Table 'test.v1' doesn't exist
|
||||
test.v1 check error Corrupt
|
||||
test.v1 check status Operation failed
|
||||
DESCRIBE v1;
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
EXPLAIN SELECT * FROM v1;
|
||||
@ -22824,7 +22824,7 @@ f1 f2
|
||||
ABC 3
|
||||
SELECT * FROM v1 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
ALTER TABLE t1 CHANGE COLUMN f2 f2 VARCHAR(30);
|
||||
INSERT INTO t1 SET f1 = 'ABC', f2 = 'DEF';
|
||||
DESCRIBE t1;
|
||||
@ -22842,7 +22842,7 @@ ABC DEF
|
||||
SELECT * FROM v1 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 0
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
SELECT SQRT('DEF');
|
||||
SQRT('DEF')
|
||||
0
|
||||
@ -22862,7 +22862,7 @@ my_sqrt double YES NULL
|
||||
SELECT * FROM v2 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 0
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
|
||||
SELECT * FROM t2 order by 2;
|
||||
f1 ABC
|
||||
|
@ -5245,7 +5245,7 @@ WHERE select_id = 1 OR select_id IS NULL order by id;
|
||||
sqrt(my_bigint) my_bigint id
|
||||
NULL NULL 1
|
||||
NULL -9223372036854775808 2
|
||||
3037000499.976 9223372036854775807 3
|
||||
3037000499.97605 9223372036854775807 3
|
||||
0 0 4
|
||||
NULL -1 5
|
||||
2 4 6
|
||||
@ -5259,7 +5259,7 @@ WHERE select_id = 1 OR select_id IS NULL) order by id;
|
||||
sqrt(my_bigint) my_bigint id
|
||||
NULL NULL 1
|
||||
NULL -9223372036854775808 2
|
||||
3037000499.976 9223372036854775807 3
|
||||
3037000499.97605 9223372036854775807 3
|
||||
0 0 4
|
||||
NULL -1 5
|
||||
2 4 6
|
||||
|
@ -21368,7 +21368,7 @@ ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
CHECK TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 check Error Table 'test.v1' doesn't exist
|
||||
test.v1 check error Corrupt
|
||||
test.v1 check status Operation failed
|
||||
DESCRIBE v1;
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
EXPLAIN SELECT * FROM v1;
|
||||
@ -22825,7 +22825,7 @@ f1 f2
|
||||
ABC 3
|
||||
SELECT * FROM v1 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
ALTER TABLE t1 CHANGE COLUMN f2 f2 VARCHAR(30);
|
||||
INSERT INTO t1 SET f1 = 'ABC', f2 = 'DEF';
|
||||
DESCRIBE t1;
|
||||
@ -22843,7 +22843,7 @@ ABC DEF
|
||||
SELECT * FROM v1 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 0
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
SELECT SQRT('DEF');
|
||||
SQRT('DEF')
|
||||
0
|
||||
@ -22863,7 +22863,7 @@ my_sqrt double YES NULL
|
||||
SELECT * FROM v2 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 0
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
|
||||
SELECT * FROM t2 order by 2;
|
||||
f1 ABC
|
||||
|
@ -5245,7 +5245,7 @@ WHERE select_id = 1 OR select_id IS NULL order by id;
|
||||
sqrt(my_bigint) my_bigint id
|
||||
NULL NULL 1
|
||||
NULL -9223372036854775808 2
|
||||
3037000499.976 9223372036854775807 3
|
||||
3037000499.97605 9223372036854775807 3
|
||||
0 0 4
|
||||
NULL -1 5
|
||||
2 4 6
|
||||
@ -5259,7 +5259,7 @@ WHERE select_id = 1 OR select_id IS NULL) order by id;
|
||||
sqrt(my_bigint) my_bigint id
|
||||
NULL NULL 1
|
||||
NULL -9223372036854775808 2
|
||||
3037000499.976 9223372036854775807 3
|
||||
3037000499.97605 9223372036854775807 3
|
||||
0 0 4
|
||||
NULL -1 5
|
||||
2 4 6
|
||||
|
@ -23043,7 +23043,7 @@ ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
CHECK TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 check Error Table 'test.v1' doesn't exist
|
||||
test.v1 check error Corrupt
|
||||
test.v1 check status Operation failed
|
||||
DESCRIBE v1;
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
EXPLAIN SELECT * FROM v1;
|
||||
@ -24527,7 +24527,7 @@ f1 f2
|
||||
ABC 3
|
||||
SELECT * FROM v1 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
ALTER TABLE t1 CHANGE COLUMN f2 f2 VARCHAR(30);
|
||||
INSERT INTO t1 SET f1 = 'ABC', f2 = 'DEF';
|
||||
DESCRIBE t1;
|
||||
@ -24545,7 +24545,7 @@ ABC DEF
|
||||
SELECT * FROM v1 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 0
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
SELECT SQRT('DEF');
|
||||
SQRT('DEF')
|
||||
0
|
||||
@ -24565,7 +24565,7 @@ my_sqrt double YES NULL
|
||||
SELECT * FROM v2 order by 2;
|
||||
f1 my_sqrt
|
||||
ABC 0
|
||||
ABC 1.7320508075689
|
||||
ABC 1.73205080756888
|
||||
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
|
||||
SELECT * FROM t2 order by 2;
|
||||
f1 ABC
|
||||
|
@ -1,4 +1,4 @@
|
||||
# In order to be more or less robust test for bug#25044 has to take
|
||||
# In order to be more or less robust test for Bug#25044 has to take
|
||||
# significant time (e.g. about 9 seconds on my (Dmitri's) computer)
|
||||
# so we probably want execute it only in --big-test mode.
|
||||
# Also in 5.1 this test will require statement-based binlog.
|
||||
@ -6,8 +6,8 @@
|
||||
|
||||
|
||||
#
|
||||
# Test for bug #25044 "ALTER TABLE ... ENABLE KEYS acquires global
|
||||
# 'opening tables' lock".
|
||||
# Test for Bug#25044 ALTER TABLE ... ENABLE KEYS acquires global
|
||||
# 'opening tables' lock
|
||||
#
|
||||
# ALTER TABLE ... ENABLE KEYS should not acquire LOCK_open mutex for
|
||||
# the whole its duration as it prevents other queries from execution.
|
||||
@ -57,6 +57,7 @@ show binlog events in 'master-bin.000001' from 98;
|
||||
|
||||
# Clean up
|
||||
drop tables t1, t2;
|
||||
disconnect addconroot;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -1,7 +1,10 @@
|
||||
|
||||
# The server need to be started in $MYSQLTEST_VARDIR since it
|
||||
# uses ../std_data_ln/
|
||||
-- source include/uses_vardir.inc
|
||||
--source include/uses_vardir.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
#
|
||||
# This test is a bit tricky as we can't use backup table to overwrite an old
|
||||
@ -12,7 +15,7 @@ connect (con2,localhost,root,,);
|
||||
connection con1;
|
||||
set SQL_LOG_BIN=0;
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2, t3;
|
||||
drop table if exists t1, t2, t3, t4;
|
||||
--enable_warnings
|
||||
create table t4(n int);
|
||||
--replace_result ": 1" ": X" ": 2" ": X" ": 22" ": X" ": 23" ": X" $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
@ -57,6 +60,9 @@ unlock tables;
|
||||
connection con1;
|
||||
reap;
|
||||
drop table t5;
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/t1.MYD;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/t2.MYD;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/t3.MYD;
|
||||
@ -68,4 +74,9 @@ remove_file $MYSQLTEST_VARDIR/tmp/t3.frm;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/t4.frm;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/t5.frm;
|
||||
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
@ -1,8 +1,12 @@
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
connection con1;
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t1,t2;
|
||||
drop view if exists v1;
|
||||
--enable_warnings
|
||||
|
||||
# Add a lot of keys to slow down check
|
||||
@ -20,16 +24,18 @@ connection con2;
|
||||
insert into t1 values (200000);
|
||||
connection con1;
|
||||
reap;
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
drop table t1;
|
||||
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug #9897 Views: 'Check Table' crashes MySQL, with a view and a table
|
||||
# in the statement
|
||||
# Bug#9897 Views: 'Check Table' crashes MySQL, with a view and a table
|
||||
# in the statement
|
||||
#
|
||||
|
||||
connection default;
|
||||
Create table t1(f1 int);
|
||||
Create table t2(f1 int);
|
||||
Create view v1 as Select * from t1;
|
||||
@ -37,11 +43,15 @@ Check Table v1,t2;
|
||||
drop view v1;
|
||||
drop table t1, t2;
|
||||
|
||||
|
||||
#
|
||||
# BUG#26325 - TEMPORARY TABLE "corrupt" after first read, according to CHECK
|
||||
# TABLE
|
||||
# Bug#26325 TEMPORARY TABLE "corrupt" after first read, according to CHECK TABLE
|
||||
#
|
||||
CREATE TEMPORARY TABLE t1(a INT);
|
||||
CHECK TABLE t1;
|
||||
REPAIR TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
# Wait till we reached the initial number of concurrent sessions
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
@ -6,6 +6,10 @@
|
||||
|
||||
-- source include/have_compress.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
|
||||
connect (comp_con,localhost,root,,,,,COMPRESS);
|
||||
|
||||
# Check compression turned on
|
||||
@ -16,3 +20,10 @@ SHOW STATUS LIKE 'Compression';
|
||||
|
||||
# Check compression turned on
|
||||
SHOW STATUS LIKE 'Compression';
|
||||
|
||||
connection default;
|
||||
disconnect comp_con;
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
@ -18,12 +18,16 @@ connect (con2,localhost,root,,test);
|
||||
show tables;
|
||||
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,root,z,test2);
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,root,z,);
|
||||
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
|
||||
grant ALL on *.* to test@localhost identified by "gambling";
|
||||
grant ALL on *.* to test@127.0.0.1 identified by "gambling";
|
||||
|
||||
@ -35,20 +39,23 @@ show tables;
|
||||
connect (con4,localhost,test,gambling,test);
|
||||
show tables;
|
||||
|
||||
connection default;
|
||||
disconnect con3;
|
||||
disconnect con4;
|
||||
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,,test2);
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,,"");
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,zorro,test2);
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,zorro,);
|
||||
|
||||
|
||||
# check if old password version also works
|
||||
update mysql.user set password=old_password("gambling2") where user=_binary"test";
|
||||
flush privileges;
|
||||
@ -57,30 +64,34 @@ connect (con10,localhost,test,gambling2,);
|
||||
connect (con5,localhost,test,gambling2,mysql);
|
||||
connection con5;
|
||||
set password="";
|
||||
--error 1372
|
||||
--error ER_PASSWD_LENGTH
|
||||
set password='gambling3';
|
||||
set password=old_password('gambling3');
|
||||
show tables;
|
||||
connect (con6,localhost,test,gambling3,test);
|
||||
show tables;
|
||||
|
||||
connection default;
|
||||
disconnect con10;
|
||||
disconnect con5;
|
||||
disconnect con6;
|
||||
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,,test2);
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,,);
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,zorro,test2);
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--error 1045
|
||||
--error ER_ACCESS_DENIED_ERROR
|
||||
connect (fail_con,localhost,test,zorro,);
|
||||
|
||||
|
||||
# remove user 'test' so that other tests which may use 'test'
|
||||
# do not depend on this test.
|
||||
|
||||
delete from mysql.user where user=_binary"test";
|
||||
flush privileges;
|
||||
|
||||
@ -98,4 +109,5 @@ disconnect con7;
|
||||
connection default;
|
||||
drop table t1;
|
||||
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -1,43 +1,61 @@
|
||||
-- source include/have_innodb.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
--echo # Establish connection con1 (user=root)
|
||||
connect (con1,localhost,root,,);
|
||||
--echo # Establish connection con2 (user=root)
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
### Test 1:
|
||||
### - While a consistent snapshot transaction is executed,
|
||||
### no external inserts should be visible to the transaction.
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
create table t1 (a int) engine=innodb;
|
||||
start transaction with consistent snapshot;
|
||||
CREATE TABLE t1 (a INT) ENGINE=innodb;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
insert into t1 values(1);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
select * from t1; # if consistent snapshot was set as expected, we
|
||||
SELECT * FROM t1; # if consistent snapshot was set as expected, we
|
||||
# should see nothing.
|
||||
commit;
|
||||
COMMIT;
|
||||
|
||||
### Test 2:
|
||||
### - For any non-consistent snapshot transaction, external
|
||||
### committed inserts should be visible to the transaction.
|
||||
|
||||
delete from t1;
|
||||
start transaction; # Now we omit WITH CONSISTENT SNAPSHOT
|
||||
DELETE FROM t1;
|
||||
START TRANSACTION; # Now we omit WITH CONSISTENT SNAPSHOT
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
insert into t1 values(1);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
select * from t1; # if consistent snapshot was not set, as expected, we
|
||||
SELECT * FROM t1; # if consistent snapshot was not set, as expected, we
|
||||
# should see 1.
|
||||
commit;
|
||||
COMMIT;
|
||||
|
||||
drop table t1;
|
||||
--echo # Switch to connection default + close connections con1 and con2
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
connection con1;
|
||||
@ -5,12 +9,19 @@ dirty_close con1;
|
||||
connection con2;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (n int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (n INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
connection default;
|
||||
disconnect con2;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
@ -123,4 +123,17 @@ execute s1;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
#
|
||||
# Bug #43354: Use key hint can crash server in explain extended query
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||
|
||||
--error ER_KEY_DOES_NOT_EXITS
|
||||
EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
@ -4,74 +4,106 @@
|
||||
# This is intended to mimick how mysqldump and innobackup work.
|
||||
|
||||
# And it requires InnoDB
|
||||
-- source include/have_innodb.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
--echo # Establish connection con1 (user=root)
|
||||
connect (con1,localhost,root,,);
|
||||
--echo # Establish connection con2 (user=root)
|
||||
connect (con2,localhost,root,,);
|
||||
--echo # Establish connection con3 (user=root)
|
||||
connect (con3,localhost,root,,);
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
create table t1 (a int) engine=innodb;
|
||||
CREATE TABLE t1 (a INT) ENGINE=innodb;
|
||||
|
||||
# blocks COMMIT ?
|
||||
|
||||
begin;
|
||||
insert into t1 values(1);
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES(1);
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
flush tables with read lock;
|
||||
select * from t1;
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
SELECT * FROM t1;
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
send commit; # blocked by con2
|
||||
send COMMIT; # blocked by con2
|
||||
sleep 1;
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
select * from t1; # verify con1 was blocked and data did not move
|
||||
unlock tables;
|
||||
SELECT * FROM t1; # verify con1 was blocked and data did not move
|
||||
UNLOCK TABLES;
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
reap;
|
||||
|
||||
# No deadlock ?
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
begin;
|
||||
send select * from t1 for update; # blocked by con1
|
||||
BEGIN;
|
||||
send SELECT * FROM t1 FOR UPDATE; # blocked by con1
|
||||
sleep 1;
|
||||
--echo # Switch to connection con3
|
||||
connection con3;
|
||||
send flush tables with read lock; # blocked by con2
|
||||
send FLUSH TABLES WITH READ LOCK; # blocked by con2
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
commit; # should not be blocked by con3
|
||||
COMMIT; # should not be blocked by con3
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
reap;
|
||||
--echo # Switch to connection con3
|
||||
connection con3;
|
||||
reap;
|
||||
unlock tables;
|
||||
UNLOCK TABLES;
|
||||
|
||||
# BUG#6732 FLUSH TABLES WITH READ LOCK + COMMIT hangs later FLUSH TABLES
|
||||
# WITH READ LOCK
|
||||
# Bug#6732 FLUSH TABLES WITH READ LOCK + COMMIT hangs later FLUSH TABLES
|
||||
# WITH READ LOCK
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
commit; # unlock InnoDB row locks to allow insertions
|
||||
COMMIT; # unlock InnoDB row locks to allow insertions
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
begin;
|
||||
insert into t1 values(10);
|
||||
flush tables with read lock;
|
||||
commit;
|
||||
unlock tables;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES(10);
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
COMMIT;
|
||||
UNLOCK TABLES;
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
flush tables with read lock; # bug caused hang here
|
||||
unlock tables;
|
||||
FLUSH TABLES WITH READ LOCK; # bug caused hang here
|
||||
UNLOCK TABLES;
|
||||
|
||||
# BUG#7358 SHOW CREATE DATABASE fails if open transaction
|
||||
# Bug#7358 SHOW CREATE DATABASE fails if open transaction
|
||||
|
||||
begin;
|
||||
select * from t1;
|
||||
show create database test;
|
||||
BEGIN;
|
||||
SELECT * FROM t1;
|
||||
SHOW CREATE DATABASE test;
|
||||
|
||||
drop table t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
# Cleanup
|
||||
--echo # Switch to connection default and close connections con1, con2, con3
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user