mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into rurik.mysql.com:/home/igor/mysql-5.0-opt
This commit is contained in:
@ -1285,3 +1285,4 @@ vio/viotest-sslconnect.cpp
|
||||
vio/viotest.cpp
|
||||
zlib/*.ds?
|
||||
zlib/*.vcproj
|
||||
BitKeeper/etc/RESYNC_TREE
|
||||
|
@ -1110,8 +1110,8 @@ Global
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.Release.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic.ActiveCfg = TLS|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic.Build.0 = TLS|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic nt.ActiveCfg = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic nt.Build.0 = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Debug.ActiveCfg = Debug|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Debug.Build.0 = Debug|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Embedded_Classic.ActiveCfg = TLS|Win32
|
||||
@ -1126,18 +1126,18 @@ Global
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Embedded_Release.Build.0 = TLS|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Max.ActiveCfg = Max|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Max.Build.0 = Max|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Max nt.ActiveCfg = Max|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Max nt.Build.0 = Max|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Max nt.ActiveCfg = Max nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Max nt.Build.0 = Max nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.nt.ActiveCfg = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.nt.Build.0 = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl nt.ActiveCfg = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl nt.Build.0 = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.ActiveCfg = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.Build.0 = nt|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Release.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Release.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.classic.ActiveCfg = classic|Win32
|
||||
@ -1427,6 +1427,7 @@ Global
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.Max.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.Max.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.Max nt.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.Max nt.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.nt.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.nt.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro.ActiveCfg = Release|Win32
|
||||
|
@ -22,7 +22,7 @@
|
||||
Optimization="0"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories="../include,../zlib"
|
||||
PreprocessorDefinitions="_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_SYMDIR"
|
||||
PreprocessorDefinitions="__NT__;_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_SYMDIR"
|
||||
RuntimeLibrary="1"
|
||||
PrecompiledHeaderFile=".\debug/mysys.pch"
|
||||
AssemblerListingLocation=".\debug/"
|
||||
@ -108,6 +108,56 @@
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Max nt|Win32"
|
||||
OutputDirectory=".\max_nt"
|
||||
IntermediateDirectory=".\max_nt"
|
||||
ConfigurationType="4"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories="../include,../zlib"
|
||||
PreprocessorDefinitions="__NT__;USE_SYMDIR;NDEBUG;DBUG_OFF;_WINDOWS"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
PrecompiledHeaderFile=".\max_nt/mysys.pch"
|
||||
AssemblerListingLocation=".\max_nt/"
|
||||
ObjectFile=".\max_nt/"
|
||||
ProgramDataBaseFileName=".\max_nt/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"
|
||||
CompileAs="0"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="..\lib_release\mysys-max-nt.lib"
|
||||
SuppressStartupBanner="TRUE"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\release"
|
||||
@ -158,6 +208,56 @@
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="nt|Win32"
|
||||
OutputDirectory=".\nt"
|
||||
IntermediateDirectory=".\nt"
|
||||
ConfigurationType="4"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories="../include,../zlib"
|
||||
PreprocessorDefinitions="__NT__;DBUG_OFF;_WINDOWS;NDEBUG"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
PrecompiledHeaderFile=".\nt/mysys.pch"
|
||||
AssemblerListingLocation=".\nt/"
|
||||
ObjectFile=".\nt/"
|
||||
ProgramDataBaseFileName=".\nt/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"
|
||||
CompileAs="0"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="..\lib_release\mysys-nt.lib"
|
||||
SuppressStartupBanner="TRUE"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="TLS_DEBUG|Win32"
|
||||
OutputDirectory=".\mysys___Win32_TLS_DEBUG"
|
||||
|
@ -85,7 +85,7 @@
|
||||
InlineFunctionExpansion="1"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories="../bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib"
|
||||
PreprocessorDefinitions="NDEBUG;DBUG_OFF;USE_SYMDIR;HAVE_INNOBASE_DB;HAVE_BERKELEY_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN"
|
||||
PreprocessorDefinitions="__NT__;NDEBUG;DBUG_OFF;USE_SYMDIR;HAVE_INNOBASE_DB;HAVE_BERKELEY_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
|
@ -1503,9 +1503,15 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
||||
field= mysql_fetch_field_direct(result, 0);
|
||||
if (strcmp(field->name, "View") == 0)
|
||||
{
|
||||
char *scv_buff = NULL;
|
||||
|
||||
if (verbose)
|
||||
fprintf(stderr, "-- It's a view, create dummy table for view\n");
|
||||
|
||||
/* save "show create" statement for later */
|
||||
if ((row= mysql_fetch_row(result)) && (scv_buff=row[1]))
|
||||
scv_buff= my_strdup(scv_buff, MYF(0));
|
||||
|
||||
mysql_free_result(result);
|
||||
|
||||
/*
|
||||
@ -1523,9 +1529,22 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
||||
"SHOW FIELDS FROM %s", result_table);
|
||||
if (mysql_query_with_error_report(sock, 0, query_buff))
|
||||
{
|
||||
/*
|
||||
View references invalid or privileged table/col/fun (err 1356),
|
||||
so we cannot create a stand-in table. Be defensive and dump
|
||||
a comment with the view's 'show create' statement. (Bug #17371)
|
||||
*/
|
||||
|
||||
if (mysql_errno(sock) == ER_VIEW_INVALID)
|
||||
fprintf(sql_file, "\n-- failed on view %s: %s\n\n", result_table, scv_buff ? scv_buff : "");
|
||||
|
||||
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
else
|
||||
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||
|
||||
if ((result= mysql_store_result(sock)))
|
||||
{
|
||||
@ -1566,6 +1585,9 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
||||
}
|
||||
mysql_free_result(result);
|
||||
|
||||
if (path)
|
||||
my_fclose(sql_file, MYF(MY_WME));
|
||||
|
||||
seen_views= 1;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
@ -38,3 +38,25 @@ AC_DEFUN([AC_SYS_OS_COMPILER_FLAG],
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_CHECK_NOEXECSTACK],
|
||||
[
|
||||
AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
|
||||
mysql_cv_as_noexecstack, [dnl
|
||||
cat > conftest.c <<EOF
|
||||
void foo (void) { }
|
||||
EOF
|
||||
if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
|
||||
-S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
|
||||
&& grep .note.GNU-stack conftest.s >/dev/null \
|
||||
&& AC_TRY_COMMAND([${CC-cc} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack
|
||||
-c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
|
||||
then
|
||||
mysql_cv_as_noexecstack=yes
|
||||
else
|
||||
mysql_cv_as_noexecstack=no
|
||||
fi
|
||||
rm -f conftest*])
|
||||
if test $mysql_cv_as_noexecstack = yes; then
|
||||
CCASFLAGS="$CCASFLAGS -Wa,--noexecstack"
|
||||
fi
|
||||
])
|
||||
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
||||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also change ndb version below and update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.23)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.24)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
@ -19,7 +19,7 @@ SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0
|
||||
# ndb version
|
||||
NDB_VERSION_MAJOR=5
|
||||
NDB_VERSION_MINOR=0
|
||||
NDB_VERSION_BUILD=23
|
||||
NDB_VERSION_BUILD=24
|
||||
NDB_VERSION_STATUS=""
|
||||
|
||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||
@ -515,6 +515,10 @@ AM_PROG_CC_STDC
|
||||
|
||||
# We need an assembler, too
|
||||
AM_PROG_AS
|
||||
CCASFLAGS="$CCASFLAGS $ASFLAGS"
|
||||
|
||||
# Check if we need noexec stack for assembler
|
||||
AC_CHECK_NOEXECSTACK
|
||||
|
||||
if test "$am_cv_prog_cc_stdc" = "no"
|
||||
then
|
||||
|
@ -31,7 +31,7 @@ noinst_HEADERS = config-win.h config-os2.h config-netware.h \
|
||||
my_aes.h my_tree.h hash.h thr_alarm.h \
|
||||
thr_lock.h t_ctype.h violite.h md5.h base64.h \
|
||||
mysql_version.h.in my_handler.h my_time.h decimal.h \
|
||||
my_user.h
|
||||
my_user.h my_libwrap.h
|
||||
|
||||
# mysql_version.h are generated
|
||||
CLEANFILES = mysql_version.h my_config.h readline openssl
|
||||
|
28
include/my_libwrap.h
Normal file
28
include/my_libwrap.h
Normal file
@ -0,0 +1,28 @@
|
||||
/* Copyright (C) 2000 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#ifdef HAVE_LIBWRAP
|
||||
#include <tcpd.h>
|
||||
#include <syslog.h>
|
||||
#ifdef NEED_SYS_SYSLOG_H
|
||||
#include <sys/syslog.h>
|
||||
#endif /* NEED_SYS_SYSLOG_H */
|
||||
|
||||
extern void my_fromhost(struct request_info *req);
|
||||
extern int my_hosts_access(struct request_info *req);
|
||||
extern char *my_eval_client(struct request_info *req);
|
||||
|
||||
#endif /* HAVE_LIBWRAP */
|
@ -157,7 +157,7 @@ extern gptr my_realloc(gptr oldpoint,uint Size,myf MyFlags);
|
||||
extern void my_no_flags_free(gptr ptr);
|
||||
extern gptr my_memdup(const byte *from,uint length,myf MyFlags);
|
||||
extern char *my_strdup(const char *from,myf MyFlags);
|
||||
extern char *my_strdup_with_length(const byte *from, uint length,
|
||||
extern char *my_strdup_with_length(const char *from, uint length,
|
||||
myf MyFlags);
|
||||
/* we do use FG (as a no-op) in below so that a typo on FG is caught */
|
||||
#define my_free(PTR,FG) ((void)FG,my_no_flags_free(PTR))
|
||||
@ -541,6 +541,7 @@ typedef int (*Process_option_func)(void *ctx, const char *group_name,
|
||||
|
||||
#include <my_alloc.h>
|
||||
|
||||
|
||||
/* Prototypes for mysys and my_func functions */
|
||||
|
||||
extern int my_copy(const char *from,const char *to,myf MyFlags);
|
||||
@ -613,6 +614,13 @@ extern File my_sopen(const char *path, int oflag, int shflag, int pmode);
|
||||
#endif
|
||||
extern int check_if_legal_filename(const char *path);
|
||||
|
||||
#if defined(__WIN__) && defined(__NT__)
|
||||
extern int nt_share_delete(const char *name,myf MyFlags);
|
||||
#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags))
|
||||
#else
|
||||
#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags))
|
||||
#endif
|
||||
|
||||
#ifndef TERMINATE
|
||||
extern void TERMINATE(FILE *file);
|
||||
#endif
|
||||
|
@ -22,6 +22,7 @@ extern const char *not_error_sqlstate;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern CHARSET_INFO *default_client_charset_info;
|
||||
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
||||
my_bool default_value, uint server_capabilities);
|
||||
void free_rows(MYSQL_DATA *cur);
|
||||
|
@ -37,6 +37,8 @@ extern "C"
|
||||
int check_user(THD *thd, enum enum_server_command command,
|
||||
const char *passwd, uint passwd_len, const char *db,
|
||||
bool check_count);
|
||||
void thd_init_client_charset(THD *thd, uint cs_number);
|
||||
|
||||
C_MODE_START
|
||||
|
||||
#include <mysql.h>
|
||||
@ -600,11 +602,14 @@ err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#ifdef NO_EMBEDDED_ACCESS_CHECKS
|
||||
int check_embedded_connection(MYSQL *mysql)
|
||||
{
|
||||
int result;
|
||||
THD *thd= (THD*)mysql->thd;
|
||||
thd_init_client_charset(thd, mysql->charset->number);
|
||||
thd->update_charset();
|
||||
Security_context *sctx= thd->security_ctx;
|
||||
sctx->host_or_ip= sctx->host= (char*) my_localhost;
|
||||
strmake(sctx->priv_host, (char*) my_localhost, MAX_HOSTNAME-1);
|
||||
@ -623,6 +628,8 @@ int check_embedded_connection(MYSQL *mysql)
|
||||
char scramble_buff[SCRAMBLE_LENGTH];
|
||||
int passwd_len;
|
||||
|
||||
thd_init_client_charset(thd, mysql->charset->number);
|
||||
thd->update_charset();
|
||||
if (mysql->options.client_ip)
|
||||
{
|
||||
sctx->host= my_strdup(mysql->options.client_ip, MYF(0));
|
||||
|
@ -90,49 +90,7 @@ static void end_server(MYSQL *mysql)
|
||||
}
|
||||
|
||||
|
||||
static int mysql_init_charset(MYSQL *mysql)
|
||||
{
|
||||
char charset_name_buff[16], *charset_name;
|
||||
|
||||
if ((charset_name=mysql->options.charset_name))
|
||||
{
|
||||
const char *save=charsets_dir;
|
||||
if (mysql->options.charset_dir)
|
||||
charsets_dir=mysql->options.charset_dir;
|
||||
mysql->charset=get_charset_by_name(mysql->options.charset_name,
|
||||
MYF(MY_WME));
|
||||
charsets_dir=save;
|
||||
}
|
||||
else if (mysql->server_language)
|
||||
{
|
||||
charset_name=charset_name_buff;
|
||||
sprintf(charset_name,"%d",mysql->server_language); /* In case of errors */
|
||||
mysql->charset=get_charset((uint8) mysql->server_language, MYF(MY_WME));
|
||||
}
|
||||
else
|
||||
mysql->charset=default_charset_info;
|
||||
|
||||
if (!mysql->charset)
|
||||
{
|
||||
mysql->net.last_errno=CR_CANT_READ_CHARSET;
|
||||
strmov(mysql->net.sqlstate, "HY0000");
|
||||
if (mysql->options.charset_dir)
|
||||
sprintf(mysql->net.last_error,ER(mysql->net.last_errno),
|
||||
charset_name ? charset_name : "unknown",
|
||||
mysql->options.charset_dir);
|
||||
else
|
||||
{
|
||||
char cs_dir_name[FN_REFLEN];
|
||||
get_charsets_dir(cs_dir_name);
|
||||
sprintf(mysql->net.last_error,ER(mysql->net.last_errno),
|
||||
charset_name ? charset_name : "unknown",
|
||||
cs_dir_name);
|
||||
}
|
||||
return mysql->net.last_errno;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mysql_init_character_set(MYSQL *mysql);
|
||||
|
||||
MYSQL * STDCALL
|
||||
mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
||||
@ -222,10 +180,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
||||
|
||||
init_embedded_mysql(mysql, client_flag, db_name);
|
||||
|
||||
if (check_embedded_connection(mysql))
|
||||
if (mysql_init_character_set(mysql))
|
||||
goto error;
|
||||
|
||||
if (mysql_init_charset(mysql))
|
||||
if (check_embedded_connection(mysql))
|
||||
goto error;
|
||||
|
||||
mysql->server_status= SERVER_STATUS_AUTOCOMMIT;
|
||||
|
@ -1033,7 +1033,8 @@ sub executable_setup () {
|
||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
||||
"$glob_basedir/client_debug",
|
||||
"$glob_basedir/bin",);
|
||||
$exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-max",
|
||||
$exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-max-nt",
|
||||
"$path_client_bindir/mysqld-max",
|
||||
"$path_client_bindir/mysqld-nt",
|
||||
"$path_client_bindir/mysqld",
|
||||
"$path_client_bindir/mysqld-debug",
|
||||
|
@ -143,7 +143,7 @@ explain extended select last_insert_id();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache last_insert_id() AS `last_insert_id()`
|
||||
Note 1003 select last_insert_id() AS `last_insert_id()`
|
||||
insert into t1 set i = 254;
|
||||
ERROR 23000: Duplicate entry '254' for key 1
|
||||
select last_insert_id();
|
||||
|
@ -1928,4 +1928,38 @@ create table t1 (a int) engine=bdb;
|
||||
commit;
|
||||
alter table t1 add primary key(a);
|
||||
drop table t1;
|
||||
set autocommit=1;
|
||||
reset master;
|
||||
create table bug16206 (a int);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
show binlog events;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
|
||||
f n Query 1 n use `test`; create table bug16206 (a int)
|
||||
f n Query 1 n use `test`; insert into bug16206 values(1)
|
||||
f n Query 1 n use `test`; insert into bug16206 values(2)
|
||||
drop table bug16206;
|
||||
reset master;
|
||||
create table bug16206 (a int) engine= bdb;
|
||||
insert into bug16206 values(0);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
insert into bug16206 values(3);
|
||||
show binlog events;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
|
||||
f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb
|
||||
f n Query 1 n use `test`; insert into bug16206 values(0)
|
||||
f n Query 1 n use `test`; insert into bug16206 values(1)
|
||||
f n Query 1 n use `test`; BEGIN
|
||||
f n Query 1 n use `test`; insert into bug16206 values(2)
|
||||
f n Query 1 n use `test`; COMMIT
|
||||
f n Query 1 n use `test`; insert into bug16206 values(3)
|
||||
drop table bug16206;
|
||||
set autocommit=0;
|
||||
End of 5.0 tests
|
||||
|
@ -607,7 +607,7 @@ create database mysqltest;
|
||||
use mysqltest;
|
||||
drop database mysqltest;
|
||||
create table test.t1 like x;
|
||||
ERROR 42000: Incorrect database name 'NULL'
|
||||
ERROR 3D000: No database selected
|
||||
drop table if exists test.t1;
|
||||
create database mysqltest;
|
||||
use mysqltest;
|
||||
|
@ -1,3 +1,6 @@
|
||||
show variables like 'collation_server';
|
||||
Variable_name Value
|
||||
collation_server ucs2_unicode_ci
|
||||
show variables like "%character_set_ser%";
|
||||
Variable_name Value
|
||||
character_set_server ucs2
|
||||
|
@ -504,6 +504,57 @@ a 2 b
|
||||
2 2 4
|
||||
3 2 5
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,1), (3,1);
|
||||
EXPLAIN SELECT DISTINCT a FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 3 Using index
|
||||
EXPLAIN SELECT DISTINCT a,b FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||
EXPLAIN SELECT DISTINCT t1_1.a, t1_1.b FROM t1 t1_1, t1 t1_2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1_1 ALL NULL NULL NULL NULL 3 Using temporary
|
||||
1 SIMPLE t1_2 index NULL PRIMARY 4 NULL 3 Using index; Distinct
|
||||
EXPLAIN SELECT DISTINCT t1_1.a, t1_1.b FROM t1 t1_1, t1 t1_2
|
||||
WHERE t1_1.a = t1_2.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1_1 ALL PRIMARY NULL NULL NULL 3 Using temporary
|
||||
1 SIMPLE t1_2 eq_ref PRIMARY PRIMARY 4 test.t1_1.a 1 Using index; Distinct
|
||||
EXPLAIN SELECT a FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 3 Using index
|
||||
EXPLAIN SELECT a,b FROM t1 GROUP BY a,b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||
EXPLAIN SELECT DISTINCT a,b FROM t1 GROUP BY a,b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||
CREATE TABLE t2(a INT, b INT, c INT, d INT, PRIMARY KEY (a,b));
|
||||
INSERT INTO t2 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
|
||||
EXPLAIN SELECT DISTINCT a FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index
|
||||
EXPLAIN SELECT DISTINCT a,a FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index
|
||||
EXPLAIN SELECT DISTINCT b,a FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index
|
||||
EXPLAIN SELECT DISTINCT a,c FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using temporary
|
||||
EXPLAIN SELECT DISTINCT c,a,b FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
|
||||
EXPLAIN SELECT DISTINCT a,b,d FROM t2 GROUP BY c,b,d;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using temporary; Using filesort
|
||||
CREATE UNIQUE INDEX c_b_unq ON t2 (c,b);
|
||||
EXPLAIN SELECT DISTINCT a,b,d FROM t2 GROUP BY c,b,d;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
|
||||
DROP TABLE t1,t2;
|
||||
create table t1 (id int, dsc varchar(50));
|
||||
insert into t1 values (1, "line number one"), (2, "line number two"), (3, "line number three");
|
||||
select distinct id, IFNULL(dsc, '-') from t1;
|
||||
|
@ -1558,6 +1558,8 @@ id
|
||||
3
|
||||
4
|
||||
5
|
||||
DROP TABLE federated.t1;
|
||||
DROP TABLE federated.t1;
|
||||
DROP TABLE IF EXISTS federated.bug_17377_table;
|
||||
CREATE TABLE federated.bug_17377_table (
|
||||
`fld_cid` bigint(20) NOT NULL auto_increment,
|
||||
@ -1601,6 +1603,92 @@ fld_cid fld_name fld_parentid fld_delt
|
||||
5 Torkel 0 0
|
||||
DROP TABLE federated.t1;
|
||||
DROP TABLE federated.bug_17377_table;
|
||||
create table federated.t1 (i1 int, i2 int, i3 int);
|
||||
create table federated.t2 (id int, c1 varchar(20), c2 varchar(20));
|
||||
create table federated.t1 (i1 int, i2 int, i3 int) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1';
|
||||
create table federated.t2 (id int, c1 varchar(20), c2 varchar(20)) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t2';
|
||||
insert into federated.t1 values (1,5,10),(3,7,12),(4,5,2),(9,10,15),(2,2,2);
|
||||
insert into federated.t2 values (9,"abc","def"),(5,"opq","lmn"),(2,"test t","t test");
|
||||
select * from federated.t1 order by i1;
|
||||
i1 i2 i3
|
||||
1 5 10
|
||||
2 2 2
|
||||
3 7 12
|
||||
4 5 2
|
||||
9 10 15
|
||||
select * from federated.t2;
|
||||
id c1 c2
|
||||
9 abc def
|
||||
5 opq lmn
|
||||
2 test t t test
|
||||
update federated.t1,federated.t2 set t1.i2=15, t2.c2="ppc" where t1.i1=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
i1 i2 i3
|
||||
1 5 10
|
||||
2 15 2
|
||||
3 7 12
|
||||
4 5 2
|
||||
9 15 15
|
||||
select * from federated.t2 order by id;
|
||||
id c1 c2
|
||||
2 test t ppc
|
||||
5 opq lmn
|
||||
9 abc ppc
|
||||
delete federated.t1.*,federated.t2.* from federated.t1,federated.t2 where t1.i2=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
i1 i2 i3
|
||||
2 15 2
|
||||
3 7 12
|
||||
9 15 15
|
||||
select * from federated.t2 order by id;
|
||||
id c1 c2
|
||||
2 test t ppc
|
||||
9 abc ppc
|
||||
drop table federated.t1, federated.t2;
|
||||
drop table federated.t1, federated.t2;
|
||||
create table federated.t1 (i1 int, i2 int, i3 int, primary key (i1));
|
||||
create table federated.t2 (id int, c1 varchar(20), c2 varchar(20), primary key (id));
|
||||
create table federated.t1 (i1 int auto_increment not null, i2 int, i3 int, primary key (i1)) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1';
|
||||
create table federated.t2 (id int auto_increment not null, c1 varchar(20), c2 varchar(20), primary key(id)) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t2';
|
||||
insert into federated.t1 values (1,5,10),(3,7,12),(4,5,2),(9,10,15),(2,2,2);
|
||||
insert into federated.t2 values (9,"abc","def"),(5,"opq","lmn"),(2,"test t","t test");
|
||||
select * from federated.t1 order by i1;
|
||||
i1 i2 i3
|
||||
1 5 10
|
||||
2 2 2
|
||||
3 7 12
|
||||
4 5 2
|
||||
9 10 15
|
||||
select * from federated.t2 order by id;
|
||||
id c1 c2
|
||||
2 test t t test
|
||||
5 opq lmn
|
||||
9 abc def
|
||||
update federated.t1,federated.t2 set t1.i2=15, t2.c2="ppc" where t1.i1=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
i1 i2 i3
|
||||
1 5 10
|
||||
2 15 2
|
||||
3 7 12
|
||||
4 5 2
|
||||
9 15 15
|
||||
select * from federated.t2 order by id;
|
||||
id c1 c2
|
||||
2 test t ppc
|
||||
5 opq lmn
|
||||
9 abc ppc
|
||||
delete federated.t1.*,federated.t2.* from federated.t1,federated.t2 where t1.i2=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
i1 i2 i3
|
||||
2 15 2
|
||||
3 7 12
|
||||
9 15 15
|
||||
select * from federated.t2 order by id;
|
||||
id c1 c2
|
||||
2 test t ppc
|
||||
9 abc ppc
|
||||
drop table federated.t1, federated.t2;
|
||||
drop table federated.t1, federated.t2;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
|
@ -11,7 +11,7 @@ explain extended select uncompress(compress(@test_compress_string));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache uncompress(compress((@test_compress_string))) AS `uncompress(compress(@test_compress_string))`
|
||||
Note 1003 select uncompress(compress((@test_compress_string))) AS `uncompress(compress(@test_compress_string))`
|
||||
select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
|
||||
uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)
|
||||
1
|
||||
@ -19,7 +19,7 @@ explain extended select uncompressed_length(compress(@test_compress_string))=len
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache (uncompressed_length(compress((@test_compress_string))) = length((@test_compress_string))) AS `uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)`
|
||||
Note 1003 select (uncompressed_length(compress((@test_compress_string))) = length((@test_compress_string))) AS `uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)`
|
||||
select uncompressed_length(compress(@test_compress_string));
|
||||
uncompressed_length(compress(@test_compress_string))
|
||||
117
|
||||
|
@ -90,7 +90,7 @@ explain extended select rand(999999),rand();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache rand(999999) AS `rand(999999)`,rand() AS `rand()`
|
||||
Note 1003 select rand(999999) AS `rand(999999)`,rand() AS `rand()`
|
||||
select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6),format(cot(1),6),format(asin(1),6),format(acos(0),6),format(atan(1),6);
|
||||
pi() format(sin(pi()/2),6) format(cos(pi()/2),6) format(abs(tan(pi())),6) format(cot(1),6) format(asin(1),6) format(acos(0),6) format(atan(1),6)
|
||||
3.141593 1.000000 0.000000 0.000000 0.642093 1.570796 1.570796 0.785398
|
||||
|
@ -81,6 +81,12 @@ makedate(1997,1)
|
||||
select makedate(1997,0);
|
||||
makedate(1997,0)
|
||||
NULL
|
||||
select makedate(9999,365);
|
||||
makedate(9999,365)
|
||||
9999-12-31
|
||||
select makedate(9999,366);
|
||||
makedate(9999,366)
|
||||
NULL
|
||||
select addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002");
|
||||
addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002")
|
||||
1998-01-02 01:01:01.000001
|
||||
|
@ -41,7 +41,7 @@ explain extended select database(), user();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache database() AS `database()`,user() AS `user()`
|
||||
Note 1003 select database() AS `database()`,user() AS `user()`
|
||||
create table t1 (version char(40)) select database(), user(), version() as 'version';
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
|
@ -1,4 +1,5 @@
|
||||
drop table if exists t1,t2,t3;
|
||||
set time_zone="+03:00";
|
||||
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
|
||||
from_days(to_days("960101")) to_days(960201)-to_days("19960101") to_days(date_add(curdate(), interval 1 day))-to_days(curdate()) weekday("1997-11-29")
|
||||
1996-01-01 31 1 5
|
||||
@ -360,6 +361,12 @@ extract(SECOND FROM "1999-01-02 10:11:12")
|
||||
select extract(MONTH FROM "2001-02-00");
|
||||
extract(MONTH FROM "2001-02-00")
|
||||
2
|
||||
SELECT DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
|
||||
DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE)
|
||||
9999-12-31 00:00:00
|
||||
SELECT DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
|
||||
DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE)
|
||||
9999-12-31 00:00:00
|
||||
SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter;
|
||||
quarter
|
||||
1
|
||||
@ -722,7 +729,7 @@ explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_d
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache period_add(_latin1'9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,_latin1'9404') AS `period_diff(199505,"9404")`,from_days(to_days(_latin1'960101')) AS `from_days(to_days("960101"))`,dayofmonth(_latin1'1997-01-02') AS `dayofmonth("1997-01-02")`,month(_latin1'1997-01-02') AS `month("1997-01-02")`,monthname(_latin1'1972-03-04') AS `monthname("1972-03-04")`,dayofyear(_latin1'0000-00-00') AS `dayofyear("0000-00-00")`,hour(_latin1'1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute(_latin1'23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week(_latin1'1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek(_latin1'2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year(_latin1'98-02-03') AS `year("98-02-03")`,(weekday(curdate()) - weekday(now())) AS `weekday(curdate())-weekday(now())`,dayname(_latin1'1962-03-03') AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec(_latin1'0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format(_latin1'1997-01-02 03:04:05',_latin1'%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp(_latin1'1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,(_latin1'1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,(_latin1'1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from _latin1'1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
|
||||
Note 1003 select period_add(_latin1'9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,_latin1'9404') AS `period_diff(199505,"9404")`,from_days(to_days(_latin1'960101')) AS `from_days(to_days("960101"))`,dayofmonth(_latin1'1997-01-02') AS `dayofmonth("1997-01-02")`,month(_latin1'1997-01-02') AS `month("1997-01-02")`,monthname(_latin1'1972-03-04') AS `monthname("1972-03-04")`,dayofyear(_latin1'0000-00-00') AS `dayofyear("0000-00-00")`,hour(_latin1'1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute(_latin1'23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week(_latin1'1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek(_latin1'2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year(_latin1'98-02-03') AS `year("98-02-03")`,(weekday(curdate()) - weekday(now())) AS `weekday(curdate())-weekday(now())`,dayname(_latin1'1962-03-03') AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec(_latin1'0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format(_latin1'1997-01-02 03:04:05',_latin1'%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp(_latin1'1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,(_latin1'1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,(_latin1'1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from _latin1'1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
|
||||
SET @TMP=NOW();
|
||||
CREATE TABLE t1 (d DATETIME);
|
||||
INSERT INTO t1 VALUES (NOW());
|
||||
@ -945,3 +952,4 @@ id day id day
|
||||
1 2005-06-01 3 2005-07-15
|
||||
3 2005-07-01 3 2005-07-15
|
||||
DROP TABLE t1,t2;
|
||||
set time_zone= @@global.time_zone;
|
||||
|
@ -1,4 +1,5 @@
|
||||
drop table if exists t1;
|
||||
set time_zone="+03:00";
|
||||
create table t1 (Zeit time, Tag tinyint not null, Monat tinyint not null,
|
||||
Jahr smallint not null, index(Tag), index(Monat), index(Jahr) );
|
||||
insert into t1 values ("09:26:00",16,9,1998),("09:26:00",16,9,1998);
|
||||
@ -9,3 +10,4 @@ Date Unix
|
||||
1998-9-16 09:26:00 905927160
|
||||
1998-9-16 09:26:00 905927160
|
||||
drop table t1;
|
||||
set time_zone= @@global.time_zone;
|
||||
|
@ -694,3 +694,13 @@ alter table t1 add primary key pti(pt);
|
||||
ERROR 42000: BLOB/TEXT column 'pt' used in key specification without a key length
|
||||
alter table t1 add primary key pti(pt(20));
|
||||
drop table t1;
|
||||
create table t1 (g GEOMETRY);
|
||||
select * from t1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 t1 g g 255 4294967295 0 Y 144 0 63
|
||||
g
|
||||
select asbinary(g) from t1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def asbinary(g) 252 8192 0 Y 128 0 63
|
||||
asbinary(g)
|
||||
drop table t1;
|
||||
|
@ -369,11 +369,11 @@ show keys from v4;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
select * from information_schema.views where TABLE_NAME like "v%";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||
NULL test v0 select sql_no_cache `schemata`.`SCHEMA_NAME` AS `c` from `information_schema`.`schemata` NONE NO root@localhost DEFINER
|
||||
NULL test v1 select sql_no_cache `tables`.`TABLE_NAME` AS `c` from `information_schema`.`tables` where (`tables`.`TABLE_NAME` = _utf8'v1') NONE NO root@localhost DEFINER
|
||||
NULL test v2 select sql_no_cache `columns`.`COLUMN_NAME` AS `c` from `information_schema`.`columns` where (`columns`.`TABLE_NAME` = _utf8'v2') NONE NO root@localhost DEFINER
|
||||
NULL test v3 select sql_no_cache `character_sets`.`CHARACTER_SET_NAME` AS `c` from `information_schema`.`character_sets` where (`character_sets`.`CHARACTER_SET_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
||||
NULL test v4 select sql_no_cache `collations`.`COLLATION_NAME` AS `c` from `information_schema`.`collations` where (`collations`.`COLLATION_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
||||
NULL test v0 /* ALGORITHM=UNDEFINED */ select `schemata`.`SCHEMA_NAME` AS `c` from `information_schema`.`schemata` NONE NO root@localhost DEFINER
|
||||
NULL test v1 /* ALGORITHM=UNDEFINED */ select `tables`.`TABLE_NAME` AS `c` from `information_schema`.`tables` where (`tables`.`TABLE_NAME` = _utf8'v1') NONE NO root@localhost DEFINER
|
||||
NULL test v2 /* ALGORITHM=UNDEFINED */ select `columns`.`COLUMN_NAME` AS `c` from `information_schema`.`columns` where (`columns`.`TABLE_NAME` = _utf8'v2') NONE NO root@localhost DEFINER
|
||||
NULL test v3 /* ALGORITHM=UNDEFINED */ select `character_sets`.`CHARACTER_SET_NAME` AS `c` from `information_schema`.`character_sets` where (`character_sets`.`CHARACTER_SET_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
||||
NULL test v4 /* ALGORITHM=UNDEFINED */ select `collations`.`COLLATION_NAME` AS `c` from `information_schema`.`collations` where (`collations`.`COLLATION_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
||||
drop view v0, v1, v2, v3, v4;
|
||||
create table t1 (a int);
|
||||
grant select,update,insert on t1 to mysqltest_1@localhost;
|
||||
@ -464,9 +464,9 @@ create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
||||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||||
select * from information_schema.views;
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||
NULL test v1 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
||||
NULL test v2 select `test`.`t1`.`a` AS `c` from `test`.`t1` LOCAL YES root@localhost DEFINER
|
||||
NULL test v3 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
||||
NULL test v1 /* ALGORITHM=UNDEFINED */ select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
||||
NULL test v2 /* ALGORITHM=UNDEFINED */ select `test`.`t1`.`a` AS `c` from `test`.`t1` LOCAL YES root@localhost DEFINER
|
||||
NULL test v3 /* ALGORITHM=UNDEFINED */ select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
||||
grant select (a) on test.t1 to joe@localhost with grant option;
|
||||
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
@ -687,7 +687,7 @@ Warnings:
|
||||
Warning 1356 View 'test.v2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||
show create table v3;
|
||||
View Create View
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select sql_no_cache `test`.`sub1`(1) AS `c`
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `test`.`sub1`(1) AS `c`
|
||||
Warnings:
|
||||
Warning 1356 View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||
drop view v2;
|
||||
@ -1121,7 +1121,7 @@ select * from information_schema.views
|
||||
where table_name='v1' or table_name='v2';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||
NULL test v1 NONE YES root@localhost DEFINER
|
||||
NULL test v2 select 1 AS `1` NONE NO mysqltest_1@localhost DEFINER
|
||||
NULL test v2 /* ALGORITHM=UNDEFINED */ select 1 AS `1` NONE NO mysqltest_1@localhost DEFINER
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
drop user mysqltest_1@localhost;
|
||||
|
@ -330,6 +330,16 @@ alter table t1 add key (c1,c1,c2);
|
||||
ERROR 42S21: Duplicate column name 'c1'
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
i1 INT NOT NULL,
|
||||
i2 INT NOT NULL,
|
||||
UNIQUE i1idx (i1),
|
||||
UNIQUE i2idx (i2));
|
||||
desc t1;
|
||||
Field Type Null Key Default Extra
|
||||
i1 int(11) NO UNI
|
||||
i2 int(11) NO UNI
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
c1 int,
|
||||
c2 varchar(20) not null,
|
||||
primary key (c1),
|
||||
|
@ -67,6 +67,21 @@ Select_priv
|
||||
N
|
||||
use test;
|
||||
use test;
|
||||
CREATE TABLE t1 (c1 int);
|
||||
LOCK TABLE t1 WRITE;
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
CREATE TABLE t2 (c1 int);
|
||||
UNLOCK TABLES;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (c1 int);
|
||||
LOCK TABLE t1 WRITE;
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
ERROR HY000: Table 't2' was not locked with LOCK TABLES
|
||||
UNLOCK TABLES;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
||||
create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) engine=innodb;
|
||||
lock tables t1 write;
|
||||
alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
|
||||
|
@ -2743,6 +2743,25 @@ end AFTER # root@localhost
|
||||
drop trigger tr1;
|
||||
drop trigger tr2;
|
||||
drop table t1, t2;
|
||||
create table t (qty int, price int);
|
||||
insert into t values(3, 50);
|
||||
insert into t values(5, 51);
|
||||
create view v1 as select qty, price, qty*price as value from t;
|
||||
create view v2 as select qty from v1;
|
||||
mysqldump {
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v1` AS select `t`.`qty` AS `qty`,`t`.`price` AS `price`,(`t`.`qty` * `t`.`price`) AS `value` from `t` */;
|
||||
|
||||
} mysqldump {
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `v1`.`qty` AS `qty` from `v1` */;
|
||||
|
||||
} mysqldump
|
||||
drop view v1;
|
||||
drop view v2;
|
||||
drop table t;
|
||||
/*!50003 CREATE FUNCTION `f`() RETURNS bigint(20)
|
||||
return 42 */|
|
||||
/*!50003 CREATE PROCEDURE `p`()
|
||||
@ -2757,6 +2776,15 @@ p CREATE DEFINER=`root`@`localhost` PROCEDURE `p`()
|
||||
select 42
|
||||
drop function f;
|
||||
drop procedure p;
|
||||
create table t1 ( id serial );
|
||||
create view v1 as select * from t1;
|
||||
drop table t1;
|
||||
mysqldump {
|
||||
|
||||
-- failed on view `v1`: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`id` AS `id` from `t1`
|
||||
|
||||
} mysqldump
|
||||
drop view v1;
|
||||
create database mysqldump_test_db;
|
||||
use mysqldump_test_db;
|
||||
create table t1 (id int);
|
||||
|
@ -1158,3 +1158,108 @@ Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
deallocate prepare stmt;
|
||||
drop table t1, t2, t3;
|
||||
create database mysqltest_long_database_name_to_thrash_heap;
|
||||
use test;
|
||||
create table t1 (i int);
|
||||
prepare stmt from "alter table test.t1 rename t1";
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
execute stmt;
|
||||
show tables like 't1';
|
||||
Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)
|
||||
prepare stmt from "alter table test.t1 rename t1";
|
||||
use test;
|
||||
execute stmt;
|
||||
show tables like 't1';
|
||||
Tables_in_test (t1)
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
show tables like 't1';
|
||||
Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)
|
||||
t1
|
||||
deallocate prepare stmt;
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
prepare stmt_create from "create table t1 (i int)";
|
||||
prepare stmt_insert from "insert into t1 (i) values (1)";
|
||||
prepare stmt_update from "update t1 set i=2";
|
||||
prepare stmt_delete from "delete from t1 where i=2";
|
||||
prepare stmt_select from "select * from t1";
|
||||
prepare stmt_alter from "alter table t1 add column (b int)";
|
||||
prepare stmt_alter1 from "alter table t1 drop column b";
|
||||
prepare stmt_analyze from "analyze table t1";
|
||||
prepare stmt_optimize from "optimize table t1";
|
||||
prepare stmt_show from "show tables like 't1'";
|
||||
prepare stmt_truncate from "truncate table t1";
|
||||
prepare stmt_drop from "drop table t1";
|
||||
drop table t1;
|
||||
use test;
|
||||
execute stmt_create;
|
||||
show tables like 't1';
|
||||
Tables_in_test (t1)
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
show tables like 't1';
|
||||
Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)
|
||||
t1
|
||||
use test;
|
||||
execute stmt_insert;
|
||||
select * from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
i
|
||||
1
|
||||
execute stmt_update;
|
||||
select * from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
i
|
||||
2
|
||||
execute stmt_delete;
|
||||
execute stmt_select;
|
||||
i
|
||||
execute stmt_alter;
|
||||
show columns from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
Field Type Null Key Default Extra
|
||||
i int(11) YES NULL
|
||||
b int(11) YES NULL
|
||||
execute stmt_alter1;
|
||||
show columns from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
Field Type Null Key Default Extra
|
||||
i int(11) YES NULL
|
||||
execute stmt_analyze;
|
||||
Table Op Msg_type Msg_text
|
||||
mysqltest_long_database_name_to_thrash_heap.t1 analyze status Table is already up to date
|
||||
execute stmt_optimize;
|
||||
Table Op Msg_type Msg_text
|
||||
mysqltest_long_database_name_to_thrash_heap.t1 optimize status Table is already up to date
|
||||
execute stmt_show;
|
||||
Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)
|
||||
t1
|
||||
execute stmt_truncate;
|
||||
execute stmt_drop;
|
||||
show tables like 't1';
|
||||
Tables_in_test (t1)
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
show tables like 't1';
|
||||
Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)
|
||||
drop database mysqltest_long_database_name_to_thrash_heap;
|
||||
prepare stmt_create from "create table t1 (i int)";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_insert from "insert into t1 (i) values (1)";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_update from "update t1 set i=2";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_delete from "delete from t1 where i=2";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_select from "select * from t1";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_alter from "alter table t1 add column (b int)";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_alter1 from "alter table t1 drop column b";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_analyze from "analyze table t1";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_optimize from "optimize table t1";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_show from "show tables like 't1'";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_truncate from "truncate table t1";
|
||||
ERROR 3D000: No database selected
|
||||
prepare stmt_drop from "drop table t1";
|
||||
ERROR 3D000: No database selected
|
||||
create temporary table t1 (i int);
|
||||
ERROR 3D000: No database selected
|
||||
use test;
|
||||
|
@ -231,7 +231,7 @@ explain extended select benchmark(1,1) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache benchmark(1,1) AS `benchmark(1,1)` from `test`.`t1`
|
||||
Note 1003 select benchmark(1,1) AS `benchmark(1,1)` from `test`.`t1`
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
|
@ -25,7 +25,7 @@ explain extended select is_free_lock("lock"), is_used_lock("lock");
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache is_free_lock(_latin1'lock') AS `is_free_lock("lock")`,is_used_lock(_latin1'lock') AS `is_used_lock("lock")`
|
||||
Note 1003 select is_free_lock(_latin1'lock') AS `is_free_lock("lock")`,is_used_lock(_latin1'lock') AS `is_used_lock("lock")`
|
||||
select is_free_lock("lock2");
|
||||
is_free_lock("lock2")
|
||||
1
|
||||
|
@ -11,7 +11,7 @@ explain extended select master_pos_wait('master-bin.999999',0,2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache master_pos_wait(_latin1'master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
|
||||
Note 1003 select master_pos_wait(_latin1'master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
|
||||
select master_pos_wait('master-bin.999999',0);
|
||||
stop slave sql_thread;
|
||||
master_pos_wait('master-bin.999999',0)
|
||||
|
@ -565,3 +565,63 @@ DROP TABLE tyt2;
|
||||
DROP TABLE urkunde;
|
||||
SHOW TABLES FROM non_existing_database;
|
||||
ERROR 42000: Unknown database 'non_existing_database'
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
CREATE VIEW v1 AS SELECT 1;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE 1;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_cache 1 AS `1`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE 1;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache 1 AS `1`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select now() AS `NOW()`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_cache now() AS `NOW()`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()`
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()`
|
||||
DROP VIEW v1;
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
SET @s= 'CREATE VIEW v1 AS SELECT SQL_CACHE 1';
|
||||
PREPARE stmt FROM @s;
|
||||
EXECUTE stmt;
|
||||
DROP PREPARE stmt;
|
||||
END |
|
||||
CALL p1();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_cache 1 AS `1`
|
||||
DROP PROCEDURE p1;
|
||||
DROP VIEW v1;
|
||||
|
@ -237,3 +237,21 @@ deallocate prepare stmt;
|
||||
drop table t1;
|
||||
drop view v1, v2, v3;
|
||||
drop function bug15683;
|
||||
drop table if exists t1, t2, t3;
|
||||
drop function if exists bug19634;
|
||||
create table t1 (id int, data int);
|
||||
create table t2 (id int);
|
||||
create table t3 (data int);
|
||||
create function bug19634() returns int return (select count(*) from t3);
|
||||
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data);
|
||||
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
drop function bug19634;
|
||||
drop table t1, t2, t3;
|
||||
End of 5.0 tests
|
||||
|
@ -420,3 +420,34 @@ ERROR HY000: There is no 'mysqltest_1'@'localhost' registered
|
||||
---> connection: root
|
||||
DROP USER mysqltest_2@localhost;
|
||||
DROP DATABASE mysqltest;
|
||||
GRANT USAGE ON *.* TO user19857@localhost IDENTIFIED BY 'meow';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ROUTINE, ALTER ROUTINE ON test.* TO
|
||||
user19857@localhost;
|
||||
SELECT Host,User,Password FROM mysql.user WHERE User='user19857';
|
||||
Host User Password
|
||||
localhost user19857 *82DC221D557298F6CE9961037DB1C90604792F5C
|
||||
|
||||
---> connection: mysqltest_2_con
|
||||
use test;
|
||||
CREATE PROCEDURE sp19857() DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE a INT;
|
||||
SET a=1;
|
||||
SELECT a;
|
||||
END //
|
||||
SHOW CREATE PROCEDURE test.sp19857;
|
||||
Procedure sql_mode Create Procedure
|
||||
sp19857 CREATE DEFINER=`user19857`@`localhost` PROCEDURE `sp19857`()
|
||||
DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE a INT;
|
||||
SET a=1;
|
||||
SELECT a;
|
||||
END
|
||||
DROP PROCEDURE IF EXISTS test.sp19857;
|
||||
|
||||
---> connection: root
|
||||
SELECT Host,User,Password FROM mysql.user WHERE User='user19857';
|
||||
Host User Password
|
||||
localhost user19857 *82DC221D557298F6CE9961037DB1C90604792F5C
|
||||
DROP USER user19857@localhost;
|
||||
|
@ -4990,4 +4990,71 @@ CALL bug18037_p2()|
|
||||
DROP FUNCTION bug18037_f1|
|
||||
DROP PROCEDURE bug18037_p1|
|
||||
DROP PROCEDURE bug18037_p2|
|
||||
use test|
|
||||
create table t3 (i int)|
|
||||
insert into t3 values (1), (2)|
|
||||
create database mysqltest1|
|
||||
use mysqltest1|
|
||||
create function bug17199() returns varchar(2) deterministic return 'ok'|
|
||||
use test|
|
||||
select *, mysqltest1.bug17199() from t3|
|
||||
i mysqltest1.bug17199()
|
||||
1 ok
|
||||
2 ok
|
||||
use mysqltest1|
|
||||
create function bug18444(i int) returns int no sql deterministic return i + 1|
|
||||
use test|
|
||||
select mysqltest1.bug18444(i) from t3|
|
||||
mysqltest1.bug18444(i)
|
||||
2
|
||||
3
|
||||
drop database mysqltest1|
|
||||
create database mysqltest1 charset=utf8|
|
||||
create database mysqltest2 charset=utf8|
|
||||
create procedure mysqltest1.p1()
|
||||
begin
|
||||
-- alters the default collation of database test
|
||||
alter database character set koi8r;
|
||||
end|
|
||||
use mysqltest1|
|
||||
call p1()|
|
||||
show create database mysqltest1|
|
||||
Database Create Database
|
||||
mysqltest1 CREATE DATABASE `mysqltest1` /*!40100 DEFAULT CHARACTER SET koi8r */
|
||||
show create database mysqltest2|
|
||||
Database Create Database
|
||||
mysqltest2 CREATE DATABASE `mysqltest2` /*!40100 DEFAULT CHARACTER SET utf8 */
|
||||
alter database mysqltest1 character set utf8|
|
||||
use mysqltest2|
|
||||
call mysqltest1.p1()|
|
||||
show create database mysqltest1|
|
||||
Database Create Database
|
||||
mysqltest1 CREATE DATABASE `mysqltest1` /*!40100 DEFAULT CHARACTER SET koi8r */
|
||||
show create database mysqltest2|
|
||||
Database Create Database
|
||||
mysqltest2 CREATE DATABASE `mysqltest2` /*!40100 DEFAULT CHARACTER SET utf8 */
|
||||
drop database mysqltest1|
|
||||
drop database mysqltest2|
|
||||
use test|
|
||||
drop table if exists t3|
|
||||
drop procedure if exists bug15217|
|
||||
create table t3 as select 1|
|
||||
create procedure bug15217()
|
||||
begin
|
||||
declare var1 char(255);
|
||||
declare cur1 cursor for select * from t3;
|
||||
open cur1;
|
||||
fetch cur1 into var1;
|
||||
select concat('data was: /', var1, '/');
|
||||
close cur1;
|
||||
end |
|
||||
call bug15217()|
|
||||
concat('data was: /', var1, '/')
|
||||
data was: /1/
|
||||
flush tables |
|
||||
call bug15217()|
|
||||
concat('data was: /', var1, '/')
|
||||
data was: /1/
|
||||
drop table t3|
|
||||
drop procedure bug15217|
|
||||
drop table t1,t2;
|
||||
|
@ -1019,19 +1019,19 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache (select sql_no_cache rand() AS `RAND()` from `test`.`t1`) AS `(SELECT RAND() FROM t1)` from `test`.`t1`
|
||||
Note 1003 select (select rand() AS `RAND()` from `test`.`t1`) AS `(SELECT RAND() FROM t1)` from `test`.`t1`
|
||||
EXPLAIN EXTENDED SELECT (SELECT ENCRYPT('test') FROM t1) FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache (select sql_no_cache encrypt(_latin1'test') AS `ENCRYPT('test')` from `test`.`t1`) AS `(SELECT ENCRYPT('test') FROM t1)` from `test`.`t1`
|
||||
Note 1003 select (select encrypt(_latin1'test') AS `ENCRYPT('test')` from `test`.`t1`) AS `(SELECT ENCRYPT('test') FROM t1)` from `test`.`t1`
|
||||
EXPLAIN EXTENDED SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache (select sql_no_cache benchmark(1,1) AS `BENCHMARK(1,1)` from `test`.`t1`) AS `(SELECT BENCHMARK(1,1) FROM t1)` from `test`.`t1`
|
||||
Note 1003 select (select benchmark(1,1) AS `BENCHMARK(1,1)` from `test`.`t1`) AS `(SELECT BENCHMARK(1,1) FROM t1)` from `test`.`t1`
|
||||
drop table t1;
|
||||
CREATE TABLE `t1` (
|
||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||
@ -1126,7 +1126,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
2 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||
3 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache `test`.`t1`.`a` AS `a`,(select sql_no_cache (select sql_no_cache rand() AS `rand()` from `test`.`t1` limit 1) AS `(select rand() from t1 limit 1)` from `test`.`t1` limit 1) AS `(select (select rand() from t1 limit 1) from t1 limit 1)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,(select (select rand() AS `rand()` from `test`.`t1` limit 1) AS `(select rand() from t1 limit 1)` from `test`.`t1` limit 1) AS `(select (select rand() from t1 limit 1) from t1 limit 1)` from `test`.`t1`
|
||||
drop table t1;
|
||||
select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent);
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
|
@ -74,18 +74,24 @@ t9 CREATE TABLE `t9` (
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/'
|
||||
drop database mysqltest;
|
||||
create table t1 (a int not null) engine=myisam;
|
||||
Warnings:
|
||||
Warning 0 DATA DIRECTORY option ignored
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
alter table t1 add b int;
|
||||
Warnings:
|
||||
Warning 0 DATA DIRECTORY option ignored
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
Warnings:
|
||||
Warning 0 INDEX DIRECTORY option ignored
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
|
@ -295,7 +295,7 @@ create trigger trg before insert on t1 for each row set @a:=1;
|
||||
create trigger trg after insert on t1 for each row set @a:=1;
|
||||
ERROR HY000: Trigger already exists
|
||||
create trigger trg2 before insert on t1 for each row set @a:=1;
|
||||
ERROR HY000: Trigger already exists
|
||||
ERROR 42000: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
|
||||
create trigger trg before insert on t3 for each row set @a:=1;
|
||||
ERROR HY000: Trigger already exists
|
||||
create trigger trg2 before insert on t3 for each row set @a:=1;
|
||||
@ -1078,3 +1078,15 @@ i1
|
||||
43
|
||||
51
|
||||
DROP TABLE t1;
|
||||
create trigger wont_work after update on mysql.user for each row
|
||||
begin
|
||||
set @a:= 1;
|
||||
end|
|
||||
ERROR HY000: Triggers can not be created on system tables
|
||||
use mysql|
|
||||
create trigger wont_work after update on event for each row
|
||||
begin
|
||||
set @a:= 1;
|
||||
end|
|
||||
ERROR HY000: Triggers can not be created on system tables
|
||||
End of 5.0 tests
|
||||
|
@ -517,7 +517,7 @@ coercibility(load_file('../../std_data/words.dat'));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache charset(load_file(_latin1'../../std_data/words.dat')) AS `charset(load_file('../../std_data/words.dat'))`,collation(load_file(_latin1'../../std_data/words.dat')) AS `collation(load_file('../../std_data/words.dat'))`,coercibility(load_file(_latin1'../../std_data/words.dat')) AS `coercibility(load_file('../../std_data/words.dat'))`
|
||||
Note 1003 select charset(load_file(_latin1'../../std_data/words.dat')) AS `charset(load_file('../../std_data/words.dat'))`,collation(load_file(_latin1'../../std_data/words.dat')) AS `collation(load_file('../../std_data/words.dat'))`,coercibility(load_file(_latin1'../../std_data/words.dat')) AS `coercibility(load_file('../../std_data/words.dat'))`
|
||||
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
|
||||
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
|
||||
if(imagem is null, "ERROR", "OK") length(imagem)
|
||||
|
@ -1,4 +1,5 @@
|
||||
drop table if exists t1,t2;
|
||||
set time_zone="+03:00";
|
||||
CREATE TABLE t1 (a int, t timestamp);
|
||||
CREATE TABLE t2 (a int, t datetime);
|
||||
SET TIMESTAMP=1234;
|
||||
@ -491,3 +492,4 @@ a b c
|
||||
5 NULL 2001-09-09 04:46:59
|
||||
6 NULL 2006-06-06 06:06:06
|
||||
drop table t1;
|
||||
set time_zone= @@global.time_zone;
|
||||
|
@ -76,6 +76,24 @@ call XXX2();
|
||||
metaphon(testval)
|
||||
HL
|
||||
drop procedure xxx2;
|
||||
CREATE TABLE bug19904(n INT, v varchar(10));
|
||||
INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
|
||||
SELECT myfunc_double(n) AS f FROM bug19904;
|
||||
f
|
||||
49.00
|
||||
50.00
|
||||
NULL
|
||||
51.00
|
||||
52.00
|
||||
SELECT metaphon(v) AS f FROM bug19904;
|
||||
f
|
||||
ON
|
||||
TW
|
||||
NULL
|
||||
0R
|
||||
FR
|
||||
DROP TABLE bug19904;
|
||||
End of 5.0 tests.
|
||||
DROP FUNCTION metaphon;
|
||||
DROP FUNCTION myfunc_double;
|
||||
DROP FUNCTION myfunc_nonexist;
|
||||
|
@ -75,7 +75,7 @@ explain extended select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache (@t1:=((@t2:=1) + (@t3:=4))) AS `@t1:=(@t2:=1)+@t3:=4`,(@t1) AS `@t1`,(@t2) AS `@t2`,(@t3) AS `@t3`
|
||||
Note 1003 select (@t1:=((@t2:=1) + (@t3:=4))) AS `@t1:=(@t2:=1)+@t3:=4`,(@t1) AS `@t1`,(@t2) AS `@t2`,(@t3) AS `@t3`
|
||||
select @t5;
|
||||
@t5
|
||||
1.23456
|
||||
@ -135,7 +135,7 @@ explain extended select last_insert_id(345);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache last_insert_id(345) AS `last_insert_id(345)`
|
||||
Note 1003 select last_insert_id(345) AS `last_insert_id(345)`
|
||||
select @@IDENTITY,last_insert_id(), @@identity;
|
||||
@@IDENTITY last_insert_id() @@identity
|
||||
345 345 345
|
||||
@ -143,7 +143,7 @@ explain extended select @@IDENTITY,last_insert_id(), @@identity;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sql_no_cache 345 AS `@@IDENTITY`,last_insert_id() AS `last_insert_id()`,345 AS `@@identity`
|
||||
Note 1003 select 345 AS `@@IDENTITY`,last_insert_id() AS `last_insert_id()`,345 AS `@@identity`
|
||||
set big_tables=OFF, big_tables=ON, big_tables=0, big_tables=1, big_tables="OFF", big_tables="ON";
|
||||
set global concurrent_insert=2;
|
||||
show variables like 'concurrent_insert';
|
||||
@ -421,6 +421,28 @@ set tmp_table_size=100;
|
||||
set tx_isolation="READ-COMMITTED";
|
||||
set wait_timeout=100;
|
||||
set log_warnings=1;
|
||||
select @@session.insert_id;
|
||||
@@session.insert_id
|
||||
1
|
||||
set @save_insert_id=@@session.insert_id;
|
||||
set session insert_id=20;
|
||||
select @@session.insert_id;
|
||||
@@session.insert_id
|
||||
20
|
||||
set session last_insert_id=100;
|
||||
select @@session.insert_id;
|
||||
@@session.insert_id
|
||||
20
|
||||
select @@session.last_insert_id;
|
||||
@@session.last_insert_id
|
||||
100
|
||||
select @@session.insert_id;
|
||||
@@session.insert_id
|
||||
20
|
||||
set @@session.insert_id=@save_insert_id;
|
||||
select @@session.insert_id;
|
||||
@@session.insert_id
|
||||
1
|
||||
create table t1 (a int not null auto_increment, primary key(a));
|
||||
create table t2 (a int not null auto_increment, primary key(a));
|
||||
insert into t1 values(null),(null),(null);
|
||||
|
@ -672,7 +672,7 @@ drop table t1;
|
||||
CREATE VIEW v1 (f1,f2,f3,f4) AS SELECT connection_id(), pi(), current_user(), version();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache connection_id() AS `f1`,pi() AS `f2`,current_user() AS `f3`,version() AS `f4`
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select connection_id() AS `f1`,pi() AS `f2`,current_user() AS `f3`,version() AS `f4`
|
||||
drop view v1;
|
||||
create table t1 (s1 int);
|
||||
create table t2 (s2 int);
|
||||
@ -787,7 +787,7 @@ create function `f``1` () returns int return 5;
|
||||
create view v1 as select test.`f``1` ();
|
||||
show create view v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache `test`.`f``1`() AS `test.``f````1`` ()`
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`f``1`() AS `test.``f````1`` ()`
|
||||
select * from v1;
|
||||
test.`f``1` ()
|
||||
5
|
||||
@ -1868,14 +1868,14 @@ create table t2 (b timestamp default now());
|
||||
create view v1 as select a,b,t1.a < now() from t1,t2 where t1.a < now();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache `t1`.`a` AS `a`,`t2`.`b` AS `b`,(`t1`.`a` < now()) AS `t1.a < now()` from (`t1` join `t2`) where (`t1`.`a` < now())
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t2`.`b` AS `b`,(`t1`.`a` < now()) AS `t1.a < now()` from (`t1` join `t2`) where (`t1`.`a` < now())
|
||||
drop view v1;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 ( a varchar(50) );
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = CURRENT_USER();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache `t1`.`a` AS `a` from `t1` where (`t1`.`a` = current_user())
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where (`t1`.`a` = current_user())
|
||||
DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = VERSION();
|
||||
SHOW CREATE VIEW v1;
|
||||
@ -1885,7 +1885,7 @@ DROP VIEW v1;
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = DATABASE();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache `t1`.`a` AS `a` from `t1` where (`t1`.`a` = database())
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where (`t1`.`a` = database())
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 time);
|
||||
@ -2538,7 +2538,7 @@ show create view v1;
|
||||
drop view v1;
|
||||
//
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache `test`.`t1`.`id` AS `id` from `t1`
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`id` AS `id` from `t1`
|
||||
create table t1(f1 int, f2 int);
|
||||
create view v1 as select ta.f1 as a, tb.f1 as b from t1 ta, t1 tb where ta.f1=tb
|
||||
.f1 and ta.f2=tb.f2;
|
||||
@ -2683,7 +2683,7 @@ SELECT (year(now())-year(DOB)) AS Age
|
||||
FROM t1 HAVING Age < 75;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache (year(now()) - year(`t1`.`DOB`)) AS `Age` from `t1` having (`Age` < 75)
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (year(now()) - year(`t1`.`DOB`)) AS `Age` from `t1` having (`Age` < 75)
|
||||
SELECT (year(now())-year(DOB)) AS Age FROM t1 HAVING Age < 75;
|
||||
Age
|
||||
42
|
||||
|
@ -1019,4 +1019,39 @@ commit;
|
||||
alter table t1 add primary key(a);
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode
|
||||
#
|
||||
set autocommit=1;
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
|
||||
reset master;
|
||||
create table bug16206 (a int);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 1 f 2 n 5 n
|
||||
show binlog events;
|
||||
drop table bug16206;
|
||||
|
||||
reset master;
|
||||
create table bug16206 (a int) engine= bdb;
|
||||
insert into bug16206 values(0);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
insert into bug16206 values(3);
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 1 f 2 n 5 n
|
||||
show binlog events;
|
||||
drop table bug16206;
|
||||
|
||||
set autocommit=0;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -517,7 +517,7 @@ DROP TABLE t12913;
|
||||
create database mysqltest;
|
||||
use mysqltest;
|
||||
drop database mysqltest;
|
||||
--error 1102
|
||||
--error ER_NO_DB_ERROR
|
||||
create table test.t1 like x;
|
||||
--disable_warnings
|
||||
drop table if exists test.t1;
|
||||
|
@ -1 +1 @@
|
||||
--default-character-set=ucs2 --default-collation=ucs2_unicode_ci
|
||||
--default-collation=ucs2_unicode_ci --default-character-set=ucs2
|
||||
|
@ -1,3 +1,8 @@
|
||||
#
|
||||
# MySQL Bug#15276: MySQL ignores collation-server
|
||||
#
|
||||
show variables like 'collation_server';
|
||||
|
||||
#
|
||||
# Bug#18004 Connecting crashes server when default charset is UCS2
|
||||
#
|
||||
|
@ -348,6 +348,34 @@ SELECT DISTINCT a, b, 2 FROM t2;
|
||||
SELECT DISTINCT 2, a, b FROM t2;
|
||||
SELECT DISTINCT a, 2, b FROM t2;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#16458: Simple SELECT FOR UPDATE causes "Result Set not updatable"
|
||||
# error.
|
||||
#
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,1), (3,1);
|
||||
EXPLAIN SELECT DISTINCT a FROM t1;
|
||||
EXPLAIN SELECT DISTINCT a,b FROM t1;
|
||||
EXPLAIN SELECT DISTINCT t1_1.a, t1_1.b FROM t1 t1_1, t1 t1_2;
|
||||
EXPLAIN SELECT DISTINCT t1_1.a, t1_1.b FROM t1 t1_1, t1 t1_2
|
||||
WHERE t1_1.a = t1_2.a;
|
||||
EXPLAIN SELECT a FROM t1 GROUP BY a;
|
||||
EXPLAIN SELECT a,b FROM t1 GROUP BY a,b;
|
||||
EXPLAIN SELECT DISTINCT a,b FROM t1 GROUP BY a,b;
|
||||
|
||||
CREATE TABLE t2(a INT, b INT, c INT, d INT, PRIMARY KEY (a,b));
|
||||
INSERT INTO t2 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
|
||||
EXPLAIN SELECT DISTINCT a FROM t2;
|
||||
EXPLAIN SELECT DISTINCT a,a FROM t2;
|
||||
EXPLAIN SELECT DISTINCT b,a FROM t2;
|
||||
EXPLAIN SELECT DISTINCT a,c FROM t2;
|
||||
EXPLAIN SELECT DISTINCT c,a,b FROM t2;
|
||||
|
||||
EXPLAIN SELECT DISTINCT a,b,d FROM t2 GROUP BY c,b,d;
|
||||
CREATE UNIQUE INDEX c_b_unq ON t2 (c,b);
|
||||
EXPLAIN SELECT DISTINCT a,b,d FROM t2 GROUP BY c,b,d;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
# Bug 9784 DISTINCT IFNULL truncates data
|
||||
|
@ -1254,6 +1254,10 @@ SELECT LAST_INSERT_ID();
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM federated.t1;
|
||||
DROP TABLE federated.t1;
|
||||
|
||||
connection slave;
|
||||
DROP TABLE federated.t1;
|
||||
|
||||
#
|
||||
# Bug#17377 Federated Engine returns wrong Data, always the rows
|
||||
@ -1309,5 +1313,56 @@ DROP TABLE federated.t1;
|
||||
connection slave;
|
||||
DROP TABLE federated.bug_17377_table;
|
||||
|
||||
#
|
||||
# BUG 19773 Crash when using multi-table updates, deletes
|
||||
# with federated tables
|
||||
#
|
||||
connection slave;
|
||||
create table federated.t1 (i1 int, i2 int, i3 int);
|
||||
create table federated.t2 (id int, c1 varchar(20), c2 varchar(20));
|
||||
|
||||
connection master;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval create table federated.t1 (i1 int, i2 int, i3 int) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval create table federated.t2 (id int, c1 varchar(20), c2 varchar(20)) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t2';
|
||||
insert into federated.t1 values (1,5,10),(3,7,12),(4,5,2),(9,10,15),(2,2,2);
|
||||
insert into federated.t2 values (9,"abc","def"),(5,"opq","lmn"),(2,"test t","t test");
|
||||
select * from federated.t1 order by i1;
|
||||
select * from federated.t2;
|
||||
update federated.t1,federated.t2 set t1.i2=15, t2.c2="ppc" where t1.i1=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
select * from federated.t2 order by id;
|
||||
delete federated.t1.*,federated.t2.* from federated.t1,federated.t2 where t1.i2=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
select * from federated.t2 order by id;
|
||||
drop table federated.t1, federated.t2;
|
||||
connection slave;
|
||||
drop table federated.t1, federated.t2;
|
||||
|
||||
# Test multi updates and deletes with keys
|
||||
connection slave;
|
||||
create table federated.t1 (i1 int, i2 int, i3 int, primary key (i1));
|
||||
create table federated.t2 (id int, c1 varchar(20), c2 varchar(20), primary key (id));
|
||||
|
||||
connection master;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval create table federated.t1 (i1 int auto_increment not null, i2 int, i3 int, primary key (i1)) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval create table federated.t2 (id int auto_increment not null, c1 varchar(20), c2 varchar(20), primary key(id)) ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t2';
|
||||
insert into federated.t1 values (1,5,10),(3,7,12),(4,5,2),(9,10,15),(2,2,2);
|
||||
insert into federated.t2 values (9,"abc","def"),(5,"opq","lmn"),(2,"test t","t test");
|
||||
select * from federated.t1 order by i1;
|
||||
select * from federated.t2 order by id;
|
||||
update federated.t1,federated.t2 set t1.i2=15, t2.c2="ppc" where t1.i1=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
select * from federated.t2 order by id;
|
||||
delete federated.t1.*,federated.t2.* from federated.t1,federated.t2 where t1.i2=t2.id;
|
||||
select * from federated.t1 order by i1;
|
||||
select * from federated.t2 order by id;
|
||||
drop table federated.t1, federated.t2;
|
||||
|
||||
connection slave;
|
||||
drop table federated.t1, federated.t2;
|
||||
|
||||
source include/federated_cleanup.inc;
|
||||
|
@ -43,6 +43,8 @@ select weekofyear("1997-11-30 23:59:59.000001");
|
||||
|
||||
select makedate(1997,1);
|
||||
select makedate(1997,0);
|
||||
select makedate(9999,365);
|
||||
select makedate(9999,366);
|
||||
|
||||
#Time functions
|
||||
|
||||
|
@ -5,6 +5,9 @@
|
||||
drop table if exists t1,t2,t3;
|
||||
--enable_warnings
|
||||
|
||||
# Set timezone to GMT-3, to make it possible to use "interval 3 hour"
|
||||
set time_zone="+03:00";
|
||||
|
||||
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
|
||||
select period_add("9602",-12),period_diff(199505,"9404") ;
|
||||
|
||||
@ -139,6 +142,12 @@ select extract(MINUTE_SECOND FROM "10:11:12");
|
||||
select extract(SECOND FROM "1999-01-02 10:11:12");
|
||||
select extract(MONTH FROM "2001-02-00");
|
||||
|
||||
#
|
||||
# MySQL Bugs: #12356: DATE_SUB or DATE_ADD incorrectly returns null
|
||||
#
|
||||
SELECT DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
|
||||
SELECT DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
|
||||
|
||||
#
|
||||
# test EXTRACT QUARTER (Bug #18100)
|
||||
#
|
||||
@ -335,6 +344,7 @@ select last_day("1997-12-1")+0.0;
|
||||
|
||||
# Test SAPDB UTC_% functions. This part is TZ dependant (It is supposed that
|
||||
# TZ variable set to GMT-3
|
||||
|
||||
select strcmp(date_sub(localtimestamp(), interval 3 hour), utc_timestamp())=0;
|
||||
select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%T"), utc_time())=0;
|
||||
select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%Y-%m-%d"), utc_date())=0;
|
||||
@ -513,3 +523,6 @@ SELECT * FROM t1, t2
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
# End of 5.0 tests
|
||||
|
||||
# Restore timezone to default
|
||||
set time_zone= @@global.time_zone;
|
||||
|
@ -6,6 +6,9 @@
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
# Set timezone to GMT-3, to make it possible to use "interval 3 hour"
|
||||
set time_zone="+03:00";
|
||||
|
||||
create table t1 (Zeit time, Tag tinyint not null, Monat tinyint not null,
|
||||
Jahr smallint not null, index(Tag), index(Monat), index(Jahr) );
|
||||
insert into t1 values ("09:26:00",16,9,1998),("09:26:00",16,9,1998);
|
||||
@ -15,3 +18,6 @@ FROM t1;
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Restore timezone to default
|
||||
set time_zone= @@global.time_zone;
|
||||
|
@ -409,3 +409,10 @@ create table t1(pt GEOMETRY);
|
||||
alter table t1 add primary key pti(pt);
|
||||
alter table t1 add primary key pti(pt(20));
|
||||
drop table t1;
|
||||
|
||||
--enable_metadata
|
||||
create table t1 (g GEOMETRY);
|
||||
select * from t1;
|
||||
select asbinary(g) from t1;
|
||||
--disable_metadata
|
||||
drop table t1;
|
||||
|
@ -325,6 +325,17 @@ alter table t1 add key (c1,c2,c1);
|
||||
alter table t1 add key (c1,c1,c2);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#11228: DESC shows arbitrary column as "PRI"
|
||||
#
|
||||
create table t1 (
|
||||
i1 INT NOT NULL,
|
||||
i2 INT NOT NULL,
|
||||
UNIQUE i1idx (i1),
|
||||
UNIQUE i2idx (i2));
|
||||
desc t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#12565 - ERROR 1034 when running simple UPDATE or DELETE
|
||||
# on large MyISAM table
|
||||
|
@ -142,6 +142,7 @@ disconnect con2;
|
||||
--error ER_DB_DROP_EXISTS
|
||||
DROP DATABASE mysqltest_1;
|
||||
|
||||
#
|
||||
# Bug#16986 - Deadlock condition with MyISAM tables
|
||||
#
|
||||
connection locker;
|
||||
@ -170,6 +171,55 @@ connection locker;
|
||||
use test;
|
||||
#
|
||||
connection default;
|
||||
#
|
||||
# Test if CREATE TABLE with LOCK TABLE deadlocks.
|
||||
#
|
||||
connection writer;
|
||||
CREATE TABLE t1 (c1 int);
|
||||
LOCK TABLE t1 WRITE;
|
||||
#
|
||||
# This waits until t1 is unlocked.
|
||||
connection locker;
|
||||
send FLUSH TABLES WITH READ LOCK;
|
||||
--sleep 1
|
||||
#
|
||||
# This must not block.
|
||||
connection writer;
|
||||
CREATE TABLE t2 (c1 int);
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
# This awakes now.
|
||||
connection locker;
|
||||
reap;
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Test if CREATE TABLE SELECT with LOCK TABLE deadlocks.
|
||||
#
|
||||
connection writer;
|
||||
CREATE TABLE t1 (c1 int);
|
||||
LOCK TABLE t1 WRITE;
|
||||
#
|
||||
# This waits until t1 is unlocked.
|
||||
connection locker;
|
||||
send FLUSH TABLES WITH READ LOCK;
|
||||
--sleep 1
|
||||
#
|
||||
# This must not block.
|
||||
connection writer;
|
||||
--error 1100
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
# This awakes now.
|
||||
connection locker;
|
||||
reap;
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
connection default;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #17264: MySQL Server freeze
|
||||
|
@ -610,7 +610,7 @@ drop database db1;
|
||||
# BUG#15328 Segmentation fault occured if my.cnf is invalid for escape sequence
|
||||
#
|
||||
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS --defaults-extra-file=$MYSQL_TEST_DIR/std_data/bug15328.cnf mysqldump
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS --config-file=$MYSQL_TEST_DIR/std_data/bug15328.cnf mysqldump
|
||||
|
||||
|
||||
#
|
||||
@ -1145,6 +1145,27 @@ drop trigger tr2;
|
||||
drop table t1, t2;
|
||||
|
||||
|
||||
#
|
||||
# Bug#18462 mysqldump does not dump view structures correctly
|
||||
#
|
||||
#
|
||||
create table t (qty int, price int);
|
||||
insert into t values(3, 50);
|
||||
insert into t values(5, 51);
|
||||
create view v1 as select qty, price, qty*price as value from t;
|
||||
create view v2 as select qty from v1;
|
||||
--echo mysqldump {
|
||||
--exec $MYSQL_DUMP --compact -F --tab . test
|
||||
--exec cat v1.sql
|
||||
--echo } mysqldump {
|
||||
--exec cat v2.sql
|
||||
--echo } mysqldump
|
||||
--rm v.sql t.sql t.txt
|
||||
drop view v1;
|
||||
drop view v2;
|
||||
drop table t;
|
||||
|
||||
|
||||
#
|
||||
# Bug#14857 Reading dump files with single statement stored routines fails.
|
||||
# fixed by patch for bug#16878
|
||||
@ -1162,6 +1183,18 @@ drop function f;
|
||||
drop procedure p;
|
||||
|
||||
#
|
||||
# Bug #17371 Unable to dump a schema with invalid views
|
||||
#
|
||||
#
|
||||
create table t1 ( id serial );
|
||||
create view v1 as select * from t1;
|
||||
drop table t1;
|
||||
# mysqldump gets 1356 from server, but gives us 2
|
||||
--echo mysqldump {
|
||||
--error 2
|
||||
--exec $MYSQL_DUMP --force -N --compact --skip-comments test
|
||||
--echo } mysqldump
|
||||
drop view v1;
|
||||
# BUG#17201 Spurious 'DROP DATABASE' in output,
|
||||
# also confusion between tables and views.
|
||||
# Example code from Markus Popp
|
||||
|
@ -1146,4 +1146,122 @@ execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
drop table t1, t2, t3;
|
||||
|
||||
#
|
||||
# Bug#17199 "Table not found" error occurs if the query contains a call
|
||||
# to a function from another database.
|
||||
# Test prepared statements- related behaviour.
|
||||
#
|
||||
#
|
||||
# ALTER TABLE RENAME and Prepared Statements: wrong DB name buffer was used
|
||||
# in ALTER ... RENAME which caused memory corruption in prepared statements.
|
||||
# No need to fix this problem in 4.1 as ALTER TABLE is not allowed in
|
||||
# Prepared Statements in 4.1.
|
||||
#
|
||||
create database mysqltest_long_database_name_to_thrash_heap;
|
||||
use test;
|
||||
create table t1 (i int);
|
||||
prepare stmt from "alter table test.t1 rename t1";
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
execute stmt;
|
||||
show tables like 't1';
|
||||
prepare stmt from "alter table test.t1 rename t1";
|
||||
use test;
|
||||
execute stmt;
|
||||
show tables like 't1';
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
show tables like 't1';
|
||||
deallocate prepare stmt;
|
||||
#
|
||||
# Check that a prepared statement initializes its current database at
|
||||
# PREPARE, and then works correctly even if the current database has been
|
||||
# changed.
|
||||
#
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
# Necessary for preparation of INSERT/UPDATE/DELETE to succeed
|
||||
prepare stmt_create from "create table t1 (i int)";
|
||||
prepare stmt_insert from "insert into t1 (i) values (1)";
|
||||
prepare stmt_update from "update t1 set i=2";
|
||||
prepare stmt_delete from "delete from t1 where i=2";
|
||||
prepare stmt_select from "select * from t1";
|
||||
prepare stmt_alter from "alter table t1 add column (b int)";
|
||||
prepare stmt_alter1 from "alter table t1 drop column b";
|
||||
prepare stmt_analyze from "analyze table t1";
|
||||
prepare stmt_optimize from "optimize table t1";
|
||||
prepare stmt_show from "show tables like 't1'";
|
||||
prepare stmt_truncate from "truncate table t1";
|
||||
prepare stmt_drop from "drop table t1";
|
||||
# Drop the table that was used to prepare INSERT/UPDATE/DELETE: we will
|
||||
# create a new one by executing stmt_create
|
||||
drop table t1;
|
||||
# Switch the current database
|
||||
use test;
|
||||
# Check that all prepared statements operate on the database that was
|
||||
# active at PREPARE
|
||||
execute stmt_create;
|
||||
# should return empty set
|
||||
show tables like 't1';
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
show tables like 't1';
|
||||
use test;
|
||||
execute stmt_insert;
|
||||
select * from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
execute stmt_update;
|
||||
select * from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
execute stmt_delete;
|
||||
execute stmt_select;
|
||||
execute stmt_alter;
|
||||
show columns from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
execute stmt_alter1;
|
||||
show columns from mysqltest_long_database_name_to_thrash_heap.t1;
|
||||
execute stmt_analyze;
|
||||
execute stmt_optimize;
|
||||
execute stmt_show;
|
||||
execute stmt_truncate;
|
||||
execute stmt_drop;
|
||||
show tables like 't1';
|
||||
use mysqltest_long_database_name_to_thrash_heap;
|
||||
show tables like 't1';
|
||||
#
|
||||
# Attempt a statement PREPARE when there is no current database:
|
||||
# is expected to return an error.
|
||||
#
|
||||
drop database mysqltest_long_database_name_to_thrash_heap;
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_create from "create table t1 (i int)";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_insert from "insert into t1 (i) values (1)";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_update from "update t1 set i=2";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_delete from "delete from t1 where i=2";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_select from "select * from t1";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_alter from "alter table t1 add column (b int)";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_alter1 from "alter table t1 drop column b";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_analyze from "analyze table t1";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_optimize from "optimize table t1";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_show from "show tables like 't1'";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_truncate from "truncate table t1";
|
||||
--error ER_NO_DB_ERROR
|
||||
prepare stmt_drop from "drop table t1";
|
||||
#
|
||||
# The above has automatically deallocated all our statements.
|
||||
#
|
||||
# Attempt to CREATE a temporary table when no DB used: it should fail
|
||||
# This proves that no table can be used without explicit specification of
|
||||
# its database if there is no current database.
|
||||
#
|
||||
--error ER_NO_DB_ERROR
|
||||
create temporary table t1 (i int);
|
||||
#
|
||||
# Restore the old environemnt
|
||||
#
|
||||
use test;
|
||||
# End of 5.0 tests
|
||||
|
@ -1,3 +1,7 @@
|
||||
# TODO: THIS TEST DOES NOT WORK ON WINDOWS
|
||||
# This should be fixed.
|
||||
--source include/not_windows.inc
|
||||
|
||||
source include/have_openssl.inc;
|
||||
source include/master-slave.inc;
|
||||
|
||||
|
@ -424,3 +424,75 @@ DROP TABLE urkunde;
|
||||
#
|
||||
--error 1049
|
||||
SHOW TABLES FROM non_existing_database;
|
||||
|
||||
|
||||
#
|
||||
# Bug#17203: "sql_no_cache sql_cache" in views created from prepared
|
||||
# statement
|
||||
#
|
||||
# The problem was that initial user setting was forgotten, and current
|
||||
# runtime-determined values of the flags were shown instead.
|
||||
#
|
||||
--disable_warnings
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
--enable_warnings
|
||||
|
||||
# Check that SHOW CREATE VIEW shows SQL_CACHE flag exaclty as
|
||||
# specified by the user.
|
||||
CREATE VIEW v1 AS SELECT 1;
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE 1;
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE 1;
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
# Usage of NOW() disables caching, but we still have show what the
|
||||
# user have specified.
|
||||
CREATE VIEW v1 AS SELECT NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
# Check that SQL_NO_CACHE always wins.
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
# Check CREATE VIEW in a prepared statement in a procedure.
|
||||
delimiter |;
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
SET @s= 'CREATE VIEW v1 AS SELECT SQL_CACHE 1';
|
||||
PREPARE stmt FROM @s;
|
||||
EXECUTE stmt;
|
||||
DROP PREPARE stmt;
|
||||
END |
|
||||
delimiter ;|
|
||||
CALL p1();
|
||||
SHOW CREATE VIEW v1;
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP VIEW v1;
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
@ -272,3 +272,34 @@ drop table t1;
|
||||
drop view v1, v2, v3;
|
||||
drop function bug15683;
|
||||
|
||||
|
||||
#
|
||||
# Bug#19634 "Re-execution of multi-delete which involve trigger/stored
|
||||
# function crashes server"
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2, t3;
|
||||
drop function if exists bug19634;
|
||||
--enable_warnings
|
||||
create table t1 (id int, data int);
|
||||
create table t2 (id int);
|
||||
create table t3 (data int);
|
||||
create function bug19634() returns int return (select count(*) from t3);
|
||||
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()";
|
||||
# This should not crash server
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data);
|
||||
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id";
|
||||
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
drop function bug19634;
|
||||
drop table t1, t2, t3;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -744,4 +744,50 @@ DROP USER mysqltest_2@localhost;
|
||||
DROP DATABASE mysqltest;
|
||||
|
||||
|
||||
#
|
||||
# Bug#19857 - When a user with CREATE ROUTINE priv creates a routine,
|
||||
# it results in NULL p/w
|
||||
#
|
||||
|
||||
# Can't test with embedded server that doesn't support grants
|
||||
|
||||
GRANT USAGE ON *.* TO user19857@localhost IDENTIFIED BY 'meow';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ROUTINE, ALTER ROUTINE ON test.* TO
|
||||
user19857@localhost;
|
||||
SELECT Host,User,Password FROM mysql.user WHERE User='user19857';
|
||||
|
||||
--connect (mysqltest_2_con,localhost,user19857,meow,test)
|
||||
--echo
|
||||
--echo ---> connection: mysqltest_2_con
|
||||
--connection mysqltest_2_con
|
||||
|
||||
use test;
|
||||
|
||||
DELIMITER //;
|
||||
CREATE PROCEDURE sp19857() DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE a INT;
|
||||
SET a=1;
|
||||
SELECT a;
|
||||
END //
|
||||
DELIMITER ;//
|
||||
|
||||
SHOW CREATE PROCEDURE test.sp19857;
|
||||
|
||||
--disconnect mysqltest_2_con
|
||||
--connect (mysqltest_2_con,localhost,user19857,meow,test)
|
||||
--connection mysqltest_2_con
|
||||
|
||||
DROP PROCEDURE IF EXISTS test.sp19857;
|
||||
|
||||
--echo
|
||||
--echo ---> connection: root
|
||||
--connection con1root
|
||||
|
||||
--disconnect mysqltest_2_con
|
||||
|
||||
SELECT Host,User,Password FROM mysql.user WHERE User='user19857';
|
||||
|
||||
DROP USER user19857@localhost;
|
||||
|
||||
# End of 5.0 bugs.
|
||||
|
@ -5888,6 +5888,79 @@ DROP FUNCTION bug18037_f1|
|
||||
DROP PROCEDURE bug18037_p1|
|
||||
DROP PROCEDURE bug18037_p2|
|
||||
|
||||
#
|
||||
# Bug#17199: "Table not found" error occurs if the query contains a call
|
||||
# to a function from another database.
|
||||
# See also ps.test for an additional test case for this bug.
|
||||
#
|
||||
use test|
|
||||
create table t3 (i int)|
|
||||
insert into t3 values (1), (2)|
|
||||
create database mysqltest1|
|
||||
use mysqltest1|
|
||||
create function bug17199() returns varchar(2) deterministic return 'ok'|
|
||||
use test|
|
||||
select *, mysqltest1.bug17199() from t3|
|
||||
#
|
||||
# Bug#18444: Fully qualified stored function names don't work correctly
|
||||
# in select statements
|
||||
#
|
||||
use mysqltest1|
|
||||
create function bug18444(i int) returns int no sql deterministic return i + 1|
|
||||
use test|
|
||||
select mysqltest1.bug18444(i) from t3|
|
||||
drop database mysqltest1|
|
||||
#
|
||||
# Check that current database has no influence to a stored procedure
|
||||
#
|
||||
create database mysqltest1 charset=utf8|
|
||||
create database mysqltest2 charset=utf8|
|
||||
create procedure mysqltest1.p1()
|
||||
begin
|
||||
-- alters the default collation of database test
|
||||
alter database character set koi8r;
|
||||
end|
|
||||
use mysqltest1|
|
||||
call p1()|
|
||||
show create database mysqltest1|
|
||||
show create database mysqltest2|
|
||||
alter database mysqltest1 character set utf8|
|
||||
use mysqltest2|
|
||||
call mysqltest1.p1()|
|
||||
show create database mysqltest1|
|
||||
show create database mysqltest2|
|
||||
drop database mysqltest1|
|
||||
drop database mysqltest2|
|
||||
#
|
||||
# Restore the old environemnt
|
||||
use test|
|
||||
#
|
||||
# Bug#15217 "Using a SP cursor on a table created with PREPARE fails with
|
||||
# weird error". Check that the code that is supposed to work at
|
||||
# the first execution of a stored procedure actually works for
|
||||
# sp_instr_copen.
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t3|
|
||||
drop procedure if exists bug15217|
|
||||
--enable_warnings
|
||||
create table t3 as select 1|
|
||||
create procedure bug15217()
|
||||
begin
|
||||
declare var1 char(255);
|
||||
declare cur1 cursor for select * from t3;
|
||||
open cur1;
|
||||
fetch cur1 into var1;
|
||||
select concat('data was: /', var1, '/');
|
||||
close cur1;
|
||||
end |
|
||||
# Returns expected result
|
||||
call bug15217()|
|
||||
flush tables |
|
||||
# Returns error with garbage as column name
|
||||
call bug15217()|
|
||||
drop table t3|
|
||||
drop procedure bug15217|
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
|
@ -237,7 +237,7 @@ begin
|
||||
end|
|
||||
delimiter ;|
|
||||
insert into t3 values (1);
|
||||
--error 1048
|
||||
--error ER_BAD_NULL_ERROR
|
||||
insert into t1 values (4, "four", 1), (5, "five", 2);
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
@ -295,19 +295,19 @@ drop table t1, t2;
|
||||
create table t1 (i int);
|
||||
create table t3 (i int);
|
||||
|
||||
--error 1363
|
||||
--error ER_TRG_NO_SUCH_ROW_IN_TRG
|
||||
create trigger trg before insert on t1 for each row set @a:= old.i;
|
||||
--error 1363
|
||||
--error ER_TRG_NO_SUCH_ROW_IN_TRG
|
||||
create trigger trg before delete on t1 for each row set @a:= new.i;
|
||||
--error 1362
|
||||
--error ER_TRG_CANT_CHANGE_ROW
|
||||
create trigger trg before update on t1 for each row set old.i:=1;
|
||||
--error 1363
|
||||
--error ER_TRG_NO_SUCH_ROW_IN_TRG
|
||||
create trigger trg before delete on t1 for each row set new.i:=1;
|
||||
--error 1362
|
||||
--error ER_TRG_CANT_CHANGE_ROW
|
||||
create trigger trg after update on t1 for each row set new.i:=1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
create trigger trg before update on t1 for each row set new.j:=1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
create trigger trg before update on t1 for each row set @a:=old.j;
|
||||
|
||||
|
||||
@ -315,25 +315,25 @@ create trigger trg before update on t1 for each row set @a:=old.j;
|
||||
# Let us test various trigger creation errors
|
||||
# Also quickly test table namespace (bug#5892/6182)
|
||||
#
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
create trigger trg before insert on t2 for each row set @a:=1;
|
||||
|
||||
create trigger trg before insert on t1 for each row set @a:=1;
|
||||
--error 1359
|
||||
--error ER_TRG_ALREADY_EXISTS
|
||||
create trigger trg after insert on t1 for each row set @a:=1;
|
||||
--error 1359
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
create trigger trg2 before insert on t1 for each row set @a:=1;
|
||||
--error 1359
|
||||
--error ER_TRG_ALREADY_EXISTS
|
||||
create trigger trg before insert on t3 for each row set @a:=1;
|
||||
create trigger trg2 before insert on t3 for each row set @a:=1;
|
||||
drop trigger trg2;
|
||||
drop trigger trg;
|
||||
|
||||
--error 1360
|
||||
--error ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg;
|
||||
|
||||
create view v1 as select * from t1;
|
||||
--error 1347
|
||||
--error ER_WRONG_OBJECT
|
||||
create trigger trg before insert on v1 for each row set @a:=1;
|
||||
drop view v1;
|
||||
|
||||
@ -341,7 +341,7 @@ drop table t1;
|
||||
drop table t3;
|
||||
|
||||
create temporary table t1 (i int);
|
||||
--error 1361
|
||||
--error ER_TRG_ON_VIEW_OR_TEMP_TABLE
|
||||
create trigger trg before insert on t1 for each row set @a:=1;
|
||||
drop table t1;
|
||||
|
||||
@ -495,47 +495,47 @@ select * from t1;
|
||||
# their main effect. This is because operation on the table row is
|
||||
# executed before "after" trigger and its effect cannot be rolled back
|
||||
# when whole statement fails, because t1 is MyISAM table.
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1 values (2, 1);
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
update t1 set k = 2 where i = 2;
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
delete from t1 where i = 2;
|
||||
select * from t1;
|
||||
# Should fail and insert only 1 row
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
load data infile '../std_data_ln/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k);
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1 select 3, 3;
|
||||
select * from t1;
|
||||
# Multi-update working on the fly, again it will update only
|
||||
# one row even if more matches
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
update t1, t2 set k = k + 10 where t1.i = t2.i;
|
||||
select * from t1;
|
||||
# The same for multi-update via temp table
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
update t1, t2 set k = k + 10 where t1.i = t2.i and k < 3;
|
||||
select * from t1;
|
||||
# Multi-delete on the fly
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
delete t1, t2 from t1 straight_join t2 where t1.i = t2.i;
|
||||
select * from t1;
|
||||
# And via temporary storage
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
delete t2, t1 from t2 straight_join t1 where t1.i = t2.i;
|
||||
select * from t1;
|
||||
# Prepare table for testing of REPLACE and INSERT ... ON DUPLICATE KEY UPDATE
|
||||
alter table t1 add primary key (i);
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1 values (3, 4) on duplicate key update k= k + 10;
|
||||
select * from t1;
|
||||
# The following statement will delete old row and won't
|
||||
# insert new one since after delete trigger will fail.
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
replace into t1 values (3, 3);
|
||||
select * from t1;
|
||||
# Also drops all triggers
|
||||
@ -553,33 +553,33 @@ alter table t1 drop column bt;
|
||||
# The following statements changing t1 should fail and should not
|
||||
# cause any effect on table, since "before" trigger is executed
|
||||
# before operation on the table row.
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1 values (3, 3);
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
update t1 set i = 2;
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
delete from t1;
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
load data infile '../std_data_ln/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k);
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1 select 3, 3;
|
||||
select * from t1;
|
||||
# Both types of multi-update (on the fly and via temp table)
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
update t1, t2 set k = k + 10 where t1.i = t2.i;
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
update t1, t2 set k = k + 10 where t1.i = t2.i and k < 2;
|
||||
select * from t1;
|
||||
# Both types of multi-delete
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
delete t1, t2 from t1 straight_join t2 where t1.i = t2.i;
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
delete t2, t1 from t2 straight_join t1 where t1.i = t2.i;
|
||||
select * from t1;
|
||||
# Let us test REPLACE/INSERT ... ON DUPLICATE KEY UPDATE.
|
||||
@ -587,10 +587,10 @@ select * from t1;
|
||||
# in ordinary INSERT we need to drop "before insert" trigger.
|
||||
alter table t1 add primary key (i);
|
||||
drop trigger bi;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1 values (2, 4) on duplicate key update k= k + 10;
|
||||
select * from t1;
|
||||
--error 1054
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
replace into t1 values (2, 4);
|
||||
select * from t1;
|
||||
# Also drops all triggers
|
||||
@ -608,7 +608,7 @@ insert into t1 values (1, 2);
|
||||
create function bug5893 () returns int return 5;
|
||||
create trigger t1_bu before update on t1 for each row set new.col1= bug5893();
|
||||
drop function bug5893;
|
||||
--error 1305
|
||||
--error ER_SP_DOES_NOT_EXIST
|
||||
update t1 set col2 = 4;
|
||||
# This should not crash server too.
|
||||
drop trigger t1_bu;
|
||||
@ -908,9 +908,9 @@ create trigger t1_bi after insert on t1 for each row insert into t3 values (new.
|
||||
# Until we implement proper mechanism for invalidation of PS/SP when table
|
||||
# or SP's are changed these two statements will fail with 'Table ... was
|
||||
# not locked' error (this mechanism should be based on the new TDC).
|
||||
--error 1100
|
||||
--error 1100 #ER_TABLE_NOT_LOCKED
|
||||
execute stmt1;
|
||||
--error 1100
|
||||
--error 1100 #ER_TABLE_NOT_LOCKED
|
||||
call p1();
|
||||
deallocate prepare stmt1;
|
||||
drop procedure p1;
|
||||
@ -1186,7 +1186,7 @@ INSERT INTO t1 VALUES (@x);
|
||||
SELECT @x;
|
||||
|
||||
SET @x=2;
|
||||
--error 1365
|
||||
--error ER_DIVISION_BY_ZERO
|
||||
UPDATE t1 SET i1 = @x;
|
||||
SELECT @x;
|
||||
|
||||
@ -1197,7 +1197,7 @@ INSERT INTO t1 VALUES (@x);
|
||||
SELECT @x;
|
||||
|
||||
SET @x=4;
|
||||
--error 1365
|
||||
--error ER_DIVISION_BY_ZERO
|
||||
UPDATE t1 SET i1 = @x;
|
||||
SELECT @x;
|
||||
|
||||
@ -1281,4 +1281,26 @@ SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 5.0 tests
|
||||
#
|
||||
# Bug #18005: Creating a trigger on mysql.event leads to server crash on
|
||||
# scheduler startup
|
||||
#
|
||||
# Bug #18361: Triggers on mysql.user table cause server crash
|
||||
#
|
||||
# We don't allow triggers on the mysql schema
|
||||
delimiter |;
|
||||
--error ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
|
||||
create trigger wont_work after update on mysql.user for each row
|
||||
begin
|
||||
set @a:= 1;
|
||||
end|
|
||||
# Try when we're already using the mysql schema
|
||||
use mysql|
|
||||
--error ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
|
||||
create trigger wont_work after update on event for each row
|
||||
begin
|
||||
set @a:= 1;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -6,6 +6,9 @@
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
# Set timezone to GMT-3, to make it possible to use "interval 3 hour"
|
||||
set time_zone="+03:00";
|
||||
|
||||
CREATE TABLE t1 (a int, t timestamp);
|
||||
CREATE TABLE t2 (a int, t datetime);
|
||||
SET TIMESTAMP=1234;
|
||||
@ -322,3 +325,6 @@ select * from t1;
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Restore timezone to default
|
||||
set time_zone= @@global.time_zone;
|
||||
|
@ -99,6 +99,17 @@ delimiter ;//
|
||||
call XXX2();
|
||||
drop procedure xxx2;
|
||||
|
||||
#
|
||||
# Bug#19904: UDF: not initialized *is_null per row
|
||||
#
|
||||
|
||||
CREATE TABLE bug19904(n INT, v varchar(10));
|
||||
INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
|
||||
SELECT myfunc_double(n) AS f FROM bug19904;
|
||||
SELECT metaphon(v) AS f FROM bug19904;
|
||||
DROP TABLE bug19904;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
# Drop the example functions from udf_example
|
||||
@ -114,3 +125,4 @@ DROP FUNCTION lookup;
|
||||
DROP FUNCTION reverse_lookup;
|
||||
DROP FUNCTION avgcost;
|
||||
|
||||
|
||||
|
@ -301,6 +301,22 @@ set tx_isolation="READ-COMMITTED";
|
||||
set wait_timeout=100;
|
||||
set log_warnings=1;
|
||||
|
||||
#
|
||||
# Bugs: #20392: INSERT_ID session variable has weird value
|
||||
#
|
||||
select @@session.insert_id;
|
||||
set @save_insert_id=@@session.insert_id;
|
||||
set session insert_id=20;
|
||||
select @@session.insert_id;
|
||||
|
||||
set session last_insert_id=100;
|
||||
select @@session.insert_id;
|
||||
select @@session.last_insert_id;
|
||||
select @@session.insert_id;
|
||||
|
||||
set @@session.insert_id=@save_insert_id;
|
||||
select @@session.insert_id;
|
||||
|
||||
#
|
||||
# key buffer
|
||||
#
|
||||
|
@ -11,6 +11,7 @@
|
||||
connect (wait_con,localhost,root,,test,,);
|
||||
flush status; # Reset counters
|
||||
connection wait_con;
|
||||
set session wait_timeout=100;
|
||||
let $retries=300;
|
||||
let $aborted_clients = `SHOW STATUS LIKE 'aborted_clients'`;
|
||||
set @aborted_clients= 0;
|
||||
|
@ -56,7 +56,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \
|
||||
my_gethostbyname.c rijndael.c my_aes.c sha1.c \
|
||||
my_handler.c my_netware.c my_largepage.c \
|
||||
my_memmem.c \
|
||||
my_windac.c my_access.c base64.c
|
||||
my_windac.c my_access.c base64.c my_libwrap.c
|
||||
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
|
||||
thr_mutex.c thr_rwlock.c
|
||||
libmysys_a_LIBADD = @THREAD_LOBJECTS@
|
||||
|
@ -72,7 +72,9 @@ uint dirname_part(my_string to, const char *name)
|
||||
|
||||
SYNPOSIS
|
||||
convert_dirname()
|
||||
to Store result here
|
||||
to Store result here. Must be at least of size
|
||||
min(FN_REFLEN, strlen(from) + 1) to make room
|
||||
for adding FN_LIBCHAR at the end.
|
||||
from Original filename
|
||||
from_end Pointer at end of filename (normally end \0)
|
||||
|
||||
|
@ -32,3 +32,54 @@ int my_delete(const char *name, myf MyFlags)
|
||||
}
|
||||
DBUG_RETURN(err);
|
||||
} /* my_delete */
|
||||
|
||||
#if defined(__WIN__) && defined(__NT__)
|
||||
/*
|
||||
Delete file which is possibly not closed.
|
||||
|
||||
This function is intended to be used exclusively as a temporal solution
|
||||
for Win NT in case when it is needed to delete a not closed file (note
|
||||
that the file must be opened everywhere with FILE_SHARE_DELETE mode).
|
||||
Deleting not-closed files can not be supported on Win 98|ME (and because
|
||||
of that is considered harmful).
|
||||
|
||||
The function deletes the file with its preliminary renaming. This is
|
||||
because when not-closed share-delete file is deleted it still lives on
|
||||
a disk until it will not be closed everwhere. This may conflict with an
|
||||
attempt to create a new file with the same name. The deleted file is
|
||||
renamed to <name>.<num>.deleted where <name> - the initial name of the
|
||||
file, <num> - a hexadecimal number chosen to make the temporal name to
|
||||
be unique.
|
||||
*/
|
||||
int nt_share_delete(const char *name, myf MyFlags)
|
||||
{
|
||||
char buf[MAX_PATH + 20];
|
||||
ulong cnt;
|
||||
DBUG_ENTER("nt_share_delete");
|
||||
DBUG_PRINT("my",("name %s MyFlags %d", name, MyFlags));
|
||||
|
||||
for (cnt= GetTickCount(); cnt; cnt--)
|
||||
{
|
||||
sprintf(buf, "%s.%08X.deleted", name, cnt);
|
||||
if (MoveFile(name, buf))
|
||||
break;
|
||||
|
||||
if ((errno= GetLastError()) == ERROR_ALREADY_EXISTS)
|
||||
continue;
|
||||
|
||||
DBUG_PRINT("warning", ("Failed to rename %s to %s, errno: %d",
|
||||
name, buf, errno));
|
||||
break;
|
||||
}
|
||||
|
||||
if (DeleteFile(buf))
|
||||
DBUG_RETURN(0);
|
||||
|
||||
my_errno= GetLastError();
|
||||
if (MyFlags & (MY_FAE+MY_WME))
|
||||
my_error(EE_DELETE, MYF(ME_BELL + ME_WAITTANG + (MyFlags & ME_NOINPUT)),
|
||||
name, my_errno);
|
||||
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
#endif
|
||||
|
@ -245,6 +245,22 @@ void setEnvString(char *ret, const char *name, const char *value)
|
||||
DBUG_VOID_RETURN ;
|
||||
}
|
||||
|
||||
/*
|
||||
my_paramter_handler
|
||||
Invalid paramter handler we will use instead of the one "baked" into the CRT
|
||||
for MSC v8. This one just prints out what invalid parameter was encountered.
|
||||
By providing this routine, routines like lseek will return -1 when we expect them
|
||||
to instead of crash.
|
||||
*/
|
||||
void my_parameter_handler(const wchar_t * expression, const wchar_t * function,
|
||||
const wchar_t * file, unsigned int line,
|
||||
uintptr_t pReserved)
|
||||
{
|
||||
DBUG_PRINT("my",("Expression: %s function: %s file: %s, line: %d",
|
||||
expression, function, file, line));
|
||||
}
|
||||
|
||||
|
||||
static void my_win_init(void)
|
||||
{
|
||||
HKEY hSoftMysql ;
|
||||
@ -262,12 +278,18 @@ static void my_win_init(void)
|
||||
|
||||
setlocale(LC_CTYPE, ""); /* To get right sortorder */
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1300)
|
||||
#if defined(_MSC_VER)
|
||||
#if _MSC_VER < 1300
|
||||
/*
|
||||
Clear the OS system variable TZ and avoid the 100% CPU usage
|
||||
Only for old versions of Visual C++
|
||||
*/
|
||||
_putenv( "TZ=" );
|
||||
#endif
|
||||
#if _MSC_VER >= 1400
|
||||
/* this is required to make crt functions return -1 appropriately */
|
||||
_set_invalid_parameter_handler(my_parameter_handler);
|
||||
#endif
|
||||
#endif
|
||||
_tzset();
|
||||
|
||||
|
@ -501,7 +501,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags)
|
||||
if (!(MyFlags & MY_DONT_SORT))
|
||||
qsort((void *) result->dir_entry, result->number_off_files,
|
||||
sizeof(FILEINFO), (qsort_cmp) comp_names);
|
||||
DBUG_PRINT(exit, ("found %d files", result->number_off_files));
|
||||
DBUG_PRINT("exit", ("found %d files", result->number_off_files));
|
||||
DBUG_RETURN(result);
|
||||
error:
|
||||
my_errno=errno;
|
||||
|
42
mysys/my_libwrap.c
Normal file
42
mysys/my_libwrap.c
Normal file
@ -0,0 +1,42 @@
|
||||
/* Copyright (C) 2003 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/*
|
||||
This is needed to be able to compile with original libwrap header
|
||||
files that don't have the prototypes
|
||||
*/
|
||||
|
||||
#include <my_global.h>
|
||||
#include <my_libwrap.h>
|
||||
|
||||
#ifdef HAVE_LIBWRAP
|
||||
|
||||
void my_fromhost(struct request_info *req)
|
||||
{
|
||||
fromhost(req);
|
||||
}
|
||||
|
||||
int my_hosts_access(struct request_info *req)
|
||||
{
|
||||
hosts_access(req);
|
||||
}
|
||||
|
||||
char *my_eval_client(struct request_info *req)
|
||||
{
|
||||
eval_client(req);
|
||||
}
|
||||
|
||||
#endif /* HAVE_LIBWRAP */
|
@ -83,7 +83,7 @@ char *my_strdup(const char *from, myf my_flags)
|
||||
}
|
||||
|
||||
|
||||
char *my_strdup_with_length(const byte *from, uint length, myf my_flags)
|
||||
char *my_strdup_with_length(const char *from, uint length, myf my_flags)
|
||||
{
|
||||
gptr ptr;
|
||||
if ((ptr=my_malloc(length+1,my_flags)) != 0)
|
||||
|
@ -525,7 +525,7 @@ char *_my_strdup(const char *from, const char *filename, uint lineno,
|
||||
} /* _my_strdup */
|
||||
|
||||
|
||||
char *_my_strdup_with_length(const byte *from, uint length,
|
||||
char *_my_strdup_with_length(const char *from, uint length,
|
||||
const char *filename, uint lineno,
|
||||
myf MyFlags)
|
||||
{
|
||||
|
@ -204,6 +204,8 @@ static void check_locks(THR_LOCK *lock, const char *where,
|
||||
{
|
||||
if ((int) data->type == (int) TL_READ_NO_INSERT)
|
||||
count++;
|
||||
/* Protect against infinite loop. */
|
||||
DBUG_ASSERT(count <= lock->read_no_write_count);
|
||||
}
|
||||
if (count != lock->read_no_write_count)
|
||||
{
|
||||
|
@ -507,16 +507,12 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
|
||||
#define GSN_TEST_ORD 407
|
||||
#define GSN_TESTSIG 408
|
||||
#define GSN_TIME_SIGNAL 409
|
||||
/* 410 unused */
|
||||
/* 411 unused */
|
||||
/* 412 unused */
|
||||
#define GSN_TUP_ABORTREQ 414
|
||||
#define GSN_TUP_ADD_ATTCONF 415
|
||||
#define GSN_TUP_ADD_ATTRREF 416
|
||||
#define GSN_TUP_ADD_ATTRREQ 417
|
||||
#define GSN_TUP_ATTRINFO 418
|
||||
#define GSN_TUP_COMMITREQ 419
|
||||
/* 420 unused */
|
||||
#define GSN_TUP_LCPCONF 421
|
||||
#define GSN_TUP_LCPREF 422
|
||||
#define GSN_TUP_LCPREQ 423
|
||||
@ -611,8 +607,6 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
|
||||
#define GSN_WAIT_GCP_REF 500
|
||||
#define GSN_WAIT_GCP_CONF 501
|
||||
|
||||
/* 502 not used */
|
||||
|
||||
/**
|
||||
* Trigger and index signals
|
||||
*/
|
||||
@ -682,6 +676,8 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
|
||||
#define GSN_BACKUP_FRAGMENT_REF 546
|
||||
#define GSN_BACKUP_FRAGMENT_CONF 547
|
||||
|
||||
#define GSN_BACKUP_FRAGMENT_COMPLETE_REP 575
|
||||
|
||||
#define GSN_STOP_BACKUP_REQ 548
|
||||
#define GSN_STOP_BACKUP_REF 549
|
||||
#define GSN_STOP_BACKUP_CONF 550
|
||||
@ -731,7 +727,7 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
|
||||
#define GSN_SUB_STOP_REQ 572
|
||||
#define GSN_SUB_STOP_REF 573
|
||||
#define GSN_SUB_STOP_CONF 574
|
||||
/* 575 unused */
|
||||
/* 575 used */
|
||||
#define GSN_SUB_CREATE_REQ 576
|
||||
#define GSN_SUB_CREATE_REF 577
|
||||
#define GSN_SUB_CREATE_CONF 578
|
||||
@ -938,4 +934,10 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
|
||||
#define GSN_ACC_LOCKREQ 711
|
||||
#define GSN_READ_PSUEDO_REQ 712
|
||||
|
||||
/* DICT LOCK signals */
|
||||
#define GSN_DICT_LOCK_REQ 410
|
||||
#define GSN_DICT_LOCK_CONF 411
|
||||
#define GSN_DICT_LOCK_REF 412
|
||||
#define GSN_DICT_UNLOCK_ORD 420
|
||||
|
||||
#endif
|
||||
|
@ -114,6 +114,7 @@ public:
|
||||
InvalidTableVersion = 241,
|
||||
DropInProgress = 283,
|
||||
Busy = 701,
|
||||
BusyWithNR = 711,
|
||||
NotMaster = 702,
|
||||
InvalidFormat = 703,
|
||||
AttributeNameTooLong = 704,
|
||||
|
@ -31,7 +31,8 @@ private:
|
||||
BUFFER_UNDERFLOW = 1,
|
||||
BUFFER_FULL_SCAN = 2,
|
||||
BUFFER_FULL_FRAG_COMPLETE = 3,
|
||||
BUFFER_FULL_META = 4
|
||||
BUFFER_FULL_META = 4,
|
||||
BACKUP_FRAGMENT_INFO = 5
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -258,15 +258,31 @@ class BackupFragmentConf {
|
||||
|
||||
friend bool printBACKUP_FRAGMENT_CONF(FILE *, const Uint32 *, Uint32, Uint16);
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 6 );
|
||||
STATIC_CONST( SignalLength = 8 );
|
||||
|
||||
private:
|
||||
Uint32 backupId;
|
||||
Uint32 backupPtr;
|
||||
Uint32 tableId;
|
||||
Uint32 fragmentNo;
|
||||
Uint32 noOfRecords;
|
||||
Uint32 noOfBytes;
|
||||
Uint32 noOfRecordsLow;
|
||||
Uint32 noOfBytesLow;
|
||||
Uint32 noOfRecordsHigh;
|
||||
Uint32 noOfBytesHigh;
|
||||
};
|
||||
|
||||
class BackupFragmentCompleteRep {
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 8 );
|
||||
|
||||
Uint32 backupId;
|
||||
Uint32 backupPtr;
|
||||
Uint32 tableId;
|
||||
Uint32 fragmentNo;
|
||||
Uint32 noOfTableRowsLow;
|
||||
Uint32 noOfFragmentRowsLow;
|
||||
Uint32 noOfTableRowsHigh;
|
||||
Uint32 noOfFragmentRowsHigh;
|
||||
};
|
||||
|
||||
class StopBackupReq {
|
||||
|
@ -201,17 +201,19 @@ class BackupCompleteRep {
|
||||
|
||||
friend bool printBACKUP_COMPLETE_REP(FILE *, const Uint32 *, Uint32, Uint16);
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 8 + NdbNodeBitmask::Size );
|
||||
STATIC_CONST( SignalLength = 10 + NdbNodeBitmask::Size );
|
||||
private:
|
||||
Uint32 senderData;
|
||||
Uint32 backupId;
|
||||
Uint32 startGCP;
|
||||
Uint32 stopGCP;
|
||||
Uint32 noOfBytes;
|
||||
Uint32 noOfRecords;
|
||||
Uint32 noOfBytesLow;
|
||||
Uint32 noOfRecordsLow;
|
||||
Uint32 noOfLogBytes;
|
||||
Uint32 noOfLogRecords;
|
||||
NdbNodeBitmask nodes;
|
||||
Uint32 noOfBytesHigh;
|
||||
Uint32 noOfRecordsHigh;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -77,6 +77,7 @@ public:
|
||||
enum ErrorCode {
|
||||
NoError = 0,
|
||||
Busy = 701,
|
||||
BusyWithNR = 711,
|
||||
NotMaster = 702,
|
||||
InvalidFormat = 703,
|
||||
AttributeNameTooLong = 704,
|
||||
|
78
ndb/include/kernel/signaldata/DictLock.hpp
Normal file
78
ndb/include/kernel/signaldata/DictLock.hpp
Normal file
@ -0,0 +1,78 @@
|
||||
/* Copyright (C) 2003 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#ifndef DICT_LOCK_HPP
|
||||
#define DICT_LOCK_HPP
|
||||
|
||||
#include "SignalData.hpp"
|
||||
|
||||
// see comments in Dbdict.hpp
|
||||
|
||||
class DictLockReq {
|
||||
friend class Dbdict;
|
||||
friend class Dbdih;
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 3 );
|
||||
enum LockType {
|
||||
NoLock = 0,
|
||||
NodeRestartLock = 1
|
||||
};
|
||||
private:
|
||||
Uint32 userPtr;
|
||||
Uint32 lockType;
|
||||
Uint32 userRef;
|
||||
};
|
||||
|
||||
class DictLockConf {
|
||||
friend class Dbdict;
|
||||
friend class Dbdih;
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 3 );
|
||||
private:
|
||||
Uint32 userPtr;
|
||||
Uint32 lockType;
|
||||
Uint32 lockPtr;
|
||||
};
|
||||
|
||||
class DictLockRef {
|
||||
friend class Dbdict;
|
||||
friend class Dbdih;
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 3 );
|
||||
enum ErrorCode {
|
||||
NotMaster = 1,
|
||||
InvalidLockType = 2,
|
||||
BadUserRef = 3,
|
||||
TooLate = 4,
|
||||
TooManyRequests = 5
|
||||
};
|
||||
private:
|
||||
Uint32 userPtr;
|
||||
Uint32 lockType;
|
||||
Uint32 errorCode;
|
||||
};
|
||||
|
||||
class DictUnlockOrd {
|
||||
friend class Dbdict;
|
||||
friend class Dbdih;
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 2 );
|
||||
private:
|
||||
Uint32 lockPtr;
|
||||
Uint32 lockType;
|
||||
};
|
||||
|
||||
#endif
|
@ -117,9 +117,16 @@ public:
|
||||
CustomTriggerId = 25,
|
||||
FrmLen = 26,
|
||||
FrmData = 27,
|
||||
|
||||
FragmentCount = 128, // No of fragments in table (!fragment replicas)
|
||||
FragmentDataLen = 129,
|
||||
FragmentData = 130, // CREATE_FRAGMENTATION reply
|
||||
|
||||
MaxRowsLow = 139,
|
||||
MaxRowsHigh = 140,
|
||||
MinRowsLow = 143,
|
||||
MinRowsHigh = 144,
|
||||
|
||||
TableEnd = 999,
|
||||
|
||||
AttributeName = 1000, // String, Mandatory
|
||||
@ -263,6 +270,10 @@ public:
|
||||
Uint32 FragmentCount;
|
||||
Uint32 FragmentDataLen;
|
||||
Uint16 FragmentData[(MAX_FRAGMENT_DATA_BYTES+1)/2];
|
||||
Uint32 MaxRowsLow;
|
||||
Uint32 MaxRowsHigh;
|
||||
Uint32 MinRowsLow;
|
||||
Uint32 MinRowsHigh;
|
||||
|
||||
void init();
|
||||
};
|
||||
|
@ -53,6 +53,7 @@ public:
|
||||
|
||||
enum ErrorCode {
|
||||
Busy = 701,
|
||||
BusyWithNR = 711,
|
||||
NotMaster = 702,
|
||||
NoSuchTable = 709,
|
||||
InvalidTableVersion = 241,
|
||||
|
@ -104,7 +104,7 @@ class LqhFragReq {
|
||||
friend bool printLQH_FRAG_REQ(FILE *, const Uint32 *, Uint32, Uint16);
|
||||
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 25 );
|
||||
STATIC_CONST( SignalLength = 23 );
|
||||
|
||||
enum RequestInfo {
|
||||
CreateInRunning = 0x8000000,
|
||||
@ -116,27 +116,32 @@ private:
|
||||
Uint32 senderRef;
|
||||
Uint32 fragmentId;
|
||||
Uint32 requestInfo;
|
||||
Uint32 tableId;
|
||||
Uint32 localKeyLength;
|
||||
Uint32 maxLoadFactor;
|
||||
Uint32 minLoadFactor;
|
||||
Uint32 kValue;
|
||||
Uint32 lh3DistrBits;
|
||||
Uint32 lh3PageBits;
|
||||
Uint32 noOfAttributes;
|
||||
Uint32 noOfNullAttributes;
|
||||
Uint32 noOfPagesToPreAllocate;
|
||||
Uint32 schemaVersion;
|
||||
Uint32 keyLength;
|
||||
Uint32 nextLCP;
|
||||
Uint32 noOfKeyAttr;
|
||||
Uint32 noOfNewAttr; // noOfCharsets in upper half
|
||||
Uint32 checksumIndicator;
|
||||
Uint32 noOfAttributeGroups;
|
||||
Uint32 GCPIndicator;
|
||||
Uint16 noOfNewAttr;
|
||||
Uint16 noOfCharsets;
|
||||
Uint32 startGci;
|
||||
Uint32 tableType; // DictTabInfo::TableType
|
||||
Uint32 primaryTableId; // table of index or RNIL
|
||||
Uint16 tableId;
|
||||
Uint16 localKeyLength;
|
||||
Uint16 lh3DistrBits;
|
||||
Uint16 lh3PageBits;
|
||||
Uint16 noOfAttributes;
|
||||
Uint16 noOfNullAttributes;
|
||||
Uint16 noOfPagesToPreAllocate;
|
||||
Uint16 keyLength;
|
||||
Uint16 noOfKeyAttr;
|
||||
Uint8 checksumIndicator;
|
||||
Uint8 GCPIndicator;
|
||||
Uint32 noOfAttributeGroups;
|
||||
Uint32 maxRowsLow;
|
||||
Uint32 maxRowsHigh;
|
||||
Uint32 minRowsLow;
|
||||
Uint32 minRowsHigh;
|
||||
};
|
||||
|
||||
class LqhFragConf {
|
||||
|
@ -30,7 +30,7 @@ class TupFragReq {
|
||||
friend class Dblqh;
|
||||
friend class Dbtup;
|
||||
public:
|
||||
STATIC_CONST( SignalLength = 14 );
|
||||
STATIC_CONST( SignalLength = 17 );
|
||||
private:
|
||||
Uint32 userPtr;
|
||||
Uint32 userRef;
|
||||
@ -38,7 +38,18 @@ private:
|
||||
Uint32 tableId;
|
||||
Uint32 noOfAttr;
|
||||
Uint32 fragId;
|
||||
Uint32 todo[8];
|
||||
Uint32 maxRowsLow;
|
||||
Uint32 maxRowsHigh;
|
||||
Uint32 minRowsLow;
|
||||
Uint32 minRowsHigh;
|
||||
Uint32 noOfNullAttr;
|
||||
Uint32 schemaVersion;
|
||||
Uint32 noOfKeyAttr;
|
||||
Uint16 noOfNewAttr;
|
||||
Uint16 noOfCharsets;
|
||||
Uint32 checksumIndicator;
|
||||
Uint32 noOfAttributeGroups;
|
||||
Uint32 globalCheckpointIdIndicator;
|
||||
};
|
||||
|
||||
class TupFragConf {
|
||||
|
@ -60,5 +60,7 @@ char ndb_version_string_buf[NDB_VERSION_STRING_BUF_SZ];
|
||||
#define NDBD_INCL_NODECONF_VERSION_4 MAKE_VERSION(4,1,17)
|
||||
#define NDBD_INCL_NODECONF_VERSION_5 MAKE_VERSION(5,0,18)
|
||||
|
||||
#define NDBD_DICT_LOCK_VERSION_5 MAKE_VERSION(5,0,23)
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -722,6 +722,20 @@ public:
|
||||
*/
|
||||
void setObjectType(Object::Type type);
|
||||
|
||||
/**
|
||||
* Set/Get Maximum number of rows in table (only used to calculate
|
||||
* number of partitions).
|
||||
*/
|
||||
void setMaxRows(Uint64 maxRows);
|
||||
Uint64 getMaxRows() const;
|
||||
|
||||
/**
|
||||
* Set/Get Minimum number of rows in table (only used to calculate
|
||||
* number of partitions).
|
||||
*/
|
||||
void setMinRows(Uint64 minRows);
|
||||
Uint64 getMinRows() const;
|
||||
|
||||
/** @} *******************************************************************/
|
||||
|
||||
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
|
||||
|
@ -139,7 +139,7 @@ SignalLoggerManager::log(LogMode logMode, const char * params)
|
||||
} else {
|
||||
for (int i = 0; i < count; ++i){
|
||||
BlockNumber number = getBlockNo(blocks[i]);
|
||||
cnt += log(SLM_ON, number-MIN_BLOCK_NO, logMode);
|
||||
cnt += log(SLM_ON, number, logMode);
|
||||
}
|
||||
}
|
||||
for(int i = 0; i<count; i++){
|
||||
|
@ -100,8 +100,10 @@ printBACKUP_FRAGMENT_CONF(FILE * out, const Uint32 * data, Uint32 l, Uint16 b){
|
||||
BackupFragmentConf* sig = (BackupFragmentConf*)data;
|
||||
fprintf(out, " backupPtr: %d backupId: %d\n",
|
||||
sig->backupPtr, sig->backupId);
|
||||
fprintf(out, " tableId: %d fragmentNo: %d records: %d bytes: %d\n",
|
||||
sig->tableId, sig->fragmentNo, sig->noOfRecords, sig->noOfBytes);
|
||||
fprintf(out, " tableId: %d fragmentNo: %d records: %llu bytes: %llu\n",
|
||||
sig->tableId, sig->fragmentNo,
|
||||
sig->noOfRecordsLow + (((Uint64)sig->noOfRecordsHigh) << 32),
|
||||
sig->noOfBytesLow + (((Uint64)sig->noOfBytesHigh) << 32));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -72,11 +72,11 @@ printBACKUP_ABORT_REP(FILE * out, const Uint32 * data, Uint32 len, Uint16 bno){
|
||||
bool
|
||||
printBACKUP_COMPLETE_REP(FILE * out, const Uint32 * data, Uint32 len, Uint16 b){
|
||||
BackupCompleteRep* sig = (BackupCompleteRep*)data;
|
||||
fprintf(out, " senderData: %d backupId: %d records: %d bytes: %d\n",
|
||||
fprintf(out, " senderData: %d backupId: %d records: %llu bytes: %llu\n",
|
||||
sig->senderData,
|
||||
sig->backupId,
|
||||
sig->noOfRecords,
|
||||
sig->noOfBytes);
|
||||
sig->noOfRecordsLow + (((Uint64)sig->noOfRecordsHigh) << 32),
|
||||
sig->noOfBytesLow + (((Uint64)sig->noOfBytesHigh) << 32));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,10 @@ DictTabInfo::TableMapping[] = {
|
||||
DTIMAP(Table, FragmentCount, FragmentCount),
|
||||
DTIMAP2(Table, FragmentDataLen, FragmentDataLen, 0, MAX_FRAGMENT_DATA_BYTES),
|
||||
DTIMAPB(Table, FragmentData, FragmentData, 0, MAX_FRAGMENT_DATA_BYTES, FragmentDataLen),
|
||||
DTIMAP(Table, MaxRowsLow, MaxRowsLow),
|
||||
DTIMAP(Table, MaxRowsHigh, MaxRowsHigh),
|
||||
DTIMAP(Table, MinRowsLow, MinRowsLow),
|
||||
DTIMAP(Table, MinRowsHigh, MinRowsHigh),
|
||||
DTIBREAK(AttributeName)
|
||||
};
|
||||
|
||||
@ -124,6 +128,10 @@ DictTabInfo::Table::init(){
|
||||
FragmentCount = 0;
|
||||
FragmentDataLen = 0;
|
||||
memset(FragmentData, 0, sizeof(FragmentData));
|
||||
MaxRowsLow = 0;
|
||||
MaxRowsHigh = 0;
|
||||
MinRowsLow = 0;
|
||||
MinRowsHigh = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -37,8 +37,10 @@ printLQH_FRAG_REQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 recB
|
||||
fprintf(output, " noOfAttributes: %d noOfNullAttributes: %d keyLength: %d\n",
|
||||
sig->noOfAttributes, sig->noOfNullAttributes, sig->keyLength);
|
||||
|
||||
fprintf(output, " noOfPagesToPreAllocate: %d schemaVersion: %d nextLCP: %d\n",
|
||||
sig->noOfPagesToPreAllocate, sig->schemaVersion, sig->nextLCP);
|
||||
fprintf(output, " maxRowsLow/High: %u/%u minRowsLow/High: %u/%u\n",
|
||||
sig->maxRowsLow, sig->maxRowsHigh, sig->minRowsLow, sig->minRowsHigh);
|
||||
fprintf(output, " schemaVersion: %d nextLCP: %d\n",
|
||||
sig->schemaVersion, sig->nextLCP);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -648,5 +648,11 @@ const GsnName SignalNames [] = {
|
||||
,{ GSN_TUX_BOUND_INFO, "TUX_BOUND_INFO" }
|
||||
,{ GSN_ACC_LOCKREQ, "ACC_LOCKREQ" }
|
||||
|
||||
/* DICT LOCK */
|
||||
,{ GSN_DICT_LOCK_REQ, "DICT_LOCK_REQ" }
|
||||
,{ GSN_DICT_LOCK_CONF, "DICT_LOCK_CONF" }
|
||||
,{ GSN_DICT_LOCK_REF, "DICT_LOCK_REF" }
|
||||
,{ GSN_DICT_UNLOCK_ORD, "DICT_UNLOCK_ORD" }
|
||||
|
||||
};
|
||||
const unsigned short NO_OF_SIGNAL_NAMES = sizeof(SignalNames)/sizeof(GsnName);
|
||||
|
@ -5,7 +5,7 @@ Next DBACC 3002
|
||||
Next DBTUP 4013
|
||||
Next DBLQH 5043
|
||||
Next DBDICT 6007
|
||||
Next DBDIH 7174
|
||||
Next DBDIH 7177
|
||||
Next DBTC 8037
|
||||
Next CMVMI 9000
|
||||
Next BACKUP 10022
|
||||
@ -312,6 +312,10 @@ Test Crashes in handling node restarts
|
||||
|
||||
7170: Crash when receiving START_PERMREF (InitialStartRequired)
|
||||
|
||||
7174: Crash starting node before sending DICT_LOCK_REQ
|
||||
7175: Master sends one fake START_PERMREF (ZNODE_ALREADY_STARTING_ERROR)
|
||||
7176: Slave NR pretends master does not support DICT lock (rolling upgrade)
|
||||
|
||||
DICT:
|
||||
6000 Crash during NR when receiving DICTSTARTREQ
|
||||
6001 Crash during NR when receiving SCHEMA_INFO
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user