mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 23:25:34 +02:00
Merge paul@bk-internal.mysql.com:/home/bk/mysql-4.1
into teton.kitebird.com:/home/paul/mysql-4.1 include/m_string.h: Auto merged sql/share/czech/errmsg.txt: Auto merged sql/share/danish/errmsg.txt: Auto merged sql/share/dutch/errmsg.txt: Auto merged sql/share/english/errmsg.txt: Auto merged sql/share/estonian/errmsg.txt: Auto merged sql/share/french/errmsg.txt: Auto merged sql/share/german/errmsg.txt: Auto merged sql/share/greek/errmsg.txt: Auto merged sql/share/hungarian/errmsg.txt: Auto merged sql/share/italian/errmsg.txt: Auto merged sql/share/japanese/errmsg.txt: Auto merged sql/share/korean/errmsg.txt: Auto merged sql/share/norwegian-ny/errmsg.txt: Auto merged sql/share/norwegian/errmsg.txt: Auto merged sql/share/polish/errmsg.txt: Auto merged sql/share/portuguese/errmsg.txt: Auto merged sql/share/romanian/errmsg.txt: Auto merged sql/share/russian/errmsg.txt: Auto merged sql/share/serbian/errmsg.txt: Auto merged sql/share/slovak/errmsg.txt: Auto merged sql/share/spanish/errmsg.txt: Auto merged sql/share/swedish/errmsg.txt: Auto merged sql/share/ukrainian/errmsg.txt: Auto merged
This commit is contained in:
commit
9f71983575
115 changed files with 1896 additions and 1456 deletions
13
BUILD/compile-pentium-debug-max-no-embedded
Executable file
13
BUILD/compile-pentium-debug-max-no-embedded
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
#! /bin/sh
|
||||
|
||||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$pentium_cflags $debug_cflags"
|
||||
c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$pentium_configs $debug_configs"
|
||||
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-openssl --with-raid"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
@ -54,6 +54,7 @@ jani@janikt.pp.saunalahti.fi
|
|||
jani@rhols221.adsl.netsonic.fi
|
||||
jani@rhols221.arenanet.fi
|
||||
jani@ua126d19.elisa.omakaista.fi
|
||||
jani@ua141d10.elisa.omakaista.fi
|
||||
jani@ua167d18.elisa.omakaista.fi
|
||||
jcole@abel.spaceapes.com
|
||||
jcole@main.burghcom.com
|
||||
|
|
|
|||
|
|
@ -839,7 +839,9 @@ static int get_options(int argc, char **argv)
|
|||
opt_reconnect= 0;
|
||||
connect_flag= 0; /* Not in interactive mode */
|
||||
}
|
||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
||||
|
||||
if (strcmp(default_charset, charset_info->csname) &&
|
||||
!(charset_info= get_charset_by_csname(default_charset,
|
||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||
exit(1);
|
||||
if (argc > 1)
|
||||
|
|
|
|||
|
|
@ -311,7 +311,8 @@ static int get_options(int *argc, char ***argv)
|
|||
}
|
||||
|
||||
/* TODO: This variable is not yet used */
|
||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
||||
if (strcmp(default_charset, charset_info->csname) &&
|
||||
!(charset_info= get_charset_by_csname(default_charset,
|
||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||
exit(1);
|
||||
if (*argc > 0 && opt_alldbs)
|
||||
|
|
|
|||
|
|
@ -366,12 +366,17 @@ static void write_header(FILE *sql_file, char *db_name)
|
|||
}
|
||||
if (!opt_set_names)
|
||||
fprintf(sql_file,"\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=%s */;\n",default_charset);
|
||||
if (!path)
|
||||
{
|
||||
fprintf(md_result_file,"\
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;\n\
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n\
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;\n\
|
||||
");
|
||||
}
|
||||
fprintf(sql_file,
|
||||
"/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=\"%s\" */;\n",
|
||||
path?"":"NO_AUTO_VALUE_ON_ZERO");
|
||||
}
|
||||
return;
|
||||
} /* write_header */
|
||||
|
||||
|
|
@ -382,12 +387,15 @@ static void write_footer(FILE *sql_file)
|
|||
fputs("</mysqldump>\n", sql_file);
|
||||
else if (!opt_compact)
|
||||
{
|
||||
fprintf(md_result_file,"\n\
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;\n\
|
||||
fprintf(sql_file,"\n/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;\n");
|
||||
if (!path)
|
||||
{
|
||||
fprintf(md_result_file,"\
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;\n\
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;\n");
|
||||
}
|
||||
if (!opt_set_names)
|
||||
fprintf(md_result_file,
|
||||
fprintf(sql_file,
|
||||
"/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n");
|
||||
fputs("\n", sql_file);
|
||||
}
|
||||
|
|
@ -536,7 +544,8 @@ static int get_options(int *argc, char ***argv)
|
|||
my_progname);
|
||||
return(1);
|
||||
}
|
||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
||||
if (strcmp(default_charset, charset_info->csname) &&
|
||||
!(charset_info= get_charset_by_csname(default_charset,
|
||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||
exit(1);
|
||||
if ((*argc < 1 && !opt_alldbs) || (*argc > 0 && opt_alldbs))
|
||||
|
|
@ -664,7 +673,7 @@ static char *quote_name(const char *name, char *buff, my_bool force)
|
|||
while (*name)
|
||||
{
|
||||
if (*name == QUOTE_CHAR)
|
||||
*to= QUOTE_CHAR;
|
||||
*to++= QUOTE_CHAR;
|
||||
*to++= *name++;
|
||||
}
|
||||
to[0]=QUOTE_CHAR;
|
||||
|
|
@ -1152,7 +1161,11 @@ static uint getTableStructure(char *table, char* db)
|
|||
strpos=strmov(strpos,"(");
|
||||
}
|
||||
if (sql_file != md_result_file)
|
||||
{
|
||||
fputs("\n", sql_file);
|
||||
write_footer(sql_file);
|
||||
my_fclose(sql_file, MYF(MY_WME));
|
||||
}
|
||||
DBUG_RETURN(numFields);
|
||||
} /* getTableStructure */
|
||||
|
||||
|
|
@ -1662,7 +1675,7 @@ static int dump_all_tables_in_db(char *database)
|
|||
if (opt_xml)
|
||||
fputs("</database>\n", md_result_file);
|
||||
if (lock_tables)
|
||||
mysql_query(sock,"UNLOCK_TABLES");
|
||||
mysql_query(sock,"UNLOCK TABLES");
|
||||
return 0;
|
||||
} /* dump_all_tables_in_db */
|
||||
|
||||
|
|
@ -1939,6 +1952,7 @@ MASTER_LOG_POS=%s ;\n",row[0],row[1]);
|
|||
}
|
||||
}
|
||||
dbDisconnect(current_host);
|
||||
if (!path)
|
||||
write_footer(md_result_file);
|
||||
if (md_result_file != stdout)
|
||||
my_fclose(md_result_file, MYF(0));
|
||||
|
|
|
|||
|
|
@ -238,7 +238,8 @@ static int get_options(int *argc, char ***argv)
|
|||
fprintf(stderr, "You can't use --ignore (-i) and --replace (-r) at the same time.\n");
|
||||
return(1);
|
||||
}
|
||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
||||
if (strcmp(default_charset, charset_info->csname) &&
|
||||
!(charset_info= get_charset_by_csname(default_charset,
|
||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||
exit(1);
|
||||
if (*argc < 2)
|
||||
|
|
|
|||
|
|
@ -452,6 +452,9 @@ then
|
|||
FIND_PROC="$PS \$\$PID | grep mysqld > /dev/null"
|
||||
else
|
||||
case $SYSTEM_TYPE in
|
||||
*freebsd*)
|
||||
FIND_PROC="$PS p \$\$PID | grep mysqld > /dev/null"
|
||||
;;
|
||||
*darwin*)
|
||||
FIND_PROC="$PS -uaxww | grep mysqld | grep \" \$\$PID \" > /dev/null"
|
||||
;;
|
||||
|
|
@ -1825,7 +1828,7 @@ AC_CHECK_FUNCS(alarm bmove \
|
|||
strtol strtoul strtoll strtoull snprintf tempnam thr_setconcurrency \
|
||||
gethostbyaddr_r gethostbyname_r getpwnam \
|
||||
bfill bzero bcmp strstr strpbrk strerror \
|
||||
tell atod memcpy memmove \
|
||||
tell isinf memcpy memmove \
|
||||
setupterm strcasecmp sighold vidattr lrand48 localtime_r gmtime_r \
|
||||
sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
|
||||
pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
|
||||
|
|
|
|||
|
|
@ -391,7 +391,11 @@ extern my_bool my_parse_charset_xml(const char *bug, uint len,
|
|||
|
||||
#define use_mb(s) ((s)->cset->ismbchar != NULL)
|
||||
#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
|
||||
#ifdef USE_MB
|
||||
#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
|
||||
#else
|
||||
#define my_mbcharlen(s, a) 1
|
||||
#endif
|
||||
|
||||
#define my_caseup(s, a, l) ((s)->cset->caseup((s), (a), (l)))
|
||||
#define my_casedn(s, a, l) ((s)->cset->casedn((s), (a), (l)))
|
||||
|
|
|
|||
|
|
@ -216,6 +216,8 @@ extern char *strstr(const char *, const char *);
|
|||
extern int is_prefix(const char *, const char *);
|
||||
|
||||
/* Conversion routines */
|
||||
double my_strtod(const char *str, char **end);
|
||||
double my_atof(const char *nptr);
|
||||
|
||||
#ifdef USE_MY_ITOA
|
||||
extern char *my_itoa(int val,char *dst,int radix);
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||
#define FN_EXTCHAR '.'
|
||||
#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */
|
||||
#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */
|
||||
#define FN_PARENTDIR ".." /* Parentdirectory; Must be a string */
|
||||
#define FN_PARENTDIR ".." /* Parent directory; Must be a string */
|
||||
#define FN_DEVCHAR ':'
|
||||
|
||||
#ifndef FN_LIBCHAR
|
||||
|
|
@ -581,14 +581,6 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||
|
||||
/* Some defines of functions for portability */
|
||||
|
||||
#ifndef HAVE_ATOD
|
||||
#define atod atof
|
||||
#endif
|
||||
#ifdef USE_MY_ATOF
|
||||
#define atof my_atof
|
||||
extern void init_my_atof(void);
|
||||
extern double my_atof(const char*);
|
||||
#endif
|
||||
#undef remove /* Crashes MySQL on SCO 5.0.0 */
|
||||
#ifndef __WIN__
|
||||
#ifdef OS2
|
||||
|
|
@ -677,6 +669,10 @@ extern double my_atof(const char*);
|
|||
#define FLT_MAX ((float)3.40282346638528860e+38)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_ISINF
|
||||
#define isinf(X) 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
Max size that must be added to a so that we know Size to make
|
||||
adressable obj.
|
||||
|
|
|
|||
|
|
@ -57,9 +57,6 @@ typedef int my_socket;
|
|||
#include "mysql_com.h"
|
||||
#include "mysql_version.h"
|
||||
#include "typelib.h"
|
||||
#ifndef DBUG_OFF
|
||||
#define CHECK_EXTRA_ARGUMENTS
|
||||
#endif
|
||||
|
||||
#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */
|
||||
|
||||
|
|
@ -537,6 +534,8 @@ typedef struct st_mysql_stmt
|
|||
char *query; /* query buffer */
|
||||
MEM_ROOT mem_root; /* root allocations */
|
||||
my_ulonglong last_fetched_column; /* last fetched column */
|
||||
my_ulonglong affected_rows; /* copy of mysql->affected_rows
|
||||
after statement execution */
|
||||
unsigned long stmt_id; /* Id for prepared statement */
|
||||
unsigned int last_errno; /* error code */
|
||||
unsigned int param_count; /* parameters count */
|
||||
|
|
@ -575,6 +574,8 @@ typedef struct st_mysql_methods
|
|||
int (*unbuffered_fetch)(MYSQL *mysql, char **row);
|
||||
void (*free_embedded_thd)(MYSQL *mysql);
|
||||
const char *(*read_statistic)(MYSQL *mysql);
|
||||
int (*next_result)(MYSQL *mysql);
|
||||
int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd);
|
||||
#endif
|
||||
} MYSQL_METHODS;
|
||||
|
||||
|
|
|
|||
|
|
@ -2448,7 +2448,7 @@ srv_sprintf_innodb_monitor(
|
|||
"----------------------\n");
|
||||
buf += sprintf(buf,
|
||||
"Total memory allocated " ULINTPF
|
||||
"; in additional pool allocated" ULINTPF "\n",
|
||||
"; in additional pool allocated " ULINTPF "\n",
|
||||
ut_total_allocated_memory,
|
||||
mem_pool_get_reserved(mem_comm_pool));
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ target_sources = libmysql.c password.c manager.c \
|
|||
get_password.c errmsg.c
|
||||
|
||||
mystringsobjects = strmov.lo strxmov.lo strxnmov.lo strnmov.lo \
|
||||
strmake.lo strend.lo \
|
||||
strmake.lo strend.lo strtod.lo \
|
||||
strnlen.lo strfill.lo is_prefix.lo \
|
||||
int2str.lo str2int.lo strinstr.lo strcont.lo \
|
||||
strcend.lo bcmp.lo ctype-latin1.lo \
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt);
|
|||
MYSQL_DATA * cli_read_binary_rows(MYSQL_STMT *stmt);
|
||||
int cli_unbuffered_fetch(MYSQL *mysql, char **row);
|
||||
const char * cli_read_statistic(MYSQL *mysql);
|
||||
int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd);
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
int init_embedded_server(int argc, char **argv, char **groups);
|
||||
|
|
|
|||
|
|
@ -606,13 +606,42 @@ mysql_connect(MYSQL *mysql,const char *host,
|
|||
/**************************************************************************
|
||||
Change user and database
|
||||
**************************************************************************/
|
||||
int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd)
|
||||
{
|
||||
NET *net= &mysql->net;
|
||||
ulong pkt_length;
|
||||
|
||||
pkt_length= net_safe_read(mysql);
|
||||
|
||||
if (pkt_length == packet_error)
|
||||
return 1;
|
||||
|
||||
if (pkt_length == 1 && net->read_pos[0] == 254 &&
|
||||
mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
||||
{
|
||||
/*
|
||||
By sending this very specific reply server asks us to send scrambled
|
||||
password in old format. The reply contains scramble_323.
|
||||
*/
|
||||
scramble_323(buff, mysql->scramble, passwd);
|
||||
if (my_net_write(net, buff, SCRAMBLE_LENGTH_323 + 1) || net_flush(net))
|
||||
{
|
||||
net->last_errno= CR_SERVER_LOST;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
strmov(net->last_error,ER(net->last_errno));
|
||||
return 1;
|
||||
}
|
||||
/* Read what server thinks about out new auth message report */
|
||||
if (net_safe_read(mysql) == packet_error)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
|
||||
const char *passwd, const char *db)
|
||||
{
|
||||
char buff[512],*end=buff;
|
||||
NET *net= &mysql->net;
|
||||
ulong pkt_length;
|
||||
DBUG_ENTER("mysql_change_user");
|
||||
|
||||
if (!user)
|
||||
|
|
@ -646,31 +675,8 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
|
|||
/* Write authentication package */
|
||||
simple_command(mysql,COM_CHANGE_USER, buff,(ulong) (end-buff),1);
|
||||
|
||||
pkt_length= net_safe_read(mysql);
|
||||
|
||||
if (pkt_length == packet_error)
|
||||
goto error;
|
||||
|
||||
if (pkt_length == 1 && net->read_pos[0] == 254 &&
|
||||
mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
||||
{
|
||||
/*
|
||||
By sending this very specific reply server asks us to send scrambled
|
||||
password in old format. The reply contains scramble_323.
|
||||
*/
|
||||
scramble_323(buff, mysql->scramble, passwd);
|
||||
if (my_net_write(net, buff, SCRAMBLE_LENGTH_323 + 1) || net_flush(net))
|
||||
{
|
||||
net->last_errno= CR_SERVER_LOST;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
strmov(net->last_error,ER(net->last_errno));
|
||||
goto error;
|
||||
}
|
||||
/* Read what server thinks about out new auth message report */
|
||||
if (net_safe_read(mysql) == packet_error)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((*mysql->methods->read_change_user_result)(mysql, buff, passwd))
|
||||
DBUG_RETURN(1);
|
||||
/* Free old connect information */
|
||||
my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR));
|
||||
my_free(mysql->passwd,MYF(MY_ALLOW_ZERO_PTR));
|
||||
|
|
@ -681,9 +687,6 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
|
|||
mysql->passwd=my_strdup(passwd,MYF(MY_WME));
|
||||
mysql->db= db ? my_strdup(db,MYF(MY_WME)) : 0;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
error:
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
#if defined(HAVE_GETPWUID) && defined(NO_GETPWUID_DECL)
|
||||
|
|
@ -1653,14 +1656,6 @@ mysql_prepare(MYSQL *mysql, const char *query, ulong length)
|
|||
DBUG_ENTER("mysql_prepare");
|
||||
DBUG_ASSERT(mysql != 0);
|
||||
|
||||
#ifdef CHECK_EXTRA_ARGUMENTS
|
||||
if (!query)
|
||||
{
|
||||
set_mysql_error(mysql, CR_NULL_POINTER, unknown_sqlstate);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(stmt= (MYSQL_STMT *) my_malloc(sizeof(MYSQL_STMT),
|
||||
MYF(MY_WME | MY_ZEROFILL))) ||
|
||||
!(stmt->query= my_strdup_with_length((byte *) query, length, MYF(0))))
|
||||
|
|
@ -2018,6 +2013,7 @@ static my_bool execute(MYSQL_STMT * stmt, char *packet, ulong length)
|
|||
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
stmt->affected_rows= mysql->affected_rows;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
|
@ -2086,19 +2082,6 @@ int STDCALL mysql_execute(MYSQL_STMT *stmt)
|
|||
{
|
||||
DBUG_ENTER("mysql_execute");
|
||||
|
||||
if (stmt->state == MY_ST_UNKNOWN)
|
||||
{
|
||||
set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
#ifdef CHECK_EXTRA_ARGUMENTS
|
||||
if (stmt->param_count && !stmt->param_buffers)
|
||||
{
|
||||
/* Parameters exists, but no bound buffers */
|
||||
set_stmt_error(stmt, CR_NOT_ALL_PARAMS_BOUND, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
#endif
|
||||
if ((*stmt->mysql->methods->stmt_execute)(stmt))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
|
|
@ -2127,7 +2110,7 @@ ulong STDCALL mysql_param_count(MYSQL_STMT * stmt)
|
|||
|
||||
my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt)
|
||||
{
|
||||
return stmt->mysql->last_used_con->affected_rows;
|
||||
return stmt->affected_rows;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2144,19 +2127,6 @@ my_bool STDCALL mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND * bind)
|
|||
MYSQL_BIND *param, *end;
|
||||
DBUG_ENTER("mysql_bind_param");
|
||||
|
||||
#ifdef CHECK_EXTRA_ARGUMENTS
|
||||
if (stmt->state == MY_ST_UNKNOWN)
|
||||
{
|
||||
set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (!stmt->param_count)
|
||||
{
|
||||
set_stmt_error(stmt, CR_NO_PARAMETERS_EXISTS, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Allocated on prepare */
|
||||
memcpy((char*) stmt->params, (char*) bind,
|
||||
sizeof(MYSQL_BIND) * stmt->param_count);
|
||||
|
|
@ -2279,11 +2249,6 @@ mysql_send_long_data(MYSQL_STMT *stmt, uint param_number,
|
|||
DBUG_PRINT("enter",("param no : %d, data : %lx, length : %ld",
|
||||
param_number, data, length));
|
||||
|
||||
if (param_number >= stmt->param_count)
|
||||
{
|
||||
set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
param= stmt->params+param_number;
|
||||
if (param->buffer_type < MYSQL_TYPE_TINY_BLOB ||
|
||||
param->buffer_type > MYSQL_TYPE_STRING)
|
||||
|
|
@ -2853,18 +2818,6 @@ my_bool STDCALL mysql_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
|
|||
DBUG_ENTER("mysql_bind_result");
|
||||
DBUG_ASSERT(stmt != 0);
|
||||
|
||||
#ifdef CHECK_EXTRA_ARGUMENTS
|
||||
if (stmt->state == MY_ST_UNKNOWN)
|
||||
{
|
||||
set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (!bind)
|
||||
{
|
||||
set_stmt_error(stmt, CR_NULL_POINTER, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
#endif
|
||||
if (!(bind_count= stmt->field_count) &&
|
||||
!(bind_count= alloc_stmt_fields(stmt)))
|
||||
DBUG_RETURN(0);
|
||||
|
|
@ -3035,6 +2988,15 @@ int STDCALL mysql_fetch(MYSQL_STMT *stmt)
|
|||
}
|
||||
else /* un-buffered */
|
||||
{
|
||||
if (mysql->status != MYSQL_STATUS_GET_RESULT)
|
||||
{
|
||||
if (!stmt->field_count)
|
||||
goto no_data;
|
||||
|
||||
set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
if((*mysql->methods->unbuffered_fetch)(mysql, ( char **)&row))
|
||||
{
|
||||
set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
|
||||
|
|
@ -3065,7 +3027,7 @@ no_data:
|
|||
mysql_fetch_column()
|
||||
stmt Prepared statement handler
|
||||
bind Where data should be placed. Should be filled in as
|
||||
when calling mysql_bind_param()
|
||||
when calling mysql_bind_result()
|
||||
column Column to fetch (first column is 0)
|
||||
ulong offset Offset in result data (to fetch blob in pieces)
|
||||
This is normally 0
|
||||
|
|
@ -3083,14 +3045,6 @@ int STDCALL mysql_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
|
|||
if (!stmt->current_row)
|
||||
goto no_data;
|
||||
|
||||
#ifdef CHECK_EXTRA_ARGUMENTS
|
||||
if (column >= stmt->field_count)
|
||||
{
|
||||
set_stmt_errmsg(stmt, "Invalid column descriptor",1, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (param->null_field)
|
||||
{
|
||||
if (bind->is_null)
|
||||
|
|
@ -3223,6 +3177,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
mysql->affected_rows= result->row_count= result->data->rows;
|
||||
stmt->affected_rows= result->row_count;
|
||||
result->data_cursor= result->data->data;
|
||||
result->fields= stmt->fields;
|
||||
result->field_count= stmt->field_count;
|
||||
|
|
@ -3510,7 +3465,6 @@ my_bool STDCALL mysql_more_results(MYSQL *mysql)
|
|||
/*
|
||||
Reads and returns the next query results
|
||||
*/
|
||||
|
||||
int STDCALL mysql_next_result(MYSQL *mysql)
|
||||
{
|
||||
DBUG_ENTER("mysql_next_result");
|
||||
|
|
@ -3529,7 +3483,7 @@ int STDCALL mysql_next_result(MYSQL *mysql)
|
|||
mysql->affected_rows= ~(my_ulonglong) 0;
|
||||
|
||||
if (mysql->last_used_con->server_status & SERVER_MORE_RESULTS_EXISTS)
|
||||
DBUG_RETURN((*mysql->methods->read_query_result)(mysql));
|
||||
DBUG_RETURN((*mysql->methods->next_result)(mysql));
|
||||
|
||||
DBUG_RETURN(-1); /* No more results */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,25 @@ static MYSQL_RES * emb_mysql_store_result(MYSQL *mysql)
|
|||
return mysql_store_result(mysql);
|
||||
}
|
||||
|
||||
int emb_next_result(MYSQL *mysql)
|
||||
{
|
||||
THD *thd= (THD*)mysql->thd;
|
||||
DBUG_ENTER("emb_next_result");
|
||||
|
||||
if (emb_advanced_command(mysql, COM_QUERY,0,0,
|
||||
thd->query_rest.ptr(),thd->query_rest.length(),1)
|
||||
|| emb_mysql_read_query_result(mysql))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
DBUG_RETURN(0); /* No more results */
|
||||
}
|
||||
|
||||
int emb_read_change_user_result(MYSQL *mysql,
|
||||
char *buff __attribute__((unused)),
|
||||
const char *passwd __attribute__((unused)))
|
||||
{
|
||||
return mysql_errno(mysql);
|
||||
}
|
||||
|
||||
MYSQL_METHODS embedded_methods=
|
||||
{
|
||||
|
|
@ -259,7 +278,9 @@ MYSQL_METHODS embedded_methods=
|
|||
emb_read_binary_rows,
|
||||
emb_unbuffered_fetch,
|
||||
emb_free_embedded_thd,
|
||||
emb_read_statistic
|
||||
emb_read_statistic,
|
||||
emb_next_result,
|
||||
emb_read_change_user_result
|
||||
};
|
||||
|
||||
C_MODE_END
|
||||
|
|
@ -599,8 +620,8 @@ bool Protocol::send_fields(List<Item> *list, uint flag)
|
|||
}
|
||||
else
|
||||
{
|
||||
client_field->def= strdup_root(field_alloc, tmp.ptr());
|
||||
client_field->def_length= tmp.length();
|
||||
client_field->def= strdup_root(field_alloc, res->ptr());
|
||||
client_field->def_length= res->length();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -676,7 +697,10 @@ send_ok(THD *thd,ha_rows affected_rows,ulonglong id,const char *message)
|
|||
mysql->affected_rows= affected_rows;
|
||||
mysql->insert_id= id;
|
||||
if (message)
|
||||
{
|
||||
strmake(thd->net.last_error, message, sizeof(thd->net.last_error)-1);
|
||||
mysql->info= thd->net.last_error;
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,12 +61,12 @@ typedef struct st_ftb_expr FTB_EXPR;
|
|||
struct st_ftb_expr
|
||||
{
|
||||
FTB_EXPR *up;
|
||||
my_off_t docid[2];
|
||||
uint flags;
|
||||
/* ^^^^^^^^^^^^^^^^^^ FTB_{EXPR,WORD} common section */
|
||||
my_off_t docid[2];
|
||||
float weight;
|
||||
float cur_weight;
|
||||
byte *quot, *qend;
|
||||
uint flags;
|
||||
uint yesses; /* number of "yes" words matched */
|
||||
uint nos; /* number of "no" words matched */
|
||||
uint ythresh; /* number of "yes" words in expr */
|
||||
|
|
@ -76,13 +76,13 @@ struct st_ftb_expr
|
|||
typedef struct st_ftb_word
|
||||
{
|
||||
FTB_EXPR *up;
|
||||
MI_KEYDEF *keyinfo;
|
||||
my_off_t docid[2]; /* for index search and for scan */
|
||||
uint flags;
|
||||
/* ^^^^^^^^^^^^^^^^^^ FTB_{EXPR,WORD} common section */
|
||||
my_off_t docid[2]; /* for index search and for scan */
|
||||
my_off_t key_root;
|
||||
MI_KEYDEF *keyinfo;
|
||||
float weight;
|
||||
uint ndepth;
|
||||
uint flags;
|
||||
uint len;
|
||||
uchar off;
|
||||
byte word[1];
|
||||
|
|
|
|||
|
|
@ -93,20 +93,22 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end,
|
|||
for (;doc<end;doc++)
|
||||
{
|
||||
if (true_word_char(cs,*doc)) break;
|
||||
if (*doc == FTB_RQUOT && param->quot) {
|
||||
if (*doc == FTB_RQUOT && param->quot)
|
||||
{
|
||||
param->quot=doc;
|
||||
*start=doc+1;
|
||||
return 3; /* FTB_RBR */
|
||||
}
|
||||
if ((*doc == FTB_LBR || *doc == FTB_RBR || *doc == FTB_LQUOT)
|
||||
&& !param->quot)
|
||||
if (!param->quot)
|
||||
{
|
||||
if (*doc == FTB_LBR || *doc == FTB_RBR || *doc == FTB_LQUOT)
|
||||
{
|
||||
/* param->prev=' '; */
|
||||
*start=doc+1;
|
||||
if (*doc == FTB_LQUOT) param->quot=*start;
|
||||
return (*doc == FTB_RBR)+2;
|
||||
}
|
||||
if (param->prev == ' ' && !param->quot)
|
||||
if (param->prev == ' ')
|
||||
{
|
||||
if (*doc == FTB_YES ) { param->yesno=+1; continue; } else
|
||||
if (*doc == FTB_EGAL) { param->yesno= 0; continue; } else
|
||||
|
|
@ -115,6 +117,7 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end,
|
|||
if (*doc == FTB_DEC ) { param->plusminus--; continue; } else
|
||||
if (*doc == FTB_NEG ) { param->pmsign=!param->pmsign; continue; }
|
||||
}
|
||||
}
|
||||
param->prev=*doc;
|
||||
param->yesno=(FTB_YES==' ') ? 1 : (param->quot != 0);
|
||||
param->plusminus=param->pmsign=0;
|
||||
|
|
@ -139,6 +142,11 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end,
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
if (param->quot)
|
||||
{
|
||||
param->quot=*start=doc;
|
||||
return 3; /* FTB_RBR */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,12 +64,6 @@ test
|
|||
select cast(_koi8r'ÔÅÓÔ' as char character set cp1251);
|
||||
cast(_koi8r'ÔÅÓÔ' as char character set cp1251)
|
||||
òåñò
|
||||
select convert(_latin1'test', "latin1_german1_ci", "latin1_swedish_ci");
|
||||
convert(_latin1'test', "latin1_german1_ci", "latin1_swedish_ci")
|
||||
test
|
||||
select convert(_koi8r'ÔĹÓÔ', "koi8r_general_ci", "cp1251_general_ci");
|
||||
convert(_koi8r'ÔĹÓÔ', "koi8r_general_ci", "cp1251_general_ci")
|
||||
ňĺńň
|
||||
create table t1 select cast(_koi8r'ÔÅÓÔ' as char character set cp1251) as t;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
|
|
|
|||
|
|
@ -340,129 +340,6 @@ CYR CAPIT SOFT SIGN
|
|||
CYR CAPIT E ü ü
|
||||
CYR CAPIT YU à à
|
||||
CYR CAPIT YA ñ ñ
|
||||
select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
|
||||
CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci') comment
|
||||
a LAT SMALL A
|
||||
b LAT SMALL B
|
||||
c LAT SMALL C
|
||||
d LAT SMALL D
|
||||
e LAT SMALL E
|
||||
f LAT SMALL F
|
||||
g LAT SMALL G
|
||||
h LAT SMALL H
|
||||
i LAT SMALL I
|
||||
j LAT SMALL J
|
||||
k LAT SMALL K
|
||||
l LAT SMALL L
|
||||
m LAT SMALL M
|
||||
n LAT SMALL N
|
||||
o LAT SMALL O
|
||||
p LAT SMALL P
|
||||
q LAT SMALL Q
|
||||
r LAT SMALL R
|
||||
s LAT SMALL S
|
||||
t LAT SMALL T
|
||||
u LAT SMALL U
|
||||
v LAT SMALL V
|
||||
w LAT SMALL W
|
||||
x LAT SMALL X
|
||||
y LAT SMALL Y
|
||||
z LAT SMALL Z
|
||||
A LAT CAPIT A
|
||||
B LAT CAPIT B
|
||||
C LAT CAPIT C
|
||||
D LAT CAPIT D
|
||||
E LAT CAPIT E
|
||||
F LAT CAPIT F
|
||||
G LAT CAPIT G
|
||||
H LAT CAPIT H
|
||||
I LAT CAPIT I
|
||||
J LAT CAPIT J
|
||||
K LAT CAPIT K
|
||||
L LAT CAPIT L
|
||||
M LAT CAPIT M
|
||||
N LAT CAPIT N
|
||||
O LAT CAPIT O
|
||||
P LAT CAPIT P
|
||||
Q LAT CAPIT Q
|
||||
R LAT CAPIT R
|
||||
S LAT CAPIT S
|
||||
T LAT CAPIT T
|
||||
U LAT CAPIT U
|
||||
V LAT CAPIT V
|
||||
W LAT CAPIT W
|
||||
X LAT CAPIT X
|
||||
Y LAT CAPIT Y
|
||||
Z LAT CAPIT Z
|
||||
â CYR SMALL A
|
||||
÷ CYR SMALL BE
|
||||
ţ CYR SMALL VE
|
||||
ú CYR SMALL GE
|
||||
ä CYR SMALL DE
|
||||
ĺ CYR SMALL IE
|
||||
? CYR SMALL IO
|
||||
ă CYR SMALL ZHE
|
||||
˙ CYR SMALL ZE
|
||||
ę CYR SMALL I
|
||||
ě CYR SMALL KA
|
||||
í CYR SMALL EL
|
||||
î CYR SMALL EM
|
||||
ď CYR SMALL EN
|
||||
đ CYR SMALL O
|
||||
ň CYR SMALL PE
|
||||
ô CYR SMALL ER
|
||||
ő CYR SMALL ES
|
||||
ć CYR SMALL TE
|
||||
č CYR SMALL U
|
||||
ö CYR SMALL EF
|
||||
é CYR SMALL HA
|
||||
ç CYR SMALL TSE
|
||||
ŕ CYR SMALL CHE
|
||||
ů CYR SMALL SHA
|
||||
ü CYR SMALL SCHA
|
||||
ń CYR SMALL HARD SIGN
|
||||
ý CYR SMALL YERU
|
||||
ű CYR SMALL SOFT SIGN
|
||||
ř CYR SMALL E
|
||||
á CYR SMALL YU
|
||||
ó CYR SMALL YA
|
||||
 CYR CAPIT A
|
||||
× CYR CAPIT BE
|
||||
Ţ CYR CAPIT VE
|
||||
Ú CYR CAPIT GE
|
||||
Ä CYR CAPIT DE
|
||||
Ĺ CYR CAPIT IE
|
||||
? CYR CAPIT IO
|
||||
Ă CYR CAPIT ZHE
|
||||
ß CYR CAPIT ZE
|
||||
Ę CYR CAPIT I
|
||||
Ě CYR CAPIT KA
|
||||
Í CYR CAPIT EL
|
||||
Î CYR CAPIT EM
|
||||
Ď CYR CAPIT EN
|
||||
Đ CYR CAPIT O
|
||||
Ň CYR CAPIT PE
|
||||
Ô CYR CAPIT ER
|
||||
Ő CYR CAPIT ES
|
||||
Ć CYR CAPIT TE
|
||||
Č CYR CAPIT U
|
||||
Ö CYR CAPIT EF
|
||||
É CYR CAPIT HA
|
||||
Ç CYR CAPIT TSE
|
||||
Ŕ CYR CAPIT CHE
|
||||
Ů CYR CAPIT SHA
|
||||
Ü CYR CAPIT SCHA
|
||||
Ń CYR CAPIT HARD SIGN
|
||||
Ý CYR CAPIT YERU
|
||||
Ű CYR CAPIT SOFT SIGN
|
||||
Ř CYR CAPIT E
|
||||
Á CYR CAPIT YU
|
||||
Ó CYR CAPIT YA
|
||||
explain extended select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 116
|
||||
Warnings:
|
||||
Note 1003 select high_priority convert(test.t1.koi8_ru_f,_latin1'utf8_general_ci',_latin1'cp1251_general_ci') AS `CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci')`,test.t1.comment AS `comment` from test.t1
|
||||
ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL;
|
||||
UPDATE t1 SET bin_f=koi8_ru_f;
|
||||
SELECT COUNT(DISTINCT bin_f),COUNT(DISTINCT koi8_ru_f),COUNT(DISTINCT utf8_f) FROM t1;
|
||||
|
|
|
|||
|
|
@ -88,3 +88,84 @@ select s1,hex(s1),char_length(s1),octet_length(s1) from t1;
|
|||
s1 hex(s1) char_length(s1) octet_length(s1)
|
||||
Á D0B0 1 2
|
||||
drop table t1;
|
||||
create table t1 (s1 tinytext character set utf8);
|
||||
insert into t1 select repeat('a',300);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('Ñ',300);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('aÑ',300);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('Ña',300);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('ÑÑ',300);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161
|
||||
D18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18F
|
||||
61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F
|
||||
D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61D18F61
|
||||
D18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18FD18F
|
||||
select length(s1),char_length(s1) from t1;
|
||||
length(s1) char_length(s1)
|
||||
255 255
|
||||
254 127
|
||||
255 170
|
||||
255 170
|
||||
254 127
|
||||
drop table t1;
|
||||
create table t1 (s1 text character set utf8);
|
||||
insert into t1 select repeat('a',66000);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('Ñ',66000);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('aÑ',66000);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('Ña',66000);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
insert into t1 select repeat('ÑÑ',66000);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
select length(s1),char_length(s1) from t1;
|
||||
length(s1) char_length(s1)
|
||||
65535 65535
|
||||
65534 32767
|
||||
65535 43690
|
||||
65535 43690
|
||||
65534 32767
|
||||
drop table t1;
|
||||
create table t1 (s1 char(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
drop table t1;
|
||||
create table t1 (s1 text character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
Warnings:
|
||||
Warning 1264 Data truncated for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
drop table t1;
|
||||
create table t1 (a char(160) character set utf8, primary key(a));
|
||||
ERROR HY000: Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the storage engine doesn't support unique sub keys
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ explain select * from t1 as x1, (select * from t1) as x2;
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY x1 ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 4
|
||||
2 DERIVED x1 ALL NULL NULL NULL NULL 4
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 4
|
||||
drop table if exists t2,t3;
|
||||
select * from (select 1) as a;
|
||||
1
|
||||
|
|
@ -141,7 +141,7 @@ a t
|
|||
explain select count(*) from t1 as tt1, (select * from t1) as tt2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
2 DERIVED tt1 ALL NULL NULL NULL NULL 10000
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 10000
|
||||
drop table t1;
|
||||
SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a) as a )) as b;
|
||||
(SELECT * FROM (SELECT 1 as a) as a )
|
||||
|
|
@ -189,13 +189,13 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 PRIMARY m2 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 6 Using where
|
||||
2 DERIVED mp ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
2 DERIVED m2 index NULL PRIMARY 3 NULL 9 Using index
|
||||
2 DERIVED m1 eq_ref PRIMARY PRIMARY 3 test.mp.mat_id 1
|
||||
explain SELECT STRAIGHT_JOIN d.pla_id, m2.test FROM t1 m2 INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY m2 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 6 Using where
|
||||
2 DERIVED mp ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
2 DERIVED m2 index NULL PRIMARY 3 NULL 9 Using index
|
||||
2 DERIVED m1 eq_ref PRIMARY PRIMARY 3 test.mp.mat_id 1
|
||||
drop table t1,t2;
|
||||
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
||||
x
|
||||
|
|
@ -213,7 +213,7 @@ ERROR 42000: You have an error in your SQL syntax. Check the manual that corres
|
|||
create table t1 (a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
update (select * from t1) as t1 set a = 5;
|
||||
ERROR HY000: The target table t1 of the UPDATE is not updatable.
|
||||
ERROR HY000: The target table t1 of the UPDATE is not updatable
|
||||
delete from (select * from t1);
|
||||
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(select * from t1)' at line 1
|
||||
insert into (select * from t1) values (5);
|
||||
|
|
@ -229,7 +229,7 @@ explain select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 THEMAX.E2 1 Using where
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DERIVED A ALL NULL NULL NULL NULL 2 Using where
|
||||
3 DEPENDENT SUBQUERY B ALL NULL NULL NULL NULL 2 Using where
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
|
|
@ -264,13 +264,17 @@ N M
|
|||
2 2
|
||||
3 0
|
||||
UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2, P2.N = 2;
|
||||
ERROR HY000: The target table P2 of the UPDATE is not updatable.
|
||||
ERROR HY000: The target table P2 of the UPDATE is not updatable
|
||||
UPDATE `t1` AS P1 INNER JOIN (SELECT aaaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2;
|
||||
ERROR 42S22: Unknown column 'aaaa' in 'field list'
|
||||
delete P1.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
|
||||
select * from t1;
|
||||
N M
|
||||
3 0
|
||||
delete P1.*,P2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
|
||||
ERROR HY000: The target table P2 of the DELETE is not updatable.
|
||||
ERROR HY000: The target table P2 of the DELETE is not updatable
|
||||
delete P1.* from `t1` AS P1 INNER JOIN (SELECT aaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
|
||||
ERROR 42S22: Unknown column 'aaa' in 'field list'
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
OBJECTID int(11) NOT NULL default '0',
|
||||
|
|
@ -294,3 +298,25 @@ INSERT INTO t3 VALUES (1000,0.00),(1001,0.25),(1002,0.50),(1003,0.75),(1008,1.00
|
|||
select 497, TMP.ID, NULL from (select 497 as ID, MAX(t3.DATA) as DATA from t1 join t2 on (t1.ObjectID = t2.ID) join t3 on (t1.ObjectID = t3.ID) group by t2.ParID order by DATA DESC) as TMP;
|
||||
497 ID NULL
|
||||
drop table t1, t2, t3;
|
||||
CREATE TABLE t1 (name char(1) default NULL, val int(5) default NULL);
|
||||
INSERT INTO t1 VALUES ('a',1), ('a',2), ('a',2), ('a',2), ('a',3), ('a',6), ('a',7), ('a',11), ('a',11), ('a',12), ('a',13), ('a',13), ('a',20), ('b',2), ('b',3), ('b',4), ('b',5);
|
||||
SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
|
||||
name median
|
||||
a 7.0000
|
||||
b 3.5000
|
||||
explain SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 3 Using temporary; Using filesort
|
||||
2 DERIVED x ALL NULL NULL NULL NULL 17 Using temporary; Using filesort
|
||||
2 DERIVED y ALL NULL NULL NULL NULL 17 Using where
|
||||
drop table t1;
|
||||
create table t2 (a int, b int, primary key (a));
|
||||
insert into t2 values (1,7),(2,7);
|
||||
explain select a from t2 where a>1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range PRIMARY PRIMARY 4 NULL 2 Using where; Using index
|
||||
explain select a from (select a from t2 where a>1) tt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
||||
2 DERIVED t2 range PRIMARY PRIMARY 4 NULL 2 Using where; Using index
|
||||
drop table t2;
|
||||
|
|
|
|||
|
|
@ -140,6 +140,9 @@ select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE);
|
|||
a b
|
||||
select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
|
||||
a b
|
||||
select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE);
|
||||
a b
|
||||
Full-text search in MySQL implements vector space model
|
||||
select * from t1 where MATCH a AGAINST ("search" IN BOOLEAN MODE);
|
||||
a b
|
||||
Full-text search in MySQL implements vector space model
|
||||
|
|
|
|||
|
|
@ -51,6 +51,20 @@ t1 CREATE TABLE `t1` (
|
|||
`version` char(40) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
select charset(charset(_utf8'a')), charset(collation(_utf8'a'));
|
||||
charset(charset(_utf8'a')) charset(collation(_utf8'a'))
|
||||
utf8 utf8
|
||||
select collation(charset(_utf8'a')), collation(collation(_utf8'a'));
|
||||
collation(charset(_utf8'a')) collation(collation(_utf8'a'))
|
||||
utf8_general_ci utf8_general_ci
|
||||
create table t1 select charset(_utf8'a'), collation(_utf8'a');
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`charset(_utf8'a')` char(64) character set utf8 NOT NULL default '',
|
||||
`collation(_utf8'a')` char(64) character set utf8 NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
select TRUE,FALSE,NULL;
|
||||
TRUE FALSE NULL
|
||||
1 0 NULL
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ grant ALL PRIVILEGES on *.* to drop_user2@localhost with GRANT OPTION;
|
|||
show grants for drop_user2@localhost;
|
||||
Grants for drop_user2@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'drop_user2'@'localhost' WITH GRANT OPTION
|
||||
revoke all privileges, grant from drop_user2@localhost;
|
||||
revoke all privileges, grant option from drop_user2@localhost;
|
||||
drop user drop_user2@localhost;
|
||||
grant ALL PRIVILEGES on *.* to drop_user@localhost with GRANT OPTION;
|
||||
grant ALL PRIVILEGES on test.* to drop_user@localhost with GRANT OPTION;
|
||||
|
|
@ -146,12 +146,12 @@ Grants for drop_user@localhost
|
|||
GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
|
||||
GRANT ALL PRIVILEGES ON `test`.* TO 'drop_user'@'localhost' WITH GRANT OPTION
|
||||
GRANT SELECT (a) ON `test`.`t1` TO 'drop_user'@'localhost'
|
||||
revoke all privileges, grant from drop_user@localhost;
|
||||
revoke all privileges, grant option from drop_user@localhost;
|
||||
show grants for drop_user@localhost;
|
||||
Grants for drop_user@localhost
|
||||
GRANT USAGE ON *.* TO 'drop_user'@'localhost'
|
||||
drop user drop_user@localhost;
|
||||
revoke all privileges, grant from drop_user@localhost;
|
||||
revoke all privileges, grant option from drop_user@localhost;
|
||||
ERROR HY000: Can't revoke all privileges, grant for one or more of the requested users
|
||||
grant select(a) on test.t1 to drop_user1@localhost;
|
||||
grant select on test.t1 to drop_user2@localhost;
|
||||
|
|
@ -160,7 +160,7 @@ grant select on *.* to drop_user4@localhost;
|
|||
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
|
||||
drop_user4@localhost;
|
||||
ERROR HY000: Can't drop one or more of the requested users
|
||||
revoke all privileges, grant from drop_user1@localhost, drop_user2@localhost,
|
||||
revoke all privileges, grant option from drop_user1@localhost, drop_user2@localhost,
|
||||
drop_user3@localhost, drop_user4@localhost;
|
||||
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
|
||||
drop_user4@localhost;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ INSERT INTO t1 VALUES ("1234567890123456789012345678901234567890"),
|
|||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
CREATE TABLE `t1` (
|
||||
`a` decimal(240,20) default NULL
|
||||
|
|
@ -50,7 +50,7 @@ INSERT INTO t1 VALUES (-9e999999);
|
|||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
CREATE TABLE `t1` (
|
||||
`a` double default NULL
|
||||
|
|
@ -119,7 +119,7 @@ INSERT INTO t1 VALUES (_koi8r x'C1C2C3C4C5');
|
|||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
CREATE TABLE `t1` (
|
||||
`a` varchar(255) default NULL
|
||||
|
|
@ -142,7 +142,7 @@ CREATE TABLE t1 (a int) ENGINE=MYISAM;
|
|||
INSERT INTO t1 VALUES (1), (2);
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) default NULL
|
||||
|
|
@ -161,7 +161,7 @@ UNLOCK TABLES;
|
|||
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) default NULL
|
||||
|
|
@ -179,3 +179,44 @@ UNLOCK TABLES;
|
|||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
|
||||
DROP TABLE t1;
|
||||
create table ```a` (i int);
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;
|
||||
DROP TABLE IF EXISTS ```a`;
|
||||
CREATE TABLE ```a` (
|
||||
`i` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
||||
|
||||
/*!40000 ALTER TABLE ```a` DISABLE KEYS */;
|
||||
LOCK TABLES ```a` WRITE;
|
||||
UNLOCK TABLES;
|
||||
/*!40000 ALTER TABLE ```a` ENABLE KEYS */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
|
||||
drop table ```a`;
|
||||
create table t1(a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="" */;
|
||||
DROP TABLE IF EXISTS `t1`;
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
|
||||
1
|
||||
2
|
||||
3
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
|
|||
select count(*) from t1;
|
||||
count(*)
|
||||
69
|
||||
create table t2 like t1;
|
||||
drop table t1;
|
||||
show binlog events;
|
||||
Log_name Pos Event_type Server_id Orig_log_pos Info
|
||||
|
|
@ -27,7 +28,8 @@ master-bin.000001 263 Query 1 263 use `test`; drop table t1
|
|||
master-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
|
||||
master-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
|
||||
master-bin.000001 1056 Exec_load 1 1056 ;file_id=1
|
||||
master-bin.000001 1079 Query 1 1079 use `test`; drop table t1
|
||||
master-bin.000001 1079 Query 1 1079 use `test`; create table t2 like t1
|
||||
master-bin.000001 1137 Query 1 1137 use `test`; drop table t1
|
||||
show binlog events from 79 limit 1;
|
||||
Log_name Pos Event_type Server_id Orig_log_pos Info
|
||||
master-bin.000001 79 Query 1 79 use `test`; create table t1(n int not null auto_increment primary key)
|
||||
|
|
@ -38,6 +40,10 @@ master-bin.000001 172 Intvar 1 172 INSERT_ID=1
|
|||
show binlog events from 79 limit 2,1;
|
||||
Log_name Pos Event_type Server_id Orig_log_pos Info
|
||||
master-bin.000001 200 Query 1 200 use `test`; insert into t1 values (NULL)
|
||||
show binlog events from 79 limit 2,2;
|
||||
Log_name Pos Event_type Server_id Orig_log_pos Info
|
||||
master-bin.000001 200 Query 1 200 use `test`; insert into t1 values (NULL)
|
||||
master-bin.000001 263 Query 1 263 use `test`; drop table t1
|
||||
flush logs;
|
||||
create table t5 (a int);
|
||||
drop table t5;
|
||||
|
|
@ -57,8 +63,9 @@ master-bin.000001 263 Query 1 263 use `test`; drop table t1
|
|||
master-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
|
||||
master-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
|
||||
master-bin.000001 1056 Exec_load 1 1056 ;file_id=1
|
||||
master-bin.000001 1079 Query 1 1079 use `test`; drop table t1
|
||||
master-bin.000001 1127 Rotate 1 1127 master-bin.000002;pos=4
|
||||
master-bin.000001 1079 Query 1 1079 use `test`; create table t2 like t1
|
||||
master-bin.000001 1137 Query 1 1137 use `test`; drop table t1
|
||||
master-bin.000001 1185 Rotate 1 1185 master-bin.000002;pos=4
|
||||
show binlog events in 'master-bin.000002';
|
||||
Log_name Pos Event_type Server_id Orig_log_pos Info
|
||||
master-bin.000002 4 Query 1 4 use `test`; create table t5 (a int)
|
||||
|
|
@ -85,10 +92,11 @@ slave-bin.000001 263 Query 1 263 use `test`; drop table t1
|
|||
slave-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
|
||||
slave-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
|
||||
slave-bin.000001 1065 Exec_load 1 1065 ;file_id=1
|
||||
slave-bin.000001 1088 Query 1 1088 use `test`; drop table t1
|
||||
slave-bin.000001 1136 Query 1 1136 use `test`; create table t5 (a int)
|
||||
slave-bin.000001 1194 Query 1 1194 use `test`; drop table t5
|
||||
slave-bin.000001 1242 Rotate 2 1242 slave-bin.000002;pos=4
|
||||
slave-bin.000001 1088 Query 1 1088 use `test`; create table t2 like t1
|
||||
slave-bin.000001 1146 Query 1 1146 use `test`; drop table t1
|
||||
slave-bin.000001 1194 Query 1 1194 use `test`; create table t5 (a int)
|
||||
slave-bin.000001 1252 Query 1 1252 use `test`; drop table t5
|
||||
slave-bin.000001 1300 Rotate 2 1300 slave-bin.000002;pos=4
|
||||
show binlog events in 'slave-bin.000002' from 4;
|
||||
Log_name Pos Event_type Server_id Orig_log_pos Info
|
||||
slave-bin.000002 4 Query 1 4 use `test`; create table t1 (n int)
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ stop slave;
|
|||
start slave until master_log_file='master-bin.000001', master_log_pos=561;
|
||||
show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
||||
# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 561 slave-relay-bin.000002 # master-bin.000001 Yes # 0 0 561 # Master master-bin.000001 561 No #
|
||||
# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 561 slave-relay-bin.000002 # master-bin.000001 Yes No 0 0 561 # Master master-bin.000001 561 No #
|
||||
start slave until master_log_file='master-bin', master_log_pos=561;
|
||||
ERROR HY000: Wrong parameter or combination of parameters for START SLAVE UNTIL
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12;
|
||||
|
|
|
|||
|
|
@ -265,3 +265,51 @@ c decimal(4,3) YES NULL
|
|||
d double(4,3) YES NULL
|
||||
f float(4,3) YES NULL
|
||||
drop table t1;
|
||||
SET sql_mode='';
|
||||
SET sql_quote_show_create=OFF;
|
||||
CREATE TABLE ```ab``cd``` (i INT);
|
||||
SHOW CREATE TABLE ```ab``cd```;
|
||||
Table Create Table
|
||||
`ab`cd` CREATE TABLE ```ab``cd``` (
|
||||
i int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE ```ab``cd```;
|
||||
CREATE TABLE ```ab````cd``` (i INT);
|
||||
SHOW CREATE TABLE ```ab````cd```;
|
||||
Table Create Table
|
||||
`ab``cd` CREATE TABLE ```ab````cd``` (
|
||||
i int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE ```ab````cd```;
|
||||
CREATE TABLE ```a` (i INT);
|
||||
SHOW CREATE TABLE ```a`;
|
||||
Table Create Table
|
||||
`a CREATE TABLE ```a` (
|
||||
i int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE ```a`;
|
||||
SET sql_mode='ANSI_QUOTES';
|
||||
CREATE TABLE """a" (i INT);
|
||||
SHOW CREATE TABLE """a";
|
||||
Table Create Table
|
||||
"a CREATE TABLE """a" (
|
||||
i int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE """a";
|
||||
SET sql_mode='';
|
||||
SET sql_quote_show_create=OFF;
|
||||
CREATE TABLE t1 (i INT);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE t1 (
|
||||
i int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE `table` (i INT);
|
||||
SHOW CREATE TABLE `table`;
|
||||
Table Create Table
|
||||
table CREATE TABLE `table` (
|
||||
i int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE `table`;
|
||||
SET sql_quote_show_create=ON;
|
||||
|
|
|
|||
|
|
@ -970,7 +970,7 @@ ERROR 42S02: Table 'test.t1' doesn't exist
|
|||
CREATE TABLE t1 (a int, KEY(a));
|
||||
HANDLER t1 OPEN;
|
||||
HANDLER t1 READ a=((SELECT 1));
|
||||
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use
|
||||
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT 1))' at line 1
|
||||
HANDLER t1 CLOSE;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
|
|
@ -1603,3 +1603,14 @@ id max_anno_dep PIPPO
|
|||
50 1990 0
|
||||
51 1990 NULL
|
||||
DROP TABLE t1, t2;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3);
|
||||
SET SQL_SELECT_LIMIT=1;
|
||||
select sum(a) from (select * from t1) as a;
|
||||
sum(a)
|
||||
6
|
||||
select 2 in (select * from t1);
|
||||
2 in (select * from t1)
|
||||
1
|
||||
SET SQL_SELECT_LIMIT=default;
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -350,7 +350,7 @@ select found_rows();
|
|||
found_rows()
|
||||
4
|
||||
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION SELECT * FROM t2 LIMIT 1;
|
||||
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use
|
||||
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1 UNION all SELECT * FROM t2 LIMIT 2;
|
||||
a
|
||||
1
|
||||
|
|
@ -539,7 +539,7 @@ aa
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` char(2) NOT NULL default ''
|
||||
`a` char(2) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT 12 as a UNION select "aa" as a;
|
||||
|
|
@ -550,7 +550,7 @@ aa
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` char(2) NOT NULL default ''
|
||||
`a` char(2) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT 12 as a UNION select 12.2 as a;
|
||||
|
|
@ -561,7 +561,7 @@ a
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` double(4,1) NOT NULL default '0.0'
|
||||
`a` double(4,1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t2 (it1 tinyint, it2 tinyint not null, i int not null, ib bigint, f float, d double, y year, da date, dt datetime, sc char(10), sv varchar(10), b blob, tx text);
|
||||
|
|
@ -585,7 +585,7 @@ it2
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`it2` int(11) NOT NULL default '0'
|
||||
`it2` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT i from t2 UNION select f from t2;
|
||||
|
|
@ -799,7 +799,7 @@ select * from t1;
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`1` bigint(1) NOT NULL default '0'
|
||||
`1` bigint(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 select _latin1"test" union select _latin2"testt" ;
|
||||
|
|
@ -808,7 +808,7 @@ create table t1 select _latin2"test" union select _latin2"testt" ;
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`test` char(5) character set latin2 NOT NULL default ''
|
||||
`test` char(5) character set latin2 default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (s char(200));
|
||||
|
|
@ -869,3 +869,27 @@ show status like 'Slow_queries';
|
|||
Variable_name Value
|
||||
Slow_queries 3
|
||||
drop table t1;
|
||||
create table t1 ( RID int(11) not null default '0', IID int(11) not null default '0', nada varchar(50) not null,NAME varchar(50) not null,PHONE varchar(50) not null) engine=MyISAM;
|
||||
insert into t1 ( RID,IID,nada,NAME,PHONE) values (1, 1, 'main', 'a', '111'), (2, 1, 'main', 'b', '222'), (3, 1, 'main', 'c', '333'), (4, 1, 'main', 'd', '444'), (5, 1, 'main', 'e', '555'), (6, 2, 'main', 'c', '333'), (7, 2, 'main', 'd', '454'), (8, 2, 'main', 'e', '555'), (9, 2, 'main', 'f', '666'), (10, 2, 'main', 'g', '777');
|
||||
select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 A left join t1 B on A.NAME = B.NAME and B.IID = 2 where A.IID = 1 and (A.PHONE <> B.PHONE or B.NAME is null) union select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 B left join t1 A on B.NAME = A.NAME and A.IID = 1 where B.IID = 2 and (A.PHONE <> B.PHONE or A.NAME is null);
|
||||
NAME PHONE NAME PHONE
|
||||
a 111 NULL NULL
|
||||
b 222 NULL NULL
|
||||
d 444 d 454
|
||||
NULL NULL f 666
|
||||
NULL NULL g 777
|
||||
drop table t1;
|
||||
create table t1 ( id int, name char(10) not null, name2 char(10) not null ) engine=innodb;
|
||||
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
|
||||
select name2 from t1 union all select name from t1 union all select id from t1;
|
||||
name2
|
||||
fff
|
||||
sss
|
||||
ttt
|
||||
first
|
||||
second
|
||||
third
|
||||
1
|
||||
2
|
||||
3
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -125,11 +125,11 @@ Warning 1265 Using storage engine MyISAM for table 't1'
|
|||
drop table t1;
|
||||
create table t1 (id int) type=heap;
|
||||
Warnings:
|
||||
Warning 1286 'TYPE=storage_engine' is deprecated. Use 'ENGINE=storage_engine' instead.
|
||||
Warning 1286 'TYPE=storage_engine' is deprecated, use 'ENGINE=storage_engine' instead
|
||||
alter table t1 type=myisam;
|
||||
Warnings:
|
||||
Warning 1286 'TYPE=storage_engine' is deprecated. Use 'ENGINE=storage_engine' instead.
|
||||
Warning 1286 'TYPE=storage_engine' is deprecated, use 'ENGINE=storage_engine' instead
|
||||
drop table t1;
|
||||
set table_type=MYISAM;
|
||||
Warnings:
|
||||
Warning 1286 'table_type' is deprecated. Use 'storage_engine' instead.
|
||||
Warning 1286 'table_type' is deprecated, use 'storage_engine' instead
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@ select CAST(DATE "2004-01-22 21:45:33" AS CHAR(4) BINARY);
|
|||
set names binary;
|
||||
select cast(_latin1'test' as char character set latin2);
|
||||
select cast(_koi8r'ÔÅÓÔ' as char character set cp1251);
|
||||
select convert(_latin1'test', "latin1_german1_ci", "latin1_swedish_ci");
|
||||
select convert(_koi8r'ÔĹÓÔ', "koi8r_general_ci", "cp1251_general_ci");
|
||||
create table t1 select cast(_koi8r'ÔÅÓÔ' as char character set cp1251) as t;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -147,11 +147,6 @@ UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8);
|
|||
SET CHARACTER SET koi8r;
|
||||
SELECT * FROM t1;
|
||||
|
||||
#
|
||||
# codecovarage for Item_func_conv_charset3
|
||||
#
|
||||
select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
|
||||
explain extended select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
|
||||
|
||||
ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL;
|
||||
UPDATE t1 SET bin_f=koi8_ru_f;
|
||||
|
|
|
|||
|
|
@ -61,3 +61,47 @@ create table t1 (s1 char(1) character set utf8);
|
|||
insert into t1 values (_koi8r'ÁÂ');
|
||||
select s1,hex(s1),char_length(s1),octet_length(s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (s1 tinytext character set utf8);
|
||||
insert into t1 select repeat('a',300);
|
||||
insert into t1 select repeat('Ñ',300);
|
||||
insert into t1 select repeat('aÑ',300);
|
||||
insert into t1 select repeat('Ña',300);
|
||||
insert into t1 select repeat('ÑÑ',300);
|
||||
select hex(s1) from t1;
|
||||
select length(s1),char_length(s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (s1 text character set utf8);
|
||||
insert into t1 select repeat('a',66000);
|
||||
insert into t1 select repeat('Ñ',66000);
|
||||
insert into t1 select repeat('aÑ',66000);
|
||||
insert into t1 select repeat('Ña',66000);
|
||||
insert into t1 select repeat('ÑÑ',66000);
|
||||
select length(s1),char_length(s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #2368 Multibyte charsets do not check that incoming data is well-formed
|
||||
#
|
||||
create table t1 (s1 char(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
select hex(s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (s1 varchar(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
select hex(s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (s1 text character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
select hex(s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug 2699
|
||||
# UTF8 breaks primary keys for cols > 85 characters
|
||||
#
|
||||
--error 1089
|
||||
create table t1 (a char(160) character set utf8, primary key(a));
|
||||
|
|
|
|||
|
|
@ -153,10 +153,14 @@ UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1)
|
|||
select * from t1;
|
||||
-- error 1287
|
||||
UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2, P2.N = 2;
|
||||
-- error 1054
|
||||
UPDATE `t1` AS P1 INNER JOIN (SELECT aaaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2;
|
||||
delete P1.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
|
||||
select * from t1;
|
||||
-- error 1287
|
||||
delete P1.*,P2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
|
||||
-- error 1054
|
||||
delete P1.* from `t1` AS P1 INNER JOIN (SELECT aaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
|
|
@ -183,3 +187,22 @@ CREATE TABLE t3 (
|
|||
INSERT INTO t3 VALUES (1000,0.00),(1001,0.25),(1002,0.50),(1003,0.75),(1008,1.00),(1009,1.25),(1010,1.50),(1011,1.75);
|
||||
select 497, TMP.ID, NULL from (select 497 as ID, MAX(t3.DATA) as DATA from t1 join t2 on (t1.ObjectID = t2.ID) join t3 on (t1.ObjectID = t3.ID) group by t2.ParID order by DATA DESC) as TMP;
|
||||
drop table t1, t2, t3;
|
||||
|
||||
|
||||
#
|
||||
# explain derived
|
||||
#
|
||||
CREATE TABLE t1 (name char(1) default NULL, val int(5) default NULL);
|
||||
INSERT INTO t1 VALUES ('a',1), ('a',2), ('a',2), ('a',2), ('a',3), ('a',6), ('a',7), ('a',11), ('a',11), ('a',12), ('a',13), ('a',13), ('a',20), ('b',2), ('b',3), ('b',4), ('b',5);
|
||||
SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
|
||||
explain SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# "Using index" in explain
|
||||
#
|
||||
create table t2 (a int, b int, primary key (a));
|
||||
insert into t2 values (1,7),(2,7);
|
||||
explain select a from t2 where a>1;
|
||||
explain select a from (select a from t2 where a>1) tt;
|
||||
drop table t2;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@ select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOL
|
|||
select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
|
||||
|
||||
# bug#2708 crash
|
||||
|
||||
select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE);
|
||||
|
||||
# boolean w/o index:
|
||||
|
||||
select * from t1 where MATCH a AGAINST ("search" IN BOOLEAN MODE);
|
||||
|
|
|
|||
|
|
@ -23,4 +23,10 @@ create table t1 (version char(40)) select database(), user(), version() as 'vers
|
|||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
select charset(charset(_utf8'a')), charset(collation(_utf8'a'));
|
||||
select collation(charset(_utf8'a')), collation(collation(_utf8'a'));
|
||||
create table t1 select charset(_utf8'a'), collation(_utf8'a');
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
select TRUE,FALSE,NULL;
|
||||
|
|
|
|||
|
|
@ -100,18 +100,18 @@ select 1; -- To test that the previous command didn't cause problems
|
|||
create table t1 (a int);
|
||||
grant ALL PRIVILEGES on *.* to drop_user2@localhost with GRANT OPTION;
|
||||
show grants for drop_user2@localhost;
|
||||
revoke all privileges, grant from drop_user2@localhost;
|
||||
revoke all privileges, grant option from drop_user2@localhost;
|
||||
drop user drop_user2@localhost;
|
||||
|
||||
grant ALL PRIVILEGES on *.* to drop_user@localhost with GRANT OPTION;
|
||||
grant ALL PRIVILEGES on test.* to drop_user@localhost with GRANT OPTION;
|
||||
grant select(a) on test.t1 to drop_user@localhost;
|
||||
show grants for drop_user@localhost;
|
||||
revoke all privileges, grant from drop_user@localhost;
|
||||
revoke all privileges, grant option from drop_user@localhost;
|
||||
show grants for drop_user@localhost;
|
||||
drop user drop_user@localhost;
|
||||
--error 1268
|
||||
revoke all privileges, grant from drop_user@localhost;
|
||||
revoke all privileges, grant option from drop_user@localhost;
|
||||
|
||||
grant select(a) on test.t1 to drop_user1@localhost;
|
||||
grant select on test.t1 to drop_user2@localhost;
|
||||
|
|
@ -120,7 +120,7 @@ grant select on *.* to drop_user4@localhost;
|
|||
--error 1267
|
||||
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
|
||||
drop_user4@localhost;
|
||||
revoke all privileges, grant from drop_user1@localhost, drop_user2@localhost,
|
||||
revoke all privileges, grant option from drop_user1@localhost, drop_user2@localhost,
|
||||
drop_user3@localhost, drop_user4@localhost;
|
||||
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
|
||||
drop_user4@localhost;
|
||||
|
|
|
|||
|
|
@ -63,3 +63,27 @@ INSERT INTO t1 VALUES (1), (2);
|
|||
--exec $MYSQL_DUMP --skip-comments --compatible=mysql40 test t1
|
||||
--exec $MYSQL_DUMP --skip-comments --compatible=mysql323 test t1
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #2592 'mysqldum doesn't quote "tricky" names correctly'
|
||||
#
|
||||
|
||||
create table ```a` (i int);
|
||||
--exec $MYSQL_DUMP --skip-comments test
|
||||
drop table ```a`;
|
||||
|
||||
#
|
||||
# Bug #2705 'mysqldump --tab extra output'
|
||||
#
|
||||
|
||||
create table t1(a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
--exec $MYSQL_DUMP --skip-comments --tab=$MYSQL_TEST_DIR/var/tmp/ test
|
||||
--exec cat $MYSQL_TEST_DIR/var/tmp/t1.sql
|
||||
--exec cat $MYSQL_TEST_DIR/var/tmp/t1.txt
|
||||
--exec rm $MYSQL_TEST_DIR/var/tmp/t1.sql
|
||||
--exec rm $MYSQL_TEST_DIR/var/tmp/t1.txt
|
||||
--exec $MYSQL_DUMP --tab=$MYSQL_TEST_DIR/var/tmp/ test
|
||||
--exec rm $MYSQL_TEST_DIR/var/tmp/t1.sql
|
||||
--exec rm $MYSQL_TEST_DIR/var/tmp/t1.txt
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -35,12 +35,14 @@ drop table t1;
|
|||
create table t1 (word char(20) not null);
|
||||
load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
|
||||
select count(*) from t1;
|
||||
create table t2 like t1;
|
||||
drop table t1;
|
||||
--replace_result $VERSION VERSION
|
||||
show binlog events;
|
||||
show binlog events from 79 limit 1;
|
||||
show binlog events from 79 limit 2;
|
||||
show binlog events from 79 limit 2,1;
|
||||
show binlog events from 79 limit 2,2;
|
||||
flush logs;
|
||||
|
||||
# We need an extra update before doing save_master_pos.
|
||||
|
|
|
|||
|
|
@ -60,10 +60,10 @@ stop slave;
|
|||
# this should stop immideately
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=561;
|
||||
# 2 is not enough when running with valgrind
|
||||
--real-sleep 4;
|
||||
real_sleep 4
|
||||
# here the sql slave thread should be stopped
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT bin.000005 bin.000004 bin.000006 bin.000004 bin.000007 bin.000004
|
||||
--replace_column 1 # 9 # 12 # 23 # 33 #
|
||||
--replace_column 1 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
#testing various error conditions
|
||||
|
|
|
|||
|
|
@ -142,3 +142,43 @@ drop table t1;
|
|||
create table t1 (c decimal(3,3), d double(3,3), f float(3,3));
|
||||
show columns from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test for Bug #2593 "SHOW CREATE TABLE doesn't properly double quotes"
|
||||
#
|
||||
|
||||
SET sql_mode='';
|
||||
SET sql_quote_show_create=OFF;
|
||||
|
||||
CREATE TABLE ```ab``cd``` (i INT);
|
||||
SHOW CREATE TABLE ```ab``cd```;
|
||||
DROP TABLE ```ab``cd```;
|
||||
|
||||
CREATE TABLE ```ab````cd``` (i INT);
|
||||
SHOW CREATE TABLE ```ab````cd```;
|
||||
DROP TABLE ```ab````cd```;
|
||||
|
||||
CREATE TABLE ```a` (i INT);
|
||||
SHOW CREATE TABLE ```a`;
|
||||
DROP TABLE ```a`;
|
||||
|
||||
SET sql_mode='ANSI_QUOTES';
|
||||
|
||||
CREATE TABLE """a" (i INT);
|
||||
SHOW CREATE TABLE """a";
|
||||
DROP TABLE """a";
|
||||
|
||||
# to test quotes around keywords.. :
|
||||
|
||||
SET sql_mode='';
|
||||
SET sql_quote_show_create=OFF;
|
||||
|
||||
CREATE TABLE t1 (i INT);
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE `table` (i INT);
|
||||
SHOW CREATE TABLE `table`;
|
||||
DROP TABLE `table`;
|
||||
|
||||
SET sql_quote_show_create=ON;
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ set @a:=(SELECT a from t1);
|
|||
|
||||
CREATE TABLE t1 (a int, KEY(a));
|
||||
HANDLER t1 OPEN;
|
||||
-- error 1149
|
||||
-- error 1064
|
||||
HANDLER t1 READ a=((SELECT 1));
|
||||
HANDLER t1 CLOSE;
|
||||
drop table t1;
|
||||
|
|
@ -1049,3 +1049,14 @@ INSERT INTO `t2` VALUES (16,1987),(50,1990),(51,1990);
|
|||
SELECT cns.id, cns.max_anno_dep, cns.max_anno_dep = (SELECT s.anno_dep FROM t1 AS s WHERE s.id_cns = cns.id ORDER BY s.anno_dep DESC LIMIT 1) AS PIPPO FROM t2 AS cns;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# GLOBAL LIMIT
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3);
|
||||
SET SQL_SELECT_LIMIT=1;
|
||||
select sum(a) from (select * from t1) as a;
|
||||
select 2 in (select * from t1);
|
||||
SET SQL_SELECT_LIMIT=default;
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ select found_rows();
|
|||
(SELECT SQL_CALC_FOUND_ROWS * FROM t1) UNION all (SELECT * FROM t2 LIMIT 1);
|
||||
select found_rows();
|
||||
# This used to work in 4.0 but not anymore in 4.1
|
||||
--error 1149
|
||||
--error 1064
|
||||
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION SELECT * FROM t2 LIMIT 1;
|
||||
#select found_rows();
|
||||
|
||||
|
|
@ -465,3 +465,22 @@ show status like 'Slow_queries';
|
|||
select count(*) from t1 where a=7 union select count(*) from t1 where b=13;
|
||||
show status like 'Slow_queries';
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# bug #2508
|
||||
#
|
||||
create table t1 ( RID int(11) not null default '0', IID int(11) not null default '0', nada varchar(50) not null,NAME varchar(50) not null,PHONE varchar(50) not null) engine=MyISAM;
|
||||
insert into t1 ( RID,IID,nada,NAME,PHONE) values (1, 1, 'main', 'a', '111'), (2, 1, 'main', 'b', '222'), (3, 1, 'main', 'c', '333'), (4, 1, 'main', 'd', '444'), (5, 1, 'main', 'e', '555'), (6, 2, 'main', 'c', '333'), (7, 2, 'main', 'd', '454'), (8, 2, 'main', 'e', '555'), (9, 2, 'main', 'f', '666'), (10, 2, 'main', 'g', '777');
|
||||
select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 A left join t1 B on A.NAME = B.NAME and B.IID = 2 where A.IID = 1 and (A.PHONE <> B.PHONE or B.NAME is null) union select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 B left join t1 A on B.NAME = A.NAME and A.IID = 1 where B.IID = 2 and (A.PHONE <> B.PHONE or A.NAME is null);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# bug #2552
|
||||
#
|
||||
--disable_warnings
|
||||
create table t1 ( id int, name char(10) not null, name2 char(10) not null ) engine=innodb;
|
||||
--enable_warnings
|
||||
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
|
||||
select name2 from t1 union all select name from t1 union all select id from t1;
|
||||
drop table t1;
|
||||
|
||||
|
|
|
|||
|
|
@ -627,7 +627,7 @@ writes: %ld r_requests: %ld reads: %ld",
|
|||
a pointer to the last element.
|
||||
*/
|
||||
|
||||
static inline void link_into_queue(KEYCACHE_WQUEUE *wqueue,
|
||||
static void link_into_queue(KEYCACHE_WQUEUE *wqueue,
|
||||
struct st_my_thread_var *thread)
|
||||
{
|
||||
struct st_my_thread_var *last;
|
||||
|
|
@ -662,7 +662,7 @@ static inline void link_into_queue(KEYCACHE_WQUEUE *wqueue,
|
|||
See NOTES for link_into_queue
|
||||
*/
|
||||
|
||||
static inline void unlink_from_queue(KEYCACHE_WQUEUE *wqueue,
|
||||
static void unlink_from_queue(KEYCACHE_WQUEUE *wqueue,
|
||||
struct st_my_thread_var *thread)
|
||||
{
|
||||
KEYCACHE_DBUG_PRINT("unlink_from_queue", ("thread %ld", thread->id));
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@
|
|||
with gcc 3.0.x to avoid including libstdc++
|
||||
*/
|
||||
|
||||
#ifdef USE_MYSYS_NEW
|
||||
|
||||
#include "mysys_priv.h"
|
||||
|
||||
#ifdef USE_MYSYS_NEW
|
||||
|
||||
void *operator new (size_t sz)
|
||||
{
|
||||
return (void *) malloc (sz ? sz : 1);
|
||||
|
|
|
|||
169
mytest-old.c
169
mytest-old.c
|
|
@ -1,169 +0,0 @@
|
|||
/*C4*/
|
||||
/****************************************************************/
|
||||
/* Author: Jethro Wright, III TS : 3/ 4/1998 9:15 */
|
||||
/* Date: 02/18/1998 */
|
||||
/* mytest.c : do some testing of the libmySQL.DLL.... */
|
||||
/* */
|
||||
/* History: */
|
||||
/* 02/18/1998 jw3 also sprach zarathustra.... */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <mysql.h>
|
||||
|
||||
#define DEFALT_SQL_STMT "SELECT * FROM db"
|
||||
#ifndef offsetof
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||
#endif
|
||||
|
||||
|
||||
/********************************************************
|
||||
**
|
||||
** main :-
|
||||
**
|
||||
********************************************************/
|
||||
|
||||
int
|
||||
main( int argc, char * argv[] )
|
||||
{
|
||||
|
||||
char szSQL[ 200 ], aszFlds[ 25 ][ 25 ], * pszT, szDB[ 50 ] ;
|
||||
int i, j, k, l, x ;
|
||||
MYSQL * myData ;
|
||||
MYSQL_RES * res ;
|
||||
MYSQL_FIELD * fd ;
|
||||
MYSQL_ROW row ;
|
||||
|
||||
//....just curious....
|
||||
printf( "sizeof( MYSQL ) == %d\n", sizeof( MYSQL ) ) ;
|
||||
if ( argc == 2 )
|
||||
{
|
||||
strcpy( szDB, argv[ 1 ] ) ;
|
||||
strcpy( szSQL, DEFALT_SQL_STMT ) ;
|
||||
if (!strcmp(szDB,"--debug"))
|
||||
{
|
||||
strcpy( szDB, "mysql" ) ;
|
||||
printf("Some mysql struct information (size and offset):\n");
|
||||
printf("net:\t%3d %3d\n",sizeof(myData->net),offsetof(MYSQL,net));
|
||||
printf("host:\t%3d %3d\n",sizeof(myData->host),offsetof(MYSQL,host));
|
||||
printf("port:\t%3d %3d\n",sizeof(myData->port),offsetof(MYSQL,port));
|
||||
printf("protocol_version:\t%3d %3d\n",sizeof(myData->protocol_version),
|
||||
offsetof(MYSQL,protocol_version));
|
||||
printf("thread_id:\t%3d %3d\n",sizeof(myData->thread_id),
|
||||
offsetof(MYSQL,thread_id));
|
||||
printf("affected_rows:\t%3d %3d\n",sizeof(myData->affected_rows),
|
||||
offsetof(MYSQL,affected_rows));
|
||||
printf("packet_length:\t%3d %3d\n",sizeof(myData->packet_length),
|
||||
offsetof(MYSQL,packet_length));
|
||||
printf("status:\t%3d %3d\n",sizeof(myData->status),
|
||||
offsetof(MYSQL,status));
|
||||
printf("fields:\t%3d %3d\n",sizeof(myData->fields),
|
||||
offsetof(MYSQL,fields));
|
||||
printf("field_alloc:\t%3d %3d\n",sizeof(myData->field_alloc),
|
||||
offsetof(MYSQL,field_alloc));
|
||||
printf("free_me:\t%3d %3d\n",sizeof(myData->free_me),
|
||||
offsetof(MYSQL,free_me));
|
||||
printf("options:\t%3d %3d\n",sizeof(myData->options),
|
||||
offsetof(MYSQL,options));
|
||||
puts("");
|
||||
}
|
||||
}
|
||||
else if ( argc > 2 ) {
|
||||
strcpy( szDB, argv[ 1 ] ) ;
|
||||
strcpy( szSQL, argv[ 2 ] ) ;
|
||||
}
|
||||
else {
|
||||
strcpy( szDB, "mysql" ) ;
|
||||
strcpy( szSQL, DEFALT_SQL_STMT ) ;
|
||||
}
|
||||
//....
|
||||
|
||||
if ( (myData = mysql_init((MYSQL*) 0)) &&
|
||||
mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT,
|
||||
NULL, 0 ) )
|
||||
{
|
||||
if ( mysql_select_db( myData, szDB ) < 0 ) {
|
||||
printf( "Can't select the %s database !\n", szDB ) ;
|
||||
mysql_close( myData ) ;
|
||||
return 2 ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf( "Can't connect to the mysql server on port %d !\n",
|
||||
MYSQL_PORT ) ;
|
||||
mysql_close( myData ) ;
|
||||
return 1 ;
|
||||
}
|
||||
//....
|
||||
if ( ! mysql_query( myData, szSQL ) ) {
|
||||
res = mysql_store_result( myData ) ;
|
||||
i = (int) mysql_num_rows( res ) ; l = 1 ;
|
||||
printf( "Query: %s\nNumber of records found: %ld\n", szSQL, i ) ;
|
||||
//....we can get the field-specific characteristics here....
|
||||
for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
|
||||
strcpy( aszFlds[ x ], fd->name ) ;
|
||||
//....
|
||||
while ( row = mysql_fetch_row( res ) ) {
|
||||
j = mysql_num_fields( res ) ;
|
||||
printf( "Record #%ld:-\n", l++ ) ;
|
||||
for ( k = 0 ; k < j ; k++ )
|
||||
printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
|
||||
(((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
|
||||
puts( "==============================\n" ) ;
|
||||
}
|
||||
mysql_free_result( res ) ;
|
||||
}
|
||||
else printf( "Couldn't execute %s on the server !\n", szSQL ) ;
|
||||
//....
|
||||
puts( "==== Diagnostic info ====" ) ;
|
||||
pszT = mysql_get_client_info() ;
|
||||
printf( "Client info: %s\n", pszT ) ;
|
||||
//....
|
||||
pszT = mysql_get_host_info( myData ) ;
|
||||
printf( "Host info: %s\n", pszT ) ;
|
||||
//....
|
||||
pszT = mysql_get_server_info( myData ) ;
|
||||
printf( "Server info: %s\n", pszT ) ;
|
||||
//....
|
||||
res = mysql_list_processes( myData ) ; l = 1 ;
|
||||
if (res)
|
||||
{
|
||||
for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
|
||||
strcpy( aszFlds[ x ], fd->name ) ;
|
||||
while ( row = mysql_fetch_row( res ) ) {
|
||||
j = mysql_num_fields( res ) ;
|
||||
printf( "Process #%ld:-\n", l++ ) ;
|
||||
for ( k = 0 ; k < j ; k++ )
|
||||
printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
|
||||
(((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
|
||||
puts( "==============================\n" ) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Got error %s when retreiving processlist\n",mysql_error(myData));
|
||||
}
|
||||
//....
|
||||
res = mysql_list_tables( myData, "%" ) ; l = 1 ;
|
||||
for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
|
||||
strcpy( aszFlds[ x ], fd->name ) ;
|
||||
while ( row = mysql_fetch_row( res ) ) {
|
||||
j = mysql_num_fields( res ) ;
|
||||
printf( "Table #%ld:-\n", l++ ) ;
|
||||
for ( k = 0 ; k < j ; k++ )
|
||||
printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
|
||||
(((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
|
||||
puts( "==============================\n" ) ;
|
||||
}
|
||||
//....
|
||||
pszT = mysql_stat( myData ) ;
|
||||
puts( pszT ) ;
|
||||
//....
|
||||
mysql_close( myData ) ;
|
||||
return 0 ;
|
||||
|
||||
}
|
||||
|
|
@ -1420,7 +1420,9 @@ static MYSQL_METHODS client_methods=
|
|||
cli_read_binary_rows,
|
||||
cli_unbuffered_fetch,
|
||||
NULL,
|
||||
cli_read_statistic
|
||||
cli_read_statistic,
|
||||
cli_read_query_result,
|
||||
cli_read_change_user_result
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
32
sql/field.cc
32
sql/field.cc
|
|
@ -4485,19 +4485,9 @@ void Field_blob::store_length(uint32 number)
|
|||
{
|
||||
switch (packlength) {
|
||||
case 1:
|
||||
if (number > 255)
|
||||
{
|
||||
number=255;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED);
|
||||
}
|
||||
ptr[0]= (uchar) number;
|
||||
break;
|
||||
case 2:
|
||||
if (number > (uint16) ~0)
|
||||
{
|
||||
number= (uint16) ~0;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED);
|
||||
}
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (table->db_low_byte_first)
|
||||
{
|
||||
|
|
@ -4508,11 +4498,6 @@ void Field_blob::store_length(uint32 number)
|
|||
shortstore(ptr,(unsigned short) number);
|
||||
break;
|
||||
case 3:
|
||||
if (number > (uint32) (1L << 24))
|
||||
{
|
||||
number= (uint32) (1L << 24)-1L;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED);
|
||||
}
|
||||
int3store(ptr,number);
|
||||
break;
|
||||
case 4:
|
||||
|
|
@ -4573,6 +4558,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||
bool was_conversion;
|
||||
char buff[80];
|
||||
String tmpstr(buff,sizeof(buff), &my_charset_bin);
|
||||
uint copy_length;
|
||||
uint32 not_used;
|
||||
|
||||
/* Convert character set if nesessary */
|
||||
|
|
@ -4583,12 +4569,22 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||
from= tmpstr.ptr();
|
||||
length= tmpstr.length();
|
||||
}
|
||||
Field_blob::store_length(length);
|
||||
if (was_conversion || table->copy_blobs || length <= MAX_FIELD_WIDTH)
|
||||
|
||||
copy_length= max_data_length();
|
||||
if (copy_length > length)
|
||||
copy_length= length;
|
||||
copy_length= field_charset->cset->wellformedlen(field_charset,
|
||||
from,from+copy_length,
|
||||
field_length);
|
||||
if (copy_length < length)
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED);
|
||||
|
||||
Field_blob::store_length(copy_length);
|
||||
if (was_conversion || table->copy_blobs || copy_length <= MAX_FIELD_WIDTH)
|
||||
{ // Must make a copy
|
||||
if (from != value.ptr()) // For valgrind
|
||||
{
|
||||
value.copy(from,length,charset());
|
||||
value.copy(from,copy_length,charset());
|
||||
from=value.ptr();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -949,6 +949,15 @@ public:
|
|||
void sort_string(char *buff,uint length);
|
||||
uint32 pack_length() const
|
||||
{ return (uint32) (packlength+table->blob_ptr_size); }
|
||||
uint32 max_data_length() const
|
||||
{
|
||||
switch (packlength) {
|
||||
case 1: return 255;
|
||||
case 2: return (uint32) 0xFFFFL;
|
||||
case 3: return (uint32) 0xFFFFFF;
|
||||
default: return (uint32) 0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
void reset(void) { bzero(ptr, packlength+sizeof(char*)); }
|
||||
void reset_fields() { bzero((char*) &value,sizeof(value)); }
|
||||
void store_length(uint32 number);
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ int GTextReadStream::get_next_number(double *d)
|
|||
|
||||
char *endptr;
|
||||
|
||||
*d = strtod(cur, &endptr);
|
||||
*d = my_strtod(cur, &endptr);
|
||||
|
||||
if (endptr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,9 +34,6 @@ void unireg_init(ulong options)
|
|||
|
||||
current_pid=(ulong) getpid(); /* Save for later ref */
|
||||
init_time(); /* Init time-functions (read zone) */
|
||||
#ifdef USE_MY_ATOF
|
||||
init_my_atof(); /* use our atof */
|
||||
#endif
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
my_abort_hook=unireg_abort; /* Abort with close of databases */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -568,6 +568,8 @@ void Item_param::set_time(TIME *tm, timestamp_type type)
|
|||
|
||||
ltime.second_part= tm->second_part;
|
||||
|
||||
ltime.neg= tm->neg;
|
||||
|
||||
ltime.time_type= type;
|
||||
|
||||
item_is_time= true;
|
||||
|
|
|
|||
|
|
@ -442,7 +442,7 @@ class Item_real :public Item
|
|||
public:
|
||||
const double value;
|
||||
// Item_real() :value(0) {}
|
||||
Item_real(const char *str_arg,uint length) :value(atof(str_arg))
|
||||
Item_real(const char *str_arg,uint length) :value(my_atof(str_arg))
|
||||
{
|
||||
name=(char*) str_arg;
|
||||
decimals=(uint8) nr_of_decimals(str_arg);
|
||||
|
|
|
|||
|
|
@ -1552,7 +1552,7 @@ udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
|
|||
if ((error=(uchar) init(&initid, &f_args, thd->net.last_error)))
|
||||
{
|
||||
my_printf_error(ER_CANT_INITIALIZE_UDF,ER(ER_CANT_INITIALIZE_UDF),MYF(0),
|
||||
u_d->name,thd->net.last_error);
|
||||
u_d->name.str, thd->net.last_error);
|
||||
free_udf(u_d);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
|
@ -1565,7 +1565,7 @@ udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
|
|||
if (error)
|
||||
{
|
||||
my_printf_error(ER_CANT_INITIALIZE_UDF,ER(ER_CANT_INITIALIZE_UDF),MYF(0),
|
||||
u_d->name, ER(ER_UNKNOWN_ERROR));
|
||||
u_d->name.str, ER(ER_UNKNOWN_ERROR));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
|
|
@ -2254,7 +2254,7 @@ double user_var_entry::val(my_bool *null_value)
|
|||
case INT_RESULT:
|
||||
return (double) *(longlong*) value;
|
||||
case STRING_RESULT:
|
||||
return atof(value); // This is null terminated
|
||||
return my_atof(value); // This is null terminated
|
||||
case ROW_RESULT:
|
||||
DBUG_ASSERT(1); // Impossible
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -2124,42 +2124,6 @@ void Item_func_conv_charset::print(String *str)
|
|||
str->append(')');
|
||||
}
|
||||
|
||||
String *Item_func_conv_charset3::val_str(String *str)
|
||||
{
|
||||
char cs1[30], cs2[30];
|
||||
String to_cs_buff(cs1, sizeof(cs1), default_charset_info);
|
||||
String from_cs_buff(cs2, sizeof(cs2), default_charset_info);
|
||||
String *arg= args[0]->val_str(str);
|
||||
String *to_cs= args[1]->val_str(&to_cs_buff);
|
||||
String *from_cs= args[2]->val_str(&from_cs_buff);
|
||||
CHARSET_INFO *from_charset;
|
||||
CHARSET_INFO *to_charset;
|
||||
|
||||
if (!arg || args[0]->null_value ||
|
||||
!to_cs || args[1]->null_value ||
|
||||
!from_cs || args[2]->null_value ||
|
||||
!(from_charset=get_charset_by_name(from_cs->ptr(), MYF(MY_WME))) ||
|
||||
!(to_charset=get_charset_by_name(to_cs->ptr(), MYF(MY_WME))))
|
||||
{
|
||||
null_value= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (str_value.copy(arg->ptr(), arg->length(), from_charset, to_charset))
|
||||
{
|
||||
null_value= 1;
|
||||
return 0;
|
||||
}
|
||||
null_value= 0;
|
||||
return &str_value;
|
||||
}
|
||||
|
||||
|
||||
void Item_func_conv_charset3::fix_length_and_dec()
|
||||
{
|
||||
max_length = args[0]->max_length;
|
||||
}
|
||||
|
||||
String *Item_func_set_collation::val_str(String *str)
|
||||
{
|
||||
str=args[0]->val_str(str);
|
||||
|
|
@ -2226,7 +2190,7 @@ String *Item_func_charset::val_str(String *str)
|
|||
if ((null_value=(args[0]->null_value || !res->charset())))
|
||||
return 0;
|
||||
str->copy(res->charset()->csname,strlen(res->charset()->csname),
|
||||
&my_charset_latin1, default_charset());
|
||||
&my_charset_latin1, collation.collation);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
|
@ -2237,7 +2201,7 @@ String *Item_func_collation::val_str(String *str)
|
|||
if ((null_value=(args[0]->null_value || !res->charset())))
|
||||
return 0;
|
||||
str->copy(res->charset()->name,strlen(res->charset()->name),
|
||||
&my_charset_latin1, default_charset());
|
||||
&my_charset_latin1, collation.collation);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -619,16 +619,6 @@ public:
|
|||
void print(String *str) { print_op(str); }
|
||||
};
|
||||
|
||||
class Item_func_conv_charset3 :public Item_str_func
|
||||
{
|
||||
public:
|
||||
Item_func_conv_charset3(Item *arg1,Item *arg2,Item *arg3)
|
||||
:Item_str_func(arg1,arg2,arg3) {}
|
||||
String *val_str(String *);
|
||||
void fix_length_and_dec();
|
||||
const char *func_name() const { return "convert"; }
|
||||
};
|
||||
|
||||
class Item_func_charset :public Item_str_func
|
||||
{
|
||||
public:
|
||||
|
|
@ -637,8 +627,8 @@ public:
|
|||
const char *func_name() const { return "charset"; }
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
max_length=40; // should be enough
|
||||
collation.set(system_charset_info);
|
||||
max_length= 64 * collation.collation->mbmaxlen; // should be enough
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -650,8 +640,8 @@ public:
|
|||
const char *func_name() const { return "collation"; }
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
max_length=40; // should be enough
|
||||
collation.set(system_charset_info);
|
||||
max_length= 64 * collation.collation->mbmaxlen; // should be enough
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ class Item_sum_avg :public Item_sum_num
|
|||
ulonglong count;
|
||||
|
||||
public:
|
||||
Item_sum_avg(Item *item_par) :Item_sum_num(item_par),count(0) {}
|
||||
Item_sum_avg(Item *item_par) :Item_sum_num(item_par), sum(0.0), count(0) {}
|
||||
Item_sum_avg(THD *thd, Item_sum_avg *item)
|
||||
:Item_sum_num(thd, item), sum(item->sum), count(item->count) {}
|
||||
enum Sumfunctype sum_func () const {return AVG_FUNC;}
|
||||
|
|
@ -748,7 +748,7 @@ class Item_func_group_concat : public Item_sum
|
|||
double val()
|
||||
{
|
||||
String *res; res=val_str(&str_value);
|
||||
return res ? atof(res->c_ptr()) : 0.0;
|
||||
return res ? my_atof(res->c_ptr()) : 0.0;
|
||||
}
|
||||
longlong val_int()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -248,6 +248,8 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
|
|||
#define UNCACHEABLE_DEPENDENT 1
|
||||
#define UNCACHEABLE_RAND 2
|
||||
#define UNCACHEABLE_SIDEEFFECT 4
|
||||
// forcing to save JOIN for explain
|
||||
#define UNCACHEABLE_EXPLAIN 8
|
||||
|
||||
#ifdef EXTRA_DEBUG
|
||||
/*
|
||||
|
|
@ -481,14 +483,13 @@ int mysql_select(THD *thd, Item ***rref_pointer_array,
|
|||
SELECT_LEX *select_lex);
|
||||
void free_underlaid_joins(THD *thd, SELECT_LEX *select);
|
||||
void fix_tables_pointers(SELECT_LEX *select_lex);
|
||||
void fix_tables_pointers(SELECT_LEX_UNIT *select_lex);
|
||||
int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit,
|
||||
select_result *result);
|
||||
int mysql_explain_select(THD *thd, SELECT_LEX *sl, char const *type,
|
||||
select_result *result);
|
||||
int mysql_union(THD *thd, LEX *lex, select_result *result,
|
||||
SELECT_LEX_UNIT *unit);
|
||||
int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *s, TABLE_LIST *t);
|
||||
int mysql_handle_derived(LEX *lex);
|
||||
Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
Item ***copy_func, Field **from_field,
|
||||
bool group,bool modify_item);
|
||||
|
|
@ -674,9 +675,10 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds);
|
|||
int setup_ftfuncs(SELECT_LEX* select);
|
||||
int init_ftfuncs(THD *thd, SELECT_LEX* select, bool no_order);
|
||||
void wait_for_refresh(THD *thd);
|
||||
int open_tables(THD *thd,TABLE_LIST *tables);
|
||||
int open_tables(THD *thd, TABLE_LIST *tables, uint *counter);
|
||||
int simple_open_n_lock_tables(THD *thd,TABLE_LIST *tables);
|
||||
int open_and_lock_tables(THD *thd,TABLE_LIST *tables);
|
||||
int lock_tables(THD *thd,TABLE_LIST *tables);
|
||||
int lock_tables(THD *thd, TABLE_LIST *tables, uint counter);
|
||||
TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
|
||||
const char *table_name, bool link_in_list);
|
||||
bool rm_temporary_table(enum db_type base, char *path);
|
||||
|
|
@ -759,6 +761,8 @@ uint find_type(TYPELIB *lib, const char *find, uint length, bool part_match);
|
|||
uint check_word(TYPELIB *lib, const char *val, const char *end,
|
||||
const char **end_of_word);
|
||||
|
||||
bool is_keyword(const char *name, uint len);
|
||||
|
||||
/* sql_parse.cc */
|
||||
void free_items(Item *item);
|
||||
void cleanup_items(Item *item);
|
||||
|
|
|
|||
|
|
@ -313,6 +313,7 @@ send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
|
|||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
static char eof_buff[1]= { (char) 254 }; /* Marker for end of fields */
|
||||
|
||||
/*
|
||||
Send eof (= end of result set) to the client
|
||||
|
|
@ -339,12 +340,11 @@ send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
|
|||
void
|
||||
send_eof(THD *thd, bool no_flush)
|
||||
{
|
||||
static char eof_buff[1]= { (char) 254 }; /* Marker for end of fields */
|
||||
NET *net= &thd->net;
|
||||
DBUG_ENTER("send_eof");
|
||||
if (net->vio != 0)
|
||||
{
|
||||
if (!no_flush && (thd->client_capabilities & CLIENT_PROTOCOL_41))
|
||||
if (thd->client_capabilities & CLIENT_PROTOCOL_41)
|
||||
{
|
||||
uchar buff[5];
|
||||
uint tmp= min(thd->total_warn_count, 65535);
|
||||
|
|
@ -384,9 +384,8 @@ send_eof(THD *thd, bool no_flush)
|
|||
|
||||
bool send_old_password_request(THD *thd)
|
||||
{
|
||||
static char buff[1]= { (char) 254 };
|
||||
NET *net= &thd->net;
|
||||
return my_net_write(net, buff, 1) || net_flush(net);
|
||||
return my_net_write(net, eof_buff, 1) || net_flush(net);
|
||||
}
|
||||
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
|
|
@ -585,7 +584,7 @@ bool Protocol::send_fields(List<Item> *list, uint flag)
|
|||
#endif
|
||||
}
|
||||
|
||||
send_eof(thd, 1);
|
||||
my_net_write(&thd->net, eof_buff, 1);
|
||||
DBUG_RETURN(prepare_for_send(list));
|
||||
|
||||
err:
|
||||
|
|
|
|||
|
|
@ -732,7 +732,7 @@ static int fetch_db_tables(THD *thd, MYSQL *mysql, const char *db,
|
|||
int error;
|
||||
if (table_rules_on)
|
||||
{
|
||||
table.next= 0;
|
||||
bzero((char*) &table, sizeof(table)); //just for safe
|
||||
table.db= (char*) db;
|
||||
table.real_name= (char*) table_name;
|
||||
table.updating= 1;
|
||||
|
|
|
|||
|
|
@ -695,7 +695,6 @@ struct show_var_st init_vars[]= {
|
|||
{"port", (char*) &mysqld_port, SHOW_INT},
|
||||
{"protocol_version", (char*) &protocol_version, SHOW_INT},
|
||||
{sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS},
|
||||
{sys_pseudo_thread_id.name, (char*) &sys_pseudo_thread_id, SHOW_SYS},
|
||||
{sys_query_alloc_block_size.name, (char*) &sys_query_alloc_block_size,
|
||||
SHOW_SYS},
|
||||
#ifdef HAVE_QUERY_CACHE
|
||||
|
|
|
|||
|
|
@ -285,7 +285,7 @@ character-set=latin2
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -298,7 +298,7 @@ character-set=latin2
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support, they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -292,7 +292,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -300,7 +300,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -289,7 +289,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working",
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working",
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ character-set=latin7
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -294,7 +294,7 @@ character-set=latin7
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -289,7 +289,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ character-set=greek
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -289,7 +289,7 @@ character-set=greek
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -278,7 +278,7 @@ character-set=latin2
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -291,7 +291,7 @@ character-set=latin2
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -289,7 +289,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -278,7 +278,7 @@ character-set=ujis
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -291,7 +291,7 @@ character-set=ujis
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ character-set=euckr
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -289,7 +289,7 @@ character-set=euckr
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -278,7 +278,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -291,7 +291,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -278,7 +278,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -291,7 +291,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -280,7 +280,7 @@ character-set=latin2
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -293,7 +293,7 @@ character-set=latin2
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -291,6 +291,6 @@ character-set=latin1
|
|||
"MySQL foi inicializado em modo --skip-name-resolve. Você necesita reincializá-lo sem esta opção para este grant funcionar",
|
||||
"Motor de tabela desconhecido '%s'",
|
||||
"'%s' é desatualizado. Use '%s' em seu lugar.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -280,7 +280,7 @@ character-set=latin2
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -293,7 +293,7 @@ character-set=latin2
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ character-set=koi8r
|
|||
"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ IP-ÓÏËÅÔ",
|
||||
"÷ ÔÁÂÌÉÃÅ '%-.64s' ÎÅÔ ÔÁËÏÇÏ ÉÎÄÅËÓÁ, ËÁË × CREATE INDEX. óÏÚÄÁÊÔÅ ÔÁÂÌÉÃÕ ÚÁÎÏ×Ï",
|
||||
"áÒÇÕÍÅÎÔ ÒÁÚÄÅÌÉÔÅÌÑ ÐÏÌÅÊ - ÎÅ ÔÏÔ, ËÏÔÏÒÙÊ ÏÖÉÄÁÌÓÑ. ïÂÒÁÝÁÊÔÅÓØ Ë ÄÏËÕÍÅÎÔÁÃÉÉ",
|
||||
"æÉËÓÉÒÏ×ÁÎÎÙÊ ÒÁÚÍÅÒ ÚÁÐÉÓÉ Ó ÐÏÌÑÍÉ ÔÉÐÁ BLOB ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÌØÚÑ. ðÒÉÍÅÎÑÊÔÅ 'fields terminated by'.",
|
||||
"æÉËÓÉÒÏ×ÁÎÎÙÊ ÒÁÚÍÅÒ ÚÁÐÉÓÉ Ó ÐÏÌÑÍÉ ÔÉÐÁ BLOB ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÌØÚÑ, ÐÒÉÍÅÎÑÊÔÅ 'fields terminated by'",
|
||||
"æÁÊÌ '%-.64s' ÄÏÌÖÅÎ ÎÁÈÏÄÉÔØÓÑ × ÔÏÍ ÖÅ ËÁÔÁÌÏÇÅ, ÞÔÏ É ÂÁÚÁ ÄÁÎÎÙÈ, ÉÌÉ ÂÙÔØ ÏÂÝÅÄÏÓÔÕÐÎÙÍ ÄÌÑ ÞÔÅÎÉÑ",
|
||||
"æÁÊÌ '%-.80s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ",
|
||||
"úÁÐÉÓÅÊ: %ld õÄÁÌÅÎÏ: %ld ðÒÏÐÕÝÅÎÏ: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld",
|
||||
|
|
@ -278,7 +278,7 @@ character-set=koi8r
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"óÅÒ×ÅÒ ÚÁÐÕÝÅÎ × ÒÅÖÉÍÅ --secure-auth (ÂÅÚÏÐÁÓÎÏÊ Á×ÔÏÒÉÚÁÃÉÉ), ÎÏ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ '%s'@'%s' ÐÁÒÏÌØ ÓÏÈÒÁÎ£Î × ÓÔÁÒÏÍ ÆÏÒÍÁÔÅ; ÎÅÏÂÈÏÄÉÍÏ ÏÂÎÏ×ÉÔØ ÆÏÒÍÁÔ ÐÁÒÏÌÑ",
|
||||
"ðÏÌÅ ÉÌÉ ÓÓÙÌËÁ '%-.64s%s%-.64s%s%-.64s' ÉÚ SELECTÁ #%d ÂÙÌÁ ÎÁÊÄÅÎÁ × SELECTÅ #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -291,7 +291,7 @@ character-set=koi8r
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"ôÁÂÌÉÃÁ %-.100s × %s ÎÅ ÍÏÖÅÔ ÉÚÍÅÎÑÔÓÑ.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"ôÁÂÌÉÃÁ %-.100s × %s ÎÅ ÍÏÖÅÔ ÉÚÍÅÎÑÔÓÑ",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ character-set=cp1250
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -284,7 +284,7 @@ character-set=cp1250
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ character-set=latin2
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -297,7 +297,7 @@ character-set=latin2
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -278,7 +278,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -291,7 +291,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ character-set=latin1
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -289,7 +289,7 @@ character-set=latin1
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"The target table %-.100s of the %s is not updatable.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"The target table %-.100s of the %s is not updatable",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ character-set=koi8u
|
|||
"ðÏ×ÎÏ×ÁÖÅÎØ ÎÅ ×ÉÚÎÁÞÅÎÏ ÄÌÑ ËÏÒÉÓÔÕ×ÁÞÁ '%-.32s' Ú ÈÏÓÔÕ '%-.64s'",
|
||||
"%-.16s ËÏÍÁÎÄÁ ÚÁÂÏÒÏÎÅÎÁ ËÏÒÉÓÔÕ×ÁÞÕ: '%-.32s'@'%-.64s' Õ ÔÁÂÌÉæ '%-.64s'",
|
||||
"%-.16s ËÏÍÁÎÄÁ ÚÁÂÏÒÏÎÅÎÁ ËÏÒÉÓÔÕ×ÁÞÕ: '%-.32s'@'%-.64s' ÄÌÑ ÓÔÏ×ÂÃÑ '%-.64s' Õ ÔÁÂÌÉæ '%-.64s'",
|
||||
"èÉÂÎÁ GRANT/REVOKE ËÏÍÁÎÄÁ. ðÒÏÞÉÔÁÊÔÅ ÄÏËÕÍÅÎÔÁæÀ ÓÔÏÓÏ×ÎÏ ÔÏÇÏ, Ñ˦ ÐÒÁ×Á ÍÏÖÎÁ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ.",
|
||||
"èÉÂÎÁ GRANT/REVOKE ËÏÍÁÎÄÁ; ÐÒÏÞÉÔÁÊÔÅ ÄÏËÕÍÅÎÔÁæÀ ÓÔÏÓÏ×ÎÏ ÔÏÇÏ, Ñ˦ ÐÒÁ×Á ÍÏÖÎÁ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ",
|
||||
"áÒÇÕÍÅÎÔ host ÁÂÏ user ÄÌÑ GRANT ÚÁÄÏ×ÇÉÊ",
|
||||
"ôÁÂÌÉÃÑ '%-.64s.%-.64s' ÎÅ ¦ÓÎÕ¤",
|
||||
"ðÏ×ÎÏ×ÁÖÅÎØ ÎÅ ×ÉÚÎÁÞÅÎÏ ÄÌÑ ËÏÒÉÓÔÕ×ÁÞÁ '%-.32s' Ú ÈÏÓÔÕ '%-.64s' ÄÌÑ ÔÁÂÌÉæ '%-.64s'",
|
||||
|
|
@ -281,7 +281,7 @@ character-set=koi8u
|
|||
"Illegal mix of collations for operation '%s'",
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
"Unknown collation: '%-.64s'",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
|
||||
"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
|
||||
"óÔÏ×ÂÅÃØ ÁÂÏ ÐÏÓÉÌÁÎÎÑ '%-.64s%s%-.64s%s%-.64s' ¦Ú SELECTÕ #%d ÂÕÌÏ ÚÎÁÊÄÅÎÅ Õ SELECT¦ #%d",
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
|
|
@ -294,7 +294,7 @@ character-set=koi8u
|
|||
"Unknown key cache '%-.100s'",
|
||||
"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
|
||||
"Unknown table engine '%s'",
|
||||
"'%s' is deprecated. Use '%s' instead.",
|
||||
"ôÁÂÌÉÃÑ %-.100s Õ %s ÎÅ ÍÏÖÅ ÏÎÏ×ÌÀ×ÁÔÉÓØ.",
|
||||
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
|
||||
"'%s' is deprecated, use '%s' instead",
|
||||
"ôÁÂÌÉÃÑ %-.100s Õ %s ÎÅ ÍÏÖÅ ÏÎÏ×ÌÀ×ÁÔÉÓØ",
|
||||
"The '%s' feature was disabled; you need MySQL built with '%s' define to have it working"
|
||||
"MySQL is started in --skip-grant-tables mode. You can't use this command"
|
||||
|
|
|
|||
|
|
@ -173,7 +173,8 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
|
|||
tables[0].lock_type=tables[1].lock_type=tables[2].lock_type=TL_READ;
|
||||
tables[0].db=tables[1].db=tables[2].db=thd->db;
|
||||
|
||||
if (open_tables(thd,tables))
|
||||
uint counter;
|
||||
if (open_tables(thd, tables, &counter))
|
||||
{
|
||||
sql_print_error("Fatal error: Can't open privilege tables: %s",
|
||||
thd->net.last_error);
|
||||
|
|
@ -2247,7 +2248,7 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list,
|
|||
}
|
||||
#endif
|
||||
|
||||
if (open_and_lock_tables(thd,tables))
|
||||
if (simple_open_n_lock_tables(thd,tables))
|
||||
{ // Should never happen
|
||||
close_thread_tables(thd); /* purecov: deadcode */
|
||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||
|
|
@ -2395,7 +2396,7 @@ int mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
|
|||
}
|
||||
|
||||
/* open the mysql.user and mysql.db tables */
|
||||
|
||||
bzero((char*) &tables,sizeof(tables));
|
||||
tables[0].alias=tables[0].real_name=(char*) "user";
|
||||
tables[1].alias=tables[1].real_name=(char*) "db";
|
||||
tables[0].next=tables+1;
|
||||
|
|
@ -2421,7 +2422,7 @@ int mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
|
|||
}
|
||||
#endif
|
||||
|
||||
if (open_and_lock_tables(thd,tables))
|
||||
if (simple_open_n_lock_tables(thd,tables))
|
||||
{ // This should never happen
|
||||
close_thread_tables(thd); /* purecov: deadcode */
|
||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||
|
|
@ -2517,14 +2518,15 @@ my_bool grant_init(THD *org_thd)
|
|||
thd->store_globals();
|
||||
thd->db= my_strdup("mysql",MYF(0));
|
||||
thd->db_length=5; // Safety
|
||||
bzero((char*) &tables,sizeof(tables));
|
||||
bzero((char*) &tables, sizeof(tables));
|
||||
tables[0].alias=tables[0].real_name= (char*) "tables_priv";
|
||||
tables[1].alias=tables[1].real_name= (char*) "columns_priv";
|
||||
tables[0].next=tables+1;
|
||||
tables[0].lock_type=tables[1].lock_type=TL_READ;
|
||||
tables[0].db=tables[1].db=thd->db;
|
||||
|
||||
if (open_tables(thd,tables))
|
||||
uint counter;
|
||||
if (open_tables(thd, tables, &counter))
|
||||
goto end;
|
||||
|
||||
TABLE *ptr[2]; // Lock tables for quick update
|
||||
|
|
@ -2549,7 +2551,7 @@ my_bool grant_init(THD *org_thd)
|
|||
do
|
||||
{
|
||||
GRANT_TABLE *mem_check;
|
||||
if (!(mem_check=new GRANT_TABLE(t_table,c_table)) || !mem_check->ok())
|
||||
if (!(mem_check=new GRANT_TABLE(t_table,c_table)))
|
||||
{
|
||||
/* This could only happen if we are out memory */
|
||||
grant_option= FALSE; /* purecov: deadcode */
|
||||
|
|
@ -2568,7 +2570,7 @@ my_bool grant_init(THD *org_thd)
|
|||
}
|
||||
}
|
||||
|
||||
if (my_hash_insert(&column_priv_hash,(byte*) mem_check))
|
||||
if (mem_check->ok() && my_hash_insert(&column_priv_hash,(byte*) mem_check))
|
||||
{
|
||||
grant_option= FALSE;
|
||||
goto end_unlock;
|
||||
|
|
@ -3376,7 +3378,7 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (open_and_lock_tables(thd, tables))
|
||||
if (simple_open_n_lock_tables(thd, tables))
|
||||
{ // This should never happen
|
||||
close_thread_tables(thd);
|
||||
DBUG_RETURN(-1);
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ bool test_if_number(NUM_INFO *info, const char *str, uint str_len)
|
|||
info->decimals++;
|
||||
if (str == end)
|
||||
{
|
||||
info->dval = atod(begin);
|
||||
info->dval = my_atof(begin);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1305,9 +1305,9 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db,
|
|||
goto err; // Can't repair the table
|
||||
|
||||
TABLE_LIST table_list;
|
||||
bzero((char*) &table_list, sizeof(table_list)); // just for safe
|
||||
table_list.db=(char*) db;
|
||||
table_list.real_name=(char*) name;
|
||||
table_list.next=0;
|
||||
safe_mutex_assert_owner(&LOCK_open);
|
||||
|
||||
if ((error=lock_table_name(thd,&table_list)))
|
||||
|
|
@ -1356,24 +1356,42 @@ err:
|
|||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
** open all tables in list
|
||||
*****************************************************************************/
|
||||
/*
|
||||
Open all tables in list
|
||||
|
||||
int open_tables(THD *thd,TABLE_LIST *start)
|
||||
SYNOPSIS
|
||||
open_tables()
|
||||
thd - thread handler
|
||||
start - list of tables
|
||||
counter - number of opened tables will be return using this parameter
|
||||
|
||||
RETURN
|
||||
0 - OK
|
||||
-1 - error
|
||||
*/
|
||||
|
||||
int open_tables(THD *thd, TABLE_LIST *start, uint *counter)
|
||||
{
|
||||
TABLE_LIST *tables;
|
||||
bool refresh;
|
||||
int result=0;
|
||||
DBUG_ENTER("open_tables");
|
||||
*counter= 0;
|
||||
|
||||
thd->current_tablenr= 0;
|
||||
restart:
|
||||
thd->proc_info="Opening tables";
|
||||
for (tables=start ; tables ; tables=tables->next)
|
||||
{
|
||||
/*
|
||||
Ignore placeholders for derived tables. After derived tables
|
||||
processing, link to created temporary table will be put here.
|
||||
*/
|
||||
if (tables->derived)
|
||||
continue;
|
||||
(*counter)++;
|
||||
if (!tables->table &&
|
||||
!(tables->table=open_table(thd,
|
||||
!(tables->table= open_table(thd,
|
||||
tables->db,
|
||||
tables->real_name,
|
||||
tables->alias, &refresh)))
|
||||
|
|
@ -1522,15 +1540,57 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type)
|
|||
|
||||
|
||||
/*
|
||||
Open all tables in list and locks them for read.
|
||||
Open all tables in list and locks them for read without derived
|
||||
tables processing.
|
||||
|
||||
SYNOPSIS
|
||||
simple_open_n_lock_tables()
|
||||
thd - thread handler
|
||||
tables - list of tables for open&locking
|
||||
|
||||
RETURN
|
||||
0 - ok
|
||||
-1 - error
|
||||
|
||||
NOTE
|
||||
The lock will automaticly be freed by close_thread_tables()
|
||||
*/
|
||||
|
||||
int open_and_lock_tables(THD *thd,TABLE_LIST *tables)
|
||||
int simple_open_n_lock_tables(THD *thd, TABLE_LIST *tables)
|
||||
{
|
||||
if (open_tables(thd,tables) || lock_tables(thd,tables))
|
||||
return -1; /* purecov: inspected */
|
||||
return 0;
|
||||
DBUG_ENTER("simple_open_n_lock_tables");
|
||||
uint counter;
|
||||
if (open_tables(thd, tables, &counter) || lock_tables(thd, tables, counter))
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Open all tables in list, locks them and process derived tables
|
||||
tables processing.
|
||||
|
||||
SYNOPSIS
|
||||
open_and_lock_tables()
|
||||
thd - thread handler
|
||||
tables - list of tables for open&locking
|
||||
|
||||
RETURN
|
||||
0 - ok
|
||||
-1 - error
|
||||
|
||||
NOTE
|
||||
The lock will automaticly be freed by close_thread_tables()
|
||||
*/
|
||||
|
||||
int open_and_lock_tables(THD *thd, TABLE_LIST *tables)
|
||||
{
|
||||
DBUG_ENTER("open_and_lock_tables");
|
||||
uint counter;
|
||||
if (open_tables(thd, tables, &counter) || lock_tables(thd, tables, counter))
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
fix_tables_pointers(thd->lex->all_selects_list);
|
||||
DBUG_RETURN(mysql_handle_derived(thd->lex));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1541,6 +1601,7 @@ int open_and_lock_tables(THD *thd,TABLE_LIST *tables)
|
|||
lock_tables()
|
||||
thd Thread handler
|
||||
tables Tables to lock
|
||||
count umber of opened tables
|
||||
|
||||
NOTES
|
||||
You can't call lock_tables twice, as this would break the dead-lock-free
|
||||
|
|
@ -1552,7 +1613,7 @@ int open_and_lock_tables(THD *thd,TABLE_LIST *tables)
|
|||
-1 Error
|
||||
*/
|
||||
|
||||
int lock_tables(THD *thd,TABLE_LIST *tables)
|
||||
int lock_tables(THD *thd, TABLE_LIST *tables, uint count)
|
||||
{
|
||||
TABLE_LIST *table;
|
||||
if (!tables)
|
||||
|
|
@ -1561,14 +1622,14 @@ int lock_tables(THD *thd,TABLE_LIST *tables)
|
|||
if (!thd->locked_tables)
|
||||
{
|
||||
DBUG_ASSERT(thd->lock == 0); // You must lock everything at once
|
||||
uint count=0;
|
||||
for (table = tables ; table ; table=table->next)
|
||||
count++;
|
||||
TABLE **start,**ptr;
|
||||
if (!(ptr=start=(TABLE**) sql_alloc(sizeof(TABLE*)*count)))
|
||||
return -1;
|
||||
for (table = tables ; table ; table=table->next)
|
||||
{
|
||||
if (!table->derived)
|
||||
*(ptr++)= table->table;
|
||||
}
|
||||
if (!(thd->lock=mysql_lock_tables(thd,start,count)))
|
||||
return -1; /* purecov: inspected */
|
||||
}
|
||||
|
|
@ -1576,7 +1637,8 @@ int lock_tables(THD *thd,TABLE_LIST *tables)
|
|||
{
|
||||
for (table = tables ; table ; table=table->next)
|
||||
{
|
||||
if (check_lock_and_start_stmt(thd, table->table, table->lock_type))
|
||||
if (!table->derived &&
|
||||
check_lock_and_start_stmt(thd, table->table, table->lock_type))
|
||||
{
|
||||
ha_rollback_stmt(thd);
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -565,6 +565,7 @@ public:
|
|||
struct st_mysql_bind *client_params;
|
||||
char *extra_data;
|
||||
ulong extra_length;
|
||||
String query_rest;
|
||||
#endif
|
||||
NET net; // client connection descriptor
|
||||
MEM_ROOT warn_root; // For warnings and errors
|
||||
|
|
@ -1075,11 +1076,11 @@ public:
|
|||
uint hidden_field_count;
|
||||
uint group_parts,group_length,group_null_parts;
|
||||
uint quick_group;
|
||||
bool using_indirect_summary_function;
|
||||
bool using_indirect_summary_function, all_nulls;
|
||||
|
||||
TMP_TABLE_PARAM()
|
||||
:copy_funcs_it(copy_funcs), copy_field(0), group_parts(0),
|
||||
group_length(0), group_null_parts(0)
|
||||
group_length(0), group_null_parts(0), all_nulls(0)
|
||||
{}
|
||||
~TMP_TABLE_PARAM()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, SQL_LIST *order,
|
|||
|
||||
if ((open_and_lock_tables(thd, table_list)))
|
||||
DBUG_RETURN(-1);
|
||||
fix_tables_pointers(thd->lex->all_selects_list);
|
||||
table= table_list->table;
|
||||
table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
|
||||
thd->proc_info="init";
|
||||
|
|
|
|||
|
|
@ -25,6 +25,58 @@
|
|||
#include "sql_select.h"
|
||||
#include "sql_acl.h"
|
||||
|
||||
static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *s,
|
||||
TABLE_LIST *t);
|
||||
|
||||
/*
|
||||
Resolve derived tables in all queries
|
||||
|
||||
SYNOPSIS
|
||||
mysql_handle_derived()
|
||||
lex LEX for this thread
|
||||
|
||||
RETURN
|
||||
0 ok
|
||||
-1 Error
|
||||
1 Error and error message given
|
||||
*/
|
||||
|
||||
int
|
||||
mysql_handle_derived(LEX *lex)
|
||||
{
|
||||
if (lex->derived_tables)
|
||||
{
|
||||
for (SELECT_LEX *sl= lex->all_selects_list;
|
||||
sl;
|
||||
sl= sl->next_select_in_list())
|
||||
{
|
||||
for (TABLE_LIST *cursor= sl->get_table_list();
|
||||
cursor;
|
||||
cursor= cursor->next)
|
||||
{
|
||||
int res;
|
||||
if (cursor->derived && (res=mysql_derived(lex->thd, lex,
|
||||
cursor->derived,
|
||||
cursor)))
|
||||
{
|
||||
return res;
|
||||
}
|
||||
}
|
||||
if (lex->describe)
|
||||
{
|
||||
/*
|
||||
Force join->join_tmp creation, because we will use this JOIN
|
||||
twice for EXPLAIN and we have to have unchanged join for EXPLAINing
|
||||
*/
|
||||
sl->uncacheable|= UNCACHEABLE_EXPLAIN;
|
||||
sl->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Resolve derived tables in all queries
|
||||
|
||||
|
|
@ -49,9 +101,6 @@
|
|||
Derived tables is stored in thd->derived_tables and freed in
|
||||
close_thread_tables()
|
||||
|
||||
TODO
|
||||
Move creation of derived tables in open_and_lock_tables()
|
||||
|
||||
RETURN
|
||||
0 ok
|
||||
1 Error
|
||||
|
|
@ -59,7 +108,7 @@
|
|||
*/
|
||||
|
||||
|
||||
int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
||||
static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
||||
TABLE_LIST *org_table_list)
|
||||
{
|
||||
SELECT_LEX *first_select= unit->first_select();
|
||||
|
|
@ -73,43 +122,6 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||
SELECT_LEX *save_current_select= lex->current_select;
|
||||
DBUG_ENTER("mysql_derived");
|
||||
|
||||
/*
|
||||
In create_total_list, derived tables have to be treated in case of
|
||||
EXPLAIN, This is because unit/node is not deleted in that
|
||||
case. Current code in this function has to be improved to
|
||||
recognize better when this function is called from derived tables
|
||||
and when from other functions.
|
||||
*/
|
||||
if ((is_union || is_subsel) && unit->create_total_list(thd, lex, &tables, 1))
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
/*
|
||||
We have to do access checks here as this code is executed before any
|
||||
sql command is started to execute.
|
||||
*/
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
if (tables)
|
||||
res= check_table_access(thd,SELECT_ACL, tables,0);
|
||||
else
|
||||
res= check_access(thd, SELECT_ACL, any_db,0,0,0);
|
||||
if (res)
|
||||
DBUG_RETURN(1);
|
||||
#endif
|
||||
|
||||
if (!(res=open_and_lock_tables(thd,tables)))
|
||||
{
|
||||
if (is_union || is_subsel)
|
||||
{
|
||||
/*
|
||||
The following code is a re-do of fix_tables_pointers() found
|
||||
in sql_select.cc for UNION's within derived tables. The only
|
||||
difference is in navigation, as in derived tables we care for
|
||||
this level only.
|
||||
|
||||
*/
|
||||
fix_tables_pointers(unit);
|
||||
}
|
||||
|
||||
if (!(derived_result= new select_union(0)))
|
||||
DBUG_RETURN(1); // out of memory
|
||||
|
||||
|
|
@ -117,15 +129,6 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||
if ((res= unit->prepare(thd, derived_result, 0)))
|
||||
goto exit;
|
||||
|
||||
/*
|
||||
This is done in order to redo all field optimisations when any of the
|
||||
involved tables is used in the outer query
|
||||
*/
|
||||
if (tables)
|
||||
{
|
||||
for (TABLE_LIST *cursor= tables; cursor; cursor= cursor->next)
|
||||
cursor->table->clear_query_id= 1;
|
||||
}
|
||||
|
||||
derived_result->tmp_table_param.init();
|
||||
derived_result->tmp_table_param.field_count= unit->types.elements;
|
||||
|
|
@ -146,6 +149,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||
}
|
||||
derived_result->set_table(table);
|
||||
|
||||
|
||||
if (is_union)
|
||||
res= mysql_union(thd, lex, derived_result, unit);
|
||||
else
|
||||
|
|
@ -183,34 +187,25 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||
res= 1;
|
||||
else
|
||||
{
|
||||
org_table_list->real_name=table->real_name;
|
||||
org_table_list->table=table;
|
||||
org_table_list->real_name= table->real_name;
|
||||
org_table_list->table= table;
|
||||
if (org_table_list->table_list)
|
||||
{
|
||||
org_table_list->table_list->real_name= table->real_name;
|
||||
org_table_list->table_list->table= table;
|
||||
}
|
||||
table->derived_select_number= first_select->select_number;
|
||||
table->tmp_table= TMP_TABLE;
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
org_table_list->grant.privilege= SELECT_ACL;
|
||||
table->grant.privilege= SELECT_ACL;
|
||||
#endif
|
||||
if (lex->describe)
|
||||
{
|
||||
// to fix a problem in EXPLAIN
|
||||
if (tables)
|
||||
{
|
||||
for (TABLE_LIST *cursor= tables; cursor; cursor= cursor->next)
|
||||
if (cursor->table_list)
|
||||
cursor->table_list->table=cursor->table;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unit->exclude_tree();
|
||||
unit->cleanup();
|
||||
}
|
||||
org_table_list->db= (char *)"";
|
||||
// Force read of table stats in the optimizer
|
||||
table->file->info(HA_STATUS_VARIABLE);
|
||||
}
|
||||
}
|
||||
|
||||
if (!lex->describe)
|
||||
unit->cleanup();
|
||||
if (res)
|
||||
free_tmp_table(thd, table);
|
||||
else
|
||||
|
|
@ -223,7 +218,6 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||
exit:
|
||||
delete derived_result;
|
||||
lex->current_select= save_current_select;
|
||||
close_thread_tables(thd, 0, 1);
|
||||
}
|
||||
DBUG_RETURN(res);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,8 @@ static TABLE **find_table_ptr_by_name(THD *thd,const char *db,
|
|||
int mysql_ha_open(THD *thd, TABLE_LIST *tables)
|
||||
{
|
||||
HANDLER_TABLES_HACK(thd);
|
||||
int err=open_tables(thd,tables);
|
||||
uint counter;
|
||||
int err=open_tables(thd, tables, &counter);
|
||||
HANDLER_TABLES_HACK(thd);
|
||||
if (err)
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -188,7 +188,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||
res= open_and_lock_tables(thd, table_list);
|
||||
if (res)
|
||||
DBUG_RETURN(-1);
|
||||
fix_tables_pointers(thd->lex->all_selects_list);
|
||||
|
||||
table= table_list->table;
|
||||
thd->proc_info="init";
|
||||
|
|
@ -647,7 +646,8 @@ public:
|
|||
thd.command=COM_DELAYED_INSERT;
|
||||
thd.lex->current_select= 0; /* for my_message_sql */
|
||||
|
||||
bzero((char*) &thd.net,sizeof(thd.net)); // Safety
|
||||
bzero((char*) &thd.net, sizeof(thd.net)); // Safety
|
||||
bzero((char*) &table_list, sizeof(table_list)); // Safety
|
||||
thd.system_thread= SYSTEM_THREAD_DELAYED_INSERT;
|
||||
thd.host_or_ip= "";
|
||||
bzero((char*) &info,sizeof(info));
|
||||
|
|
|
|||
164
sql/sql_lex.cc
164
sql/sql_lex.cc
|
|
@ -181,6 +181,23 @@ static int find_keyword(LEX *lex, uint len, bool function)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Check if name is a keyword
|
||||
|
||||
SYNOPSIS
|
||||
is_keyword()
|
||||
name checked name
|
||||
len length of checked name
|
||||
|
||||
RETURN VALUES
|
||||
0 name is a keyword
|
||||
1 name isn't a keyword
|
||||
*/
|
||||
|
||||
bool is_keyword(const char *name, uint len)
|
||||
{
|
||||
return get_hash_symbol(name,len,0)!=0;
|
||||
}
|
||||
|
||||
/* make a copy of token before ptr and set yytoklen */
|
||||
|
||||
|
|
@ -193,6 +210,13 @@ static LEX_STRING get_token(LEX *lex,uint length)
|
|||
return tmp;
|
||||
}
|
||||
|
||||
/*
|
||||
todo:
|
||||
There are no dangerous charsets in mysql for function
|
||||
get_quoted_token yet. But it should be fixed in the
|
||||
future to operate multichar strings (like ucs2)
|
||||
*/
|
||||
|
||||
static LEX_STRING get_quoted_token(LEX *lex,uint length, char quote)
|
||||
{
|
||||
LEX_STRING tmp;
|
||||
|
|
@ -420,7 +444,6 @@ inline static uint int_token(const char *str,uint length)
|
|||
return ((uchar) str[-1] <= (uchar) cmp[-1]) ? smaller : bigger;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
yylex remember the following states from the following yylex()
|
||||
|
||||
|
|
@ -666,33 +689,17 @@ int yylex(void *arg, void *yythd)
|
|||
return(result_state);
|
||||
|
||||
case MY_LEX_USER_VARIABLE_DELIMITER:
|
||||
{
|
||||
char delim= c; // Used char
|
||||
lex->tok_start=lex->ptr; // Skip first `
|
||||
#ifdef USE_MB
|
||||
if (use_mb(cs))
|
||||
{
|
||||
while ((c=yyGet()) && c != delim && c != (uchar) NAMES_SEP_CHAR)
|
||||
{
|
||||
if (my_mbcharlen(cs, c) > 1)
|
||||
{
|
||||
int l;
|
||||
if ((l = my_ismbchar(cs,
|
||||
(const char *)lex->ptr-1,
|
||||
(const char *)lex->end_of_query)) == 0)
|
||||
break;
|
||||
lex->ptr += l-1;
|
||||
}
|
||||
}
|
||||
yylval->lex_str=get_token(lex,yyLength());
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
uint double_quotes= 0;
|
||||
char quote_char= c;
|
||||
char quote_char= c; // Used char
|
||||
lex->tok_start=lex->ptr; // Skip first `
|
||||
while ((c=yyGet()))
|
||||
{
|
||||
int l;
|
||||
if ((l= my_mbcharlen(cs, c)) == 1)
|
||||
{
|
||||
if (c == (uchar) NAMES_SEP_CHAR)
|
||||
break; /* Old .frm format can't handle this char */
|
||||
if (c == quote_char)
|
||||
{
|
||||
if (yyPeek() != quote_char)
|
||||
|
|
@ -701,16 +708,22 @@ int yylex(void *arg, void *yythd)
|
|||
double_quotes++;
|
||||
continue;
|
||||
}
|
||||
if (c == (uchar) NAMES_SEP_CHAR)
|
||||
}
|
||||
#ifdef USE_MB
|
||||
else if (l > 1)
|
||||
{
|
||||
lex->ptr += l-1;
|
||||
}
|
||||
else
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
if (double_quotes)
|
||||
yylval->lex_str=get_quoted_token(lex,yyLength() - double_quotes,
|
||||
quote_char);
|
||||
else
|
||||
yylval->lex_str=get_token(lex,yyLength());
|
||||
}
|
||||
if (c == delim)
|
||||
if (c == quote_char)
|
||||
yySkip(); // Skip end `
|
||||
lex->next_state= MY_LEX_START;
|
||||
return(IDENT_QUOTED);
|
||||
|
|
@ -885,8 +898,13 @@ int yylex(void *arg, void *yythd)
|
|||
}
|
||||
/* fall true */
|
||||
case MY_LEX_EOL:
|
||||
if (lex->ptr >= lex->end_of_query)
|
||||
{
|
||||
lex->next_state=MY_LEX_END; // Mark for next loop
|
||||
return(END_OF_INPUT);
|
||||
}
|
||||
state=MY_LEX_CHAR;
|
||||
break;
|
||||
case MY_LEX_END:
|
||||
lex->next_state=MY_LEX_END;
|
||||
return(0); // We found end of input last time
|
||||
|
|
@ -988,6 +1006,7 @@ void st_select_lex_unit::init_query()
|
|||
union_result= 0;
|
||||
table= 0;
|
||||
fake_select_lex= 0;
|
||||
cleaned= 0;
|
||||
}
|
||||
|
||||
void st_select_lex::init_query()
|
||||
|
|
@ -1286,12 +1305,10 @@ bool st_select_lex::test_limit()
|
|||
!0 - error
|
||||
*/
|
||||
bool st_select_lex_unit::create_total_list(THD *thd_arg, st_lex *lex,
|
||||
TABLE_LIST **result_arg,
|
||||
bool check_derived)
|
||||
TABLE_LIST **result_arg)
|
||||
{
|
||||
*result_arg= 0;
|
||||
res= create_total_list_n_last_return(thd_arg, lex, &result_arg,
|
||||
check_derived);
|
||||
res= create_total_list_n_last_return(thd_arg, lex, &result_arg);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -1303,8 +1320,7 @@ bool st_select_lex_unit::create_total_list(THD *thd_arg, st_lex *lex,
|
|||
thd THD pointer
|
||||
lex pointer on LEX stricture
|
||||
result pointer on pointer on result list of tables pointer
|
||||
check_derived force derived table chacking (used for creating
|
||||
table list for derived query)
|
||||
|
||||
DESCRIPTION
|
||||
This is used for UNION & subselect to create a new table list of all used
|
||||
tables.
|
||||
|
|
@ -1318,8 +1334,7 @@ bool st_select_lex_unit::create_total_list(THD *thd_arg, st_lex *lex,
|
|||
bool st_select_lex_unit::
|
||||
create_total_list_n_last_return(THD *thd_arg,
|
||||
st_lex *lex,
|
||||
TABLE_LIST ***result_arg,
|
||||
bool check_derived)
|
||||
TABLE_LIST ***result_arg)
|
||||
{
|
||||
TABLE_LIST *slave_list_first=0, **slave_list_last= &slave_list_first;
|
||||
TABLE_LIST **new_table_list= *result_arg, *aux;
|
||||
|
|
@ -1345,15 +1360,12 @@ create_total_list_n_last_return(THD *thd_arg,
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (sl->linkage == DERIVED_TABLE_TYPE && !check_derived)
|
||||
goto end;
|
||||
|
||||
for (SELECT_LEX_UNIT *inner= sl->first_inner_unit();
|
||||
inner;
|
||||
inner= inner->next_unit())
|
||||
{
|
||||
if (inner->create_total_list_n_last_return(thd, lex,
|
||||
&slave_list_last, 0))
|
||||
&slave_list_last))
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -1400,63 +1412,75 @@ end:
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
st_select_lex_unit* st_select_lex_unit::master_unit()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
st_select_lex* st_select_lex_unit::outer_select()
|
||||
{
|
||||
return (st_select_lex*) master;
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::add_order_to_list(THD *thd, Item *item, bool asc)
|
||||
{
|
||||
return add_to_list(thd, order_list, item, asc);
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::add_item_to_list(THD *thd, Item *item)
|
||||
{
|
||||
return item_list.push_back(item);
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::add_group_to_list(THD *thd, Item *item, bool asc)
|
||||
{
|
||||
return add_to_list(thd, group_list, item, asc);
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::add_ftfunc_to_list(Item_func_match *func)
|
||||
{
|
||||
return !func || ftfunc_list->push_back(func); // end of memory?
|
||||
}
|
||||
|
||||
|
||||
st_select_lex_unit* st_select_lex::master_unit()
|
||||
{
|
||||
return (st_select_lex_unit*) master;
|
||||
}
|
||||
|
||||
|
||||
st_select_lex* st_select_lex::outer_select()
|
||||
{
|
||||
return (st_select_lex*) master->get_master();
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::set_braces(bool value)
|
||||
{
|
||||
braces= value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::inc_in_sum_expr()
|
||||
{
|
||||
in_sum_expr++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint st_select_lex::get_in_sum_expr()
|
||||
{
|
||||
return in_sum_expr;
|
||||
}
|
||||
|
||||
|
||||
TABLE_LIST* st_select_lex::get_table_list()
|
||||
{
|
||||
return (TABLE_LIST*) table_list.first;
|
||||
|
|
@ -1467,21 +1491,25 @@ List<Item>* st_select_lex::get_item_list()
|
|||
return &item_list;
|
||||
}
|
||||
|
||||
|
||||
List<String>* st_select_lex::get_use_index()
|
||||
{
|
||||
return use_index_ptr;
|
||||
}
|
||||
|
||||
|
||||
List<String>* st_select_lex::get_ignore_index()
|
||||
{
|
||||
return ignore_index_ptr;
|
||||
}
|
||||
|
||||
|
||||
ulong st_select_lex::get_table_join_options()
|
||||
{
|
||||
return table_join_options;
|
||||
}
|
||||
|
||||
|
||||
bool st_select_lex::setup_ref_array(THD *thd, uint order_group_num)
|
||||
{
|
||||
if (ref_pointer_array)
|
||||
|
|
@ -1493,6 +1521,58 @@ bool st_select_lex::setup_ref_array(THD *thd, uint order_group_num)
|
|||
order_group_num)* 5)) == 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Find db.table which will be updated in this unit
|
||||
|
||||
SYNOPSIS
|
||||
st_select_lex_unit::check_updateable()
|
||||
db - data base name
|
||||
table - real table name
|
||||
|
||||
RETURN
|
||||
1 - found
|
||||
0 - OK (table did not found)
|
||||
*/
|
||||
bool st_select_lex_unit::check_updateable(char *db, char *table)
|
||||
{
|
||||
for(SELECT_LEX *sl= first_select(); sl; sl= sl->next_select())
|
||||
if (sl->check_updateable(db, table))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Find db.table which will be updated in this select and
|
||||
underlayed ones (except derived tables)
|
||||
|
||||
SYNOPSIS
|
||||
st_select_lex::check_updateable()
|
||||
db - data base name
|
||||
table - real table name
|
||||
|
||||
RETURN
|
||||
1 - found
|
||||
0 - OK (table did not found)
|
||||
*/
|
||||
bool st_select_lex::check_updateable(char *db, char *table)
|
||||
{
|
||||
if (find_real_table_in_list(get_table_list(), db, table))
|
||||
return 1;
|
||||
|
||||
for (SELECT_LEX_UNIT *un= first_inner_unit();
|
||||
un;
|
||||
un= un->next_unit())
|
||||
{
|
||||
if (un->first_select()->linkage != DERIVED_TABLE_TYPE &&
|
||||
un->check_updateable(db, table))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void st_select_lex_unit::print(String *str)
|
||||
{
|
||||
for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select())
|
||||
|
|
@ -1535,13 +1615,15 @@ void st_select_lex::print_order(String *str, ORDER *order)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void st_select_lex::print_limit(THD *thd, String *str)
|
||||
{
|
||||
if (!thd)
|
||||
thd= current_thd;
|
||||
|
||||
if (select_limit != thd->variables.select_limit ||
|
||||
select_limit != HA_POS_ERROR ||
|
||||
if ((select_limit != thd->variables.select_limit &&
|
||||
this == &thd->lex->select_lex) ||
|
||||
(select_limit != HA_POS_ERROR && this != &thd->lex->select_lex) ||
|
||||
offset_limit != 0L)
|
||||
{
|
||||
str->append(" limit ", 7);
|
||||
|
|
|
|||
|
|
@ -232,6 +232,7 @@ public:
|
|||
UNCACHEABLE_DEPENDENT
|
||||
UNCACHEABLE_RAND
|
||||
UNCACHEABLE_SIDEEFFECT
|
||||
UNCACHEABLE_EXPLAIN
|
||||
*/
|
||||
uint8 uncacheable;
|
||||
enum sub_select_type linkage;
|
||||
|
|
@ -304,7 +305,8 @@ protected:
|
|||
ulong found_rows_for_union;
|
||||
bool prepared, // prepare phase already performed for UNION (unit)
|
||||
optimized, // optimize phase already performed for UNION (unit)
|
||||
executed; // already executed
|
||||
executed, // already executed
|
||||
cleaned;
|
||||
|
||||
public:
|
||||
// list of fields which points to temporary table for union
|
||||
|
|
@ -336,8 +338,7 @@ public:
|
|||
uint union_option;
|
||||
|
||||
void init_query();
|
||||
bool create_total_list(THD *thd, st_lex *lex, TABLE_LIST **result,
|
||||
bool check_current_derived);
|
||||
bool create_total_list(THD *thd, st_lex *lex, TABLE_LIST **result);
|
||||
st_select_lex_unit* master_unit();
|
||||
st_select_lex* outer_select();
|
||||
st_select_lex* first_select() { return (st_select_lex*) slave; }
|
||||
|
|
@ -355,14 +356,15 @@ public:
|
|||
int exec();
|
||||
int cleanup();
|
||||
|
||||
bool check_updateable(char *db, char *table);
|
||||
void print(String *str);
|
||||
|
||||
|
||||
friend void mysql_init_query(THD *thd);
|
||||
friend int subselect_union_engine::exec();
|
||||
private:
|
||||
bool create_total_list_n_last_return(THD *thd, st_lex *lex,
|
||||
TABLE_LIST ***result,
|
||||
bool check_current_derived);
|
||||
TABLE_LIST ***result);
|
||||
};
|
||||
typedef class st_select_lex_unit SELECT_LEX_UNIT;
|
||||
|
||||
|
|
@ -497,6 +499,7 @@ public:
|
|||
init_select();
|
||||
}
|
||||
bool setup_ref_array(THD *thd, uint order_group_num);
|
||||
bool check_updateable(char *db, char *table);
|
||||
void print(THD *thd, String *str);
|
||||
static void print_order(String *str, ORDER *order);
|
||||
void print_limit(THD *thd, String *str);
|
||||
|
|
|
|||
|
|
@ -143,18 +143,6 @@ int handle_olaps(LEX *lex, SELECT_LEX *select_lex)
|
|||
int count=select_lex->group_list.elements;
|
||||
int sl_return=0;
|
||||
|
||||
// a fix for UNION's
|
||||
for (TABLE_LIST *cursor= (TABLE_LIST *)select_lex->table_list.first;
|
||||
cursor;
|
||||
cursor=cursor->next)
|
||||
{
|
||||
if (cursor->do_redirect)
|
||||
{
|
||||
//Sinisa TODO: there are function for this purpose: fix_tables_pointers
|
||||
cursor->table= cursor->table_list->table;
|
||||
cursor->do_redirect= 0;
|
||||
}
|
||||
}
|
||||
|
||||
lex->last_selects=select_lex;
|
||||
|
||||
|
|
|
|||
120
sql/sql_parse.cc
120
sql/sql_parse.cc
|
|
@ -206,7 +206,21 @@ int check_user(THD *thd, enum enum_server_command command,
|
|||
|
||||
#ifdef NO_EMBEDDED_ACCESS_CHECKS
|
||||
thd->master_access= GLOBAL_ACLS; // Full rights
|
||||
return 0;
|
||||
/* Change database if necessary: OK or FAIL is sent in mysql_change_db */
|
||||
if (db && db[0])
|
||||
{
|
||||
thd->db= 0;
|
||||
thd->db_length= 0;
|
||||
if (mysql_change_db(thd, db))
|
||||
{
|
||||
if (thd->user_connect)
|
||||
decrease_user_connections(thd->user_connect);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
}
|
||||
else
|
||||
send_ok(thd);
|
||||
DBUG_RETURN(0);
|
||||
#else
|
||||
|
||||
my_bool opt_secure_auth_local;
|
||||
|
|
@ -1282,7 +1296,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
send_error(thd); // dump to NET
|
||||
break;
|
||||
}
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
case COM_CHANGE_USER:
|
||||
{
|
||||
thd->change_user();
|
||||
|
|
@ -1301,13 +1314,14 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
|
||||
*passwd++ : strlen(passwd);
|
||||
db+= passwd_len + 1;
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
/* Small check for incomming packet */
|
||||
if ((uint) ((uchar*) db - net->read_pos) > packet_length)
|
||||
{
|
||||
send_error(thd, ER_UNKNOWN_COM_ERROR);
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
/* Convert database name to utf8 */
|
||||
db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1,
|
||||
system_charset_info, db, strlen(db),
|
||||
|
|
@ -1358,7 +1372,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
}
|
||||
break;
|
||||
}
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
case COM_EXECUTE:
|
||||
{
|
||||
mysql_stmt_execute(thd, packet);
|
||||
|
|
@ -1397,11 +1410,13 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
char *packet= thd->lex->found_colon;
|
||||
/*
|
||||
Multiple queries exits, execute them individually
|
||||
in embedded server - just store them to be executed later
|
||||
*/
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
if (thd->lock || thd->open_tables || thd->derived_tables)
|
||||
close_thread_tables(thd);
|
||||
|
||||
ulong length= thd->query_length-(ulong)(thd->lex->found_colon-thd->query);
|
||||
#endif
|
||||
ulong length= thd->query_length-(ulong)(packet-thd->query);
|
||||
|
||||
/* Remove garbage at start of query */
|
||||
while (my_isspace(thd->charset(), *packet) && length > 0)
|
||||
|
|
@ -1414,7 +1429,22 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
||||
thd->query_id= query_id++;
|
||||
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
mysql_parse(thd, packet, length);
|
||||
#else
|
||||
/*
|
||||
'packet' can point inside the query_rest's buffer
|
||||
so we have to do memmove here
|
||||
*/
|
||||
if (thd->query_rest.length() > length)
|
||||
{
|
||||
memmove(thd->query_rest.c_ptr(), packet, length);
|
||||
thd->query_rest.length(length);
|
||||
}
|
||||
else
|
||||
thd->query_rest.copy(length);
|
||||
break;
|
||||
#endif /*EMBEDDED_LIBRARY*/
|
||||
}
|
||||
|
||||
if (!(specialflag & SPECIAL_NO_PRIOR))
|
||||
|
|
@ -1789,34 +1819,9 @@ mysql_execute_command(THD *thd)
|
|||
#endif
|
||||
}
|
||||
#endif /* !HAVE_REPLICATION */
|
||||
/*
|
||||
TODO: make derived tables processing 'inside' SELECT processing.
|
||||
TODO: solve problem with depended derived tables in subselects
|
||||
*/
|
||||
if (lex->derived_tables)
|
||||
{
|
||||
for (SELECT_LEX *sl= lex->all_selects_list;
|
||||
sl;
|
||||
sl= sl->next_select_in_list())
|
||||
{
|
||||
for (TABLE_LIST *cursor= sl->get_table_list();
|
||||
cursor;
|
||||
cursor= cursor->next)
|
||||
{
|
||||
if (cursor->derived && (res=mysql_derived(thd, lex,
|
||||
cursor->derived,
|
||||
cursor)))
|
||||
{
|
||||
if (res < 0 || thd->net.report_error)
|
||||
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN : 0);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (&lex->select_lex != lex->all_selects_list &&
|
||||
lex->sql_command != SQLCOM_CREATE_TABLE &&
|
||||
lex->unit.create_total_list(thd, lex, &tables, 0))
|
||||
lex->unit.create_total_list(thd, lex, &tables))
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
/*
|
||||
|
|
@ -1875,7 +1880,6 @@ mysql_execute_command(THD *thd)
|
|||
}
|
||||
else
|
||||
thd->send_explain_fields(result);
|
||||
fix_tables_pointers(lex->all_selects_list);
|
||||
res= mysql_explain_union(thd, &thd->lex->unit, result);
|
||||
MYSQL_LOCK *save_lock= thd->lock;
|
||||
thd->lock= (MYSQL_LOCK *)0;
|
||||
|
|
@ -1914,7 +1918,6 @@ mysql_execute_command(THD *thd)
|
|||
(res= open_and_lock_tables(thd,tables))))
|
||||
break;
|
||||
|
||||
fix_tables_pointers(lex->all_selects_list);
|
||||
res= mysql_do(thd, *lex->insert_list);
|
||||
if (thd->net.report_error)
|
||||
res= -1;
|
||||
|
|
@ -2123,7 +2126,7 @@ mysql_execute_command(THD *thd)
|
|||
lex->select_lex.table_list.first= (byte*) (tables);
|
||||
create_table->next= 0;
|
||||
if (&lex->select_lex != lex->all_selects_list &&
|
||||
lex->unit.create_total_list(thd, lex, &tables, 0))
|
||||
lex->unit.create_total_list(thd, lex, &tables))
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
ulong want_priv= ((lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) ?
|
||||
|
|
@ -2338,6 +2341,8 @@ mysql_execute_command(THD *thd)
|
|||
if (grant_option)
|
||||
{
|
||||
TABLE_LIST old_list,new_list;
|
||||
bzero((char*) &old_list, sizeof(old_list));
|
||||
bzero((char*) &new_list, sizeof(new_list)); // Safety
|
||||
old_list=table[0];
|
||||
new_list=table->next[0];
|
||||
old_list.next=new_list.next=0;
|
||||
|
|
@ -2669,23 +2674,15 @@ mysql_execute_command(THD *thd)
|
|||
}
|
||||
if (!walk)
|
||||
{
|
||||
if (lex->derived_tables)
|
||||
{
|
||||
// are we trying to delete derived table?
|
||||
for (walk= (TABLE_LIST*) tables; walk; walk= walk->next)
|
||||
{
|
||||
if (!strcmp(auxi->real_name,walk->alias) &&
|
||||
walk->derived)
|
||||
net_printf(thd, ER_NONUNIQ_TABLE, auxi->real_name);
|
||||
goto error;
|
||||
}
|
||||
if (walk->derived)
|
||||
{
|
||||
net_printf(thd, ER_NON_UPDATABLE_TABLE,
|
||||
auxi->real_name, "DELETE");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
net_printf(thd, ER_NONUNIQ_TABLE, auxi->real_name);
|
||||
goto error;
|
||||
}
|
||||
walk->lock_type= auxi->lock_type;
|
||||
auxi->table_list= walk; // Remember corresponding table
|
||||
}
|
||||
|
|
@ -2699,21 +2696,27 @@ mysql_execute_command(THD *thd)
|
|||
break;
|
||||
/* Fix tables-to-be-deleted-from list to point at opened tables */
|
||||
for (auxi=(TABLE_LIST*) aux_tables ; auxi ; auxi=auxi->next)
|
||||
{
|
||||
auxi->table= auxi->table_list->table;
|
||||
if (&lex->select_lex != lex->all_selects_list)
|
||||
/*
|
||||
Multi-delete can't be constructed over-union => we always have
|
||||
single SELECT on top and have to check underlaying SELECTs of it
|
||||
*/
|
||||
for (SELECT_LEX_UNIT *un= lex->select_lex.first_inner_unit();
|
||||
un;
|
||||
un= un->next_unit())
|
||||
{
|
||||
for (TABLE_LIST *t= select_lex->get_table_list();
|
||||
t; t= t->next)
|
||||
if (un->first_select()->linkage != DERIVED_TABLE_TYPE &&
|
||||
un->check_updateable(auxi->table_list->db,
|
||||
auxi->table_list->real_name))
|
||||
{
|
||||
if (find_real_table_in_list(t->table_list->next, t->db, t->real_name))
|
||||
{
|
||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), t->real_name);
|
||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), auxi->table_list->real_name);
|
||||
res= -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
fix_tables_pointers(lex->all_selects_list);
|
||||
|
||||
if (!thd->is_fatal_error && (result= new multi_delete(thd,aux_tables,
|
||||
table_count)))
|
||||
{
|
||||
|
|
@ -2958,7 +2961,6 @@ mysql_execute_command(THD *thd)
|
|||
if (tables && ((res= check_table_access(thd, SELECT_ACL, tables,0)) ||
|
||||
(res= open_and_lock_tables(thd,tables))))
|
||||
break;
|
||||
fix_tables_pointers(lex->all_selects_list);
|
||||
if (!(res= sql_set_variables(thd, &lex->var_list)))
|
||||
send_ok(thd);
|
||||
if (thd->net.report_error)
|
||||
|
|
@ -3758,7 +3760,9 @@ mysql_init_select(LEX *lex)
|
|||
{
|
||||
SELECT_LEX *select_lex= lex->current_select;
|
||||
select_lex->init_select();
|
||||
select_lex->select_limit= lex->thd->variables.select_limit;
|
||||
select_lex->select_limit= (&lex->select_lex == select_lex) ?
|
||||
lex->thd->variables.select_limit : /* Primry UNION */
|
||||
HA_POS_ERROR; /* subquery */
|
||||
if (select_lex == &lex->select_lex)
|
||||
{
|
||||
lex->exchange= 0;
|
||||
|
|
@ -3810,7 +3814,9 @@ mysql_new_select(LEX *lex, bool move_down)
|
|||
fake->select_number= INT_MAX;
|
||||
fake->make_empty_select();
|
||||
fake->linkage= GLOBAL_OPTIONS_TYPE;
|
||||
fake->select_limit= lex->thd->variables.select_limit;
|
||||
fake->select_limit= (&lex->unit == unit) ?
|
||||
lex->thd->variables.select_limit : /* Primry UNION */
|
||||
HA_POS_ERROR; /* subquery */
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -733,7 +733,7 @@ static bool mysql_test_select_fields(Prepared_statement *stmt,
|
|||
DBUG_RETURN(1);
|
||||
#endif
|
||||
if ((&lex->select_lex != lex->all_selects_list &&
|
||||
lex->unit.create_total_list(thd, lex, &tables, 0)))
|
||||
lex->unit.create_total_list(thd, lex, &tables)))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
if (open_and_lock_tables(thd, tables))
|
||||
|
|
@ -746,7 +746,6 @@ static bool mysql_test_select_fields(Prepared_statement *stmt,
|
|||
}
|
||||
else
|
||||
{
|
||||
fix_tables_pointers(lex->all_selects_list);
|
||||
if (!result && !(result= new select_send()))
|
||||
{
|
||||
send_error(thd, ER_OUT_OF_RESOURCES);
|
||||
|
|
|
|||
|
|
@ -173,7 +173,6 @@ int handle_select(THD *thd, LEX *lex, select_result *result)
|
|||
register SELECT_LEX *select_lex = &lex->select_lex;
|
||||
DBUG_ENTER("handle_select");
|
||||
|
||||
fix_tables_pointers(lex->all_selects_list);
|
||||
if (select_lex->next_select())
|
||||
res=mysql_union(thd, lex, result, &lex->unit);
|
||||
else
|
||||
|
|
@ -1511,12 +1510,7 @@ JOIN::cleanup()
|
|||
JOIN_TAB *tab, *end;
|
||||
for (tab= join_tab, end= tab+tables ; tab != end ; tab++)
|
||||
{
|
||||
delete tab->select;
|
||||
delete tab->quick;
|
||||
tab->select=0;
|
||||
tab->quick=0;
|
||||
x_free(tab->cache.buff);
|
||||
tab->cache.buff= 0;
|
||||
tab->cleanup();
|
||||
}
|
||||
}
|
||||
tmp_join->tmp_join= 0;
|
||||
|
|
@ -1580,8 +1574,8 @@ mysql_select(THD *thd, Item ***rref_pointer_array,
|
|||
goto err;
|
||||
}
|
||||
}
|
||||
free_join= 0;
|
||||
}
|
||||
free_join= 0;
|
||||
join->select_options= select_options;
|
||||
}
|
||||
else
|
||||
|
|
@ -3760,6 +3754,41 @@ bool error_if_full_join(JOIN *join)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
cleanup JOIN_TAB
|
||||
|
||||
SYNOPSIS
|
||||
JOIN_TAB::cleanup()
|
||||
*/
|
||||
|
||||
void JOIN_TAB::cleanup()
|
||||
{
|
||||
delete select;
|
||||
select= 0;
|
||||
delete quick;
|
||||
quick= 0;
|
||||
x_free(cache.buff);
|
||||
cache.buff= 0;
|
||||
if (table)
|
||||
{
|
||||
if (table->key_read)
|
||||
{
|
||||
table->key_read= 0;
|
||||
table->file->extra(HA_EXTRA_NO_KEYREAD);
|
||||
}
|
||||
/* Don't free index if we are using read_record */
|
||||
if (!read_record.table)
|
||||
table->file->index_end();
|
||||
/*
|
||||
We need to reset this for next select
|
||||
(Tested in part_of_refkey)
|
||||
*/
|
||||
table->reginfo.join_tab= 0;
|
||||
}
|
||||
end_read_record(&read_record);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Free resources of given join
|
||||
|
||||
|
|
@ -3794,11 +3823,6 @@ JOIN::join_free(bool full)
|
|||
{
|
||||
if (tab->table)
|
||||
{
|
||||
if (tab->table->key_read)
|
||||
{
|
||||
tab->table->key_read= 0;
|
||||
tab->table->file->extra(HA_EXTRA_NO_KEYREAD);
|
||||
}
|
||||
/* Don't free index if we are using read_record */
|
||||
if (!tab->read_record.table)
|
||||
tab->table->file->index_end();
|
||||
|
|
@ -3809,29 +3833,7 @@ JOIN::join_free(bool full)
|
|||
{
|
||||
for (tab= join_tab, end= tab+tables; tab != end; tab++)
|
||||
{
|
||||
delete tab->select;
|
||||
delete tab->quick;
|
||||
tab->select=0;
|
||||
tab->quick=0;
|
||||
x_free(tab->cache.buff);
|
||||
tab->cache.buff= 0;
|
||||
if (tab->table)
|
||||
{
|
||||
if (tab->table->key_read)
|
||||
{
|
||||
tab->table->key_read= 0;
|
||||
tab->table->file->extra(HA_EXTRA_NO_KEYREAD);
|
||||
}
|
||||
/* Don't free index if we are using read_record */
|
||||
if (!tab->read_record.table)
|
||||
tab->table->file->index_end();
|
||||
/*
|
||||
We need to reset this for next select
|
||||
(Tested in part_of_refkey)
|
||||
*/
|
||||
tab->table->reginfo.join_tab= 0;
|
||||
}
|
||||
end_read_record(&tab->read_record);
|
||||
tab->cleanup();
|
||||
}
|
||||
table= 0;
|
||||
}
|
||||
|
|
@ -4962,6 +4964,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||
tmp_from_field, group != 0,not_all_columns);
|
||||
if (!new_field)
|
||||
goto err; // Should be OOM
|
||||
if (param->all_nulls)
|
||||
new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join
|
||||
tmp_from_field++;
|
||||
*(reg_field++)= new_field;
|
||||
reclength+=new_field->pack_length();
|
||||
|
|
@ -4997,6 +5001,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||
goto err; // Got OOM
|
||||
continue; // Some kindf of const item
|
||||
}
|
||||
if (param->all_nulls)
|
||||
new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join
|
||||
if (type == Item::SUM_FUNC_ITEM)
|
||||
((Item_sum *) item)->result_field= new_field;
|
||||
tmp_from_field++;
|
||||
|
|
@ -9149,6 +9155,9 @@ int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
|
|||
sl;
|
||||
sl= sl->next_select())
|
||||
{
|
||||
// drop UNCACHEABLE_EXPLAIN, because it is for internal usage only
|
||||
uint8 uncacheable= (sl->uncacheable & ~UNCACHEABLE_EXPLAIN);
|
||||
|
||||
res= mysql_explain_select(thd, sl,
|
||||
(((&thd->lex->select_lex)==sl)?
|
||||
((thd->lex->all_selects_list != sl) ?
|
||||
|
|
@ -9156,13 +9165,13 @@ int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
|
|||
((sl == first)?
|
||||
((sl->linkage == DERIVED_TABLE_TYPE) ?
|
||||
"DERIVED":
|
||||
((sl->uncacheable & UNCACHEABLE_DEPENDENT) ?
|
||||
((uncacheable & UNCACHEABLE_DEPENDENT) ?
|
||||
"DEPENDENT SUBQUERY":
|
||||
(sl->uncacheable?"UNCACHEABLE SUBQUERY":
|
||||
(uncacheable?"UNCACHEABLE SUBQUERY":
|
||||
"SUBQUERY"))):
|
||||
((sl->uncacheable & UNCACHEABLE_DEPENDENT) ?
|
||||
((uncacheable & UNCACHEABLE_DEPENDENT) ?
|
||||
"DEPENDENT UNION":
|
||||
sl->uncacheable?"UNCACHEABLE UNION":
|
||||
uncacheable?"UNCACHEABLE UNION":
|
||||
"UNION"))),
|
||||
result);
|
||||
if (res)
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue