mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge mysql.com:/home/jonas/src/mysql-4.1
into mysql.com:/home/jonas/src/mysql-4.1-ndb
This commit is contained in:
@@ -40,6 +40,7 @@ georg@beethoven.local
|
|||||||
gerberb@ou800.zenez.com
|
gerberb@ou800.zenez.com
|
||||||
gluh@gluh.(none)
|
gluh@gluh.(none)
|
||||||
gluh@gluh.mysql.r18.ru
|
gluh@gluh.mysql.r18.ru
|
||||||
|
gordon@zero.local.lan
|
||||||
greg@gcw.ath.cx
|
greg@gcw.ath.cx
|
||||||
greg@mysql.com
|
greg@mysql.com
|
||||||
guilhem@mysql.com
|
guilhem@mysql.com
|
||||||
@@ -122,6 +123,7 @@ mwagner@work.mysql.com
|
|||||||
mydev@mysql.com
|
mydev@mysql.com
|
||||||
mysql@home.(none)
|
mysql@home.(none)
|
||||||
mysqldev@build.mysql2.com
|
mysqldev@build.mysql2.com
|
||||||
|
mysqldev@melody.local
|
||||||
mysqldev@mysql.com
|
mysqldev@mysql.com
|
||||||
ndbdev@ndbmaster.mysql.com
|
ndbdev@ndbmaster.mysql.com
|
||||||
nick@mysql.com
|
nick@mysql.com
|
||||||
|
@@ -162,7 +162,23 @@ sub trim_the_fat
|
|||||||
undef $/;
|
undef $/;
|
||||||
my $configure= <CONFIGURE>;
|
my $configure= <CONFIGURE>;
|
||||||
close(CONFIGURE);
|
close(CONFIGURE);
|
||||||
$configure=~ s|${the_fat}/Makefile dnl\n?||g;
|
|
||||||
|
#
|
||||||
|
# If $the_fat Makefile line closes the parenthesis, then
|
||||||
|
# replace that line with just the closing parenthesis.
|
||||||
|
#
|
||||||
|
if ($configure=~ m|${the_fat}/Makefile\)\n?|)
|
||||||
|
{
|
||||||
|
$configure=~ s|${the_fat}/Makefile(\)\n?)|$1|;
|
||||||
|
}
|
||||||
|
#
|
||||||
|
# Else just delete the line
|
||||||
|
#
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$configure=~ s|${the_fat}/Makefile dnl\n?||;
|
||||||
|
}
|
||||||
|
|
||||||
open(CONFIGURE,">configure.in") or die "Unable to open configure.in for write: $!\n";
|
open(CONFIGURE,">configure.in") or die "Unable to open configure.in for write: $!\n";
|
||||||
print CONFIGURE $configure;
|
print CONFIGURE $configure;
|
||||||
close(CONFIGURE);
|
close(CONFIGURE);
|
||||||
|
@@ -435,6 +435,10 @@ SOURCE=..\mysys\my_tempnam.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libmysql\my_time.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\mysys\my_thr_init.c
|
SOURCE=..\mysys\my_thr_init.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
10
configure.in
10
configure.in
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
|
|||||||
AC_INIT(sql/mysqld.cc)
|
AC_INIT(sql/mysqld.cc)
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
# The Docs Makefile.am parses this line!
|
# The Docs Makefile.am parses this line!
|
||||||
AM_INIT_AUTOMAKE(mysql, 4.1.3-beta)
|
AM_INIT_AUTOMAKE(mysql, 4.1.4-beta)
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
PROTOCOL_VERSION=10
|
PROTOCOL_VERSION=10
|
||||||
@@ -521,7 +521,7 @@ fi
|
|||||||
AC_SUBST(CHECK_PID)
|
AC_SUBST(CHECK_PID)
|
||||||
AC_MSG_RESULT("$CHECK_PID")
|
AC_MSG_RESULT("$CHECK_PID")
|
||||||
|
|
||||||
# We need a ANSI C compiler
|
# We need an ANSI C compiler
|
||||||
AM_PROG_CC_STDC
|
AM_PROG_CC_STDC
|
||||||
|
|
||||||
# We need an assembler, too
|
# We need an assembler, too
|
||||||
@@ -529,7 +529,7 @@ AM_PROG_AS
|
|||||||
|
|
||||||
if test "$am_cv_prog_cc_stdc" = "no"
|
if test "$am_cv_prog_cc_stdc" = "no"
|
||||||
then
|
then
|
||||||
AC_MSG_ERROR([MySQL requires a ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.])
|
AC_MSG_ERROR([MySQL requires an ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NOINST_LDFLAGS=
|
NOINST_LDFLAGS=
|
||||||
@@ -796,7 +796,7 @@ AC_CHECK_FUNC(sem_init, , AC_CHECK_LIB(posix4, sem_init))
|
|||||||
|
|
||||||
# For compress in zlib
|
# For compress in zlib
|
||||||
case $SYSTEM_TYPE in
|
case $SYSTEM_TYPE in
|
||||||
*netware*)
|
*netware* | *modesto*)
|
||||||
AC_DEFINE(HAVE_COMPRESS)
|
AC_DEFINE(HAVE_COMPRESS)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -2525,7 +2525,7 @@ done
|
|||||||
case $default_charset in
|
case $default_charset in
|
||||||
armscii8)
|
armscii8)
|
||||||
default_charset_default_collation="armscii8_general_ci"
|
default_charset_default_collation="armscii8_general_ci"
|
||||||
default_charset_collations="armscii8_general_ci armscii_bin"
|
default_charset_collations="armscii8_general_ci armscii8_bin"
|
||||||
;;
|
;;
|
||||||
ascii)
|
ascii)
|
||||||
default_charset_default_collation="ascii_general_ci"
|
default_charset_default_collation="ascii_general_ci"
|
||||||
|
@@ -14,8 +14,8 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
/* Error messages for mysql clients */
|
/* Error messages for MySQL clients */
|
||||||
/* error messages for the demon is in share/language/errmsg.sys */
|
/* (Error messages for the daemon are in share/language/errmsg.sys) */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -83,10 +83,10 @@ extern const char *client_errors[]; /* Error messages */
|
|||||||
#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042
|
#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042
|
||||||
#define CR_SHARED_MEMORY_MAP_ERROR 2043
|
#define CR_SHARED_MEMORY_MAP_ERROR 2043
|
||||||
#define CR_SHARED_MEMORY_EVENT_ERROR 2044
|
#define CR_SHARED_MEMORY_EVENT_ERROR 2044
|
||||||
#define CR_SHARED_MEMORY_CONNECT_ABANDODED_ERROR 2045
|
#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045
|
||||||
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046
|
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046
|
||||||
#define CR_CONN_UNKNOW_PROTOCOL 2047
|
#define CR_CONN_UNKNOW_PROTOCOL 2047
|
||||||
#define CR_INVALID_CONN_HANDLE 2048
|
#define CR_INVALID_CONN_HANDLE 2048
|
||||||
#define CR_SECURE_AUTH 2049
|
#define CR_SECURE_AUTH 2049
|
||||||
#define CR_FETCH_CANCELLED 2050
|
#define CR_FETCH_CANCELED 2050
|
||||||
#define CR_NO_DATA 2051
|
#define CR_NO_DATA 2051
|
||||||
|
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
#ifndef _dbug_h
|
#ifndef _dbug_h
|
||||||
#define _dbug_h
|
#define _dbug_h
|
||||||
#ifdef DBUG_OFF
|
|
||||||
#define NDEBUG /* for assert.h */
|
|
||||||
#endif
|
|
||||||
#include <assert.h>
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@@ -313,6 +313,13 @@ C_MODE_END
|
|||||||
#include <crypt.h>
|
#include <crypt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
A lot of our programs uses asserts, so better to always include it
|
||||||
|
This also fixes a problem when people uses DBUG_ASSERT without including
|
||||||
|
assert.h
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
/* Go around some bugs in different OS and compilers */
|
/* Go around some bugs in different OS and compilers */
|
||||||
#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H)
|
#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H)
|
||||||
#include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */
|
#include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */
|
||||||
@@ -1020,22 +1027,22 @@ do { doubleget_union _tmp; \
|
|||||||
32))
|
32))
|
||||||
#define int2store(T,A) do { uint def_temp= (uint) (A) ;\
|
#define int2store(T,A) do { uint def_temp= (uint) (A) ;\
|
||||||
*((uchar*) (T))= (uchar)(def_temp); \
|
*((uchar*) (T))= (uchar)(def_temp); \
|
||||||
*((uchar*) (T+1))=(uchar)((def_temp >> 8)); \
|
*((uchar*) (T)+1)=(uchar)((def_temp >> 8)); \
|
||||||
} while(0)
|
} while(0)
|
||||||
#define int3store(T,A) do { /*lint -save -e734 */\
|
#define int3store(T,A) do { /*lint -save -e734 */\
|
||||||
*((uchar*)(T))=(uchar) ((A));\
|
*((uchar*)(T))=(uchar) ((A));\
|
||||||
*((uchar*) (T)+1)=(uchar) (((A) >> 8));\
|
*((uchar*) (T)+1)=(uchar) (((A) >> 8));\
|
||||||
*((uchar*)(T)+2)=(uchar) (((A) >> 16)); \
|
*((uchar*)(T)+2)=(uchar) (((A) >> 16)); \
|
||||||
/*lint -restore */} while(0)
|
/*lint -restore */} while(0)
|
||||||
#define int4store(T,A) do { *(T)=(char) ((A));\
|
#define int4store(T,A) do { *((char *)(T))=(char) ((A));\
|
||||||
*((T)+1)=(char) (((A) >> 8));\
|
*(((char *)(T))+1)=(char) (((A) >> 8));\
|
||||||
*((T)+2)=(char) (((A) >> 16));\
|
*(((char *)(T))+2)=(char) (((A) >> 16));\
|
||||||
*((T)+3)=(char) (((A) >> 24)); } while(0)
|
*(((char *)(T))+3)=(char) (((A) >> 24)); } while(0)
|
||||||
#define int5store(T,A) do { *(T)=((A));\
|
#define int5store(T,A) do { *((char *)(T))=((A));\
|
||||||
*((T)+1)=(((A) >> 8));\
|
*(((char *)(T))+1)=(((A) >> 8));\
|
||||||
*((T)+2)=(((A) >> 16));\
|
*(((char *)(T))+2)=(((A) >> 16));\
|
||||||
*((T)+3)=(((A) >> 24)); \
|
*(((char *)(T))+3)=(((A) >> 24)); \
|
||||||
*((T)+4)=(((A) >> 32)); } while(0)
|
*(((char *)(T))+4)=(((A) >> 32)); } while(0)
|
||||||
#define int8store(T,A) do { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \
|
#define int8store(T,A) do { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \
|
||||||
int4store((T),def_temp); \
|
int4store((T),def_temp); \
|
||||||
int4store((T+4),def_temp2); } while(0)
|
int4store((T+4),def_temp2); } while(0)
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
/* Error messages for MySQL clients */
|
/* Error messages for MySQL clients */
|
||||||
/* error messages for the daemon is in share/language/errmsg.sys */
|
/* (Error messages for the daemon are in share/language/errmsg.sys) */
|
||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <my_sys.h>
|
#include <my_sys.h>
|
||||||
@@ -31,20 +31,20 @@ const char *client_errors[]=
|
|||||||
"Kann TCP/IP-Socket nicht anlegen (%d)",
|
"Kann TCP/IP-Socket nicht anlegen (%d)",
|
||||||
"Unbekannter MySQL Server Host (%-.100s) (%d)",
|
"Unbekannter MySQL Server Host (%-.100s) (%d)",
|
||||||
"MySQL Server nicht vorhanden",
|
"MySQL Server nicht vorhanden",
|
||||||
"Protokolle ungleich. Server Version = % d Client Version = %d",
|
"Protokolle ungleich; Server Version = %d, Client Version = %d",
|
||||||
"MySQL client got out of memory",
|
"MySQL client ran out of memory",
|
||||||
"Wrong host info",
|
"Wrong host info",
|
||||||
"Localhost via UNIX socket",
|
"Localhost via UNIX socket",
|
||||||
"%-.100s via TCP/IP",
|
"%-.100s via TCP/IP",
|
||||||
"Error in server handshake",
|
"Error in server handshake",
|
||||||
"Lost connection to MySQL server during query",
|
"Lost connection to MySQL server during query",
|
||||||
"Commands out of sync; You can't run this command now",
|
"Commands out of sync; you can't run this command now",
|
||||||
"Verbindung ueber Named Pipe; Host: %-.100s",
|
"Verbindung ueber Named Pipe; Host: %-.100s",
|
||||||
"Kann nicht auf Named Pipe warten. Host: %-.64s pipe: %-.32s (%lu)",
|
"Kann nicht auf Named Pipe warten. Host: %-.64s pipe: %-.32s (%lu)",
|
||||||
"Kann Named Pipe nicht oeffnen. Host: %-.64s pipe: %-.32s (%lu)",
|
"Kann Named Pipe nicht oeffnen. Host: %-.64s pipe: %-.32s (%lu)",
|
||||||
"Kann den Status der Named Pipe nicht setzen. Host: %-.64s pipe: %-.32s (%lu)",
|
"Kann den Status der Named Pipe nicht setzen. Host: %-.64s pipe: %-.32s (%lu)",
|
||||||
"Can't initialize character set %-.32s (path: %-.100s)",
|
"Can't initialize character set %-.32s (path: %-.100s)",
|
||||||
"Got packet bigger than 'max_allowed_packet'",
|
"Got packet bigger than 'max_allowed_packet' bytes",
|
||||||
"Embedded server",
|
"Embedded server",
|
||||||
"Error on SHOW SLAVE STATUS:",
|
"Error on SHOW SLAVE STATUS:",
|
||||||
"Error on SHOW SLAVE HOSTS:",
|
"Error on SHOW SLAVE HOSTS:",
|
||||||
@@ -55,26 +55,26 @@ const char *client_errors[]=
|
|||||||
"This client library is licensed only for use with MySQL servers having '%s' license",
|
"This client library is licensed only for use with MySQL servers having '%s' license",
|
||||||
"Invalid use of null pointer",
|
"Invalid use of null pointer",
|
||||||
"Statement not prepared",
|
"Statement not prepared",
|
||||||
"Parameters data was not supplied",
|
"No data supplied for parameters in prepared statement",
|
||||||
"Data truncated",
|
"Data truncated",
|
||||||
"No parameters exists in the statement",
|
"No parameters exist in the statement",
|
||||||
"Invalid parameter number",
|
"Invalid parameter number",
|
||||||
"Can't send long data for non string or binary data types (parameter: %d)",
|
"Can't send long data for non-string/non-binary data types (parameter: %d)",
|
||||||
"Using unsupported buffer type: %d (parameter: %d)",
|
"Using unsupported buffer type: %d (parameter: %d)",
|
||||||
"Shared memory (%lu)",
|
"Shared memory (%lu)",
|
||||||
"Can't open shared memory. Request event don't create (%lu)",
|
"Can't open shared memory; client could not create request event (%lu)",
|
||||||
"Can't open shared memory. Answer event don't create (%lu)",
|
"Can't open shared memory; no answer event received from server (%lu)",
|
||||||
"Can't open shared memory. File mapping don't create (%lu)",
|
"Can't open shared memory; server could not allocate file mapping (%lu)",
|
||||||
"Can't open shared memory. Map of memory don't create (%lu)",
|
"Can't open shared memory; server could not get pointer to file mapping (%lu)",
|
||||||
"Can't open shared memory. File mapping don't create for client (%lu)",
|
"Can't open shared memory; client could not allocate file mapping (%lu)",
|
||||||
"Can't open shared memory. Map of memory don't create for client (%lu)",
|
"Can't open shared memory; client could not get pointer to file mapping (%lu)",
|
||||||
"Can't open shared memory. %s event don't create for client (%lu)",
|
"Can't open shared memory; client could not create %s event (%lu)",
|
||||||
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
"Can't open shared memory; no answer from server (%lu)",
|
||||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
"Can't open shared memory; cannot send request event to server (%lu)",
|
||||||
"Wrong or unknown protocol",
|
"Wrong or unknown protocol",
|
||||||
"Invalid connection handle",
|
"Invalid connection handle",
|
||||||
"Connection using old (pre 4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
|
"Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
|
||||||
"Row retrieval was cancelled by mysql_stmt_close() call",
|
"Row retrieval was canceled by mysql_stmt_close() call",
|
||||||
"Attempt to read column without prior row fetch"
|
"Attempt to read column without prior row fetch"
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -90,20 +90,20 @@ const char *client_errors[]=
|
|||||||
"N<EFBFBD>o pode criar 'socket TCP/IP' (%d)",
|
"N<EFBFBD>o pode criar 'socket TCP/IP' (%d)",
|
||||||
"'Host' servidor MySQL '%-.100s' (%d) desconhecido",
|
"'Host' servidor MySQL '%-.100s' (%d) desconhecido",
|
||||||
"Servidor MySQL desapareceu",
|
"Servidor MySQL desapareceu",
|
||||||
"Incompatibilidade de protocolos. Vers<EFBFBD>o do Servidor: %d - Vers<EFBFBD>o do Cliente: %d",
|
"Incompatibilidade de protocolos; vers<EFBFBD>o do servidor = %d, vers<EFBFBD>o do cliente = %d",
|
||||||
"Cliente do MySQL com falta de mem<65>ria",
|
"Cliente do MySQL com falta de mem<65>ria",
|
||||||
"Informa<EFBFBD><EFBFBD>o inv<6E>lida de 'host'",
|
"Informa<EFBFBD><EFBFBD>o inv<6E>lida de 'host'",
|
||||||
"Localhost via 'UNIX socket'",
|
"Localhost via 'UNIX socket'",
|
||||||
"%-.100s via 'TCP/IP'",
|
"%-.100s via 'TCP/IP'",
|
||||||
"Erro na negocia<69><61>o de acesso ao servidor",
|
"Erro na negocia<69><61>o de acesso ao servidor",
|
||||||
"Conex<EFBFBD>o perdida com servidor MySQL durante 'query'",
|
"Conex<EFBFBD>o perdida com servidor MySQL durante 'query'",
|
||||||
"Comandos fora de sincronismo. Voc<EFBFBD> n<>o pode executar este comando agora",
|
"Comandos fora de sincronismo; voc<EFBFBD> n<>o pode executar este comando agora",
|
||||||
"%-.100s via 'named pipe'",
|
"%-.100s via 'named pipe'",
|
||||||
"N<EFBFBD>o pode esperar pelo 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)",
|
"N<EFBFBD>o pode esperar pelo 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)",
|
||||||
"N<EFBFBD>o pode abrir 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)",
|
"N<EFBFBD>o pode abrir 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)",
|
||||||
"N<EFBFBD>o pode estabelecer o estado do 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)",
|
"N<EFBFBD>o pode estabelecer o estado do 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)",
|
||||||
"N<EFBFBD>o pode inicializar conjunto de caracteres %-.32s (caminho %-.100s)",
|
"N<EFBFBD>o pode inicializar conjunto de caracteres %-.32s (caminho %-.100s)",
|
||||||
"Obteve pacote maior do que 'max_allowed_packet'",
|
"Obteve pacote maior do que 'max_allowed_packet' bytes",
|
||||||
"Embedded server"
|
"Embedded server"
|
||||||
"Error on SHOW SLAVE STATUS:",
|
"Error on SHOW SLAVE STATUS:",
|
||||||
"Error on SHOW SLAVE HOSTS:",
|
"Error on SHOW SLAVE HOSTS:",
|
||||||
@@ -114,26 +114,26 @@ const char *client_errors[]=
|
|||||||
"This client library is licensed only for use with MySQL servers having '%s' license",
|
"This client library is licensed only for use with MySQL servers having '%s' license",
|
||||||
"Invalid use of null pointer",
|
"Invalid use of null pointer",
|
||||||
"Statement not prepared",
|
"Statement not prepared",
|
||||||
"Parameters data was not supplied",
|
"No data supplied for parameters in prepared statement",
|
||||||
"Data truncated",
|
"Data truncated",
|
||||||
"No parameters exists in the statement",
|
"No parameters exist in the statement",
|
||||||
"Invalid parameter number",
|
"Invalid parameter number",
|
||||||
"Can't send long data for non string or binary data types (parameter: %d)",
|
"Can't send long data for non-string/non-binary data types (parameter: %d)",
|
||||||
"Using unsupported buffer type: %d (parameter: %d)",
|
"Using unsupported buffer type: %d (parameter: %d)",
|
||||||
"Shared memory (%lu)",
|
"Shared memory (%lu)",
|
||||||
"Can't open shared memory. Request event don't create (%lu)",
|
"Can't open shared memory; client could not create request event (%lu)",
|
||||||
"Can't open shared memory. Answer event don't create (%lu)",
|
"Can't open shared memory; no answer event received from server (%lu)",
|
||||||
"Can't open shared memory. File mapping don't create (%lu)",
|
"Can't open shared memory; server could not allocate file mapping (%lu)",
|
||||||
"Can't open shared memory. Map of memory don't create (%lu)",
|
"Can't open shared memory; server could not get pointer to file mapping (%lu)",
|
||||||
"Can't open shared memory. File mapping don't create for client (%lu)",
|
"Can't open shared memory; client could not allocate file mapping (%lu)",
|
||||||
"Can't open shared memory. Map of memory don't create for client (%lu)",
|
"Can't open shared memory; client could not get pointer to file mapping (%lu)",
|
||||||
"Can't open shared memory. %s event don't create for client (%lu)",
|
"Can't open shared memory; client could not create %s event (%lu)",
|
||||||
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
"Can't open shared memory; no answer from server (%lu)",
|
||||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
"Can't open shared memory; cannot send request event to server (%lu)",
|
||||||
"Wrong or unknown protocol",
|
"Wrong or unknown protocol",
|
||||||
"Invalid connection handle",
|
"Invalid connection handle",
|
||||||
"Connection using old (pre 4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
|
"Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
|
||||||
"Row retrieval was cancelled by mysql_stmt_close() call",
|
"Row retrieval was canceled by mysql_stmt_close() call",
|
||||||
"Attempt to read column without prior row fetch"
|
"Attempt to read column without prior row fetch"
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -145,22 +145,22 @@ const char *client_errors[]=
|
|||||||
"Can't connect to local MySQL server through socket '%-.100s' (%d)",
|
"Can't connect to local MySQL server through socket '%-.100s' (%d)",
|
||||||
"Can't connect to MySQL server on '%-.100s' (%d)",
|
"Can't connect to MySQL server on '%-.100s' (%d)",
|
||||||
"Can't create TCP/IP socket (%d)",
|
"Can't create TCP/IP socket (%d)",
|
||||||
"Unknown MySQL Server Host '%-.100s' (%d)",
|
"Unknown MySQL server host '%-.100s' (%d)",
|
||||||
"MySQL server has gone away",
|
"MySQL server has gone away",
|
||||||
"Protocol mismatch. Server Version = %d Client Version = %d",
|
"Protocol mismatch; server version = %d, client version = %d",
|
||||||
"MySQL client run out of memory",
|
"MySQL client ran out of memory",
|
||||||
"Wrong host info",
|
"Wrong host info",
|
||||||
"Localhost via UNIX socket",
|
"Localhost via UNIX socket",
|
||||||
"%-.100s via TCP/IP",
|
"%-.100s via TCP/IP",
|
||||||
"Error in server handshake",
|
"Error in server handshake",
|
||||||
"Lost connection to MySQL server during query",
|
"Lost connection to MySQL server during query",
|
||||||
"Commands out of sync; You can't run this command now",
|
"Commands out of sync; you can't run this command now",
|
||||||
"%-.100s via named pipe",
|
"%-.100s via named pipe",
|
||||||
"Can't wait for named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
"Can't wait for named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
||||||
"Can't open named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
"Can't open named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
||||||
"Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
"Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
||||||
"Can't initialize character set %-.32s (path: %-.100s)",
|
"Can't initialize character set %-.32s (path: %-.100s)",
|
||||||
"Got packet bigger than 'max_allowed_packet'",
|
"Got packet bigger than 'max_allowed_packet' bytes",
|
||||||
"Embedded server",
|
"Embedded server",
|
||||||
"Error on SHOW SLAVE STATUS:",
|
"Error on SHOW SLAVE STATUS:",
|
||||||
"Error on SHOW SLAVE HOSTS:",
|
"Error on SHOW SLAVE HOSTS:",
|
||||||
@@ -171,26 +171,26 @@ const char *client_errors[]=
|
|||||||
"This client library is licensed only for use with MySQL servers having '%s' license",
|
"This client library is licensed only for use with MySQL servers having '%s' license",
|
||||||
"Invalid use of null pointer",
|
"Invalid use of null pointer",
|
||||||
"Statement not prepared",
|
"Statement not prepared",
|
||||||
"Not all parameters data supplied",
|
"No data supplied for parameters in prepared statement",
|
||||||
"Data truncated",
|
"Data truncated",
|
||||||
"No parameters exists in the statement",
|
"No parameters exist in the statement",
|
||||||
"Invalid parameter number",
|
"Invalid parameter number",
|
||||||
"Can't send long data for non string or binary data types (parameter: %d)",
|
"Can't send long data for non-string/non-binary data types (parameter: %d)",
|
||||||
"Using unsupported buffer type: %d (parameter: %d)",
|
"Using unsupported buffer type: %d (parameter: %d)",
|
||||||
"Shared memory (%lu)",
|
"Shared memory (%lu)",
|
||||||
"Can't open shared memory. Request event don't create (%lu)",
|
"Can't open shared memory; client could not create request event (%lu)",
|
||||||
"Can't open shared memory. Answer event don't create (%lu)",
|
"Can't open shared memory; no answer event received from server (%lu)",
|
||||||
"Can't open shared memory. File mapping don't create (%lu)",
|
"Can't open shared memory; server could not allocate file mapping (%lu)",
|
||||||
"Can't open shared memory. Map of memory don't create (%lu)",
|
"Can't open shared memory; server could not get pointer to file mapping (%lu)",
|
||||||
"Can't open shared memory. File mapping don't create for client (%lu)",
|
"Can't open shared memory; client could not allocate file mapping (%lu)",
|
||||||
"Can't open shared memory. Map of memory don't create for client (%lu)",
|
"Can't open shared memory; client could not get pointer to file mapping (%lu)",
|
||||||
"Can't open shared memory. %s event don't create for client (%lu)",
|
"Can't open shared memory; client could not create %s event (%lu)",
|
||||||
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
"Can't open shared memory; no answer from server (%lu)",
|
||||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
"Can't open shared memory; cannot send request event to server (%lu)",
|
||||||
"Wrong or unknown protocol",
|
"Wrong or unknown protocol",
|
||||||
"Invalid connection handle",
|
"Invalid connection handle",
|
||||||
"Connection using old (pre 4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
|
"Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
|
||||||
"Row retrieval was cancelled by mysql_stmt_close() call",
|
"Row retrieval was canceled by mysql_stmt_close() call",
|
||||||
"Attempt to read column without prior row fetch"
|
"Attempt to read column without prior row fetch"
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2522,7 +2522,7 @@ static int stmt_read_row_unbuffered(MYSQL_STMT *stmt, unsigned char **row)
|
|||||||
if (mysql->status != MYSQL_STATUS_GET_RESULT)
|
if (mysql->status != MYSQL_STATUS_GET_RESULT)
|
||||||
{
|
{
|
||||||
set_stmt_error(stmt, stmt->unbuffered_fetch_cancelled ?
|
set_stmt_error(stmt, stmt->unbuffered_fetch_cancelled ?
|
||||||
CR_FETCH_CANCELLED : CR_COMMANDS_OUT_OF_SYNC,
|
CR_FETCH_CANCELED : CR_COMMANDS_OUT_OF_SYNC,
|
||||||
unknown_sqlstate);
|
unknown_sqlstate);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
43
mysql-test/include/ps_create.inc
Normal file
43
mysql-test/include/ps_create.inc
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
############### include/ps_create.inc ##################
|
||||||
|
# #
|
||||||
|
# drop + create the tables used in most PS test cases #
|
||||||
|
# t/ps_*.test #
|
||||||
|
# #
|
||||||
|
########################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TABLES HERE !!!
|
||||||
|
#
|
||||||
|
# Please be aware, that this file will be sourced by several
|
||||||
|
# test case files stored within the subdirectory 't'.
|
||||||
|
# So every change here will affect several test cases.
|
||||||
|
|
||||||
|
#----------- Please insert your table definitions here ----------#
|
||||||
|
|
||||||
|
|
||||||
|
#---- Please do not alter the following table definitions -------#
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1, t_many_col_types ;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
eval create table t1
|
||||||
|
(
|
||||||
|
a int, b varchar(30),
|
||||||
|
primary key(a)
|
||||||
|
) engine = $type ;
|
||||||
|
|
||||||
|
eval create table t_many_col_types
|
||||||
|
(
|
||||||
|
c1 tinyint, c2 smallint, c3 mediumint, c4 int,
|
||||||
|
c5 integer, c6 bigint, c7 float, c8 double,
|
||||||
|
c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
|
||||||
|
c13 date, c14 datetime, c15 timestamp(14), c16 time,
|
||||||
|
c17 year, c18 bit, c19 bool, c20 char,
|
||||||
|
c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
|
||||||
|
c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
|
||||||
|
c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
|
||||||
|
c32 set('monday', 'tuesday', 'wednesday'),
|
||||||
|
primary key(c1)
|
||||||
|
) engine = $type ;
|
239
mysql-test/include/ps_modify.inc
Normal file
239
mysql-test/include/ps_modify.inc
Normal file
@@ -0,0 +1,239 @@
|
|||||||
|
###################### ps_modify.inc #########################
|
||||||
|
# #
|
||||||
|
# Tests for prepared statements: INSERT/DELETE/UPDATE... #
|
||||||
|
# #
|
||||||
|
##############################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
#
|
||||||
|
# Please be aware, that this file will be sourced by several test case files
|
||||||
|
# stored within the subdirectory 't'. So every change here will affect
|
||||||
|
# several test cases.
|
||||||
|
#
|
||||||
|
# Please do not modify the structure (DROP/ALTER..) of the tables
|
||||||
|
# 't1' and 't_many_col_types'.
|
||||||
|
#
|
||||||
|
# But you are encouraged to use these two tables within your statements
|
||||||
|
# whenever possible.
|
||||||
|
# t1 - very simple table
|
||||||
|
# t_many_col_types - table with nearly all available column types
|
||||||
|
#
|
||||||
|
# The structure and the content of these tables can be found in
|
||||||
|
# include/ps_create.inc CREATE TABLE ...
|
||||||
|
# include/ps_renew.inc DELETE all rows and INSERT some rows
|
||||||
|
#
|
||||||
|
# Both tables are managed by the same storage engine.
|
||||||
|
# The type of the storage engine is stored in the variable '$type' .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#------------------- Please insert your test cases here -------------------#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------- Please be very carefull when editing behind this line ----------#
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ delete tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
--source include/ps_renew.inc
|
||||||
|
|
||||||
|
## delete without parameter
|
||||||
|
prepare stmt1 from 'delete from t1 where a=2' ;
|
||||||
|
execute stmt1;
|
||||||
|
select a,b from t1 where a=2;
|
||||||
|
# delete with row not found
|
||||||
|
execute stmt1;
|
||||||
|
|
||||||
|
## delete with one parameter in the where clause
|
||||||
|
insert into t1 values(0,NULL);
|
||||||
|
set @arg00=NULL;
|
||||||
|
prepare stmt1 from 'delete from t1 where b=?' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where b is NULL ;
|
||||||
|
set @arg00='one';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where b=@arg00;
|
||||||
|
|
||||||
|
## truncate a table
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from 'truncate table t1' ;
|
||||||
|
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ update tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
--source include/ps_renew.inc
|
||||||
|
|
||||||
|
## update without parameter
|
||||||
|
prepare stmt1 from 'update t1 set b=''a=two'' where a=2' ;
|
||||||
|
execute stmt1;
|
||||||
|
select a,b from t1 where a=2;
|
||||||
|
# dummy update
|
||||||
|
execute stmt1;
|
||||||
|
select a,b from t1 where a=2;
|
||||||
|
|
||||||
|
## update with one parameter in the set clause
|
||||||
|
set @arg00=NULL;
|
||||||
|
prepare stmt1 from 'update t1 set b=? where a=2' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where a=2;
|
||||||
|
set @arg00='two';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where a=2;
|
||||||
|
|
||||||
|
## update with one parameter in the where cause
|
||||||
|
set @arg00=2;
|
||||||
|
prepare stmt1 from 'update t1 set b=NULL where a=?' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where a=@arg00;
|
||||||
|
update t1 set b='two' where a=@arg00;
|
||||||
|
# row not found in update
|
||||||
|
set @arg00=2000;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where a=@arg00;
|
||||||
|
|
||||||
|
## update on primary key column (two parameters)
|
||||||
|
set @arg00=2;
|
||||||
|
set @arg01=22;
|
||||||
|
prepare stmt1 from 'update t1 set a=? where a=?' ;
|
||||||
|
# dummy update
|
||||||
|
execute stmt1 using @arg00, @arg00;
|
||||||
|
select a,b from t1 where a=@arg00;
|
||||||
|
execute stmt1 using @arg01, @arg00;
|
||||||
|
select a,b from t1 where a=@arg01;
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
select a,b from t1 where a=@arg00;
|
||||||
|
set @arg00=NULL;
|
||||||
|
set @arg01=2;
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
select a,b from t1;
|
||||||
|
set @arg00=0;
|
||||||
|
execute stmt1 using @arg01, @arg00;
|
||||||
|
select a,b from t1;
|
||||||
|
|
||||||
|
## update with subquery and several parameters
|
||||||
|
set @arg00=23;
|
||||||
|
set @arg01='two';
|
||||||
|
set @arg02=2;
|
||||||
|
set @arg03='two';
|
||||||
|
set @arg04=2;
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t2;
|
||||||
|
--enable_warnings
|
||||||
|
create table t2 as select a,b from t1 ;
|
||||||
|
prepare stmt1 from 'update t1 set a=? where b=?
|
||||||
|
and a in (select ? from t2
|
||||||
|
where b = ? or a = ?)';
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03, @arg04 ;
|
||||||
|
select a,b from t1 where a = @arg00 ;
|
||||||
|
prepare stmt1 from 'update t1 set a=? where b=?
|
||||||
|
and a not in (select ? from t2
|
||||||
|
where b = ? or a = ?)';
|
||||||
|
execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ;
|
||||||
|
select a,b from t1 ;
|
||||||
|
drop table t2 ;
|
||||||
|
|
||||||
|
## update with parameters in limit
|
||||||
|
set @arg00=1;
|
||||||
|
prepare stmt1 from 'update t1 set b=''bla''
|
||||||
|
where a=2
|
||||||
|
limit 1';
|
||||||
|
execute stmt1 ;
|
||||||
|
select a,b from t1 where b = 'bla' ;
|
||||||
|
# currently (May 2004, Version 4.1) it is impossible
|
||||||
|
-- error 1064
|
||||||
|
prepare stmt1 from 'update t1 set b=''bla''
|
||||||
|
where a=2
|
||||||
|
limit ?';
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ insert tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
--source include/ps_renew.inc
|
||||||
|
|
||||||
|
## insert without parameter
|
||||||
|
prepare stmt1 from 'insert into t1 values(5, ''five'' )';
|
||||||
|
execute stmt1;
|
||||||
|
select a,b from t1 where a = 5;
|
||||||
|
|
||||||
|
## insert with one parameter in values part
|
||||||
|
set @arg00='six' ;
|
||||||
|
prepare stmt1 from 'insert into t1 values(6, ? )';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where b = @arg00;
|
||||||
|
# the second insert fails, because the first column is primary key
|
||||||
|
--error 1062
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
set @arg00=NULL ;
|
||||||
|
prepare stmt1 from 'insert into t1 values(0, ? )';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
select a,b from t1 where b is NULL;
|
||||||
|
|
||||||
|
## insert with two parameter in values part
|
||||||
|
set @arg00=8 ;
|
||||||
|
set @arg01='eight' ;
|
||||||
|
prepare stmt1 from 'insert into t1 values(?, ? )';
|
||||||
|
execute stmt1 using @arg00, @arg01 ;
|
||||||
|
select a,b from t1 where b = @arg01;
|
||||||
|
|
||||||
|
## insert with two rows in values part
|
||||||
|
set @arg00=81 ;
|
||||||
|
set @arg01='8-1' ;
|
||||||
|
set @arg02=82 ;
|
||||||
|
set @arg03='8-2' ;
|
||||||
|
prepare stmt1 from 'insert into t1 values(?,?),(?,?)';
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||||
|
select a,b from t1 where a in (@arg00,@arg02) ;
|
||||||
|
|
||||||
|
## insert with two parameter in the set part
|
||||||
|
set @arg00=9 ;
|
||||||
|
set @arg01='nine' ;
|
||||||
|
prepare stmt1 from 'insert into t1 set a=?, b=? ';
|
||||||
|
execute stmt1 using @arg00, @arg01 ;
|
||||||
|
select a,b from t1 where a = @arg00 ;
|
||||||
|
|
||||||
|
## insert with parameters in the ON DUPLICATE KEY part
|
||||||
|
set @arg00=6 ;
|
||||||
|
set @arg01=1 ;
|
||||||
|
prepare stmt1 from 'insert into t1 set a=?, b=''sechs''
|
||||||
|
on duplicate key update a=a + ?, b=concat(b,''modified'') ';
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
select * from t1;
|
||||||
|
set @arg00=81 ;
|
||||||
|
set @arg01=1 ;
|
||||||
|
--error 1062
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
|
||||||
|
## many parameters
|
||||||
|
set @1000=1000 ;
|
||||||
|
set @x1000_2="x1000_2" ;
|
||||||
|
set @x1000_3="x1000_3" ;
|
||||||
|
|
||||||
|
set @x1000="x1000" ;
|
||||||
|
set @1100=1100 ;
|
||||||
|
set @x1100="x1100" ;
|
||||||
|
set @100=100 ;
|
||||||
|
set @updated="updated" ;
|
||||||
|
insert into t1 values(1000,'x1000_1') ;
|
||||||
|
insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3)
|
||||||
|
on duplicate key update a = a + @100, b = concat(b,@updated) ;
|
||||||
|
select a,b from t1 where a >= 1000 ;
|
||||||
|
delete from t1 where a >= 1000 ;
|
||||||
|
insert into t1 values(1000,'x1000_1') ;
|
||||||
|
prepare stmt1 from ' insert into t1 values(?,?),(?,?)
|
||||||
|
on duplicate key update a = a + ?, b = concat(b,?) ';
|
||||||
|
execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ;
|
||||||
|
select a,b from t1 where a >= 1000 ;
|
||||||
|
delete from t1 where a >= 1000 ;
|
||||||
|
insert into t1 values(1000,'x1000_1') ;
|
||||||
|
execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ;
|
||||||
|
select a,b from t1 where a >= 1000 ;
|
||||||
|
delete from t1 where a >= 1000 ;
|
||||||
|
|
||||||
|
## replace
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' replace into t1 (a,b) select 100, ''hundred'' ';
|
97
mysql-test/include/ps_modify1.inc
Normal file
97
mysql-test/include/ps_modify1.inc
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
###################### ps_modify1.inc ########################
|
||||||
|
# #
|
||||||
|
# Tests for prepared statements: big INSERT .. SELECTs #
|
||||||
|
# #
|
||||||
|
##############################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: THESE TESTS CANNOT BE APPLIED TO TABLES OF TYPE MERGE.
|
||||||
|
# Test which can be applied to MERGE tables should be stored in
|
||||||
|
# include/ps_modify.inc .
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
#
|
||||||
|
# Please be aware, that this file will be sourced by several test case files
|
||||||
|
# stored within the subdirectory 't'. So every change here will affect
|
||||||
|
# several test cases.
|
||||||
|
#
|
||||||
|
# Please do not modify the structure (DROP/ALTER..) of the tables
|
||||||
|
# 't1' and 't_many_col_types'.
|
||||||
|
#
|
||||||
|
# But you are encouraged to use these two tables within your statements
|
||||||
|
# (DELETE/UPDATE/...) whenever possible.
|
||||||
|
# t1 - very simple table
|
||||||
|
# t_many_col_types - table with nearly all available column types
|
||||||
|
#
|
||||||
|
# The structure and the content of these tables can be found in
|
||||||
|
# include/ps_create.inc CREATE TABLE ...
|
||||||
|
# include/ps_renew.inc DELETE all rows and INSERT some rows
|
||||||
|
#
|
||||||
|
# Both tables are managed by the same storage engine.
|
||||||
|
# The type of the storage engine is stored in the variable '$type' .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#------------------- Please insert your test cases here -------------------#
|
||||||
|
|
||||||
|
|
||||||
|
#-------- Please be very carefull when editing behind this line ----------#
|
||||||
|
|
||||||
|
## big insert select statements
|
||||||
|
set @duplicate='duplicate ' ;
|
||||||
|
set @1000=1000 ;
|
||||||
|
set @5=5 ;
|
||||||
|
select a,b from t1 where a < 5 ;
|
||||||
|
--enable_info
|
||||||
|
insert into t1 select a + @1000, concat(@duplicate,b) from t1
|
||||||
|
where a < @5 ;
|
||||||
|
--disable_info
|
||||||
|
select a,b from t1 where a >= 1000 ;
|
||||||
|
delete from t1 where a >= 1000 ;
|
||||||
|
prepare stmt1 from ' insert into t1 select a + ?, concat(?,b) from t1
|
||||||
|
where a < ? ' ;
|
||||||
|
--enable_info
|
||||||
|
execute stmt1 using @1000, @duplicate, @5;
|
||||||
|
--disable_info
|
||||||
|
select a,b from t1 where a >= 1000 ;
|
||||||
|
delete from t1 where a >= 1000 ;
|
||||||
|
|
||||||
|
set @float=1.00;
|
||||||
|
set @five='five' ;
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t2;
|
||||||
|
--enable_warnings
|
||||||
|
create table t2 like t1 ;
|
||||||
|
--enable_info
|
||||||
|
insert into t2 (b,a)
|
||||||
|
select @duplicate, sum(first.a) from t1 first, t1 second
|
||||||
|
where first.a <> @5 and second.b = first.b
|
||||||
|
and second.b <> @five
|
||||||
|
group by second.b
|
||||||
|
having sum(second.a) > @2
|
||||||
|
union
|
||||||
|
select b, a + @100 from t1
|
||||||
|
where (a,b) in ( select sqrt(a+@1)+CAST(@float AS signed),b
|
||||||
|
from t1);
|
||||||
|
--disable_info
|
||||||
|
select a,b from t2;
|
||||||
|
delete from t2 ;
|
||||||
|
prepare stmt1 from ' insert into t2 (b,a)
|
||||||
|
select ?, sum(first.a)
|
||||||
|
from t1 first, t1 second
|
||||||
|
where first.a <> ? and second.b = first.b and second.b <> ?
|
||||||
|
group by second.b
|
||||||
|
having sum(second.a) > ?
|
||||||
|
union
|
||||||
|
select b, a + ? from t1
|
||||||
|
where (a,b) in ( select sqrt(a+?)+CAST(? AS signed),b
|
||||||
|
from t1 ) ' ;
|
||||||
|
--enable_info
|
||||||
|
execute stmt1 using @duplicate, @5, @five, @2, @100, @1, @float ;
|
||||||
|
--disable_info
|
||||||
|
select a,b from t2;
|
||||||
|
drop table t2;
|
616
mysql-test/include/ps_query.inc
Normal file
616
mysql-test/include/ps_query.inc
Normal file
@@ -0,0 +1,616 @@
|
|||||||
|
####################### ps_query.inc #########################
|
||||||
|
# #
|
||||||
|
# Tests for prepared statements: SELECTs #
|
||||||
|
# #
|
||||||
|
##############################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
#
|
||||||
|
# Please be aware, that this file will be sourced by several test case files
|
||||||
|
# stored within the subdirectory 't'. So every change here will affect
|
||||||
|
# several test cases.
|
||||||
|
#
|
||||||
|
# Please do not modify (INSERT/UPDATE/DELETE) the content or the
|
||||||
|
# structure (DROP/ALTER..) of the tables
|
||||||
|
# 't1' and 't_many_col_types'.
|
||||||
|
# Such tests should be done in include/ps_modify.inc .
|
||||||
|
#
|
||||||
|
# But you are encouraged to use these two tables within your SELECT statements
|
||||||
|
# whenever possible.
|
||||||
|
# t1 - very simple table
|
||||||
|
# t_many_col_types - table with nearly all available column types
|
||||||
|
#
|
||||||
|
# The structure and the content of these tables can be found in
|
||||||
|
# include/ps_create.inc CREATE TABLE ...
|
||||||
|
# include/ps_renew.inc DELETE all rows and INSERT some rows
|
||||||
|
#
|
||||||
|
# Both tables are managed by the same storage engine.
|
||||||
|
# The type of the storage engine is stored in the variable '$type' .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#------------------- Please insert your test cases here -------------------#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------- Please be very carefull when editing behind this line ----------#
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ simple select tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
##### parameter used for keyword like SELECT (must fail)
|
||||||
|
set @arg00='SELECT' ;
|
||||||
|
# mysqltest gives no output for the next statement, Why ??
|
||||||
|
--error 1064
|
||||||
|
@arg00 a from t1 where a=1;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||||
|
|
||||||
|
##### parameter in select column list
|
||||||
|
## parameter is not NULL
|
||||||
|
set @arg00=1 ;
|
||||||
|
select @arg00, b from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select ?, b from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00='lion' ;
|
||||||
|
select @arg00, b from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select ?, b from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
## parameter is NULL
|
||||||
|
set @arg00=NULL ;
|
||||||
|
select @arg00, b from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select ?, b from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
## parameter within an expression
|
||||||
|
set @arg00=1 ;
|
||||||
|
select b, a - @arg00 from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select b, a - ? from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
## parameter is within a function
|
||||||
|
# variations on 'substr'
|
||||||
|
set @arg00='MySQL' ;
|
||||||
|
select substr(@arg00,1,2) from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select substr(?,1,2) from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00=3 ;
|
||||||
|
select substr('MySQL',@arg00,5) from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select substr(''MySQL'',?,5) from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
select substr('MySQL',1,@arg00) from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select substr(''MySQL'',1,?) from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
# variations on 'concat'
|
||||||
|
set @arg00='MySQL' ;
|
||||||
|
select a , concat(@arg00,b) from t1 ;
|
||||||
|
# BUG#3796
|
||||||
|
prepare stmt1 from ' select a , concat(?,b) from t1 ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
#
|
||||||
|
select a , concat(b,@arg00) from t1 ;
|
||||||
|
prepare stmt1 from ' select a , concat(b,?) from t1 ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
# variations on 'group_concat'
|
||||||
|
set @arg00='MySQL' ;
|
||||||
|
select group_concat(@arg00,b) from t1
|
||||||
|
group by 'a' ;
|
||||||
|
prepare stmt1 from ' select group_concat(?,b) from t1
|
||||||
|
group by ''a'' ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
#
|
||||||
|
select group_concat(b,@arg00) from t1
|
||||||
|
group by 'a' ;
|
||||||
|
prepare stmt1 from ' select group_concat(b,?) from t1
|
||||||
|
group by ''a'' ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
## two parameters
|
||||||
|
set @arg00='first' ;
|
||||||
|
set @arg01='second' ;
|
||||||
|
set @arg02=NULL;
|
||||||
|
select @arg00, @arg01 from t1 where a=1 ;
|
||||||
|
prepare stmt1 from ' select ?, ? from t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00, @arg01 ;
|
||||||
|
# NULL as first and/or last parameter
|
||||||
|
execute stmt1 using @arg02, @arg01 ;
|
||||||
|
execute stmt1 using @arg00, @arg02 ;
|
||||||
|
execute stmt1 using @arg02, @arg02 ;
|
||||||
|
# case derived from client_test.c: test_ps_conj_select()
|
||||||
|
# for BUG#3420: select returned all rows of the table
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists new_tab ;
|
||||||
|
--enable_warnings
|
||||||
|
create table new_tab (id1 int(11) not null default '0',
|
||||||
|
value2 varchar(100), value1 varchar(100)) ;
|
||||||
|
insert into new_tab values (1,'hh','hh'),(2,'hh','hh'),
|
||||||
|
(1,'ii','ii'),(2,'ii','ii') ;
|
||||||
|
prepare stmt1 from ' select id1,value1 from new_tab where id1=? or value1=? ' ;
|
||||||
|
set @arg00=1 ;
|
||||||
|
set @arg01='hh' ;
|
||||||
|
execute stmt1 using @arg00, @arg01 ;
|
||||||
|
drop table new_tab ;
|
||||||
|
# case derived from client_test.c: test_bug1180()
|
||||||
|
# for BUG#1180 optimized away part of WHERE clause
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists new_tab ;
|
||||||
|
--enable_warnings
|
||||||
|
create table new_tab(session_id char(9) not null) ;
|
||||||
|
insert into new_tab values ('abc') ;
|
||||||
|
prepare stmt1 from ' select * from new_tab
|
||||||
|
where ?=''1111'' and session_id = ''abc'' ' ;
|
||||||
|
set @arg00='abc' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00='1111' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00='abc' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
drop table new_tab ;
|
||||||
|
|
||||||
|
|
||||||
|
##### parameter used for keyword FROM (must fail)
|
||||||
|
set @arg00='FROM' ;
|
||||||
|
--error 1064
|
||||||
|
select a @arg00 t1 where a=1 ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' select a ? t1 where a=1 ' ;
|
||||||
|
##### parameter used for tablename (must fail)
|
||||||
|
set @arg00='t1' ;
|
||||||
|
--error 1064
|
||||||
|
select a from @arg00 where a=1 ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' select a from ? where a=1 ' ;
|
||||||
|
##### parameter used for keyword WHERE tablename (must fail)
|
||||||
|
set @arg00='WHERE' ;
|
||||||
|
--error 1064
|
||||||
|
select a from t1 @arg00 a=1 ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' select a from t1 ? a=1 ' ;
|
||||||
|
|
||||||
|
##### parameter used in where clause
|
||||||
|
# parameter is not NULL
|
||||||
|
set @arg00=1 ;
|
||||||
|
select a FROM t1 where a=@arg00 ;
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a=? ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00=1000 ;
|
||||||
|
# row not found
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
# parameter is NULL
|
||||||
|
set @arg00=NULL ;
|
||||||
|
select a FROM t1 where a=@arg00 ;
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a=? ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
# parameter is not NULL within a function
|
||||||
|
set @arg00=4 ;
|
||||||
|
select a FROM t1 where a=sqrt(@arg00) ;
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a=sqrt(?) ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
# parameter is NULL within a function
|
||||||
|
set @arg00=NULL ;
|
||||||
|
select a FROM t1 where a=sqrt(@arg00) ;
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a=sqrt(?) ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
# parameter in IN
|
||||||
|
set @arg00=2 ;
|
||||||
|
set @arg01=3 ;
|
||||||
|
select a FROM t1 where a in (@arg00,@arg01);
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a in (?,?) ';
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
# parameter in LIKE
|
||||||
|
prepare stmt1 from ' select b FROM t1 where b like ? ';
|
||||||
|
set @arg00='two' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00='tw%' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
set @arg00='%wo' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
|
||||||
|
##### parameter used for operator in WHERE clause (must fail)
|
||||||
|
set @arg00='>' ;
|
||||||
|
--error 1064
|
||||||
|
select a FROM t1 where a @arg00 1 ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a ? 1 ' ;
|
||||||
|
|
||||||
|
##### parameter used in group by clause
|
||||||
|
set @arg00=1 ;
|
||||||
|
select a,b FROM t1 where a is not NULL
|
||||||
|
AND b is not NULL group by a - @arg00 ;
|
||||||
|
prepare stmt1 from ' select a,b FROM t1 where a is not NULL
|
||||||
|
AND b is not NULL group by a - ? ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
|
||||||
|
##### parameter used in having clause
|
||||||
|
set @arg00='two' ;
|
||||||
|
select a,b FROM t1 where a is not NULL
|
||||||
|
AND b is not NULL having b <> @arg00 ;
|
||||||
|
prepare stmt1 from ' select a,b FROM t1 where a is not NULL
|
||||||
|
AND b is not NULL having b <> ? ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
|
||||||
|
##### parameter used in order clause
|
||||||
|
set @arg00=1 ;
|
||||||
|
select a,b FROM t1 where a is not NULL
|
||||||
|
AND b is not NULL order by a - @arg00 ;
|
||||||
|
prepare stmt1 from ' select a,b FROM t1 where a is not NULL
|
||||||
|
AND b is not NULL order by a - ? ' ;
|
||||||
|
execute stmt1 using @arg00 ;
|
||||||
|
## What is the semantic of a single parameter (integer >0)
|
||||||
|
# after order by? column number or constant
|
||||||
|
set @arg00=2 ;
|
||||||
|
select a,b from t1 order by 2 ;
|
||||||
|
prepare stmt1 from ' select a,b from t1
|
||||||
|
order by ? ';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
##### parameter used in limit clause
|
||||||
|
set @arg00=1;
|
||||||
|
prepare stmt1 from ' select a,b from t1
|
||||||
|
limit 1 ';
|
||||||
|
execute stmt1 ;
|
||||||
|
# currently (May 2004, Version 4.1) it is impossible
|
||||||
|
-- error 1064
|
||||||
|
prepare stmt1 from ' select a,b from t1
|
||||||
|
limit ? ';
|
||||||
|
|
||||||
|
##### parameter used in many places
|
||||||
|
set @arg00='b' ;
|
||||||
|
set @arg01=0 ;
|
||||||
|
set @arg02=2 ;
|
||||||
|
set @arg03=2 ;
|
||||||
|
select sum(a), @arg00 from t1 where a > @arg01
|
||||||
|
and b is not null group by substr(b,@arg02)
|
||||||
|
having sum(a) <> @arg03 ;
|
||||||
|
prepare stmt1 from ' select sum(a), ? from t1 where a > ?
|
||||||
|
and b is not null group by substr(b,?)
|
||||||
|
having sum(a) <> ? ';
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03;
|
||||||
|
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ join tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
# no parameter
|
||||||
|
select first.a as a1, second.a as a2
|
||||||
|
from t1 first, t1 second
|
||||||
|
where first.a = second.a ;
|
||||||
|
prepare stmt1 from ' select first.a as a1, second.a as a2
|
||||||
|
from t1 first, t1 second
|
||||||
|
where first.a = second.a ';
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
# some parameters
|
||||||
|
set @arg00='ABC';
|
||||||
|
set @arg01='two';
|
||||||
|
set @arg02='one';
|
||||||
|
select first.a, @arg00, second.a FROM t1 first, t1 second
|
||||||
|
where @arg01 = first.b or first.a = second.a or second.b = @arg02;
|
||||||
|
prepare stmt1 from ' select first.a, ?, second.a FROM t1 first, t1 second
|
||||||
|
where ? = first.b or first.a = second.a or second.b = ? ';
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ subquery tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
# no parameter
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = ''two'') ';
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
###### parameter in the outer part
|
||||||
|
set @arg00='two' ;
|
||||||
|
select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = 'two' ) and b=@arg00 ;
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = ''two'') and b=? ';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
###### parameter in the inner part
|
||||||
|
set @arg00='two' ;
|
||||||
|
# Bug#4000 (only BDB tables)
|
||||||
|
select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = @arg00 ) and b='two' ;
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = ? ) and b=''two'' ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
set @arg00=3 ;
|
||||||
|
set @arg01='three' ;
|
||||||
|
select a,b FROM t1 where (a,b) in (select 3, 'three');
|
||||||
|
select a FROM t1 where (a,b) in (select @arg00,@arg01);
|
||||||
|
prepare stmt1 from ' select a FROM t1 where (a,b) in (select ?, ?) ';
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
|
||||||
|
###### parameters in the both parts
|
||||||
|
set @arg00=1 ;
|
||||||
|
set @arg01='two' ;
|
||||||
|
set @arg02=2 ;
|
||||||
|
set @arg03='two' ;
|
||||||
|
# Bug#4000 (only BDB tables)
|
||||||
|
select a, @arg00, b FROM t1 outer_table where
|
||||||
|
b=@arg01 and a = (select @arg02 from t1 where b = @arg03 ) ;
|
||||||
|
prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||||
|
b=? and a = (select ? from t1 where b = ? ) ' ;
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||||
|
|
||||||
|
######## correlated subquery
|
||||||
|
# no parameter
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = outer_table.b ) ';
|
||||||
|
# also Bug#4000 (only BDB tables) ??
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
###### parameter in the outer part
|
||||||
|
set @arg00='two' ;
|
||||||
|
# Bug#4000 (only BDB tables)
|
||||||
|
select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = outer_table.b ) and b=@arg00 ;
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where b = outer_table.b) and b=? ';
|
||||||
|
# also Bug#4000 (only BDB tables) ??
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
###### parameter in the inner part
|
||||||
|
set @arg00=2 ;
|
||||||
|
select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where a = @arg00 and b = outer_table.b) and b='two' ;
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where a = ? and b = outer_table.b) and b=''two'' ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
set @arg00=2 ;
|
||||||
|
select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where outer_table.a = @arg00 and a=2) and b='two' ;
|
||||||
|
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||||
|
a = (select a from t1 where outer_table.a = ? and a=2) and b=''two'' ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
###### parameters in the both parts
|
||||||
|
set @arg00=1 ;
|
||||||
|
set @arg01='two' ;
|
||||||
|
set @arg02=2 ;
|
||||||
|
set @arg03='two' ;
|
||||||
|
# Bug#4000 (only BDB tables)
|
||||||
|
select a, @arg00, b FROM t1 outer_table where
|
||||||
|
b=@arg01 and a = (select @arg02 from t1 where outer_table.b = @arg03
|
||||||
|
and outer_table.a=a ) ;
|
||||||
|
prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||||
|
b=? and a = (select ? from t1 where outer_table.b = ?
|
||||||
|
and outer_table.a=a ) ' ;
|
||||||
|
# also Bug#4000 (only BDB tables) ??
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||||
|
|
||||||
|
###### subquery after from
|
||||||
|
set @arg00=1 ;
|
||||||
|
set @arg01=0 ;
|
||||||
|
select a, @arg00
|
||||||
|
from ( select a - @arg00 as a from t1 where a=@arg00 ) as t2
|
||||||
|
where a=@arg01;
|
||||||
|
prepare stmt1 from ' select a, ?
|
||||||
|
from ( select a - ? as a from t1 where a=? ) as t2
|
||||||
|
where a=? ';
|
||||||
|
execute stmt1 using @arg00, @arg00, @arg00, @arg01 ;
|
||||||
|
|
||||||
|
###### heavy modified case derived from client_test.c: test_distinct()
|
||||||
|
## no parameters
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t2 ;
|
||||||
|
--enable_warnings
|
||||||
|
create table t2 as select * from t_many_col_types;
|
||||||
|
#insert into t2 select * from t_many_col_types;
|
||||||
|
set @stmt= ' SELECT
|
||||||
|
(SELECT SUM(c1 + c12 + 0.0) FROM t2
|
||||||
|
where (t_many_col_types.c2 - 0e-3) = t2.c2
|
||||||
|
GROUP BY t_many_col_types.c15 LIMIT 1) as scalar_s,
|
||||||
|
exists (select 1.0e+0 from t2
|
||||||
|
where t2.c3 * 9.0000000000 = t_many_col_types.c4) as exists_s,
|
||||||
|
c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s,
|
||||||
|
(c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s
|
||||||
|
FROM t_many_col_types,
|
||||||
|
(select c25 x, c32 y from t2) tt WHERE x = c25 ' ;
|
||||||
|
--enable_metadata
|
||||||
|
prepare stmt1 from @stmt ;
|
||||||
|
execute stmt1 ;
|
||||||
|
--disable_metadata
|
||||||
|
execute stmt1 ;
|
||||||
|
set @stmt= concat('explain ',@stmt);
|
||||||
|
--enable_metadata
|
||||||
|
prepare stmt1 from @stmt ;
|
||||||
|
execute stmt1 ;
|
||||||
|
--disable_metadata
|
||||||
|
execute stmt1 ;
|
||||||
|
## many parameters
|
||||||
|
set @stmt= ' SELECT
|
||||||
|
(SELECT SUM(c1+c12+?) FROM t2 where (t_many_col_types.c2-?)=t2.c2
|
||||||
|
GROUP BY t_many_col_types.c15 LIMIT 1) as scalar_s,
|
||||||
|
exists (select ? from t2
|
||||||
|
where t2.c3*?=t_many_col_types.c4) as exists_s,
|
||||||
|
c5*? in (select c6+? from t2) as in_s,
|
||||||
|
(c7-?, c8-?) in (select c9+?, c10+? from t2) as in_row_s
|
||||||
|
FROM t_many_col_types,
|
||||||
|
(select c25 x, c32 y from t2) tt WHERE x =c25 ' ;
|
||||||
|
set @arg00= 0.0 ;
|
||||||
|
set @arg01= 0e-3 ;
|
||||||
|
set @arg02= 1.0e+0 ;
|
||||||
|
set @arg03= 9.0000000000 ;
|
||||||
|
set @arg04= 4 ;
|
||||||
|
set @arg05= 0.3e+1 ;
|
||||||
|
set @arg06= 4 ;
|
||||||
|
set @arg07= 4 ;
|
||||||
|
set @arg08= 4.0 ;
|
||||||
|
set @arg09= 40e-1 ;
|
||||||
|
--enable_metadata
|
||||||
|
prepare stmt1 from @stmt ;
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06,
|
||||||
|
@arg07, @arg08, @arg09 ;
|
||||||
|
--disable_metadata
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06,
|
||||||
|
@arg07, @arg08, @arg09 ;
|
||||||
|
set @stmt= concat('explain ',@stmt);
|
||||||
|
--enable_metadata
|
||||||
|
prepare stmt1 from @stmt ;
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06,
|
||||||
|
@arg07, @arg08, @arg09 ;
|
||||||
|
--disable_metadata
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06,
|
||||||
|
@arg07, @arg08, @arg09 ;
|
||||||
|
drop table t2 ;
|
||||||
|
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ union tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
# no parameter
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select a FROM t1 where a=1 ';
|
||||||
|
execute stmt1 ;
|
||||||
|
# Bug#3577: the second execute crashes mysqld
|
||||||
|
execute stmt1 ;
|
||||||
|
prepare stmt1 from ' select a FROM t1 where a=1
|
||||||
|
union all
|
||||||
|
select a FROM t1 where a=1 ';
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
##### everything in the first table
|
||||||
|
# one parameter as constant in the first table
|
||||||
|
set @arg00=1 ;
|
||||||
|
select @arg00 FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select 1 FROM t1 where a=1;
|
||||||
|
prepare stmt1 from ' select ? FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select 1 FROM t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
##### everything in the second table
|
||||||
|
# one parameter as constant
|
||||||
|
set @arg00=1 ;
|
||||||
|
select 1 FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select @arg00 FROM t1 where a=1;
|
||||||
|
prepare stmt1 from ' select 1 FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select ? FROM t1 where a=1 ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
# one parameter in every table
|
||||||
|
set @arg00='a' ;
|
||||||
|
select @arg00 FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select @arg00 FROM t1 where a=1;
|
||||||
|
prepare stmt1 from ' select ? FROM t1 where a=1
|
||||||
|
union distinct
|
||||||
|
select ? FROM t1 where a=1 ';
|
||||||
|
# BUG#3811 wrong result, prepared statement, union,
|
||||||
|
# parameter in result column list
|
||||||
|
execute stmt1 using @arg00, @arg00;
|
||||||
|
prepare stmt1 from ' select ?
|
||||||
|
union distinct
|
||||||
|
select ? ';
|
||||||
|
execute stmt1 using @arg00, @arg00;
|
||||||
|
|
||||||
|
# many parameters
|
||||||
|
set @arg00='a' ;
|
||||||
|
set @arg01=1 ;
|
||||||
|
set @arg02='a' ;
|
||||||
|
set @arg03=2 ;
|
||||||
|
select @arg00 FROM t1 where a=@arg01
|
||||||
|
union distinct
|
||||||
|
select @arg02 FROM t1 where a=@arg03;
|
||||||
|
prepare stmt1 from ' select ? FROM t1 where a=?
|
||||||
|
union distinct
|
||||||
|
select ? FROM t1 where a=? ' ;
|
||||||
|
execute stmt1 using @arg00, @arg01, @arg02, @arg03;
|
||||||
|
|
||||||
|
## increased complexity
|
||||||
|
|
||||||
|
set @arg00=1 ;
|
||||||
|
# Bug#3686 the wrong server response was 1140 Mixing of GROUP columns ..
|
||||||
|
prepare stmt1 from ' select sum(a) + 200, ? from t1
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, 1 from t1
|
||||||
|
group by b ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
|
||||||
|
set @Oporto='Oporto' ;
|
||||||
|
set @Lisboa='Lisboa' ;
|
||||||
|
set @0=0 ;
|
||||||
|
set @1=1 ;
|
||||||
|
set @2=2 ;
|
||||||
|
set @3=3 ;
|
||||||
|
set @4=4 ;
|
||||||
|
select @Oporto,@Lisboa,@0,@1,@2,@3,@4 ;
|
||||||
|
|
||||||
|
## union + group by
|
||||||
|
select sum(a) + 200 as the_sum, @Oporto as the_town from t1
|
||||||
|
group by b
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, @Lisboa from t1
|
||||||
|
group by b ;
|
||||||
|
|
||||||
|
prepare stmt1 from ' select sum(a) + 200 as the_sum, ? as the_town from t1
|
||||||
|
group by b
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, ? from t1
|
||||||
|
group by b ' ;
|
||||||
|
execute stmt1 using @Oporto, @Lisboa;
|
||||||
|
|
||||||
|
|
||||||
|
## union + where + group by
|
||||||
|
select sum(a) + 200 as the_sum, @Oporto as the_town from t1
|
||||||
|
where a > @1
|
||||||
|
group by b
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, @Lisboa from t1
|
||||||
|
where a > @2
|
||||||
|
group by b ;
|
||||||
|
|
||||||
|
prepare stmt1 from ' select sum(a) + 200 as the_sum, ? as the_town from t1
|
||||||
|
where a > ?
|
||||||
|
group by b
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, ? from t1
|
||||||
|
where a > ?
|
||||||
|
group by b ' ;
|
||||||
|
execute stmt1 using @Oporto, @1, @Lisboa, @2;
|
||||||
|
|
||||||
|
## union + where + group by + having
|
||||||
|
select sum(a) + 200 as the_sum, @Oporto as the_town from t1
|
||||||
|
where a > @1
|
||||||
|
group by b
|
||||||
|
having avg(a) > @2
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, @Lisboa from t1
|
||||||
|
where a > @2
|
||||||
|
group by b
|
||||||
|
having avg(a) > @3;
|
||||||
|
|
||||||
|
prepare stmt1 from ' select sum(a) + 200 as the_sum, ? as the_town from t1
|
||||||
|
where a > ?
|
||||||
|
group by b
|
||||||
|
having avg(a) > ?
|
||||||
|
union distinct
|
||||||
|
select sum(a) + 200, ? from t1
|
||||||
|
where a > ?
|
||||||
|
group by b
|
||||||
|
having avg(a) > ? ';
|
||||||
|
execute stmt1 using @Oporto, @1, @2, @Lisboa, @2, @3;
|
||||||
|
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ explain select tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
prepare stmt1 from ' select * from t_many_col_types ' ;
|
||||||
|
--enable_metadata
|
||||||
|
execute stmt1;
|
||||||
|
--disable_metadata
|
||||||
|
|
||||||
|
|
34
mysql-test/include/ps_renew.inc
Normal file
34
mysql-test/include/ps_renew.inc
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
################ include/ps_renew.inc #################
|
||||||
|
# #
|
||||||
|
# renew the content of t1 and t_many_col_types #
|
||||||
|
# #
|
||||||
|
#######################################################
|
||||||
|
|
||||||
|
# truncate could not be used, because it is not supported
|
||||||
|
# in tables of type MERGE
|
||||||
|
delete from t1 ;
|
||||||
|
insert into t1 values (1,'one');
|
||||||
|
insert into t1 values (2,'two');
|
||||||
|
insert into t1 values (3,'three');
|
||||||
|
insert into t1 values (4,'four');
|
||||||
|
commit ;
|
||||||
|
|
||||||
|
delete from t_many_col_types ;
|
||||||
|
insert into t_many_col_types
|
||||||
|
set c1= 1, c2= 1, c3= 1, c4= 1, c5= 1, c6= 1, c7= 1, c8= 1, c9= 1,
|
||||||
|
c10= 1, c11= 1, c12 = 1,
|
||||||
|
c13= '2004-02-29', c14= '2004-02-29 11:11:11', c15= '2004-02-29 11:11:11',
|
||||||
|
c16= '11:11:11', c17= '2004',
|
||||||
|
c18= 1, c19=true, c20= 'a', c21= '123456789a',
|
||||||
|
c22= '123456789a123456789b123456789c', c23= 'tinyblob', c24= 'tinytext',
|
||||||
|
c25= 'blob', c26= 'text', c27= 'mediumblob', c28= 'mediumtext',
|
||||||
|
c29= 'longblob', c30= 'longtext', c31='one', c32= 'monday';
|
||||||
|
insert into t_many_col_types
|
||||||
|
set c1= 9, c2= 9, c3= 9, c4= 9, c5= 9, c6= 9, c7= 9, c8= 9, c9= 9,
|
||||||
|
c10= 9, c11= 9, c12 = 9,
|
||||||
|
c13= '2004-02-29', c14= '2004-02-29 11:11:11', c15= '2004-02-29 11:11:11',
|
||||||
|
c16= '11:11:11', c17= '2004',
|
||||||
|
c18= 1, c19=false, c20= 'a', c21= '123456789a',
|
||||||
|
c22= '123456789a123456789b123456789c', c23= 'tinyblob', c24= 'tinytext',
|
||||||
|
c25= 'blob', c26= 'text', c27= 'mediumblob', c28= 'mediumtext',
|
||||||
|
c29= 'longblob', c30= 'longtext', c31='two', c32= 'tuesday';
|
@@ -95,7 +95,7 @@ if [ ! -x $exec_ndb ]; then
|
|||||||
echo "$exec_ndb missing"
|
echo "$exec_ndb missing"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ ! -x $exec_mgmtsrv ]; then
|
if [ ! -x $exec_mgmtsrvr ]; then
|
||||||
echo "$exec_mgmtsrvr missing"
|
echo "$exec_mgmtsrvr missing"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@@ -1244,3 +1244,10 @@ a b
|
|||||||
3 three
|
3 three
|
||||||
4 four
|
4 four
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create table t1 (a int, b varchar(30), primary key(a)) engine = bdb;
|
||||||
|
insert into t1 values (1,'one');
|
||||||
|
commit;
|
||||||
|
truncate t1;
|
||||||
|
select * from t1;
|
||||||
|
a b
|
||||||
|
drop table t1;
|
||||||
|
@@ -6,5 +6,5 @@ drop table t1;
|
|||||||
flush tables;
|
flush tables;
|
||||||
CREATE TABLE t1 (a int) ENGINE=INNODB;
|
CREATE TABLE t1 (a int) ENGINE=INNODB;
|
||||||
SELECT * from T1;
|
SELECT * from T1;
|
||||||
ERROR HY000: Can't open file: 'T1.InnoDB'. (errno: 1)
|
ERROR HY000: Can't open file: 'T1.InnoDB' (errno: 1)
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@@ -175,10 +175,10 @@ insert into t1 values (19,4, 0);
|
|||||||
select * from t1 where b<=5 and c=0;
|
select * from t1 where b<=5 and c=0;
|
||||||
a b c
|
a b c
|
||||||
19 4 0
|
19 4 0
|
||||||
select * from t1 where b=4 and c<=5;
|
select * from t1 where b=4 and c<=5 order by a;
|
||||||
a b c
|
a b c
|
||||||
19 4 0
|
|
||||||
17 4 4
|
17 4 4
|
||||||
|
19 4 0
|
||||||
select * from t1 where b<=4 and c<=5 order by a;
|
select * from t1 where b<=4 and c<=5 order by a;
|
||||||
a b c
|
a b c
|
||||||
7 2 1
|
7 2 1
|
||||||
|
745
mysql-test/r/ps_1general.result
Normal file
745
mysql-test/r/ps_1general.result
Normal file
@@ -0,0 +1,745 @@
|
|||||||
|
use test;
|
||||||
|
test_sequence
|
||||||
|
------ basic tests ------
|
||||||
|
drop table if exists t1, t_many_col_types ;
|
||||||
|
create table t1
|
||||||
|
(
|
||||||
|
a int, b varchar(30),
|
||||||
|
primary key(a)
|
||||||
|
) engine = 'MYISAM' ;
|
||||||
|
create table t_many_col_types
|
||||||
|
(
|
||||||
|
c1 tinyint, c2 smallint, c3 mediumint, c4 int,
|
||||||
|
c5 integer, c6 bigint, c7 float, c8 double,
|
||||||
|
c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
|
||||||
|
c13 date, c14 datetime, c15 timestamp(14), c16 time,
|
||||||
|
c17 year, c18 bit, c19 bool, c20 char,
|
||||||
|
c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
|
||||||
|
c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
|
||||||
|
c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
|
||||||
|
c32 set('monday', 'tuesday', 'wednesday'),
|
||||||
|
primary key(c1)
|
||||||
|
) engine = 'MYISAM' ;
|
||||||
|
delete from t1 ;
|
||||||
|
insert into t1 values (1,'one');
|
||||||
|
insert into t1 values (2,'two');
|
||||||
|
insert into t1 values (3,'three');
|
||||||
|
insert into t1 values (4,'four');
|
||||||
|
commit ;
|
||||||
|
delete from t_many_col_types ;
|
||||||
|
insert into t_many_col_types
|
||||||
|
set c1= 1, c2= 1, c3= 1, c4= 1, c5= 1, c6= 1, c7= 1, c8= 1, c9= 1,
|
||||||
|
c10= 1, c11= 1, c12 = 1,
|
||||||
|
c13= '2004-02-29', c14= '2004-02-29 11:11:11', c15= '2004-02-29 11:11:11',
|
||||||
|
c16= '11:11:11', c17= '2004',
|
||||||
|
c18= 1, c19=true, c20= 'a', c21= '123456789a',
|
||||||
|
c22= '123456789a123456789b123456789c', c23= 'tinyblob', c24= 'tinytext',
|
||||||
|
c25= 'blob', c26= 'text', c27= 'mediumblob', c28= 'mediumtext',
|
||||||
|
c29= 'longblob', c30= 'longtext', c31='one', c32= 'monday';
|
||||||
|
insert into t_many_col_types
|
||||||
|
set c1= 9, c2= 9, c3= 9, c4= 9, c5= 9, c6= 9, c7= 9, c8= 9, c9= 9,
|
||||||
|
c10= 9, c11= 9, c12 = 9,
|
||||||
|
c13= '2004-02-29', c14= '2004-02-29 11:11:11', c15= '2004-02-29 11:11:11',
|
||||||
|
c16= '11:11:11', c17= '2004',
|
||||||
|
c18= 1, c19=false, c20= 'a', c21= '123456789a',
|
||||||
|
c22= '123456789a123456789b123456789c', c23= 'tinyblob', c24= 'tinytext',
|
||||||
|
c25= 'blob', c26= 'text', c27= 'mediumblob', c28= 'mediumtext',
|
||||||
|
c29= 'longblob', c30= 'longtext', c31='two', c32= 'tuesday';
|
||||||
|
PREPARE stmt FROM ' select * from t1 where a = ? ' ;
|
||||||
|
SET @var= 2 ;
|
||||||
|
EXECUTE stmt USING @var ;
|
||||||
|
a b
|
||||||
|
2 two
|
||||||
|
select * from t1 where a = @var ;
|
||||||
|
a b
|
||||||
|
2 two
|
||||||
|
DEALLOCATE PREPARE stmt ;
|
||||||
|
prepare stmt1 from ' select 1 as my_col ' ;
|
||||||
|
prepare stmt1 from ' select ? as my_col ' ;
|
||||||
|
prepare ;
|
||||||
|
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 '' at line 1
|
||||||
|
prepare stmt1 ;
|
||||||
|
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 '' at line 1
|
||||||
|
prepare stmt1 from ;
|
||||||
|
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 '' at line 1
|
||||||
|
prepare_garbage stmt1 from ' select 1 ' ;
|
||||||
|
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 'prepare_garbage stmt1 from ' select 1 '' at line 1
|
||||||
|
prepare stmt1 from_garbage ' select 1 ' ;
|
||||||
|
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 'from_garbage ' select 1 '' at line 1
|
||||||
|
prepare stmt1 from ' select_garbage 1 ' ;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select_garbage 1' at line 1
|
||||||
|
prepare from ' select 1 ' ;
|
||||||
|
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 'from ' select 1 '' at line 1
|
||||||
|
prepare stmt1 ' select 1 ' ;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' select 1 '' at line 1
|
||||||
|
prepare ? from ' select ? as my_col ' ;
|
||||||
|
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 '? from ' select ? as my_col '' at line 1
|
||||||
|
set @arg00='select 1 as my_col';
|
||||||
|
prepare stmt1 from @arg00;
|
||||||
|
set @arg00='';
|
||||||
|
prepare stmt1 from @arg00;
|
||||||
|
ERROR 42000: Query was empty
|
||||||
|
set @arg00=NULL;
|
||||||
|
prepare stmt1 from @arg01;
|
||||||
|
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 'NULL' at line 1
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt1 from ' select * from t1 where x <= 2 ' ;
|
||||||
|
ERROR 42S22: Unknown column 'x' in 'where clause'
|
||||||
|
drop table if exists not_exist ;
|
||||||
|
prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
|
||||||
|
ERROR 42S02: Table 'test.not_exist' doesn't exist
|
||||||
|
prepare stmt1 from ' insert into t1 values(? ' ;
|
||||||
|
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 '' at line 1
|
||||||
|
prepare stmt1 from ' select a, b from t1
|
||||||
|
where a=? and where ' ;
|
||||||
|
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 'where' at line 2
|
||||||
|
execute never_prepared ;
|
||||||
|
ERROR HY000: Unknown prepared statement handler (never_prepared) given to EXECUTE
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
|
||||||
|
ERROR 42S02: Table 'test.not_exist' doesn't exist
|
||||||
|
execute stmt1 ;
|
||||||
|
ERROR HY000: Unknown prepared statement handler (stmt1) given to EXECUTE
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 1, 'original table', 1);
|
||||||
|
prepare stmt2 from ' select * from to_be_dropped ' ;
|
||||||
|
execute stmt2 ;
|
||||||
|
a b c
|
||||||
|
1 original table 1
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
execute stmt2 ;
|
||||||
|
ERROR 42S02: Table 'test.to_be_dropped' doesn't exist
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
a b c
|
||||||
|
9 recreated table 9
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
c int,
|
||||||
|
b char(30)
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
a b c
|
||||||
|
9 recreated table 9
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(30),
|
||||||
|
c int,
|
||||||
|
d timestamp default current_timestamp
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
a b c
|
||||||
|
9 recreated table 9
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
d timestamp default current_timestamp,
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
a b c
|
||||||
|
9 recreated table 9
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a timestamp default '2004-02-29 18:01:59',
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( b, c) values( 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
a b c
|
||||||
|
2004-02-29 18:01:59 recreated table 9
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
f1 int primary key,
|
||||||
|
f2 char(30),
|
||||||
|
f3 int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( f1, f2, f3) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
ERROR 42S22: Unknown column 'to_be_dropped.a' in 'field list'
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
a b
|
||||||
|
1 one
|
||||||
|
2 two
|
||||||
|
set @arg00=1 ;
|
||||||
|
set @arg01='two' ;
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= ? ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
a b
|
||||||
|
1 one
|
||||||
|
execute stmt1 ;
|
||||||
|
ERROR HY000: Incorrect arguments to EXECUTE
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
ERROR HY000: Incorrect arguments to EXECUTE
|
||||||
|
execute stmt1 using @not_set;
|
||||||
|
a b
|
||||||
|
deallocate prepare never_prepared ;
|
||||||
|
ERROR HY000: Unknown prepared statement handler (never_prepared) given to DEALLOCATE PREPARE
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
|
||||||
|
ERROR 42S02: Table 'test.not_exist' doesn't exist
|
||||||
|
deallocate prepare stmt1;
|
||||||
|
ERROR HY000: Unknown prepared statement handler (stmt1) given to DEALLOCATE PREPARE
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(10)
|
||||||
|
);
|
||||||
|
prepare stmt2 from ' select a,b from to_be_dropped where a <= 2 ' ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
deallocate prepare stmt2;
|
||||||
|
prepare stmt1 from ' select a from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt2 from ' select b from t1 where a <= 2 ' ;
|
||||||
|
execute stmt2 ;
|
||||||
|
b
|
||||||
|
one
|
||||||
|
two
|
||||||
|
execute stmt1 ;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
prepare stmt1 from ' select a from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt2 from ' select a from t1 where a <= 2 ' ;
|
||||||
|
execute stmt2 ;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
execute stmt1 ;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
deallocate prepare stmt1 ;
|
||||||
|
execute stmt2 ;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
test_sequence
|
||||||
|
------ show and misc tests ------
|
||||||
|
drop table if exists t2;
|
||||||
|
create table t2
|
||||||
|
(
|
||||||
|
a int primary key, b char(10)
|
||||||
|
);
|
||||||
|
prepare stmt4 from ' show databases ';
|
||||||
|
execute stmt4;
|
||||||
|
Database
|
||||||
|
mysql
|
||||||
|
test
|
||||||
|
prepare stmt4 from ' show tables from test like ''t2%'' ';
|
||||||
|
execute stmt4;
|
||||||
|
Tables_in_test (t2%)
|
||||||
|
t2
|
||||||
|
prepare stmt4 from ' show columns from t2 from test like ''a%'' ';
|
||||||
|
execute stmt4;
|
||||||
|
Field Type Null Key Default Extra
|
||||||
|
a int(11) PRI 0
|
||||||
|
create index t2_idx on t2(b);
|
||||||
|
prepare stmt4 from ' show index from t2 from test ';
|
||||||
|
execute stmt4;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
t2 0 PRIMARY 1 a A 0 NULL NULL BTREE
|
||||||
|
t2 1 t2_idx 1 b A NULL NULL NULL YES BTREE
|
||||||
|
prepare stmt4 from ' show table status from test like ''t2%'' ';
|
||||||
|
execute stmt4;
|
||||||
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
|
t2 MyISAM 9 Fixed 0 0 0 64424509439 1024 0 NULL # # # latin1_swedish_ci NULL
|
||||||
|
prepare stmt4 from ' show table status from test like ''t_many_col_types%'' ';
|
||||||
|
execute stmt4;
|
||||||
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
|
t_many_col_types MyISAM 9 Dynamic 2 220 440 4294967295 2048 0 NULL # # # latin1_swedish_ci NULL
|
||||||
|
prepare stmt4 from ' show status like ''Threads_running'' ';
|
||||||
|
execute stmt4;
|
||||||
|
Variable_name Value
|
||||||
|
Threads_running 1
|
||||||
|
prepare stmt4 from ' show variables like ''sql_mode'' ';
|
||||||
|
execute stmt4;
|
||||||
|
Variable_name Value
|
||||||
|
sql_mode
|
||||||
|
prepare stmt4 from ' show engine bdb logs ';
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show full processlist ';
|
||||||
|
execute stmt4;
|
||||||
|
Id User Host db Command Time State Info
|
||||||
|
number root localhost test Query 0 NULL show full processlist
|
||||||
|
prepare stmt4 from ' show grants for user ';
|
||||||
|
prepare stmt4 from ' show create table t2 ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' show master status ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' show master logs ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' show slave status ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' show warnings limit 20 ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' show errors limit 20 ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' show storage engines ';
|
||||||
|
execute stmt4;
|
||||||
|
Engine Support Comment
|
||||||
|
MyISAM YES/NO Default type from 3.23 with great performance
|
||||||
|
HEAP YES/NO Hash based, stored in memory, useful for temporary tables
|
||||||
|
MEMORY YES/NO Alias for HEAP
|
||||||
|
MERGE YES/NO Collection of identical MyISAM tables
|
||||||
|
MRG_MYISAM YES/NO Alias for MERGE
|
||||||
|
ISAM YES/NO Obsolete table type; Is replaced by MyISAM
|
||||||
|
MRG_ISAM YES/NO Obsolete table type; Is replaced by MRG_MYISAM
|
||||||
|
InnoDB YES/NO Supports transactions, row-level locking and foreign keys
|
||||||
|
INNOBASE YES/NO Alias for INNODB
|
||||||
|
BDB YES/NO Supports transactions and page-level locking
|
||||||
|
BERKELEYDB YES/NO Alias for BDB
|
||||||
|
NDBCLUSTER YES/NO Clustered, fault tolerant memory based tables
|
||||||
|
NDB YES/NO Alias for NDBCLUSTER
|
||||||
|
EXAMPLE YES/NO Example storage engine
|
||||||
|
ARCHIVE YES/NO Archive storage engine
|
||||||
|
drop table if exists tx;
|
||||||
|
prepare stmt1 from ' drop table if exists tx ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 'tx'
|
||||||
|
prepare stmt1 from ' drop table tx ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
ERROR 42S02: Unknown table 'tx'
|
||||||
|
prepare stmt1 from ' prepare stmt2 from '' select 1 '' ' ;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' select 1 '' at line 1
|
||||||
|
prepare stmt1 from ' execute stmt2 ' ;
|
||||||
|
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 'stmt2' at line 1
|
||||||
|
prepare stmt1 from ' deallocate prepare never_prepared ' ;
|
||||||
|
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 'never_prepared' at line 1
|
||||||
|
prepare stmt4 from ' use test ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt3 from ' create database drop_me ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
create database drop_me ;
|
||||||
|
prepare stmt3 from ' drop database drop_me ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
drop database drop_me ;
|
||||||
|
prepare stmt3 from ' grant all on test.t1 to drop_user@localhost
|
||||||
|
identified by ''looser'' ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
grant all on test.t1 to drop_user@localhost
|
||||||
|
identified by 'looser' ;
|
||||||
|
prepare stmt3 from ' revoke all privileges on test.t1 from
|
||||||
|
drop_user@localhost ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
revoke all privileges on test.t1 from drop_user@localhost ;
|
||||||
|
prepare stmt3 from ' drop user drop_user@localhost ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
drop user drop_user@localhost;
|
||||||
|
prepare stmt3 from ' describe t2 ';
|
||||||
|
execute stmt3;
|
||||||
|
Field Type Null Key Default Extra
|
||||||
|
a int(11) PRI 0
|
||||||
|
b char(10) YES MUL NULL
|
||||||
|
drop table t2 ;
|
||||||
|
execute stmt3;
|
||||||
|
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||||
|
prepare stmt3 from ' lock tables t1 read ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt3 from ' unlock tables ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' load data infile ''data.txt''
|
||||||
|
into table t1 fields terminated by ''\t'' ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' select * into outfile ''data.txt'' from t1 ';
|
||||||
|
execute stmt1 ;
|
||||||
|
prepare stmt1 from ' optimize table t1 ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' analyze table t1 ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' checksum table t1 ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' repair table t1 ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' restore table t1 from ''data.txt'' ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' handler t1 open ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt3 from ' commit ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt3 from ' rollback ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt4 from ' SET sql_mode=ansi ';
|
||||||
|
execute stmt4;
|
||||||
|
select 'a' || 'b' ;
|
||||||
|
'a' || 'b'
|
||||||
|
ab
|
||||||
|
prepare stmt4 from ' SET sql_mode="" ';
|
||||||
|
execute stmt4;
|
||||||
|
select 'a' || 'b' ;
|
||||||
|
'a' || 'b'
|
||||||
|
0
|
||||||
|
prepare stmt5 from ' select ''a'' || ''b'' ' ;
|
||||||
|
execute stmt5;
|
||||||
|
'a' || 'b'
|
||||||
|
0
|
||||||
|
SET sql_mode=ansi;
|
||||||
|
execute stmt5;
|
||||||
|
'a' || 'b'
|
||||||
|
0
|
||||||
|
SET sql_mode="";
|
||||||
|
prepare stmt1 from ' flush local privileges ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' reset query cache ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' KILL 0 ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt1 from ' explain select a from t1 order by b ';
|
||||||
|
execute stmt1;
|
||||||
|
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||||
|
def id 8 3 1 N 32801 0 8
|
||||||
|
def select_type 253 19 6 N 1 31 63
|
||||||
|
def table 253 64 2 N 1 31 63
|
||||||
|
def type 253 10 3 N 1 31 63
|
||||||
|
def possible_keys 253 4096 0 Y 0 31 63
|
||||||
|
def key 253 64 0 Y 0 31 63
|
||||||
|
def key_len 8 3 0 Y 32800 0 8
|
||||||
|
def ref 253 1024 0 Y 0 31 63
|
||||||
|
def rows 8 10 1 N 32801 0 8
|
||||||
|
def Extra 253 255 14 N 1 31 63
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using filesort
|
||||||
|
SET @arg00=1 ;
|
||||||
|
prepare stmt1 from ' explain select a from t1 where a > ? order by b ';
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||||
|
def id 8 3 1 N 32801 0 8
|
||||||
|
def select_type 253 19 6 N 1 31 63
|
||||||
|
def table 253 64 2 N 1 31 63
|
||||||
|
def type 253 10 5 N 1 31 63
|
||||||
|
def possible_keys 253 4096 7 Y 0 31 63
|
||||||
|
def key 253 64 7 Y 0 31 63
|
||||||
|
def key_len 8 3 1 Y 32800 0 8
|
||||||
|
def ref 253 1024 0 Y 0 31 63
|
||||||
|
def rows 8 10 1 N 32801 0 8
|
||||||
|
def Extra 253 255 27 N 1 31 63
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 Using where; Using filesort
|
||||||
|
test_sequence
|
||||||
|
------ create/drop/alter/rename tests ------
|
||||||
|
drop table if exists t2, t3;
|
||||||
|
prepare stmt_drop from ' drop table if exists t2 ' ;
|
||||||
|
execute stmt_drop;
|
||||||
|
prepare stmt_create from ' create table t2 (
|
||||||
|
a int primary key, b char(10)) ';
|
||||||
|
execute stmt_create;
|
||||||
|
prepare stmt3 from ' create table t3 like t2 ';
|
||||||
|
execute stmt3;
|
||||||
|
drop table t3;
|
||||||
|
set @arg00=1;
|
||||||
|
prepare stmt3 from ' create table t3 (m int) select ? as m ' ;
|
||||||
|
execute stmt3 using @arg00;
|
||||||
|
select m from t3;
|
||||||
|
m
|
||||||
|
1
|
||||||
|
drop table t3;
|
||||||
|
prepare stmt3 from ' create index t2_idx on t2(b) ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt3 from ' drop index t2_idx on t2 ' ;
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
prepare stmt3 from ' alter table t2 drop primary key ';
|
||||||
|
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||||||
|
drop table if exists new_t2;
|
||||||
|
prepare stmt3 from ' rename table t2 to new_t2 ';
|
||||||
|
execute stmt3;
|
||||||
|
execute stmt3;
|
||||||
|
ERROR 42S01: Table 'new_t2' already exists
|
||||||
|
rename table new_t2 to t2;
|
||||||
|
drop table t2;
|
||||||
|
test_sequence
|
||||||
|
------ big statement tests ------
|
||||||
|
select 'ABC' as my_const_col from t1 where
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
execute stmt1 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
select 'ABC' as my_const_col FROM t1 WHERE
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' ';
|
||||||
|
execute stmt1 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
execute stmt1 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
set @arg00= 1;
|
||||||
|
set @arg01= 1;
|
||||||
|
set @arg02= 1;
|
||||||
|
set @arg03= 1;
|
||||||
|
set @arg04= 1;
|
||||||
|
set @arg05= 1;
|
||||||
|
set @arg06= 1;
|
||||||
|
set @arg07= 1;
|
||||||
|
set @arg10= 1;
|
||||||
|
set @arg11= 1;
|
||||||
|
set @arg12= 1;
|
||||||
|
set @arg13= 1;
|
||||||
|
set @arg14= 1;
|
||||||
|
set @arg15= 1;
|
||||||
|
set @arg16= 1;
|
||||||
|
set @arg17= 1;
|
||||||
|
set @arg20= 1;
|
||||||
|
set @arg21= 1;
|
||||||
|
set @arg22= 1;
|
||||||
|
set @arg23= 1;
|
||||||
|
set @arg24= 1;
|
||||||
|
set @arg25= 1;
|
||||||
|
set @arg26= 1;
|
||||||
|
set @arg27= 1;
|
||||||
|
set @arg30= 1;
|
||||||
|
set @arg31= 1;
|
||||||
|
set @arg32= 1;
|
||||||
|
set @arg33= 1;
|
||||||
|
set @arg34= 1;
|
||||||
|
set @arg35= 1;
|
||||||
|
set @arg36= 1;
|
||||||
|
set @arg37= 1;
|
||||||
|
set @arg40= 1;
|
||||||
|
set @arg41= 1;
|
||||||
|
set @arg42= 1;
|
||||||
|
set @arg43= 1;
|
||||||
|
set @arg44= 1;
|
||||||
|
set @arg45= 1;
|
||||||
|
set @arg46= 1;
|
||||||
|
set @arg47= 1;
|
||||||
|
set @arg50= 1;
|
||||||
|
set @arg51= 1;
|
||||||
|
set @arg52= 1;
|
||||||
|
set @arg53= 1;
|
||||||
|
set @arg54= 1;
|
||||||
|
set @arg55= 1;
|
||||||
|
set @arg56= 1;
|
||||||
|
set @arg57= 1;
|
||||||
|
set @arg60= 1;
|
||||||
|
set @arg61= 1;
|
||||||
|
select 'ABC' as my_const_col FROM t1 WHERE
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? ' ;
|
||||||
|
execute stmt1 using
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
execute stmt1 using
|
||||||
|
@arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07,
|
||||||
|
@arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17,
|
||||||
|
@arg20, @arg21, @arg22, @arg23, @arg24, @arg25, @arg26, @arg27,
|
||||||
|
@arg30, @arg31, @arg32, @arg33, @arg34, @arg35, @arg36, @arg37,
|
||||||
|
@arg40, @arg41, @arg42, @arg43, @arg44, @arg45, @arg46, @arg47,
|
||||||
|
@arg50, @arg51, @arg52, @arg53, @arg54, @arg55, @arg56, @arg57,
|
||||||
|
@arg60, @arg61 ;
|
||||||
|
my_const_col
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
ABC
|
||||||
|
drop table t1 ;
|
1269
mysql-test/r/ps_2myisam.result
Normal file
1269
mysql-test/r/ps_2myisam.result
Normal file
File diff suppressed because it is too large
Load Diff
1269
mysql-test/r/ps_3innodb.result
Normal file
1269
mysql-test/r/ps_3innodb.result
Normal file
File diff suppressed because it is too large
Load Diff
1270
mysql-test/r/ps_4heap.result
Normal file
1270
mysql-test/r/ps_4heap.result
Normal file
File diff suppressed because it is too large
Load Diff
2410
mysql-test/r/ps_5merge.result
Normal file
2410
mysql-test/r/ps_5merge.result
Normal file
File diff suppressed because it is too large
Load Diff
1269
mysql-test/r/ps_6bdb.result
Normal file
1269
mysql-test/r/ps_6bdb.result
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,7 @@ drop database if exists test1;
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1008 Can't drop database 'test1'; database doesn't exist
|
Note 1008 Can't drop database 'test1'; database doesn't exist
|
||||||
show tables from test1;
|
show tables from test1;
|
||||||
ERROR HY000: Can't read dir of './test1/' (Errcode: 2)
|
ERROR HY000: Can't read dir of './test1/' (Errcode: X)
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
Warnings:
|
Warnings:
|
||||||
|
@@ -400,3 +400,10 @@ 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';
|
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
set names latin1;
|
||||||
|
create database `<60>`;
|
||||||
|
create table `<60>`.`<60>` (a int) engine=heap;
|
||||||
|
show table status from `<60>` LIKE '<27>';
|
||||||
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
|
<EFBFBD> HEAP 9 Fixed 0 5 # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
|
drop database `<60>`;
|
||||||
|
@@ -886,3 +886,14 @@ insert into t2 (a, b)
|
|||||||
select a, b from t1 where (a, b) in (select a, b from t1);
|
select a, b from t1 where (a, b) in (select a, b from t1);
|
||||||
select * from t2;
|
select * from t2;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #4304: TRUNCATE <table of type BDB> , wrong result
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int, b varchar(30), primary key(a)) engine = bdb;
|
||||||
|
insert into t1 values (1,'one');
|
||||||
|
commit;
|
||||||
|
truncate t1;
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
@@ -106,7 +106,7 @@ select * from t1 where b<=5 order by a;
|
|||||||
select * from t1 where b<=5 and c=0;
|
select * from t1 where b<=5 and c=0;
|
||||||
insert into t1 values (19,4, 0);
|
insert into t1 values (19,4, 0);
|
||||||
select * from t1 where b<=5 and c=0;
|
select * from t1 where b<=5 and c=0;
|
||||||
select * from t1 where b=4 and c<=5;
|
select * from t1 where b=4 and c<=5 order by a;
|
||||||
select * from t1 where b<=4 and c<=5 order by a;
|
select * from t1 where b<=4 and c<=5 order by a;
|
||||||
select * from t1 where b<=5 and c=0 or b<=5 and c=2;
|
select * from t1 where b<=5 and c=0 or b<=5 and c=2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
831
mysql-test/t/ps_1general.test
Normal file
831
mysql-test/t/ps_1general.test
Normal file
@@ -0,0 +1,831 @@
|
|||||||
|
###################### ps_general.test #######################
|
||||||
|
# #
|
||||||
|
# basic and miscellaneous tests for prepared statements #
|
||||||
|
# #
|
||||||
|
##############################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE THE DETAILED DESCRIPTION AT THE BOTTOM OF THIS FILE
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
use test;
|
||||||
|
--disable_query_log
|
||||||
|
select '------ basic tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
let $type= 'MYISAM' ;
|
||||||
|
# create the tables (t1 and t_many_col_types) used in many tests
|
||||||
|
--source include/ps_create.inc
|
||||||
|
# insert data into these tables
|
||||||
|
--source include/ps_renew.inc
|
||||||
|
|
||||||
|
|
||||||
|
##### The basic functions ####
|
||||||
|
|
||||||
|
# 1. PREPARE stmt_name FROM <preparable statement>;
|
||||||
|
# <preparable statement> ::=
|
||||||
|
# 'literal_stmt' |
|
||||||
|
# @variable_ref_stmt.
|
||||||
|
# The statement may contain question marks as placeholders for parameters.
|
||||||
|
#
|
||||||
|
# Bind a statement name to a string containing a SQL statement and
|
||||||
|
# send it to the server. The server will parse the statement and
|
||||||
|
# reply with "Query Ok" or an error message.
|
||||||
|
#
|
||||||
|
PREPARE stmt FROM ' select * from t1 where a = ? ' ;
|
||||||
|
|
||||||
|
# 2. EXECUTE stmt_name [USING @var [, @var ]];
|
||||||
|
# Current values of supplied variables are used as parameters.
|
||||||
|
#
|
||||||
|
# Send the server the order to execute the statement and supply values
|
||||||
|
# for the input parameters needed.
|
||||||
|
# If no error occurs the server reply will be identical to the reply for
|
||||||
|
# the query used in PREPARE with question marks replaced with values of
|
||||||
|
# the input variables.
|
||||||
|
#
|
||||||
|
SET @var= 2 ;
|
||||||
|
EXECUTE stmt USING @var ;
|
||||||
|
# The non prepared statement with the same server reply would be:
|
||||||
|
select * from t1 where a = @var ;
|
||||||
|
|
||||||
|
# 3. DEALLOCATE PREPARE stmt_name;
|
||||||
|
#
|
||||||
|
# Send the server the order to drop the parse informations.
|
||||||
|
# The server will reply with "Query Ok" or an error message.
|
||||||
|
DEALLOCATE PREPARE stmt ;
|
||||||
|
|
||||||
|
## prepare
|
||||||
|
# prepare without parameter
|
||||||
|
prepare stmt1 from ' select 1 as my_col ' ;
|
||||||
|
# prepare with parameter
|
||||||
|
prepare stmt1 from ' select ? as my_col ' ;
|
||||||
|
# prepare must fail (incomplete statements/wrong syntax)
|
||||||
|
--error 1064
|
||||||
|
prepare ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ;
|
||||||
|
--error 1064
|
||||||
|
prepare_garbage stmt1 from ' select 1 ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from_garbage ' select 1 ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' select_garbage 1 ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare from ' select 1 ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 ' select 1 ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare ? from ' select ? as my_col ' ;
|
||||||
|
# statement in variable
|
||||||
|
set @arg00='select 1 as my_col';
|
||||||
|
prepare stmt1 from @arg00;
|
||||||
|
# prepare must fail (query variable is empty)
|
||||||
|
set @arg00='';
|
||||||
|
--error 1065
|
||||||
|
prepare stmt1 from @arg00;
|
||||||
|
set @arg00=NULL;
|
||||||
|
# prepare must fail (query variable is NULL)
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from @arg01;
|
||||||
|
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
# prepare must fail (column does not exist)
|
||||||
|
--error 1054
|
||||||
|
prepare stmt1 from ' select * from t1 where x <= 2 ' ;
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists not_exist ;
|
||||||
|
--enable_warnings
|
||||||
|
# prepare must fail (table does not exist)
|
||||||
|
--error 1146
|
||||||
|
prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
|
||||||
|
|
||||||
|
# case derived from client_test.c: test_prepare_syntax()
|
||||||
|
# prepare must fail (incomplete statement)
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' insert into t1 values(? ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' select a, b from t1
|
||||||
|
where a=? and where ' ;
|
||||||
|
|
||||||
|
## execute
|
||||||
|
# execute must fail (statement never_prepared never prepared)
|
||||||
|
--error 1243
|
||||||
|
execute never_prepared ;
|
||||||
|
# execute must fail (prepare stmt1 just failed,
|
||||||
|
# but there was a successful prepare of stmt1 before)
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
--error 1146
|
||||||
|
prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
|
||||||
|
--error 1243
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
# drop the table between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 1, 'original table', 1);
|
||||||
|
prepare stmt2 from ' select * from to_be_dropped ' ;
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# execute must fail (table was dropped after prepare)
|
||||||
|
--error 1146
|
||||||
|
execute stmt2 ;
|
||||||
|
# cases derived from client_test.c: test_select_prepare()
|
||||||
|
# 1. drop + create table (same column names/types/order)
|
||||||
|
# between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# 2. drop + create table (same column names/types but different order)
|
||||||
|
# between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
c int,
|
||||||
|
b char(30)
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# 3. drop + create table (same column names/types/order+extra column)
|
||||||
|
# between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(30),
|
||||||
|
c int,
|
||||||
|
d timestamp default current_timestamp
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# 4. drop + create table (same column names/types, different order +
|
||||||
|
# additional column) between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
d timestamp default current_timestamp,
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( a, b, c) values( 9, 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# 5. drop + create table (same column names/order, different types)
|
||||||
|
# between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a timestamp default '2004-02-29 18:01:59',
|
||||||
|
b char(30),
|
||||||
|
c int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( b, c) values( 'recreated table', 9);
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# 6. drop + create table (same column types/order, different names)
|
||||||
|
# between prepare and execute
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
f1 int primary key,
|
||||||
|
f2 char(30),
|
||||||
|
f3 int
|
||||||
|
);
|
||||||
|
insert into to_be_dropped( f1, f2, f3) values( 9, 'recreated table', 9);
|
||||||
|
--error 1054
|
||||||
|
execute stmt2 ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
|
||||||
|
# execute without parameter
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
# execute with parameter
|
||||||
|
set @arg00=1 ;
|
||||||
|
set @arg01='two' ;
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= ? ' ;
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
# execute must fail (too small number of parameters)
|
||||||
|
--error 1210
|
||||||
|
execute stmt1 ;
|
||||||
|
# execute must fail (too big number of parameters)
|
||||||
|
--error 1210
|
||||||
|
execute stmt1 using @arg00, @arg01;
|
||||||
|
# execute must fail (parameter is not set)
|
||||||
|
execute stmt1 using @not_set;
|
||||||
|
|
||||||
|
## deallocate
|
||||||
|
# deallocate must fail (never_prepared was never prepared)
|
||||||
|
--error 1243
|
||||||
|
deallocate prepare never_prepared ;
|
||||||
|
# deallocate must fail (prepare stmt1 just failed,
|
||||||
|
# but there was a successful prepare before)
|
||||||
|
prepare stmt1 from ' select * from t1 where a <= 2 ' ;
|
||||||
|
--error 1146
|
||||||
|
prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
|
||||||
|
--error 1243
|
||||||
|
deallocate prepare stmt1;
|
||||||
|
create table to_be_dropped
|
||||||
|
(
|
||||||
|
a int primary key,
|
||||||
|
b char(10)
|
||||||
|
);
|
||||||
|
prepare stmt2 from ' select a,b from to_be_dropped where a <= 2 ' ;
|
||||||
|
drop table to_be_dropped ;
|
||||||
|
# deallocate prepared statement where the table was dropped after prepare
|
||||||
|
deallocate prepare stmt2;
|
||||||
|
|
||||||
|
## parallel use of more than one prepared statement handlers
|
||||||
|
# switch between different queries
|
||||||
|
prepare stmt1 from ' select a from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt2 from ' select b from t1 where a <= 2 ' ;
|
||||||
|
execute stmt2 ;
|
||||||
|
execute stmt1 ;
|
||||||
|
# switch between statement handlers of the same query
|
||||||
|
prepare stmt1 from ' select a from t1 where a <= 2 ' ;
|
||||||
|
prepare stmt2 from ' select a from t1 where a <= 2 ' ;
|
||||||
|
execute stmt2 ;
|
||||||
|
execute stmt1 ;
|
||||||
|
deallocate prepare stmt1 ;
|
||||||
|
# Will the deallocate of stmt1 with the same query affect stmt2 ?
|
||||||
|
execute stmt2 ;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ show and misc tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t2;
|
||||||
|
--enable_warnings
|
||||||
|
create table t2
|
||||||
|
(
|
||||||
|
a int primary key, b char(10)
|
||||||
|
);
|
||||||
|
|
||||||
|
###### SHOW COMMANDS
|
||||||
|
prepare stmt4 from ' show databases ';
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show tables from test like ''t2%'' ';
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show columns from t2 from test like ''a%'' ';
|
||||||
|
execute stmt4;
|
||||||
|
create index t2_idx on t2(b);
|
||||||
|
prepare stmt4 from ' show index from t2 from test ';
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show table status from test like ''t2%'' ';
|
||||||
|
# egalize date and time values
|
||||||
|
--replace_column 12 # 13 # 14 #
|
||||||
|
# Bug#4288 : prepared statement 'show table status ..', wrong output on execute
|
||||||
|
execute stmt4;
|
||||||
|
# try the same with the big table
|
||||||
|
prepare stmt4 from ' show table status from test like ''t_many_col_types%'' ';
|
||||||
|
# egalize date and time values
|
||||||
|
--replace_column 12 # 13 # 14 #
|
||||||
|
# Bug#4288
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show status like ''Threads_running'' ';
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show variables like ''sql_mode'' ';
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show engine bdb logs ';
|
||||||
|
# The output depends on the history (actions of the bdb engine).
|
||||||
|
# That is the reason why, we switch the output here off.
|
||||||
|
# (The real output will be tested in ps_6bdb.test)
|
||||||
|
# --replace_result $MYSQL_TEST_DIR TEST_DIR
|
||||||
|
--disable_result_log
|
||||||
|
execute stmt4;
|
||||||
|
--enable_result_log
|
||||||
|
prepare stmt4 from ' show full processlist ';
|
||||||
|
--replace_column 1 number
|
||||||
|
execute stmt4;
|
||||||
|
prepare stmt4 from ' show grants for user ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' show create table t2 ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' show master status ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' show master logs ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' show slave status ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' show warnings limit 20 ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' show errors limit 20 ';
|
||||||
|
prepare stmt4 from ' show storage engines ';
|
||||||
|
--replace_column 2 YES/NO
|
||||||
|
execute stmt4;
|
||||||
|
|
||||||
|
###### MISC STUFF
|
||||||
|
## get a warning and an error
|
||||||
|
# cases derived from client_test.c: test_warnings(), test_errors()
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists tx;
|
||||||
|
--enable_warnings
|
||||||
|
prepare stmt1 from ' drop table if exists tx ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
prepare stmt1 from ' drop table tx ' ;
|
||||||
|
--error 1051
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
## nonsense like prepare of prepare,execute or deallocate
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' prepare stmt2 from '' select 1 '' ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' execute stmt2 ' ;
|
||||||
|
--error 1064
|
||||||
|
prepare stmt1 from ' deallocate prepare never_prepared ' ;
|
||||||
|
|
||||||
|
## switch the database connection
|
||||||
|
--error 1295
|
||||||
|
prepare stmt4 from ' use test ' ;
|
||||||
|
|
||||||
|
## create/drop database
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' create database drop_me ';
|
||||||
|
create database drop_me ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' drop database drop_me ';
|
||||||
|
drop database drop_me ;
|
||||||
|
|
||||||
|
## grant/revoke + drop user
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' grant all on test.t1 to drop_user@localhost
|
||||||
|
identified by ''looser'' ';
|
||||||
|
grant all on test.t1 to drop_user@localhost
|
||||||
|
identified by 'looser' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' revoke all privileges on test.t1 from
|
||||||
|
drop_user@localhost ';
|
||||||
|
revoke all privileges on test.t1 from drop_user@localhost ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' drop user drop_user@localhost ';
|
||||||
|
drop user drop_user@localhost;
|
||||||
|
--error 1141
|
||||||
|
|
||||||
|
#### table related commands
|
||||||
|
## describe
|
||||||
|
prepare stmt3 from ' describe t2 ';
|
||||||
|
execute stmt3;
|
||||||
|
drop table t2 ;
|
||||||
|
--error 1146
|
||||||
|
execute stmt3;
|
||||||
|
## lock/unlock
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' lock tables t1 read ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' unlock tables ' ;
|
||||||
|
## Load/Unload table contents
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' load data infile ''data.txt''
|
||||||
|
into table t1 fields terminated by ''\t'' ';
|
||||||
|
prepare stmt1 from ' select * into outfile ''data.txt'' from t1 ';
|
||||||
|
execute stmt1 ;
|
||||||
|
##
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' optimize table t1 ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' analyze table t1 ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' checksum table t1 ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' repair table t1 ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' restore table t1 from ''data.txt'' ' ;
|
||||||
|
## handler
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' handler t1 open ';
|
||||||
|
|
||||||
|
|
||||||
|
## commit/rollback
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' commit ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' rollback ' ;
|
||||||
|
|
||||||
|
|
||||||
|
## switch the sql_mode
|
||||||
|
prepare stmt4 from ' SET sql_mode=ansi ';
|
||||||
|
execute stmt4;
|
||||||
|
# check if the sql_mode is now ansi
|
||||||
|
select 'a' || 'b' ;
|
||||||
|
prepare stmt4 from ' SET sql_mode="" ';
|
||||||
|
execute stmt4;
|
||||||
|
# check if the sql_mode is not ansi
|
||||||
|
select 'a' || 'b' ;
|
||||||
|
# Will a switch of the sqlmode affect the execution of already prepared
|
||||||
|
# statements ?
|
||||||
|
prepare stmt5 from ' select ''a'' || ''b'' ' ;
|
||||||
|
execute stmt5;
|
||||||
|
SET sql_mode=ansi;
|
||||||
|
execute stmt5;
|
||||||
|
SET sql_mode="";
|
||||||
|
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' flush local privileges ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' reset query cache ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt1 from ' KILL 0 ';
|
||||||
|
|
||||||
|
## simple explain
|
||||||
|
# cases derived from client_test.c: test_explain_bug()
|
||||||
|
prepare stmt1 from ' explain select a from t1 order by b ';
|
||||||
|
--enable_metadata
|
||||||
|
execute stmt1;
|
||||||
|
--disable_metadata
|
||||||
|
SET @arg00=1 ;
|
||||||
|
prepare stmt1 from ' explain select a from t1 where a > ? order by b ';
|
||||||
|
--enable_metadata
|
||||||
|
execute stmt1 using @arg00;
|
||||||
|
--disable_metadata
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ create/drop/alter/rename tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t2, t3;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
prepare stmt_drop from ' drop table if exists t2 ' ;
|
||||||
|
--disable_warnings
|
||||||
|
execute stmt_drop;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
prepare stmt_create from ' create table t2 (
|
||||||
|
a int primary key, b char(10)) ';
|
||||||
|
execute stmt_create;
|
||||||
|
prepare stmt3 from ' create table t3 like t2 ';
|
||||||
|
execute stmt3;
|
||||||
|
drop table t3;
|
||||||
|
|
||||||
|
set @arg00=1;
|
||||||
|
prepare stmt3 from ' create table t3 (m int) select ? as m ' ;
|
||||||
|
# Bug#4280 server hangs, prepared "create table .. as select ? .."
|
||||||
|
execute stmt3 using @arg00;
|
||||||
|
select m from t3;
|
||||||
|
drop table t3;
|
||||||
|
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' create index t2_idx on t2(b) ';
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' drop index t2_idx on t2 ' ;
|
||||||
|
--error 1295
|
||||||
|
prepare stmt3 from ' alter table t2 drop primary key ';
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists new_t2;
|
||||||
|
--enable_warnings
|
||||||
|
prepare stmt3 from ' rename table t2 to new_t2 ';
|
||||||
|
execute stmt3;
|
||||||
|
--error 1050
|
||||||
|
execute stmt3;
|
||||||
|
rename table new_t2 to t2;
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
select '------ big statement tests ------' as test_sequence ;
|
||||||
|
--enable_query_log
|
||||||
|
# Attention: The limits used are NOT derived from the manual
|
||||||
|
# or other sources.
|
||||||
|
|
||||||
|
## many lines ( 50 )
|
||||||
|
select 'ABC' as my_const_col from t1 where
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 ;
|
||||||
|
prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 AND
|
||||||
|
1 = 1 ' ;
|
||||||
|
execute stmt1 ;
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
## many characters ( about 1400 )
|
||||||
|
|
||||||
|
select 'ABC' as my_const_col FROM t1 WHERE
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' AND
|
||||||
|
'1234567890123456789012345678901234567890123456789012345678901234567890'
|
||||||
|
= '1234567890123456789012345678901234567890123456789012345678901234567890' ;
|
||||||
|
prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' AND
|
||||||
|
''1234567890123456789012345678901234567890123456789012345678901234567890''
|
||||||
|
= ''1234567890123456789012345678901234567890123456789012345678901234567890'' ';
|
||||||
|
execute stmt1 ;
|
||||||
|
execute stmt1 ;
|
||||||
|
|
||||||
|
|
||||||
|
## many parameters ( 50 )
|
||||||
|
set @arg00= 1;
|
||||||
|
set @arg01= 1;
|
||||||
|
set @arg02= 1;
|
||||||
|
set @arg03= 1;
|
||||||
|
set @arg04= 1;
|
||||||
|
set @arg05= 1;
|
||||||
|
set @arg06= 1;
|
||||||
|
set @arg07= 1;
|
||||||
|
set @arg10= 1;
|
||||||
|
set @arg11= 1;
|
||||||
|
set @arg12= 1;
|
||||||
|
set @arg13= 1;
|
||||||
|
set @arg14= 1;
|
||||||
|
set @arg15= 1;
|
||||||
|
set @arg16= 1;
|
||||||
|
set @arg17= 1;
|
||||||
|
set @arg20= 1;
|
||||||
|
set @arg21= 1;
|
||||||
|
set @arg22= 1;
|
||||||
|
set @arg23= 1;
|
||||||
|
set @arg24= 1;
|
||||||
|
set @arg25= 1;
|
||||||
|
set @arg26= 1;
|
||||||
|
set @arg27= 1;
|
||||||
|
set @arg30= 1;
|
||||||
|
set @arg31= 1;
|
||||||
|
set @arg32= 1;
|
||||||
|
set @arg33= 1;
|
||||||
|
set @arg34= 1;
|
||||||
|
set @arg35= 1;
|
||||||
|
set @arg36= 1;
|
||||||
|
set @arg37= 1;
|
||||||
|
set @arg40= 1;
|
||||||
|
set @arg41= 1;
|
||||||
|
set @arg42= 1;
|
||||||
|
set @arg43= 1;
|
||||||
|
set @arg44= 1;
|
||||||
|
set @arg45= 1;
|
||||||
|
set @arg46= 1;
|
||||||
|
set @arg47= 1;
|
||||||
|
set @arg50= 1;
|
||||||
|
set @arg51= 1;
|
||||||
|
set @arg52= 1;
|
||||||
|
set @arg53= 1;
|
||||||
|
set @arg54= 1;
|
||||||
|
set @arg55= 1;
|
||||||
|
set @arg56= 1;
|
||||||
|
set @arg57= 1;
|
||||||
|
set @arg60= 1;
|
||||||
|
set @arg61= 1;
|
||||||
|
|
||||||
|
select 'ABC' as my_const_col FROM t1 WHERE
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
|
||||||
|
@arg00=@arg00 ;
|
||||||
|
prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? and ? = ? and ? = ? and ? = ? and
|
||||||
|
? = ? ' ;
|
||||||
|
execute stmt1 using
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||||
|
@arg00, @arg00;
|
||||||
|
execute stmt1 using
|
||||||
|
@arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07,
|
||||||
|
@arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17,
|
||||||
|
@arg20, @arg21, @arg22, @arg23, @arg24, @arg25, @arg26, @arg27,
|
||||||
|
@arg30, @arg31, @arg32, @arg33, @arg34, @arg35, @arg36, @arg37,
|
||||||
|
@arg40, @arg41, @arg42, @arg43, @arg44, @arg45, @arg46, @arg47,
|
||||||
|
@arg50, @arg51, @arg52, @arg53, @arg54, @arg55, @arg56, @arg57,
|
||||||
|
@arg60, @arg61 ;
|
||||||
|
|
||||||
|
drop table t1 ;
|
||||||
|
|
||||||
|
##### RULES OF THUMB TO PRESERVE THE SYSTEMATICS OF THE PS TEST CASES #####
|
||||||
|
#
|
||||||
|
# 0. You don't have the time to
|
||||||
|
# - read and pay attention to these rules of thumb
|
||||||
|
# - accept that QA may move your test case to a different place
|
||||||
|
# (I will not change your code!!) .
|
||||||
|
# Please append your test case to
|
||||||
|
# t/ps.test
|
||||||
|
#
|
||||||
|
# 1. You have more time and want to get as much value from you test case as
|
||||||
|
# possible. Please try to make the following decisions:
|
||||||
|
#
|
||||||
|
# Will the execution or result of the sub test case depend on the
|
||||||
|
# properties of a storage engine ?
|
||||||
|
#
|
||||||
|
# NO --> alter t/ps_1general.test (Example: Command with syntax error)
|
||||||
|
# If you need a table, please try to use
|
||||||
|
# t1 - very simple table
|
||||||
|
# t_many_col_types - table with nearly all available column types
|
||||||
|
# whenever possible.
|
||||||
|
#
|
||||||
|
# The structure and the content of these tables can be found in
|
||||||
|
# include/ps_create.inc CREATE TABLE ...
|
||||||
|
# include/ps_renew.inc DELETE all rows and INSERT some rows
|
||||||
|
#
|
||||||
|
# Both tables are managed by the same storage engine.
|
||||||
|
# The type of the storage engine is stored in the variable
|
||||||
|
# '$type' . In ps_1general.test $type is set to 'MYISAM'.
|
||||||
|
#
|
||||||
|
# Please feel free to source ps_create.inc or ps_renew.inc
|
||||||
|
# whenever you think it helps. But please restore the original
|
||||||
|
# state of these tables after your tests, because the following
|
||||||
|
# statements may depend on it.
|
||||||
|
#
|
||||||
|
# YES
|
||||||
|
# |
|
||||||
|
# |
|
||||||
|
# Is it possible to apply the sub test case to all table types ?
|
||||||
|
# YES --> alter include/ps_query.inc (for SELECTs)
|
||||||
|
# include/ps_modify.inc (for INSERT/UPDATE/DELETE)
|
||||||
|
# include/ps_modify1.inc (also for INSERT/UPDATE/DELETE,
|
||||||
|
# but t/ps_5merge.test will not source that file)
|
||||||
|
# Please try to find an appropriate place within the file.
|
||||||
|
# It would be nice if we have some systematics in the
|
||||||
|
# order of the sub test cases (if possible).
|
||||||
|
#
|
||||||
|
# Please be aware, that
|
||||||
|
# include: ps_query.inc, ps_modify.inc, ps_modify1.inc
|
||||||
|
# will be sourced by several test case files stored within the
|
||||||
|
# subdirectory 't'. So every change here will affect several test
|
||||||
|
# cases.
|
||||||
|
#
|
||||||
|
# NO
|
||||||
|
# |
|
||||||
|
# |
|
||||||
|
# Append the sub test case to the appropriate
|
||||||
|
# ps_<number><table type>.test .
|
||||||
|
#
|
||||||
|
# 2. The current structure of the PS tests
|
||||||
|
#
|
||||||
|
# t/ps_1general.test Check of basic PS features, SHOW commands and DDL
|
||||||
|
# The tests should not depend on the table type.
|
||||||
|
#
|
||||||
|
# t/ps_2myisam Check of PS on tables of type MYISAM .
|
||||||
|
# t/ps_3innodb Check of PS on tables of type InnoDB .
|
||||||
|
# ...
|
||||||
|
# t/ps_6bdb Check of PS on tables of type BDB .
|
||||||
|
# All storage engine related tests use the variable $type to hold the
|
||||||
|
# name of the storage engine.
|
||||||
|
#
|
||||||
|
# include/ps_query.inc test cases with SELECT/...
|
||||||
|
# These test cases should not modify the content or
|
||||||
|
# the structure (DROP/ALTER..) of the tables
|
||||||
|
# 't1' and 't_many_col_types'.
|
||||||
|
# include/ps_modify.inc test cases with INSERT/UPDATE/...
|
||||||
|
# These test cases should not modify the structure
|
||||||
|
# (DROP/ALTER..) of the tables
|
||||||
|
# 't1' and 't_many_col_types'.
|
||||||
|
# These two test sequences will be applied to all table types .
|
||||||
|
#
|
||||||
|
# include/ps_modify1.inc test cases with INSERT/UPDATE/...
|
||||||
|
# This test sequences will be applied to all table types
|
||||||
|
# except MERGE tables.
|
||||||
|
#
|
||||||
|
# include/ps_create.inc DROP and CREATE of the tables
|
||||||
|
# 't1' and 't_many_col_types' .
|
||||||
|
# include/ps_renew.inc DELETE all rows and INSERT some rows, that means
|
||||||
|
# recreate the original content of these tables.
|
||||||
|
# Please do not alter the commands concerning these two tables.
|
||||||
|
#
|
||||||
|
# Please feel free and encouraged to exploit the current code sharing
|
||||||
|
# mechanism of the 'ps_<number><table type>' test cases. It is an convenient
|
||||||
|
# way to check all storage engines.
|
||||||
|
#
|
||||||
|
# Thank you for reading these rules of thumb.
|
||||||
|
#
|
||||||
|
# Matthias
|
21
mysql-test/t/ps_2myisam.test
Normal file
21
mysql-test/t/ps_2myisam.test
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
###############################################
|
||||||
|
# #
|
||||||
|
# Prepared Statements test on MYISAM tables #
|
||||||
|
# #
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
let $type= 'MYISAM' ;
|
||||||
|
-- source include/ps_create.inc
|
||||||
|
-- source include/ps_renew.inc
|
||||||
|
|
||||||
|
-- source include/ps_query.inc
|
||||||
|
-- source include/ps_modify.inc
|
||||||
|
-- source include/ps_modify1.inc
|
||||||
|
|
||||||
|
drop table t1, t_many_col_types;
|
21
mysql-test/t/ps_3innodb.test
Normal file
21
mysql-test/t/ps_3innodb.test
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
###############################################
|
||||||
|
# #
|
||||||
|
# Prepared Statements test on InnoDB tables #
|
||||||
|
# #
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
let $type= 'InnoDB' ;
|
||||||
|
-- source include/ps_create.inc
|
||||||
|
-- source include/ps_renew.inc
|
||||||
|
|
||||||
|
-- source include/ps_query.inc
|
||||||
|
-- source include/ps_modify.inc
|
||||||
|
-- source include/ps_modify1.inc
|
||||||
|
|
||||||
|
drop table t1, t_many_col_types;
|
48
mysql-test/t/ps_4heap.test
Normal file
48
mysql-test/t/ps_4heap.test
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
###############################################
|
||||||
|
# #
|
||||||
|
# Prepared Statements test on HEAP tables #
|
||||||
|
# #
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
let $type= 'HEAP' ;
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1, t_many_col_types ;
|
||||||
|
--enable_warnings
|
||||||
|
eval create table t1
|
||||||
|
(
|
||||||
|
a int, b varchar(30),
|
||||||
|
primary key(a)
|
||||||
|
) engine = $type ;
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t_many_col_types;
|
||||||
|
--enable_warnings
|
||||||
|
# The used table type doesn't support BLOB/TEXT columns.
|
||||||
|
# (The server would send error 1163 .)
|
||||||
|
# So we use char(100) instead.
|
||||||
|
eval create table t_many_col_types
|
||||||
|
(
|
||||||
|
c1 tinyint, c2 smallint, c3 mediumint, c4 int,
|
||||||
|
c5 integer, c6 bigint, c7 float, c8 double,
|
||||||
|
c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
|
||||||
|
c13 date, c14 datetime, c15 timestamp(14), c16 time,
|
||||||
|
c17 year, c18 bit, c19 bool, c20 char,
|
||||||
|
c21 char(10), c22 varchar(30), c23 char(100), c24 char(100),
|
||||||
|
c25 char(100), c26 char(100), c27 char(100), c28 char(100),
|
||||||
|
c29 char(100), c30 char(100), c31 enum('one', 'two', 'three'),
|
||||||
|
c32 set('monday', 'tuesday', 'wednesday'),
|
||||||
|
primary key(c1)
|
||||||
|
) engine = $type ;
|
||||||
|
-- source include/ps_renew.inc
|
||||||
|
|
||||||
|
-- source include/ps_query.inc
|
||||||
|
-- source include/ps_modify.inc
|
||||||
|
-- source include/ps_modify1.inc
|
||||||
|
|
||||||
|
drop table t1, t_many_col_types;
|
82
mysql-test/t/ps_5merge.test
Normal file
82
mysql-test/t/ps_5merge.test
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
###############################################
|
||||||
|
# #
|
||||||
|
# Prepared Statements test on MERGE tables #
|
||||||
|
# #
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1, t1_1, t1_2,
|
||||||
|
t_many_col_types, t_many_col_types_1, t_many_col_types_2;
|
||||||
|
--enable_warnings
|
||||||
|
let $type= 'MYISAM' ;
|
||||||
|
-- source include/ps_create.inc
|
||||||
|
rename table t1 to t1_1, t_many_col_types to t_many_col_types_1 ;
|
||||||
|
-- source include/ps_create.inc
|
||||||
|
rename table t1 to t1_2, t_many_col_types to t_many_col_types_2 ;
|
||||||
|
|
||||||
|
create table t1
|
||||||
|
(
|
||||||
|
a int, b varchar(30),
|
||||||
|
primary key(a)
|
||||||
|
) ENGINE = MERGE UNION=(t1_1,t1_2)
|
||||||
|
INSERT_METHOD=FIRST;
|
||||||
|
create table t_many_col_types
|
||||||
|
(
|
||||||
|
c1 tinyint, c2 smallint, c3 mediumint, c4 int,
|
||||||
|
c5 integer, c6 bigint, c7 float, c8 double,
|
||||||
|
c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
|
||||||
|
c13 date, c14 datetime, c15 timestamp(14), c16 time,
|
||||||
|
c17 year, c18 bit, c19 bool, c20 char,
|
||||||
|
c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
|
||||||
|
c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
|
||||||
|
c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
|
||||||
|
c32 set('monday', 'tuesday', 'wednesday'),
|
||||||
|
primary key(c1)
|
||||||
|
) ENGINE = MERGE UNION=(t_many_col_types_1,t_many_col_types_2)
|
||||||
|
INSERT_METHOD=FIRST;
|
||||||
|
-- source include/ps_renew.inc
|
||||||
|
|
||||||
|
-- source include/ps_query.inc
|
||||||
|
-- source include/ps_modify.inc
|
||||||
|
# no test of ps_modify1, because insert .. select
|
||||||
|
# is not allowed on MERGE tables
|
||||||
|
# -- source include/ps_modify1.inc
|
||||||
|
|
||||||
|
# Lets's try the same tests with INSERT_METHOD=LAST
|
||||||
|
drop table t1, t_many_col_types ;
|
||||||
|
create table t1
|
||||||
|
(
|
||||||
|
a int, b varchar(30),
|
||||||
|
primary key(a)
|
||||||
|
) ENGINE = MERGE UNION=(t1_1,t1_2)
|
||||||
|
INSERT_METHOD=LAST;
|
||||||
|
create table t_many_col_types
|
||||||
|
(
|
||||||
|
c1 tinyint, c2 smallint, c3 mediumint, c4 int,
|
||||||
|
c5 integer, c6 bigint, c7 float, c8 double,
|
||||||
|
c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
|
||||||
|
c13 date, c14 datetime, c15 timestamp(14), c16 time,
|
||||||
|
c17 year, c18 bit, c19 bool, c20 char,
|
||||||
|
c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
|
||||||
|
c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
|
||||||
|
c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
|
||||||
|
c32 set('monday', 'tuesday', 'wednesday'),
|
||||||
|
primary key(c1)
|
||||||
|
) ENGINE = MERGE UNION=(t_many_col_types_1,t_many_col_types_2)
|
||||||
|
INSERT_METHOD=LAST;
|
||||||
|
-- source include/ps_renew.inc
|
||||||
|
|
||||||
|
-- source include/ps_query.inc
|
||||||
|
-- source include/ps_modify.inc
|
||||||
|
# no test of ps_modify1, because insert .. select
|
||||||
|
# is not allowed on MERGE tables
|
||||||
|
# -- source include/ps_modify1.inc
|
||||||
|
|
||||||
|
drop table t1, t1_1, t1_2,
|
||||||
|
t_many_col_types_1, t_many_col_types_2, t_many_col_types;
|
22
mysql-test/t/ps_6bdb.test
Normal file
22
mysql-test/t/ps_6bdb.test
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
###############################################
|
||||||
|
# #
|
||||||
|
# Prepared Statements test on BDB tables #
|
||||||
|
# #
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: PLEASE SEE ps_1general.test (bottom)
|
||||||
|
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
-- source include/have_bdb.inc
|
||||||
|
let $type= 'BDB' ;
|
||||||
|
-- source include/ps_create.inc
|
||||||
|
-- source include/ps_renew.inc
|
||||||
|
|
||||||
|
-- source include/ps_query.inc
|
||||||
|
-- source include/ps_modify.inc
|
||||||
|
-- source include/ps_modify1.inc
|
||||||
|
|
||||||
|
drop table t1, t_many_col_types;
|
@@ -6,7 +6,8 @@ connection master;
|
|||||||
drop database if exists test1;
|
drop database if exists test1;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# can't read dir
|
# can't read dir
|
||||||
error 12;
|
--replace_result "Errcode: 1" "Errcode: X" "Errcode: 2" "Errcode: X"
|
||||||
|
--error 12
|
||||||
show tables from test1;
|
show tables from test1;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
@@ -15,7 +16,7 @@ connection master;
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# table does not exist
|
# table does not exist
|
||||||
error 1146;
|
--error 1146
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
@@ -304,3 +304,11 @@ 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';
|
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
|
||||||
|
#Bug #4374 SHOW TABLE STATUS FROM ignores collation_connection
|
||||||
|
set names latin1;
|
||||||
|
create database `<60>`;
|
||||||
|
create table `<60>`.`<60>` (a int) engine=heap;
|
||||||
|
--replace_column 7 # 8 # 9 #
|
||||||
|
show table status from `<60>` LIKE '<27>';
|
||||||
|
drop database `<60>`;
|
||||||
|
@@ -24,8 +24,8 @@ public:
|
|||||||
ValueType m_type;
|
ValueType m_type;
|
||||||
union {
|
union {
|
||||||
Uint32 m_int;
|
Uint32 m_int;
|
||||||
const char * m_string;
|
|
||||||
Uint64 m_int64;
|
Uint64 m_int64;
|
||||||
|
const char * m_string;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -72,14 +72,14 @@ private:
|
|||||||
friend class ConstIterator;
|
friend class ConstIterator;
|
||||||
|
|
||||||
bool getByPos(Uint32 pos, Entry *) const;
|
bool getByPos(Uint32 pos, Entry *) const;
|
||||||
Uint64 & get64(Uint32 index) const;
|
Uint64 * get64(Uint32 index) const;
|
||||||
char * & getString(Uint32 index) const;
|
char ** getString(Uint32 index) const;
|
||||||
|
|
||||||
Uint32 m_size;
|
Uint32 m_size;
|
||||||
Uint32 m_dataSize;
|
Uint32 m_dataSize;
|
||||||
Uint32 m_stringCount;
|
Uint32 m_stringCount;
|
||||||
Uint32 m_int64Count;
|
Uint32 m_int64Count;
|
||||||
|
|
||||||
Uint32 m_values[1];
|
Uint32 m_values[1];
|
||||||
void * m_data[1];
|
void * m_data[1];
|
||||||
};
|
};
|
||||||
|
@@ -60,7 +60,7 @@ ConfigValues::ConfigValues(Uint32 sz, Uint32 dsz){
|
|||||||
|
|
||||||
ConfigValues::~ConfigValues(){
|
ConfigValues::~ConfigValues(){
|
||||||
for(Uint32 i = 0; i<m_stringCount; i++){
|
for(Uint32 i = 0; i<m_stringCount; i++){
|
||||||
free(getString(i));
|
free(* getString(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,10 +87,10 @@ ConfigValues::getByPos(Uint32 pos, Entry * result) const {
|
|||||||
result->m_int = val;
|
result->m_int = val;
|
||||||
break;
|
break;
|
||||||
case StringType:
|
case StringType:
|
||||||
result->m_string = getString(val);
|
result->m_string = * getString(val);
|
||||||
break;
|
break;
|
||||||
case Int64Type:
|
case Int64Type:
|
||||||
result->m_int64 = get64(val);
|
result->m_int64 = * get64(val);
|
||||||
break;
|
break;
|
||||||
case InvalidType:
|
case InvalidType:
|
||||||
default:
|
default:
|
||||||
@@ -102,18 +102,23 @@ ConfigValues::getByPos(Uint32 pos, Entry * result) const {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint64 &
|
Uint64 *
|
||||||
ConfigValues::get64(Uint32 index) const {
|
ConfigValues::get64(Uint32 index) const {
|
||||||
assert(index < m_int64Count);
|
assert(index < m_int64Count);
|
||||||
Uint64 * ptr = (Uint64*)(&m_values[m_size << 1]);
|
const Uint32 * data = m_values + (m_size << 1);
|
||||||
return ptr[index];
|
Uint64 * ptr = (Uint64*)data;
|
||||||
|
ptr += index;
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * &
|
char **
|
||||||
ConfigValues::getString(Uint32 index) const {
|
ConfigValues::getString(Uint32 index) const {
|
||||||
assert(index < m_stringCount);
|
assert(index < m_stringCount);
|
||||||
char ** ptr = (char**)(((char *)&(m_values[m_size << 1])) + m_dataSize);
|
const Uint32 * data = m_values + (m_size << 1);
|
||||||
return ptr[-index];
|
char * ptr = (char*)data;
|
||||||
|
ptr += m_dataSize;
|
||||||
|
ptr -= (index * sizeof(char *));
|
||||||
|
return (char**)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@@ -176,7 +181,7 @@ ConfigValues::Iterator::set(Uint32 key, Uint64 value){
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_cfg.get64(m_cfg.m_values[pos+1]) = value;
|
* m_cfg.get64(m_cfg.m_values[pos+1]) = value;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,9 +196,9 @@ ConfigValues::Iterator::set(Uint32 key, const char * value){
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * & str = m_cfg.getString(m_cfg.m_values[pos+1]);
|
char ** str = m_cfg.getString(m_cfg.m_values[pos+1]);
|
||||||
free(str);
|
free(* str);
|
||||||
str = strdup(value ? value : "");
|
* str = strdup(value ? value : "");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,7 +462,8 @@ ConfigValuesFactory::put(const ConfigValues::Entry & entry){
|
|||||||
case ConfigValues::StringType:{
|
case ConfigValues::StringType:{
|
||||||
Uint32 index = m_cfg->m_stringCount++;
|
Uint32 index = m_cfg->m_stringCount++;
|
||||||
m_cfg->m_values[pos+1] = index;
|
m_cfg->m_values[pos+1] = index;
|
||||||
m_cfg->getString(index) = strdup(entry.m_string ? entry.m_string : "");
|
char ** ref = m_cfg->getString(index);
|
||||||
|
* ref = strdup(entry.m_string ? entry.m_string : "");
|
||||||
m_freeKeys--;
|
m_freeKeys--;
|
||||||
m_freeData -= sizeof(char *);
|
m_freeData -= sizeof(char *);
|
||||||
DEBUG printf("Putting at: %d(%d) (loop = %d) key: %d value(%d): %s\n",
|
DEBUG printf("Putting at: %d(%d) (loop = %d) key: %d value(%d): %s\n",
|
||||||
@@ -470,7 +476,7 @@ ConfigValuesFactory::put(const ConfigValues::Entry & entry){
|
|||||||
case ConfigValues::Int64Type:{
|
case ConfigValues::Int64Type:{
|
||||||
Uint32 index = m_cfg->m_int64Count++;
|
Uint32 index = m_cfg->m_int64Count++;
|
||||||
m_cfg->m_values[pos+1] = index;
|
m_cfg->m_values[pos+1] = index;
|
||||||
m_cfg->get64(index) = entry.m_int64;
|
* m_cfg->get64(index) = entry.m_int64;
|
||||||
m_freeKeys--;
|
m_freeKeys--;
|
||||||
m_freeData -= 8;
|
m_freeData -= 8;
|
||||||
DEBUG printf("Putting at: %d(%d) (loop = %d) key: %d value64(%d): %lld\n",
|
DEBUG printf("Putting at: %d(%d) (loop = %d) key: %d value64(%d): %lld\n",
|
||||||
@@ -558,7 +564,7 @@ ConfigValues::getPackedSize() const {
|
|||||||
break;
|
break;
|
||||||
case StringType:
|
case StringType:
|
||||||
size += 8; // key + len
|
size += 8; // key + len
|
||||||
size += mod4(strlen(getString(m_values[i+1])) + 1);
|
size += mod4(strlen(* getString(m_values[i+1])) + 1);
|
||||||
break;
|
break;
|
||||||
case InvalidType:
|
case InvalidType:
|
||||||
default:
|
default:
|
||||||
@@ -587,7 +593,7 @@ ConfigValues::pack(void * _dst, Uint32 _len) const {
|
|||||||
* (Uint32*)dst = htonl(val); dst += 4;
|
* (Uint32*)dst = htonl(val); dst += 4;
|
||||||
break;
|
break;
|
||||||
case Int64Type:{
|
case Int64Type:{
|
||||||
Uint64 i64 = get64(val);
|
Uint64 i64 = * get64(val);
|
||||||
Uint32 hi = (i64 >> 32);
|
Uint32 hi = (i64 >> 32);
|
||||||
Uint32 lo = (i64 & 0xFFFFFFFF);
|
Uint32 lo = (i64 & 0xFFFFFFFF);
|
||||||
* (Uint32*)dst = htonl(key); dst += 4;
|
* (Uint32*)dst = htonl(key); dst += 4;
|
||||||
@@ -596,7 +602,7 @@ ConfigValues::pack(void * _dst, Uint32 _len) const {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case StringType:{
|
case StringType:{
|
||||||
const char * str = getString(val);
|
const char * str = * getString(val);
|
||||||
Uint32 len = strlen(str) + 1;
|
Uint32 len = strlen(str) + 1;
|
||||||
* (Uint32*)dst = htonl(key); dst += 4;
|
* (Uint32*)dst = htonl(key); dst += 4;
|
||||||
* (Uint32*)dst = htonl(len); dst += 4;
|
* (Uint32*)dst = htonl(len); dst += 4;
|
||||||
|
@@ -63,7 +63,7 @@ Ndbfs::Ndbfs(const Configuration & conf) :
|
|||||||
const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator();
|
const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator();
|
||||||
ndbrequire(p != 0);
|
ndbrequire(p != 0);
|
||||||
|
|
||||||
m_maxOpenedFiles = 40;
|
m_maxFiles = 40;
|
||||||
//ndb_mgm_get_int_parameter(p, CFG_DB_MAX_OPEN_FILES, &m_maxFiles);
|
//ndb_mgm_get_int_parameter(p, CFG_DB_MAX_OPEN_FILES, &m_maxFiles);
|
||||||
|
|
||||||
// Create idle AsyncFiles
|
// Create idle AsyncFiles
|
||||||
|
@@ -795,8 +795,8 @@ inline
|
|||||||
void
|
void
|
||||||
UnsafeArrayPool<T>::getPtrForce(Ptr<T> & ptr){
|
UnsafeArrayPool<T>::getPtrForce(Ptr<T> & ptr){
|
||||||
Uint32 i = ptr.i;
|
Uint32 i = ptr.i;
|
||||||
if(i < size){
|
if(i < this->size){
|
||||||
ptr.p = &theArray[i];
|
ptr.p = &this->theArray[i];
|
||||||
} else {
|
} else {
|
||||||
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
@@ -808,8 +808,8 @@ inline
|
|||||||
void
|
void
|
||||||
UnsafeArrayPool<T>::getPtrForce(ConstPtr<T> & ptr) const{
|
UnsafeArrayPool<T>::getPtrForce(ConstPtr<T> & ptr) const{
|
||||||
Uint32 i = ptr.i;
|
Uint32 i = ptr.i;
|
||||||
if(i < size){
|
if(i < this->size){
|
||||||
ptr.p = &theArray[i];
|
ptr.p = &this->theArray[i];
|
||||||
} else {
|
} else {
|
||||||
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
@@ -820,8 +820,8 @@ template <class T>
|
|||||||
inline
|
inline
|
||||||
T *
|
T *
|
||||||
UnsafeArrayPool<T>::getPtrForce(Uint32 i){
|
UnsafeArrayPool<T>::getPtrForce(Uint32 i){
|
||||||
if(i < size){
|
if(i < this->size){
|
||||||
return &theArray[i];
|
return &this->theArray[i];
|
||||||
} else {
|
} else {
|
||||||
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
@@ -833,8 +833,8 @@ template <class T>
|
|||||||
inline
|
inline
|
||||||
const T *
|
const T *
|
||||||
UnsafeArrayPool<T>::getConstPtrForce(Uint32 i) const {
|
UnsafeArrayPool<T>::getConstPtrForce(Uint32 i) const {
|
||||||
if(i < size){
|
if(i < this->size){
|
||||||
return &theArray[i];
|
return &this->theArray[i];
|
||||||
} else {
|
} else {
|
||||||
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
@@ -847,8 +847,8 @@ inline
|
|||||||
void
|
void
|
||||||
UnsafeArrayPool<T>::getPtrForce(Ptr<T> & ptr, Uint32 i){
|
UnsafeArrayPool<T>::getPtrForce(Ptr<T> & ptr, Uint32 i){
|
||||||
ptr.i = i;
|
ptr.i = i;
|
||||||
if(i < size){
|
if(i < this->size){
|
||||||
ptr.p = &theArray[i];
|
ptr.p = &this->theArray[i];
|
||||||
return ;
|
return ;
|
||||||
} else {
|
} else {
|
||||||
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
||||||
@@ -861,8 +861,8 @@ inline
|
|||||||
void
|
void
|
||||||
UnsafeArrayPool<T>::getPtrForce(ConstPtr<T> & ptr, Uint32 i) const{
|
UnsafeArrayPool<T>::getPtrForce(ConstPtr<T> & ptr, Uint32 i) const{
|
||||||
ptr.i = i;
|
ptr.i = i;
|
||||||
if(i < size){
|
if(i < this->size){
|
||||||
ptr.p = &theArray[i];
|
ptr.p = &this->theArray[i];
|
||||||
return ;
|
return ;
|
||||||
} else {
|
} else {
|
||||||
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
ErrorReporter::handleAssert("UnsafeArrayPool<T>::getPtr",
|
||||||
|
@@ -153,11 +153,11 @@ public:
|
|||||||
LocalDLFifoList(ArrayPool<T> & thePool, typename DLFifoList<T>::Head & _src)
|
LocalDLFifoList(ArrayPool<T> & thePool, typename DLFifoList<T>::Head & _src)
|
||||||
: DLFifoList<T>(thePool), src(_src)
|
: DLFifoList<T>(thePool), src(_src)
|
||||||
{
|
{
|
||||||
head = src;
|
this->head = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
~LocalDLFifoList(){
|
~LocalDLFifoList(){
|
||||||
src = head;
|
src = this->head;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
typename DLFifoList<T>::Head & src;
|
typename DLFifoList<T>::Head & src;
|
||||||
|
@@ -169,11 +169,11 @@ public:
|
|||||||
LocalDLList(ArrayPool<T> & thePool, typename DLList<T>::Head & _src)
|
LocalDLList(ArrayPool<T> & thePool, typename DLList<T>::Head & _src)
|
||||||
: DLList<T>(thePool), src(_src)
|
: DLList<T>(thePool), src(_src)
|
||||||
{
|
{
|
||||||
head = src;
|
this->head = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
~LocalDLList(){
|
~LocalDLList(){
|
||||||
src = head;
|
src = this->head;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
typename DLList<T>::Head & src;
|
typename DLList<T>::Head & src;
|
||||||
|
@@ -174,11 +174,11 @@ public:
|
|||||||
typename DataBuffer<sz>::Head & _src)
|
typename DataBuffer<sz>::Head & _src)
|
||||||
: DataBuffer<sz>(thePool), src(_src)
|
: DataBuffer<sz>(thePool), src(_src)
|
||||||
{
|
{
|
||||||
head = src;
|
this->head = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
~LocalDataBuffer(){
|
~LocalDataBuffer(){
|
||||||
src = head;
|
src = this->head;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
typename DataBuffer<sz>::Head & src;
|
typename DataBuffer<sz>::Head & src;
|
||||||
|
@@ -137,11 +137,11 @@ public:
|
|||||||
LocalSLList(ArrayPool<T> & thePool, typename SLList<T>::Head & _src)
|
LocalSLList(ArrayPool<T> & thePool, typename SLList<T>::Head & _src)
|
||||||
: SLList<T>(thePool), src(_src)
|
: SLList<T>(thePool), src(_src)
|
||||||
{
|
{
|
||||||
head = src;
|
this->head = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
~LocalSLList(){
|
~LocalSLList(){
|
||||||
src = head;
|
src = this->head;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
typename SLList<T>::Head & src;
|
typename SLList<T>::Head & src;
|
||||||
|
@@ -29,7 +29,7 @@ rm -f */*.linux
|
|||||||
./configure --without-innodb --without-docs
|
./configure --without-innodb --without-docs
|
||||||
|
|
||||||
# build tools only
|
# build tools only
|
||||||
make clean config.h
|
make clean all-local
|
||||||
(cd dbug; make libdbug.a)
|
(cd dbug; make libdbug.a)
|
||||||
(cd strings; make libmystrings.a)
|
(cd strings; make libmystrings.a)
|
||||||
(cd mysys; make libmysys.a)
|
(cd mysys; make libmysys.a)
|
||||||
|
@@ -15,6 +15,7 @@ suffix="standard"
|
|||||||
extra_configs=" \
|
extra_configs=" \
|
||||||
--with-innodb \
|
--with-innodb \
|
||||||
--enable-thread-safe-client \
|
--enable-thread-safe-client \
|
||||||
|
--with-archive-storage-engine \
|
||||||
"
|
"
|
||||||
|
|
||||||
. $path/compile-netware-END
|
. $path/compile-netware-END
|
||||||
|
@@ -13,7 +13,7 @@ export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib;
|
|||||||
export WINEPATH="$MYDEV/mw/bin"
|
export WINEPATH="$MYDEV/mw/bin"
|
||||||
|
|
||||||
# the default added path is "$HOME/mydev/mysql-x.x-x/netware/BUILD"
|
# the default added path is "$HOME/mydev/mysql-x.x-x/netware/BUILD"
|
||||||
export PATH="$PATH:/home/kp/mydev/mysql-VERSION/netware/BUILD"
|
export PATH="$PATH:BUILD_DIR/mysql-VERSION/netware/BUILD"
|
||||||
|
|
||||||
export AR='mwldnlm'
|
export AR='mwldnlm'
|
||||||
export AR_FLAGS='-type library -o'
|
export AR_FLAGS='-type library -o'
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -24,9 +24,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/mode.h>
|
#include <sys/mode.h>
|
||||||
|
|
||||||
#include "my_manage.h"
|
#include "my_manage.h"
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
|
||||||
macros
|
macros
|
||||||
@@ -143,7 +141,7 @@ int read_option(char *, char *);
|
|||||||
void run_test(char *);
|
void run_test(char *);
|
||||||
void setup(char *);
|
void setup(char *);
|
||||||
void vlog(char *, va_list);
|
void vlog(char *, va_list);
|
||||||
void log(char *, ...);
|
void log_msg(char *, ...);
|
||||||
void log_info(char *, ...);
|
void log_info(char *, ...);
|
||||||
void log_error(char *, ...);
|
void log_error(char *, ...);
|
||||||
void log_errno(char *, ...);
|
void log_errno(char *, ...);
|
||||||
@@ -161,21 +159,21 @@ void report_stats()
|
|||||||
{
|
{
|
||||||
if (total_fail == 0)
|
if (total_fail == 0)
|
||||||
{
|
{
|
||||||
log("\nAll %d test(s) were successful.\n", total_test);
|
log_msg("\nAll %d test(s) were successful.\n", total_test);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double percent = ((double)total_pass / total_test) * 100;
|
double percent = ((double)total_pass / total_test) * 100;
|
||||||
|
|
||||||
log("\nFailed %u/%u test(s), %.02f%% successful.\n",
|
log_msg("\nFailed %u/%u test(s), %.02f%% successful.\n",
|
||||||
total_fail, total_test, percent);
|
total_fail, total_test, percent);
|
||||||
log("\nThe .out and .err files in %s may give you some\n", result_dir);
|
log_msg("\nThe .out and .err files in %s may give you some\n", result_dir);
|
||||||
log("hint of what when wrong.\n");
|
log_msg("hint of what when wrong.\n");
|
||||||
log("\nIf you want to report this error, please first read the documentation\n");
|
log_msg("\nIf you want to report this error, please first read the documentation\n");
|
||||||
log("at: http://www.mysql.com/doc/M/y/MySQL_test_suite.html\n");
|
log_msg("at: http://www.mysql.com/doc/M/y/MySQL_test_suite.html\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
log("\n%.02f total minutes elapsed in the test cases\n\n", total_time / 60);
|
log_msg("\n%.02f total minutes elapsed in the test cases\n\n", total_time / 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@@ -240,7 +238,7 @@ void mysql_install_db()
|
|||||||
mkdir(temp, S_IRWXU);
|
mkdir(temp, S_IRWXU);
|
||||||
|
|
||||||
// create subdirectories
|
// create subdirectories
|
||||||
log("Creating test-suite folders...\n");
|
log_msg("Creating test-suite folders...\n");
|
||||||
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
|
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
|
||||||
mkdir(temp, S_IRWXU);
|
mkdir(temp, S_IRWXU);
|
||||||
snprintf(temp, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
snprintf(temp, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||||
@@ -259,9 +257,9 @@ void mysql_install_db()
|
|||||||
mkdir(temp, S_IRWXU);
|
mkdir(temp, S_IRWXU);
|
||||||
|
|
||||||
// install databases
|
// install databases
|
||||||
log("Creating test databases for master... \n");
|
log_msg("Creating test databases for master... \n");
|
||||||
install_db(master_dir);
|
install_db(master_dir);
|
||||||
log("Creating test databases for slave... \n");
|
log_msg("Creating test databases for slave... \n");
|
||||||
install_db(slave_dir);
|
install_db(slave_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -589,15 +587,18 @@ void start_slave()
|
|||||||
mysql_tmp_dir)) == 0)
|
mysql_tmp_dir)) == 0)
|
||||||
{
|
{
|
||||||
slave_running = TRUE;
|
slave_running = TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log_error("The slave server went down early.");
|
log_error("The slave server went down early.");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log_error("Unable to start slave server.");
|
log_error("Unable to start slave server.");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// free args
|
// free args
|
||||||
@@ -805,7 +806,7 @@ void run_test(char *test)
|
|||||||
if (ignore)
|
if (ignore)
|
||||||
{
|
{
|
||||||
// show test
|
// show test
|
||||||
log("%-46s ", test);
|
log_msg("%-46s ", test);
|
||||||
|
|
||||||
// ignore
|
// ignore
|
||||||
rstr = TEST_IGNORE;
|
rstr = TEST_IGNORE;
|
||||||
@@ -887,7 +888,7 @@ void run_test(char *test)
|
|||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
// show test
|
// show test
|
||||||
log("%-46s ", test);
|
log_msg("%-46s ", test);
|
||||||
|
|
||||||
// args
|
// args
|
||||||
init_args(&al);
|
init_args(&al);
|
||||||
@@ -959,7 +960,7 @@ void run_test(char *test)
|
|||||||
else // early skips
|
else // early skips
|
||||||
{
|
{
|
||||||
// show test
|
// show test
|
||||||
log("%-46s ", test);
|
log_msg("%-46s ", test);
|
||||||
|
|
||||||
// skip
|
// skip
|
||||||
rstr = TEST_SKIP;
|
rstr = TEST_SKIP;
|
||||||
@@ -967,7 +968,7 @@ void run_test(char *test)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// result
|
// result
|
||||||
log("%10.06f %-14s\n", elapsed, rstr);
|
log_msg("%10.06f %-14s\n", elapsed, rstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@@ -996,7 +997,7 @@ void vlog(char *format, va_list ap)
|
|||||||
Log the message.
|
Log the message.
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void log(char *format, ...)
|
void log_msg(char *format, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
@@ -1020,9 +1021,9 @@ void log_info(char *format, ...)
|
|||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
log("-- INFO : ");
|
log_msg("-- INFO : ");
|
||||||
vlog(format, ap);
|
vlog(format, ap);
|
||||||
log("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
@@ -1040,9 +1041,9 @@ void log_error(char *format, ...)
|
|||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
log("-- ERROR: ");
|
log_msg("-- ERROR: ");
|
||||||
vlog(format, ap);
|
vlog(format, ap);
|
||||||
log("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
@@ -1060,9 +1061,9 @@ void log_errno(char *format, ...)
|
|||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
log("-- ERROR: (%003u) ", errno);
|
log_msg("-- ERROR: (%003u) ", errno);
|
||||||
vlog(format, ap);
|
vlog(format, ap);
|
||||||
log("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
@@ -1157,8 +1158,9 @@ void setup(char *file)
|
|||||||
snprintf(file_path, PATH_MAX*2, "%s/mysqlbinlog --no-defaults --local-load=%s", bin_dir, mysql_tmp_dir);
|
snprintf(file_path, PATH_MAX*2, "%s/mysqlbinlog --no-defaults --local-load=%s", bin_dir, mysql_tmp_dir);
|
||||||
setenv("MYSQL_BINLOG", file_path, 1);
|
setenv("MYSQL_BINLOG", file_path, 1);
|
||||||
setenv("MASTER_MYPORT", "9306", 1);
|
setenv("MASTER_MYPORT", "9306", 1);
|
||||||
|
setenv("SLAVE_MYPORT", "9307", 1);
|
||||||
|
setenv("MYSQL_TCP_PORT", "3306", 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@@ -1198,18 +1200,18 @@ int main(int argc, char **argv)
|
|||||||
is_ignore_list = 1;
|
is_ignore_list = 1;
|
||||||
}
|
}
|
||||||
// header
|
// header
|
||||||
log("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
log_msg("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
||||||
|
|
||||||
log("Initializing Tests...\n");
|
log_msg("Initializing Tests...\n");
|
||||||
|
|
||||||
// install test databases
|
// install test databases
|
||||||
mysql_install_db();
|
mysql_install_db();
|
||||||
|
|
||||||
log("Starting Tests...\n");
|
log_msg("Starting Tests...\n");
|
||||||
|
|
||||||
log("\n");
|
log_msg("\n");
|
||||||
log(HEADER);
|
log_msg(HEADER);
|
||||||
log(DASH);
|
log_msg(DASH);
|
||||||
|
|
||||||
if ( argc > 1 + is_ignore_list )
|
if ( argc > 1 + is_ignore_list )
|
||||||
{
|
{
|
||||||
@@ -1264,10 +1266,10 @@ int main(int argc, char **argv)
|
|||||||
// stop server
|
// stop server
|
||||||
mysql_stop();
|
mysql_stop();
|
||||||
|
|
||||||
log(DASH);
|
log_msg(DASH);
|
||||||
log("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
log("Ending Tests...\n");
|
log_msg("Ending Tests...\n");
|
||||||
|
|
||||||
// report stats
|
// report stats
|
||||||
report_stats();
|
report_stats();
|
||||||
|
@@ -102,7 +102,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cmd="$bindir/mysql -f --user=$user --host=$host"
|
cmd="$bindir/mysql -f --user=$user --host=$host"
|
||||||
if test -z "$password" ; then
|
if test ! -z "$password" ; then
|
||||||
cmd="$cmd --password=$password"
|
cmd="$cmd --password=$password"
|
||||||
fi
|
fi
|
||||||
if test ! -z "$port"; then
|
if test ! -z "$port"; then
|
||||||
@@ -155,7 +155,7 @@ s_echo ""
|
|||||||
if test $verbose = 1
|
if test $verbose = 1
|
||||||
then
|
then
|
||||||
s_echo "You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
|
s_echo "You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
|
||||||
s_echo "as this just means that your tables where already up to date."
|
s_echo "because these just mean that your tables are already up to date."
|
||||||
s_echo "This script is safe to run even if your tables are already up to date!"
|
s_echo "This script is safe to run even if your tables are already up to date!"
|
||||||
s_echo ""
|
s_echo ""
|
||||||
fi
|
fi
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
-- for MySQL 4.0.
|
-- for MySQL 4.0.
|
||||||
|
|
||||||
-- You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
|
-- You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
|
||||||
-- as this just means that your tables where already up to date.
|
-- because these just mean that your tables are already up to date.
|
||||||
-- This script is safe to run even if your tables are already up to date!
|
-- This script is safe to run even if your tables are already up to date!
|
||||||
|
|
||||||
-- On unix, you should use the mysql_fix_privilege_tables script to execute
|
-- On unix, you should use the mysql_fix_privilege_tables script to execute
|
||||||
|
@@ -448,7 +448,7 @@ HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout)
|
|||||||
if (WaitForSingleObject(event_connect_answer,connect_timeout*1000) !=
|
if (WaitForSingleObject(event_connect_answer,connect_timeout*1000) !=
|
||||||
WAIT_OBJECT_0)
|
WAIT_OBJECT_0)
|
||||||
{
|
{
|
||||||
error_allow = CR_SHARED_MEMORY_CONNECT_ABANDODED_ERROR;
|
error_allow = CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2528,7 +2528,7 @@ mysql_fetch_row(MYSQL_RES *res)
|
|||||||
{
|
{
|
||||||
set_mysql_error(mysql,
|
set_mysql_error(mysql,
|
||||||
res->unbuffered_fetch_cancelled ?
|
res->unbuffered_fetch_cancelled ?
|
||||||
CR_FETCH_CANCELLED : CR_COMMANDS_OUT_OF_SYNC,
|
CR_FETCH_CANCELED : CR_COMMANDS_OUT_OF_SYNC,
|
||||||
unknown_sqlstate);
|
unknown_sqlstate);
|
||||||
}
|
}
|
||||||
else if (!(read_one_row(mysql, res->field_count, res->row, res->lengths)))
|
else if (!(read_one_row(mysql, res->field_count, res->row, res->lengths)))
|
||||||
|
@@ -91,11 +91,10 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
|
|||||||
gstream.cc spatial.cc sql_help.cc protocol_cursor.cc \
|
gstream.cc spatial.cc sql_help.cc protocol_cursor.cc \
|
||||||
tztime.cc my_time.c \
|
tztime.cc my_time.c \
|
||||||
examples/ha_example.cc examples/ha_archive.cc
|
examples/ha_example.cc examples/ha_archive.cc
|
||||||
|
|
||||||
gen_lex_hash_SOURCES = gen_lex_hash.cc
|
gen_lex_hash_SOURCES = gen_lex_hash.cc
|
||||||
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
|
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
|
||||||
|
mysql_tzinfo_to_sql_SOURCES = mysql_tzinfo_to_sql.cc
|
||||||
mysql_tzinfo_to_sql_SOURCES = mysql_tzinfo_to_sql_tztime.cc
|
|
||||||
mysql_tzinfo_to_sql_CXXFLAGS = -DTZINFO2SQL $(AM_CXXFLAGS)
|
|
||||||
mysql_tzinfo_to_sql_LDADD = $(LDADD) $(CXXLDFLAGS)
|
mysql_tzinfo_to_sql_LDADD = $(LDADD) $(CXXLDFLAGS)
|
||||||
|
|
||||||
DEFS = -DMYSQL_SERVER \
|
DEFS = -DMYSQL_SERVER \
|
||||||
@@ -108,7 +107,11 @@ BUILT_SOURCES = sql_yacc.cc sql_yacc.h
|
|||||||
EXTRA_DIST = udf_example.cc $(BUILT_SOURCES)
|
EXTRA_DIST = udf_example.cc $(BUILT_SOURCES)
|
||||||
AM_YFLAGS = -d
|
AM_YFLAGS = -d
|
||||||
|
|
||||||
link_sources:
|
mysql_tzinfo_to_sql.cc:
|
||||||
|
rm -f mysql_tzinfo_to_sql.cc
|
||||||
|
@LN_CP_F@ tztime.cc mysql_tzinfo_to_sql.cc
|
||||||
|
|
||||||
|
link_sources: mysql_tzinfo_to_sql.cc
|
||||||
rm -f mini_client_errors.c
|
rm -f mini_client_errors.c
|
||||||
@LN_CP_F@ ../libmysql/errmsg.c mini_client_errors.c
|
@LN_CP_F@ ../libmysql/errmsg.c mini_client_errors.c
|
||||||
rm -f pack.c
|
rm -f pack.c
|
||||||
@@ -121,9 +124,8 @@ link_sources:
|
|||||||
gen_lex_hash.o: gen_lex_hash.cc lex.h
|
gen_lex_hash.o: gen_lex_hash.cc lex.h
|
||||||
$(CXXCOMPILE) -c $(INCLUDES) $<
|
$(CXXCOMPILE) -c $(INCLUDES) $<
|
||||||
|
|
||||||
mysql_tzinfo_to_sql_tztime.cc: tztime.cc
|
mysql_tzinfo_to_sql.o: $(mysql_tzinfo_to_sql_SOURCES)
|
||||||
rm -f $(srcdir)/mysql_tzinfo_to_sql_tztime.cc
|
$(CXXCOMPILE) -c $(INCLUDES) -DTZINFO2SQL $<
|
||||||
@LN_CP_F@ $(srcdir)/tztime.cc $(srcdir)/mysql_tzinfo_to_sql_tztime.cc
|
|
||||||
|
|
||||||
# Try to get better dependencies for the grammar. Othervise really bad
|
# Try to get better dependencies for the grammar. Othervise really bad
|
||||||
# things like different grammars for different pars of MySQL can
|
# things like different grammars for different pars of MySQL can
|
||||||
|
@@ -94,7 +94,7 @@ class ha_berkeley: public handler
|
|||||||
changed_rows(0),last_dup_key((uint) -1),version(0),using_ignore(0) {}
|
changed_rows(0),last_dup_key((uint) -1),version(0),using_ignore(0) {}
|
||||||
~ha_berkeley() {}
|
~ha_berkeley() {}
|
||||||
const char *table_type() const { return "BerkeleyDB"; }
|
const char *table_type() const { return "BerkeleyDB"; }
|
||||||
ulong ha_berkeley::index_flags(uint idx, uint part) const
|
ulong index_flags(uint idx, uint part) const
|
||||||
{
|
{
|
||||||
ulong flags=HA_READ_NEXT | HA_READ_PREV;
|
ulong flags=HA_READ_NEXT | HA_READ_PREV;
|
||||||
if (part == (uint)~0 ||
|
if (part == (uint)~0 ||
|
||||||
|
@@ -515,7 +515,8 @@ extern TYPELIB tx_isolation_typelib;
|
|||||||
#define ha_commit(thd) (ha_commit_trans((thd), &((thd)->transaction.all)))
|
#define ha_commit(thd) (ha_commit_trans((thd), &((thd)->transaction.all)))
|
||||||
#define ha_rollback(thd) (ha_rollback_trans((thd), &((thd)->transaction.all)))
|
#define ha_rollback(thd) (ha_rollback_trans((thd), &((thd)->transaction.all)))
|
||||||
|
|
||||||
#define ha_supports_generate(T) (T != DB_TYPE_INNODB)
|
#define ha_supports_generate(T) (T != DB_TYPE_INNODB && \
|
||||||
|
T != DB_TYPE_BERKELEY_DB)
|
||||||
|
|
||||||
bool ha_caching_allowed(THD* thd, char* table_key,
|
bool ha_caching_allowed(THD* thd, char* table_key,
|
||||||
uint key_length, uint8 cache_type);
|
uint key_length, uint8 cache_type);
|
||||||
|
@@ -333,17 +333,11 @@ class Item_field :public Item_ident
|
|||||||
void set_field(Field *field);
|
void set_field(Field *field);
|
||||||
public:
|
public:
|
||||||
Field *field,*result_field;
|
Field *field,*result_field;
|
||||||
#ifndef DBUG_OFF
|
|
||||||
bool double_fix;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Item_field(const char *db_par,const char *table_name_par,
|
Item_field(const char *db_par,const char *table_name_par,
|
||||||
const char *field_name_par)
|
const char *field_name_par)
|
||||||
:Item_ident(db_par,table_name_par,field_name_par),
|
:Item_ident(db_par,table_name_par,field_name_par),
|
||||||
field(0), result_field(0)
|
field(0), result_field(0)
|
||||||
#ifndef DBUG_OFF
|
|
||||||
,double_fix(0)
|
|
||||||
#endif
|
|
||||||
{ collation.set(DERIVATION_IMPLICIT); }
|
{ collation.set(DERIVATION_IMPLICIT); }
|
||||||
// Constructor need to process subselect with temporary tables (see Item)
|
// Constructor need to process subselect with temporary tables (see Item)
|
||||||
Item_field(THD *thd, Item_field *item);
|
Item_field(THD *thd, Item_field *item);
|
||||||
|
@@ -313,12 +313,12 @@ err:
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Functions to concatinate various spatial objects
|
Functions to concatenate various spatial objects
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Concatinate doubles into Point
|
* Concatenate doubles into Point
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -343,7 +343,7 @@ String *Item_func_point::val_str(String *str)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Concatinates various items into various collections
|
Concatenates various items into various collections
|
||||||
with checkings for valid wkb type of items.
|
with checkings for valid wkb type of items.
|
||||||
For example, MultiPoint can be a collection of Points only.
|
For example, MultiPoint can be a collection of Points only.
|
||||||
coll_type contains wkb type of target collection.
|
coll_type contains wkb type of target collection.
|
||||||
@@ -388,7 +388,7 @@ String *Item_func_spatial_collection::val_str(String *str)
|
|||||||
const char *data= res->ptr() + 1;
|
const char *data= res->ptr() + 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
In the case of named collection we must to check that items
|
In the case of named collection we must check that items
|
||||||
are of specific type, let's do this checking now
|
are of specific type, let's do this checking now
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -402,7 +402,7 @@ To make maintaining easier please:
|
|||||||
<description>ARMSCII-8 Armenian</description>
|
<description>ARMSCII-8 Armenian</description>
|
||||||
<alias>armscii-8</alias>
|
<alias>armscii-8</alias>
|
||||||
<collation name="armscii8_general_ci" id="32" order="Armenian" flag="primary"/>
|
<collation name="armscii8_general_ci" id="32" order="Armenian" flag="primary"/>
|
||||||
<collation name="armscii_bin" id="64" order="Binary" flag="binary"/>
|
<collation name="armscii8_bin" id="64" order="Binary" flag="binary"/>
|
||||||
</charset>
|
</charset>
|
||||||
|
|
||||||
<charset name="utf8">
|
<charset name="utf8">
|
||||||
|
@@ -114,7 +114,7 @@
|
|||||||
</map>
|
</map>
|
||||||
</collation>
|
</collation>
|
||||||
|
|
||||||
<collation name="armscii_bin" flag="binary"/>
|
<collation name="armscii8_bin" flag="binary"/>
|
||||||
|
|
||||||
</charset>
|
</charset>
|
||||||
|
|
||||||
|
@@ -3408,6 +3408,7 @@ int mysql_recreate_table(THD *thd, TABLE_LIST *table_list,
|
|||||||
lex->key_list.empty();
|
lex->key_list.empty();
|
||||||
lex->col_list.empty();
|
lex->col_list.empty();
|
||||||
lex->alter_info.reset();
|
lex->alter_info.reset();
|
||||||
|
lex->alter_info.is_simple= 0; // Force full recreate
|
||||||
bzero((char*) &create_info,sizeof(create_info));
|
bzero((char*) &create_info,sizeof(create_info));
|
||||||
create_info.db_type=DB_TYPE_DEFAULT;
|
create_info.db_type=DB_TYPE_DEFAULT;
|
||||||
create_info.row_type=ROW_TYPE_DEFAULT;
|
create_info.row_type=ROW_TYPE_DEFAULT;
|
||||||
|
@@ -4422,7 +4422,9 @@ opt_db:
|
|||||||
|
|
||||||
wild:
|
wild:
|
||||||
/* empty */
|
/* empty */
|
||||||
| LIKE text_string { Lex->wild= $2; };
|
| LIKE TEXT_STRING_sys
|
||||||
|
{ Lex->wild= new (&YYTHD->mem_root) String($2.str, $2.length,
|
||||||
|
system_charset_info); };
|
||||||
|
|
||||||
opt_full:
|
opt_full:
|
||||||
/* empty */ { Lex->verbose=0; }
|
/* empty */ { Lex->verbose=0; }
|
||||||
|
@@ -8420,7 +8420,7 @@ CHARSET_INFO my_charset_utf8_icelandic_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8447,7 +8447,7 @@ CHARSET_INFO my_charset_utf8_latvian_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8474,7 +8474,7 @@ CHARSET_INFO my_charset_utf8_romanian_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8501,7 +8501,7 @@ CHARSET_INFO my_charset_utf8_slovenian_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8528,7 +8528,7 @@ CHARSET_INFO my_charset_utf8_polish_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8555,7 +8555,7 @@ CHARSET_INFO my_charset_utf8_estonian_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8582,7 +8582,7 @@ CHARSET_INFO my_charset_utf8_spanish_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8609,7 +8609,7 @@ CHARSET_INFO my_charset_utf8_swedish_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8636,7 +8636,7 @@ CHARSET_INFO my_charset_utf8_turkish_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8663,7 +8663,7 @@ CHARSET_INFO my_charset_utf8_czech_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8691,7 +8691,7 @@ CHARSET_INFO my_charset_utf8_danish_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8718,7 +8718,7 @@ CHARSET_INFO my_charset_utf8_lithuanian_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8745,7 +8745,7 @@ CHARSET_INFO my_charset_utf8_slovak_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
@@ -8772,7 +8772,7 @@ CHARSET_INFO my_charset_utf8_spanish2_uca_ci=
|
|||||||
NULL, /* state_map */
|
NULL, /* state_map */
|
||||||
NULL, /* ident_map */
|
NULL, /* ident_map */
|
||||||
8, /* strxfrm_multiply */
|
8, /* strxfrm_multiply */
|
||||||
2, /* mbminlen */
|
1, /* mbminlen */
|
||||||
2, /* mbmaxlen */
|
2, /* mbmaxlen */
|
||||||
9, /* min_sort_char */
|
9, /* min_sort_char */
|
||||||
0xFFFF, /* max_sort_char */
|
0xFFFF, /* max_sort_char */
|
||||||
|
@@ -397,7 +397,7 @@ useradd -M -r -d $mysql_datadir -s /bin/bash -c "MySQL server" mysql 2> /dev/nul
|
|||||||
chown -R mysql $mysql_datadir
|
chown -R mysql $mysql_datadir
|
||||||
|
|
||||||
# Initiate databases
|
# Initiate databases
|
||||||
mysql_install_db -IN-RPM --user=mysql
|
mysql_install_db --rpm --user=mysql
|
||||||
|
|
||||||
# Change permissions again to fix any new files.
|
# Change permissions again to fix any new files.
|
||||||
chown -R mysql $mysql_datadir
|
chown -R mysql $mysql_datadir
|
||||||
@@ -579,6 +579,11 @@ fi
|
|||||||
# The spec file changelog only includes changes made to the spec file
|
# The spec file changelog only includes changes made to the spec file
|
||||||
# itself
|
# itself
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jun 30 2004 Lenz Grimmer <lenz@mysql.com>
|
||||||
|
|
||||||
|
- fixed server postinstall (mysql_install_db was called with the wrong
|
||||||
|
parameter)
|
||||||
|
|
||||||
* Thu Jun 24 2004 Lenz Grimmer <lenz@mysql.com>
|
* Thu Jun 24 2004 Lenz Grimmer <lenz@mysql.com>
|
||||||
|
|
||||||
- added mysql_tzinfo_to_sql to the server subpackage
|
- added mysql_tzinfo_to_sql to the server subpackage
|
||||||
|
Reference in New Issue
Block a user