diff options
author | unknown <igor@rurik.mysql.com> | 2003-08-02 03:27:13 -0700 |
---|---|---|
committer | unknown <igor@rurik.mysql.com> | 2003-08-02 03:27:13 -0700 |
commit | 681b73df5d28c5a5ffba4e2dc997d52e161b9c96 (patch) | |
tree | 9b362c3da6dc4320729d7341e21320842d5add96 | |
parent | 935c7fd15546972c078a3b1a22ef4e808ed5fd59 (diff) | |
parent | b97d0ea2c3c2d325c56f01a8edf26e7944dea749 (diff) | |
download | mariadb-git-681b73df5d28c5a5ffba4e2dc997d52e161b9c96.tar.gz |
Merge rurik.mysql.com:/home/igor/mysql-4.1
into rurik.mysql.com:/home/igor/dev/mysql-4.1-0
include/my_sys.h:
Auto merged
mysql-test/r/func_group.result:
Auto merged
sql/handler.cc:
Auto merged
sql/item_cmpfunc.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.h:
Auto merged
146 files changed, 1767 insertions, 3191 deletions
diff --git a/.bzrignore b/.bzrignore index 4e9ce4e41ab..35db3c5d5ba 100644 --- a/.bzrignore +++ b/.bzrignore @@ -622,3 +622,7 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl +libmysqld/client.c +libmysqld/client_settings.h +libmysqld/libmysql.c +libmysqld/pack.c diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 794edcdd968..415461d735d 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -20,10 +20,12 @@ bk@admin.bk bk@mysql.r18.ru carsten@tsort.bitbybit.dk davida@isil.mysql.com +dlenev@mysql.com gluh@gluh.(none) gluh@gluh.mysql.r18.ru greg@mysql.com guilhem@mysql.com +gweir@build.mysql.com gweir@work.mysql.com heikki@donna.mysql.fi heikki@hundin.mysql.fi @@ -51,6 +53,8 @@ jcole@sarvik.tfr.cafe.ee jcole@tetra.spaceapes.com jorge@linux.jorge.mysql.com kaj@work.mysql.com +konstantin@mysql.com +kostja@oak.local lenz@kallisto.mysql.com lenz@mysql.com miguel@hegel.(none) diff --git a/Docs/README.1st b/Docs/README.1st new file mode 100755 index 00000000000..980c043224a --- /dev/null +++ b/Docs/README.1st @@ -0,0 +1,76 @@ +This ALPHA build of MySQL 4.1 for the Windows platform does not come +with an installer. A full-featured installer is being developed for the +4.1 series, and it is scheduled to be released with MySQL 4.1 BETA. + +** FRESH INSTALL ** + +To install MySQL 4.1 as a 'fresh' install, unzip this archive to a directory +of your choice (we suggest 'c:\', which will cause MySQL to be installed in +a directory named 'mysql' in 'c:\'). You should then follow the directions +in the user manual for starting/stopping MySQL: + +(Windows 9x/ME) http://www.mysql.com/doc/en/Win95_start.html +(Windows NT/2000/XP) http://www.mysql.com/doc/en/NT_start.html + +** UPGRADE INSTALL ** + +To install MySQL 4.1 as an upgrade to your current version of MySQL, you need +to perform the following steps: + +* Back up your original installation (always a good idea!) + +* Unzip the 4.1 archive to a directory that is different than where your + current MySQL installation is located. (Or, if you do unzip this + archive into the same location as your existing installation, do NOT + unpack the 'data' subdirectory. If you unpack the 'data' directory, + your existing databases will be overwritten.) + +* Shut down all MySQL server processes/services. + +* Remove the Win32 MySQL service (if appropriate for your OS): + + c:\mysql\bin\mysqld-nt --remove + +* Exit 'WinMySQLAdmin' (if it is running). + +* If you unzipped this archive into a directory different than that + of your existing MySQL installation, copy from the archive all its + directories and their contents EXCEPT the 'data' directory into the + existing installation. + +* Start the MySQL server with the '--skip-grant-tables' option. Assuming + your MySQL installation is located at 'c:\mysql', the command looks like + this: + + c:\mysql\bin\mysqld-opt --skip-grant-tables + + If your installation is located in some other directory, adjust the + pathname in that command (and in the following commands). + +* Execute the 'mysql_fix_privilege_tables.sql' script that is located in + the 'scripts' directory: + + c:\mysql\bin\mysql -f mysql < c:\mysql\scripts\mysql_fix_privilege_tables.sql + + This script performs any actions necessary to convert your grant tables + to the current format. You may see some "duplicate column" warnings as + it runs; these can be ignored. + +* Stop the server: + + c:\mysql\bin\mysqladmin -u root shutdown + +* Re-install the Win32 MySQL service (if required): + + c:\mysql\bin\mysqld-nt --install + +* Re-start the server or service using your normal startup procedure. + +** Further Questions ** + +You can find further information about running MySQL on Windows in the +manual that ships in the 'Doc' subdirectory, or online at the MySQL AB +web site: + +http://www.mysql.com/doc/en/Windows.html + diff --git a/INSTALL-WIN-SOURCE b/INSTALL-WIN-SOURCE index bce093633f5..969eb91f5b1 100755 --- a/INSTALL-WIN-SOURCE +++ b/INSTALL-WIN-SOURCE @@ -92,7 +92,7 @@ To build the latest Windows source package from the current BitKeeper source tree, use the following instructions. Please note that this procedure must be performed on a system running a Unix or Unix-like operating system. (The procedure -is know to work well on Linux, for example. +is known to work well on Linux, for example.) - Clone the BitKeeper source tree for MySQL (version 4.1 or above, as desired). For more information how to clone diff --git a/client/mysqldump.c b/client/mysqldump.c index 82737836485..4eb6d74cdf1 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -352,6 +352,11 @@ static void write_header(FILE *sql_file, char *db_name) mysql_get_server_info(&mysql_connection)); if (!opt_set_names) fprintf(sql_file,"\n/*!40101 SET NAMES %s*/;\n",default_charset); + 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\ +"); } return; } /* write_header */ @@ -361,6 +366,14 @@ static void write_footer(FILE *sql_file) { if (opt_xml) fprintf(sql_file,"</mysqldump>"); + else + { + fprintf(md_result_file,"\n +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;\n\ +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;\n\ +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;\n\ +"); + } fputs("\n", sql_file); } /* write_footer */ diff --git a/client/mysqltest.c b/client/mysqltest.c index 18dd7a26f2d..26e72560eff 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -328,7 +328,7 @@ static void get_replace_column(struct st_query *q); static void free_replace_column(); /* Disable functions that only exist in MySQL 4.0 */ -#if MYSQL_VERSION_ID < 40000 || defined(EMBEDDED_LIBRARY) +#if MYSQL_VERSION_ID < 40000 void mysql_enable_rpl_parse(MYSQL* mysql __attribute__((unused))) {} void mysql_disable_rpl_parse(MYSQL* mysql __attribute__((unused))) {} int mysql_rpl_parse_enabled(MYSQL* mysql __attribute__((unused))) { return 1; } diff --git a/include/my_sys.h b/include/my_sys.h index c390171d890..3b572821f8e 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -651,7 +651,7 @@ extern my_string my_path(my_string to,const char *progname, const char *own_pathname_part); extern my_string my_load_path(my_string to, const char *path, const char *own_path_prefix); -extern int wild_compare(const char *str,const char *wildstr); +extern int wild_compare(const char *str,const char *wildstr,pbool str_is_pattern); extern WF_PACK *wf_comp(my_string str); extern int wf_test(struct wild_file_pack *wf_pack,const char *name); extern void wf_end(struct wild_file_pack *buffer); diff --git a/include/mysql.h b/include/mysql.h index 27d6b03bd0b..8e8ffc2b788 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -129,11 +129,22 @@ typedef struct st_mysql_data { unsigned int fields; MYSQL_ROWS *data; MEM_ROOT alloc; -#ifdef EMBEDDED_LIBRARY +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY) MYSQL_ROWS **prev_ptr; #endif } MYSQL_DATA; +enum mysql_option +{ + MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, + MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, + MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, + MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, + MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, + MYSQL_OPT_GUESS_CONNECTION +}; + struct st_mysql_options { unsigned int connect_timeout, read_timeout, write_timeout; unsigned int port, protocol; @@ -165,18 +176,10 @@ struct st_mysql_options { a read that is replication-aware */ my_bool no_master_reads; -#ifdef EMBEDDED_LIBRARY +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY) my_bool separate_thread; #endif -}; - -enum mysql_option -{ - MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, - MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, - MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, - MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, - MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT + enum mysql_option methods_to_use; }; enum mysql_status @@ -199,8 +202,7 @@ enum mysql_rpl_type MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN }; - -#ifndef EMBEDDED_LIBRARY +struct st_mysql_methods; typedef struct st_mysql { @@ -245,34 +247,11 @@ typedef struct st_mysql struct st_mysql* last_used_con; LIST *stmts; /* list of all statements */ -} MYSQL; - -#else - -struct st_mysql_res; - -typedef struct st_mysql -{ + const struct st_mysql_methods *methods; struct st_mysql_res *result; void *thd; - struct charset_info_st *charset; - unsigned int server_language; - MYSQL_FIELD *fields; - MEM_ROOT field_alloc; - my_ulonglong affected_rows; - unsigned int field_count; - struct st_mysql_options options; - enum mysql_status status; - my_bool free_me; /* If free in mysql_close */ - my_ulonglong insert_id; /* id if insert on table with NEXTNR */ - unsigned int last_errno; - unsigned int server_status; - char *last_error; /* Used by embedded server */ - char sqlstate[SQLSTATE_LENGTH+1]; /* Used by embedded server */ } MYSQL; -#endif - typedef struct st_mysql_res { my_ulonglong row_count; MYSQL_FIELD *fields; @@ -285,6 +264,7 @@ typedef struct st_mysql_res { MYSQL_ROW row; /* If unbuffered read */ MYSQL_ROW current_row; /* buffer to current row */ my_bool eof; /* Used by mysql_fetch_row */ + const struct st_mysql_methods *methods; } MYSQL_RES; #define MAX_MYSQL_MANAGER_ERR 256 @@ -371,12 +351,10 @@ MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, unsigned int port, const char *unix_socket, unsigned long clientflag); -void STDCALL mysql_close(MYSQL *sock); int STDCALL mysql_select_db(MYSQL *mysql, const char *db); int STDCALL mysql_query(MYSQL *mysql, const char *q); int STDCALL mysql_send_query(MYSQL *mysql, const char *q, unsigned long length); -my_bool STDCALL mysql_read_query_result(MYSQL *mysql); int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length); /* perform query on master */ @@ -437,8 +415,6 @@ MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, const char *wild); MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); -MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); -MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, const char *arg); void STDCALL mysql_free_result(MYSQL_RES *result); @@ -559,6 +535,24 @@ typedef struct st_mysql_stmt } MYSQL_STMT; +#define mysql_read_query_result(mysql) (*(mysql)->methods->read_query_result)(mysql) +#define mysql_store_result(mysql) (*(mysql)->methods->store_result)(mysql) +#define mysql_use_result(mysql) (*(mysql)->methods->use_result)(mysql) + +typedef struct st_mysql_methods +{ + my_bool STDCALL (*read_query_result)(MYSQL *mysql); + my_bool STDCALL (*advanced_command)(MYSQL *mysql, + enum enum_server_command command, + const char *header, + unsigned long header_length, + const char *arg, + unsigned long arg_length, my_bool skip_check); + MYSQL_RES * STDCALL (*store_result)(MYSQL *mysql); + MYSQL_RES * STDCALL (*use_result)(MYSQL *mysql); + void STDCALL (*fetch_lengths)(unsigned long *to, MYSQL_ROW column, uint field_count); +} MYSQL_METHODS; + MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query, unsigned long length); int STDCALL mysql_execute(MYSQL_STMT * stmt); @@ -593,6 +587,8 @@ MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt); void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt); +void STDCALL mysql_close(MYSQL *sock); + /* status return codes */ #define MYSQL_NO_DATA 100 @@ -613,9 +609,9 @@ int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); They are not for general usage */ -my_bool -simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg, - unsigned long length, my_bool skip_check); +#define simple_command(mysql, command, arg, length, skip_check) \ + (*(mysql)->methods->advanced_command)(mysql, command, \ + NullS, 0, arg, length, skip_check) unsigned long net_safe_read(MYSQL* mysql); void mysql_once_init(void); diff --git a/include/mysql_com.h b/include/mysql_com.h index 5eb59a1c7ab..acfcd221432 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -130,7 +130,7 @@ typedef struct st_vio Vio; #define MAX_BLOB_WIDTH 8192 /* Default width for blob */ typedef struct st_net { -#ifndef EMBEDDED_LIBRARY +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) Vio* vio; unsigned char *buff,*buff_end,*write_pos,*read_pos; my_socket fd; /* For Perl DBI/dbd */ @@ -234,7 +234,8 @@ void my_net_local_init(NET *net); void net_end(NET *net); void net_clear(NET *net); my_bool net_realloc(NET *net, unsigned long length); -#ifndef EMBEDDED_LIBRARY + +#ifndef EMBEDDED_LIBRARY /* To be removed by HF */ my_bool net_flush(NET *net); #else #define net_flush(A) @@ -339,6 +340,7 @@ void my_thread_end(void); #ifdef _global_h ulong STDCALL net_field_length(uchar **packet); my_ulonglong net_field_length_ll(uchar **packet); +char *net_store_length(char *pkg, ulonglong length); #endif #ifdef __cplusplus diff --git a/include/mysql_embed.h b/include/mysql_embed.h index d48b0440660..7a169d4133e 100644 --- a/include/mysql_embed.h +++ b/include/mysql_embed.h @@ -19,11 +19,11 @@ #ifdef EMBEDDED_LIBRARY /* Things we don't need in the embedded version of MySQL */ +/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ #undef HAVE_PSTACK /* No stacktrace */ #undef HAVE_DLOPEN /* No udf functions */ #undef HAVE_OPENSSL -#undef HAVE_VIO #undef HAVE_ISAM #undef HAVE_SMEM /* No shared memory */ diff --git a/include/mysqld_error.h b/include/mysqld_error.h index 0468663239b..17ededfbb52 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -287,4 +287,5 @@ #define ER_CANT_AGGREGATE_3COLLATIONS 1268 #define ER_CANT_AGGREGATE_NCOLLATIONS 1269 #define ER_VARIABLE_IS_NOT_STRUCT 1270 -#define ER_ERROR_MESSAGES 271 +#define ER_UNKNOWN_COLLATION 1271 +#define ER_ERROR_MESSAGES 272 diff --git a/include/sql_common.h b/include/sql_common.h index f3300281f29..9fea46be298 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -27,17 +27,15 @@ my_ulonglong net_field_length_ll(uchar **packet); MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, my_bool default_value, uint server_capabilities); -my_bool advanced_command(MYSQL *mysql, enum enum_server_command command, - const char *header, ulong header_length, - const char *arg, ulong arg_length, my_bool skip_check); void free_rows(MYSQL_DATA *cur); MYSQL_DATA *read_rows (MYSQL *mysql,MYSQL_FIELD *fields, uint field_count); my_bool mysql_autenticate(MYSQL *mysql, const char *passwd); -void fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count); void free_old_query(MYSQL *mysql); void end_server(MYSQL *mysql); my_bool mysql_reconnect(MYSQL *mysql); +void mysql_read_default_options(struct st_mysql_options *options, + const char *filename,const char *group); #ifdef __cplusplus } #endif diff --git a/include/violite.h b/include/violite.h index 3b61fbf344e..9205f5b799a 100644 --- a/include/violite.h +++ b/include/violite.h @@ -220,7 +220,7 @@ enum SSL_type }; -#ifndef EMBEDDED_LIBRARY +/* HFTODO - hide this if we don't want client in embedded server */ /* This structure is for every connection on both sides */ struct st_vio { @@ -263,5 +263,4 @@ struct st_vio #endif /* HAVE_SMEM */ #endif /* HAVE_VIO */ }; -#endif /* EMBEDDED_LIBRARY */ #endif /* vio_violite_h_ */ diff --git a/libmysql/client_settings.h b/libmysql/client_settings.h index 17e992be5b0..43f341c7b1c 100644 --- a/libmysql/client_settings.h +++ b/libmysql/client_settings.h @@ -14,12 +14,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +extern uint mysql_port; +extern my_string mysql_unix_port; #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | \ CLIENT_LOCAL_FILES | CLIENT_TRANSACTIONS | \ CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION) - sig_handler pipe_sig_handler(int sig __attribute__((unused))); my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list); void read_user_name(char *name); @@ -39,3 +40,4 @@ my_bool send_file_to_server(MYSQL *mysql, const char *filename); #define set_sigpipe(mysql) #define reset_sigpipe(mysql) #endif + diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 1461d2fa128..d75f217585d 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -58,12 +58,19 @@ #endif #include <sql_common.h> +#include "client_settings.h" ulong net_buffer_length=8192; ulong max_allowed_packet= 1024L*1024L*1024L; ulong net_read_timeout= NET_READ_TIMEOUT; ulong net_write_timeout= NET_WRITE_TIMEOUT; + +#ifdef EMBEDDED_LIBRARY +#undef net_flush +my_bool net_flush(NET *net); +#endif + #if defined(MSDOS) || defined(__WIN__) /* socket_errno is defined in my_global.h for all platforms */ #define perror(A) @@ -85,19 +92,6 @@ static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to, const char *from, ulong length); my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list); -/* - Initialize the MySQL library - - SYNOPSIS - mysql_once_init() - - NOTES - Can't be static on NetWare - This function is called by mysql_init() and indirectly called - by mysql_real_query(), so one should never have to call this from an - outside program. -*/ - static my_bool mysql_client_init= 0; static my_bool org_my_init_done= 0; @@ -145,7 +139,7 @@ void mysql_once_init(void) #endif } - +#ifndef EMBEDDED_LIBRARY int STDCALL mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused))) @@ -163,6 +157,8 @@ void STDCALL mysql_server_end() mysql_thread_end(); } +#endif /*EMBEDDED_LIBRARY*/ + my_bool STDCALL mysql_thread_init() { #ifdef THREAD @@ -183,17 +179,6 @@ void STDCALL mysql_thread_end() Let the user specify that we don't want SIGPIPE; This doesn't however work with threaded applications as we can have multiple read in progress. */ - -#if !defined(__WIN__) && defined(SIGPIPE) && !defined(THREAD) -#define init_sigpipe_variables sig_return old_signal_handler=(sig_return) 0 -#define set_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) old_signal_handler=signal(SIGPIPE,pipe_sig_handler) -#define reset_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) signal(SIGPIPE,old_signal_handler); -#else -#define init_sigpipe_variables -#define set_sigpipe(mysql) -#define reset_sigpipe(mysql) -#endif - static MYSQL* spawn_init(MYSQL* parent, const char* host, unsigned int port, const char* user, @@ -856,7 +841,6 @@ STDCALL mysql_add_slave(MYSQL* mysql, const char* host, return 0; } - /************************************************************************** Return next field of the query results **************************************************************************/ @@ -884,7 +868,7 @@ mysql_fetch_lengths(MYSQL_RES *res) if (!(column=res->current_row)) return 0; /* Something is wrong */ if (res->data) - fetch_lengths(res->lengths, column, res->field_count); + (*res->methods->fetch_lengths)(res->lengths, column, res->field_count); return res->lengths; } @@ -995,6 +979,7 @@ mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) free_rows(query); DBUG_RETURN(NULL); } + result->methods= mysql->methods; result->field_alloc=mysql->field_alloc; mysql->fields=0; result->field_count = (uint) query->rows; @@ -1720,6 +1705,7 @@ mysql_prepare_result(MYSQL_STMT *stmt) MYF(MY_WME | MY_ZEROFILL)))) return 0; + result->methods= stmt->mysql->methods; result->eof=1; /* Marker for buffered */ result->fields= stmt->fields; result->field_count= stmt->field_count; @@ -1762,39 +1748,6 @@ static void store_param_type(NET *net, uint type) net->write_pos+=2; } -/* - Store the length of parameter data - (Same function as in sql/net_pkg.cc) -*/ - -char * -net_store_length(char *pkg, ulong length) -{ - uchar *packet=(uchar*) pkg; - if (length < 251) - { - *packet=(uchar) length; - return (char*) packet+1; - } - /* 251 is reserved for NULL */ - if (length < 65536L) - { - *packet++=252; - int2store(packet,(uint) length); - return (char*) packet+2; - } - if (length < 16777216L) - { - *packet++=253; - int3store(packet,(ulong) length); - return (char*) packet+3; - } - *packet++=254; - int8store(packet, (ulonglong) length); - return (char*) packet+9; -} - - /**************************************************************************** Functions to store parameter data from a prepared statement. @@ -1994,8 +1947,9 @@ static my_bool execute(MYSQL_STMT * stmt, char *packet, ulong length) mysql->last_used_con= mysql; int4store(buff, stmt->stmt_id); /* Send stmt id to server */ - if (advanced_command(mysql, COM_EXECUTE, buff, MYSQL_STMT_HEADER, packet, - length, 1) || + if ((*mysql->methods->advanced_command)(mysql, COM_EXECUTE, buff, + MYSQL_STMT_HEADER, packet, + length, 1) || mysql_read_query_result(mysql)) { set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate); @@ -2287,8 +2241,9 @@ mysql_send_long_data(MYSQL_STMT *stmt, uint param_number, Note that we don't get any ok packet from the server in this case This is intentional to save bandwidth. */ - if (advanced_command(mysql, COM_LONG_DATA, extra_data, - MYSQL_LONG_DATA_HEADER, data, length, 1)) + if ((*mysql->methods->advanced_command)(mysql, COM_LONG_DATA, extra_data, + MYSQL_LONG_DATA_HEADER, data, + length, 1)) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, mysql->net.sqlstate); @@ -3240,6 +3195,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate); DBUG_RETURN(1); } + result->methods= mysql->methods; stmt->result_buffered= 1; if (!(result->data= read_binary_rows(stmt))) { @@ -3435,7 +3391,7 @@ my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt) mysql= stmt->mysql->last_used_con; int4store(buff, stmt->stmt_id); /* Send stmt id to server */ - if (advanced_command(mysql, COM_RESET_STMT,buff,MYSQL_STMT_HEADER,0,0,1)) + if ((*mysql->methods->advanced_command)(mysql, COM_RESET_STMT,buff,MYSQL_STMT_HEADER,0,0,1)) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, mysql->net.sqlstate); diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am index 92fc588eda3..e61e7833451 100644 --- a/libmysqld/Makefile.am +++ b/libmysqld/Makefile.am @@ -32,7 +32,7 @@ noinst_LIBRARIES = libmysqld_int.a pkglib_LIBRARIES = libmysqld.a SUBDIRS = . examples libmysqld_sources= libmysqld.c lib_sql.cc -libmysqlsources = errmsg.c get_password.c +libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c noinst_HEADERS = embedded_priv.h @@ -57,8 +57,6 @@ sqlsources = derror.cc field.cc field_conv.cc filesort.cc \ unireg.cc uniques.cc stacktrace.c sql_union.cc hash_filo.cc \ spatial.cc gstream.cc sql_help.cc -EXTRA_DIST = lib_vio.c - libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) libmysqld_a_SOURCES= @@ -74,7 +72,8 @@ INC_LIB= $(top_builddir)/regex/libregex.a \ $(top_builddir)/mysys/libmysys.a \ $(top_builddir)/strings/libmystrings.a \ $(top_builddir)/dbug/libdbug.a \ - $(top_builddir)/regex/libregex.a + $(top_builddir)/regex/libregex.a \ + $(top_builddir)/vio/libvio.a # # To make it easy for the end user to use the embedded library we @@ -115,11 +114,15 @@ link_sources: for f in $(libmysqlsources); do \ rm -f $(srcdir)/$$f; \ @LN_CP_F@ $(srcdir)/../libmysql/$$f $(srcdir)/$$f; \ - done + done; \ + rm -f $(srcdir)/client_settings.h; \ + @LN_CP_F@ $(srcdir)/../libmysql/client_settings.h $(srcdir)/client_settings.h; + clean-local: rm -f `echo $(sqlsources) $(libmysqlsources) | sed "s;\.lo;.c;g"` \ - $(top_srcdir)/linked_libmysqld_sources + $(top_srcdir)/linked_libmysqld_sources; \ + rm -f client_settings.h # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/libmysqld/embedded_priv.h b/libmysqld/embedded_priv.h index abbebec2aaa..dfc06e38ab2 100644 --- a/libmysqld/embedded_priv.h +++ b/libmysqld/embedded_priv.h @@ -26,6 +26,4 @@ C_MODE_START extern void lib_connection_phase(NET *net, int phase); extern void init_embedded_mysql(MYSQL *mysql, int client_flag, char *db); extern void *create_embedded_thd(int client_flag, char *db); -extern my_bool simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg, - ulong length, my_bool skipp_check); C_MODE_END diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index dbe4437fc8b..c2292a6b48d 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -10,7 +10,7 @@ link_sources: DEFS = -DEMBEDDED_LIBRARY INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \ -I$(top_srcdir) -I$(top_srcdir)/client $(openssl_includes) -LIBS = @LIBS@ @WRAPLIBS@ +LIBS = @LIBS@ @WRAPLIBS@ @CLIENT_LIBS@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @innodb_system_libs@ @bdb_libs_with_path@ @LIBDL@ $(CXXLDFLAGS) mysqltest_SOURCES = mysqltest.c diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index ecb2cb88a0d..6d7b71c61be 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -38,6 +38,7 @@ static char inited, org_my_init_done; C_MODE_START #include <mysql.h> #include "errmsg.h" +#include <sql_common.h> static int check_connections1(THD * thd); static int check_connections2(THD * thd); @@ -47,9 +48,10 @@ static bool check_user(THD *thd, enum_server_command command, char * get_mysql_home(){ return mysql_home;}; char * get_mysql_real_data_home(){ return mysql_real_data_home;}; -my_bool simple_command(MYSQL *mysql,enum enum_server_command command, - const char *arg, - ulong length, my_bool skipp_check) +my_bool +emb_advanced_command(MYSQL *mysql, enum enum_server_command command, + const char *header, ulong header_length, + const char *arg, ulong arg_length, my_bool skip_check) { my_bool result= 1; THD *thd=(THD *) mysql->thd; @@ -65,15 +67,23 @@ my_bool simple_command(MYSQL *mysql,enum enum_server_command command, /* Clear result variables */ thd->clear_error(); mysql->affected_rows= ~(my_ulonglong) 0; + mysql->field_count= 0; thd->store_globals(); // Fix if more than one connect - result= dispatch_command(command, thd, (char *) arg, length + 1); + free_old_query(mysql); + result= dispatch_command(command, thd, (char *) arg, arg_length + 1); - if (!skipp_check) + if (!skip_check) result= thd->net.last_errno ? -1 : 0; - mysql->last_error= thd->net.last_error; - mysql->last_errno= thd->net.last_errno; + if ((mysql->net.last_errno= thd->net.last_errno)) + { + memcpy(mysql->net.last_error, thd->net.last_error, + sizeof(mysql->net.last_error)); + memcpy(mysql->net.sqlstate, thd->net.sqlstate, + sizeof(mysql->net.sqlstate)); + } + mysql->warning_count= ((THD*)mysql->thd)->total_warn_count; return result; } @@ -144,7 +154,6 @@ char **copy_arguments(int argc, char **argv) extern "C" { -ulong max_allowed_packet, net_buffer_length; char ** copy_arguments_ptr= 0; int STDCALL mysql_server_init(int argc, char **argv, char **groups) @@ -281,21 +290,6 @@ void STDCALL mysql_server_end() my_end(0); } -my_bool STDCALL mysql_thread_init() -{ -#ifdef THREAD - return my_thread_init(); -#else - return 0; -#endif -} - -void STDCALL mysql_thread_end() -{ -#ifdef THREAD - my_thread_end(); -#endif -} } /* extern "C" */ C_MODE_START @@ -303,7 +297,6 @@ void init_embedded_mysql(MYSQL *mysql, int client_flag, char *db) { THD *thd = (THD *)mysql->thd; thd->mysql= mysql; - mysql->last_error= thd->net.last_error; } void *create_embedded_thd(int client_flag, char *db) @@ -454,11 +447,6 @@ send_eof(THD *thd, bool no_flush) { } -uint STDCALL mysql_warning_count(MYSQL *mysql) -{ - return ((THD *)mysql->thd)->total_warn_count; -} - void Protocol_simple::prepare_for_resend() { MYSQL_ROWS *cur; diff --git a/libmysqld/lib_vio.c b/libmysqld/lib_vio.c deleted file mode 100644 index 14c1366e5f9..00000000000 --- a/libmysqld/lib_vio.c +++ /dev/null @@ -1,236 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Note that we can't have assertion on file descriptors; The reason for - this is that during mysql shutdown, another thread can close a file - we are working on. In this case we should just return read errors from - the file descriptior. -*/ -#ifdef DUMMY - -#include <my_global.h> -#include "mysql_embed.h" -#include "mysql.h" - -#ifndef HAVE_VIO /* is Vio enabled */ - -#include <errno.h> -#include <my_sys.h> -#include <violite.h> -#include <my_net.h> -#include <m_string.h> -#include <assert.h> - -#ifndef __WIN__ -#define HANDLE void * -#endif - -struct st_vio -{ - enum enum_vio_type type; /* Type of connection */ - void *dest_thd; - char *packets, **last_packet; - char *where_in_packet, *end_of_packet; - my_bool reading; - MEM_ROOT root; -}; - - -/* Initialize the communication buffer */ - -Vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost) -{ - DBUG_ENTER("vio_new"); - Vio * vio; - - if ((vio= (Vio *) my_malloc(sizeof(*vio),MYF(MY_WME|MY_ZEROFILL)))) - { - init_alloc_root(&vio->root, 8192, 8192); - vio->root.min_malloc = sizeof(char *) + 4; - vio->last_packet = &vio->packets; - vio->type = type; - } - DBUG_RETURN(vio); -} - - -#ifdef __WIN__ - -Vio *vio_new_win32pipe(HANDLE hPipe) -{ - return (NULL); -} - -#endif - -void vio_delete(Vio * vio) -{ - DBUG_ENTER("vio_delete"); - if (vio) - { - if (vio->type != VIO_CLOSED) - vio_close(vio); - free_root(&vio->root, MYF(0)); - my_free((gptr) vio, MYF(0)); - } - DBUG_VOID_RETURN; -} - -void vio_reset(Vio *vio) -{ - DBUG_ENTER("vio_reset"); - free_root(&vio->root, MYF(MY_KEEP_PREALLOC)); - vio->packets = vio->where_in_packet = vio->end_of_packet = 0; - vio->last_packet = &vio->packets; - DBUG_VOID_RETURN; -} - -int vio_errno(Vio *vio __attribute__((unused))) -{ - return socket_errno; /* On Win32 this mapped to WSAGetLastError() */ -} - -int vio_read(Vio * vio, gptr buf, int size) -{ - vio->reading = 1; - if (vio->where_in_packet >= vio->end_of_packet) - { - DBUG_ASSERT(vio->packets); - vio->where_in_packet = vio->packets + sizeof(char *) + 4; - vio->end_of_packet = vio->where_in_packet + - uint4korr(vio->packets + sizeof(char *)); - vio->packets = *(char **)vio->packets; - } - if (vio->where_in_packet + size > vio->end_of_packet) - size = vio->end_of_packet - vio->where_in_packet; - memcpy(buf, vio->where_in_packet, size); - vio->where_in_packet += size; - return (size); -} - -int vio_write(Vio * vio, const gptr buf, int size) -{ - DBUG_ENTER("vio_write"); - char *packet; - if (vio->reading) - { - vio->reading = 0; - vio_reset(vio); - } - if ((packet = alloc_root(&vio->root, sizeof(char*) + 4 + size))) - { - *vio->last_packet = packet; - vio->last_packet = (char **)packet; - *((char **)packet) = 0; /* Set forward link to 0 */ - packet += sizeof(char *); - int4store(packet, size); - memcpy(packet + 4, buf, size); - } - else - size= -1; - DBUG_RETURN(size); -} - -int vio_blocking(Vio * vio, my_bool set_blocking_mode, my_bool *old_mode) -{ - return (0); -} - -my_bool -vio_is_blocking(Vio * vio) -{ - return(0); -} - -int vio_fastsend(Vio * vio) -{ - return(0); -} - -int vio_keepalive(Vio* vio, my_bool set_keep_alive) -{ - return (0); -} - - -my_bool -vio_should_retry(Vio * vio __attribute__((unused))) -{ - int en = socket_errno; - return (en == SOCKET_EAGAIN || en == SOCKET_EINTR || - en == SOCKET_EWOULDBLOCK); -} - - -int vio_close(Vio * vio) -{ - return(0); -} - - -const char *vio_description(Vio * vio) -{ - return "embedded vio"; -} - -enum enum_vio_type vio_type(Vio* vio) -{ - return VIO_CLOSED; -} - -my_socket vio_fd(Vio* vio) -{ - return 0; -} - - -my_bool vio_peer_addr(Vio * vio, char *buf, uint16 *port) -{ - return(0); -} - - -void vio_in_addr(Vio *vio, struct in_addr *in) -{ -} - -my_bool vio_poll_read(Vio *vio,uint timeout) -{ - return 0; -} - -int create_vio(NET *net, int separate_thread) -{ - Vio * v = net->vio; - if (!v) - { - v = vio_new(0, separate_thread ? VIO_CLOSED : VIO_TYPE_TCPIP, 0); - net->vio = v; - } - return !v; -} - -void set_thd(Vio *v, void *thd) -{ - if (v) - { - v -> dest_thd = thd; - } -} -#endif /* HAVE_VIO */ -#endif /* DUMMY */ - diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c index ba2dfd68c00..357c13c5826 100644 --- a/libmysqld/libmysqld.c +++ b/libmysqld/libmysqld.c @@ -46,16 +46,6 @@ #define INADDR_NONE -1 #endif -static my_bool mysql_client_init=0; -uint mysql_port=0; -my_string mysql_unix_port=0; -const char *not_error_sqlstate= "00000"; - -const char *sql_protocol_names_lib[] = -{ "TCP", "SOCKET", "PIPE", "MEMORY",NullS }; -TYPELIB sql_protocol_typelib = {array_elements(sql_protocol_names_lib)-1,"", - sql_protocol_names_lib}; - #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | CLIENT_PROTOCOL_41) #if defined(MSDOS) || defined(__WIN__) @@ -68,35 +58,21 @@ TYPELIB sql_protocol_typelib = {array_elements(sql_protocol_names_lib)-1,"", #define closesocket(A) close(A) #endif -void mysqld_once_init(void); -static void end_server(MYSQL *mysql); -static void append_wild(char *to,char *end,const char *wild); -static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to, - const char *from, ulong length); +void free_old_query(MYSQL *mysql); +my_bool +emb_advanced_command(MYSQL *mysql, enum enum_server_command command, + const char *header, ulong header_length, + const char *arg, ulong arg_length, my_bool skip_check); -#define init_sigpipe_variables -#define set_sigpipe(mysql) -#define reset_sigpipe(mysql) - -static void free_rows(MYSQL_DATA *cur) -{ - if (cur) - { - free_root(&cur->alloc,MYF(0)); - my_free((gptr) cur,MYF(0)); - } -} +/* From client.c */ +void mysql_read_default_options(struct st_mysql_options *options, + const char *filename,const char *group); +MYSQL * STDCALL +cli_mysql_real_connect(MYSQL *mysql,const char *host, const char *user, + const char *passwd, const char *db, + uint port, const char *unix_socket,ulong client_flag); -static void free_old_query(MYSQL *mysql) -{ - DBUG_ENTER("free_old_query"); - if (mysql->fields) - free_root(&mysql->field_alloc,MYF(0)); - init_alloc_root(&mysql->field_alloc,8192,0); /* Assume rowlength < 8192 */ - mysql->fields=0; - mysql->field_count=0; /* For API */ - DBUG_VOID_RETURN; -} +void STDCALL cli_mysql_close(MYSQL *mysql); #ifdef HAVE_GETPWUID struct passwd *getpwuid(uid_t); @@ -111,300 +87,17 @@ static my_bool is_NT(void) } #endif -/* -** Expand wildcard to a sql string -*/ - -static void -append_wild(char *to, char *end, const char *wild) -{ - end-=5; /* Some extra */ - if (wild && wild[0]) - { - to=strmov(to," like '"); - while (*wild && to < end) - { - if (*wild == '\\' || *wild == '\'') - *to++='\\'; - *to++= *wild++; - } - if (*wild) /* Too small buffer */ - *to++='%'; /* Nicer this way */ - to[0]='\''; - to[1]=0; - } -} - - - -/************************************************************************** -** Init debugging if MYSQL_DEBUG environment variable is found -**************************************************************************/ - -void STDCALL -mysql_debug(const char *debug) -{ -#ifndef DBUG_OFF - char *env; - if (_db_on_) - return; /* Already using debugging */ - if (debug) - { - DEBUGGER_ON; - DBUG_PUSH(debug); - } - else if ((env = getenv("MYSQL_DEBUG"))) - { - DEBUGGER_ON; - DBUG_PUSH(env); -#if !defined(_WINVER) && !defined(WINVER) - puts("\n-------------------------------------------------------"); - puts("MYSQL_DEBUG found. libmysql started with the following:"); - puts(env); - puts("-------------------------------------------------------\n"); -#else - { - char buff[80]; - strmov(strmov(buff,"libmysql: "),env); - MessageBox((HWND) 0,"Debugging variable MYSQL_DEBUG used",buff,MB_OK); - } -#endif - } -#endif -} - /************************************************************************** ** Shut down connection **************************************************************************/ -static void -end_server(MYSQL *mysql) +static void end_server(MYSQL *mysql) { DBUG_ENTER("end_server"); free_old_query(mysql); DBUG_VOID_RETURN; } -void STDCALL -mysql_free_result(MYSQL_RES *result) -{ - DBUG_ENTER("mysql_free_result"); - DBUG_PRINT("enter",("mysql_res: %lx",result)); - if (result) - { - free_rows(result->data); - if (result->fields) - free_root(&result->field_alloc,MYF(0)); - if (result->row) - my_free((gptr) result->row,MYF(0)); - my_free((gptr) result,MYF(0)); - } - DBUG_VOID_RETURN; -} - -/**************************************************************************** -** Get options from my.cnf -****************************************************************************/ - -static const char *default_options[]= -{ - "port","socket","compress","password","pipe", "timeout", "user", - "init-command", "host", "database", "debug", "return-found-rows", - "ssl-key" ,"ssl-cert" ,"ssl-ca" ,"ssl-capath", - "character-sets-dir", "default-character-set", "interactive-timeout", - "connect-timeout", "local-infile", "disable-local-infile", - "replication-probe", "enable-reads-from-master", "repl-parse-query", - "ssl-cipher","protocol", "shared_memory_base_name", - NullS -}; - -static TYPELIB option_types={array_elements(default_options)-1, - "options",default_options}; - -static int add_init_command(struct st_mysql_options *options, const char *cmd) -{ - char *tmp; - - if (!options->init_commands) - { - options->init_commands= (DYNAMIC_ARRAY*)my_malloc(sizeof(DYNAMIC_ARRAY), - MYF(MY_WME)); - init_dynamic_array(options->init_commands,sizeof(char*),0,5 CALLER_INFO); - } - - if (!(tmp= my_strdup(cmd,MYF(MY_WME))) || - insert_dynamic(options->init_commands, (gptr)&tmp)) - { - my_free(tmp, MYF(MY_ALLOW_ZERO_PTR)); - return 1; - } - - return 0; -} - -static void mysql_read_default_options(struct st_mysql_options *options, - const char *filename,const char *group) -{ - int argc; - char *argv_buff[1],**argv; - const char *groups[3]; - DBUG_ENTER("mysql_read_default_options"); - DBUG_PRINT("enter",("file: %s group: %s",filename,group ? group :"NULL")); - - argc=1; argv=argv_buff; argv_buff[0]= (char*) "client"; - groups[0]= (char*) "client"; groups[1]= (char*) group; groups[2]=0; - - load_defaults(filename, groups, &argc, &argv); - if (argc != 1) /* If some default option */ - { - char **option=argv; - while (*++option) - { - /* DBUG_PRINT("info",("option: %s",option[0])); */ - if (option[0][0] == '-' && option[0][1] == '-') - { - char *end=strcend(*option,'='); - char *opt_arg=0; - if (*end) - { - opt_arg=end+1; - *end=0; /* Remove '=' */ - } - /* Change all '_' in variable name to '-' */ - for (end= *option ; *(end= strcend(end,'_')) ; ) - *end= '-'; - switch (find_type(*option+2,&option_types,2)) { - case 1: /* port */ - if (opt_arg) - options->port=atoi(opt_arg); - break; - case 2: /* socket */ - if (opt_arg) - { - my_free(options->unix_socket,MYF(MY_ALLOW_ZERO_PTR)); - options->unix_socket=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case 3: /* compress */ - options->compress=1; - break; - case 4: /* password */ - if (opt_arg) - { - my_free(options->password,MYF(MY_ALLOW_ZERO_PTR)); - options->password=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case 5: /* pipe */ - options->protocol = MYSQL_PROTOCOL_PIPE; - break; - case 20: /* connect_timeout */ - case 6: /* timeout */ - if (opt_arg) - options->connect_timeout=atoi(opt_arg); - break; - case 7: /* user */ - if (opt_arg) - { - my_free(options->user,MYF(MY_ALLOW_ZERO_PTR)); - options->user=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case 8: /* init-command */ - add_init_command(options,opt_arg); - break; - case 9: /* host */ - if (opt_arg) - { - my_free(options->host,MYF(MY_ALLOW_ZERO_PTR)); - options->host=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case 10: /* database */ - if (opt_arg) - { - my_free(options->db,MYF(MY_ALLOW_ZERO_PTR)); - options->db=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case 11: /* debug */ - mysql_debug(opt_arg ? opt_arg : "d:t:o,/tmp/client.trace"); - break; - case 12: /* return-found-rows */ - options->client_flag|=CLIENT_FOUND_ROWS; - break; - case 13: /* Ignore SSL options */ - case 14: - case 15: - case 16: - case 26: - break; - case 17: /* charset-lib */ - my_free(options->charset_dir,MYF(MY_ALLOW_ZERO_PTR)); - options->charset_dir = my_strdup(opt_arg, MYF(MY_WME)); - break; - case 18: - my_free(options->charset_name,MYF(MY_ALLOW_ZERO_PTR)); - options->charset_name = my_strdup(opt_arg, MYF(MY_WME)); - break; - case 19: /* Interactive-timeout */ - case 21: /* client_local_files */ - case 22: - case 23: /* Replication options */ - case 24: - case 25: - case 27: /* Protocol */ - case 28: /* Shared memory */ - break; - default: - DBUG_PRINT("warning",("unknown option: %s",option[0])); - } - } - } - } - free_defaults(argv); - DBUG_VOID_RETURN; -} - - - -/**************************************************************************** -** Init MySQL structure or allocate one -****************************************************************************/ - -MYSQL * STDCALL -mysql_init(MYSQL *mysql) -{ - mysqld_once_init(); - if (!mysql) - { - if (!(mysql=(MYSQL*) my_malloc(sizeof(*mysql),MYF(MY_WME | MY_ZEROFILL)))) - return 0; - mysql->free_me=1; - } - else - bzero((char*) (mysql),sizeof(*(mysql))); - return mysql; -} - - -void mysqld_once_init() -{ - if (!mysql_client_init) - { - mysql_client_init=1; - - my_init(); /* Will init threads */ - init_client_errs(); - mysql_port = MYSQL_PORT; - mysql_debug(NullS); - } -#ifdef THREAD - else - my_thread_init(); /* Init if new thread */ -#endif -} - /************************************************************************** ** Connect to sql server ** If host == 0 then use localhost @@ -451,33 +144,63 @@ static inline int mysql_init_charset(MYSQL *mysql) if (!mysql->charset) { - mysql->last_errno=CR_CANT_READ_CHARSET; - strmov(mysql->sqlstate, "HY0000"); + mysql->net.last_errno=CR_CANT_READ_CHARSET; + strmov(mysql->net.sqlstate, "HY0000"); if (mysql->options.charset_dir) - sprintf(mysql->last_error,ER(mysql->last_errno), + sprintf(mysql->net.last_error,ER(mysql->net.last_errno), charset_name ? charset_name : "unknown", mysql->options.charset_dir); else { char cs_dir_name[FN_REFLEN]; get_charsets_dir(cs_dir_name); - sprintf(mysql->last_error,ER(mysql->last_errno), + sprintf(mysql->net.last_error,ER(mysql->net.last_errno), charset_name ? charset_name : "unknown", cs_dir_name); } - return mysql->last_errno; + return mysql->net.last_errno; } return 0; } +/************************************************************************** + Get column lengths of the current row + If one uses mysql_use_result, res->lengths contains the length information, + else the lengths are calculated from the offset between pointers. +**************************************************************************/ + +static void emb_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count) +{ + MYSQL_ROW end; + + for (end=column + field_count; column != end ; column++,to++) + { + *to= *column ? strlen(*column) : 0; + } +} + + /* ** Note that the mysql argument must be initialized with mysql_init() ** before calling mysql_real_connect ! */ +static my_bool STDCALL emb_mysql_read_query_result(MYSQL *mysql); +static MYSQL_RES * STDCALL emb_mysql_store_result(MYSQL *mysql); +static MYSQL_RES * STDCALL emb_mysql_use_result(MYSQL *mysql); + +static MYSQL_METHODS embedded_methods= +{ + emb_mysql_read_query_result, + emb_advanced_command, + emb_mysql_store_result, + emb_mysql_use_result, + emb_fetch_lengths +}; + MYSQL * STDCALL mysql_real_connect(MYSQL *mysql,const char *host, const char *user, - const char *passwd __attribute__((unused)), const char *db, + const char *passwd, const char *db, uint port, const char *unix_socket,ulong client_flag) { char *db_name; @@ -487,6 +210,16 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, db ? db : "(Null)", user ? user : "(Null)")); + if (mysql->options.methods_to_use == MYSQL_OPT_USE_REMOTE_CONNECTION) + cli_mysql_real_connect(mysql, host, user, + passwd, db, port, unix_socket, client_flag); + if ((mysql->options.methods_to_use == MYSQL_OPT_GUESS_CONNECTION) && + host && strcmp(host,LOCAL_HOST)) + cli_mysql_real_connect(mysql, host, user, + passwd, db, port, unix_socket, client_flag); + + mysql->methods= &embedded_methods; + /* use default options */ if (mysql->options.my_cnf_file || mysql->options.my_cnf_group) { @@ -541,12 +274,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, } DBUG_PRINT("exit",("Mysql handler: %lx",mysql)); - reset_sigpipe(mysql); DBUG_RETURN(mysql); error: - reset_sigpipe(mysql); - DBUG_PRINT("error",("message: %u (%s)",mysql->last_errno,mysql->last_error)); + DBUG_PRINT("error",("message: %u (%s)",mysql->net.last_errno,mysql->net.last_error)); { /* Free alloced memory */ my_bool free_me=mysql->free_me; @@ -558,69 +289,20 @@ error: DBUG_RETURN(0); } - -/************************************************************************** -** Change user and database -**************************************************************************/ - -my_bool STDCALL mysql_change_user(MYSQL *mysql __attribute__((unused)), const char *user __attribute__((unused)), - const char *passwd __attribute__((unused)), const char *db __attribute__((unused))) -{ -#ifdef DUMMY - char buff[512],*pos=buff; - DBUG_ENTER("mysql_change_user"); - - if (!user) - user=""; - if (!passwd) - passwd=""; - - pos=strmov(pos,user)+1; - pos=scramble(pos, mysql->scramble_buff, passwd, - (my_bool) (mysql->protocol_version == 9)); - pos=strmov(pos+1,db ? db : ""); - if (simple_command(mysql,COM_CHANGE_USER, buff,(ulong) (pos-buff),0)) - DBUG_RETURN(1); - - my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR)); - my_free(mysql->passwd,MYF(MY_ALLOW_ZERO_PTR)); - my_free(mysql->db,MYF(MY_ALLOW_ZERO_PTR)); - - mysql->user= my_strdup(user,MYF(MY_WME)); - mysql->passwd=my_strdup(passwd,MYF(MY_WME)); - mysql->db= db ? my_strdup(db,MYF(MY_WME)) : 0; - DBUG_RETURN(0); -#endif - return 0; -} - - -/************************************************************************** -** Set current database -**************************************************************************/ - -int STDCALL -mysql_select_db(MYSQL *mysql, const char *db) -{ - int error; - DBUG_ENTER("mysql_select_db"); - DBUG_PRINT("enter",("db: '%s'",db)); - - if ((error=simple_command(mysql,COM_INIT_DB,db,(ulong) strlen(db),0))) - DBUG_RETURN(error); - DBUG_RETURN(0); -} - - /************************************************************************* ** Send a QUIT to the server and close the connection ** If handle is alloced by mysql connect free it. *************************************************************************/ -void STDCALL -mysql_close(MYSQL *mysql) +void STDCALL mysql_close(MYSQL *mysql) { DBUG_ENTER("mysql_close"); + if (mysql->methods != &embedded_methods) + { + cli_mysql_close(mysql); + DBUG_VOID_RETURN; + } + if (mysql) /* Some simple safety */ { my_free(mysql->options.user,MYF(MY_ALLOW_ZERO_PTR)); @@ -654,22 +336,9 @@ mysql_close(MYSQL *mysql) DBUG_VOID_RETURN; } - -/************************************************************************** -** Do a query. If query returned rows, free old rows. -** Read data by mysql_store_result or by repeat call of mysql_fetch_row -**************************************************************************/ - -int STDCALL -mysql_query(MYSQL *mysql, const char *query) -{ - return mysql_real_query(mysql,query, (ulong) strlen(query)); -} - -my_bool STDCALL -mysql_read_query_result(MYSQL *mysql) +static my_bool STDCALL emb_mysql_read_query_result(MYSQL *mysql) { - if (mysql->last_errno) + if (mysql->net.last_errno) return -1; if (mysql->field_count) @@ -682,156 +351,17 @@ mysql_read_query_result(MYSQL *mysql) return 0; } -/**************************************************************************** -* A modified version of connect(). my_connect() allows you to specify -* a timeout value, in seconds, that we should wait until we -* derermine we can't connect to a particular host. If timeout is 0, -* my_connect() will behave exactly like connect(). -* -* Base version coded by Steve Bernacki, Jr. <steve@navinet.net> -*****************************************************************************/ - -my_bool my_connect(my_socket s, const struct sockaddr *name, uint namelen, - uint timeout) -{ -#if defined(__WIN__) || defined(OS2) - return connect(s, (struct sockaddr*) name, namelen) != 0; -#else - int flags, res, s_err; - SOCKOPT_OPTLEN_TYPE s_err_size = sizeof(uint); - fd_set sfds; - struct timeval tv; - time_t start_time, now_time; - - /* If they passed us a timeout of zero, we should behave - * exactly like the normal connect() call does. - */ - - if (timeout == 0) - return connect(s, (struct sockaddr*) name, namelen) != 0; - - flags = fcntl(s, F_GETFL, 0); /* Set socket to not block */ -#ifdef O_NONBLOCK - fcntl(s, F_SETFL, flags | O_NONBLOCK); /* and save the flags.. */ -#endif - - res = connect(s, (struct sockaddr*) name, namelen); - s_err = errno; /* Save the error... */ - fcntl(s, F_SETFL, flags); - if ((res != 0) && (s_err != EINPROGRESS)) - { - errno = s_err; /* Restore it */ - return(1); - } - if (res == 0) /* Connected quickly! */ - return(0); - - /* Otherwise, our connection is "in progress." We can use - * the select() call to wait up to a specified period of time - * for the connection to suceed. If select() returns 0 - * (after waiting howevermany seconds), our socket never became - * writable (host is probably unreachable.) Otherwise, if - * select() returns 1, then one of two conditions exist: - * - * 1. An error occured. We use getsockopt() to check for this. - * 2. The connection was set up sucessfully: getsockopt() will - * return 0 as an error. - * - * Thanks goes to Andrew Gierth <andrew@erlenstar.demon.co.uk> - * who posted this method of timing out a connect() in - * comp.unix.programmer on August 15th, 1997. - */ - - FD_ZERO(&sfds); - FD_SET(s, &sfds); - /* - * select could be interrupted by a signal, and if it is, - * the timeout should be adjusted and the select restarted - * to work around OSes that don't restart select and - * implementations of select that don't adjust tv upon - * failure to reflect the time remaining - */ - start_time = time(NULL); - for (;;) - { - tv.tv_sec = (long) timeout; - tv.tv_usec = 0; - if ((res = select(s+1, NULL, &sfds, NULL, &tv)) >= 0) - break; - now_time=time(NULL); - timeout-= (uint) (now_time - start_time); - if (errno != EINTR || (int) timeout <= 0) - return 1; - } - - /* select() returned something more interesting than zero, let's - * see if we have any errors. If the next two statements pass, - * we've got an open socket! - */ - - s_err=0; - if (getsockopt(s, SOL_SOCKET, SO_ERROR, (char*) &s_err, &s_err_size) != 0) - return(1); - - if (s_err) - { /* getsockopt could succeed */ - errno = s_err; - return(1); /* but return an error... */ - } - return(0); /* It's all good! */ -#endif -} - -int STDCALL -mysql_send_query(MYSQL* mysql, const char* query, ulong length) -{ - DBUG_ENTER("mysql_send_query"); - - if (mysql->options.separate_thread) - { - return -1; - } - - mysql->result= NULL; - - free_old_query(mysql); /* Free old result */ - - DBUG_RETURN(simple_command(mysql, COM_QUERY, query, length, 1)); -} - -int STDCALL -mysql_real_query(MYSQL *mysql, const char *query, ulong length) -{ - DBUG_ENTER("mysql_real_query"); - DBUG_PRINT("enter",("handle: %lx",mysql)); - DBUG_PRINT("query",("Query = \"%s\"",query)); - - if (mysql->options.separate_thread) - { - return -1; - } - - mysql->result= NULL; - - free_old_query(mysql); /* Free old result */ - - if (simple_command(mysql, COM_QUERY, query, length, 1)) - DBUG_RETURN(-1); - - DBUG_RETURN(mysql_read_query_result(mysql)); -} - /************************************************************************** ** Alloc result struct for buffered results. All rows are read to buffer. ** mysql_data_seek may be used. **************************************************************************/ -MYSQL_RES * STDCALL -mysql_store_result(MYSQL *mysql) +static MYSQL_RES * STDCALL emb_mysql_store_result(MYSQL *mysql) { MYSQL_RES *result= mysql->result; if (!result) return 0; - + + result->methods= mysql->methods; mysql->result= NULL; *result->data->prev_ptr= 0; result->eof= 1; @@ -853,781 +383,11 @@ mysql_store_result(MYSQL *mysql) ** have to wait for the client (and will not wait more than 30 sec/packet). **************************************************************************/ -MYSQL_RES * STDCALL -mysql_use_result(MYSQL *mysql) +static MYSQL_RES * STDCALL emb_mysql_use_result(MYSQL *mysql) { DBUG_ENTER("mysql_use_result"); if (mysql->options.separate_thread) DBUG_RETURN(0); - DBUG_RETURN(mysql_store_result(mysql)); -} - -/************************************************************************** -** Return next field of the query results -**************************************************************************/ - -MYSQL_FIELD * STDCALL -mysql_fetch_field(MYSQL_RES *result) -{ - if (result->current_field >= result->field_count) - return(NULL); - return &result->fields[result->current_field++]; -} - - -/************************************************************************** -** Return next row of the query results -**************************************************************************/ - -MYSQL_ROW STDCALL -mysql_fetch_row(MYSQL_RES *res) -{ - DBUG_ENTER("mysql_fetch_row"); - { - MYSQL_ROW tmp; - if (!res->data_cursor) - { - DBUG_PRINT("info",("end of data")); - DBUG_RETURN(res->current_row=(MYSQL_ROW) NULL); - } - tmp = res->data_cursor->data; - res->data_cursor = res->data_cursor->next; - DBUG_RETURN(res->current_row=tmp); - } -} - - -/************************************************************************** -** Get column lengths of the current row -** If one uses mysql_use_result, res->lengths contains the length information, -** else the lengths are calculated from the offset between pointers. -**************************************************************************/ - -ulong * STDCALL -mysql_fetch_lengths(MYSQL_RES *res) -{ - ulong *lengths; - MYSQL_ROW column,end; - - if (!(column=res->current_row)) - return 0; /* Something is wrong */ - if (res->data) - { - lengths=res->lengths; - for (end=column+res->field_count; column != end ; column++,lengths++) - { - *lengths= *column ? strlen(*column) : 0; - } - } - return res->lengths; -} - -/************************************************************************** -** Move to a specific row and column -**************************************************************************/ - -void STDCALL -mysql_data_seek(MYSQL_RES *result, my_ulonglong row) -{ - MYSQL_ROWS *tmp=0; - DBUG_PRINT("info",("mysql_data_seek(%ld)",(long) row)); - if (result->data) - for (tmp=result->data->data; row-- && tmp ; tmp = tmp->next) ; - result->current_row=0; - result->data_cursor = tmp; -} - -/************************************************************************* -** put the row or field cursor one a position one got from mysql_row_tell() -** This doesn't restore any data. The next mysql_fetch_row or -** mysql_fetch_field will return the next row or field after the last used -*************************************************************************/ - -MYSQL_ROW_OFFSET STDCALL -mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row) -{ - MYSQL_ROW_OFFSET return_value=result->data_cursor; - result->current_row= 0; - result->data_cursor= row; - return return_value; -} - - -MYSQL_FIELD_OFFSET STDCALL -mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset) -{ - MYSQL_FIELD_OFFSET return_value=result->current_field; - result->current_field=field_offset; - return return_value; -} - -/***************************************************************************** -** List all databases -*****************************************************************************/ - -MYSQL_RES * STDCALL -mysql_list_dbs(MYSQL *mysql, const char *wild) -{ - char buff[255]; - DBUG_ENTER("mysql_list_dbs"); - - append_wild(strmov(buff,"show databases"),buff+sizeof(buff),wild); - if (mysql_query(mysql,buff)) - DBUG_RETURN(0); - DBUG_RETURN (mysql_store_result(mysql)); -} - - -/***************************************************************************** -** List all tables in a database -** If wild is given then only the tables matching wild is returned -*****************************************************************************/ - -MYSQL_RES * STDCALL -mysql_list_tables(MYSQL *mysql, const char *wild) -{ - char buff[255]; - DBUG_ENTER("mysql_list_tables"); - - append_wild(strmov(buff,"show tables"),buff+sizeof(buff),wild); - if (mysql_query(mysql,buff)) - DBUG_RETURN(0); - DBUG_RETURN (mysql_store_result(mysql)); -} - - -/************************************************************************** -** List all fields in a table -** If wild is given then only the fields matching wild is returned -** Instead of this use query: -** show fields in 'table' like "wild" -**************************************************************************/ - -MYSQL_RES * STDCALL -mysql_list_fields(MYSQL *mysql __attribute__((unused)), const char *table __attribute__((unused)), const char *wild __attribute__((unused))) -{ -#ifdef DUMMY - MYSQL_RES *result; - MYSQL_DATA *query; - char buff[257],*end; - DBUG_ENTER("mysql_list_fields"); - DBUG_PRINT("enter",("table: '%s' wild: '%s'",table,wild ? wild : "")); - - LINT_INIT(query); - - end=strmake(strmake(buff, table,128)+1,wild ? wild : "",128); - if (simple_command(mysql,COM_FIELD_LIST,buff,(uint) (end-buff),1) || - !(query = read_rows(mysql,(MYSQL_FIELD*) 0,6))) - DBUG_RETURN(NULL); - - free_old_query(mysql); - if (!(result = (MYSQL_RES *) my_malloc(sizeof(MYSQL_RES), - MYF(MY_WME | MY_ZEROFILL)))) - { - free_rows(query); - DBUG_RETURN(NULL); - } - result->field_alloc=mysql->field_alloc; - mysql->fields=0; - result->field_count = (uint) query->rows; - result->fields= unpack_fields(query,&result->field_alloc, - result->field_count,1, - (my_bool) test(mysql->server_capabilities & - CLIENT_LONG_FLAG)); - result->eof=1; - DBUG_RETURN(result); -#endif - return 0; -} - -/* List all running processes (threads) in server */ -MYSQL_RES * STDCALL -mysql_list_processes(MYSQL *mysql __attribute__((unused))) -{ -#ifdef FOR_THE_FUTURE - MYSQL_DATA *fields; - uint field_count; - uchar *pos; - DBUG_ENTER("mysql_list_processes"); - - LINT_INIT(fields); - if (simple_command(mysql,COM_PROCESS_INFO,"",0,0)) - DBUG_RETURN(0); - free_old_query(mysql); - pos=(uchar*) mysql->net.read_pos; - field_count=(uint) net_field_length(&pos); - if (!(fields = read_rows(mysql,(MYSQL_FIELD*) 0,5))) - DBUG_RETURN(NULL); - if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,field_count,0, - (my_bool) test(mysql->server_capabilities & - CLIENT_LONG_FLAG)))) - DBUG_RETURN(0); - mysql->status=MYSQL_STATUS_GET_RESULT; - mysql->field_count=field_count; - DBUG_RETURN(mysql_store_result(mysql)); -#endif /* FOR_THE_FUTURE */ - return 0; -} - - -int STDCALL -mysql_create_db(MYSQL *mysql, const char *db) -{ - DBUG_ENTER("mysql_createdb"); - DBUG_PRINT("enter",("db: %s",db)); - DBUG_RETURN(simple_command(mysql,COM_CREATE_DB,db, (ulong) strlen(db),0)); -} - - -int STDCALL -mysql_drop_db(MYSQL *mysql, const char *db) -{ - DBUG_ENTER("mysql_drop_db"); - DBUG_PRINT("enter",("db: %s",db)); - DBUG_RETURN(simple_command(mysql,COM_DROP_DB,db,(ulong) strlen(db),0)); -} - - -int STDCALL -mysql_shutdown(MYSQL *mysql) -{ - DBUG_ENTER("mysql_shutdown"); - DBUG_RETURN(simple_command(mysql,COM_SHUTDOWN,"",0,0)); -} - - -int STDCALL -mysql_refresh(MYSQL *mysql,uint options) -{ - uchar bits[1]; - DBUG_ENTER("mysql_refresh"); - bits[0]= (uchar) options; - DBUG_RETURN(simple_command(mysql,COM_REFRESH,(char*) bits,1,0)); -} - -int STDCALL -mysql_kill(MYSQL *mysql,ulong pid) -{ - char buff[12]; - DBUG_ENTER("mysql_kill"); - int4store(buff,pid); - DBUG_RETURN(simple_command(mysql,COM_PROCESS_KILL,buff,4,0)); -} - - -int STDCALL -mysql_dump_debug_info(MYSQL *mysql) -{ - DBUG_ENTER("mysql_dump_debug_info"); - DBUG_RETURN(simple_command(mysql,COM_DEBUG,"",0,0)); -} - -const char * STDCALL -mysql_stat(MYSQL *mysql) -{ -#ifdef DUMMY - DBUG_ENTER("mysql_stat"); - if (simple_command(mysql,COM_STATISTICS,"",0,0)) - return mysql->last_error; - mysql->net.read_pos[mysql->packet_length]=0; /* End of stat string */ - if (!mysql->net.read_pos[0]) - { - mysql->net.last_errno=CR_WRONG_HOST_INFO; - strmov(mysql->sqlstate, unknown_sqlstate); - strmov(mysql->net.last_error, ER(mysql->net.last_errno)); - return mysql->net.last_error; - } - DBUG_RETURN((char*) mysql->net.read_pos); -#endif - return (char *)mysql; -} - - -int STDCALL -mysql_ping(MYSQL *mysql) -{ - DBUG_ENTER("mysql_ping"); - DBUG_RETURN(simple_command(mysql,COM_PING,"",0,0)); -} - - -const char * STDCALL -mysql_get_server_info(MYSQL *mysql __attribute__((unused))) -{ - return MYSQL_SERVER_VERSION; -} - - -ulong STDCALL -mysql_get_server_version(MYSQL *mysql __attribute__((unused))) -{ - return MYSQL_VERSION_ID; -} - -const char * STDCALL -mysql_get_host_info(MYSQL *mysql __attribute__((unused))) -{ - return "localhost"; -} - - -uint STDCALL -mysql_get_proto_info(MYSQL *mysql __attribute__((unused))) -{ - return PROTOCOL_VERSION; -} - -const char * STDCALL -mysql_get_client_info(void) -{ - return MYSQL_SERVER_VERSION; -} - - -int STDCALL -mysql_options(MYSQL *mysql,enum mysql_option option, const char *arg) -{ - DBUG_ENTER("mysql_option"); - DBUG_PRINT("enter",("option: %d",(int) option)); - switch (option) { - case MYSQL_OPT_CONNECT_TIMEOUT: - mysql->options.connect_timeout= *(uint*) arg; - break; - case MYSQL_OPT_COMPRESS: - mysql->options.compress=1; /* Remember for connect */ - break; - case MYSQL_OPT_USE_RESULT: - mysql->options.separate_thread=1; /* Use separate thread for query execution*/ - break; - case MYSQL_OPT_NAMED_PIPE: - mysql->options.protocol=MYSQL_PROTOCOL_PIPE; /* Force named pipe */ - break; - case MYSQL_OPT_LOCAL_INFILE: /* Allow LOAD DATA LOCAL ?*/ - if (!arg || test(*(uint*) arg)) - mysql->options.client_flag|= CLIENT_LOCAL_FILES; - else - mysql->options.client_flag&= ~CLIENT_LOCAL_FILES; - break; - case MYSQL_INIT_COMMAND: - add_init_command(&mysql->options,arg); - break; - case MYSQL_READ_DEFAULT_FILE: - my_free(mysql->options.my_cnf_file,MYF(MY_ALLOW_ZERO_PTR)); - mysql->options.my_cnf_file=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_READ_DEFAULT_GROUP: - my_free(mysql->options.my_cnf_group,MYF(MY_ALLOW_ZERO_PTR)); - mysql->options.my_cnf_group=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_SET_CHARSET_DIR: - my_free(mysql->options.charset_dir,MYF(MY_ALLOW_ZERO_PTR)); - mysql->options.charset_dir=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_SET_CHARSET_NAME: - my_free(mysql->options.charset_name,MYF(MY_ALLOW_ZERO_PTR)); - mysql->options.charset_name=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_OPT_PROTOCOL: - mysql->options.protocol= *(uint*) arg; - break; - case MYSQL_SHARED_MEMORY_BASE_NAME: - break; - default: - DBUG_RETURN(-1); - } - DBUG_RETURN(0); -} - -/**************************************************************************** -** Functions to get information from the MySQL structure -** These are functions to make shared libraries more usable. -****************************************************************************/ - -/* MYSQL_RES */ -my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res) -{ - return res->row_count; -} - -unsigned int STDCALL mysql_num_fields(MYSQL_RES *res) -{ - return res->field_count; -} - -my_bool STDCALL mysql_eof(MYSQL_RES *res) -{ - return res->eof; -} - -MYSQL_FIELD * STDCALL mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr) -{ - return &(res)->fields[fieldnr]; -} - -MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res) -{ - return (res)->fields; -} - -MYSQL_ROWS * STDCALL mysql_row_tell(MYSQL_RES *res) -{ - return res->data_cursor; -} - -uint STDCALL mysql_field_tell(MYSQL_RES *res) -{ - return (res)->current_field; -} - -/* MYSQL */ - -unsigned int STDCALL mysql_field_count(MYSQL *mysql) -{ - return mysql->field_count; -} - -my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql) -{ - return mysql->affected_rows; -} - -my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql) -{ - return mysql->insert_id; -} - -uint STDCALL mysql_errno(MYSQL *mysql) -{ - return mysql->last_errno; -} - -const char *STDCALL mysql_sqlstate(MYSQL *mysql) -{ - return mysql->sqlstate; -} - -const char * STDCALL mysql_error(MYSQL *mysql) -{ - return mysql->last_error; -} - -const char *STDCALL mysql_info(MYSQL *mysql __attribute__((unused))) -{ -#ifdef DUMMY - return (mysql)->info; -#endif - return 0; -} - -ulong STDCALL mysql_thread_id(MYSQL *mysql __attribute__((unused))) -{ -#ifdef DUMMY - return (mysql)->thread_id; -#endif - return 0; -} - -const char * STDCALL mysql_character_set_name(MYSQL *mysql) -{ - return mysql->charset->name; -} - - -uint STDCALL mysql_thread_safe(void) -{ -#ifdef THREAD - return 1; -#else - return 0; -#endif -} - -MYSQL_RES *STDCALL mysql_warnings(MYSQL *mysql) -{ - uint warning_count; - DBUG_ENTER("mysql_warnings"); - /* Save warning count as mysql_real_query may change this */ - warning_count= mysql_warning_count(mysql); - if (mysql_real_query(mysql, "SHOW WARNINGS", 13)) - DBUG_RETURN(0); - DBUG_RETURN(mysql_store_result(mysql)); -} - -/**************************************************************************** -** Some support functions -****************************************************************************/ - -/* -** Add escape characters to a string (blob?) to make it suitable for a insert -** to should at least have place for length*2+1 chars -** Returns the length of the to string -*/ - -ulong STDCALL -mysql_escape_string(char *to,const char *from,ulong length) -{ - return mysql_sub_escape_string(default_charset_info,to,from,length); -} - -ulong STDCALL -mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, - ulong length) -{ - return mysql_sub_escape_string(mysql->charset,to,from,length); -} - - -static ulong -mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to, - const char *from, ulong length) -{ - const char *to_start=to; - const char *end; -#ifdef USE_MB - my_bool use_mb_flag=use_mb(charset_info); -#endif - for (end=from+length; from != end ; from++) - { -#ifdef USE_MB - int l; - if (use_mb_flag && (l = my_ismbchar(charset_info, from, end))) - { - while (l--) - *to++ = *from++; - from--; - continue; - } -#endif - switch (*from) { - case 0: /* Must be escaped for 'mysql' */ - *to++= '\\'; - *to++= '0'; - break; - case '\n': /* Must be escaped for logs */ - *to++= '\\'; - *to++= 'n'; - break; - case '\r': - *to++= '\\'; - *to++= 'r'; - break; - case '\\': - *to++= '\\'; - *to++= '\\'; - break; - case '\'': - *to++= '\\'; - *to++= '\''; - break; - case '"': /* Better safe than sorry */ - *to++= '\\'; - *to++= '"'; - break; - case '\032': /* This gives problems on Win32 */ - *to++= '\\'; - *to++= 'Z'; - break; - default: - *to++= *from; - } - } - *to=0; - return (ulong) (to-to_start); -} - - -char * STDCALL -mysql_odbc_escape_string(MYSQL *mysql, - char *to, ulong to_length, - const char *from, ulong from_length, - void *param, - char * (*extend_buffer) - (void *, char *, ulong *)) -{ - char *to_end=to+to_length-5; - const char *end; -#ifdef USE_MB - my_bool use_mb_flag=use_mb(mysql->charset); -#endif - - for (end=from+from_length; from != end ; from++) - { - if (to >= to_end) - { - to_length = (ulong) (end-from)+512; /* We want this much more */ - if (!(to=(*extend_buffer)(param, to, &to_length))) - return to; - to_end=to+to_length-5; - } -#ifdef USE_MB - { - int l; - if (use_mb_flag && (l = my_ismbchar(mysql->charset, from, end))) - { - while (l--) - *to++ = *from++; - from--; - continue; - } - } -#endif - switch (*from) { - case 0: /* Must be escaped for 'mysql' */ - *to++= '\\'; - *to++= '0'; - break; - case '\n': /* Must be escaped for logs */ - *to++= '\\'; - *to++= 'n'; - break; - case '\r': - *to++= '\\'; - *to++= 'r'; - break; - case '\\': - *to++= '\\'; - *to++= '\\'; - break; - case '\'': - *to++= '\\'; - *to++= '\''; - break; - case '"': /* Better safe than sorry */ - *to++= '\\'; - *to++= '"'; - break; - case '\032': /* This gives problems on Win32 */ - *to++= '\\'; - *to++= 'Z'; - break; - default: - *to++= *from; - } - } - return to; -} - -void STDCALL -myodbc_remove_escape(MYSQL *mysql,char *name) -{ - char *to; -#ifdef USE_MB - my_bool use_mb_flag=use_mb(mysql->charset); - char *end; - LINT_INIT(end); - if (use_mb_flag) - for (end=name; *end ; end++) ; -#endif - - for (to=name ; *name ; name++) - { -#ifdef USE_MB - int l; - if (use_mb_flag && (l = my_ismbchar( mysql->charset, name , end ) ) ) - { - while (l--) - *to++ = *name++; - name--; - continue; - } -#endif - if (*name == '\\' && name[1]) - name++; - *to++= *name; - } - *to=0; -} - - -/******************************************************************** - Transactional APIs -*********************************************************************/ - -/* - Commit the current transaction -*/ - -my_bool STDCALL mysql_commit(MYSQL * mysql) -{ - DBUG_ENTER("mysql_commit"); - DBUG_RETURN((my_bool) mysql_real_query(mysql, "commit", 6)); -} - -/* - Rollback the current transaction -*/ - -my_bool STDCALL mysql_rollback(MYSQL * mysql) -{ - DBUG_ENTER("mysql_rollback"); - DBUG_RETURN((my_bool) mysql_real_query(mysql, "rollback", 8)); -} - - -/* - Set autocommit to either true or false -*/ - -my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode) -{ - DBUG_ENTER("mysql_autocommit"); - DBUG_PRINT("enter", ("mode : %d", auto_mode)); - - if (auto_mode) /* set to true */ - DBUG_RETURN((my_bool) mysql_real_query(mysql, "set autocommit=1", 16)); - DBUG_RETURN((my_bool) mysql_real_query(mysql, "set autocommit=0", 16)); -} - - -/******************************************************************** - Multi query execution + SPs APIs -*********************************************************************/ - -/* - Returns if there are any more query results exists to be read using - mysql_next_result() -*/ - -my_bool STDCALL mysql_more_results(MYSQL *mysql) -{ - my_bool res; - DBUG_ENTER("mysql_more_results"); - - res= ((mysql->server_status & SERVER_MORE_RESULTS_EXISTS) ? - 1: 0); - DBUG_PRINT("exit",("More results exists ? %d", res)); - DBUG_RETURN(res); -} - - -/* - Reads and returns the next query results -*/ - -my_bool STDCALL mysql_next_result(MYSQL *mysql) -{ - DBUG_ENTER("mysql_next_result"); - - mysql->last_error[0]= 0; - mysql->last_errno= 0; - strmov(mysql->sqlstate, not_error_sqlstate); - mysql->affected_rows= ~(my_ulonglong) 0; - - if (mysql->server_status & SERVER_MORE_RESULTS_EXISTS) - DBUG_RETURN(mysql_read_query_result(mysql)); - - DBUG_RETURN(0); -} - - -my_bool STDCALL -mysql_ssl_set(MYSQL *mysql __attribute__((unused)) , - const char *key __attribute__((unused)), - const char *cert __attribute__((unused)), - const char *ca __attribute__((unused)), - const char *capath __attribute__((unused)), - const char *cipher __attribute__((unused))) -{ - return 0; + DBUG_RETURN(emb_mysql_store_result(mysql)); } diff --git a/mysql-test/include/have_openssl_2.inc b/mysql-test/include/have_openssl_2.inc index 724d295a398..9671ce29573 100644 --- a/mysql-test/include/have_openssl_2.inc +++ b/mysql-test/include/have_openssl_2.inc @@ -1,4 +1,4 @@ -- require r/have_openssl_2.require disable_query_log; -SHOW STATUS LIKE "SSL_get_cipher"; +SHOW STATUS LIKE "Ssl_cipher"; enable_query_log; diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result index 19f8ffa84d4..03cfcc50e17 100644 --- a/mysql-test/r/auto_increment.result +++ b/mysql-test/r/auto_increment.result @@ -150,3 +150,91 @@ select last_insert_id(); last_insert_id() 0 drop table t1; +create table t1(a int auto_increment,b int null,primary key(a)); +SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO; +insert into t1(a,b)values(NULL,1); +insert into t1(a,b)values(200,2); +insert into t1(a,b)values(0,3); +insert into t1(b)values(4); +insert into t1(b)values(5); +insert into t1(b)values(6); +insert into t1(b)values(7); +select * from t1 order by b; +a b +1 1 +200 2 +0 3 +201 4 +202 5 +203 6 +204 7 +delete from t1 where a=0; +update t1 set a=0 where b=5; +select * from t1 order by b; +a b +1 1 +200 2 +201 4 +0 5 +203 6 +204 7 +delete from t1 where a=0; +update t1 set a=NULL where b=6; +Warnings: +Warning 1261 Data truncated, NULL supplied to NOT NULL column 'a' at row 4 +update t1 set a=300 where b=7; +SET SQL_MODE=''; +insert into t1(a,b)values(NULL,8); +insert into t1(a,b)values(400,9); +insert into t1(a,b)values(0,10); +insert into t1(b)values(11); +insert into t1(b)values(12); +insert into t1(b)values(13); +insert into t1(b)values(14); +select * from t1 order by b; +a b +1 1 +200 2 +201 4 +0 6 +300 7 +301 8 +400 9 +401 10 +402 11 +403 12 +404 13 +405 14 +delete from t1 where a=0; +update t1 set a=0 where b=12; +select * from t1 order by b; +a b +1 1 +200 2 +201 4 +300 7 +301 8 +400 9 +401 10 +402 11 +0 12 +404 13 +405 14 +delete from t1 where a=0; +update t1 set a=NULL where b=13; +Warnings: +Warning 1261 Data truncated, NULL supplied to NOT NULL column 'a' at row 9 +update t1 set a=500 where b=14; +select * from t1 order by b; +a b +1 1 +200 2 +201 4 +300 7 +301 8 +400 9 +401 10 +402 11 +0 13 +500 14 +drop table t1; diff --git a/mysql-test/r/bdb.result b/mysql-test/r/bdb.result index b0566011996..fd2f7b7e49b 100644 --- a/mysql-test/r/bdb.result +++ b/mysql-test/r/bdb.result @@ -203,7 +203,7 @@ a 2 check table t1; Table Op Msg_type Msg_text -test.t1 check error The storage enginge for the table doesn't support check +test.t1 check error The storage engine for the table doesn't support check drop table t1; create table t1 (a int,b varchar(20)) type=bdb; insert into t1 values (1,""), (2,"testing"); diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result index 12dc146ba2b..93214ae8479 100644 --- a/mysql-test/r/bigint.result +++ b/mysql-test/r/bigint.result @@ -1,12 +1,12 @@ drop table if exists t1; select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296; -0 256 00000000000000065536 2147483647 -2147483648 2147483648 +4294967296 +0 256 00000000000000065536 2147483647 -2147483648 2147483648 4294967296 0 256 65536 2147483647 -2147483648 2147483648 4294967296 select 9223372036854775807,-009223372036854775808; 9223372036854775807 -009223372036854775808 9223372036854775807 -9223372036854775808 select +9999999999999999999,-9999999999999999999; -+9999999999999999999 -9999999999999999999 +9999999999999999999 -9999999999999999999 9999999999999999999 -10000000000000000000 select cast(9223372036854775808 as unsigned)+1; cast(9223372036854775808 as unsigned)+1 @@ -14,6 +14,9 @@ cast(9223372036854775808 as unsigned)+1 select 9223372036854775808+1; 9223372036854775808+1 9223372036854775809 +select -(0-3),round(-(0-3)), round(9999999999999999999); +-(0-3) round(-(0-3)) round(9999999999999999999) +3 3 10000000000000000000 create table t1 (a bigint unsigned not null, primary key(a)); insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE); select * from t1; diff --git a/mysql-test/r/case.result b/mysql-test/r/case.result index 04627a7a493..08f148f94c0 100644 --- a/mysql-test/r/case.result +++ b/mysql-test/r/case.result @@ -10,10 +10,10 @@ CASE "c" when "a" then 1 when "b" then 2 ELSE 3 END 3 select CASE BINARY "b" when "a" then 1 when "B" then 2 WHEN "b" then "ok" END; CASE BINARY "b" when "a" then 1 when "B" then 2 WHEN "b" then "ok" END -0 +ok select CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END; CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END -0 +ok select CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end; CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end a @@ -72,6 +72,48 @@ yellow green drop table t1; SET NAMES latin1; +CREATE TABLE t1 SELECT +CASE WHEN 1 THEN _latin1'a' COLLATE latin1_danish_ci ELSE _latin1'a' END AS c1, +CASE WHEN 1 THEN _latin1'a' ELSE _latin1'a' COLLATE latin1_danish_ci END AS c2, +CASE WHEN 1 THEN 'a' ELSE 1 END AS c3, +CASE WHEN 1 THEN 1 ELSE 'a' END AS c4, +CASE WHEN 1 THEN 'a' ELSE 1.0 END AS c5, +CASE WHEN 1 THEN 1.0 ELSE 'a' END AS c6, +CASE WHEN 1 THEN 1 ELSE 1.0 END AS c7, +CASE WHEN 1 THEN 1.0 ELSE 1 END AS c8 +; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` char(1) character set latin1 collate latin1_danish_ci default NULL, + `c2` char(1) character set latin1 collate latin1_danish_ci default NULL, + `c3` char(1) default NULL, + `c4` char(1) default NULL, + `c5` char(3) default NULL, + `c6` char(3) default NULL, + `c7` double(3,1) default NULL, + `c8` double(3,1) default NULL +) TYPE=MyISAM CHARSET=latin1 +DROP TABLE t1; +SELECT CASE +WHEN 1 +THEN _latin1'a' COLLATE latin1_danish_ci +ELSE _latin1'a' COLLATE latin1_swedish_ci +END; +ERROR HY000: Illegal mix of collations (latin1_danish_ci,EXPLICIT) and (latin1_swedish_ci,EXPLICIT) for operation 'case' +SELECT CASE _latin1'a' COLLATE latin1_general_ci +WHEN _latin1'a' COLLATE latin1_danish_ci THEN 1 +WHEN _latin1'a' COLLATE latin1_swedish_ci THEN 2 +END; +ERROR HY000: Illegal mix of collations (latin1_general_ci,EXPLICIT), (latin1_danish_ci,EXPLICIT), (latin1_swedish_ci,EXPLICIT) for operation 'case' +SELECT +CASE _latin1'a' COLLATE latin1_general_ci WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' COLLATE latin1_bin WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin THEN '1' ELSE 2 END +; +CASE _latin1'a' COLLATE latin1_general_ci WHEN _latin1'A' THEN '1' ELSE 2 END CASE _latin1'a' COLLATE latin1_bin WHEN _latin1'A' THEN '1' ELSE 2 END CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin THEN '1' ELSE 2 END +1 2 1 2 CREATE TABLE t1 SELECT COALESCE(_latin1'a',_latin2'a'); ERROR HY000: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (latin2_general_ci,COERCIBLE) for operation 'coalesce' CREATE TABLE t1 SELECT COALESCE('a' COLLATE latin1_swedish_ci,'b' COLLATE latin1_bin); diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index f895107239f..b865084b409 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -7,6 +7,10 @@ CREATE TABLE t2 ( latin1_f CHAR(32) CHARACTER SET latin1 COLLATE koi8r_general_ci NOT NULL ); ERROR 42000: COLLATION 'koi8r_general_ci' is not valid for CHARACTER SET 'latin1' +CREATE TABLE t2 ( +latin1_f CHAR(32) CHARACTER SET latin1 COLLATE some_non_existing_col NOT NULL +); +ERROR HY000: Unknown collation: 'some_non_existing_col' INSERT INTO t1 (latin1_f) VALUES (_latin1'A'); INSERT INTO t1 (latin1_f) VALUES (_latin1'a'); INSERT INTO t1 (latin1_f) VALUES (_latin1'AD'); @@ -482,7 +486,7 @@ y Z z SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; -ERROR 42000: COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' +ERROR HY000: Unknown collation: 'koi8r' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -526,3 +530,9 @@ latin1 latin1_swedish_ci 3 1 SET CHARACTER SET 'DEFAULT'; ERROR 42000: Unknown character set: 'DEFAULT' DROP TABLE t1; +CREATE TABLE t1 +(s1 CHAR(5) COLLATE latin1_german1_ci, +s2 CHAR(5) COLLATE latin1_swedish_ci); +SELECT * FROM t1 WHERE s1 = s2; +ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '=' +DROP TABLE t1; diff --git a/mysql-test/r/ctype_recoding.result b/mysql-test/r/ctype_recoding.result index 23a90be1306..b89a90cc6ba 100644 --- a/mysql-test/r/ctype_recoding.result +++ b/mysql-test/r/ctype_recoding.result @@ -42,3 +42,17 @@ Field Type Null Key Default Extra SET CHARACTER SET koi8r; DROP TABLE таблица; SET CHARACTER SET default; +SET CHARACTER SET koi8r; +CREATE DATABASE тест; +USE тест; +SHOW TABLES; +Tables_in_тест +SHOW TABLES IN тест; +Tables_in_тест +SET CHARACTER SET cp1251; +SHOW TABLES; +Tables_in_РЕЯР +SHOW TABLES IN РЕЯР; +Tables_in_РЕЯР +SET CHARACTER SET koi8r; +DROP DATABASE тест; diff --git a/mysql-test/r/fulltext2.result b/mysql-test/r/fulltext2.result index 8086faadba4..a35be210ece 100644 --- a/mysql-test/r/fulltext2.result +++ b/mysql-test/r/fulltext2.result @@ -4,771 +4,6 @@ i int(10) unsigned not null auto_increment primary key, a varchar(255) not null, FULLTEXT KEY (a) ) TYPE=MyISAM; -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaaxxx'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaazzz'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); -insert t1 (a) values ('aaayyy'); repair table t1 quick; Table Op Msg_type Msg_text test.t1 repair status OK diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index be3c43e011b..d861d1a582e 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -612,3 +612,9 @@ select Case When Count(*) < MAX_REQ Then 1 Else 0 End from t1 where t1.USR_ID = Case When Count(*) < MAX_REQ Then 1 Else 0 End 1 drop table t1; +create table t1 (a char(10)); +insert into t1 values ('a'),('b'),('c'); +select coercibility(max(a)) from t1; +coercibility(max(a)) +3 +drop table t1; diff --git a/mysql-test/r/func_in.result b/mysql-test/r/func_in.result index 4b15c44fdb1..a197371b345 100644 --- a/mysql-test/r/func_in.result +++ b/mysql-test/r/func_in.result @@ -143,3 +143,24 @@ select * from t1 where 'a' in (a,b,c collate latin1_bin); a b c a c c drop table t1; +select '1.0' in (1,2); +'1.0' in (1,2) +1 +select 1 in ('1.0',2); +1 in ('1.0',2) +1 +select 1 in (1,'2.0'); +1 in (1,'2.0') +1 +select 1 in ('1.0',2.0); +1 in ('1.0',2.0) +1 +select 1 in (1.0,'2.0'); +1 in (1.0,'2.0') +1 +select 1 in ('1.1',2); +1 in ('1.1',2) +0 +select 1 in ('1.1',2.0); +1 in ('1.1',2.0) +0 diff --git a/mysql-test/r/grant2.result b/mysql-test/r/grant2.result new file mode 100644 index 00000000000..0b127188586 --- /dev/null +++ b/mysql-test/r/grant2.result @@ -0,0 +1,23 @@ +delete from mysql.user where user like 'mysqltest\_%'; +delete from mysql.db where user like 'mysqltest\_%'; +flush privileges; +grant all privileges on `my\_%`.* to mysqltest_1@localhost with grant option; +select current_user(); +current_user() +mysqltest_1@localhost +grant all privileges on `my\_1`.* to mysqltest_2@localhost with grant option; +grant all privileges on `my_%`.* to mysqltest_3@localhost with grant option; +ERROR 42000: Access denied for user: 'mysqltest_1'@'localhost' to database 'my_%' +show grants for mysqltest_1@localhost; +Grants for mysqltest_1@localhost +GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' +GRANT ALL PRIVILEGES ON `my\_%`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION +show grants for mysqltest_2@localhost; +Grants for mysqltest_2@localhost +GRANT USAGE ON *.* TO 'mysqltest_2'@'localhost' +GRANT ALL PRIVILEGES ON `my\_1`.* TO 'mysqltest_2'@'localhost' WITH GRANT OPTION +show grants for mysqltest_3@localhost; +ERROR 42000: There is no such grant defined for user 'mysqltest_3' on host 'localhost' +delete from mysql.user where user like 'mysqltest\_%'; +delete from mysql.db where user like 'mysqltest\_%'; +flush privileges; diff --git a/mysql-test/r/grant_cache.result b/mysql-test/r/grant_cache.result index c8ae0b4d9b3..3edaa003b60 100644 --- a/mysql-test/r/grant_cache.result +++ b/mysql-test/r/grant_cache.result @@ -84,7 +84,7 @@ a b c a 1 1 1 test.t1 2 2 2 test.t1 select * from t2; -ERROR 42000: select command denied to user: 'mysqltest_2@localhost' for table 't2' +ERROR 42000: select command denied to user: 'mysqltest_2'@'localhost' for table 't2' show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 6 @@ -98,17 +98,17 @@ select "user3"; user3 user3 select * from t1; -ERROR 42000: select command denied to user: 'mysqltest_3@localhost' for column 'b' in table 't1' +ERROR 42000: select command denied to user: 'mysqltest_3'@'localhost' for column 'b' in table 't1' select a from t1; a 1 2 select c from t1; -ERROR 42000: SELECT command denied to user: 'mysqltest_3@localhost' for column 'c' in table 't1' +ERROR 42000: SELECT command denied to user: 'mysqltest_3'@'localhost' for column 'c' in table 't1' select * from t2; -ERROR 42000: select command denied to user: 'mysqltest_3@localhost' for table 't2' +ERROR 42000: select command denied to user: 'mysqltest_3'@'localhost' for table 't2' select mysqltest.t1.c from test.t1,mysqltest.t1; -ERROR 42000: SELECT command denied to user: 'mysqltest_3@localhost' for column 'c' in table 't1' +ERROR 42000: SELECT command denied to user: 'mysqltest_3'@'localhost' for column 'c' in table 't1' show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 6 diff --git a/mysql-test/r/have_openssl_2.require b/mysql-test/r/have_openssl_2.require index 09a65d7d9bc..032b60d544a 100644 --- a/mysql-test/r/have_openssl_2.require +++ b/mysql-test/r/have_openssl_2.require @@ -1,2 +1,2 @@ Variable_name Value -jkhjkhfs +Ssl_cipher EDH-RSA-DES-CBC3-SHA diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 4fb6efe6a14..01aad9dcd62 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -156,7 +156,7 @@ level id parent_id 1 1007 101 optimize table t1; Table Op Msg_type Msg_text -test.t1 optimize error The storage enginge for the table doesn't support optimize +test.t1 optimize error The storage engine for the table doesn't support optimize show keys from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 0 PRIMARY 1 id A # NULL NULL BTREE @@ -180,7 +180,7 @@ create table t1 (a int) type=innodb; insert into t1 values (1), (2); optimize table t1; Table Op Msg_type Msg_text -test.t1 optimize error The storage enginge for the table doesn't support optimize +test.t1 optimize error The storage engine for the table doesn't support optimize delete from t1 where a = 1; select * from t1; a @@ -712,7 +712,7 @@ world 2 hello 1 optimize table t1; Table Op Msg_type Msg_text -test.t1 optimize error The storage enginge for the table doesn't support optimize +test.t1 optimize error The storage engine for the table doesn't support optimize show keys from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 0 PRIMARY 1 a A 2 NULL NULL BTREE @@ -788,7 +788,7 @@ id id3 UNLOCK TABLES; DROP TABLE t1; create table t1 (a char(20), unique (a(5))) type=innodb; -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 store engine doesn't support unique sub keys +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 create table t1 (a char(20), index (a(5))) type=innodb; show create table t1; Table Create Table @@ -1289,7 +1289,7 @@ a b 111 100 drop table t1; CREATE TABLE t1 (col1 int(1))TYPE=InnoDB; -CREATE TABLE t2 (col1 int(1),stamp TIMESTAMP(+0),INDEX stamp_idx +CREATE TABLE t2 (col1 int(1),stamp TIMESTAMP,INDEX stamp_idx (stamp))TYPE=InnoDB; insert into t1 values (1),(2),(3); insert into t2 values (1, 20020204130000),(2, 20020204130000),(4,20020204310000 ); diff --git a/mysql-test/r/isam.result b/mysql-test/r/isam.result index 5ac54668443..b83185b0c01 100644 --- a/mysql-test/r/isam.result +++ b/mysql-test/r/isam.result @@ -57,14 +57,14 @@ test.t1 optimize status OK check table t1,t2; Table Op Msg_type Msg_text test.t1 check status OK -test.t2 check error The storage enginge for the table doesn't support check +test.t2 check error The storage engine for the table doesn't support check repair table t1,t2; Table Op Msg_type Msg_text test.t1 repair status OK -test.t2 repair error The storage enginge for the table doesn't support repair +test.t2 repair error The storage engine for the table doesn't support repair check table t2,t1; Table Op Msg_type Msg_text -test.t2 check error The storage enginge for the table doesn't support check +test.t2 check error The storage engine for the table doesn't support check test.t1 check status OK lock tables t1 write; check table t2,t1; diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result index 413277fee43..507ceb8951c 100644 --- a/mysql-test/r/merge.result +++ b/mysql-test/r/merge.result @@ -178,9 +178,9 @@ t3 CREATE TABLE `t3` ( ) TYPE=MRG_MyISAM CHARSET=latin1 UNION=(`t1`,`t2`) create table t4 (a int not null, b char(10), key(a)) type=MERGE UNION=(t1,t2); select * from t4; -ERROR HY000: Can't open file: 't4.MRG'. (errno: 143) +ERROR HY000: Can't open file: 't4.MRG' (errno: 143) alter table t4 add column c int; -ERROR HY000: Can't open file: 't4.MRG'. (errno: 143) +ERROR HY000: Can't open file: 't4.MRG' (errno: 143) create database mysqltest; create table mysqltest.t6 (a int not null primary key auto_increment, message char(20)); create table t5 (a int not null, b char(20), key(a)) type=MERGE UNION=(test.t1,mysqltest.t6); diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result index fd621d06c2b..0dd9754d0c5 100644 --- a/mysql-test/r/null.result +++ b/mysql-test/r/null.result @@ -7,7 +7,7 @@ select 1 | NULL,1 & NULL,1+NULL,1-NULL; NULL NULL NULL NULL select NULL=NULL,NULL<>NULL,IFNULL(NULL,1.1)+0,IFNULL(NULL,1) | 0; NULL=NULL NULL<>NULL IFNULL(NULL,1.1)+0 IFNULL(NULL,1) | 0 -NULL NULL 1 1 +NULL NULL 1.1 1 select strcmp("a",NULL),(1<NULL)+0.0,NULL regexp "a",null like "a%","a%" like null; strcmp("a",NULL) (1<NULL)+0.0 NULL regexp "a" null like "a%" "a%" like null NULL NULL NULL NULL NULL diff --git a/mysql-test/r/openssl_2.result b/mysql-test/r/openssl_2.result index b5c67dfbcb0..879c623dd40 100644 --- a/mysql-test/r/openssl_2.result +++ b/mysql-test/r/openssl_2.result @@ -1,2 +1,25 @@ -SHOW STATUS LIKE 'SSL%'; +SHOW STATUS LIKE 'Ssl%'; Variable_name Value +Ssl_accepts 1 +Ssl_finished_accepts 1 +Ssl_finished_connects 0 +Ssl_accept_renegotiates 0 +Ssl_connect_renegotiates 0 +Ssl_callback_cache_hits 0 +Ssl_session_cache_hits 0 +Ssl_session_cache_misses 0 +Ssl_session_cache_timeouts 0 +Ssl_used_session_cache_entries 1 +Ssl_client_connects 0 +Ssl_session_cache_overflows 0 +Ssl_session_cache_size 128 +Ssl_session_cache_mode SERVER +Ssl_sessions_reused 0 +Ssl_ctx_verify_mode 7 +Ssl_ctx_verify_depth 4294967295 +Ssl_verify_mode 7 +Ssl_verify_depth 4294967295 +Ssl_version TLSv1 +Ssl_cipher EDH-RSA-DES-CBC3-SHA +Ssl_cipher_list +Ssl_default_timeout 7200 diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 3b3e52d8240..68ddb5a377b 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -374,22 +374,23 @@ drop database mysqltest; show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 0 -create table t1 (a char(1) not null); -insert into t1 values("А"); +create table t1 (a char(1) not null collate koi8r_general_ci); +insert into t1 values(_koi8r"А"); +set CHARACTER SET koi8r; select * from t1; a А set CHARACTER SET cp1251_koi8; select * from t1; a -А +ю set CHARACTER SET DEFAULT; show status like "Qcache_queries_in_cache"; Variable_name Value -Qcache_queries_in_cache 1 +Qcache_queries_in_cache 2 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 5 +Qcache_hits 4 drop table t1; create database if not exists mysqltest; create table mysqltest.t1 (i int not null); @@ -415,7 +416,7 @@ Variable_name Value Qcache_queries_in_cache 2 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 7 +Qcache_hits 6 drop database mysqltest; drop table t1; create table t1 (i int not null); @@ -429,7 +430,7 @@ FOUND_ROWS() 4 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 7 +Qcache_hits 6 show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 @@ -441,7 +442,7 @@ FOUND_ROWS() 1 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 7 +Qcache_hits 6 show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 @@ -454,7 +455,7 @@ FOUND_ROWS() 4 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 8 +Qcache_hits 7 show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 @@ -466,7 +467,7 @@ FOUND_ROWS() 1 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 9 +Qcache_hits 8 show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 @@ -535,7 +536,7 @@ a 3 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 12 +Qcache_hits 11 show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 @@ -552,7 +553,7 @@ a 3 show status like "Qcache_hits"; Variable_name Value -Qcache_hits 13 +Qcache_hits 12 show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 @@ -561,6 +562,15 @@ set GLOBAL query_cache_min_res_unit=default; show global variables like "query_cache_min_res_unit"; Variable_name Value query_cache_min_res_unit 4096 +create table t1 (a int not null); +insert into t1 values (1); +select "aaa" from t1; +aaa +aaa +select "AAA" from t1; +AAA +AAA +drop table t1; create table t1 (a int); set GLOBAL query_cache_size=1000; show global variables like "query_cache_size"; diff --git a/mysql-test/r/repair_part1.result b/mysql-test/r/repair_part1.result index eb46622dcc1..27dfdac24f0 100644 --- a/mysql-test/r/repair_part1.result +++ b/mysql-test/r/repair_part1.result @@ -7,7 +7,7 @@ test.t1 repair status OK alter table t1 TYPE=HEAP; repair table t1 use_frm; Table Op Msg_type Msg_text -test.t1 repair error The storage enginge for the table doesn't support repair +test.t1 repair error The storage engine for the table doesn't support repair drop table t1; repair table t1 use_frm; Table Op Msg_type Msg_text diff --git a/mysql-test/r/repair_part2.result b/mysql-test/r/repair_part2.result index 77aa98c3da9..c9cf6c019f7 100644 --- a/mysql-test/r/repair_part2.result +++ b/mysql-test/r/repair_part2.result @@ -1,6 +1,6 @@ repair table t1; Table Op Msg_type Msg_text -test.t1 repair error Can't open file: 't1.MYI'. (errno: 130) +test.t1 repair error Can't open file: 't1.MYI' (errno: 130) repair table t1 use_frm; Table Op Msg_type Msg_text test.t1 repair warning Number of rows changed from 0 to 1 diff --git a/mysql-test/r/rpl000015.result b/mysql-test/r/rpl000015.result index 349365e17ad..047f1ac5044 100644 --- a/mysql-test/r/rpl000015.result +++ b/mysql-test/r/rpl000015.result @@ -4,20 +4,20 @@ File Position Binlog_do_db Binlog_ignore_db master-bin.000001 79 reset slave; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space +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 change master to master_host='127.0.0.1'; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 test MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4 +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 +127.0.0.1 test MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4 change master to master_host='127.0.0.1',master_user='root', master_password='',master_port=MASTER_PORT; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4 +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 +127.0.0.1 root MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4 start slave; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 7 master-bin.000001 79 slave-relay-bin.000001 123 master-bin.000001 Yes Yes 0 0 79 123 +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 +127.0.0.1 root MASTER_PORT 7 master-bin.000001 79 slave-relay-bin.000001 123 master-bin.000001 Yes Yes 0 0 79 123 drop table if exists t1; create table t1 (n int); insert into t1 values (10),(45),(90); diff --git a/mysql-test/r/rpl_empty_master_crash.result b/mysql-test/r/rpl_empty_master_crash.result index 39ab1c2d9b4..6aac1cbfc91 100644 --- a/mysql-test/r/rpl_empty_master_crash.result +++ b/mysql-test/r/rpl_empty_master_crash.result @@ -5,7 +5,7 @@ reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space +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 load table t1 from master; ERROR 08S01: Error connecting to master: Master is not configured load table t1 from master; diff --git a/mysql-test/r/rpl_flush_log_loop.result b/mysql-test/r/rpl_flush_log_loop.result index 98d661e9af2..954ab107123 100644 --- a/mysql-test/r/rpl_flush_log_loop.result +++ b/mysql-test/r/rpl_flush_log_loop.result @@ -13,5 +13,5 @@ master_password='',master_port=SLAVE_PORT; start slave; flush logs; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root SLAVE_PORT 60 slave-bin.000001 79 relay-log.000001 122 slave-bin.000001 Yes Yes 0 0 79 122 +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 +127.0.0.1 root SLAVE_PORT 60 slave-bin.000001 79 relay-log.000001 122 slave-bin.000001 Yes Yes 0 0 79 122 diff --git a/mysql-test/r/rpl_loaddata.result b/mysql-test/r/rpl_loaddata.result index f4b003d6cc3..ec9011d573f 100644 --- a/mysql-test/r/rpl_loaddata.result +++ b/mysql-test/r/rpl_loaddata.result @@ -24,7 +24,3 @@ drop table t2; drop table t3; create table t1(a int, b int, unique(b)); insert into t1 values(1,10); -load data infile '../../std_data/rpl_loaddata.dat' into table t1; -show status like 'slave_running'; -Variable_name Value -Slave_running OFF diff --git a/mysql-test/r/rpl_log.result b/mysql-test/r/rpl_log.result index df2ef4e3d8a..050e9274a99 100644 --- a/mysql-test/r/rpl_log.result +++ b/mysql-test/r/rpl_log.result @@ -92,7 +92,7 @@ slave-bin.000002 4 Query 1 110 use `test`; create table t1 (n int) slave-bin.000002 62 Query 1 168 use `test`; insert into t1 values (1) slave-bin.000002 122 Query 1 228 use `test`; drop table t1 show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 1 master-bin.000002 276 slave-relay-bin.000002 1531 master-bin.000002 Yes Yes 0 0 276 1535 +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 +127.0.0.1 root MASTER_PORT 1 master-bin.000002 276 slave-relay-bin.000002 1531 master-bin.000002 Yes Yes 0 0 276 1535 show binlog events in 'slave-bin.000005' from 4; ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Could not find target log diff --git a/mysql-test/r/rpl_log_pos.result b/mysql-test/r/rpl_log_pos.result index fa38e42ae73..b42e7ff5dc4 100644 --- a/mysql-test/r/rpl_log_pos.result +++ b/mysql-test/r/rpl_log_pos.result @@ -8,26 +8,26 @@ show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.000001 79 show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 127 +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 +127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 127 stop slave; change master to master_log_pos=73; start slave; stop slave; change master to master_log_pos=73; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 73 4 +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 +127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 73 4 start slave; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 4 master-bin.000001 No Yes 0 0 73 4 +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 +127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 4 master-bin.000001 No Yes 0 0 73 4 stop slave; change master to master_log_pos=173; start slave; show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 1 master-bin.000001 173 slave-relay-bin.000001 4 master-bin.000001 No Yes 0 0 173 4 +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 +127.0.0.1 root MASTER_PORT 1 master-bin.000001 173 slave-relay-bin.000001 4 master-bin.000001 No Yes 0 0 173 4 show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.000001 79 diff --git a/mysql-test/r/rpl_redirect.result b/mysql-test/r/rpl_redirect.result index 3807479fb54..79ff6685706 100644 --- a/mysql-test/r/rpl_redirect.result +++ b/mysql-test/r/rpl_redirect.result @@ -5,7 +5,7 @@ reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; SHOW SLAVE STATUS; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space +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 SHOW SLAVE HOSTS; Server_id Host Port Rpl_recovery_rank Master_id 2 127.0.0.1 SLAVE_PORT 2 1 diff --git a/mysql-test/r/rpl_replicate_do.result b/mysql-test/r/rpl_replicate_do.result index a91a0a2b819..4d740cafbd0 100644 --- a/mysql-test/r/rpl_replicate_do.result +++ b/mysql-test/r/rpl_replicate_do.result @@ -26,3 +26,6 @@ n select * from t11; ERROR 42S02: Table 'test.t11' doesn't exist drop table if exists t1,t2,t11; +show slave status; +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 +127.0.0.1 root MASTER_PORT 1 master-bin.000001 1281 slave-relay-bin.000002 1325 master-bin.000001 Yes Yes test.t1 0 0 1281 1329 diff --git a/mysql-test/r/rpl_rotate_logs.result b/mysql-test/r/rpl_rotate_logs.result index c3c83947578..753edebea60 100644 --- a/mysql-test/r/rpl_rotate_logs.result +++ b/mysql-test/r/rpl_rotate_logs.result @@ -15,8 +15,8 @@ insert into temp_table values ("testing temporary tables"); create table t1 (s text); insert into t1 values('Could not break slave'),('Tried hard'); show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 60 master-bin.000001 417 slave-relay-bin.000001 461 master-bin.000001 Yes Yes 0 0 417 461 +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 +127.0.0.1 root MASTER_PORT 60 master-bin.000001 417 slave-relay-bin.000001 461 master-bin.000001 Yes Yes 0 0 417 461 select * from t1; s Could not break slave @@ -56,8 +56,8 @@ Log_name master-bin.000003 insert into t2 values (65); show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 60 master-bin.000003 290 slave-relay-bin.000001 1088 master-bin.000003 Yes Yes 0 0 290 1088 +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 +127.0.0.1 root MASTER_PORT 60 master-bin.000003 290 slave-relay-bin.000001 1088 master-bin.000003 Yes Yes 0 0 290 1088 select * from t2; m 34 @@ -82,8 +82,8 @@ select * from t4; a testing temporary tables part 2 show slave status; -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 Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space -127.0.0.1 root MASTER_PORT 60 master-bin.000006 838 slave-relay-bin.000001 8067 master-bin.000006 Yes Yes 0 0 838 8067 +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 +127.0.0.1 root MASTER_PORT 60 master-bin.000006 838 slave-relay-bin.000001 8067 master-bin.000006 Yes Yes 0 0 838 8067 lock tables t3 read; select count(*) from t3 where n >= 4; count(*) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index bba86ff8891..41fba93db5b 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1225,3 +1225,17 @@ a (select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 an 2 2 1 2 drop table t1,t2,t3; +create table t1 (s1 int); +create table t2 (s1 int); +insert into t1 values (1); +insert into t2 values (1); +select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1); +s1 +drop table t1,t2; +create table t1 (s1 int); +create table t2 (s1 int); +insert into t1 values (1); +insert into t2 values (1); +update t1 set s1 = s1 + 1 where 1 = (select x.s1 as A from t2 WHERE t2.s1 > t1.s1 order by A); +ERROR 42S02: Unknown table 'x' in field list +DROP TABLE t1, t2; diff --git a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result index d39f72cbe0b..592c787031f 100644 --- a/mysql-test/r/type_blob.result +++ b/mysql-test/r/type_blob.result @@ -347,7 +347,7 @@ a 1 hello 1 drop table t1; create table t1 (a text, key (a(300))); -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 store engine doesn't support unique sub keys +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 create table t1 (a text, key (a(255))); drop table t1; CREATE TABLE t1 ( diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result index 57df0c67ac9..b31ef73742d 100644 --- a/mysql-test/r/type_decimal.result +++ b/mysql-test/r/type_decimal.result @@ -436,8 +436,8 @@ a 99999999999 drop table t1; CREATE TABLE t1 (a_dec DECIMAL(-1,0)); -ERROR 42000: Too big column length for column 'a_dec' (max = 255). Use BLOB instead +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 '-1,0))' at line 1 CREATE TABLE t1 (a_dec DECIMAL(-2,1)); -ERROR 42000: Too big column length for column 'a_dec' (max = 255). Use BLOB instead +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 '-2,1))' at line 1 CREATE TABLE t1 (a_dec DECIMAL(-1,1)); -ERROR 42000: Too big column length for column 'a_dec' (max = 255). Use BLOB instead +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 '-1,1))' at line 1 diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index 4db791c993e..ead09cc6ed7 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -184,6 +184,8 @@ set GLOBAL table_type=DEFAULT; ERROR 42000: Variable 'table_type' doesn't have a default value set character_set_client=UNKNOWN_CHARACTER_SET; ERROR 42000: Unknown character set: 'UNKNOWN_CHARACTER_SET' +set collation_connection=UNKNOWN_COLLATION; +ERROR HY000: Unknown collation: 'UNKNOWN_COLLATION' set global autocommit=1; ERROR HY000: Variable 'autocommit' is a LOCAL variable and can't be used with SET GLOBAL select @@global.timestamp; diff --git a/mysql-test/r/warnings.result b/mysql-test/r/warnings.result index d84c284d7b4..0ad165a861a 100644 --- a/mysql-test/r/warnings.result +++ b/mysql-test/r/warnings.result @@ -90,6 +90,12 @@ Warning 1263 Data truncated for column 'b' at row 2 Warning 1263 Data truncated for column 'b' at row 3 Warning 1261 Data truncated, NULL supplied to NOT NULL column 'a' at row 4 Warning 1263 Data truncated for column 'b' at row 4 +insert into t2(b) values('mysqlab'); +set sql_warnings=1; +insert into t2(b) values('mysqlab'); +Warnings: +Warning 1263 Data truncated for column 'b' at row 1 +set sql_warnings=0; drop table t1, t2; create table t1(a char(10)); alter table t1 add b char; diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test index 189320a8dcb..b46993ec6dd 100644 --- a/mysql-test/t/auto_increment.test +++ b/mysql-test/t/auto_increment.test @@ -106,3 +106,36 @@ select last_insert_id(); drop table t1; +create table t1(a int auto_increment,b int null,primary key(a)); +SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO; +insert into t1(a,b)values(NULL,1); +insert into t1(a,b)values(200,2); +insert into t1(a,b)values(0,3); +insert into t1(b)values(4); +insert into t1(b)values(5); +insert into t1(b)values(6); +insert into t1(b)values(7); +select * from t1 order by b; +delete from t1 where a=0; +update t1 set a=0 where b=5; +select * from t1 order by b; +delete from t1 where a=0; +update t1 set a=NULL where b=6; +update t1 set a=300 where b=7; +SET SQL_MODE=''; +insert into t1(a,b)values(NULL,8); +insert into t1(a,b)values(400,9); +insert into t1(a,b)values(0,10); +insert into t1(b)values(11); +insert into t1(b)values(12); +insert into t1(b)values(13); +insert into t1(b)values(14); +select * from t1 order by b; +delete from t1 where a=0; +update t1 set a=0 where b=12; +select * from t1 order by b; +delete from t1 where a=0; +update t1 set a=NULL where b=13; +update t1 set a=500 where b=14; +select * from t1 order by b; +drop table t1; diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test index 060d45c29a4..9ac44c8ba0a 100644 --- a/mysql-test/t/bigint.test +++ b/mysql-test/t/bigint.test @@ -13,6 +13,8 @@ select 9223372036854775807,-009223372036854775808; select +9999999999999999999,-9999999999999999999; select cast(9223372036854775808 as unsigned)+1; select 9223372036854775808+1; +select -(0-3),round(-(0-3)), round(9999999999999999999); + # # In 3.23 we have to disable the test of column to bigint as # this fails on AIX powerpc (the resolution for double is not good enough) diff --git a/mysql-test/t/case.test b/mysql-test/t/case.test index 0249a8eefba..8aa17061174 100644 --- a/mysql-test/t/case.test +++ b/mysql-test/t/case.test @@ -42,6 +42,44 @@ insert into t1 values (1,1,'orange'),(1,2,'large'),(2,1,'yellow'),(2,2,'medium') select max(case col when 1 then val else null end) as color from t1 group by row; drop table t1; +SET NAMES latin1; + +# +# CASE and argument types/collations aggregation into result +# +CREATE TABLE t1 SELECT + CASE WHEN 1 THEN _latin1'a' COLLATE latin1_danish_ci ELSE _latin1'a' END AS c1, + CASE WHEN 1 THEN _latin1'a' ELSE _latin1'a' COLLATE latin1_danish_ci END AS c2, + CASE WHEN 1 THEN 'a' ELSE 1 END AS c3, + CASE WHEN 1 THEN 1 ELSE 'a' END AS c4, + CASE WHEN 1 THEN 'a' ELSE 1.0 END AS c5, + CASE WHEN 1 THEN 1.0 ELSE 'a' END AS c6, + CASE WHEN 1 THEN 1 ELSE 1.0 END AS c7, + CASE WHEN 1 THEN 1.0 ELSE 1 END AS c8 +; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +--error 1265 +SELECT CASE + WHEN 1 + THEN _latin1'a' COLLATE latin1_danish_ci + ELSE _latin1'a' COLLATE latin1_swedish_ci + END; + +--error 1268 +SELECT CASE _latin1'a' COLLATE latin1_general_ci + WHEN _latin1'a' COLLATE latin1_danish_ci THEN 1 + WHEN _latin1'a' COLLATE latin1_swedish_ci THEN 2 + END; + +SELECT +CASE _latin1'a' COLLATE latin1_general_ci WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' COLLATE latin1_bin WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin THEN '1' ELSE 2 END +; + # # COALESCE is a CASE abbrevation: # @@ -52,7 +90,6 @@ drop table t1; # # Check COALESCE argument types aggregation -SET NAMES latin1; --error 1265 CREATE TABLE t1 SELECT COALESCE(_latin1'a',_latin2'a'); --error 1265 diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index 0cf531156a9..23039a4b116 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -12,6 +12,11 @@ CREATE TABLE t2 ( latin1_f CHAR(32) CHARACTER SET latin1 COLLATE koi8r_general_ci NOT NULL ); +--error 1271 +CREATE TABLE t2 ( + latin1_f CHAR(32) CHARACTER SET latin1 COLLATE some_non_existing_col NOT NULL +); + INSERT INTO t1 (latin1_f) VALUES (_latin1'A'); INSERT INTO t1 (latin1_f) VALUES (_latin1'a'); @@ -93,7 +98,7 @@ SELECT DISTINCT latin1_f COLLATE latin1_swedish_ci FROM t1; SELECT DISTINCT latin1_f COLLATE latin1_german2_ci FROM t1; SELECT DISTINCT latin1_f COLLATE latin1_general_ci FROM t1; SELECT DISTINCT latin1_f COLLATE latin1_bin FROM t1; ---error 1251 +--error 1271 SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; @@ -143,3 +148,11 @@ SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; SET CHARACTER SET 'DEFAULT'; DROP TABLE t1; + +CREATE TABLE t1 +(s1 CHAR(5) COLLATE latin1_german1_ci, + s2 CHAR(5) COLLATE latin1_swedish_ci); +--error 1265 +SELECT * FROM t1 WHERE s1 = s2; +DROP TABLE t1; +
\ No newline at end of file diff --git a/mysql-test/t/ctype_recoding.test b/mysql-test/t/ctype_recoding.test index 68526806166..8fa31b1f17b 100644 --- a/mysql-test/t/ctype_recoding.test +++ b/mysql-test/t/ctype_recoding.test @@ -27,3 +27,14 @@ SHOW FIELDS FROM я┌п╟п╠п╩п╦я├п╟; SET CHARACTER SET koi8r; DROP TABLE таблица; SET CHARACTER SET default; + +SET CHARACTER SET koi8r; +CREATE DATABASE тест; +USE тест; +SHOW TABLES; +SHOW TABLES IN тест; +SET CHARACTER SET cp1251; +SHOW TABLES; +SHOW TABLES IN РЕЯР; +SET CHARACTER SET koi8r; +DROP DATABASE тест; diff --git a/mysql-test/t/fulltext2.test b/mysql-test/t/fulltext2.test index 2c0d352a870..b739d60e3b3 100644 --- a/mysql-test/t/fulltext2.test +++ b/mysql-test/t/fulltext2.test @@ -17,6 +17,7 @@ CREATE TABLE t1 ( ) TYPE=MyISAM; # two-level entry, second-level tree with depth 2 +--disable_query_log let $1=260; while ($1) { @@ -39,6 +40,7 @@ while ($1) eval insert t1 (a) values ('aaayyy'); dec $1; } +--enable_query_log # converting to two-level repair table t1 quick; diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index fed19cbe07c..8a43716d854 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -355,3 +355,8 @@ insert into t1 values (1, 3); select count(*) + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ from t1 group by MAX_REQ; select Case When Count(*) < MAX_REQ Then 1 Else 0 End from t1 where t1.USR_ID = 1 group by MAX_REQ; drop table t1; + +create table t1 (a char(10)); +insert into t1 values ('a'),('b'),('c'); +select coercibility(max(a)) from t1; +drop table t1; diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test index dca068f368a..105612bf238 100644 --- a/mysql-test/t/func_in.test +++ b/mysql-test/t/func_in.test @@ -73,3 +73,11 @@ select * from t1 where 'a' collate latin1_general_ci in (a,b,c); select * from t1 where 'a' collate latin1_bin in (a,b,c); select * from t1 where 'a' in (a,b,c collate latin1_bin); drop table t1; + +select '1.0' in (1,2); +select 1 in ('1.0',2); +select 1 in (1,'2.0'); +select 1 in ('1.0',2.0); +select 1 in (1.0,'2.0'); +select 1 in ('1.1',2); +select 1 in ('1.1',2.0); diff --git a/mysql-test/t/grant2.test b/mysql-test/t/grant2.test new file mode 100644 index 00000000000..148c4d3da21 --- /dev/null +++ b/mysql-test/t/grant2.test @@ -0,0 +1,30 @@ +# +# GRANT tests that require several connections +# (usually it's GRANT, reconnect as another user, try something) +# + + +# +# wild_compare fun +# + +delete from mysql.user where user like 'mysqltest\_%'; +delete from mysql.db where user like 'mysqltest\_%'; +flush privileges; +grant all privileges on `my\_%`.* to mysqltest_1@localhost with grant option; +connect (user1,localhost,mysqltest_1,,); +connection user1; +select current_user(); +grant all privileges on `my\_1`.* to mysqltest_2@localhost with grant option; +--error 1044 +grant all privileges on `my_%`.* to mysqltest_3@localhost with grant option; +disconnect user1; +connection default; +show grants for mysqltest_1@localhost; +show grants for mysqltest_2@localhost; +--error 1141 +show grants for mysqltest_3@localhost; +delete from mysql.user where user like 'mysqltest\_%'; +delete from mysql.db where user like 'mysqltest\_%'; +flush privileges; + diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 17df79a69fa..635a15baa41 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -868,7 +868,7 @@ drop table t1; CREATE TABLE t1 (col1 int(1))TYPE=InnoDB; -CREATE TABLE t2 (col1 int(1),stamp TIMESTAMP(+0),INDEX stamp_idx +CREATE TABLE t2 (col1 int(1),stamp TIMESTAMP,INDEX stamp_idx (stamp))TYPE=InnoDB; insert into t1 values (1),(2),(3); insert into t2 values (1, 20020204130000),(2, 20020204130000),(4,20020204310000 ); diff --git a/mysql-test/t/openssl_2.test b/mysql-test/t/openssl_2.test index 12f1240f3af..a8ee62db7f6 100644 --- a/mysql-test/t/openssl_2.test +++ b/mysql-test/t/openssl_2.test @@ -1,5 +1,5 @@ # We want to test everything with SSL turned on. -- source include/have_openssl_2.inc -SHOW STATUS LIKE 'SSL%'; +SHOW STATUS LIKE 'Ssl%'; diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index 929146ba97a..6261260115c 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -260,8 +260,9 @@ show status like "Qcache_queries_in_cache"; # # Charset convertion (cp1251_koi8 always present) # -create table t1 (a char(1) not null); -insert into t1 values("А"); +create table t1 (a char(1) not null collate koi8r_general_ci); +insert into t1 values(_koi8r"А"); +set CHARACTER SET koi8r; select * from t1; set CHARACTER SET cp1251_koi8; select * from t1; @@ -369,6 +370,15 @@ set GLOBAL query_cache_min_res_unit=default; show global variables like "query_cache_min_res_unit"; # +# Case sensitive test +# +create table t1 (a int not null); +insert into t1 values (1); +select "aaa" from t1; +select "AAA" from t1; +drop table t1; + +# # Test of query cache resizing # create table t1 (a int); diff --git a/mysql-test/t/rpl_insert_id-slave.opt b/mysql-test/t/rpl_insert_id-slave.opt new file mode 100644 index 00000000000..627becdbfb5 --- /dev/null +++ b/mysql-test/t/rpl_insert_id-slave.opt @@ -0,0 +1 @@ +--innodb diff --git a/mysql-test/t/rpl_loaddata.test b/mysql-test/t/rpl_loaddata.test index dc4eadda192..b540c3907e9 100644 --- a/mysql-test/t/rpl_loaddata.test +++ b/mysql-test/t/rpl_loaddata.test @@ -37,14 +37,21 @@ connection slave; sync_with_master; insert into t1 values(1,10); -connection master; -load data infile '../../std_data/rpl_loaddata.dat' into table t1; - -save_master_pos; -connection slave; -# don't sync_with_master because the slave SQL thread should be stopped because -# of the error so MASTER_POS_WAIT() will not return; just sleep and hope the -# slave SQL thread will have had time to stop. -sleep 1; -show status like 'slave_running'; +# NOTE UNTIL MERGE 4.0 INTO 4.1 +# Below we generate an error, but this error shows up in SHOW SLAVE STATUS +# in the next test. In 4.0 this is fixed (RESET SLAVE resets the error), but it +# has not been merged into 4.1 yet. So for the moment, I comment all lines +# below, to not generate the error, so that the test suite passes. +# When you do the 4.0 -> 4.1 merge, please remove this note and re-enable the +# error generation, by deleting the '#' characters below, and update the result. +# The changeset to merge in 4.1 is +# ChangeSet@1.1455.34.1, 2003-06-10 23:29:49+02:00, guilhem@mysql.com + +#connection master; +#load data infile '../../std_data/rpl_loaddata.dat' into table t1; + +#save_master_pos; +#connection slave; +# The SQL slave thread should be stopped now. +#wait_for_slave_to_stop; diff --git a/mysql-test/t/rpl_replicate_do.test b/mysql-test/t/rpl_replicate_do.test index dcb3c5034fd..a1ce8d8a645 100644 --- a/mysql-test/t/rpl_replicate_do.test +++ b/mysql-test/t/rpl_replicate_do.test @@ -31,3 +31,7 @@ drop table if exists t1,t2,t11; save_master_pos; connection slave; sync_with_master; +# show slave status, just to see of it prints replicate-do-table +--replace_result $MASTER_MYPORT MASTER_PORT +show slave status; + diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 66d8dd2bc32..1d7da94d455 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -807,6 +807,7 @@ INSERT INTO t1 VALUES("2f6161e879db43c1a5b82c21ddc49089", "Default", "System", " INSERT INTO t1 VALUES("c373e9f5ad0791724315444553544200", "AddDocumentTest", "admin", "2003-06-09 10:51:25", "Movie Reviews", "0", "2003-06-09 10:51:25", "admin", "0", "2f6161e879db43c1a5b82c21ddc49089", "03eea05112b845949f3fd03278b5fe43", NULL); SELECT 'c373e9f5ad0791a0dab5444553544200' IN(SELECT t1.FOLDERID FROM t1 WHERE t1.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t1.FOLDERNAME = 'Level1'); drop table t1; + # # alloc_group_fields() working # @@ -817,4 +818,26 @@ insert into t1 values (0,100),(1,2), (1,3), (2,2), (2,7), (2,-1), (3,10); insert into t2 values (0,0), (1,1), (2,1), (3,1), (4,1); insert into t3 values (3,3), (2,2), (1,1); select a,(select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 and t1.a <= t3.b group by t1.a order by sum limit 1) from t3; -drop table t1,t2,t3;s +drop table t1,t2,t3; + +# +# aggregate functions in HAVING test +# +create table t1 (s1 int); +create table t2 (s1 int); +insert into t1 values (1); +insert into t2 values (1); +select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1); +drop table t1,t2; +# +# update subquery with wrong field (to force name resolving +# in UPDATE name space) +# +create table t1 (s1 int); +create table t2 (s1 int); +insert into t1 values (1); +insert into t2 values (1); +-- error 1109 +update t1 set s1 = s1 + 1 where 1 = (select x.s1 as A from t2 WHERE t2.s1 > t1.s1 order by A); +DROP TABLE t1, t2; + diff --git a/mysql-test/t/type_decimal.test b/mysql-test/t/type_decimal.test index 8653c06a644..acbc738995f 100644 --- a/mysql-test/t/type_decimal.test +++ b/mysql-test/t/type_decimal.test @@ -237,9 +237,9 @@ drop table t1; # Test of wrong decimal type # ---error 1074 +--error 1064 CREATE TABLE t1 (a_dec DECIMAL(-1,0)); ---error 1074 +--error 1064 CREATE TABLE t1 (a_dec DECIMAL(-2,1)); ---error 1074 +--error 1064 CREATE TABLE t1 (a_dec DECIMAL(-1,1)); diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 7d4b25df0eb..16a192f1276 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -120,6 +120,8 @@ set SESSION query_cache_size=10000; set GLOBAL table_type=DEFAULT; --error 1115 set character_set_client=UNKNOWN_CHARACTER_SET; +--error 1271 +set collation_connection=UNKNOWN_COLLATION; --error 1228 set global autocommit=1; --error 1228 diff --git a/mysql-test/t/warnings.test b/mysql-test/t/warnings.test index 6374fbf83ac..41aa02e925f 100644 --- a/mysql-test/t/warnings.test +++ b/mysql-test/t/warnings.test @@ -51,6 +51,10 @@ update t1 set c='mysql ab' where c='test'; update t1 set d=c; create table t2(a tinyint NOT NULL, b char(3)); insert into t2 select b,c from t1; +insert into t2(b) values('mysqlab'); +set sql_warnings=1; +insert into t2(b) values('mysqlab'); +set sql_warnings=0; drop table t1, t2; # diff --git a/mysys/charset.c b/mysys/charset.c index 7dab1a38325..7a82f8780a0 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -63,7 +63,7 @@ static void init_state_maps(CHARSET_INFO *cs) uint i; uchar *state_map= cs->state_map; uchar *ident_map= cs->ident_map; - + /* Fill state_map with states to get a faster parser */ for (i=0; i < 256 ; i++) { @@ -76,13 +76,12 @@ static void init_state_maps(CHARSET_INFO *cs) state_map[i]=(uchar) MY_LEX_IDENT; #endif else if (!my_isgraph(cs,i)) - state_map[i]=(uchar) MY_LEX_SKIP; + state_map[i]=(uchar) MY_LEX_SKIP; else state_map[i]=(uchar) MY_LEX_CHAR; } state_map[(uchar)'_']=state_map[(uchar)'$']=(uchar) MY_LEX_IDENT; state_map[(uchar)'\'']=(uchar) MY_LEX_STRING; - state_map[(uchar)'-']=state_map[(uchar)'+']=(uchar) MY_LEX_SIGNED_NUMBER; state_map[(uchar)'.']=(uchar) MY_LEX_REAL_OR_POINT; state_map[(uchar)'>']=state_map[(uchar)'=']=state_map[(uchar)'!']= (uchar) MY_LEX_CMP_OP; state_map[(uchar)'<']= (uchar) MY_LEX_LONG_CMP_OP; diff --git a/mysys/mf_wcomp.c b/mysys/mf_wcomp.c index bdcfb0501d8..62a5a02eaea 100644 --- a/mysys/mf_wcomp.c +++ b/mysys/mf_wcomp.c @@ -23,11 +23,12 @@ char wild_many='*'; char wild_one='?'; -char wild_prefix=0; +char wild_prefix=0; /* QQ this can potentially cause a SIGSEGV */ -int wild_compare(register const char *str, register const char *wildstr) +int wild_compare(register const char *str, register const char *wildstr, + pbool str_is_pattern) { - reg3 int flag; + char cmp; DBUG_ENTER("wild_compare"); while (*wildstr) @@ -35,33 +36,55 @@ int wild_compare(register const char *str, register const char *wildstr) while (*wildstr && *wildstr != wild_many && *wildstr != wild_one) { if (*wildstr == wild_prefix && wildstr[1]) + { wildstr++; - if (*wildstr++ != *str++) DBUG_RETURN(1); + if (str_is_pattern && *str++ != wild_prefix) + DBUG_RETURN(1); + } + if (*wildstr++ != *str++) + DBUG_RETURN(1); } - if (! *wildstr ) DBUG_RETURN (*str != 0); + if (! *wildstr ) + DBUG_RETURN(*str != 0); if (*wildstr++ == wild_one) { - if (! *str++) DBUG_RETURN (1); /* One char; skipp */ + if (! *str || (str_is_pattern && *str == wild_many)) + DBUG_RETURN(1); /* One char; skipp */ + if (*str++ == wild_prefix && str_is_pattern && *str) + str++; } else { /* Found '*' */ - if (!*wildstr) DBUG_RETURN(0); /* '*' as last char: OK */ - flag=(*wildstr != wild_many && *wildstr != wild_one); - do + while (str_is_pattern && *str == wild_many) + str++; + for (; *wildstr == wild_many || *wildstr == wild_one; wildstr++) + if (*wildstr == wild_many) + { + while (str_is_pattern && *str == wild_many) + str++; + } + else + { + if (str_is_pattern && *str == wild_prefix && str[1]) + str+=2; + else if (! *str++) + DBUG_RETURN (1); + } + if (!*wildstr) + DBUG_RETURN(0); /* '*' as last char: OK */ + if ((cmp= *wildstr) == wild_prefix && wildstr[1] && !str_is_pattern) + cmp=wildstr[1]; + for(;;str++) { - if (flag) - { - char cmp; - if ((cmp= *wildstr) == wild_prefix && wildstr[1]) - cmp=wildstr[1]; - while (*str && *str != cmp) - str++; - if (!*str) DBUG_RETURN (1); - } - if (wild_compare(str,wildstr) == 0) DBUG_RETURN (0); - } while (*str++ && wildstr[0] != wild_many); + while (*str && *str != cmp) + str++; + if (!*str) + DBUG_RETURN (1); + if (wild_compare(str,wildstr,str_is_pattern) == 0) + DBUG_RETURN (0); + } DBUG_RETURN(1); } } - DBUG_RETURN (*str != '\0'); + DBUG_RETURN (*str != 0); } /* wild_compare */ diff --git a/mysys/mf_wfile.c b/mysys/mf_wfile.c index 3c10de1f238..b964d7ee494 100644 --- a/mysys/mf_wfile.c +++ b/mysys/mf_wfile.c @@ -99,7 +99,7 @@ int wf_test(register WF_PACK *wf_pack, register const char *name) not_pos=wf_pack->not_pos; for (i=0 ; i < not_pos; i++) - if (wild_compare(name,wf_pack->wild[i]) == 0) + if (wild_compare(name,wf_pack->wild[i],0) == 0) goto found; if (i) DBUG_RETURN(1); /* No-match */ @@ -108,7 +108,7 @@ found: /* Test that it isn't in not-list */ for (i=not_pos ; i < wf_pack->wilds; i++) - if (wild_compare(name,wf_pack->wild[i]) == 0) + if (wild_compare(name,wf_pack->wild[i],0) == 0) DBUG_RETURN(1); DBUG_RETURN(0); } /* wf_test */ diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 9e4f35dd5e1..a69995e51a0 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -191,7 +191,7 @@ then echo "Installing all prepared tables" fi if ( - $pkgdatadir/mysql_create_system_tables $create_option $mdata $hostname $windows + $bindir/mysql_create_system_tables $create_option $mdata $hostname $windows if test -n "$fill_help_tables" then cat $fill_help_tables diff --git a/sql-common/client.c b/sql-common/client.c index 721164c8301..f9219e5418d 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -38,7 +38,28 @@ #include <my_global.h> #include "mysql.h" + +#ifdef EMBEDDED_LIBRARY + +#undef MYSQL_SERVER + +#ifndef MYSQL_CLIENT +#define MYSQL_CLIENT +#endif + +#define CLI_MYSQL_REAL_CONNECT cli_mysql_real_connect +#define CLI_MYSQL_CLOSE cli_mysql_close + +#undef net_flush +my_bool net_flush(NET *net); + +#else /*EMBEDDED_LIBRARY*/ +#define CLI_MYSQL_REAL_CONNECT mysql_real_connect +#define CLI_MYSQL_CLOSE mysql_close +#endif /*EMBEDDED_LIBRARY*/ + #if !defined(MYSQL_SERVER) && (defined(__WIN__) || defined(_WIN32) || defined(_WIN64)) + #include <winsock.h> #include <odbcinst.h> #endif /* !defined(MYSQL_SERVER) && (defined(__WIN__) ... */ @@ -526,6 +547,10 @@ net_safe_read(MYSQL *mysql) { DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d", vio_description(net->vio),len)); +#ifdef MYSQL_SERVER + if (socket_errno == SOCKET_EINTR) + return (packet_error); +#endif /*MYSQL_SERVER*/ end_server(mysql); net->last_errno=(net->last_errno == ER_NET_PACKET_TOO_LARGE ? CR_NET_PACKET_TOO_LARGE: @@ -572,8 +597,8 @@ void free_rows(MYSQL_DATA *cur) } } -my_bool -advanced_command(MYSQL *mysql, enum enum_server_command command, +static my_bool +cli_advanced_command(MYSQL *mysql, enum enum_server_command command, const char *header, ulong header_length, const char *arg, ulong arg_length, my_bool skip_check) { @@ -635,13 +660,6 @@ end: return result; } -my_bool -simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg, - ulong length, my_bool skip_check) -{ - return advanced_command(mysql, command, NullS, 0, arg, length, skip_check); -} - void free_old_query(MYSQL *mysql) { DBUG_ENTER("free_old_query"); @@ -759,8 +777,8 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd) return 0; } -static void mysql_read_default_options(struct st_mysql_options *options, - const char *filename,const char *group) +void mysql_read_default_options(struct st_mysql_options *options, + const char *filename,const char *group) { int argc; char *argv_buff[1],**argv; @@ -951,7 +969,7 @@ static void mysql_read_default_options(struct st_mysql_options *options, else the lengths are calculated from the offset between pointers. **************************************************************************/ -void fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count) +static void cli_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count) { ulong *prev_length; byte *start=0; @@ -972,7 +990,6 @@ void fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count) } } - /*************************************************************************** Change field rows to field structs ***************************************************************************/ @@ -1000,7 +1017,7 @@ unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, for (row=data->data; row ; row = row->next,field++) { uchar *pos; - fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7); + cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7); field->catalog = strdup_root(alloc,(char*) row->data[0]); field->db = strdup_root(alloc,(char*) row->data[1]); field->table = strdup_root(alloc,(char*) row->data[2]); @@ -1041,7 +1058,7 @@ unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, /* old protocol, for backward compatibility */ for (row=data->data; row ; row = row->next,field++) { - fetch_lengths(&lengths[0], row->data, default_value ? 6 : 5); + cli_fetch_lengths(&lengths[0], row->data, default_value ? 6 : 5); field->org_table= field->table= strdup_root(alloc,(char*) row->data[0]); field->name= strdup_root(alloc,(char*) row->data[1]); field->length= (uint) uint3korr(row->data[2]); @@ -1278,6 +1295,7 @@ mysql_init(MYSQL *mysql) #ifdef HAVE_SMEM mysql->options.shared_memory_base_name= (char*) def_shared_memory_base_name; #endif + mysql->options.methods_to_use= MYSQL_OPT_GUESS_CONNECTION; return mysql; } @@ -1409,10 +1427,23 @@ error: before calling mysql_real_connect ! */ -MYSQL * STDCALL -mysql_real_connect(MYSQL *mysql,const char *host, const char *user, - const char *passwd, const char *db, - uint port, const char *unix_socket,ulong client_flag) +static my_bool STDCALL cli_mysql_read_query_result(MYSQL *mysql); +static MYSQL_RES * STDCALL cli_mysql_store_result(MYSQL *mysql); +static MYSQL_RES * STDCALL cli_mysql_use_result(MYSQL *mysql); + +static MYSQL_METHODS client_methods= +{ + cli_mysql_read_query_result, + cli_advanced_command, + cli_mysql_store_result, + cli_mysql_use_result, + cli_fetch_lengths +}; + +MYSQL * STDCALL +CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, + const char *passwd, const char *db, + uint port, const char *unix_socket,ulong client_flag) { char buff[NAME_LEN+USERNAME_LENGTH+100],charset_name_buff[16]; char *end,*host_info,*charset_name; @@ -1441,6 +1472,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, user ? user : "(Null)")); /* Don't give sigpipe errors if the client doesn't want them */ + mysql->methods= &client_methods; set_sigpipe(mysql); net->vio = 0; /* If something goes wrong */ mysql->client_flag=0; /* For handshake */ @@ -2112,8 +2144,7 @@ static void mysql_close_free(MYSQL *mysql) } -void STDCALL -mysql_close(MYSQL *mysql) +void STDCALL CLI_MYSQL_CLOSE(MYSQL *mysql) { DBUG_ENTER("mysql_close"); if (mysql) /* Some simple safety */ @@ -2165,8 +2196,7 @@ mysql_close(MYSQL *mysql) DBUG_VOID_RETURN; } - -my_bool STDCALL mysql_read_query_result(MYSQL *mysql) +static my_bool STDCALL cli_mysql_read_query_result(MYSQL *mysql) { uchar *pos; ulong field_count; @@ -2283,8 +2313,7 @@ mysql_real_query(MYSQL *mysql, const char *query, ulong length) mysql_data_seek may be used. **************************************************************************/ -MYSQL_RES * STDCALL -mysql_store_result(MYSQL *mysql) +static MYSQL_RES * STDCALL cli_mysql_store_result(MYSQL *mysql) { MYSQL_RES *result; DBUG_ENTER("mysql_store_result"); @@ -2310,6 +2339,7 @@ mysql_store_result(MYSQL *mysql) strmov(mysql->net.last_error, ER(mysql->net.last_errno)); DBUG_RETURN(0); } + result->methods= mysql->methods; result->eof=1; /* Marker for buffered */ result->lengths=(ulong*) (result+1); if (!(result->data=read_rows(mysql,mysql->fields,mysql->field_count))) @@ -2339,8 +2369,7 @@ mysql_store_result(MYSQL *mysql) have to wait for the client (and will not wait more than 30 sec/packet). **************************************************************************/ -MYSQL_RES * STDCALL -mysql_use_result(MYSQL *mysql) +static MYSQL_RES * STDCALL cli_mysql_use_result(MYSQL *mysql) { MYSQL_RES *result; DBUG_ENTER("mysql_use_result"); @@ -2361,6 +2390,7 @@ mysql_use_result(MYSQL *mysql) MYF(MY_WME | MY_ZEROFILL)))) DBUG_RETURN(0); result->lengths=(ulong*) (result+1); + result->methods= mysql->methods; if (!(result->row=(MYSQL_ROW) my_malloc(sizeof(result->row[0])*(mysql->field_count+1), MYF(MY_WME)))) { /* Ptrs: to one row */ @@ -2477,6 +2507,10 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const char *arg) my_free(mysql->options.shared_memory_base_name,MYF(MY_ALLOW_ZERO_PTR)); mysql->options.shared_memory_base_name=my_strdup(arg,MYF(MY_WME)); #endif + case MYSQL_OPT_USE_REMOTE_CONNECTION: + case MYSQL_OPT_USE_EMBEDDED_CONNECTION: + case MYSQL_OPT_GUESS_CONNECTION: + mysql->options.methods_to_use= option; break; default: DBUG_RETURN(1); diff --git a/sql-common/pack.c b/sql-common/pack.c index e363d600e20..e31e596ae7a 100644 --- a/sql-common/pack.c +++ b/sql-common/pack.c @@ -1,3 +1,19 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #include <my_global.h> #include <mysql_com.h> #include <mysql.h> @@ -62,3 +78,30 @@ my_ulonglong net_field_length_ll(uchar **packet) #endif } +char * +net_store_length(char *pkg, ulonglong length) +{ + uchar *packet=(uchar*) pkg; + if (length < LL(251)) + { + *packet=(uchar) length; + return (char*) packet+1; + } + /* 251 is reserved for NULL */ + if (length < LL(65536)) + { + *packet++=252; + int2store(packet,(uint) length); + return (char*) packet+2; + } + if (length < LL(16777216)) + { + *packet++=253; + int3store(packet,(ulong) length); + return (char*) packet+3; + } + *packet++=254; + int8store(packet,length); + return (char*) packet+8; +} + diff --git a/sql/client_settings.h b/sql/client_settings.h index efae3f18a8b..b357e52ec9d 100644 --- a/sql/client_settings.h +++ b/sql/client_settings.h @@ -31,3 +31,4 @@ #define mysql_rpl_probe(mysql) 0 #undef HAVE_SMEM #undef _CUSTOMCONFIG_ + diff --git a/sql/field.h b/sql/field.h index 5df7d554c35..79c45a99a43 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1132,7 +1132,7 @@ bool test_if_int(const char *str, int length, const char *int_end, */ #define FIELDFLAG_DECIMAL 1 -#define FIELDFLAG_BINARY 1 // Shares same flag +#define FIELDFLAG_BINARY 1 // Shares same flag #define FIELDFLAG_NUMBER 2 #define FIELDFLAG_ZEROFILL 4 #define FIELDFLAG_PACK 120 // Bits used for packing @@ -1163,7 +1163,8 @@ bool test_if_int(const char *str, int length, const char *int_end, #define f_packtype(x) (((x) >> FIELDFLAG_PACK_SHIFT) & 15) #define f_decimals(x) ((uint8) (((x) >> FIELDFLAG_DEC_SHIFT) & FIELDFLAG_MAX_DEC)) #define f_is_alpha(x) (!f_is_num(x)) -#define f_is_enum(x) ((x) & FIELDFLAG_INTERVAL) +#define f_is_binary(x) ((x) & FIELDFLAG_BINARY) // 4.0- compatibility +#define f_is_enum(x) ((x) & FIELDFLAG_INTERVAL) #define f_is_bitfield(x) ((x) & FIELDFLAG_BITFIELD) #define f_is_blob(x) (((x) & (FIELDFLAG_BLOB | FIELDFLAG_NUMBER)) == FIELDFLAG_BLOB) #define f_is_geom(x) ((x) & FIELDFLAG_GEOM) diff --git a/sql/field_conv.cc b/sql/field_conv.cc index 144e6d7e74a..44e30afb880 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -172,7 +172,10 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions) } field->reset(); if (field == field->table->next_number_field) + { + field->table->auto_increment_field_not_null= false; return 0; // field is set in handler.cc + } if (current_thd->count_cuted_fields) { field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN,ER_WARN_NULL_TO_NOTNULL); diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index 1c6f124aac7..ae46bcc9ea5 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -89,6 +89,7 @@ static struct my_option my_long_options[] = 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"version", 'V', "Output version information and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; struct hash_lex_struct @@ -101,8 +102,8 @@ struct hash_lex_struct }; int ithis; }; - -hash_lex_struct *get_hash_struct_by_len(hash_lex_struct **root_by_len, + +hash_lex_struct *get_hash_struct_by_len(hash_lex_struct **root_by_len, int len, int *max_len) { if (*max_len<len){ diff --git a/sql/handler.cc b/sql/handler.cc index 1063066f588..2bafa41e542 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -702,11 +702,15 @@ void handler::update_auto_increment() longlong nr; THD *thd; DBUG_ENTER("update_auto_increment"); - if (table->next_number_field->val_int() != 0) + if (table->next_number_field->val_int() != 0 || + table->auto_increment_field_not_null && + current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO) { + table->auto_increment_field_not_null= false; auto_increment_column_changed=0; DBUG_VOID_RETURN; } + table->auto_increment_field_not_null= false; thd=current_thd; if ((nr=thd->next_insert_id)) thd->next_insert_id=0; // Clear after use diff --git a/sql/item.cc b/sql/item.cc index 072dec4e6a6..48f9dfea4e1 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -49,15 +49,19 @@ Item::Item(): THD *thd= current_thd; next= thd->free_list; // Put in free list thd->free_list= this; - loop_id= 0; /* Item constructor can be called during execution other tnen SQL_COM command => we should check thd->lex.current_select on zero (thd->lex can be uninitialised) */ - if (thd->lex.current_select && - thd->lex.current_select->parsing_place == SELECT_LEX_NODE::SELECT_LIST) - thd->lex.current_select->select_items++; + if (thd->lex.current_select) + { + SELECT_LEX_NODE::enum_parsing_place place= + thd->lex.current_select->parsing_place; + if (place == SELECT_LEX_NODE::SELECT_LIST || + place == SELECT_LEX_NODE::IN_HAVING) + thd->lex.current_select->select_n_having_items++; + } } /* @@ -66,7 +70,6 @@ Item::Item(): tables */ Item::Item(THD *thd, Item &item): - loop_id(0), str_value(item.str_value), name(item.name), max_length(item.max_length), @@ -530,6 +533,11 @@ void Item_param::set_longdata(const char *str, ulong length) int Item_param::save_in_field(Field *field, bool no_conversions) { + THD *thd= current_thd; + + if (thd->command == COM_PREPARE) + return -1; + if (null_value) return (int) set_field_to_null(field); @@ -862,7 +870,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) sl= sl->outer_select()) { table_list= (last= sl)->get_table_list(); - if (sl->insert_select && table_list) + if (sl->resolve_mode == SELECT_LEX::INSERT_MODE && table_list) { // it is primary INSERT st_select_lex => skip first table resolving table_list= table_list->next; @@ -871,7 +879,8 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) table_list, &where, 0)) != not_found_field) break; - if ((refer= find_item_in_list(this, sl->item_list, &counter, + if (sl->resolve_mode == SELECT_LEX::SELECT_MODE && + (refer= find_item_in_list(this, sl->item_list, &counter, REPORT_EXCEPT_NOT_FOUND)) != (Item **) not_found_item) break; @@ -1348,13 +1357,15 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) SELECT_LEX *last=0; for ( ; sl ; sl= sl->outer_select()) { - if ((ref= find_item_in_list(this, (last= sl)->item_list, + last= sl; + if (sl->resolve_mode == SELECT_LEX::SELECT_MODE && + (ref= find_item_in_list(this, sl->item_list, &counter, REPORT_EXCEPT_NOT_FOUND)) != (Item **)not_found_item) break; table_list= sl->get_table_list(); - if (sl->insert_select && table_list) + if (sl->resolve_mode == SELECT_LEX::INSERT_MODE && table_list) { // it is primary INSERT st_select_lex => skip first table resolving table_list= table_list->next; @@ -1442,7 +1453,7 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) max_length= (*ref)->max_length; maybe_null= (*ref)->maybe_null; decimals= (*ref)->decimals; - set_charset((*ref)->charset()); + collation.set((*ref)->collation); with_sum_func= (*ref)->with_sum_func; fixed= 1; diff --git a/sql/item.h b/sql/item.h index 57061221878..9df6532a637 100644 --- a/sql/item.h +++ b/sql/item.h @@ -83,7 +83,6 @@ public: }; class Item { - uint loop_id; /* Used to find selfrefering loops */ Item(const Item &); /* Prevent use of these */ void operator=(Item &); public: @@ -374,7 +373,7 @@ public: Item_uint(const char *str_arg, uint length) : Item_int(str_arg, (longlong) strtoull(str_arg,(char**) 0,10), length) {} Item_uint(uint32 i) :Item_int((longlong) i, 10) {} - double val() { return ulonglong2double(value); } + double val() { return ulonglong2double((ulonglong)value); } String *val_str(String*); Item *new_item() { return new Item_uint(name,max_length); } bool fix_fields(THD *thd, struct st_table_list *list, Item **item) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 758733aaa2c..d992b4d69d0 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -24,6 +24,32 @@ #include "mysql_priv.h" #include <m_ctype.h> +static Item_result item_store_type(Item_result a,Item_result b) +{ + if (a == STRING_RESULT || b == STRING_RESULT) + return STRING_RESULT; + else if (a == REAL_RESULT || b == REAL_RESULT) + return REAL_RESULT; + else + return INT_RESULT; +} + +static void agg_result_type(Item_result *type, Item **items, uint nitems) +{ + uint i; + type[0]= items[0]->result_type(); + for (i=1 ; i < nitems ; i++) + type[0]= item_store_type(type[0], items[i]->result_type()); +} + +static void agg_cmp_type(Item_result *type, Item **items, uint nitems) +{ + uint i; + type[0]= items[0]->result_type(); + for (i=1 ; i < nitems ; i++) + type[0]= item_cmp_type(type[0], items[i]->result_type()); +} + static void my_coll_agg_error(DTCollation &c1, DTCollation &c2, const char *fname) { my_error(ER_CANT_AGGREGATE_2COLLATIONS,MYF(0), @@ -223,7 +249,8 @@ int Arg_comparator::set_compare_func(Item_bool_func2 *item, Item_result type) We must set cmp_charset here as we may be called from for an automatic generated item, like in natural join */ - if (cmp_collation.set((*a)->collation, (*b)->collation)) + if (cmp_collation.set((*a)->collation, (*b)->collation) || + cmp_collation.derivation == DERIVATION_NONE) { my_coll_agg_error((*a)->collation, (*b)->collation, owner->func_name()); return 1; @@ -556,10 +583,7 @@ void Item_func_between::fix_length_and_dec() */ if (!args[0] || !args[1] || !args[2]) return; - cmp_type=item_cmp_type(args[0]->result_type(), - item_cmp_type(args[1]->result_type(), - args[2]->result_type())); - + agg_cmp_type(&cmp_type, args, 3); if (cmp_type == STRING_RESULT && agg_arg_collations_for_comparison(cmp_collation, args, 3)) return; @@ -650,28 +674,17 @@ longlong Item_func_between::val_int() return 0; } -static Item_result item_store_type(Item_result a,Item_result b) -{ - if (a == STRING_RESULT || b == STRING_RESULT) - return STRING_RESULT; - else if (a == REAL_RESULT || b == REAL_RESULT) - return REAL_RESULT; - else - return INT_RESULT; -} - void Item_func_ifnull::fix_length_and_dec() { maybe_null=args[1]->maybe_null; max_length=max(args[0]->max_length,args[1]->max_length); decimals=max(args[0]->decimals,args[1]->decimals); - if ((cached_result_type=item_store_type(args[0]->result_type(), - args[1]->result_type())) != - REAL_RESULT) - decimals= 0; + agg_result_type(&cached_result_type, args, 2); if (cached_result_type == STRING_RESULT) agg_arg_collations(collation, args, arg_count); + else if (cached_result_type != REAL_RESULT) + decimals= 0; } @@ -744,19 +757,18 @@ Item_func_if::fix_length_and_dec() cached_result_type= arg1_type; set_charset(args[1]->charset()); } - else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT) - { - cached_result_type = STRING_RESULT; - if (agg_arg_collations(collation, args+1, 2)) - return; - } else { - set_charset(&my_charset_bin); // Number - if (arg1_type == REAL_RESULT || arg2_type == REAL_RESULT) - cached_result_type = REAL_RESULT; + agg_result_type(&cached_result_type, args+1, 2); + if (cached_result_type == STRING_RESULT) + { + if (agg_arg_collations(collation, args+1, 2)) + return; + } else - cached_result_type=arg1_type; // Should be INT_RESULT + { + set_charset(&my_charset_bin); // Number + } } } @@ -800,7 +812,7 @@ Item_func_nullif::fix_length_and_dec() { max_length=args[0]->max_length; decimals=args[0]->decimals; - cached_result_type=args[0]->result_type(); + agg_result_type(&cached_result_type, args, 2); } } @@ -863,64 +875,60 @@ Item *Item_func_case::find_item(String *str) String *first_expr_str,*tmp; longlong first_expr_int; double first_expr_real; - bool int_used, real_used,str_used; - int_used=real_used=str_used=0; - + /* These will be initialized later */ LINT_INIT(first_expr_str); LINT_INIT(first_expr_int); LINT_INIT(first_expr_real); + if (first_expr_num != -1) + { + switch (cmp_type) + { + case STRING_RESULT: + // We can't use 'str' here as this may be overwritten + if (!(first_expr_str= args[first_expr_num]->val_str(&str_value))) + return else_expr_num != -1 ? args[else_expr_num] : 0; // Impossible + break; + case INT_RESULT: + first_expr_int= args[first_expr_num]->val_int(); + if (args[first_expr_num]->null_value) + return else_expr_num != -1 ? args[else_expr_num] : 0; + break; + case REAL_RESULT: + first_expr_real= args[first_expr_num]->val(); + if (args[first_expr_num]->null_value) + return else_expr_num != -1 ? args[else_expr_num] : 0; + break; + case ROW_RESULT: + default: + // This case should never be choosen + DBUG_ASSERT(0); + break; + } + } + // Compare every WHEN argument with it and return the first match - for (uint i=0 ; i < arg_count ; i+=2) + for (uint i=0 ; i < ncases ; i+=2) { - if (!first_expr) + if (first_expr_num == -1) { - // No expression between CASE and first WHEN + // No expression between CASE and the first WHEN if (args[i]->val_int()) return args[i+1]; continue; } - switch (args[i]->result_type()) { + switch (cmp_type) { case STRING_RESULT: - if (!str_used) - { - str_used=1; - // We can't use 'str' here as this may be overwritten - if (!(first_expr_str= first_expr->val_str(&str_value))) - return else_expr; // Impossible - } if ((tmp=args[i]->val_str(str))) // If not null - { - /* QQ: COERCIBILITY */ - if (first_expr_is_binary || (args[i]->charset()->state & MY_CS_BINSORT)) - { - if (sortcmp(tmp,first_expr_str,&my_charset_bin)==0) - return args[i+1]; - } - else if (sortcmp(tmp,first_expr_str,tmp->charset())==0) + if (sortcmp(tmp,first_expr_str,cmp_collation.collation)==0) return args[i+1]; - } break; case INT_RESULT: - if (!int_used) - { - int_used=1; - first_expr_int= first_expr->val_int(); - if (first_expr->null_value) - return else_expr; - } if (args[i]->val_int()==first_expr_int && !args[i]->null_value) return args[i+1]; break; case REAL_RESULT: - if (!real_used) - { - real_used=1; - first_expr_real= first_expr->val(); - if (first_expr->null_value) - return else_expr; - } if (args[i]->val()==first_expr_real && !args[i]->null_value) return args[i+1]; break; @@ -932,7 +940,7 @@ Item *Item_func_case::find_item(String *str) } } // No, WHEN clauses all missed, return ELSE expression - return else_expr; + return else_expr_num != -1 ? args[else_expr_num] : 0; } @@ -988,104 +996,57 @@ double Item_func_case::val() return res; } - -bool -Item_func_case::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) -{ - if (first_expr && (first_expr->fix_fields(thd, tables, &first_expr) || - first_expr->check_cols(1)) || - else_expr && (else_expr->fix_fields(thd, tables, &else_expr) || - else_expr->check_cols(1))) - return 1; - if (Item_func::fix_fields(thd, tables, ref)) - return 1; - if (first_expr) - { - used_tables_cache|=(first_expr)->used_tables(); - const_item_cache&= (first_expr)->const_item(); - with_sum_func= with_sum_func || (first_expr)->with_sum_func; - first_expr_is_binary= first_expr->charset()->state & MY_CS_BINSORT; - } - if (else_expr) - { - used_tables_cache|=(else_expr)->used_tables(); - const_item_cache&= (else_expr)->const_item(); - with_sum_func= with_sum_func || (else_expr)->with_sum_func; - } - if (!else_expr || else_expr->maybe_null) - maybe_null=1; // The result may be NULL - return 0; -} - - -void Item_func_case::split_sum_func(Item **ref_pointer_array, - List<Item> &fields) -{ - if (first_expr) - { - if (first_expr->with_sum_func && first_expr->type() != SUM_FUNC_ITEM) - first_expr->split_sum_func(ref_pointer_array, fields); - else if (first_expr->used_tables() || first_expr->type() == SUM_FUNC_ITEM) - { - uint el= fields.elements; - fields.push_front(first_expr); - ref_pointer_array[el]= first_expr; - first_expr= new Item_ref(ref_pointer_array + el, 0, first_expr->name); - } - } - if (else_expr) - { - if (else_expr->with_sum_func && else_expr->type() != SUM_FUNC_ITEM) - else_expr->split_sum_func(ref_pointer_array, fields); - else if (else_expr->used_tables() || else_expr->type() == SUM_FUNC_ITEM) - { - uint el= fields.elements; - fields.push_front(else_expr); - ref_pointer_array[el]= else_expr; - else_expr= new Item_ref(ref_pointer_array + el, 0, else_expr->name); - } - } - Item_func::split_sum_func(ref_pointer_array, fields); -} - - -void Item_func_case::set_outer_resolving() -{ - first_expr->set_outer_resolving(); - else_expr->set_outer_resolving(); - Item_func::set_outer_resolving(); -} - -void Item_func_case::update_used_tables() -{ - Item_func::update_used_tables(); - if (first_expr) - { - used_tables_cache|=(first_expr)->used_tables(); - const_item_cache&= (first_expr)->const_item(); - } - if (else_expr) - { - used_tables_cache|=(else_expr)->used_tables(); - const_item_cache&= (else_expr)->const_item(); - } -} - - void Item_func_case::fix_length_and_dec() { + Item **agg; + uint nagg; + + if (!(agg= (Item**) sql_alloc(sizeof(Item*)*(ncases+1)))) + return; + + // Aggregate all THEN and ELSE expression types + // and collations when string result + + for (nagg= 0 ; nagg < ncases/2 ; nagg++) + agg[nagg]= args[nagg*2+1]; + + if (else_expr_num != -1) + agg[nagg++]= args[else_expr_num]; + + agg_result_type(&cached_result_type, agg, nagg); + if ((cached_result_type == STRING_RESULT) && + agg_arg_collations(collation, agg, nagg)) + return; + + + // Aggregate first expression and all THEN expression types + // and collations when string comparison + if (first_expr_num != -1) + { + agg[0]= args[first_expr_num]; + for (nagg= 0; nagg < ncases/2 ; nagg++) + agg[nagg+1]= args[nagg*2]; + nagg++; + agg_cmp_type(&cmp_type, agg, nagg); + if ((cmp_type == STRING_RESULT) && + agg_arg_collations_for_comparison(cmp_collation, agg, nagg)) + return; + } + + if (!else_expr_num != -1 || args[else_expr_num]->maybe_null) + maybe_null=1; + max_length=0; decimals=0; - cached_result_type = args[1]->result_type(); - for (uint i=0 ; i < arg_count ; i+=2) + for (uint i=0 ; i < ncases ; i+=2) { set_if_bigger(max_length,args[i+1]->max_length); set_if_bigger(decimals,args[i+1]->decimals); } - if (else_expr != NULL) + if (else_expr_num != -1) { - set_if_bigger(max_length,else_expr->max_length); - set_if_bigger(decimals,else_expr->decimals); + set_if_bigger(max_length,args[else_expr_num]->max_length); + set_if_bigger(decimals,args[else_expr_num]->decimals); } } @@ -1144,13 +1105,11 @@ void Item_func_coalesce::fix_length_and_dec() { max_length= 0; decimals= 0; - cached_result_type = args[0]->result_type(); + agg_result_type(&cached_result_type, args, arg_count); for (uint i=0 ; i < arg_count ; i++) { set_if_bigger(max_length,args[i]->max_length); set_if_bigger(decimals,args[i]->decimals); - cached_result_type=item_store_type(cached_result_type, - args[i]->result_type()); } if (cached_result_type == STRING_RESULT) agg_arg_collations(collation, args, arg_count); @@ -1440,7 +1399,8 @@ void Item_func_in::fix_length_and_dec() Item **arg, **arg_end; uint const_itm= 1; - if ((args[0]->result_type() == STRING_RESULT) && + agg_cmp_type(&cmp_type, args, arg_count); + if ((cmp_type == STRING_RESULT) && (agg_arg_collations_for_comparison(cmp_collation, args, arg_count))) return; @@ -1453,7 +1413,7 @@ void Item_func_in::fix_length_and_dec() */ if (const_itm && !nulls_in_row()) { - switch (args[0]->result_type()) { + switch (cmp_type) { case STRING_RESULT: uint i; array=new in_string(arg_count-1,(qsort2_cmp) srtcmp_in, @@ -1487,7 +1447,7 @@ void Item_func_in::fix_length_and_dec() else { in_item= cmp_item::get_comparator(args[0]); - if (args[0]->result_type() == STRING_RESULT) + if (cmp_type == STRING_RESULT) in_item->cmp_charset= cmp_collation.collation; } maybe_null= args[0]->maybe_null; diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 0d20382eb92..b29657b95aa 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -348,27 +348,38 @@ public: class Item_func_case :public Item_func { - Item * first_expr, *else_expr; + int first_expr_num, else_expr_num; enum Item_result cached_result_type; String tmp_value; - bool first_expr_is_binary; + uint ncases; + Item_result cmp_type; + DTCollation cmp_collation; public: Item_func_case(List<Item> &list, Item *first_expr_arg, Item *else_expr_arg) - :Item_func(list), first_expr(first_expr_arg), else_expr(else_expr_arg), + :Item_func(), first_expr_num(-1), else_expr_num(-1), cached_result_type(INT_RESULT) - {} + { + ncases= list.elements; + if (first_expr_arg) + { + first_expr_num= list.elements; + list.push_back(first_expr_arg); + } + if (else_expr_arg) + { + else_expr_num= list.elements; + list.push_back(else_expr_arg); + } + set_arguments(list); + } double val(); longlong val_int(); String *val_str(String *); void fix_length_and_dec(); - void update_used_tables(); enum Item_result result_type () const { return cached_result_type; } const char *func_name() const { return "case"; } void print(String *str); - bool fix_fields(THD *thd, struct st_table_list *tlist, Item **ref); - void split_sum_func(Item **ref_pointer_array, List<Item> &fields); Item *find_item(String *str); - void set_outer_resolving(); }; @@ -600,6 +611,7 @@ public: class Item_func_in :public Item_int_func { + Item_result cmp_type; in_vector *array; cmp_item *in_item; bool have_null; diff --git a/sql/item_create.cc b/sql/item_create.cc index eaa27c1009d..e18d1cfa189 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -470,7 +470,7 @@ Item *create_load_file(Item* a) } -Item *create_func_cast(Item *a, Item_cast cast_type, CHARSET_INFO *cs) +Item *create_func_cast(Item *a, Cast_target cast_type, CHARSET_INFO *cs) { Item *res; LINT_INIT(res); diff --git a/sql/item_create.h b/sql/item_create.h index 32e452c15dd..1326077b096 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -28,7 +28,7 @@ Item *create_func_bit_length(Item* a); Item *create_func_coercibility(Item* a); Item *create_func_ceiling(Item* a); Item *create_func_char_length(Item* a); -Item *create_func_cast(Item *a, Item_cast cast_type, CHARSET_INFO *cs); +Item *create_func_cast(Item *a, Cast_target cast_type, CHARSET_INFO *cs); Item *create_func_connection_id(void); Item *create_func_conv(Item* a, Item *b, Item *c); Item *create_func_cos(Item* a); diff --git a/sql/item_func.cc b/sql/item_func.cc index 7e236225067..9ecc062d645 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -102,10 +102,9 @@ eval_const_cond(COND *cond) return ((Item_func*) cond)->val_int() ? TRUE : FALSE; } - -Item_func::Item_func(List<Item> &list) - :allowed_arg_cols(1) +void Item_func::set_arguments(List<Item> &list) { + allowed_arg_cols= 1; arg_count=list.elements; if ((args=(Item**) sql_alloc(sizeof(Item*)*arg_count))) { @@ -122,6 +121,12 @@ Item_func::Item_func(List<Item> &list) list.empty(); // Fields are used } +Item_func::Item_func(List<Item> &list) + :allowed_arg_cols(1) +{ + set_arguments(list); +} + /* Resolve references to table column for a function and it's argument @@ -592,7 +597,8 @@ void Item_func_neg::fix_length_and_dec() { decimals=args[0]->decimals; max_length=args[0]->max_length; - hybrid_type= args[0]->result_type() == INT_RESULT ? INT_RESULT : REAL_RESULT; + hybrid_type= args[0]->result_type() == INT_RESULT && !args[0]->unsigned_flag ? + INT_RESULT : REAL_RESULT; } double Item_func_abs::val() diff --git a/sql/item_func.h b/sql/item_func.h index a0969fc6b9a..56ee0379cd5 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -115,6 +115,7 @@ public: virtual const char *func_name() const { return "?"; } virtual bool const_item() const { return const_item_cache; } inline Item **arguments() const { return args; } + void set_arguments(List<Item> &list); inline uint argument_count() const { return arg_count; } inline void remove_arguments() { arg_count=0; } virtual void split_sum_func(Item **ref_pointer_array, List<Item> &fields); @@ -1065,7 +1066,7 @@ public: /* For type casts */ -enum Item_cast +enum Cast_target { ITEM_CAST_BINARY, ITEM_CAST_SIGNED_INT, ITEM_CAST_UNSIGNED_INT, ITEM_CAST_DATE, ITEM_CAST_TIME, ITEM_CAST_DATETIME, ITEM_CAST_CHAR diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 4e35e90b429..b4f4df6968d 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2206,7 +2206,13 @@ void Item_func_set_collation::fix_length_and_dec() set_collation= get_charset_by_csname(args[0]->charset()->csname, MY_CS_BINSORT,MYF(0)); else - set_collation= get_charset_by_name(colname,MYF(0)); + { + if (!(set_collation= get_charset_by_name(colname,MYF(0)))) + { + my_error(ER_UNKNOWN_COLLATION, MYF(0), colname); + return; + } + } if (!set_collation || !my_charset_same(args[0]->charset(),set_collation)) { diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index cd78edfee7b..32edaaca0fd 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -508,7 +508,7 @@ void Item_in_subselect::single_value_transformer(THD *thd, { sl->item_list.push_back(item); setup_ref_array(thd, &sl->ref_pointer_array, - 1 + sl->select_items + + 1 + sl->select_n_having_items + sl->order_list.elements + sl->group_list.elements); // To prevent crash on Item_ref_null_helper destruction in case of error sl->ref_pointer_array[0]= 0; @@ -759,6 +759,7 @@ static Item_result set_row(SELECT_LEX *select_lex, Item * item, if (!(row[i]= Item_cache::get_cache(res_type))) return STRING_RESULT; // we should return something row[i]->set_len_n_dec(sel_item->max_length, sel_item->decimals); + row[i]->collation.set(sel_item->collation); } } if (select_lex->item_list.elements > 1) @@ -770,6 +771,7 @@ void subselect_single_select_engine::fix_length_and_dec(Item_cache **row) { DBUG_ASSERT(row || select_lex->item_list.elements==1); res_type= set_row(select_lex, item, row, &maybe_null); + item->collation.set(row[0]->collation); if (cols() != 1) maybe_null= 0; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 8d3d0de466a..aa146926eb5 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -199,7 +199,7 @@ Item_sum_hybrid::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) decimals=item->decimals; maybe_null=item->maybe_null; unsigned_flag=item->unsigned_flag; - set_charset(item->charset()); + collation.set(item->collation); result_field=0; null_value=1; fix_length_and_dec(); diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index cdffa8c7f50..cc9199c3c13 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -221,6 +221,7 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset; #define MODE_MYSQL323 32768 #define MODE_MYSQL40 65536 #define MODE_ANSI (MODE_MYSQL40*2) +#define MODE_NO_AUTO_VALUE_ON_ZERO (MODE_ANSI*2) #define RAID_BLOCK_SIZE 1024 diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 09203d127c7..59320e6bb48 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -212,7 +212,7 @@ const char *sql_mode_names[] = "?", "ONLY_FULL_GROUP_BY", "NO_UNSIGNED_SUBTRACTION", "POSTGRESQL", "ORACLE", "MSSQL", "DB2", "SAPDB", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "MYSQL323", "MYSQL40", "ANSI", - NullS + "NO_AUTO_VALUE_ON_ZERO", NullS }; TYPELIB sql_mode_typelib= { array_elements(sql_mode_names)-1,"", sql_mode_names }; @@ -225,6 +225,13 @@ const char *localhost= "localhost", *delayed_user= "DELAYED"; #endif bool opt_large_files= sizeof(my_off_t) > 4; + +/* + Used with --help for detailed option +*/ +bool opt_help= 0; +bool opt_verbose= 0; + arg_cmp_func Arg_comparator::comparator_matrix[4][2] = {{&Arg_comparator::compare_string, &Arg_comparator::compare_e_string}, {&Arg_comparator::compare_real, &Arg_comparator::compare_e_real}, @@ -3644,8 +3651,12 @@ Disable with --skip-bdb (will save memory).", "Percentage of dirty pages allowed in bufferpool.", (gptr*) &srv_max_buf_pool_modified_pct, (gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0}, #endif /* End HAVE_INNOBASE_DB */ - {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, - 0, 0, 0, 0, 0}, + {"help", '?', "Display this help and exit.", + (gptr*) &opt_help, (gptr*) &opt_help, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, + 0, 0}, + {"verbose", 'v', "Used with --help option for detailed help", + (gptr*) &opt_verbose, (gptr*) &opt_verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, + 0, 0}, {"init-file", OPT_INIT_FILE, "Read SQL commands from this file at startup.", (gptr*) &opt_init_file, (gptr*) &opt_init_file, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, @@ -3981,8 +3992,6 @@ replicating a LOAD DATA INFILE command.", 0, 0, 0, 0, 0, 0}, {"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"version", 'v', "Synonym for option -V.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, - 0, 0, 0, 0}, {"log-warnings", 'W', "Log some not critical warnings to the log file.", (gptr*) &global_system_variables.log_warnings, (gptr*) &max_system_variables.log_warnings, 0, GET_BOOL, NO_ARG, 0, 0, 0, @@ -4593,6 +4602,10 @@ and you are welcome to modify and redistribute it under the GPL license\n\ Starts the MySQL server\n"); printf("Usage: %s [OPTIONS]\n", my_progname); + if (!opt_verbose) + puts("\nFor more help options (several pages), use mysqld --verbose --help\n"); + else + { #ifdef __WIN__ puts("NT and Win32 specific options:\n\ --install Install the default service (NT)\n\ @@ -4616,7 +4629,8 @@ Starts the MySQL server\n"); puts("\n\ To see what values a running MySQL server is using, type\n\ -'mysqladmin variables' instead of 'mysqld --help'."); +'mysqladmin variables' instead of 'mysqld --verbose --help'.\n"); + } } @@ -4891,14 +4905,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), break; #endif #include <sslopt-case.h> - case 'v': case 'V': print_version(); exit(0); - case 'I': - case '?': - usage(); - exit(0); case 'T': test_flags= argument ? (uint) atoi(argument) : 0; test_flags&= ~TEST_NO_THREADS; @@ -5374,6 +5383,11 @@ static void get_options(int argc,char **argv) exit(ho_error); } + if (opt_help) + { + usage(); + exit(0); + } #if defined(HAVE_BROKEN_REALPATH) my_use_symdir=0; my_disable_symlinks=1; diff --git a/sql/net_serv.cc b/sql/net_serv.cc index fd5e4f1d71a..9e9eaf9eea1 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -30,7 +30,10 @@ 3 byte length & 1 byte package-number. */ -#ifndef EMBEDDED_LIBRARY +/* + HFTODO this must be hidden if we don't want client capabilities in + embedded library + */ #ifdef __WIN__ #include <winsock.h> #endif @@ -46,6 +49,17 @@ #include <signal.h> #include <errno.h> +#ifdef EMBEDDED_LIBRARY + +#undef net_flush + +extern "C" { +my_bool net_flush(NET *net); +} + +#endif /*EMBEDDED_LIBRARY */ + + /* The following handles the differences when this is linked between the client and the server. @@ -959,5 +973,3 @@ my_net_read(NET *net) return len; } -#endif /* #ifndef EMBEDDED_LIBRARY */ - diff --git a/sql/protocol.cc b/sql/protocol.cc index 1b9256c7723..e90aa7585e2 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -83,6 +83,7 @@ void send_error(THD *thd, uint sql_errno, const char *err) #ifdef EMBEDDED_LIBRARY net->last_errno= sql_errno; strmake(net->last_error, err, sizeof(net->last_error)-1); + strmov(net->sqlstate, mysql_errno_to_sqlstate(sql_errno)); #else if (net->vio == 0) @@ -230,12 +231,12 @@ net_printf(THD *thd, uint errcode, ...) #else net->last_errno= errcode; strmake(net->last_error, text_pos, length); + strmake(net->sqlstate, mysql_errno_to_sqlstate(errcode), SQLSTATE_LENGTH); #endif thd->is_fatal_error=0; // Error message is given DBUG_VOID_RETURN; } - /* Return ok to the client. @@ -350,40 +351,6 @@ send_eof(THD *thd, bool no_flush) } #endif /* EMBEDDED_LIBRARY */ - -/**************************************************************************** - Store a field length in logical packet - This is used to code the string length for normal protocol -****************************************************************************/ - -char * -net_store_length(char *pkg, ulonglong length) -{ - uchar *packet=(uchar*) pkg; - if (length < LL(251)) - { - *packet=(uchar) length; - return (char*) packet+1; - } - /* 251 is reserved for NULL */ - if (length < LL(65536)) - { - *packet++=252; - int2store(packet,(uint) length); - return (char*) packet+2; - } - if (length < LL(16777216)) - { - *packet++=253; - int3store(packet,(ulong) length); - return (char*) packet+3; - } - *packet++=254; - int8store(packet,length); - return (char*) packet+8; -} - - /* Faster net_store_length when we know length is a 32 bit integer */ diff --git a/sql/set_var.cc b/sql/set_var.cc index 33dcd4b7e29..e70dd1c3b85 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1247,7 +1247,7 @@ bool sys_var_collation::check(THD *thd, set_var *var) if (!(tmp=get_charset_by_name(res->c_ptr(),MYF(0)))) { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr()); + my_error(ER_UNKNOWN_COLLATION, MYF(0), res->c_ptr()); return 1; } var->save_result.charset= tmp; // Save for update diff --git a/sql/share/charsets/cp1251.xml b/sql/share/charsets/cp1251.xml index 795022cc179..94774cca0f1 100644 --- a/sql/share/charsets/cp1251.xml +++ b/sql/share/charsets/cp1251.xml @@ -34,9 +34,9 @@ 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 54 75 76 77 78 79 7A 5B 5C 5D 5E 5F + 70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 54 75 76 77 78 79 7A 7B 7C 7D 7E 7F + 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 90 83 82 83 84 85 86 87 88 89 9A 8B 9C 9D 9E 9F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A2 A2 BC A4 B4 A6 A7 B8 A9 BA AB AC AD AE BF @@ -56,9 +56,9 @@ 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 74 55 56 57 58 59 5A 5B 5C 5D 5E 5F + 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 74 55 56 57 58 59 5A 7B 7C 7D 7E 7F + 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F 80 81 82 81 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 80 91 92 93 94 95 96 97 98 99 8A 9B 8C 9D 8E 8F A0 A1 A1 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 5ed743962eb..b43c4b43b50 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -44,8 +44,8 @@ v/* "Obsluha tabulky '%-.64s' nem-BА tento parametr", "Nemohu naj-BМt zАznam v '%-.64s'", "Nespr-BАvnА informace v souboru '%-.64s'", -"Nespr-BАvnЩ klМХ pro tabulku '%-.64s'. Pokuste se ho opravit", -"Star-BЩ klМХovЩ soubor pro '%-.64s'. Opravte ho.", +"Nespr-BАvnЩ klМХ pro tabulku '%-.64s'; pokuste se ho opravit", +"Star-BЩ klМХovЩ soubor pro '%-.64s'; opravte ho.", "'%-.64s' je jen pro -BХtenМ", "M-BАlo pamЛti. PЬestartujte daemona a zkuste znovu (je potЬeba %d bytЫ)", "M-BАlo pamЛti pro tЬМdЛnМ. Zvy╧te velikost tЬМdМcМho bufferu", @@ -54,8 +54,8 @@ v/* "M-BАlo prostoru/pamЛti pro thread", "Nemohu zjistit jm-BИno stroje pro Va╧i adresu", "Chyba p-BЬi ustavovАnМ spojenМ", -"P-BЬМstup pro u╬ivatele '%-.32s@%-.64s' k databАzi '%-.64s' nenМ povolen", -"P-BЬМstup pro u╬ivatele '%-.32s@%-.64s' (s heslem %s)", +"P-BЬМstup pro u╬ivatele '%-.32s'@'%-.64s' k databАzi '%-.64s' nenМ povolen", +"P-BЬМstup pro u╬ivatele '%-.32s'@'%-.64s' (s heslem %s)", "Nebyla vybr-BАna ╬АdnА databАze", "Nezn-BАmЩ pЬМkaz", "Sloupec '%-.64s' nem-BЫ╬e bЩt null", @@ -152,8 +152,8 @@ v/* "Regul-BАrnМ vЩraz vrАtil chybu '%-.64s'", "Pokud nen-BМ ╬АdnА GROUP BY klauzule, nenМ dovoleno souХasnИ pou╬itМ GROUP polo╬ek (MIN(),MAX(),COUNT()...) s ne GROUP polo╬kami", "Neexistuje odpov-BМdajМcМ grant pro u╬ivatele '%-.32s' na stroji '%-.64s'", -"%-.16s p-BЬМkaz nepЬМstupnЩ pro u╬ivatele: '%-.32s@%-.64s' pro tabulku '%-.64s'", -"%-.16s p-BЬМkaz nepЬМstupnЩ pro u╬ivatele: '%-.32s@%-.64s' pro sloupec '%-.64s' v tabulce '%-.64s'", +"%-.16s p-BЬМkaz nepЬМstupnЩ pro u╬ivatele: '%-.32s'@'%-.64s' pro tabulku '%-.64s'", +"%-.16s p-BЬМkaz nepЬМstupnЩ pro u╬ivatele: '%-.32s'@'%-.64s' pro sloupec '%-.64s' v tabulce '%-.64s'", "Neplatn-BЩ pЬМkaz GRANT/REVOKE. ProsМm, pЬeХtЛte si v manuАlu, jakА privilegia je mo╬nИ pou╬Мt.", "Argument p-BЬМkazu GRANT u╬ivatel nebo stroj je pЬМli╧ dlouhЩ", "Tabulka '%-.64s.%s' neexistuje", @@ -221,7 +221,7 @@ v/* "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -276,3 +276,4 @@ v/* "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index 224b168e15b..2eb9e6d2219 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -13,19 +13,19 @@ "Kan ikke oprette databasen '%-.64s' (Fejlkode: %d)", "Kan ikke oprette databasen '%-.64s'; databasen eksisterer", "Kan ikke slette (droppe) '%-.64s'; databasen eksisterer ikke", -"Fejl ved sletning (drop) af databasen (kan ikke slette '%-.64s', Fejl %d)", -"Fejl ved sletting af database (kan ikke slette folderen '%-.64s', Fejl %d)", +"Fejl ved sletning (drop) af databasen (kan ikke slette '%-.64s', Fejlkode %d)", +"Fejl ved sletting af database (kan ikke slette folderen '%-.64s', Fejlkode %d)", "Fejl ved sletning af '%-.64s' (Fejlkode: %d)", "Kan ikke lФse posten i systemfolderen", "Kan ikke lФse status af '%-.64s' (Fejlkode: %d)", "Kan ikke lФse aktive folder (Fejlkode: %d)", "Kan ikke lЕse fil (Fejlkode: %d)", -"Kan ikke Еbne fil: '%-.64s'. (Fejlkode: %d)", +"Kan ikke Еbne fil: '%-.64s' (Fejlkode: %d)", "Kan ikke finde fila: '%-.64s' (Fejlkode: %d)", "Kan ikke lФse folder '%-.64s' (Fejlkode: %d)", "Kan ikke skifte folder til '%-.64s' (Fejlkode: %d)", "Posten er Фndret siden sidste lФsning '%-.64s'", -"Ikke mere diskplads (%s). Venter pЕ at fЕ frigjort plads....", +"Ikke mere diskplads (%s). Venter pЕ at fЕ frigjort plads...", "Kan ikke skrive, flere ens nЬgler i tabellen '%-.64s'", "Fejl ved lukning af '%-.64s' (Fejlkode: %d)", "Fejl ved lФsning af '%-.64s' (Fejlkode: %d)", @@ -38,8 +38,8 @@ "Denne mulighed eksisterer ikke for tabeltypen '%-.64s'", "Kan ikke finde posten i '%-.64s'", "Forkert indhold i: '%-.64s'", -"Fejl i indeksfilen til tabellen '%-.64s', prЬv at reparere den", -"Gammel indeksfil for tabellen '%-.64s'; Reparer den", +"Fejl i indeksfilen til tabellen '%-.64s'; prЬv at reparere den", +"Gammel indeksfil for tabellen '%-.64s'; reparer den", "'%-.64s' er skrivebeskyttet", "Ikke mere hukommelse. Genstart serveren og prЬv igen (mangler %d bytes)", "Ikke mere sorteringshukommelse. ьg sorteringshukommelse (sort buffer size) for serveren", @@ -48,8 +48,8 @@ "UdgЕet for trЕde/hukommelse", "Kan ikke fЕ vФrtsnavn for din adresse", "Forkert hЕndtryk (handshake)", -"Adgang nФgtet bruger: '%-.32s@%-.64s' til databasen '%-.64s'", -"Adgang nФgtet bruger: '%-.32s@%-.64s' (Bruger adgangskode: %s)", +"Adgang nФgtet bruger: '%-.32s'@'%-.64s' til databasen '%-.64s'", +"Adgang nФgtet bruger: '%-.32s'@'%-.64s' (Bruger adgangskode: %s)", "Ingen database valgt", "Ukendt kommando", "Kolonne '%-.64s' kan ikke vФre NULL", @@ -146,8 +146,8 @@ "Fik fejl '%-.64s' fra regexp", "Sammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prФdikat", "Denne tilladelse findes ikke for brugeren '%-.32s' pЕ vФrt '%-.64s'", -"%-.16s-kommandoen er ikke tilladt for brugeren '%-.32s@%-.64s' for tabellen '%-.64s'", -"%-.16s-kommandoen er ikke tilladt for brugeren '%-.32s@%-.64s' for kolonne '%-.64s' in tabellen '%-.64s'", +"%-.16s-kommandoen er ikke tilladt for brugeren '%-.32s'@'%-.64s' for tabellen '%-.64s'", +"%-.16s-kommandoen er ikke tilladt for brugeren '%-.32s'@'%-.64s' for kolonne '%-.64s' in tabellen '%-.64s'", "Forkert GRANT/REVOKE kommando. Se i brugervejledningen hvilke privilegier der kan specificeres.", "VФrts- eller brugernavn for langt til GRANT", "Tabellen '%-.64s.%-.64s' eksisterer ikke", @@ -215,7 +215,7 @@ "DROP DATABASE er ikke tilladt mens en trЕd holder pЕ globalt read lock", "CREATE DATABASE er ikke tilladt mens en trЕd holder pЕ globalt read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -270,3 +270,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index ad843ae2e4e..2a663a176f8 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -28,8 +28,8 @@ "Kan de status niet krijgen van '%-.64s' (Errcode: %d)", "Kan de werkdirectory niet krijgen (Errcode: %d)", "Kan de file niet blokeren (Errcode: %d)", -"Kan de file '%-.64s' niet openen. (Errcode: %d)", -"Kan de file: '%-.64s' niet vinden. (Errcode: %d)", +"Kan de file '%-.64s' niet openen (Errcode: %d)", +"Kan de file: '%-.64s' niet vinden (Errcode: %d)", "Kan de directory niet lezen van '%-.64s' (Errcode: %d)", "Kan de directory niet veranderen naar '%-.64s' (Errcode: %d)", "Record is veranderd sinds de laatste lees activiteit in de tabel '%-.64s'", @@ -46,8 +46,8 @@ "Tabel handler voor '%-.64s' heeft deze optie niet", "Kan record niet vinden in '%-.64s'", "Verkeerde info in file: '%-.64s'", -"Verkeerde zoeksleutel file voor tabel: '%-.64s'. Probeer het te repareren", -"Oude zoeksleutel file voor tabel '%-.64s'; Repareer het!", +"Verkeerde zoeksleutel file voor tabel: '%-.64s'; probeer het te repareren", +"Oude zoeksleutel file voor tabel '%-.64s'; repareer het!", "'%-.64s' is alleen leesbaar", "Geen geheugen meer. Herstart server en probeer opnieuw (%d bytes nodig)", "Geen geheugen om te sorteren. Verhoog de server sort buffer size", @@ -56,8 +56,8 @@ "Geen thread geheugen meer; controleer of mysqld of andere processen al het beschikbare geheugen gebruikt. Zo niet, dan moet u wellicht 'ulimit' gebruiken om mysqld toe te laten meer geheugen te benutten, of u kunt extra swap ruimte toevoegen", "Kan de hostname niet krijgen van uw adres", "Verkeerde handshake", -"Toegang geweigerd voor gebruiker: '%-.32s@%-.64s' naar database '%-.64s'", -"Toegang geweigerd voor gebruiker: '%-.32s@%-.64s' (Wachtwoord gebruikt: %s)", +"Toegang geweigerd voor gebruiker: '%-.32s'@'%-.64s' naar database '%-.64s'", +"Toegang geweigerd voor gebruiker: '%-.32s'@'%-.64s' (Wachtwoord gebruikt: %s)", "Geen database geselecteerd", "Onbekend commando", "Kolom '%-.64s' kan niet null zijn", @@ -154,8 +154,8 @@ "Fout '%-.64s' ontvangen van regexp", "Het mixen van GROUP kolommen (MIN(),MAX(),COUNT()...) met no-GROUP kolommen is foutief indien er geen GROUP BY clausule is", "Deze toegang (GRANT) is niet toegekend voor gebruiker '%-.32s' op host '%-.64s'", -"%-.16s commando geweigerd voor gebruiker: '%-.32s@%-.64s' voor tabel '%-.64s'", -"%-.16s commando geweigerd voor gebruiker: '%-.32s@%-.64s' voor kolom '%-.64s' in tabel '%-.64s'", +"%-.16s commando geweigerd voor gebruiker: '%-.32s'@'%-.64s' voor tabel '%-.64s'", +"%-.16s commando geweigerd voor gebruiker: '%-.32s'@'%-.64s' voor kolom '%-.64s' in tabel '%-.64s'", "Foutief GRANT/REVOKE commando. Raadpleeg de handleiding welke priveleges gebruikt kunnen worden.", "De host of gebruiker parameter voor GRANT is te lang", "Tabel '%-.64s.%s' bestaat niet", @@ -223,7 +223,7 @@ "DROP DATABASE niet toegestaan terwijl thread een globale 'read lock' bezit", "CREATE DATABASE niet toegestaan terwijl thread een globale 'read lock' bezit", "Foutieve parameters voor %s", -"%-.32s@%-.64s mag geen nieuwe gebruikers creeren", +"'%-.32s'@'%-.64s' mag geen nieuwe gebruikers creeren", "Incorrecte tabel definitie; alle MERGE tabellen moeten tot dezelfde database behoren", "Deadlock gevonden tijdens lock-aanvraag poging; Probeer herstart van de transactie", "Het gebruikte tabel type ondersteund geen FULLTEXT indexen", @@ -278,3 +278,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index 778854c820b..f4019d63055 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -17,12 +17,12 @@ "Can't get status of '%-.64s' (errno: %d)", "Can't get working directory (errno: %d)", "Can't lock file (errno: %d)", -"Can't open file: '%-.64s'. (errno: %d)", +"Can't open file: '%-.64s' (errno: %d)", "Can't find file: '%-.64s' (errno: %d)", "Can't read dir of '%-.64s' (errno: %d)", "Can't change dir to '%-.64s' (errno: %d)", "Record has changed since last read in table '%-.64s'", -"Disk full (%s). Waiting for someone to free some space....", +"Disk full (%s). Waiting for someone to free some space...", "Can't write, duplicate key in table '%-.64s'", "Error on close of '%-.64s' (errno: %d)", "Error reading file '%-.64s' (errno: %d)", @@ -35,8 +35,8 @@ "Table storage engine for '%-.64s' doesn't have this option", "Can't find record in '%-.64s'", "Incorrect information in file: '%-.64s'", -"Incorrect key file for table: '%-.64s'. Try to repair it", -"Old key file for table '%-.64s'; Repair it!", +"Incorrect key file for table: '%-.64s'; try to repair it", +"Old key file for table '%-.64s'; repair it!", "Table '%-.64s' is read only", "Out of memory. Restart daemon and try again (needed %d bytes)", "Out of sort memory. Increase daemon sort buffer size", @@ -45,8 +45,8 @@ "Out of memory; Check if mysqld or some other process uses all available memory. If not you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space", "Can't get hostname for your address", "Bad handshake", -"Access denied for user: '%-.32s@%-.64s' to database '%-.64s'", -"Access denied for user: '%-.32s@%-.64s' (Using password: %s)", +"Access denied for user: '%-.32s'@'%-.64s' to database '%-.64s'", +"Access denied for user: '%-.32s'@'%-.64s' (Using password: %s)", "No Database Selected", "Unknown command", "Column '%-.64s' cannot be null", @@ -85,12 +85,12 @@ "Can't create IP socket", "Table '%-.64s' has no index like the one used in CREATE INDEX. Recreate the table", "Field separator argument is not what is expected. Check the manual", -"You can't use fixed rowlength with BLOBs. Please use 'fields terminated by'.", +"You can't use fixed rowlength with BLOBs. Please use 'fields terminated by'", "The file '%-.64s' must be in the database directory or be readable by all", "File '%-.80s' already exists", "Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld", "Records: %ld Duplicates: %ld", -"Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the store engine doesn't support unique sub keys", +"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", "You can't delete all columns with ALTER TABLE. Use DROP TABLE instead", "Can't DROP '%-.64s'. Check that column/key exists", "Records: %ld Duplicates: %ld Warnings: %ld", @@ -143,9 +143,9 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", -"Illegal GRANT/REVOKE command. Please consult the manual which privileges can be used.", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'", +"Illegal GRANT/REVOKE command. Please consult the manual which privileges can be used", "The host or user argument to GRANT is too long", "Table '%-.64s.%-.64s' doesn't exist", "There is no such grant defined for user '%-.32s' on host '%-.64s' on table '%-.64s'", @@ -179,14 +179,14 @@ "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", "Key '%-.64s' doesn't exist in table '%-.64s'", "Can't open table", -"The storage enginge for the table doesn't support %s", +"The storage engine for the table doesn't support %s", "You are not allowed to execute this command in a transaction", "Got error %d during COMMIT", "Got error %d during ROLLBACK", "Got error %d during FLUSH_LOGS", "Got error %d during CHECKPOINT", "Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)", -"The store engine for the table does not support binary table dump", +"The storage engine for the table does not support binary table dump", "Binlog closed, cannot RESET MASTER", "Failed rebuilding the index of dumped table '%-.64s'", "Error from master: '%-.64s'", @@ -212,7 +212,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -272,3 +272,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 0ac668ce01c..d3a38ede5bc 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -22,7 +22,7 @@ "Ei suuda lugeda '%-.64s' olekut (veakood: %d)", "Ei suuda identifitseerida jooksvat kataloogi (veakood: %d)", "Ei suuda lukustada faili (veakood: %d)", -"Ei suuda avada faili '%-.64s'. (veakood: %d)", +"Ei suuda avada faili '%-.64s' (veakood: %d)", "Ei suuda leida faili '%-.64s' (veakood: %d)", "Ei suuda lugeda kataloogi '%-.64s' (veakood: %d)", "Ei suuda siseneda kataloogi '%-.64s' (veakood: %d)", @@ -40,8 +40,8 @@ "Tabeli '%-.64s' handler ei toeta antud operatsiooni", "Ei suuda leida kirjet '%-.64s'-s", "Vigane informatsioon failis '%-.64s'", -"Tabeli '%-.64s' vУtmefail on vigane; Proovi seda parandada", -"Tabeli '%-.64s' vУtmefail on aegunud; Paranda see!", +"Tabeli '%-.64s' vУtmefail on vigane; proovi seda parandada", +"Tabeli '%-.64s' vУtmefail on aegunud; paranda see!", "Tabel '%-.64s' on ainult lugemiseks", "MДlu sai otsa. Proovi MySQL uuesti kДivitada (puudu jДi %d baiti)", "MДlu sai sorteerimisel otsa. Suurenda MySQL-i sorteerimispuhvrit", @@ -50,8 +50,8 @@ "MДlu sai otsa. VУimalik, et aitab swap-i lisamine vУi kДsu 'ulimit' abil MySQL-le rohkema mДlu kasutamise lubamine", "Ei suuda lahendada IP aadressi masina nimeks", "VДДr handshake", -"LigipДДs keelatud kasutajale '%-.32s@%-.64s' andmebaasile '%-.64s'", -"LigipДДs keelatud kasutajale '%-.32s@%-.64s' (kasutab parooli: %s)", +"LigipДДs keelatud kasutajale '%-.32s'@'%-.64s' andmebaasile '%-.64s'", +"LigipДДs keelatud kasutajale '%-.32s'@'%-.64s' (kasutab parooli: %s)", "Andmebaasi ei ole valitud", "Tundmatu kДsk", "Tulp '%-.64s' ei saa omada nullvДДrtust", @@ -148,8 +148,8 @@ "regexp tagastas vea '%-.64s'", "GROUP tulpade (MIN(),MAX(),COUNT()...) kooskasutamine tavaliste tulpadega ilma GROUP BY klauslita ei ole lubatud", "Sellist Уigust ei ole defineeritud kasutajale '%-.32s' masinast '%-.64s'", -"%-.16s kДsk ei ole lubatud kasutajale '%-.32s@%-.64s' tabelis '%-.64s'", -"%-.16s kДsk ei ole lubatud kasutajale '%-.32s@%-.64s' tulbale '%-.64s' tabelis '%-.64s'", +"%-.16s kДsk ei ole lubatud kasutajale '%-.32s'@'%-.64s' tabelis '%-.64s'", +"%-.16s kДsk ei ole lubatud kasutajale '%-.32s'@'%-.64s' tulbale '%-.64s' tabelis '%-.64s'", "Vigane GRANT/REVOKE kДsk. Tutvu kasutajajuhendiga", "Masina vУi kasutaja nimi GRANT lauses on liiga pikk", "Tabelit '%-.64s.%-.64s' ei eksisteeri", @@ -217,7 +217,7 @@ "DROP DATABASE ei ole lubatud kui lУim omab globaalset READ lukku", "CREATE DATABASE ei ole lubatud kui lУim omab globaalset READ lukku", "Vigased parameetrid %s-le", -"Kasutajal %-.32s@%-.64s ei ole lubatud luua uusi kasutajaid", +"Kasutajal '%-.32s'@'%-.64s' ei ole lubatud luua uusi kasutajaid", "Vigane tabelimДДratlus; kУik MERGE tabeli liikmed peavad asuma samas andmebaasis", "Lukustamisel tekkis tupik (deadlock); alusta transaktsiooni otsast", "Antud tabelitЭЭp ei toeta FULLTEXT indekseid", @@ -272,3 +272,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 51053dc5632..ccff24c5759 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -17,7 +17,7 @@ "Ne peut obtenir le status de '%-.64s' (Errcode: %d)", "Ne peut obtenir le rИpertoire de travail (Errcode: %d)", "Ne peut verrouiller le fichier (Errcode: %d)", -"Ne peut ouvrir le fichier: '%-.64s'. (Errcode: %d)", +"Ne peut ouvrir le fichier: '%-.64s' (Errcode: %d)", "Ne peut trouver le fichier: '%-.64s' (Errcode: %d)", "Ne peut lire le rИpertoire de '%-.64s' (Errcode: %d)", "Ne peut changer le rИpertoire pour '%-.64s' (Errcode: %d)", @@ -35,8 +35,8 @@ "Le handler de la table '%-.64s' n'a pas cette option", "Ne peut trouver l'enregistrement dans '%-.64s'", "Information erronnИe dans le fichier: '%-.64s'", -"Index corrompu dans la table: '%-.64s'. Essayez de le rИparer", -"Vieux fichier d'index pour la table '%-.64s'; RИparez le!", +"Index corrompu dans la table: '%-.64s'; essayez de le rИparer", +"Vieux fichier d'index pour la table '%-.64s'; rИparez le!", "'%-.64s' est en lecture seulement", "Manque de mИmoire. RedИmarrez le dИmon et rИ-essayez (%d octets nИcessaires)", "Manque de mИmoire pour le tri. Augmentez-la.", @@ -45,8 +45,8 @@ "Manque de 'threads'/mИmoire", "Ne peut obtenir de hostname pour votre adresse", "Mauvais 'handshake'", -"AccХs refusИ pour l'utilisateur: '%-.32s@%-.64s'. Base '%-.64s'", -"AccХs refusИ pour l'utilisateur: '%-.32s@%-.64s' (mot de passe: %s)", +"AccХs refusИ pour l'utilisateur: '%-.32s'@'@%-.64s'. Base '%-.64s'", +"AccХs refusИ pour l'utilisateur: '%-.32s'@'@%-.64s' (mot de passe: %s)", "Aucune base n'a ИtИ sИlectionnИe", "Commande inconnue", "Le champ '%-.64s' ne peut Йtre vide (null)", @@ -143,8 +143,8 @@ "Erreur '%-.64s' provenant de regexp", "MИlanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY", "Un tel droit n'est pas dИfini pour l'utilisateur '%-.32s' sur l'hТte '%-.64s'", -"La commande '%-.16s' est interdite Ю l'utilisateur: '%-.32s@%-.64s' sur la table '%-.64s'", -"La commande '%-.16s' est interdite Ю l'utilisateur: '%-.32s@%-.64s' sur la colonne '%-.64s' de la table '%-.64s'", +"La commande '%-.16s' est interdite Ю l'utilisateur: '%-.32s'@'@%-.64s' sur la table '%-.64s'", +"La commande '%-.16s' est interdite Ю l'utilisateur: '%-.32s'@'@%-.64s' sur la colonne '%-.64s' de la table '%-.64s'", "Commande GRANT/REVOKE incorrecte. Consultez le manuel.", "L'hТte ou l'utilisateur donnИ en argument Ю GRANT est trop long", "La table '%-.64s.%s' n'existe pas", @@ -212,7 +212,7 @@ "DROP DATABASE n'est pas autorisИe pendant qu'une tБche possХde un verrou global en lecture", "CREATE DATABASE n'est pas autorisИe pendant qu'une tБche possХde un verrou global en lecture", "Mauvais arguments Ю %s", -"%-.32s@%-.64s n'est pas autorisИ Ю crИer de nouveaux utilisateurs", +"'%-.32s'@'%-.64s' n'est pas autorisИ Ю crИer de nouveaux utilisateurs", "DИfinition de table incorrecte; toutes les tables MERGE doivent Йtre dans la mЙme base de donnИe", "Deadlock dИcouvert en essayant d'obtenir les verrous : essayez de redИmarrer la transaction", "Le type de table utilisИ ne supporte pas les index FULLTEXT", @@ -267,3 +267,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index 49615c08223..52f3eb78c11 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -26,27 +26,27 @@ "Kann Status von '%-.64s' nicht ermitteln. (Fehler: %d)", "Kann Arbeitsverzeichnis nicht ermitteln. (Fehler: %d)", "Datei nicht sperrbar. (Fehler: %d)", -"Kann Datei '%-.64s' nicht Жffnen. (Fehler: %d)", -"Kann Datei '%-.64s' nicht finden. (Fehler: %d)", -"Verzeichnis von '%-.64s' nicht lesbar. (Fehler: %d)", -"Kann nicht in das Verzeichnis '%-.64s' wechseln. (Fehler: %d)", -"Datensatz hat sich seit dem letzten Zugriff auf Tabelle '%-.64s' geДndert.", +"Kann Datei '%-.64s' nicht Жffnen (Fehler: %d)", +"Kann Datei '%-.64s' nicht finden (Fehler: %d)", +"Verzeichnis von '%-.64s' nicht lesbar (Fehler: %d)", +"Kann nicht in das Verzeichnis '%-.64s' wechseln (Fehler: %d)", +"Datensatz hat sich seit dem letzten Zugriff auf Tabelle '%-.64s' geДndert", "Festplatte voll (%-.64s). Warte bis jemand Platz schafft ...", -"Kann nicht speichern, doppelter SchlЭssel in Tabelle '%-.64s'.", -"Fehler beim Schlieъen von '%-.64s'. (Fehler: %d)", -"Fehler beim Lesen der Datei '%-.64s'. (Fehler: %d)", -"Fehler beim Umbenennen von '%-.64s' nach '%-.64s'. (Fehler: %d)", -"Fehler beim Speichern der Datei '%-.64s'. (Fehler: %d)", -"'%-.64s' ist fЭr VerДnderungen gesperrt.", -"Sortieren abgebrochen.", -"View '%-.64s' existiert fЭr '%-.64s' nicht.", -"Fehler %d. (Tabellenhandler)", -"Diese Option gibt es nicht. (Tabellenhandler)", -"Kann Datensatz nicht finden.", +"Kann nicht speichern, doppelter SchlЭssel in Tabelle '%-.64s'", +"Fehler beim Schlieъen von '%-.64s' (Fehler: %d)", +"Fehler beim Lesen der Datei '%-.64s' (Fehler: %d)", +"Fehler beim Umbenennen von '%-.64s' nach '%-.64s' (Fehler: %d)", +"Fehler beim Speichern der Datei '%-.64s' (Fehler: %d)", +"'%-.64s' ist fЭr VerДnderungen gesperrt", +"Sortieren abgebrochen", +"View '%-.64s' existiert fЭr '%-.64s' nicht", +"Fehler %d (Tabellenhandler)", +"Diese Option gibt es nicht (Tabellenhandler)", +"Kann Datensatz nicht finden", "Falsche Information in Datei: '%-.64s'", -"Falsche SchlЭssel-Datei fЭr Tabelle '%-.64s'. Versuche zu reparieren!", -"Alte SchlЭssel-Datei fЭr Tabelle '%-.64s'. Repariere!", -"'%-.64s' ist nur lesbar.", +"Falsche SchlЭssel-Datei fЭr Tabelle '%-.64s'; versuche zu reparieren!", +"Alte SchlЭssel-Datei fЭr Tabelle '%-.64s'; repariere!", +"'%-.64s' ist nur lesbar", "Kein Speicher vorhanden (benЖtigt %d bytes). Server neu starten.", "Kein Speicher zum Sortieren. sort_buffer_size sollte erhЖht werden.", "Unerwartetes Ende beim Lesen der Datei '%-.64s'. (Fehler: %d)", @@ -54,8 +54,8 @@ "Zuwenig Speicher.", "Kann Hostname fЭr diese Adresse nicht erhalten.", "Schlechter Handshake.", -"Keine Zugriffsberechtigung fЭr Benutzer: '%-.32s@%-.64s' fЭr Datenbank '%-.64s'.", -"Keine Zugriffsberechtigung fЭr Benutzer: '%-.32s@%-.64s'. (Verwendetes Passwort: %-.64s)", +"Keine Zugriffsberechtigung fЭr Benutzer: '%-.32s'@'%-.64s' fЭr Datenbank '%-.64s'.", +"Keine Zugriffsberechtigung fЭr Benutzer: '%-.32s'@'%-.64s'. (Verwendetes Passwort: %-.64s)", "Keine Datenbank ausgewДhlt.", "Unbekannter Befehl.", "Feld '%-.64s' kann nicht NULL sein.", @@ -152,8 +152,8 @@ "Fehler '%-.64s' von regexp", "Das Vermischen von GROUP Spalten (MIN(),MAX(),COUNT()...) mit Nicht-GROUP Spalten ist nicht erlaubt, sofern keine GROUP BY Klausel vorhanden ist.", "Keine solche Berechtigung fЭr User '%-.32s' auf Host '%-.64s'", -"%-.16s Befehl nicht erlaubt fЭr User: '%-.32s@%-.64s' fЭr Tabelle '%-.64s'", -"%-.16s Befehl nicht erlaubt fЭr User: '%-.32s@%-.64s' in Spalte '%-.64s' in Tabelle '%-.64s'", +"%-.16s Befehl nicht erlaubt fЭr User: '%-.32s'@'%-.64s' fЭr Tabelle '%-.64s'", +"%-.16s Befehl nicht erlaubt fЭr User: '%-.32s'@'%-.64s' in Spalte '%-.64s' in Tabelle '%-.64s'", "UnzulДssiger GRANT/REVOKE Befehl. Weiteres zum Thema Berechtigungen im Manual.", "Das Host oder User Argument fЭr GRANT ist zu lang", "Tabelle '%-.64s.%-.64s' existiert nicht", @@ -221,7 +221,7 @@ "Solange ein globaler Read LOCK gesetzt ist, ist DROP DATABASE nicht zulДssig.", "Solange ein globaler Read LOCK gesetzt ist, ist CREATE DATABASE nicht zulДssig.", "Falsche Argumente fЭr %s", -"%-.32s@%-.64s is nicht berechtigt neue Benutzer hinzuzufЭgen.", +"'%-.32s'@'%-.64s' is nicht berechtigt neue Benutzer hinzuzufЭgen.", "Falsche Tabellendefinition; sДmtliche MERGE-Tabellen mЭssen in derselben Datenbank sein.", "Beim Versuch einen Lock anzufordern ist ein Deadlock aufgetreten. Es wird versucht die Transaktion erneut zu starten.", "Der verwendete Tabellentyp unterstЭtzt keinen FULLTEXT-Index.", @@ -276,3 +276,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index d49e80135e3..1ce052bdf22 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -17,12 +17,12 @@ "аДЩМАТГ Г КчЬГ ПКГЯОЖОЯИЧМ ЦИА ТГМ ЙАТэСТАСГ ТОУ '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", "о ЖэЙЕККОР ЕЯЦАСъАР ДЕМ БЯщХГЙЕ (ЙЫДИЙЭР КэХОУР: %d)", "тО АЯВЕъО ДЕМ ЛПОЯЕъ МА ЙКЕИДЫХЕъ (ЙЫДИЙЭР КэХОУР: %d)", -"дЕМ ЕъМАИ ДУМАТЭ МА АМОИВТЕъ ТО АЯВЕъО: '%-.64s'. (ЙЫДИЙЭР КэХОУР: %d)", +"дЕМ ЕъМАИ ДУМАТЭ МА АМОИВТЕъ ТО АЯВЕъО: '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", "дЕМ БЯщХГЙЕ ТО АЯВЕъО: '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", "дЕМ ЕъМАИ ДУМАТЭ МА ДИАБАСТЕъ О ЖэЙЕККОР ТОУ '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", "аДЩМАТГ Г АККАЦч ТОУ ТЯщВОМТОР ЙАТАКЭЦОУ СЕ '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", "г ЕЦЦЯАЖч щВЕИ АККэНЕИ АПЭ ТГМ ТЕКЕУТАъА ЖОЯэ ПОУ АМАСЩЯХГЙЕ АПЭ ТОМ ПъМАЙА '%-.64s'", -"дЕМ УПэЯВЕИ ВЧЯОР СТО ДъСЙО (%s). пАЯАЙАКЧ, ПЕЯИЛщМЕТЕ МА ЕКЕУХЕЯЫХЕъ ВЧЯОР....", +"дЕМ УПэЯВЕИ ВЧЯОР СТО ДъСЙО (%s). пАЯАЙАКЧ, ПЕЯИЛщМЕТЕ МА ЕКЕУХЕЯЫХЕъ ВЧЯОР...", "дЕМ ЕъМАИ ДУМАТч Г ЙАТАВЧЯГСГ, Г ТИЛч УПэЯВЕИ чДГ СТОМ ПъМАЙА '%-.64s'", "пАЯОУСИэСТГЙЕ ПЯЭБКГЛА ЙКЕъМОМТАР ТО '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", "пЯЭБКГЛА ЙАТэ ТГМ АМэЦМЫСГ ТОУ АЯВЕъОУ '%-.64s' (ЙЫДИЙЭР КэХОУР: %d)", @@ -35,7 +35,7 @@ "о ВЕИЯИСТчР ПъМАЙА (table handler) ЦИА '%-.64s' ДЕМ ДИАХщТЕИ АУТч ТГМ ЕПИКОЦч", "аДЩМАТГ Г АМЕЩЯЕСГ ЕЦЦЯАЖчР СТО '%-.64s'", "кэХОР ПКГЯОЖОЯъЕР СТО АЯВЕъО: '%-.64s'", -"кэХОР АЯВЕъО ТАНИМЭЛИСГР (key file) ЦИА ТОМ ПъМАЙА: '%-.64s'. пАЯАЙАКЧ, ДИОЯХЧСТЕ ТО!", +"кэХОР АЯВЕъО ТАНИМЭЛИСГР (key file) ЦИА ТОМ ПъМАЙА: '%-.64s'; пАЯАЙАКЧ, ДИОЯХЧСТЕ ТО!", "пАКАИЭ АЯВЕъО ТАНИМЭЛИСГР (key file) ЦИА ТОМ ПъМАЙА '%-.64s'; пАЯАЙАКЧ, ДИОЯХЧСТЕ ТО!", "'%-.64s' ЕПИТЯщПЕТАИ ЛЭМО Г АМэЦМЫСГ", "дЕМ УПэЯВЕИ ДИАХщСИЛГ ЛМчЛГ. пЯОСПАХчСТЕ ПэКИ, ЕПАМЕЙИМЧМТАР ТГ ДИАДИЙАСъА (demon) (ВЯЕИэФОМТАИ %d bytes)", @@ -45,8 +45,8 @@ "пЯЭБКГЛА ЛЕ ТГ ДИАХщСИЛГ ЛМчЛГ (Out of thread space/memory)", "дЕМ щЦИМЕ ЦМЫСТЭ ТО hostname ЦИА ТГМ address САР", "г АМАЦМЧЯИСГ (handshake) ДЕМ щЦИМЕ СЫСТэ", -"дЕМ ЕПИТщЯЕТАИ Г ПЯЭСБАСГ СТО ВЯчСТГ: '%-.32s@%-.64s' СТГ БэСГ ДЕДОЛщМЫМ '%-.64s'", -"дЕМ ЕПИТщЯЕТАИ Г ПЯЭСБАСГ СТО ВЯчСТГ: '%-.32s@%-.64s' (ВЯчСГ password: %s)", +"дЕМ ЕПИТщЯЕТАИ Г ПЯЭСБАСГ СТО ВЯчСТГ: '%-.32s'@'%-.64s' СТГ БэСГ ДЕДОЛщМЫМ '%-.64s'", +"дЕМ ЕПИТщЯЕТАИ Г ПЯЭСБАСГ СТО ВЯчСТГ: '%-.32s'@'%-.64s' (ВЯчСГ password: %s)", "дЕМ ЕПИКщВХГЙЕ БэСГ ДЕДОЛщМЫМ", "аЦМЫСТГ ЕМТОКч", "тО ПЕДъО '%-.64s' ДЕМ ЛПОЯЕъ МА ЕъМАИ ЙЕМЭ (null)", @@ -143,8 +143,8 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'", "Illegal GRANT/REVOKE command. Please consult the manual which privileges can be used.", "The host or user argument to GRANT is too long", "Table '%-.64s.%-.64s' doesn't exist", @@ -212,7 +212,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -267,3 +267,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 8fc12da1f00..6143ea2a1c4 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -19,8 +19,8 @@ "A(z) '%-.64s' statusza nem allapithato meg (hibakod: %d)", "A munkakonyvtar nem allapithato meg (hibakod: %d)", "A file nem zarolhato. (hibakod: %d)", -"A '%-.64s' file nem nyithato meg. (hibakod: %d)", -"A(z) '%-.64s' file nem talalhato. (hibakod: %d)", +"A '%-.64s' file nem nyithato meg (hibakod: %d)", +"A(z) '%-.64s' file nem talalhato (hibakod: %d)", "A(z) '%-.64s' konyvtar nem olvashato. (hibakod: %d)", "Konyvtarvaltas nem lehetseges a(z) '%-.64s'-ba. (hibakod: %d)", "A(z) '%-.64s' tablaban talalhato rekord megvaltozott az utolso olvasas ota", @@ -37,8 +37,8 @@ "A(z) '%-.64s' tablakezelonek nincs ilyen opcioja", "Nem talalhato a rekord '%-.64s'-ben", "Ervenytelen info a file-ban: '%-.64s'", -"Ervenytelen kulcsfile a tablahoz: '%-.64s'. Probalja kijavitani!", -"Regi kulcsfile a '%-.64s'tablahoz; Probalja kijavitani!", +"Ervenytelen kulcsfile a tablahoz: '%-.64s'; probalja kijavitani!", +"Regi kulcsfile a '%-.64s'tablahoz; probalja kijavitani!", "'%-.64s' irasvedett", "Nincs eleg memoria. Inditsa ujra a demont, es probalja ismet. (%d byte szukseges.)", "Nincs eleg memoria a rendezeshez. Novelje a rendezo demon puffermeretet", @@ -47,8 +47,8 @@ "Elfogyott a thread-memoria", "A gepnev nem allapithato meg a cimbol", "A kapcsolatfelvetel nem sikerult (Bad handshake)", -"A(z) '%-.32s@%-.64s' felhasznalo szamara tiltott eleres az '%-.64s' adabazishoz.", -"A(z) '%-.32s@%-.64s' felhasznalo szamara tiltott eleres. (Hasznalja a jelszot: %s)", +"A(z) '%-.32s'@'%-.64s' felhasznalo szamara tiltott eleres az '%-.64s' adabazishoz.", +"A(z) '%-.32s'@'%-.64s' felhasznalo szamara tiltott eleres. (Hasznalja a jelszot: %s)", "Nincs kivalasztott adatbazis", "Ervenytelen parancs", "A(z) '%-.64s' oszlop erteke nem lehet nulla", @@ -145,8 +145,8 @@ "'%-.64s' hiba a regularis kifejezes hasznalata soran (regexp)", "A GROUP mezok (MIN(),MAX(),COUNT()...) kevert hasznalata nem lehetseges GROUP BY hivatkozas nelkul", "A '%-.32s' felhasznalonak nincs ilyen joga a '%-.64s' host-on", -"%-.16s parancs a '%-.32s@%-.64s' felhasznalo szamara nem engedelyezett a '%-.64s' tablaban", -"%-.16s parancs a '%-.32s@%-.64s' felhasznalo szamara nem engedelyezett a '%-.64s' mezo eseten a '%-.64s' tablaban", +"%-.16s parancs a '%-.32s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.64s' tablaban", +"%-.16s parancs a '%-.32s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.64s' mezo eseten a '%-.64s' tablaban", "Ervenytelen GRANT/REVOKE parancs. Kerem, nezze meg a kezikonyvben, milyen jogok lehetsegesek", "A host vagy felhasznalo argumentuma tul hosszu a GRANT parancsban", "A '%-.64s.%s' tabla nem letezik", @@ -214,7 +214,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -269,3 +269,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 18ce664e7fd..8164757d823 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -17,12 +17,12 @@ "Impossibile leggere lo stato di '%-.64s' (errno: %d)", "Impossibile leggere la directory di lavoro (errno: %d)", "Impossibile il locking il file (errno: %d)", -"Impossibile aprire il file: '%-.64s'. (errno: %d)", +"Impossibile aprire il file: '%-.64s' (errno: %d)", "Impossibile trovare il file: '%-.64s' (errno: %d)", "Impossibile leggere la directory di '%-.64s' (errno: %d)", "Impossibile cambiare la directory in '%-.64s' (errno: %d)", "Il record e` cambiato dall'ultima lettura della tabella '%-.64s'", -"Disco pieno (%s). In attesa che qualcuno liberi un po' di spazio....", +"Disco pieno (%s). In attesa che qualcuno liberi un po' di spazio...", "Scrittura impossibile: chiave duplicata nella tabella '%-.64s'", "Errore durante la chiusura di '%-.64s' (errno: %d)", "Errore durante la lettura del file '%-.64s' (errno: %d)", @@ -35,8 +35,8 @@ "Il gestore delle tabelle per '%-.64s' non ha questa opzione", "Impossibile trovare il record in '%-.64s'", "Informazione errata nel file: '%-.64s'", -"File chiave errato per la tabella : '%-.64s'. Prova a riparalo", -"File chiave vecchio per la tabella '%-.64s'; Riparalo!", +"File chiave errato per la tabella : '%-.64s'; prova a riparalo", +"File chiave vecchio per la tabella '%-.64s'; riparalo!", "'%-.64s' e` di sola lettura", "Memoria esaurita. Fai ripartire il demone e riprova (richiesti %d bytes)", "Memoria per gli ordinamenti esaurita. Incrementare il 'sort_buffer' al demone", @@ -45,8 +45,8 @@ "Fine dello spazio/memoria per i thread", "Impossibile risalire al nome dell'host dall'indirizzo (risoluzione inversa)", "Negoziazione impossibile", -"Accesso non consentito per l'utente: '%-.32s@%-.64s' al database '%-.64s'", -"Accesso non consentito per l'utente: '%-.32s@%-.64s' (Password: %s)", +"Accesso non consentito per l'utente: '%-.32s'@'%-.64s' al database '%-.64s'", +"Accesso non consentito per l'utente: '%-.32s'@'%-.64s' (Password: %s)", "Nessun database selezionato", "Comando sconosciuto", "La colonna '%-.64s' non puo` essere nulla", @@ -143,8 +143,8 @@ "Errore '%-.64s' da regexp", "Il mescolare funzioni di aggregazione (MIN(),MAX(),COUNT()...) e non e` illegale se non c'e` una clausula GROUP BY", "GRANT non definita per l'utente '%-.32s' dalla macchina '%-.64s'", -"Comando %-.16s negato per l'utente: '%-.32s@%-.64s' sulla tabella '%-.64s'", -"Comando %-.16s negato per l'utente: '%-.32s@%-.64s' sulla colonna '%-.64s' della tabella '%-.64s'", +"Comando %-.16s negato per l'utente: '%-.32s'@'%-.64s' sulla tabella '%-.64s'", +"Comando %-.16s negato per l'utente: '%-.32s'@'%-.64s' sulla colonna '%-.64s' della tabella '%-.64s'", "Comando GRANT/REVOKE illegale. Prego consultare il manuale per sapere quali privilegi possono essere usati.", "L'argomento host o utente per la GRANT e` troppo lungo", "La tabella '%-.64s.%s' non esiste", @@ -212,7 +212,7 @@ "DROP DATABASE non e' permesso mentre il thread ha un lock globale di lettura", "CREATE DATABASE non e' permesso mentre il thread ha un lock globale di lettura", "Argomenti errati a %s", -"A %-.32s@%-.64s non e' permesso creare nuovi utenti", +"A '%-.32s'@'%-.64s' non e' permesso creare nuovi utenti", "Definizione della tabella errata; tutte le tabelle di tipo MERGE devono essere nello stesso database", "Trovato deadlock durante il lock; Provare a far ripartire la transazione", "La tabella usata non supporta gli indici FULLTEXT", @@ -267,3 +267,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index fedf0fd8e9c..747d3611cc9 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -17,9 +17,9 @@ "'%-.64s' ╓н╨О╫Э╓╛╔╗╔И║╪ (errno: %d)", "system table ╓н╔Л╔Ё║╪╔и╓Рфи╓Ю╩Ж╓╛╓г╓╜╓ч╓╩╓С╓г╓╥╓©", "'%-.64s' ╓н╔╧╔ф╔╓╔©╔╧╓╛фю╓И╓Л╓ч╓╩╓С. (errno: %d)", -"working directory ╓Рфю╓К╩Ж╓╛╓г╓╜╓ч╓╩╓С╓г╓╥╓©. (errno: %d)", -"╔у╔║╔╓╔К╓Р╔М╔ц╔╞╓г╓╜╓ч╓╩╓С.(errno: %d)", -"'%-.64s' ╔у╔║╔╓╔К╓РЁ╚╓╞╩Ж╓╛╓г╓╜╓ч╓╩╓С.(errno: %d)", +"working directory ╓Рфю╓К╩Ж╓╛╓г╓╜╓ч╓╩╓С╓г╓╥╓© (errno: %d)", +"╔у╔║╔╓╔К╓Р╔М╔ц╔╞╓г╓╜╓ч╓╩╓С (errno: %d)", +"'%-.64s' ╔у╔║╔╓╔К╓РЁ╚╓╞╩Ж╓╛╓г╓╜╓ч╓╩╓С (errno: %d)", "'%-.64s' ╔у╔║╔╓╔К╓Р╦╚иу╓╠╓К╩Ж╓╛╓г╓╜╓ч╓╩╓С.(errno: %d)", "'%-.64s' ╔г╔ё╔Л╔╞╔х╔Й╓╛фи╓А╓ч╓╩╓С.(errno: %d)", "'%-.64s' ╔г╔ё╔Л╔╞╔х╔Й╓к chdir ╓г╓╜╓ч╓╩╓С.(errno: %d)", @@ -47,8 +47,8 @@ "Out of memory; mysqld ╓╚╓╫╓нб╬╓н╔в╔М╔╩╔╧╓╛╔А╔Б╔Й║╪╓Ра╢╓ф╩х╓ц╓ф╓╓╓К╓╚Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╔А╔Б╔Й║╪╓Р╩х╓╓юз╓ц╓ф╓╓╓й╓╓╬Л╧Г║╒'ulimit' ╓РюъдЙ╓╥╓ф mysqld ╓н╔А╔Б╔Й║╪╩хмя╦бЁ╕нл╓Рб©╓╞╓╧╓К╓╚║╒swap space ╓РаЩ╓Д╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓", "╓╫╓н address ╓н hostname ╓╛╟З╓╠╓ч╓╩╓С.", "Bad handshake", -"╔Ф║╪╔╤║╪ '%-.32s@%-.64s' ╓н '%-.64s' ╔г║╪╔©╔ы║╪╔╧╓ь╓н╔╒╔╞╔╩╔╧╓Р╣Яхщ╓╥╓ч╓╧", -"╔Ф║╪╔╤║╪ '%-.32s@%-.64s' ╓Р╣Яхщ╓╥╓ч╓╧.(Using password: %s)", +"╔Ф║╪╔╤║╪ '%-.32s'@'%-.64s' ╓н '%-.64s' ╔г║╪╔©╔ы║╪╔╧╓ь╓н╔╒╔╞╔╩╔╧╓Р╣Яхщ╓╥╓ч╓╧", +"╔Ф║╪╔╤║╪ '%-.32s'@'%-.64s' ╓Р╣Яхщ╓╥╓ч╓╧.(Using password: %s)", "╔г║╪╔©╔ы║╪╔╧╓╛а╙бР╓╣╓Л╓ф╓╓╓ч╓╩╓С.", "╓╫╓н╔Ё╔ч╔С╔и╓о╡©║╘", "Column '%-.64s' ╓о null ╓к╓о╓г╓╜╓й╓╓╓н╓г╓╧", @@ -145,8 +145,8 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "╔Ф║╪╔╤║╪ '%-.32s' (╔ш╔╧╔х '%-.64s' ╓н╔Ф║╪╔╤║╪) ╓о╣Ж╡д╓╣╓Л╓ф╓╓╓ч╓╩╓С", -"╔Ё╔ч╔С╔и %-.16s ╓о ╔Ф║╪╔╤║╪ '%-.32s@%-.64s' ,╔ф║╪╔ж╔К '%-.64s' ╓кбп╓╥╓ф╣Ж╡д╓╣╓Л╓ф╓╓╓ч╓╩╓С", -"╔Ё╔ч╔С╔и %-.16s ╓о ╔Ф║╪╔╤║╪ '%-.32s@%-.64s'\n ╔╚╔И╔Ю '%-.64s' ╔ф║╪╔ж╔К '%-.64s' ╓кбп╓╥╓ф╣Ж╡д╓╣╓Л╓ф╓╓╓ч╓╩╓С", +"╔Ё╔ч╔С╔и %-.16s ╓о ╔Ф║╪╔╤║╪ '%-.32s'@'%-.64s' ,╔ф║╪╔ж╔К '%-.64s' ╓кбп╓╥╓ф╣Ж╡д╓╣╓Л╓ф╓╓╓ч╓╩╓С", +"╔Ё╔ч╔С╔и %-.16s ╓о ╔Ф║╪╔╤║╪ '%-.32s'@'%-.64s'\n ╔╚╔И╔Ю '%-.64s' ╔ф║╪╔ж╔К '%-.64s' ╓кбп╓╥╓ф╣Ж╡д╓╣╓Л╓ф╓╓╓ч╓╩╓С", "Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", "The host or user argument to GRANT is too long", "Table '%-.64s.%s' doesn't exist", @@ -214,7 +214,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -269,3 +269,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index 8c37b824342..93d86d32937 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -17,12 +17,12 @@ "'%-.64s'юг ╩Себ╦╕ ╬РаЖ ╦Ьгъ╫ю╢о╢ы. (©║╥╞╧Ьхё: %d)", "╪ЖгЮ ╣П╥╨еД╦╝╦╕ цёаЖ ╦Ьгъ╫ю╢о╢ы. (©║╥╞╧Ьхё: %d)", "х╜юою╩ юА╠ваЖ(lock) ╦Ьгъ╫ю╢о╢ы. (©║╥╞╧Ьхё: %d)", -"х╜юою╩ ©╜аЖ ╦Ьгъ╫ю╢о╢ы.: '%-.64s'. (©║╥╞╧Ьхё: %d)", +"х╜юою╩ ©╜аЖ ╦Ьгъ╫ю╢о╢ы.: '%-.64s' (©║╥╞╧Ьхё: %d)", "х╜юою╩ цёаЖ ╦Ьгъ╫ю╢о╢ы.: '%-.64s' (©║╥╞╧Ьхё: %d)", "'%-.64s'╣П╥╨еД╦╝╦╕ юпаЖ ╦Ьгъ╫ю╢о╢ы. (©║╥╞╧Ьхё: %d)", "'%-.64s'╣П╥╨еД╦╝╥н юл╣©гр ╪Ж ╬Ь╬З╫ю╢о╢ы. (©║╥╞╧Ьхё: %d)", "евюл╨М '%-.64s'©║╪╜ ╦╤аЖ╦╥ю╦╥н юпю╨ хд Record╟║ ╨╞╟Ф╣г╬З╫ю╢о╢ы.", -"Disk full (%s). ╢ы╦╔ ╩Г╤Вюл аЖ©О╤╖╠НаЖ ╠Б╢ы╦Ё╢о╢ы.....", +"Disk full (%s). ╢ы╦╔ ╩Г╤Вюл аЖ©О╤╖╠НаЖ ╠Б╢ы╦Ё╢о╢ы...", "╠Б╥огр ╪Ж ╬Ью╬╢о╢ы., евюл╨М '%-.64s'©║╪╜ аъ╨╧ е╟", "'%-.64s'╢щ╢б аъ ©║╥╞ (©║╥╞╧Ьхё: %d)", "'%-.64s'х╜юо юп╠Б ©║╥╞ (©║╥╞╧Ьхё: %d)", @@ -45,10 +45,10 @@ "Out of memory; mysqldЁ╙ ╤г╢ы╦╔ га╥н╪╪╪╜©║╪╜ ╩Г©К╟║╢игя ╦ч╦П╦╝╦╕ ╩Г©КгяаЖ ц╓е╘го╫ц©ю. ╦╦╬Ю ╠в╥╦аЖ ╬й╢ы╦И ulimit ╦М╥ию╩ юл©©Кго©╘ ╢У╦╧ю╨ ╦ч╦П╦╝╦╕ ╩Г©Кгр ╪Ж юж╣╣╥о го╟еЁ╙ ╫╨©р ╫╨фпюл╫╨╦╕ аУ╟║╫це╟╫ц©ю", "╢Г╫еюг ддг╩емюг хё╫╨ф╝юл╦╖ю╩ ╬Рю╩ ╪Ж ╬Ью╬╢о╢ы.", "Bad handshake", -"'%-.32s@%-.64s' ╩Г©Кюз╢б '%-.64s' ╣╔юле╦╨ёюл╫╨©║ а╒╠ыюл ╟е╨н ╣г╬З╫ю╢о╢ы.", -"'%-.32s@%-.64s' ╩Г©Кюз╢б а╒╠ыюл ╟е╨н ╣г╬З╫ю╢о╢ы. (Using password: %s)", +"'%-.32s'@'%-.64s' ╩Г©Кюз╢б '%-.64s' ╣╔юле╦╨ёюл╫╨©║ а╒╠ыюл ╟е╨н ╣г╬З╫ю╢о╢ы.", +"'%-.32s'@'%-.64s' ╩Г©Кюз╢б а╒╠ыюл ╟е╨н ╣г╬З╫ю╢о╢ы. (Using password: %s)", "╪╠ец╣х ╣╔юле╦╨ёюл╫╨╟║ ╬Ь╫ю╢о╢ы.", -"╦М╥и╬Н╟║ ╧╨аЖ ╦П╦ё╟з╬Н©Д....", +"╦М╥и╬Н╟║ ╧╨аЖ ╦П╦ё╟з╬Н©Д...", "д╝╥Ё '%-.64s'╢б Ён(Null)юл ╣г╦И ╬х╣к╢о╢ы. ", "╣╔юле╦╨ёюл╫╨ '%-.64s'╢б ╬к╪Ж ╬Ью╫", "евюл╨М '%-.64s'╢б юл╧л а╦юГгт", @@ -143,8 +143,8 @@ "regexp©║╪╜ '%-.64s'╟║ Ё╣╫ю╢о╢ы.", "Mixing of GROUP д╝╥Ёs (MIN(),MAX(),COUNT()...) with no GROUP д╝╥Ёs is illegal if there is no GROUP BY clause", "╩Г©Кюз '%-.32s' (хё╫╨ф╝ '%-.64s')╦╕ ю╖го©╘ а╓юг╣х ╠в╥╠ ╫бюню╨ ╬Ь╫ю╢о╢ы.", -"'%-.16s' ╦М╥ию╨ ╢ыю╫ ╩Г©Кюз©║╟т ╟е╨н╣г╬З╫ю╢о╢ы. : '%-.32s@%-.64s' for евюл╨М '%-.64s'", -"'%-.16s' ╦М╥ию╨ ╢ыю╫ ╩Г©Кюз©║╟т ╟е╨н╣г╬З╫ю╢о╢ы. : '%-.32s@%-.64s' for д╝╥Ё '%-.64s' in евюл╨М '%-.64s'", +"'%-.16s' ╦М╥ию╨ ╢ыю╫ ╩Г©Кюз©║╟т ╟е╨н╣г╬З╫ю╢о╢ы. : '%-.32s'@'%-.64s' for евюл╨М '%-.64s'", +"'%-.16s' ╦М╥ию╨ ╢ыю╫ ╩Г©Кюз©║╟т ╟е╨н╣г╬З╫ю╢о╢ы. : '%-.32s'@'%-.64s' for д╝╥Ё '%-.64s' in евюл╨М '%-.64s'", "юъ╦Ь╣х GRANT/REVOKE ╦М╥и. ╬Н╤╡ ╠г╦╝©м ╫бюнюл ╩Г©К╣г╬Н аЗ ╪Ж юж╢баЖ ╦ч╢╨╬Сю╩ ╨╦╫ц©ю.", "╫бюн(GRANT)ю╩ ю╖го©╘ ╩Г©Кгя ╩Г©КюзЁ╙ хё╫╨ф╝юг ╟╙╣Июл Ёй╧╚ ╠И╢о╢ы.", "евюл╨М '%-.64s.%s' ╢б а╦юГгоаЖ ╬й╫ю╢о╢ы.", @@ -212,7 +212,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -267,3 +267,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index 4e5bed92916..e9319246fc6 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -19,12 +19,12 @@ "Kan ikkje lese statusen til '%-.64s' (Feilkode: %d)", "Kan ikkje lese aktiv katalog(Feilkode: %d)", "Kan ikkje lЕse fila (Feilkode: %d)", -"Kan ikkje Еpne fila: '%-.64s'. (Feilkode: %d)", +"Kan ikkje Еpne fila: '%-.64s' (Feilkode: %d)", "Kan ikkje finne fila: '%-.64s' (Feilkode: %d)", "Kan ikkje lese katalogen '%-.64s' (Feilkode: %d)", "Kan ikkje skifte katalog til '%-.64s' (Feilkode: %d)", "Posten har vorte endra sidan den sist vart lesen '%-.64s'", -"Ikkje meir diskplass (%s). Ventar pЕ Е fЕ frigjort plass....", +"Ikkje meir diskplass (%s). Ventar pЕ Е fЕ frigjort plass...", "Kan ikkje skrive, flere like nyklar i tabellen '%-.64s'", "Feil ved lukking av '%-.64s' (Feilkode: %d)", "Feil ved lesing av '%-.64s' (Feilkode: %d)", @@ -37,8 +37,8 @@ "Tabell hЕndteraren for '%-.64s' har ikkje denne moglegheita", "Kan ikkje finne posten i '%-.64s'", "Feil informasjon i fila: '%-.64s'", -"Tabellen '%-.64s' har feil i nykkelfila, PrЬv Е reparere den", -"Gammel nykkelfil for tabellen '%-.64s'; Reparer den!", +"Tabellen '%-.64s' har feil i nykkelfila; prЬv Е reparere den", +"Gammel nykkelfil for tabellen '%-.64s'; reparer den!", "'%-.64s' er skrivetryggja", "Ikkje meir minne. Start pЕ nytt tenesten og prЬv igjen (trengte %d bytar)", "Ikkje meir sorteringsminne. Auk sorteringsminnet (sorteringsbffer storleik) for tenesten", @@ -47,8 +47,8 @@ "Tomt for trЕd plass/minne", "Kan ikkje fЕ tak i vertsnavn for di adresse", "Feil handtrykk (handshake)", -"Tilgang ikkje tillate for brukar: '%-.32s@%-.64s' til databasen '%-.64s' nekta", -"Tilgang ikke tillate for brukar: '%-.32s@%-.64s' (Brukar passord: %s)", +"Tilgang ikkje tillate for brukar: '%-.32s'@'%-.64s' til databasen '%-.64s' nekta", +"Tilgang ikke tillate for brukar: '%-.32s'@'%-.64s' (Brukar passord: %s)", "Ingen database vald", "Ukjent kommando", "Kolonne '%-.64s' kan ikkje vere null", @@ -145,8 +145,8 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'", "Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", "The host or user argument to GRANT is too long", "Table '%-.64s.%s' doesn't exist", @@ -214,7 +214,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -269,3 +269,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index 4b4f4e6a1f3..edb5854db7e 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -19,12 +19,12 @@ "Kan ikke lese statusen til '%-.64s' (Feilkode: %d)", "Kan ikke lese aktiv katalog(Feilkode: %d)", "Kan ikke lЕse fila (Feilkode: %d)", -"Kan ikke Еpne fila: '%-.64s'. (Feilkode: %d)", +"Kan ikke Еpne fila: '%-.64s' (Feilkode: %d)", "Kan ikke finne fila: '%-.64s' (Feilkode: %d)", "Kan ikke lese katalogen '%-.64s' (Feilkode: %d)", "Kan ikke skifte katalog til '%-.64s' (Feilkode: %d)", "Posten har blitt endret siden den ble lest '%-.64s'", -"Ikke mer diskplass (%s). Venter pЕ Е fЕ frigjort plass....", +"Ikke mer diskplass (%s). Venter pЕ Е fЕ frigjort plass...", "Kan ikke skrive, flere like nЬkler i tabellen '%-.64s'", "Feil ved lukking av '%-.64s' (Feilkode: %d)", "Feil ved lesing av '%-.64s' (Feilkode: %d)", @@ -37,8 +37,8 @@ "Tabell hЕndtereren for '%-.64s' har ikke denne muligheten", "Kan ikke finne posten i '%-.64s'", "Feil informasjon i filen: '%-.64s'", -"Tabellen '%-.64s' har feil i nЬkkelfilen, forsЬk Е reparer den", -"Gammel nЬkkelfil for tabellen '%-.64s'; Reparer den!", +"Tabellen '%-.64s' har feil i nЬkkelfilen; forsЬk Е reparer den", +"Gammel nЬkkelfil for tabellen '%-.64s'; reparer den!", "'%-.64s' er skrivebeskyttet", "Ikke mer minne. Star pЕ nytt tjenesten og prЬv igjen (trengte %d byter)", "Ikke mer sorteringsminne. ьk sorteringsminnet (sort buffer size) for tjenesten", @@ -47,8 +47,8 @@ "Tomt for trЕd plass/minne", "Kan ikke fЕ tak i vertsnavn for din adresse", "Feil hЕndtrykk (handshake)", -"Tilgang nektet for bruker: '%-.32s@%-.64s' til databasen '%-.64s' nektet", -"Tilgang nektet for bruker: '%-.32s@%-.64s' (Bruker passord: %s)", +"Tilgang nektet for bruker: '%-.32s'@'%-.64s' til databasen '%-.64s' nektet", +"Tilgang nektet for bruker: '%-.32s'@'%-.64s' (Bruker passord: %s)", "Ingen database valgt", "Ukjent kommando", "Kolonne '%-.64s' kan ikke vere null", @@ -145,8 +145,8 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'", "Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", "The host or user argument to GRANT is too long", "Table '%-.64s.%s' doesn't exist", @@ -214,7 +214,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -269,3 +269,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index cc710376052..27b4d0d661f 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -21,12 +21,12 @@ "Nie mo©na otrzymaФ statusu '%-.64s' (Kod bЁЙdu: %d)", "Nie mo©na rozpoznaФ aktualnego katalogu (Kod bЁЙdu: %d)", "Nie mo©na zablokowaФ pliku (Kod bЁЙdu: %d)", -"Nie mo©na otworzyФ pliku: '%-.64s'. (Kod bЁЙdu: %d)", +"Nie mo©na otworzyФ pliku: '%-.64s' (Kod bЁЙdu: %d)", "Nie mo©na znale╔Ф pliku: '%-.64s' (Kod bЁЙdu: %d)", "Nie mo©na odczytaФ katalogu '%-.64s' (Kod bЁЙdu: %d)", "Nie mo©na zmieniФ katalogu na '%-.64s' (Kod bЁЙdu: %d)", "Rekord zostaЁ zmieniony od ostaniego odczytania z tabeli '%-.64s'", -"Dysk peЁny (%s). Oczekiwanie na zwolnienie miejsca....", +"Dysk peЁny (%s). Oczekiwanie na zwolnienie miejsca...", "Nie mo©na zapisaФ, powtСrzone klucze w tabeli '%-.64s'", "BЁ?d podczas zamykania '%-.64s' (Kod bЁЙdu: %d)", "BЁ?d podczas odczytu pliku '%-.64s' (Kod bЁЙdu: %d)", @@ -39,8 +39,8 @@ "ObsЁuga tabeli '%-.64s' nie posiada tej opcji", "Nie mo©na znale╔Ф rekordu w '%-.64s'", "NiewЁa?ciwa informacja w pliku: '%-.64s'", -"NiewЁa?ciwy plik kluczy dla tabeli: '%-.64s'. SprСbuj go naprawiФ", -"Plik kluczy dla tabeli '%-.64s' jest starego typu; Napraw go!", +"NiewЁa?ciwy plik kluczy dla tabeli: '%-.64s'; sprСbuj go naprawiФ", +"Plik kluczy dla tabeli '%-.64s' jest starego typu; napraw go!", "'%-.64s' jest tylko do odczytu", "Zbyt maЁo pamiЙci. Uruchom ponownie demona i sprСbuj ponownie (potrzeba %d bajtСw)", "Zbyt maЁo pamiЙci dla sortowania. ZwiЙksz wielko?Ф bufora demona dla sortowania", @@ -49,8 +49,8 @@ "Zbyt maЁo miejsca/pamiЙci dla w?tku", "Nie mo©na otrzymaФ nazwy hosta dla twojego adresu", "ZЁy uchwyt(handshake)", -"Access denied for user: '%-.32s@%-.64s' to database '%-.64s'", -"Access denied for user: '%-.32s@%-.64s' (Using password: %s)", +"Access denied for user: '%-.32s'@'%-.64s' to database '%-.64s'", +"Access denied for user: '%-.32s'@'%-.64s' (Using password: %s)", "Nie wybrano ©adnej bazy danych", "Nieznana komenda", "Kolumna '%-.64s' nie mo©e byФ null", @@ -147,8 +147,8 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'", "Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", "The host or user argument to GRANT is too long", "Table '%-.64s.%s' doesn't exist", @@ -216,7 +216,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -271,3 +271,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 14a1e6763b4..60ace09ab33 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -35,8 +35,8 @@ "Manipulador de tabela para '%-.64s' nЦo tem esta opГЦo", "NЦo pode encontrar registro em '%-.64s'", "InformaГЦo incorreta no arquivo '%-.64s'", -"Arquivo de Мndice incorreto para tabela '%-.64s'. Tente reparА-lo", -"Arquivo de Мndice desatualizado para tabela '%-.64s'. Repare-o!", +"Arquivo de Мndice incorreto para tabela '%-.64s'; tente reparА-lo", +"Arquivo de Мndice desatualizado para tabela '%-.64s'; repare-o!", "Tabela '%-.64s' И somente para leitura", "Sem memСria. Reinicie o programa e tente novamente (necessita de %d bytes)", "Sem memСria para ordenaГЦo. Aumente tamanho do 'buffer' de ordenaГЦo", @@ -45,8 +45,8 @@ "Sem memСria. Verifique se o mysqld ou algum outro processo estА usando toda memСria disponМvel. Se nЦo, vocЙ pode ter que usar 'ulimit' para permitir ao mysqld usar mais memСria ou vocЙ pode adicionar mais Аrea de 'swap'", "NЦo pode obter nome do 'host' para seu endereГo", "NegociaГЦo de acesso falhou", -"Acesso negado para o usuАrio '%-.32s@%-.64s' ao banco de dados '%-.64s'", -"Acesso negado para o usuАrio '%-.32s@%-.64s' (senha usada: %s)", +"Acesso negado para o usuАrio '%-.32s'@'%-.64s' ao banco de dados '%-.64s'", +"Acesso negado para o usuАrio '%-.32s'@'%-.64s' (senha usada: %s)", "Nenhum banco de dados foi selecionado", "Comando desconhecido", "Coluna '%-.64s' nЦo pode ser vazia", @@ -143,8 +143,8 @@ "Obteve erro '%-.64s' em regexp", "Mistura de colunas agrupadas (com MIN(), MAX(), COUNT(), ...) com colunas nЦo agrupadas И ilegal, se nЦo existir uma clАusula de agrupamento (clАusula GROUP BY)", "NЦo existe tal permissЦo (grant) definida para o usuАrio '%-.32s' no 'host' '%-.64s'", -"Comando '%-.16s' negado para o usuАrio '%-.32s@%-.64s' na tabela '%-.64s'", -"Comando '%-.16s' negado para o usuАrio '%-.32s@%-.64s' na coluna '%-.64s', na tabela '%-.64s'", +"Comando '%-.16s' negado para o usuАrio '%-.32s'@'%-.64s' na tabela '%-.64s'", +"Comando '%-.16s' negado para o usuАrio '%-.32s'@'%-.64s' na coluna '%-.64s', na tabela '%-.64s'", "Comando GRANT/REVOKE ilegal. Por favor consulte no manual quais privilИgios podem ser usados.", "Argumento de 'host' ou de usuАrio para o GRANT И longo demais", "Tabela '%-.64s.%-.64s' nЦo existe", @@ -212,7 +212,7 @@ "DROP DATABASE nЦo permitido enquanto uma 'thread' estА mantendo um travamento global de leitura", "CREATE DATABASE nЦo permitido enquanto uma 'thread' estА mantendo um travamento global de leitura", "Argumentos errados para %s", -"NЦo И permitido a %-.32s@%-.64s criar novos usuАrios", +"NЦo И permitido a '%-.32s'@'%-.64s' criar novos usuАrios", "DefiniГЦo incorreta da tabela. Todas as tabelas contidas na junГЦo devem estar no mesmo banco de dados.", "Encontrado um travamento fatal (deadlock) quando tentava obter uma trava. Tente reiniciar a transaГЦo.", "O tipo de tabela utilizado nЦo suporta Мndices de texto completo (fulltext indexes)", @@ -267,3 +267,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index f8bbba75a9f..8824d64876a 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -21,12 +21,12 @@ "Nu pot sa obtin statusul lui '%-.64s' (Eroare: %d)", "Nu pot sa obtin directorul current (working directory) (Eroare: %d)", "Nu pot sa lock fisierul (Eroare: %d)", -"Nu pot sa deschid fisierul: '%-.64s'. (Eroare: %d)", +"Nu pot sa deschid fisierul: '%-.64s' (Eroare: %d)", "Nu pot sa gasesc fisierul: '%-.64s' (Eroare: %d)", "Nu pot sa citesc directorul '%-.64s' (Eroare: %d)", "Nu pot sa schimb directorul '%-.64s' (Eroare: %d)", "Cimpul a fost schimbat de la ultima citire a tabelei '%-.64s'", -"Hard-disk-ul este plin (%s). Astept sa se elibereze ceva spatiu....", +"Hard-disk-ul este plin (%s). Astept sa se elibereze ceva spatiu...", "Nu pot sa scriu (can't write), cheie duplicata in tabela '%-.64s'", "Eroare inchizind '%-.64s' (errno: %d)", "Eroare citind fisierul '%-.64s' (errno: %d)", @@ -39,8 +39,8 @@ "Handlerul tabelei pentru '%-.64s' nu are aceasta optiune", "Nu pot sa gasesc recordul in '%-.64s'", "Informatie incorecta in fisierul: '%-.64s'", -"Cheia fisierului incorecta pentru tabela: '%-.64s'. Incearca s-o repari", -"Cheia fisierului e veche pentru tabela '%-.64s'; Repar-o!", +"Cheia fisierului incorecta pentru tabela: '%-.64s'; incearca s-o repari", +"Cheia fisierului e veche pentru tabela '%-.64s'; repar-o!", "Tabela '%-.64s' e read-only", "Out of memory. Porneste daemon-ul din nou si incearca inca o data (e nevoie de %d bytes)", "Out of memory pentru sortare. Largeste marimea buffer-ului pentru sortare in daemon (sort buffer size)", @@ -49,8 +49,8 @@ "Out of memory; Verifica daca mysqld sau vreun alt proces foloseste toate memoria disponbila. Altfel, trebuie sa folosesi 'ulimit' ca sa permiti lui memoria disponbila. Altfel, trebuie sa folosesi 'ulimit' ca sa permiti lui mysqld sa foloseasca mai multa memorie ori adauga mai mult spatiu pentru swap (swap space)", "Nu pot sa obtin hostname-ul adresei tale", "Prost inceput de conectie (bad handshake)", -"Acces interzis pentru utilizatorul: '%-.32s@%-.64s' la baza de date '%-.64s'", -"Acces interzis pentru utilizatorul: '%-.32s@%-.64s' (Folosind parola: %s)", +"Acces interzis pentru utilizatorul: '%-.32s'@'%-.64s' la baza de date '%-.64s'", +"Acces interzis pentru utilizatorul: '%-.32s'@'%-.64s' (Folosind parola: %s)", "Nici o baza de data nu a fost selectata inca", "Comanda invalida", "Coloana '%-.64s' nu poate sa fie null", @@ -147,8 +147,8 @@ "Eroarea '%-.64s' obtinuta din expresia regulara (regexp)", "Amestecarea de coloane GROUP (MIN(),MAX(),COUNT()...) fara coloane GROUP este ilegala daca nu exista o clauza GROUP BY", "Nu exista un astfel de grant definit pentru utilzatorul '%-.32s' de pe host-ul '%-.64s'", -"Comanda %-.16s interzisa utilizatorului: '%-.32s@%-.64s' pentru tabela '%-.64s'", -"Comanda %-.16s interzisa utilizatorului: '%-.32s@%-.64s' pentru coloana '%-.64s' in tabela '%-.64s'", +"Comanda %-.16s interzisa utilizatorului: '%-.32s'@'%-.64s' pentru tabela '%-.64s'", +"Comanda %-.16s interzisa utilizatorului: '%-.32s'@'%-.64s' pentru coloana '%-.64s' in tabela '%-.64s'", "Comanda GRANT/REVOKE ilegala. Consultati manualul in privinta privilegiilor ce pot fi folosite.", "Argumentul host-ului sau utilizatorului pentru GRANT e prea lung", "Tabela '%-.64s.%-.64s' nu exista", @@ -216,7 +216,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -271,3 +271,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 1981e7e7a5a..ddfc0a8f7de 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -19,12 +19,12 @@ "Невозможно получить статусную информацию о '%-.64s' (ошибка: %d)", "Невозможно определить рабочий каталог (ошибка: %d)", "Невозможно поставить блокировку на файле (ошибка: %d)", -"Невозможно открыть файл: '%-.64s'. (ошибка: %d)", +"Невозможно открыть файл: '%-.64s' (ошибка: %d)", "Невозможно найти файл: '%-.64s' (ошибка: %d)", "Невозможно прочитать каталог '%-.64s' (ошибка: %d)", "Невозможно перейти в каталог '%-.64s' (ошибка: %d)", "Запись изменилась с момента последней выборки в таблице '%-.64s'", -"Диск заполнен. (%s). Ожидаем, пока кто-то не уберет после себя мусор....", +"Диск заполнен. (%s). Ожидаем, пока кто-то не уберет после себя мусор...", "Невозможно произвести запись, дублирующийся ключ в таблице '%-.64s'", "Ошибка при закрытии '%-.64s' (ошибка: %d)", "Ошибка чтения файла '%-.64s' (ошибка: %d)", @@ -47,8 +47,8 @@ "Недостаточно памяти; удостоверьтесь, что mysqld или какой-либо другой процесс не занимает всю доступную память. Если нет, то вы можете использовать ulimit, чтобы выделить для mysqld больше памяти, или увеличить объем файла подкачки", "Невозможно получить имя хоста для вашего адреса", "Некорректное приветствие", -"Для пользователя '%-.32s@%-.64s' доступ к базе данных '%-.64s' закрыт", -"Доступ закрыт для пользователя '%-.32s@%-.64s' (был использован пароль: %s)", +"Для пользователя '%-.32s'@'%-.64s' доступ к базе данных '%-.64s' закрыт", +"Доступ закрыт для пользователя '%-.32s'@'%-.64s' (был использован пароль: %s)", "База данных не выбрана", "Неизвестная команда коммуникационного протокола", "Столбец '%-.64s' не может принимать величину NULL", @@ -145,8 +145,8 @@ "Получена ошибка '%-.64s' от регулярного выражения", "Одновременное использование сгруппированных (GROUP) столбцов (MIN(),MAX(),COUNT(),...) с несгруппированными столбцами является некорректным, если в выражении есть GROUP BY", "Такие права не определены для пользователя '%-.32s' на хосте '%-.64s'", -"Команда %-.16s запрещена пользователю '%-.32s@%-.64s' для таблицы '%-.64s'", -"Команда %-.16s запрещена пользователю '%-.32s@%-.64s' для столбца '%-.64s' в таблице '%-.64s'", +"Команда %-.16s запрещена пользователю '%-.32s'@'%-.64s' для таблицы '%-.64s'", +"Команда %-.16s запрещена пользователю '%-.32s'@'%-.64s' для столбца '%-.64s' в таблице '%-.64s'", "Неверная команда GRANT или REVOKE. Обратитесь к документации, чтобы выяснить, какие привилегии можно использовать", "Слишком длинное имя пользователя/хоста для GRANT", "Таблица '%-.64s.%-.64s' не существует", @@ -214,7 +214,7 @@ "Не допускается DROP DATABASE, пока поток держит глобальную блокировку чтения", "Не допускается CREATE DATABASE, пока поток держит глобальную блокировку чтения", "Неверные параметры для %s", -"%-.32s@%-.64s не разрешается создавать новых пользователей", +"'%-.32s'@'%-.64s' не разрешается создавать новых пользователей", "Неверное определение таблицы; Все таблицы в MERGE должны принадлежать одной и той же базе данных", "Возникла тупиковая ситуация в процессе получения блокировки; Попробуйте перезапустить транзакцию", "Используемый тип таблиц не поддерживает полнотекстовых индексов", @@ -269,3 +269,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index e1583bbb791..9e2a37e4053 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -23,12 +23,12 @@ "Ne mogu da dobijem stanje file-a '%-.64s' (errno: %d)", "Ne mogu da dobijem trenutni direktorijum (errno: %d)", "Ne mogu da zakljuХam file (errno: %d)", -"Ne mogu da otvorim file: '%-.64s'. (errno: %d)", +"Ne mogu da otvorim file: '%-.64s' (errno: %d)", "Ne mogu da pronaПem file: '%-.64s' (errno: %d)", "Ne mogu da proХitam direktorijum '%-.64s' (errno: %d)", "Ne mogu da promenim direktorijum na '%-.64s' (errno: %d)", "Slog je promenjen od zadnjeg Хitanja tabele '%-.64s'", -"Disk je pun (%s). хekam nekoga da doПe i oslobodi ne to mesta....", +"Disk je pun (%s). хekam nekoga da doПe i oslobodi ne to mesta...", "Ne mogu da pi em po to postoji duplirani kljuХ u tabeli '%-.64s'", "Gre ka pri zatvaranju '%-.64s' (errno: %d)", "Gre ka pri Хitanju file-a '%-.64s' (errno: %d)", @@ -41,8 +41,8 @@ "Handler tabela za '%-.64s' nema ovu opciju", "Ne mogu da pronaПem slog u '%-.64s'", "Pogre na informacija u file-u: '%-.64s'", -"Pogre an key file za tabelu: '%-.64s'. Probajte da ga ispravite", -"Zastareo key file za tabelu '%-.64s'; Ispravite ga", +"Pogre an key file za tabelu: '%-.64s'; probajte da ga ispravite", +"Zastareo key file za tabelu '%-.64s'; ispravite ga", "Tabelu '%-.64s' je dozvoljeno samo Хitati", "Nema memorije. Restartujte MySQL server i probajte ponovo (potrebno je %d byte-ova)", "Nema memorije za sortiranje. PoveФajte veliХinu sort buffer-a MySQL server-u", @@ -51,8 +51,8 @@ "Nema memorije; Proverite da li MySQL server ili neki drugi proces koristi svu slobodnu memoriju. (UNIX: Ako ne, probajte da upotrebite 'ulimit' komandu da biste dozvolili daemon-u da koristi vi e memorije ili probajte da dodate vi e swap memorije)", "Ne mogu da dobijem ime host-a za va u IP adresu", "Lo poХetak komunikacije (handshake)", -"Pristup je zabranjen korisniku '%-.32s@%-.64s' za bazu '%-.64s'", -"Pristup je zabranjen korisniku '%-.32s@%-.64s' (koristi lozinku: '%s')", +"Pristup je zabranjen korisniku '%-.32s'@'%-.64s' za bazu '%-.64s'", +"Pristup je zabranjen korisniku '%-.32s'@'%-.64s' (koristi lozinku: '%s')", "Ni jedna baza nije selektovana", "Nepoznata komanda", "Kolona '%-.64s' ne mo·e biti NULL", @@ -149,8 +149,8 @@ "Funkcija regexp je vratila gre ku '%-.64s'", "Upotreba agregatnih funkcija (MIN(),MAX(),COUNT()...) bez 'GROUP' kolona je pogre na ako ne postoji 'GROUP BY' iskaz", "Ne postoji odobrenje za pristup korisniku '%-.32s' na host-u '%-.64s'", -"%-.16s komanda zabranjena za korisnika '%-.32s@%-.64s' za tabelu '%-.64s'", -"%-.16s komanda zabranjena za korisnika '%-.32s@%-.64s' za kolonu '%-.64s' iz tabele '%-.64s'", +"%-.16s komanda zabranjena za korisnika '%-.32s'@'%-.64s' za tabelu '%-.64s'", +"%-.16s komanda zabranjena za korisnika '%-.32s'@'%-.64s' za kolonu '%-.64s' iz tabele '%-.64s'", "Pogre na 'GRANT' odnosno 'REVOKE' komanda. Molim Vas pogledajte u priruХniku koje vrednosti mogu biti upotrebljene.", "Argument 'host' ili 'korisnik' prosleПen komandi 'GRANT' je predugaХak", "Tabela '%-.64s.%-.64s' ne postoji", @@ -218,7 +218,7 @@ "Komanda 'DROP DATABASE' nije dozvoljena dok thread globalno zakljuХava Хitanje podataka", "Komanda 'CREATE DATABASE' nije dozvoljena dok thread globalno zakljuХava Хitanje podataka", "Pogre ni argumenti prosleПeni na %s", -"Korisniku %-.32s@%-.64s nije dozvoljeno da kreira nove korisnike", +"Korisniku '%-.32s'@'%-.64s' nije dozvoljeno da kreira nove korisnike", "Pogre na definicija tabele; sve 'MERGE' tabele moraju biti u istoj bazi podataka", "Unakrsno zakljuХavanje pronaПeno kada sam poku ao da dobijem pravo na zakljuХavanje; Probajte da restartujete transakciju", "Upotrebljeni tip tabele ne podr·ava 'FULLTEXT' indekse", @@ -263,3 +263,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index c6fad79e15a..ed1d8cadb80 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -25,12 +25,12 @@ "NemТ╬em zisti╩ stav '%-.64s' (chybovЩ kСd: %d)", "NemТ╬em zisti╩ pracovnЩ adresАr (chybovЩ kСd: %d)", "NemТ╬em zamknЗ╩ sЗbor (chybovЩ kСd: %d)", -"NemТ╬em otvori╩ sЗbor: '%-.64s'. (chybovЩ kСd: %d)", +"NemТ╬em otvori╩ sЗbor: '%-.64s' (chybovЩ kСd: %d)", "NemТ╬em nАjs╩ sЗbor: '%-.64s' (chybovЩ kСd: %d)", "NemТ╬em ХМta╩ adresАr '%-.64s' (chybovЩ kСd: %d)", "NemТ╬em vojs╩ do adresАra '%-.64s' (chybovЩ kСd: %d)", "ZАznam bol zmenenЩ od poslednИho ХМtania v tabu╣ke '%-.64s'", -"Disk je plnЩ (%s), ХakАm na uvo╣nenie miesta....", +"Disk je plnЩ (%s), ХakАm na uvo╣nenie miesta...", "NemТ╬em zapМsa╩, duplikАt k╣ЗХa v tabu╣ke '%-.64s'", "Chyba pri zatvАranМ '%-.64s' (chybovЩ kСd: %d)", "Chyba pri ХМtanМ sЗboru '%-.64s' (chybovЩ kСd: %d)", @@ -43,8 +43,8 @@ "Obsluha tabu╣ky '%-.64s' nemА tento parameter", "NemТ╬em nАjs╩ zАznam v '%-.64s'", "NesprАvna informАcia v sЗbore: '%-.64s'", -"NesprАvny k╣ЗХ pre tabu╣ku '%-.64s'. PokЗste sa ho opravi╩", -"StarЩ k╣ЗХovЩ sЗbor pre '%-.64s'; Opravte ho!", +"NesprАvny k╣ЗХ pre tabu╣ku '%-.64s'; pokЗste sa ho opravi╩", +"StarЩ k╣ЗХovЩ sЗbor pre '%-.64s'; opravte ho!", "'%-.64s' is ХМta╩ only", "MАlo pamДti. Re╧tartujte daemona a skЗste znova (je potrebnЩch %d bytov)", "MАlo pamДti pre triedenie, zvЩ╧te ve╣kos╩ triediaceho bufferu", @@ -53,8 +53,8 @@ "MАlo miesta-pamДti pre vlАkno", "NemТ╬em zisti╩ meno hostite╣a pre va╧u adresu", "Chyba pri nadvДzovanМ spojenia", -"ZakАzanЩ prМstup pre u╬Мvate╣a: '%-.32s@%-.64s' k databАzi '%-.64s'", -"ZakАzanЩ prМstup pre u╬Мvate╣a: '%-.32s@%-.64s' (pou╬itie hesla: %s)", +"ZakАzanЩ prМstup pre u╬Мvate╣a: '%-.32s'@'%-.64s' k databАzi '%-.64s'", +"ZakАzanЩ prМstup pre u╬Мvate╣a: '%-.32s'@'%-.64s' (pou╬itie hesla: %s)", "Nebola vybranА databАza", "NeznАmy prМkaz", "Pole '%-.64s' nemТ╬e by╩ null", @@ -151,8 +151,8 @@ "Got error '%-.64s' from regexp", "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "There is no such grant defined for user '%-.32s' on host '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", -"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'", +"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'", "Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", "The host or user argument to GRANT is too long", "Table '%-.64s.%s' doesn't exist", @@ -220,7 +220,7 @@ "DROP DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE not allowed while thread is holding global read lock", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -275,3 +275,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 731e576fafd..5f3a2f38109 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -18,12 +18,12 @@ "No puedo obtener el estado de '%-.64s' (Error: %d)", "No puedo acceder al directorio (Error: %d)", "No puedo bloquear archivo: (Error: %d)", -"No puedo abrir archivo: '%-.64s'. (Error: %d)", +"No puedo abrir archivo: '%-.64s' (Error: %d)", "No puedo encontrar archivo: '%-.64s' (Error: %d)", "No puedo leer el directorio de '%-.64s' (Error: %d)", "No puedo cambiar al directorio de '%-.64s' (Error: %d)", "El registro ha cambiado desde la ultima lectura de la tabla '%-.64s'", -"Disco lleno (%s). Esperando para que se libere algo de espacio....", +"Disco lleno (%s). Esperando para que se libere algo de espacio...", "No puedo escribir, clave duplicada en la tabla '%-.64s'", "Error en el cierre de '%-.64s' (Error: %d)", "Error leyendo el fichero '%-.64s' (Error: %d)", @@ -36,8 +36,8 @@ "El manejador de la tabla de '%-.64s' no tiene esta opcion", "No puedo encontrar el registro en '%-.64s'", "Informacion erronea en el archivo: '%-.64s'", -"Clave de archivo erronea para la tabla: '%-.64s'. Intente repararlo", -"Clave de archivo antigua para la tabla '%-.64s'; Reparelo!", +"Clave de archivo erronea para la tabla: '%-.64s'; intente repararlo", +"Clave de archivo antigua para la tabla '%-.64s'; reparelo!", "'%-.64s' es de solo lectura", "Memoria insuficiente. Reinicie el demonio e intentelo otra vez (necesita %d bytes)", "Memoria de ordenacion insuficiente. Incremente el tamano del buffer de ordenacion", @@ -46,8 +46,8 @@ "Memoria/espacio de tranpaso insuficiente", "No puedo obtener el nombre de maquina de tu direccion", "Protocolo erroneo", -"Acceso negado para usuario: '%-.32s@%-.64s' para la base de datos '%-.64s'", -"Acceso negado para usuario: '%-.32s@%-.64s' (Usando clave: %s)", +"Acceso negado para usuario: '%-.32s'@'%-.64s' para la base de datos '%-.64s'", +"Acceso negado para usuario: '%-.32s'@'%-.64s' (Usando clave: %s)", "Base de datos no seleccionada", "Comando desconocido", "La columna '%-.64s' no puede ser nula", @@ -144,8 +144,8 @@ "Obtenido error '%-.64s' de regexp", "Mezcla de columnas GROUP (MIN(),MAX(),COUNT()...) con no GROUP columnas es ilegal si no hat la clausula GROUP BY", "No existe permiso definido para usuario '%-.32s' en el servidor '%-.64s'", -"%-.16s comando negado para usuario: '%-.32s@%-.64s' para tabla '%-.64s'", -"%-.16s comando negado para usuario: '%-.32s@%-.64s' para columna '%-.64s' en la tabla '%-.64s'", +"%-.16s comando negado para usuario: '%-.32s'@'%-.64s' para tabla '%-.64s'", +"%-.16s comando negado para usuario: '%-.32s'@'%-.64s' para columna '%-.64s' en la tabla '%-.64s'", "Ilegal comando GRANT/REVOKE. Por favor consulte el manual para cuales permisos pueden ser usados.", "El argumento para servidor o usuario para GRANT es demasiado grande", "Tabla '%-.64s.%s' no existe", @@ -213,7 +213,7 @@ "DROP DATABASE no permitido mientras un thread estА ejerciendo un bloqueo de lectura global", "CREATE DATABASE no permitido mientras un thread estА ejerciendo un bloqueo de lectura global", "Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", +"'%-.32s'@'%-.64s' is not allowed to create new users", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "The used table type doesn't support FULLTEXT indexes", @@ -268,3 +268,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 9e34dbb138a..d108618834e 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -17,12 +17,12 @@ "Kan inte lДsa filinformationen (stat) frЕn '%-.64s' (Felkod: %d)", "Kan inte inte lДsa aktivt bibliotek. (Felkod: %d)", "Kan inte lЕsa filen. (Felkod: %d)", -"Kan inte anvДnda '%-.64s'. (Felkod: %d)", -"Hittar inte filen '%-.64s'. (Felkod: %d)", -"Kan inte lДsa frЕn bibliotek '%-.64s'. (Felkod: %d)", -"Kan inte byta till '%-.64s'. (Felkod: %d)", +"Kan inte anvДnda '%-.64s' (Felkod: %d)", +"Hittar inte filen '%-.64s' (Felkod: %d)", +"Kan inte lДsa frЕn bibliotek '%-.64s' (Felkod: %d)", +"Kan inte byta till '%-.64s' (Felkod: %d)", "Posten har fЖrДndrats sedan den lДstes i register '%-.64s'", -"Disken Дr full (%s). VДntar tills det finns ledigt utrymme....", +"Disken Дr full (%s). VДntar tills det finns ledigt utrymme...", "Kan inte skriva, dubbel sЖknyckel i register '%-.64s'", "Fick fel vid stДngning av '%-.64s' (Felkod: %d)", "Fick fel vid lДsning av '%-.64s' (Felkod %d)", @@ -35,8 +35,8 @@ "Registrets databas har inte denna facilitet", "Hittar inte posten", "Felaktig fil: '%-.64s'", -"Fatalt fel vid hantering av register '%-.64s'. KЖr en reparation", -"Gammal nyckelfil '%-.64s'. Reparera registret", +"Fatalt fel vid hantering av register '%-.64s'; kЖr en reparation", +"Gammal nyckelfil '%-.64s'; reparera registret", "'%-.64s' Дr skyddad mot fЖrДndring", "OvДntat slut pЕ minnet, starta om programmet och fЖrsЖk pЕ nytt (BehЖvde %d bytes)", "Sorteringsbufferten rДcker inte till. Kontrollera startparametrarna", @@ -45,8 +45,8 @@ "Fick slut pЕ minnet. Kontrollera om mysqld eller nЕgon annan process anvДnder allt tillgДngligt minne. Om inte, fЖrsЖk anvДnda 'ulimit' eller allokera mera swap", "Kan inte hitta 'hostname' fЖr din adress", "Fel vid initiering av kommunikationen med klienten", -"AnvДndare '%-.32s@%-.64s' Дr ej berДttigad att anvДnda databasen %-.64s", -"AnvДndare '%-.32s@%-.64s' Дr ej berДttigad att logga in (AnvДnder lЖsen: %s)", +"AnvДndare '%-.32s'@'%-.64s' Дr ej berДttigad att anvДnda databasen %-.64s", +"AnvДndare '%-.32s'@'%-.64s' Дr ej berДttigad att logga in (AnvДnder lЖsen: %s)", "Ingen databas i anvДndning", "OkДnt commando", "Kolumn '%-.64s' fЕr inte vara NULL", @@ -143,8 +143,8 @@ "Fick fel '%-.64s' frЕn REGEXP", "Man fЕr ha bЕde GROUP-kolumner (MIN(),MAX(),COUNT()...) och fДlt i en frЕga om man inte har en GROUP BY-del", "Det finns inget privilegium definierat fЖr anvДndare '%-.32s' pЕ '%-.64s'", -"%-.16s ej tillЕtet fЖr '%-.32s@%-.64s' fЖr tabell '%-.64s'", -"%-.16s ej tillЕtet fЖr '%-.32s@%-.64s' fЖr kolumn '%-.64s' i tabell '%-.64s'", +"%-.16s ej tillЕtet fЖr '%-.32s'@'%-.64s' fЖr tabell '%-.64s'", +"%-.16s ej tillЕtet fЖr '%-.32s'@'%-.64s' fЖr kolumn '%-.64s' i tabell '%-.64s'", "Felaktigt GRANT-privilegium anvДnt", "Felaktigt maskinnamn eller anvДndarnamn anvДnt med GRANT", "Det finns ingen tabell som heter '%-.64s.%s'", @@ -212,7 +212,7 @@ "DROP DATABASE Дr inte tillЕtet nДr man har ett globalt lДslЕs", "CREATE DATABASE Дr inte tillЕtet nДr man har ett globalt lДslЕs", "Felaktiga argument till %s", -"%-.32s@%-.64s har inte rДttighet att skapa nya anvДndare", +"'%-.32s'@'%-.64s' har inte rДttighet att skapa nya anvДndare", "Felaktig tabelldefinition; alla tabeller i en MERGE-tabell mЕste vara i samma databas", "Fick 'DEADLOCK' vid lЕsfЖrsЖk av block/rad. FЖrsЖk att starta om transaktionen", "Tabelltypen har inte hantering av FULLTEXT-index", @@ -267,3 +267,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index adbb35dc7c0..96b9f40feac 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -40,7 +40,7 @@ "Дескриптор таблиц╕ '%-.64s' не ма╓ ц╕╓╖ властивост╕", "Не можу записати у '%-.64s'", "Хибна ╕нформац╕я у файл╕: '%-.64s'", -"Хибний файл ключей для таблиц╕: '%-.64s'. Спробуйте його в╕дновити", +"Хибний файл ключей для таблиц╕: '%-.64s'; Спробуйте його в╕дновити", "Старий файл ключей для таблиц╕ '%-.64s'; В╕днов╕ть його!", "Таблиця '%-.64s' т╕льки для читання", "Брак пам'ят╕. Рестартуйте сервер та спробуйте знову (потр╕бно %d байт╕в)", @@ -50,8 +50,8 @@ "Брак пам'ят╕; Перев╕рте чи mysqld або як╕сь ╕нш╕ процеси використовують усю доступну пам'ять. Як н╕, то ви можете скористатися 'ulimit', аби дозволити mysqld використовувати б╕льше пам'ят╕ або ви можете додати б╕льше м╕сця п╕д свап", "Не можу визначити ╕м'я хосту для вашо╖ адреси", "Нев╕рна установка зв'язку", -"Доступ заборонено для користувача: '%-.32s@%-.64s' до бази данних '%-.64s'", -"Доступ заборонено для користувача: '%-.32s@%-.64s' (Використано пароль: %s)", +"Доступ заборонено для користувача: '%-.32s'@'%-.64s' до бази данних '%-.64s'", +"Доступ заборонено для користувача: '%-.32s'@'%-.64s' (Використано пароль: %s)", "Базу данних не вибрано", "Нев╕дома команда", "Стовбець '%-.64s' не може бути нульовим", @@ -148,8 +148,8 @@ "Отримано помилку '%-.64s' в╕д регулярного виразу", "Зм╕шування GROUP стовбц╕в (MIN(),MAX(),COUNT()...) з не GROUP стовбцями ╓ забороненим, якщо не ма╓ GROUP BY", "Повноважень не визначено для користувача '%-.32s' з хосту '%-.64s'", -"%-.16s команда заборонена користувачу: '%-.32s@%-.64s' у таблиц╕ '%-.64s'", -"%-.16s команда заборонена користувачу: '%-.32s@%-.64s' для стовбця '%-.64s' у таблиц╕ '%-.64s'", +"%-.16s команда заборонена користувачу: '%-.32s'@'%-.64s' у таблиц╕ '%-.64s'", +"%-.16s команда заборонена користувачу: '%-.32s'@'%-.64s' для стовбця '%-.64s' у таблиц╕ '%-.64s'", "Хибна GRANT/REVOKE команда. Прочитайте документац╕ю стосовно того, як╕ права можна використовувати.", "Аргумент host або user для GRANT задовгий", "Таблиця '%-.64s.%-.64s' не ╕сну╓", @@ -217,7 +217,7 @@ "DROP DATABASE не дозволено доки г╕лка перебува╓ п╕д загальним блокуванням читання", "CREATE DATABASE не дозволено доки г╕лка перебува╓ п╕д загальним блокуванням читання", "Хибний аргумент для %s", -"Користувачу %-.32s@%-.64s не дозволено створювати нових користувач╕в", +"Користувачу '%-.32s'@'%-.64s' не дозволено створювати нових користувач╕в", "Incorrect table definition; all MERGE tables must be in the same database", "Deadlock found when trying to get lock; Try restarting transaction", "Використаний тип таблиц╕ не п╕дтриму╓ FULLTEXT ╕ндекс╕в", @@ -272,3 +272,4 @@ "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", "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'", diff --git a/sql/slave.cc b/sql/slave.cc index c45c11f8bef..37979576b73 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1565,6 +1565,48 @@ int register_slave_on_master(MYSQL* mysql) } +/* + Builds a String from a HASH of TABLE_RULE_ENT. Cannot be used for any other + hash, as it assumes that the hash entries are TABLE_RULE_ENT. + + SYNOPSIS + table_rule_ent_hash_to_str() + s pointer to the String to fill + h pointer to the HASH to read + + RETURN VALUES + none +*/ + +void table_rule_ent_hash_to_str(String* s, HASH* h) +{ + s->length(0); + for (uint i=0 ; i < h->records ; i++) + { + TABLE_RULE_ENT* e= (TABLE_RULE_ENT*) hash_element(h, i); + if (s->length()) + s->append(','); + s->append(e->db,e->key_len); + } +} + +/* + Mostly the same thing as above +*/ + +void table_rule_ent_dynamic_array_to_str(String* s, DYNAMIC_ARRAY* a) +{ + s->length(0); + for (uint i=0 ; i < a->elements ; i++) + { + TABLE_RULE_ENT* e; + get_dynamic(a, (gptr)&e, i); + if (s->length()) + s->append(','); + s->append(e->db,e->key_len); + } +} + int show_master_info(THD* thd, MASTER_INFO* mi) { // TODO: fix this for multi-master @@ -1594,6 +1636,10 @@ int show_master_info(THD* thd, MASTER_INFO* mi) field_list.push_back(new Item_empty_string("Slave_SQL_Running", 3)); field_list.push_back(new Item_empty_string("Replicate_do_db", 20)); field_list.push_back(new Item_empty_string("Replicate_ignore_db", 20)); + field_list.push_back(new Item_empty_string("Replicate_do_table", 20)); + field_list.push_back(new Item_empty_string("Replicate_ignore_table", 23)); + field_list.push_back(new Item_empty_string("Replicate_wild_do_table", 24)); + field_list.push_back(new Item_empty_string("Replicate_wild_ignore_table", 28)); field_list.push_back(new Item_return_int("Last_errno", 4, MYSQL_TYPE_LONG)); field_list.push_back(new Item_empty_string("Last_error", 20)); field_list.push_back(new Item_return_int("Skip_counter", 10, @@ -1626,6 +1672,23 @@ int show_master_info(THD* thd, MASTER_INFO* mi) protocol->store(mi->rli.slave_running ? "Yes":"No", &my_charset_bin); protocol->store(&replicate_do_db); protocol->store(&replicate_ignore_db); + /* + We can't directly use some protocol->store for + replicate_*_table, + as Protocol doesn't know the TABLE_RULE_ENT struct. + We first build Strings and then pass them to protocol->store. + */ + char buf[256]; + String tmp(buf, sizeof(buf), &my_charset_bin); + table_rule_ent_hash_to_str(&tmp, &replicate_do_table); + protocol->store(&tmp); + table_rule_ent_hash_to_str(&tmp, &replicate_ignore_table); + protocol->store(&tmp); + table_rule_ent_dynamic_array_to_str(&tmp, &replicate_wild_do_table); + protocol->store(&tmp); + table_rule_ent_dynamic_array_to_str(&tmp, &replicate_wild_ignore_table); + protocol->store(&tmp); + protocol->store((uint32) mi->rli.last_slave_errno); protocol->store(mi->rli.last_slave_error, &my_charset_bin); protocol->store((uint32) mi->rli.slave_skip_counter); diff --git a/sql/slave.h b/sql/slave.h index 429456eb0bb..668fff52d08 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -398,6 +398,8 @@ int mysql_table_dump(THD* thd, const char* db, int fetch_master_table(THD* thd, const char* db_name, const char* table_name, MASTER_INFO* mi, MYSQL* mysql); +void table_rule_ent_hash_to_str(String* s, HASH* h); +void table_rule_ent_dynamic_array_to_str(String* s, DYNAMIC_ARRAY* a); int show_master_info(THD* thd, MASTER_INFO* mi); int show_binlog_info(THD* thd); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 1bdca7167e8..598ff153cad 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -590,7 +590,6 @@ ulong acl_getroot(THD *thd, const char *host, const char *ip, const char *user, /* OK. User found and password checked continue validation */ -#ifdef HAVE_OPENSSL { Vio *vio=thd->net.vio; /* @@ -604,6 +603,7 @@ ulong acl_getroot(THD *thd, const char *host, const char *ip, const char *user, case SSL_TYPE_NONE: /* SSL is not required to connect */ user_access=acl_user->access; break; +#ifdef HAVE_OPENSSL case SSL_TYPE_ANY: /* Any kind of SSL is good enough */ if (vio_type(vio) == VIO_TYPE_SSL) user_access=acl_user->access; @@ -686,11 +686,17 @@ ulong acl_getroot(THD *thd, const char *host, const char *ip, const char *user, free(ptr); } break; +#else /* HAVE_OPENSSL */ + default: + /* + If we don't have SSL but SSL is required for this user the + authentication should fail. + */ + break; +#endif /* HAVE_OPENSSL */ } } -#else /* HAVE_OPENSSL */ - user_access=acl_user->access; -#endif /* HAVE_OPENSSL */ + *mqh=acl_user->user_resource; if (!acl_user->user) *priv_user=(char*) ""; // Change to anonymous user /* purecov: inspected */ @@ -877,7 +883,7 @@ static void acl_insert_db(const char *user, const char *host, const char *db, *****************************************************************************/ ulong acl_get(const char *host, const char *ip, const char *bin_ip, - const char *user, const char *db) + const char *user, const char *db, my_bool db_is_pattern) { ulong host_access,db_access; uint i,key_length; @@ -911,7 +917,7 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip, { if (compare_hostname(&acl_db->host,host,ip)) { - if (!acl_db->db || !wild_compare(db,acl_db->db)) + if (!acl_db->db || !wild_compare(db,acl_db->db,db_is_pattern)) { db_access=acl_db->access; if (acl_db->host.hostname) @@ -933,7 +939,7 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip, ACL_HOST *acl_host=dynamic_element(&acl_hosts,i,ACL_HOST*); if (compare_hostname(&acl_host->host,host,ip)) { - if (!acl_host->db || !wild_compare(db,acl_host->db)) + if (!acl_host->db || !wild_compare(db,acl_host->db,db_is_pattern)) { host_access=acl_host->access; // Fully specified. Take it break; @@ -1271,7 +1277,7 @@ static bool compare_hostname(const acl_host_and_ip *host, const char *hostname, return (!host->hostname || (hostname && !wild_case_compare(&my_charset_latin1, hostname,host->hostname)) || - (ip && !wild_compare(ip,host->hostname))); + (ip && !wild_compare(ip,host->hostname,0))); } @@ -1331,7 +1337,7 @@ static bool test_if_create_new_users(THD *thd) tl.db= (char*) "mysql"; tl.real_name= (char*) "user"; db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, - thd->priv_user, tl.db); + thd->priv_user, tl.db, 0); if (!(db_access & INSERT_ACL)) { if (check_grant(thd,INSERT_ACL,&tl,0,1)) diff --git a/sql/sql_acl.h b/sql/sql_acl.h index e6c6771253c..ca976f43999 100644 --- a/sql/sql_acl.h +++ b/sql/sql_acl.h @@ -134,7 +134,7 @@ my_bool acl_init(THD *thd, bool dont_read_acl_tables); void acl_reload(THD *thd); void acl_free(bool end=0); ulong acl_get(const char *host, const char *ip, const char *bin_ip, - const char *user, const char *db); + const char *user, const char *db, my_bool db_is_pattern); ulong acl_getroot(THD *thd, const char *host, const char *ip, const char *user, const char *password,const char *scramble, char **priv_user, char *priv_host, diff --git a/sql/sql_base.cc b/sql/sql_base.cc index c51dc65ac11..05f6827951b 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -147,7 +147,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *wild) if (wild) { strxmov(name,entry->table_cache_key,".",entry->real_name,NullS); - if (wild_compare(name,wild)) + if (wild_compare(name,wild,0)) continue; } @@ -2372,7 +2372,11 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors) while ((field=(Item_field*) f++)) { value=v++; - if (value->save_in_field(field->field, 0) > 0 && !ignore_errors) + Field *rfield= field->field; + TABLE *table= rfield->table; + if (rfield == table->next_number_field) + table->auto_increment_field_not_null= true; + if (value->save_in_field(rfield, 0) > 0 && !ignore_errors) DBUG_RETURN(1); } DBUG_RETURN(0); @@ -2390,6 +2394,9 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors) while ((field = *ptr++)) { value=v++; + TABLE *table= field->table; + if (field == table->next_number_field) + table->auto_increment_field_not_null= true; if (value->save_in_field(field, 0) == 1 && !ignore_errors) DBUG_RETURN(1); } diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index ac6471e794c..767a1a46dcc 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1422,10 +1422,10 @@ ulong Query_cache::init_cache() DUMP(this); - VOID(hash_init(&queries,system_charset_info,def_query_hash_size, 0, 0, + VOID(hash_init(&queries, &my_charset_bin, def_query_hash_size, 0, 0, query_cache_query_get_key, 0, 0)); #ifndef FN_NO_CASE_SENCE - VOID(hash_init(&tables,system_charset_info,def_table_hash_size, 0, 0, + VOID(hash_init(&tables, &my_charset_bin, def_table_hash_size, 0, 0, query_cache_table_get_key, 0, 0)); #else // windows, OS/2 or other case insensitive file names work around diff --git a/sql/sql_db.cc b/sql/sql_db.cc index f8cf1eee0c5..34e81402dd0 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -127,7 +127,7 @@ static bool load_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) { if (!(create->table_charset=get_charset_by_name(pos+1, MYF(0)))) { - sql_print_error(ER(ER_UNKNOWN_CHARACTER_SET),pos+1); + sql_print_error(ER(ER_UNKNOWN_COLLATION),pos+1); } } } @@ -591,7 +591,7 @@ bool mysql_change_db(THD *thd, const char *name) db_access=DB_ACLS; else db_access= (acl_get(thd->host,thd->ip,(char*) &thd->remote.sin_addr, - thd->priv_user,dbname) | + thd->priv_user,dbname,0) | thd->master_access); if (!(db_access & DB_ACLS) && (!grant_option || check_grant_db(thd,dbname))) { @@ -625,8 +625,8 @@ bool mysql_change_db(THD *thd, const char *name) strmov(path+unpack_dirname(path,path), MY_DB_OPT_FILE); load_db_opt(thd, path, &create); - thd->db_charset= create.table_charset ? - create.table_charset : + thd->db_charset= create.table_charset ? + create.table_charset : global_system_variables.character_set_database; thd->variables.character_set_database= thd->db_charset; DBUG_RETURN(0); @@ -644,18 +644,18 @@ int mysqld_show_create_db(THD *thd, char *dbname, uint create_options = create_info ? create_info->options : 0; Protocol *protocol=thd->protocol; DBUG_ENTER("mysql_show_create_db"); - + if (check_db_name(dbname)) { net_printf(thd,ER_WRONG_DB_NAME, dbname); DBUG_RETURN(1); } - + if (test_all_bits(thd->master_access,DB_ACLS)) db_access=DB_ACLS; else db_access= (acl_get(thd->host,thd->ip,(char*) &thd->remote.sin_addr, - thd->priv_user,dbname) | + thd->priv_user,dbname,0) | thd->master_access); if (!(db_access & DB_ACLS) && (!grant_option || check_grant_db(thd,dbname))) { @@ -669,7 +669,7 @@ int mysqld_show_create_db(THD *thd, char *dbname, dbname); DBUG_RETURN(1); } - + (void) sprintf(path,"%s/%s",mysql_data_home, dbname); length=unpack_dirname(path,path); // Convert if not unix found_libchar= 0; diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index c61e8f42343..9ed26bc4062 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -126,7 +126,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, item_list= select_cursor->item_list; select_cursor->with_wild= 0; if (setup_ref_array(thd, &select_cursor->ref_pointer_array, - (item_list.elements + select_cursor->select_items + + (item_list.elements + + select_cursor->select_n_having_items + select_cursor->order_list.elements + select_cursor->group_list.elements)) || setup_fields(thd, select_cursor->ref_pointer_array, first_table, diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index a4b4aa7f7b3..84a4ec4ed5b 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -455,6 +455,13 @@ int yylex(void *arg, void *yythd) } case MY_LEX_CHAR: // Unknown or single char token case MY_LEX_SKIP: // This should not happen + if (c == '-' && yyPeek() == '-' && + (my_isspace(cs,yyPeek2()) || + my_iscntrl(cs,yyPeek2()))) + { + state=MY_LEX_COMMENT; + break; + } yylval->lex_str.str=(char*) (lex->ptr=lex->tok_start);// Set to first chr yylval->lex_str.length=1; c=yyGet(); @@ -545,7 +552,7 @@ int yylex(void *arg, void *yythd) /* Note: "SELECT _bla AS 'alias'" _bla should be considered as a IDENT if charset haven't been found. - So we don't use MYF(MY_WME) with get_charset_by_name to avoid + So we don't use MYF(MY_WME) with get_charset_by_csname to avoid producing an error. */ @@ -694,37 +701,6 @@ int yylex(void *arg, void *yythd) lex->next_state= MY_LEX_START; return(IDENT); } - case MY_LEX_SIGNED_NUMBER: // Incomplete signed number - if (prev_state == MY_LEX_OPERATOR_OR_IDENT) - { - if (c == '-' && yyPeek() == '-' && - (my_isspace(cs,yyPeek2()) || - my_iscntrl(cs,yyPeek2()))) - state=MY_LEX_COMMENT; - else - state= MY_LEX_CHAR; // Must be operator - break; - } - if (!my_isdigit(cs,c=yyGet()) || yyPeek() == 'x') - { - if (c != '.') - { - if (c == '-' && my_isspace(cs,yyPeek())) - state= MY_LEX_COMMENT; - else - state= MY_LEX_CHAR; // Return sign as single char - break; - } - yyUnget(); // Fix for next loop - } - while (my_isdigit(cs,c=yyGet())) ; // Incomplete real or int number - if ((c == 'e' || c == 'E') && - (yyPeek() == '+' || yyPeek() == '-' || my_isdigit(cs,yyPeek()))) - { // Real number - yyUnget(); - c= '.'; // Fool next test - } - // fall through case MY_LEX_INT_OR_REAL: // Compleat int or incompleat real if (c != '.') { // Found complete integer number. @@ -983,7 +959,7 @@ void st_select_lex_node::init_select() order_list.next= (byte**) &order_list.first; select_limit= HA_POS_ERROR; offset_limit= 0; - select_items= 0; + select_n_having_items= 0; with_sum_func= 0; parsing_place= SELECT_LEX_NODE::NO_MATTER; } @@ -1010,7 +986,8 @@ void st_select_lex::init_query() join= 0; where= 0; olap= UNSPECIFIED_OLAP_TYPE; - insert_select= having_fix_field= 0; + having_fix_field= 0; + resolve_mode= NOMATTER_MODE; with_wild= 0; } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index e8fff47d7f5..207e6f7b031 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -206,8 +206,12 @@ public: ha_rows select_limit, offset_limit; /* LIMIT clause parameters */ // Arrays of pointers to top elements of all_fields list Item **ref_pointer_array; - - uint select_items; /* number of items in select_list */ + /* + number of items in select_list and HAVING clause used to get number + bigger then can be number of entries that will be added to all item + list during split_sum_func + */ + uint select_n_having_items; uint cond_count; /* number of arguments of and/or/xor in where/having */ enum_parsing_place parsing_place; /* where we are parsing expression */ bool with_sum_func; /* sum function indicator */ @@ -362,14 +366,27 @@ public: bool braces; /* SELECT ... UNION (SELECT ... ) <- this braces */ /* TRUE when having fix field called in processing of this SELECT */ bool having_fix_field; + /* - TRUE for primary st_select_lex structure of simple INSERT/REPLACE + SELECT for SELECT command st_select_lex. Used to privent scaning + item_list of non-SELECT st_select_lex (no sense find to finding + reference in it (all should be in tables, it is dangerouse due + to order of fix_fields calling for non-SELECTs commands (item list + can be not fix_fieldsd)). This value will be assigned for + primary select (sql_yac.yy) and for any subquery and + UNION SELECT (sql_parse.cc mysql_new_select()) + + + INSERT for primary st_select_lex structure of simple INSERT/REPLACE (used for name resolution, see Item_fiels & Item_ref fix_fields, FALSE for INSERT/REPLACE ... SELECT, because it's st_select_lex->table_list will be preprocessed (first table removed) before passing to handle_select) + + NOMATTER for other */ - bool insert_select; + enum {NOMATTER_MODE, SELECT_MODE, INSERT_MODE} resolve_mode; + void init_query(); void init_select(); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index abf809c0c5e..76d1c512848 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -549,6 +549,7 @@ check_connections(THD *thd) char *end, *user, *passwd, *db; char prepared_scramble[SCRAMBLE41_LENGTH+4]; /* Buffer for scramble&hash */ ACL_USER* cached_user=NULL; /* Initialise to NULL for first stage */ + String convdb; DBUG_PRINT("info",("New connection received on %s", vio_description(net->vio))); @@ -724,7 +725,12 @@ check_connections(THD *thd) db=0; using_password= test(passwd[0]); if (thd->client_capabilities & CLIENT_CONNECT_WITH_DB) + { db=strend(passwd)+1; + convdb.copy(db, strlen(db), + thd->variables.character_set_client, system_charset_info); + db= convdb.c_ptr(); + } /* We can get only old hash at this point */ if (using_password && strlen(passwd) != SCRAMBLE_LENGTH) @@ -1125,10 +1131,15 @@ bool dispatch_command(enum enum_server_command command, THD *thd, thd->lex.select_lex.options=0; // We store status here switch (command) { case COM_INIT_DB: - statistic_increment(com_stat[SQLCOM_CHANGE_DB],&LOCK_status); - if (!mysql_change_db(thd,packet)) - mysql_log.write(thd,command,"%s",thd->db); - break; + { + String convname; + statistic_increment(com_stat[SQLCOM_CHANGE_DB],&LOCK_status); + convname.copy(packet, strlen(packet), + thd->variables.character_set_client, system_charset_info); + if (!mysql_change_db(thd,convname.c_ptr())) + mysql_log.write(thd,command,"%s",thd->db); + break; + } #ifndef EMBEDDED_LIBRARY case COM_REGISTER_SLAVE: { @@ -3262,7 +3273,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, if (!(thd->master_access & SELECT_ACL) && (db && (!thd->db || strcmp(db,thd->db)))) db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, - thd->priv_user, db); /* purecov: inspected */ + thd->priv_user, db, test(want_access & GRANT_ACL)); *save_priv=thd->master_access | db_access; DBUG_RETURN(FALSE); } @@ -3282,7 +3293,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, if (db && (!thd->db || strcmp(db,thd->db))) db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, - thd->priv_user, db); /* purecov: inspected */ + thd->priv_user, db, test(want_access & GRANT_ACL)); else db_access=thd->db_access; // Remove SHOW attribute and access rights we already have @@ -3558,6 +3569,7 @@ mysql_new_select(LEX *lex, bool move_down) unit->link_prev= 0; unit->return_to= lex->current_select; select_lex->include_down(unit); + // TODO: assign resolve_mode for fake subquery after merging with new tree } else select_lex->include_neighbour(lex->current_select); @@ -3565,6 +3577,7 @@ mysql_new_select(LEX *lex, bool move_down) select_lex->master_unit()->global_parameters= select_lex; select_lex->include_global((st_select_lex_node**)&lex->all_selects_list); lex->current_select= select_lex; + select_lex->resolve_mode= SELECT_LEX::SELECT_MODE; return 0; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 0aa7e67a12b..7803e87572d 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -294,7 +294,8 @@ JOIN::prepare(Item ***rref_pointer_array, fields_list, &all_fields, wild_num))) || setup_ref_array(thd, rref_pointer_array, (fields_list.elements + - select_lex->select_items + + select_lex-> + select_n_having_items + og_num)) || setup_fields(thd, (*rref_pointer_array), tables_list, fields_list, 1, &all_fields, 1) || diff --git a/sql/sql_select.h b/sql/sql_select.h index 7de9007369e..76960876158 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -259,7 +259,7 @@ class JOIN :public Sql_alloc bool rollup_init(); bool rollup_make_fields(List<Item> &all_fields, List<Item> &fields, Item_sum ***func); - int JOIN::rollup_send_data(uint idx); + int rollup_send_data(uint idx); }; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index e8cb59e387e..9084269f486 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -75,7 +75,7 @@ mysqld_show_dbs(THD *thd,const char *wild) { if (thd->master_access & (DB_ACLS | SHOW_DB_ACL) || acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, - thd->priv_user, file_name) || + thd->priv_user, file_name,0) || (grant_option && !check_grant_db(thd, file_name))) { protocol->prepare_for_resend(); @@ -415,7 +415,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path, #endif { if (file->name[0] == '.' || !MY_S_ISDIR(file->mystat.st_mode) || - (wild && wild_compare(file->name,wild))) + (wild && wild_compare(file->name,wild,0))) continue; } } @@ -433,7 +433,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path, if (wild_case_compare(system_charset_info,file->name,wild)) continue; } - else if (wild_compare(file->name,wild)) + else if (wild_compare(file->name,wild,0)) continue; } } @@ -1031,7 +1031,7 @@ store_create_info(THD *thd, TABLE *table, String *packet) my_bool limited_mysql_mode= (thd->variables.sql_mode & (MODE_NO_FIELD_OPTIONS | MODE_MYSQL323 | MODE_MYSQL40)) != 0; - + DBUG_ENTER("store_create_info"); DBUG_PRINT("enter",("table: %s",table->real_name)); diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 724cc658b15..5f3fbadc99a 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -159,7 +159,8 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result, item_list= select_cursor->item_list; select_cursor->with_wild= 0; if (setup_ref_array(thd, &select_cursor->ref_pointer_array, - (item_list.elements + select_cursor->select_items + + (item_list.elements + + select_cursor->select_n_having_items + select_cursor->order_list.elements + select_cursor->group_list.elements)) || setup_fields(thd, select_cursor->ref_pointer_array, first_table, diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e475fa1d052..e028889f960 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -74,7 +74,7 @@ inline Item *or_or_concat(THD *thd, Item* A, Item* B) enum row_type row_type; enum ha_rkey_function ha_rkey_mode; enum enum_tx_isolation tx_isolation; - enum Item_cast cast_type; + enum Cast_target cast_type; enum Item_udftype udf_type; CHARSET_INFO *charset; thr_lock_type lock_type; @@ -547,7 +547,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token SUBJECT_SYM %token CIPHER_SYM -%token HELP %token BEFORE_SYM %left SET_VAR %left OR_OR_CONCAT OR @@ -1412,7 +1411,7 @@ collation_name: { if (!($$=get_charset_by_name($1.str,MYF(0)))) { - net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,$1.str); + net_printf(YYTHD,ER_UNKNOWN_COLLATION,$1.str); YYABORT; } }; @@ -1951,7 +1950,12 @@ opt_ignore_leaves: select: - select_init { Lex->sql_command=SQLCOM_SELECT; }; + select_init + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SELECT; + lex->select_lex.resolve_mode= SELECT_LEX::SELECT_MODE; + }; /* Need select_init2 for subselects. */ select_init: @@ -2334,7 +2338,8 @@ simple_expr: YYABORT; } | sum_expr - | '-' expr %prec NEG { $$= new Item_func_neg($2); } + | '+' expr %prec NEG { $$= $2; } + | '-' expr %prec NEG { $$= new Item_func_neg($2); } | '~' expr %prec NEG { $$= new Item_func_bit_neg($2); } | NOT expr %prec NEG { $$= new Item_func_not($2); } | '!' expr %prec NEG { $$= new Item_func_not($2); } @@ -3441,7 +3446,7 @@ insert: lex->sql_command = SQLCOM_INSERT; /* for subselects */ lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ; - lex->select_lex.insert_select= 1; + lex->select_lex.resolve_mode= SELECT_LEX::INSERT_MODE; } insert_lock_option opt_ignore insert2 { @@ -3457,7 +3462,7 @@ replace: LEX *lex=Lex; lex->sql_command = SQLCOM_REPLACE; lex->duplicates= DUP_REPLACE; - lex->select_lex.insert_select= 1; + lex->select_lex.resolve_mode= SELECT_LEX::INSERT_MODE; } replace_lock_option insert2 { @@ -3526,7 +3531,7 @@ insert_values: it is not simple select => table list will be preprocessed before passing to handle_select */ - lex->select_lex.insert_select= 0; + lex->select_lex.resolve_mode= SELECT_LEX::NOMATTER_MODE; lex->current_select->parsing_place= SELECT_LEX_NODE::SELECT_LIST; } select_options select_item_list @@ -4178,7 +4183,7 @@ literal: Lex->next_state=MY_LEX_OPERATOR_OR_IDENT;} | HEX_NUM { $$ = new Item_varbinary($1.str,$1.length);} | UNDERSCORE_CHARSET HEX_NUM - { + { Item *tmp= new Item_varbinary($2.str,$2.length); String *str= tmp ? tmp->val_str((String*) 0) : (String*) 0; $$ = new Item_string(str ? str->ptr() : "", str ? str->length() : 0, @@ -4350,8 +4355,6 @@ ident: LEX *lex= Lex; $$.str= lex->thd->strmake($1.str,$1.length); $$.length=$1.length; - if (lex->next_state != MY_LEX_END) - lex->next_state= MY_LEX_OPERATOR_OR_IDENT; } ; diff --git a/sql/table.cc b/sql/table.cc index 0fc2a09f749..1cee0587f17 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -138,7 +138,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, outparam->raid_chunks= head[42]; outparam->raid_chunksize= uint4korr(head+43); if (!(outparam->table_charset=get_charset((uint) head[38],MYF(0)))) - outparam->table_charset=NULL; // QQ display error message? + outparam->table_charset=default_charset_info; // QQ display error message? null_field_first=1; } outparam->db_record_offset=1; @@ -398,8 +398,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, if (!strpos[14]) charset= &my_charset_bin; else if (!(charset=get_charset((uint) strpos[14], MYF(0)))) - charset= (outparam->table_charset ? outparam->table_charset: - default_charset_info); + charset= outparam->table_charset; } if (!comment_length) { @@ -423,8 +422,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, /* old frm file */ field_type= (enum_field_types) f_packtype(pack_flag); - charset=(outparam->table_charset ? outparam->table_charset : - default_charset_info); + charset=f_is_binary(pack_flag) ? &my_charset_bin : outparam->table_charset; bzero((char*) &comment, sizeof(comment)); } *field_ptr=reg_field= @@ -599,7 +597,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, } keyinfo->usable_key_parts=usable_parts; // Filesort } - if (primary_key < MAX_KEY && + if (primary_key < MAX_KEY && (outparam->keys_in_use & ((key_map) 1 << primary_key))) { outparam->primary_key=primary_key; diff --git a/sql/table.h b/sql/table.h index ad5908ae5c2..16ff8c0ce07 100644 --- a/sql/table.h +++ b/sql/table.h @@ -143,6 +143,7 @@ struct st_table { my_bool crashed; my_bool is_view; my_bool no_keyread; + my_bool auto_increment_field_not_null; Field *next_number_field, /* Set if next_number is activated */ *found_next_number_field, /* Set on open */ *rowid_field; diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index f5da95571c4..1982b9e3ba8 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -2030,7 +2030,7 @@ CHARSET_INFO my_charset_utf8_bin= 3, /* mbmaxlen */ 0, &my_charset_handler, - &my_collation_ci_handler + &my_collation_bin_handler }; diff --git a/tests/client_test.c b/tests/client_test.c index 2741da1bbba..6aeb865aa20 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -176,7 +176,7 @@ static void client_connect() int rc; myheader_r("client_connect"); - fprintf(stdout, "\n Establishing a connection ..."); + fprintf(stdout, "\n Establishing a connection to '%s' ...", opt_host); if (!(mysql = mysql_init(NULL))) { @@ -3729,7 +3729,7 @@ static void test_stmt_close() fprintf(stdout, "\n Establishing a test connection ..."); if (!(lmysql = mysql_init(NULL))) { - myerror("mysql_init() failed"); + myerror("mysql_init() failed"); exit(0); } if (!(mysql_real_connect(lmysql,opt_host,opt_user, @@ -6071,7 +6071,7 @@ static void test_prepare_grant() fprintf(stdout, "\n Establishing a test connection ..."); if (!(lmysql = mysql_init(NULL))) { - myerror("mysql_init() failed"); + myerror("mysql_init() failed"); exit(0); } if (!(mysql_real_connect(lmysql,opt_host,"test_grant", @@ -6460,7 +6460,7 @@ static void test_drop_temp() fprintf(stdout, "\n Establishing a test connection ..."); if (!(lmysql = mysql_init(NULL))) { - myerror("mysql_init() failed"); + myerror("mysql_init() failed"); exit(0); } @@ -7160,6 +7160,11 @@ static void test_mem_overun() rc = mysql_real_query(mysql, buffer, length); myquery(rc); + + rc = mysql_query(mysql,"select * from t_mem_overun"); + myquery(rc); + + myassert(1 == my_process_result(mysql)); stmt = mysql_prepare(mysql, "select * from t_mem_overun",30); mystmt_init(stmt); @@ -7456,6 +7461,111 @@ static void test_sqlmode() mysql_stmt_close(stmt); } +/* + test for timestamp handling +*/ +static void test_ts() +{ + MYSQL_STMT *stmt; + MYSQL_BIND bind[6]; + MYSQL_TIME ts; + MYSQL_RES *prep_res; + char strts[30]; + long length; + int rc, field_count; + char name; + + myheader("test_ts"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_ts"); + myquery(rc); + + rc= mysql_query(mysql,"CREATE TABLE test_ts(a DATE, b TIME, c TIMESTAMP)"); + myquery(rc); + + rc = mysql_commit(mysql); + myquery(rc); + + stmt = mysql_prepare(mysql,"INSERT INTO test_ts VALUES(?,?,?),(?,?,?)",50); + mystmt_init(stmt); + + ts.year= 2003; + ts.month= 07; + ts.day= 12; + ts.hour= 21; + ts.minute= 07; + ts.second= 46; + length= (long)(strmov(strts,"2003-07-12 21:07:46") - strts); + + bind[0].buffer_type= MYSQL_TYPE_TIMESTAMP; + bind[0].buffer= (char *)&ts; + bind[0].buffer_length= sizeof(ts); + bind[0].is_null= 0; + bind[0].length= 0; + + bind[2]= bind[1]= bind[0]; + + bind[3].buffer_type= MYSQL_TYPE_STRING; + bind[3].buffer= (char *)strts; + bind[3].buffer_length= sizeof(strts); + bind[3].is_null= 0; + bind[3].length= &length; + + bind[5]= bind[4]= bind[3]; + + rc = mysql_bind_param(stmt, bind); + mystmt(stmt,rc); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + mysql_stmt_close(stmt); + + verify_col_data("test_ts","a","2003-07-12"); + verify_col_data("test_ts","b","21:07:46"); + verify_col_data("test_ts","c","2003-07-12 21:07:46"); + + stmt = mysql_prepare(mysql,"SELECT * FROM test_ts",50); + mystmt_init(stmt); + + prep_res = mysql_prepare_result(stmt); + mytest(prep_res); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + myassert( 2== my_process_stmt_result(stmt)); + field_count= mysql_num_fields(prep_res); + + mysql_free_result(prep_res); + mysql_stmt_close(stmt); + + for (name= 'a'; field_count--; name++) + { + int row_count= 0; + + sprintf(query,"SELECT a,b,c FROM test_ts WHERE %c=?",name); + length= (long)(strmov(query,query)- query); + + fprintf(stdout,"\n %s", query); + stmt = mysql_prepare(mysql, query, length); + mystmt_init(stmt); + + rc = mysql_bind_param(stmt, bind); + mystmt(stmt,rc); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + while (mysql_fetch(stmt) == 0) + row_count++; + + fprintf(stdout, "\n returned '%d' rows", row_count); + myassert(row_count == 2); + mysql_stmt_close(stmt); + } +} + /* Read and parse arguments and MySQL options from my.cnf @@ -7703,6 +7813,7 @@ int main(int argc, char **argv) test_fetch_offset(); /* to test mysql_fetch_column with offset */ test_fetch_column(); /* to test mysql_fetch_column */ test_sqlmode(); /* test for SQL_MODE */ + test_ts(); /* test for timestamp BR#819 */ end_time= time((time_t *)0); total_time+= difftime(end_time, start_time); |