diff options
66 files changed, 544 insertions, 280 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 13df8e1eda4..c25b25b38be 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -275,7 +275,7 @@ Is there anything special to do when upgrading/downgrading MySQL? How standards-compatible is MySQL? * Extensions to ANSI:: @strong{MySQL} extensions to ANSI SQL92 -* Ansi mode:: Running @strong{MySQL} in ANSI mode +* Ansi mode:: Runnning @strong{MySQL} in ANSI mode * Differences from ANSI:: @strong{MySQL} differences compared to ANSI SQL92 * Missing functions:: Functionality missing from @strong{MySQL} * Standards:: What standards does @strong{MySQL} follow? @@ -323,6 +323,7 @@ MySQL language reference * DROP DATABASE:: @code{DROP DATABASE} syntax * CREATE TABLE:: @code{CREATE TABLE} syntax * ALTER TABLE:: @code{ALTER TABLE} syntax +* RENAME TABLE:: * DROP TABLE:: @code{DROP TABLE} syntax * OPTIMIZE TABLE:: @code{OPTIMIZE TABLE} syntax * CHECK TABLE:: @code{CHECK TABLE} syntax @@ -608,7 +609,7 @@ Using @code{MySQL} with some common programs Problems and common errors -* What is crashing:: How to determine what is causing problems +* What is crashing:: How to determinate what is causing problems * Crashing:: What to do if @strong{MySQL} keeps crashing * Link errors:: Problems when linking with the @strong{MySQL} client library * Common errors:: Some common errors when using @strong{MySQL} @@ -647,7 +648,7 @@ Some common errors when using MySQL Solving some common problems with MySQL -* Log Replication:: Database replication with update log +* Log Replication:: Database replication with update log * Backup:: Database backups * Update log:: The update log * Multiple servers:: Running multiple @strong{MySQL} servers on the same machine @@ -720,7 +721,7 @@ C API function descriptions * mysql_store_result:: @code{mysql_store_result()} * mysql_thread_id:: @code{mysql_thread_id()} * mysql_use_result:: @code{mysql_use_result()} -* NULL mysql_store_result:: Why is it that after @code{mysql_query()} returns success, @code{mysql_store_result()} sometimes returns @code{NULL}? +* NULL mysql_store_result:: Why is it that after @code{mysql_query()} returns success, @code{mysql_store_result()} sometimes returns @code{NULL?} * Query results:: What results can I get from a query? * Getting unique ID:: How can I get the unique ID for the last inserted row? * C API linking problems:: Problems linking with the C API @@ -1826,7 +1827,7 @@ Apart from the following links, you can find and download a lot of @strong{MySQL} programs, tools and APIs from the @uref{http://www.mysql.com/Contrib/, Contrib directory}. -@subheading Tutorials and manuals +@subheading Tutorials and Manuals @itemize @bullet @c just forwards to the devshed link below.. (jcole) @@ -2026,6 +2027,11 @@ reviewing. @item @uref{http://www.omnis-software.com/products/studio/studio.html, OMNIS} OMNIS Studio is a rapid application development (RAD) tool. +@item +@uref{http://www.webplus.com, talentsoft Web+ 4.6} +Web+ is a powerful and comprehensive development language for use in +creating web-based client/server applications without writing complicated, +low-level and time-consuming CGI programs. @end itemize @subheading Database design tools with MySQL support @@ -8959,6 +8965,7 @@ comparisons to be done according to the ASCII order used on the @strong{MySQL} maps each database to a directory under the @strong{MySQL} data directory, and tables within a database to filenames in the database directory. + This has two implications: @itemize @minus @@ -9015,11 +9022,12 @@ Use of @code{TEMPORARY} or @code{IF NOT EXISTS} with @code{CREATE TABLE}. Use of @code{COUNT(DISTINCT list)} where 'list' is more than one element. @item -Use of @code{CHANGE col_name}, @code{DROP col_name} or @code{DROP INDEX} -in an @code{ALTER TABLE} statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}. +Use of @code{CHANGE col_name}, @code{DROP col_name} or @code{DROP +INDEX}, @code{IGNORE} or @code{RENAME} in an @code{ALTER TABLE} +statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}. @item -Use of @code{IGNORE} in an @code{ALTER TABLE} statement. +Use of @code{RENAME TABLE}. @xref{RENAME TABLE, , @code{RENAME TABLE}}. @item Use of multiple @code{ADD}, @code{ALTER}, @code{DROP} or @code{CHANGE} @@ -11636,6 +11644,7 @@ to restart @code{mysqld} with @code{--skip-grant-tables} to be able to run * DROP DATABASE:: @code{DROP DATABASE} syntax * CREATE TABLE:: @code{CREATE TABLE} syntax * ALTER TABLE:: @code{ALTER TABLE} syntax +* RENAME TABLE:: * DROP TABLE:: @code{DROP TABLE} syntax * OPTIMIZE TABLE:: @code{OPTIMIZE TABLE} syntax * CHECK TABLE:: @code{CHECK TABLE} syntax @@ -15973,15 +15982,16 @@ mysql> select COUNT(*) from student; @findex COUNT(DISTINCT) @findex DISTINCT @item COUNT(DISTINCT expr,[expr...]) -Returns a count of the number of different values. +Returns a count of the number of different not @code{NULL} values. @example mysql> select COUNT(DISTINCT results) from student; @end example -In @strong{MySQL} you can get the number of distinct expressions combinations -by giving a list of expressions. In ANSI SQL you would have to do a -concatenation of all expressions inside @code{CODE(DISTINCT ..)}. +In @strong{MySQL} you can get the number of distinct expressions +combinations that doesn't contain NULL by giving a list of expressions. +In ANSI SQL you would have to do a concatenation of all expressions +inside @code{CODE(DISTINCT ..)}. @findex AVG() @item AVG(expr) @@ -16547,7 +16557,7 @@ Certain other column type changes may occur if you compress a table using @code{myisampack}. @xref{Compressed format}. @findex ALTER TABLE -@node ALTER TABLE, DROP TABLE, CREATE TABLE, Reference +@node ALTER TABLE, RENAME TABLE, CREATE TABLE, Reference @section @code{ALTER TABLE} syntax @example @@ -16565,7 +16575,7 @@ alter_specification: or DROP [COLUMN] col_name or DROP PRIMARY KEY or DROP INDEX index_name - or RENAME [AS] new_tbl_name + or RENAME [TO] new_tbl_name or table_options @end example @@ -16621,9 +16631,10 @@ INDEX} are @strong{MySQL} extensions to ANSI SQL92. The optional word @code{COLUMN} is a pure noise word and can be omitted. @item -If you use @code{ALTER TABLE tbl_name RENAME AS new_name} without any other +If you use @code{ALTER TABLE tbl_name RENAME TO new_name} without any other options, @strong{MySQL} simply renames the files that correspond to the table @code{tbl_name}. There is no need to create the temporary table. +@xref{RENAME TABLE,, @code{RENAME TABLE}}. @item @code{create_definition} clauses use the same syntax for @code{ADD} and @@ -16775,8 +16786,47 @@ sequence number be executing @code{SET INSERT_ID=#} before See also @xref{ALTER TABLE problems, , @code{ALTER TABLE} problems}. +@findex RENAME TABLE +@node RENAME TABLE, DROP TABLE, ALTER TABLE, Reference +@section @code{RENAME TABLE} syntax + +@example +RENAME TABLE tbl_name as new_table_name[, tbl_name2 as new_table_name2,...] +@end example + +The rename is done atomic, which means that if no other thread can +access any of the tables while the rename is running. This makes it +possible to replace a table with an empty one: + +@example +CREATE TABLE new_table (...); +RENAME TABLE old_table TO backup_table, new_table as old_table; +@end example + +The rename is done from left to right, which means that if you want to +swap two tables names, you have to do: + +@example +RENAME TABLE old_table TO backup_table, new_table as old_table, backup_table as old_table; +@end example + +Is long as two databases are on the same disk you can also do a rename +from a database to another: + +@example +RENAME TABLE current_database.table_name TO other_database.table_name; +@end example + +When you execute @code{RENAME}, you can't have any locked tables or active +transactions. You must also have the @code{ALTER TABLE} privilege on both +the old and the new table. + +If @strong{MySQL} encounters any errors in a multiple table rename, it +will do a reverse rename for all renamed tables to get everything back +to the original state. + @findex DROP TABLE -@node DROP TABLE, OPTIMIZE TABLE, ALTER TABLE, Reference +@node DROP TABLE, OPTIMIZE TABLE, RENAME TABLE, Reference @section @code{DROP TABLE} syntax @example @@ -19172,9 +19222,8 @@ may be a column name or a string containing the SQL @samp{%} and @samp{_} wildcard characters. If the column types are different than you expect them to be based on a -@code{CREATE TABLE} statement, note that @strong{MySQL} sometimes changes column -types. -@xref{Silent column changes}. +@code{CREATE TABLE} statement, note that @strong{MySQL} sometimes +changes column types. @xref{Silent column changes}. @cindex Oracle compatibility @cindex Compatibility, with Oracle @@ -35350,6 +35399,10 @@ and will soon be declared beta, gamma and release. @appendixsubsec Changes in release 3.23.23 @itemize @bullet @item +Added atomic @code{RENAME} command. +@item +Don't count entries with @code{NULL} in @code{COUNT(DISTINCT ..)}. +@item Changed @code{ALTER TABLE}, @code{LOAD DATA INFILE} on empty tables and @code{INSERT ... SELECT...} on empty tables to create non-unique indexs in a separate batch with sorting. This will make the above calls much @@ -35372,7 +35425,9 @@ that don't have the @code{pthread_rwlock_rdlock} code. When deleting rows with a non-unique key in a HEAP table, all rows weren't always deleted. @item -Fixed that BDB tables work on part keys. +Fixed that @code{SELECT} on part keys works with BDB tables. +@item +Fixed that @code{INSERT INTO bdb_table ... SELECT} works with BDB tables. @item Check table now updates key statistics for the table. @item @@ -35382,11 +35437,18 @@ will not be marked to be analyzed until they are updated in any way with 3.23.23 or newer. For older tables, you have to do @code{CHECK TABLE} to update the key distribution. @item +Fixed some minor privilege problems with @code{CHECK}, @code{ANALYZE}, +@code{REPAIR} and @code{SHOW CREATE} commands. +@item Added @code{CHANGE MASTER TO} command @item Added @code{FAST}, @code{QUICK} @code{EXTENDED} check types to @code{CHECK TABLES}. @item +Changed @code{myisamchk} so that @code{--fast} and +@code{--check-changed-tables} are also honored with @code{--sort-index} and +@code{--analyze}. +@item Fixed fatal bug in @code{LOAD TABLE FROM MASTER} that did not lock the table during index re-build @item @code{LOAD DATA INFILE} broke replication if the database was excluded from replication @@ -38130,7 +38192,7 @@ Added new commands @code{CREATE DATABASE db_name} and @code{DROP DATABASE db_name}. @item Added @code{RENAME} option to @code{ALTER TABLE}: @code{ALTER TABLE name -RENAME AS new_name}. +RENAME TO new_name}. @item @code{make_binary_distribution} now includes @file{libgcc.a} in @file{libmysqlclient.a}. This should make linking work for people who don't @@ -39474,7 +39536,7 @@ Fail safe replication. @item Optimize, test and document transactions safe tables @item -@code{RENAME table as table, table as table [,...]} +@code{RENAME table to table, table to table [,...]} @item Allow users to change startup options. @item @@ -39656,6 +39718,13 @@ A logfile analyzer that could parsed out information about which tables are hit most often, how often multi-table joins are executed, etc. It should help users identify areas or table design that could be optimized to execute much more efficient queries. +@item +Add @code{SUM(DISTINCT)} +@item +Add @code{ANY()},@code{EVERY()} and @code{SOME()} group functions. In +ANSI SQL these only works on boolean columns, but we can extend these to +work on any columns/expressions by applying: value == 0 -> FALSE and +value <> 0 -> TRUE. @end itemize @node TODO sometime, TODO unplanned, TODO future, TODO diff --git a/configure.in b/configure.in index bf661b56f35..88496f601f8 100644 --- a/configure.in +++ b/configure.in @@ -1709,10 +1709,10 @@ CHARSET_COMP_CS_INIT="$CHARSET_COMP_CS_INIT { 0, /* end-of-list marker */ NullS, - \"\", - \"\", - \"\", - \"\", + NULL, + NULL, + NULL, + NULL, 0, NULL, NULL, diff --git a/include/global.h b/include/global.h index c56b1f83dc3..d7cd0ff9881 100644 --- a/include/global.h +++ b/include/global.h @@ -113,6 +113,12 @@ #define HAVE_ATOMIC_SUB #endif +/* In Linux-ia64 including atomic.h will give us an error */ +#if defined(HAVE_LINUXTHREADS) && defined(__GNUC__) && defined(__ia64__) +#undef HAVE_ATOMIC_ADD +#undef HAVE_ATOMIC_SUB +#endif + #if defined(_lint) && !defined(lint) #define lint #endif @@ -207,6 +213,7 @@ #endif /* Define void to stop lint from generating "null effekt" comments */ +#ifndef DONT_DEFINE_VOID #ifdef _lint int __void__; #define VOID(X) (__void__ = (int) (X)) @@ -214,6 +221,7 @@ int __void__; #undef VOID #define VOID(X) (X) #endif +#endif /* DONT_DEFINE_VOID */ #if defined(_lint) || defined(FORCE_INIT_OF_VARS) #define LINT_INIT(var) var=0 /* No uninitialize-warning */ @@ -515,6 +523,8 @@ typedef long my_ptrdiff_t; #define NEAR /* Who needs segments ? */ #define FAR /* On a good machine */ #define HUGE_PTR +#endif +#ifndef STDCALL #define STDCALL #endif diff --git a/include/mysqld_error.h b/include/mysqld_error.h index 9d3e879f4f5..d815e61f3b5 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -192,4 +192,5 @@ #define ER_MASTER_NET_READ 1189 #define ER_MASTER_NET_WRITE 1190 #define ER_FT_MATCHING_KEY_NOT_FOUND 1191 -#define ER_ERROR_MESSAGES 192 +#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192 +#define ER_ERROR_MESSAGES 193 diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index abfb580b501..5740dcf76f5 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -190,7 +190,7 @@ static struct option long_options[] = static void print_version(void) { - printf("%s Ver 1.29 for %s at %s\n",my_progname,SYSTEM_TYPE, + printf("%s Ver 1.30 for %s at %s\n",my_progname,SYSTEM_TYPE, MACHINE_TYPE); } @@ -295,7 +295,7 @@ static void get_options(register int *argc,register char ***argv) set_all_changeable_vars(changeable_vars); if (isatty(fileno(stdout))) check_param.testflag|=T_WRITE_LOOP; - while ((c=getopt_long(*argc,*argv,"acCdeif?lqrmosSTuUvVw#:b:D:k:O:R:A::t:", + while ((c=getopt_long(*argc,*argv,"acCdeifF?lqrmosSTuUvVw#:b:D:k:O:R:A::t:", long_options, &option_index)) != EOF) { switch(c) { @@ -520,22 +520,42 @@ static int myisamchk(MI_CHECK *param, my_string filename) We are using --fast and the table is closed properly We are using --check-only-changed-tables and the table hasn't changed */ - if (((param->testflag & T_CHECK_ONLY_CHANGED) && - (share->state.changed & (STATE_CHANGED | STATE_CRASHED | - STATE_CRASHED_ON_REPAIR))) || - (param->testflag & T_FAST) && share->state.open_count == 0) + if (param->testflag & (T_FAST | T_CHECK_ONLY_CHANGED)) { - if (!(param->testflag & T_SILENT) || param->testflag & T_INFO) - printf("MyISAM file: %s is already checked\n",filename); - if (mi_close(info)) + my_bool need_to_check= mi_is_crashed(info) || share->state.open_count != 0; + + if ((param->testflag & (T_REP_BY_SORT | T_REP | T_SORT_RECORDS)) && + ((share->state.changed & (STATE_CHANGED | STATE_CRASHED | + STATE_CRASHED_ON_REPAIR) || + !(param->testflag & T_CHECK_ONLY_CHANGED)))) + need_to_check=1; + + if ((param->testflag & T_STATISTICS) && + (share->state.changed & STATE_NOT_ANALYZED)) + need_to_check=1; + if ((param->testflag & T_SORT_INDEX) && + (share->state.changed & STATE_NOT_SORTED_PAGES)) + need_to_check=1; + if ((param->testflag & T_REP_BY_SORT) && + (share->state.changed & STATE_NOT_OPTIMIZED_KEYS)) + need_to_check=1; + if ((param->testflag & T_CHECK_ONLY_CHANGED) && + (share->state.changed & (STATE_CHANGED | STATE_CRASHED | + STATE_CRASHED_ON_REPAIR))) + need_to_check=1; + if (!need_to_check) { - mi_check_print_error(param,"%d when closing MyISAM-table '%s'", - my_errno,filename); - DBUG_RETURN(1); + if (!(param->testflag & T_SILENT) || param->testflag & T_INFO) + printf("MyISAM file: %s is already checked\n",filename); + if (mi_close(info)) + { + mi_check_print_error(param,"%d when closing MyISAM-table '%s'", + my_errno,filename); + DBUG_RETURN(1); + } + DBUG_RETURN(0); } - DBUG_RETURN(0); } - if ((param->testflag & (T_REP_BY_SORT | T_REP | T_STATISTICS | T_SORT_RECORDS | T_SORT_INDEX)) && (((param->testflag & T_UNPACK) && diff --git a/myisammrg/myrg_queue.c b/myisammrg/myrg_queue.c index 47ccdce1554..4917cbf7cf8 100644 --- a/myisammrg/myrg_queue.c +++ b/myisammrg/myrg_queue.c @@ -48,5 +48,6 @@ int _myrg_init_queue(MYRG_INFO *info,int inx,enum ha_rkey_function search_flag) info->open_tables->table->s->keyinfo[inx].seg)) return my_errno; } + return 0; } diff --git a/myisammrg/myrg_rkey.c b/myisammrg/myrg_rkey.c index 2f4cfb60068..84d0d46d9f2 100644 --- a/myisammrg/myrg_rkey.c +++ b/myisammrg/myrg_rkey.c @@ -25,6 +25,9 @@ SerG */ +int _mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len, + enum ha_rkey_function search_flag, bool raw_key); + int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key, uint key_len, enum ha_rkey_function search_flag) { diff --git a/sql-bench/test-insert.sh b/sql-bench/test-insert.sh index cdefcaf414f..b38d132d356 100755 --- a/sql-bench/test-insert.sh +++ b/sql-bench/test-insert.sh @@ -224,7 +224,7 @@ if ($limits->{'unique_index'}) $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); $tmp=$tmpvar % ($total_rows); $tmpquery = "$query ($tmp,1,2,'D')"; - if ($dbh->do($tmpquery)) + if (!$dbh->do($tmpquery)) { die "Didn't get an error when inserting duplicate record $tmp\n"; } diff --git a/sql/ChangeLog b/sql/ChangeLog index 65a5bca0bf9..0ede1c5ff47 100644 --- a/sql/ChangeLog +++ b/sql/ChangeLog @@ -1,3 +1,8 @@ +2000-08-20 Michael Widenius <monty@mysql.com> + +* Added memory as inline functions to THD to get them a bit faster +* Don't count entries with NULL in COUNT(DISTINCT ..) + 2000-08-08 Michael Widenius <monty@mysql.com> * Changed ALTER TABLE and LOAD DATA INFILE to create non unique, small keys diff --git a/sql/Makefile.am b/sql/Makefile.am index df9236c7e5a..51a9c1e09fc 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -66,7 +66,7 @@ mysqld_SOURCES = sql_lex.cc \ records.cc filesort.cc handler.cc \ ha_isam.cc ha_isammrg.cc ha_heap.cc \ ha_myisam.cc ha_myisammrg.cc ha_berkeley.cc \ - sql_db.cc sql_table.cc sql_crypt.cc \ + sql_db.cc sql_table.cc sql_rename.cc sql_crypt.cc \ sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc \ sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc \ slave.cc \ diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 408e5d941ae..1c236e19bda 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -839,6 +839,10 @@ bool Item_sum_count_distinct::add() copy_fields(tmp_table_param); copy_funcs(tmp_table_param->funcs); + for (Field **field=table->field ; *field ; field++) + if ((*field)->is_real_null(0)) + return 0; // Don't count NULL + if ((error=table->file->write_row(table->record[0]))) { if (error != HA_ERR_FOUND_DUPP_KEY && diff --git a/sql/lock.cc b/sql/lock.cc index b65ae5ddc3e..be942c2ec78 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -384,3 +384,87 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count, } return sql_lock; } + +/***************************************************************************** +** Lock table based on the name. +** This is used when we need total access to a closed, not open table +*****************************************************************************/ + +/* + Put a not open table with an old refresh version in the table cache. + This will force any other threads that uses the table to release it + as soon as possible. + One must have a lock on LOCK_open ! + Return values: + < 0 error + == 0 table locked + > 0 table locked, but someone is using it +*/ + + +int lock_table_name(THD *thd, TABLE_LIST *table_list) +{ + TABLE *table; + char key[MAX_DBKEY_LENGTH]; + uint key_length; + key_length=(uint) (strmov(strmov(key,table_list->db)+1,table_list->name)-key)+ + 1; + + /* Only insert the table if we haven't insert it already */ + for (table=(TABLE*) hash_search(&open_cache,(byte*) key,key_length) ; + table ; + table = (TABLE*) hash_next(&open_cache,(byte*) key,key_length)) + if (table->in_use == thd) + return 0; + + /* Create a table entry with the right key and with an old refresh version */ + if (!(table= (TABLE*) thd->calloc(sizeof(*table)+key_length))) + return -1; + memcpy((table->table_cache_key= (char*) (table+1)), key, key_length); + table->key_length=key_length; + table->in_use=thd; + table_list->table=table; + + if (hash_insert(&open_cache, (byte*) table)) + return -1; + if (remove_table_from_cache(thd, table_list->db, table_list->name)) + return 1; // Table is in use + return 0; +} + +void unlock_table_name(THD *thd, TABLE_LIST *table_list) +{ + if (table_list->table) + hash_delete(&open_cache, (gptr) table_list->table); +} + +static bool locked_named_table(THD *thd, TABLE_LIST *table_list) +{ + for ( ; table_list ; table_list=table_list->next) + { + if (table_list->table && table_is_used(table_list->table)) + return 1; + } + return 0; // All tables are locked +} + + +bool wait_for_locked_table_names(THD *thd, TABLE_LIST *table_list) +{ + bool result=0; + + while (locked_named_table(thd,table_list)) + { + if (thd->killed) + { + result=1; + break; + } + wait_for_refresh(thd); + } + pthread_mutex_lock(&thd->mysys_var->mutex); + thd->mysys_var->current_mutex=0; + thd->mysys_var->current_cond=0; + pthread_mutex_unlock(&thd->mysys_var->mutex); + return result; +} diff --git a/sql/share/czech/errmsg.sys b/sql/share/czech/errmsg.sys Binary files differindex e509b71a857..2c20765abd3 100644 --- a/sql/share/czech/errmsg.sys +++ b/sql/share/czech/errmsg.sys diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 7403c915bac..a3ddfefcb71 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -1,13 +1,13 @@ /* Copyright Abandoned 1997 TCX DataKonsult AB & Monty Program KB & Detron HB This file is public domain and comes with NO WARRANTY of any kind */ -/* Modifikoval Petr šnajdr, snajdr@pvt.net, snajdr@cpress.cz v.0.01 +/* Modifikoval Petr -Bšnajdr, snajdr@pvt.net, snajdr@cpress.cz v.0.01 -A ISO LATIN-8852-2 Upravil Jan Pazdziora, adelton@fi.muni.cz Tue Nov 18 17:53:55 MET 1997 verze 0.02 - Rozšířeno podle 3.21.15c Jan Pazdziora, adelton@fi.muni.cz + Roz-Bšířeno podle 3.21.15c Jan Pazdziora, adelton@fi.muni.cz-A Tue Dec 2 19:08:54 MET 1997 verze 0.03 - Rozšířeno podle 3.21.29 Jan Pazdziora, adelton@fi.muni.cz + Roz-Bšířeno podle 3.21.29 Jan Pazdziora, adelton@fi.muni.cz-A Thu May 7 17:40:49 MET DST 1998 verze 0.04 Podle verze 3.22.20 upravil Jan Pazdziora, adelton@fi.muni.cz Thu Apr 1 20:49:57 CEST 1999 @@ -19,191 +19,192 @@ "isamchk", "NE", "ANO", -"Nemohu vytvořit soubor '%-.64s' (chybový kód: %d)", -"Nemohu vytvořit tabulku '%-.64s' (chybový kód: %d)", -"Nemohu vytvořit databázi '%-.64s', chyba %d", -"Nemohu vytvořit databázi '%-.64s', databáze již existuje", -"Nemohu zrušit databázi '%-.64s', databáze neexistuje", -"Chyba při rušení databáze (nemohu vymazat '%-.64s', chyba %d)", -"Chyba při rušení databáze (nemohu vymazat adresář '%-.64s', chyba %d)", -"Chyba při výmazu '%-.64s' (chybový kód: %d)", -"Nemohu číst záznam v systémové tabulce", -"Nemohu získat stav '%-.64s' (chybový kód: %d)", -"Chyba při zjišťování pracovní adresář (chybový kód: %d)", -"Nemohu uzamknout soubor (chybový kód: %d)", -"Nemohu otevřít soubor '%-.64s' (chybový kód: %d)", -"Nemohu najít soubor '%-.64s' (chybový kód: %d)", -"Nemohu číst adresář '%-.64s' (chybový kód: %d)", -"Nemohu změnit adresář na '%-.64s' (chybový kód: %d)", -"Záznam byl změněn od posledního čtení v tabulce '%-.64s'", -"Disk je plný (%s), čekám na uvolnění nějakého místa ...", -"Nemohu zapsat, zdvojený klíč v tabulce '%-.64s'", -"Chyba při zavírání '%-.64s' (chybový kód: %d)", -"Chyba při čtení souboru '%-.64s' (chybový kód: %d)", -"Chyba při přejmenování '%-.64s' na '%-.64s' (chybový kód: %d)", -"Chyba při zápisu do souboru '%-.64s' (chybový kód: %d)", -"'%-.64s' je zamčen proti změnám", -"Třídění přerušeno", +"Nemohu vytvo-Břit soubor '%-.64s' (chybový kód: %d)",-A +"Nemohu vytvo-Břit tabulku '%-.64s' (chybový kód: %d)",-A +"Nemohu vytvo-Břit databázi '%-.64s', chyba %d",-A +"Nemohu vytvo-Břit databázi '%-.64s', databáze již existuje",-A +"Nemohu zru-Bšit databázi '%-.64s', databáze neexistuje",-A +"Chyba p-Bři rušení databáze (nemohu vymazat '%-.64s', chyba %d)",-A +"Chyba p-Bři rušení databáze (nemohu vymazat adresář '%-.64s', chyba %d)",-A +"Chyba p-Bři výmazu '%-.64s' (chybový kód: %d)",-A +"Nemohu -Bčíst záznam v systémové tabulce",-A +"Nemohu z-Bískat stav '%-.64s' (chybový kód: %d)",-A +"Chyba p-Bři zjišťování pracovní adresář (chybový kód: %d)",-A +"Nemohu uzamknout soubor (chybov-Bý kód: %d)",-A +"Nemohu otev-Břít soubor '%-.64s' (chybový kód: %d)",-A +"Nemohu naj-Bít soubor '%-.64s' (chybový kód: %d)",-A +"Nemohu -Bčíst adresář '%-.64s' (chybový kód: %d)",-A +"Nemohu zm-Běnit adresář na '%-.64s' (chybový kód: %d)",-A +"Z-Báznam byl změněn od posledního čtení v tabulce '%-.64s'",-A +"Disk je pln-Bý (%s), čekám na uvolnění nějakého místa ...",-A +"Nemohu zapsat, zdvojen-Bý klíč v tabulce '%-.64s'",-A +"Chyba p-Bři zavírání '%-.64s' (chybový kód: %d)",-A +"Chyba p-Bři čtení souboru '%-.64s' (chybový kód: %d)",-A +"Chyba p-Bři přejmenování '%-.64s' na '%-.64s' (chybový kód: %d)",-A +"Chyba p-Bři zápisu do souboru '%-.64s' (chybový kód: %d)",-A +"'%-.64s' je zam-Bčen proti změnám",-A +"T-Břídění přerušeno",-A "Pohled '%-.64s' pro '%-.64s' neexistuje", -"Obsluha tabulky vrátila chybu %d", -"Obsluha tabulky '%-.64s' nemá tento parametr", -"Nemohu najít záznam v '%-.64s'", -"Nesprávná informace v souboru '%-.64s'", -"Nesprávný klíč pro tabulku '%-.64s'. Pokuste se ho opravit", -"Starý klíčový soubor pro '%-.64s'. Opravte ho.", -"'%-.64s' je jen pro čtení", -"Málo paměti. Přestartujte daemona a zkuste znovu (je potřeba %d bytů)", -"Málo paměti pro třídění. Zvyšte velikost třídícího bufferu", -"Neočekávaný konec souboru při čtení '%-.64s' (chybový kód: %d)", -"Příliš mnoho spojení", -"Málo prostoru/paměti pro thread", -"Nemohu zjistit jméno stroje pro Vaši adresu", -"Chyba při ustavování spojení", -"Přístup pro uživatele '%-.32s@%-.64s' k databázi '%-.64s' není povolen", -"Přístup pro uživatele '%-.32s@%-.64s' (s heslem %s)", -"Nebyla vybrána žádná databáze", -"Neznámý příkaz", -"Sloupec '%-.64s' nemůže být null", -"Neznámá databáze '%-.64s'", -"Tabulka '%-.64s' již existuje", -"Neznámá tabulka '%-.64s'", -"Sloupec '%-.64s' v %s není zcela jasný", -"Probíhá ukončování práce serveru", -"Neznámý sloupec '%-.64s' v %s", -"Použité '%-.64s' nebylo v group by", -"Nemohu použít group na '%-.64s'", -"Příkaz obsahuje zároveň funkci sum a sloupce", -"Počet sloupců neodpovídá zadané hodnotě", -"Jméno identifikátoru '%-.64s' je příliš dlouhé", -"Zdvojené jméno sloupce '%-.64s'", -"Zdvojené jméno klíče '%-.64s'", -"Zvojený klíč '%-.64s' (číslo klíče %d)", -"Chybná specifikace sloupce '%-.64s'", -"%s blízko '%-.64s' na řádku %d", -"Výsledek dotazu je prázdný", -"Nejednoznačná tabulka/alias: '%-.64s'", -"Chybná defaultní hodnota pro '%-.64s'", -"Definováno více primárních klíčů", -"Zadáno příliš mnoho klíčů, je povoleno nejvíce %d klíčů", -"Zadáno příliš mnoho část klíčů, je povoleno nejvíce %d částí", -"Zadaný klíč byl příliš dlouhý, největší délka klíče je %d", -"Klíčový sloupec '%-.64s' v tabulce neexistuje", -"Blob sloupec '%-.64s' nemůže být použit jako klíč", -"Příliš velká délka sloupce '%-.64s' (nejvíce %d). Použijte BLOB", -"Můžete mít pouze jedno AUTO pole a to musí být definováno jako klíč", -"%s: připraven na spojení\n", -"%s: normální ukončení\n", -"%s: přijat signal %d, končím\n", -"%s: ukončení práce hotovo\n", -"%s: násilné uzavření threadu %ld uživatele '%-.64s'\n", -"Nemohu vytvořit IP socket", -"Tabulka '%-.64s' nemá index odpovídající CREATE INDEX. Vytvořte tabulku znovu", -"Argument separátoru položek nebyl očekáván. Přečtěte si manuál", -"Není možné použít pevný rowlength s BLOBem. Použijte 'fields terminated by'.", -"Soubor '%-.64s' musí být v adresáři databáze nebo čitelný pro všechny", -"Soubor '%-.64s' již existuje", -"Záznamů: %ld Vymazáno: %ld Přeskočeno: %ld Varování: %ld", -"Záznamů: %ld Zdvojených: %ld", -"Chybná podčást klíče -- není to řetězec nebo je delší než délka části klíče", -"Není možné vymazat všechny položky s ALTER TABLE. Použijte DROP TABLE", -"Nemohu zrušit '%-.64s' (provést DROP). Zkontrolujte, zda neexistují záznamy/klíče", -"Záznamů: %ld Zdvojených: %ld Varování: %ld", -"INSERT TABLE '%-.64s' není dovoleno v seznamu tabulek FROM", -"Neznámá identifikace threadu: %lu", -"Nejste vlastníkem threadu %lu", -"Nejsou použity žádné tabulky", -"Příliš mnoho řetězců pro sloupec %s a SET", -"Nemohu vytvořit jednoznačné jméno logovacího souboru %s.(1-999)\n", -"Tabulka '%-.64s' byla zamčena s READ a nemůže být změněna", -"Tabulka '%-.64s' nebyla zamčena s LOCK TABLES", -"Blob položka '%-.64s' nemůže mít defaultní hodnotu", -"Nepřípustné jméno databáze '%-.64s'", -"Nepřípustné jméno tabulky '%-.64s'", -"Zadaný SELECT by procházel příliš mnoho záznamů a trval velmi dlouho. Zkontrolujte tvar WHERE a je-li SELECT v pořádku, použijte SET OPTION SQL_BIG_SELECTS=1", -"Neznámá chyba", -"Neznámá procedura %s", -"Chybný počet parametrů procedury %s", -"Chybné parametry procedury %s", -"Neznámá tabulka '%-.64s' v %s", -"Položka '%-.64s' je zadána dvakrát", -"Nesprávné použití funkce group", -"Tabulka '%-.64s' používá rozšíření, které v této verzi MySQL není", -"Tabulka musí mít alespoň jeden sloupec", -"Tabulka '%-.64s' je plná", -"Neznámá znaková sada: '%-.64s'", -"Příliš mnoho tabulek, MySQL jich může mít v joinu jen %d", -"Příliš mnoho položek", -"Řádek je příliš velký. Maximální velikost řádku, nepočítaje položky blob, je %d. Musíte změnit některé položky na blob", -"Přetečení zásobníku threadu: použito %ld z %ld. Použijte 'mysqld -O thread_stack=#' k zadání většího zásobníku", -"V OUTER JOIN byl nalezen křížový odkaz. Prověřte ON podmínky", -"Sloupec '%-.32s' je použit s UNIQUE nebo INDEX, ale není definován jako NOT NULL", -"Nemohu načíst funkci '%-.64s'", +"Obsluha tabulky vr-Bátila chybu %d",-A +"Obsluha tabulky '%-.64s' nem-Bá tento parametr",-A +"Nemohu naj-Bít záznam v '%-.64s'",-A +"Nespr-Bávná informace v souboru '%-.64s'",-A +"Nespr-Bávný klíč pro tabulku '%-.64s'. Pokuste se ho opravit",-A +"Star-Bý klíčový soubor pro '%-.64s'. Opravte ho.",-A +"'%-.64s' je jen pro -Bčtení",-A +"M-Bálo paměti. Přestartujte daemona a zkuste znovu (je potřeba %d bytů)",-A +"M-Bálo paměti pro třídění. Zvyšte velikost třídícího bufferu",-A +"Neo-Bčekávaný konec souboru při čtení '%-.64s' (chybový kód: %d)",-A +"P-Bříliš mnoho spojení",-A +"M-Bálo prostoru/paměti pro thread",-A +"Nemohu zjistit jm-Béno stroje pro Vaši adresu",-A +"Chyba p-Bři ustavování spojení",-A +"P-Břístup pro uživatele '%-.32s@%-.64s' k databázi '%-.64s' není povolen",-A +"P-Břístup pro uživatele '%-.32s@%-.64s' (s heslem %s)",-A +"Nebyla vybr-Bána žádná databáze",-A +"Nezn-Bámý příkaz",-A +"Sloupec '%-.64s' nem-Bůže být null",-A +"Nezn-Bámá databáze '%-.64s'",-A +"Tabulka '%-.64s' ji-Bž existuje",-A +"Nezn-Bámá tabulka '%-.64s'",-A +"Sloupec '%-.64s' v %s nen-Bí zcela jasný",-A +"Prob-Bíhá ukončování práce serveru",-A +"Nezn-Bámý sloupec '%-.64s' v %s",-A +"Pou-Bžité '%-.64s' nebylo v group by",-A +"Nemohu pou-Bžít group na '%-.64s'",-A +"P-Bříkaz obsahuje zároveň funkci sum a sloupce",-A +"Po-Bčet sloupců neodpovídá zadané hodnotě",-A +"Jm-Béno identifikátoru '%-.64s' je příliš dlouhé",-A +"Zdvojen-Bé jméno sloupce '%-.64s'",-A +"Zdvojen-Bé jméno klíče '%-.64s'",-A +"Zvojen-Bý klíč '%-.64s' (číslo klíče %d)",-A +"Chybn-Bá specifikace sloupce '%-.64s'",-A +"%s bl-Bízko '%-.64s' na řádku %d",-A +"V-Býsledek dotazu je prázdný",-A +"Nejednozna-Bčná tabulka/alias: '%-.64s'",-A +"Chybn-Bá defaultní hodnota pro '%-.64s'",-A +"Definov-Báno více primárních klíčů",-A +"Zad-Báno příliš mnoho klíčů, je povoleno nejvíce %d klíčů",-A +"Zad-Báno příliš mnoho část klíčů, je povoleno nejvíce %d částí",-A +"Zadan-Bý klíč byl příliš dlouhý, největší délka klíče je %d",-A +"Kl-Bíčový sloupec '%-.64s' v tabulce neexistuje",-A +"Blob sloupec '%-.64s' nem-Bůže být použit jako klíč",-A +"P-Bříliš velká délka sloupce '%-.64s' (nejvíce %d). Použijte BLOB",-A +"M-Bůžete mít pouze jedno AUTO pole a to musí být definováno jako klíč",-A +"%s: p-Břipraven na spojení\n",-A +"%s: norm-Bální ukončení\n",-A +"%s: p-Břijat signal %d, končím\n",-A +"%s: ukon-Bčení práce hotovo\n",-A +"%s: n-Básilné uzavření threadu %ld uživatele '%-.64s'\n",-A +"Nemohu vytvo-Břit IP socket",-A +"Tabulka '%-.64s' nem-Bá index odpovídající CREATE INDEX. Vytvořte tabulku znovu",-A +"Argument separ-Bátoru položek nebyl očekáván. Přečtěte si manuál",-A +"Nen-Bí možné použít pevný rowlength s BLOBem. Použijte 'fields terminated by'.",-A +"Soubor '%-.64s' mus-Bí být v adresáři databáze nebo čitelný pro všechny",-A +"Soubor '%-.64s' ji-Bž existuje",-A +"Z-Báznamů: %ld Vymazáno: %ld Přeskočeno: %ld Varování: %ld",-A +"Z-Báznamů: %ld Zdvojených: %ld",-A +"Chybn-Bá podčást klíče -- není to řetězec nebo je delší než délka části klíče",-A +"Nen-Bí možné vymazat všechny položky s ALTER TABLE. Použijte DROP TABLE",-A +"Nemohu zru-Bšit '%-.64s' (provést DROP). Zkontrolujte, zda neexistují záznamy/klíče",-A +"Z-Báznamů: %ld Zdvojených: %ld Varování: %ld",-A +"INSERT TABLE '%-.64s' nen-Bí dovoleno v seznamu tabulek FROM",-A +"Nezn-Bámá identifikace threadu: %lu",-A +"Nejste vlastn-Bíkem threadu %lu",-A +"Nejsou pou-Bžity žádné tabulky",-A +"P-Bříliš mnoho řetězců pro sloupec %s a SET",-A +"Nemohu vytvo-Břit jednoznačné jméno logovacího souboru %s.(1-999)\n",-A +"Tabulka '%-.64s' byla zam-Bčena s READ a nemůže být změněna",-A +"Tabulka '%-.64s' nebyla zam-Bčena s LOCK TABLES",-A +"Blob polo-Bžka '%-.64s' nemůže mít defaultní hodnotu",-A +"Nep-Břípustné jméno databáze '%-.64s'",-A +"Nep-Břípustné jméno tabulky '%-.64s'",-A +"Zadan-Bý SELECT by procházel příliš mnoho záznamů a trval velmi dlouho. Zkontrolujte tvar WHERE a je-li SELECT v pořádku, použijte SET OPTION SQL_BIG_SELECTS=1",-A +"Nezn-Bámá chyba",-A +"Nezn-Bámá procedura %s",-A +"Chybn-Bý počet parametrů procedury %s",-A +"Chybn-Bé parametry procedury %s",-A +"Nezn-Bámá tabulka '%-.64s' v %s",-A +"Polo-Bžka '%-.64s' je zadána dvakrát",-A +"Nespr-Bávné použití funkce group",-A +"Tabulka '%-.64s' pou-Bžívá rozšíření, které v této verzi MySQL není",-A +"Tabulka mus-Bí mít alespoň jeden sloupec",-A +"Tabulka '%-.64s' je pln-Bá",-A +"Nezn-Bámá znaková sada: '%-.64s'",-A +"P-Bříliš mnoho tabulek, MySQL jich může mít v joinu jen %d",-A +"P-Bříliš mnoho položek",-A +"-BŘádek je příliš velký. Maximální velikost řádku, nepočítaje položky blob, je %d. Musíte změnit některé položky na blob",-A +"P-Břetečení zásobníku threadu: použito %ld z %ld. Použijte 'mysqld -O thread_stack=#' k zadání většího zásobníku",-A +"V OUTER JOIN byl nalezen k-Břížový odkaz. Prověřte ON podmínky",-A +"Sloupec '%-.32s' je pou-Bžit s UNIQUE nebo INDEX, ale není definován jako NOT NULL",-A +"Nemohu na-Bčíst funkci '%-.64s'",-A "Nemohu inicializovat funkci '%-.64s'; %-.80s", -"Pro sdílenou knihovnu nejsou povoleny cesty", -"Funkce '%-.64s' již existuje", -"Nemohu otevřít sdílenou knihovnu '%-.64s' (errno: %d %s)", -"Nemohu najít funkci '%-.64s' v knihovně'", -"Funkce '%-.64s' není definována", -"Stroj '%-.64s' je zablokován kvůli mnoha chybám při připojování. Odblokujete použitím 'mysqladmin flush-hosts'", -"Stroj '%-.64s' nemá povoleno se k tomuto MySQL serveru připojit", -"Používáte MySQL jako anonymní uživatel a anonymní uživatelé nemají povoleno měnit hesla", -"Na změnu hesel ostatním musíte mít právo provést update tabulek v databázi mysql", -"V tabulce user není žádný odpovídající řádek", -"Nalezených řádků: %ld Změněno: %ld Varování: %ld", -"Nemohu vytvořit nový thread (errno %d). Pokud je ještě nějaká volná paměť, podívejte se do manuálu na část o chybách specifických pro jednotlivé operační systémy", -"Počet sloupců neodpovídá počtu hodnot na řádku %ld", -"Nemohu znovuotevřít tabulku: '%-.64s', -"Neplatné užití hodnoty NULL", -"Regulární výraz vrátil chybu '%-.64s'", -"Pokud není žádná GROUP BY klauzule, není dovoleno současné použití GROUP položek (MIN(),MAX(),COUNT()...) s ne GROUP položkami", -"Neexistuje odpovídající grant pro uživatele '%-.32s' na stroji '%-.64s'", -"%-.16s příkaz nepřístupný pro uživatele: '%-.32s@%-.64s' pro tabulku '%-.64s'", -"%-.16s příkaz nepřístupný pro uživatele: '%-.32s@%-.64s' pro sloupec '%-.64s' v tabulce '%-.64s'", -"Neplatný příkaz GRANT/REVOKE. Prosím, přečtěte si v manuálu, jaká privilegia je možné použít.", -"Argument příkazu GRANT uživatel nebo stroj je příliš dlouhý", +"Pro sd-Bílenou knihovnu nejsou povoleny cesty",-A +"Funkce '%-.64s' ji-Bž existuje",-A +"Nemohu otev-Břít sdílenou knihovnu '%-.64s' (errno: %d %s)",-A +"Nemohu naj-Bít funkci '%-.64s' v knihovně'",-A +"Funkce '%-.64s' nen-Bí definována",-A +"Stroj '%-.64s' je zablokov-Bán kvůli mnoha chybám při připojování. Odblokujete použitím 'mysqladmin flush-hosts'",-A +"Stroj '%-.64s' nem-Bá povoleno se k tomuto MySQL serveru připojit",-A +"Pou-Bžíváte MySQL jako anonymní uživatel a anonymní uživatelé nemají povoleno měnit hesla",-A +"Na zm-Běnu hesel ostatním musíte mít právo provést update tabulek v databázi mysql",-A +"V tabulce user nen-Bí žádný odpovídající řádek",-A +"Nalezen-Bých řádků: %ld Změněno: %ld Varování: %ld",-A +"Nemohu vytvo-Břit nový thread (errno %d). Pokud je ještě nějaká volná paměť, podívejte se do manuálu na část o chybách specifických pro jednotlivé operační systémy",-A +"Po-Bčet sloupců neodpovídá počtu hodnot na řádku %ld",-A +"Nemohu znovuotev-Břít tabulku: '%-.64s',-A +"Neplatn-Bé užití hodnoty NULL",-A +"Regul-Bární výraz vrátil chybu '%-.64s'",-A +"Pokud nen-Bí žádná GROUP BY klauzule, není dovoleno současné použití GROUP položek (MIN(),MAX(),COUNT()...) s ne GROUP položkami",-A +"Neexistuje odpov-Bídající grant pro uživatele '%-.32s' na stroji '%-.64s'",-A +"%-.16s p-Bříkaz nepřístupný pro uživatele: '%-.32s@%-.64s' pro tabulku '%-.64s'",-A +"%-.16s p-Bříkaz nepřístupný pro uživatele: '%-.32s@%-.64s' pro sloupec '%-.64s' v tabulce '%-.64s'",-A +"Neplatn-Bý příkaz GRANT/REVOKE. Prosím, přečtěte si v manuálu, jaká privilegia je možné použít.",-A +"Argument p-Bříkazu GRANT uživatel nebo stroj je příliš dlouhý",-A "Tabulka '%-64s.%s' neexistuje", -"Neexistuje odpovídající grant pro uživatele '%-.32s' na stroji '%-.64s' pro tabulku '%-.64s'", -"Použitý příkaz není v této verzi MySQL povolen", -"Vaše syntaxe je nějaká divná", -"Zpožděný insert threadu nebyl schopen získat požadovaný zámek pro tabulku %-.64s", -"Příliš mnoho zpožděných threadů", -"Zrušeno spojení %ld do databáze: '%-.64s' uživatel: '%-.64s' (%s)", -"Zjištěn příchozí packet delší než 'max_allowed_packet'", -"Zjištěna chyba při čtení z roury spojení", -"Zjištěna chyba fcntl()", -"Příchozí packety v chybném pořadí", -"Nemohu rozkomprimovat komunikační packet", -"Zjištěna chyba při čtení komunikačního packetu", -"Zjištěn timeout při čtení komunikačního packetu", -"Zjištěna chyba při zápisu komunikačního packetu", -"Zjištěn timeout při zápisu komunikačního packetu", -"Výsledný řetězec je delší než max_allowed_packet", -"Typ použité tabulky nepodporuje BLOB/TEXT sloupce", -"Typ použité tabulky nepodporuje AUTO_INCREMENT sloupce", -"INSERT DELAYED není možno s tabulkou '%-.64s' použít, protože je zamčená pomocí LOCK TABLES", -"Nesprávné jméno sloupce '%-.100s'", -"Handler použité tabulky neumí indexovat sloupce '%-.64s'", -"Všechny tabulky v MERGE tabulce nejsou definovány stejně", -"Kvůli unique constraintu nemozu zapsat do tabulky '%-.64s'", -"BLOB sloupec '%-.64s' je použit ve specifikaci klíče bez délky", -+"V-Bšechny části primárního klíče musejí být NOT NULL; pokud potřebujete NULL, použijte UNIQUE",-A -+"V-Býsledek obsahuje více než jeden řádek",-A -+"Tento typ tabulky vy-Bžaduje primární klíč",-A -+"Tato verze MySQL nen-Bí zkompilována s podporou RAID",-A -+"Update tabulky bez WHERE s kl-Bíčem není v módu bezpečných update dovoleno",-A -+"Kl-Bíč '%-.64s' v tabulce '%-.64s' neexistuje",-A -+"Nemohu otev-Břít tabulku",-A -+"Handler tabulky nepodporuje check/repair", -"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 handler for the table does not support binary table dump", -"Binlog closed while trying to FLUSH MASTER", -"Failed rebuilding the index of dumped table '%-.64s'", -"Error from master: '%-.64s'", -"Net error reading from master", -"Net error writing to master", -"Can't find FULLTEXT index matching the column list", +"Neexistuje odpov-Bídající grant pro uživatele '%-.32s' na stroji '%-.64s' pro tabulku '%-.64s'",-A +"Pou-Bžitý příkaz není v této verzi MySQL povolen",-A +"Va-Bše syntaxe je nějaká divná",-A +"Zpo-Bžděný insert threadu nebyl schopen získat požadovaný zámek pro tabulku %-.64s",-A +"P-Bříliš mnoho zpožděných threadů",-A +"Zru-Bšeno spojení %ld do databáze: '%-.64s' uživatel: '%-.64s' (%s)",-A +"Zji-Bštěn příchozí packet delší než 'max_allowed_packet'",-A +"Zji-Bštěna chyba při čtení z roury spojení",-A +"Zji-Bštěna chyba fcntl()",-A +"P-Bříchozí packety v chybném pořadí",-A +"Nemohu rozkomprimovat komunika-Bční packet",-A +"Zji-Bštěna chyba při čtení komunikačního packetu",-A +"Zji-Bštěn timeout při čtení komunikačního packetu",-A +"Zji-Bštěna chyba při zápisu komunikačního packetu",-A +"Zji-Bštěn timeout při zápisu komunikačního packetu",-A +"V-Býsledný řetězec je delší než max_allowed_packet",-A +"Typ pou-Bžité tabulky nepodporuje BLOB/TEXT sloupce",-A +"Typ pou-Bžité tabulky nepodporuje AUTO_INCREMENT sloupce",-A +"INSERT DELAYED nen-Bí možno s tabulkou '%-.64s' použít, protože je zamčená pomocí LOCK TABLES",-A +"Nespr-Bávné jméno sloupce '%-.100s'",-A +"Handler pou-Bžité tabulky neumí indexovat sloupce '%-.64s'",-A +"V-Bšechny tabulky v MERGE tabulce nejsou definovány stejně",-A +"Kv-Bůli unique constraintu nemozu zapsat do tabulky '%-.64s'",-A +"BLOB sloupec '%-.64s' je pou-Bžit ve specifikaci klíče bez délky",-A +"V-Bšechny části primárního klíče musejí být NOT NULL; pokud potřebujete NULL, použijte UNIQUE",-A +"V-Býsledek obsahuje více než jeden řádek",-A +"Tento typ tabulky vy-Bžaduje primární klíč",-A +"Tato verze MySQL nen-Bí zkompilována s podporou RAID",-A +"Update tabulky bez WHERE s kl-Bíčem není v módu bezpečných update dovoleno",-A +"Kl-Bíč '%-.64s' v tabulce '%-.64s' neexistuje",-A +"Nemohu otev-Břít tabulku",-A +"Handler tabulky nepodporuje check/repair", +"Proveden-Bí tohoto příkazu není v transakci dovoleno",-A +"Chyba %d p-Bři COMMIT",-A +"Chyba %d p-Bři ROLLBACK",-A +"Chyba %d p-Bři FLUSH_LOGS",-A +"Chyba %d p-Bři CHECKPOINT",-A +"Spojen-Bí %ld do databáze: '%-.64s' uživatel: '%-.32s' stroj: `%-.64s' (%-.64s) bylo přerušeno",-A +"Handler tabulky nepodporuje bin-Bární dump",-A +"Binlog uzav-Břen při pokusu o FLUSH MASTER",-A +"P-Břebudování indexu dumpnuté tabulky '%-.64s' nebylo úspěšné",-A +"Chyba masteru: '%-.64s'", +"S-Bíťová chyba při čtení z masteru",-A +"S-Bíťová chyba při zápisu na master",-A +"-BŽádný sloupec nemá vytvořen fulltextový index",-A +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/danish/errmsg.sys b/sql/share/danish/errmsg.sys Binary files differindex e59cb624472..fa6e3ed8edc 100644 --- a/sql/share/danish/errmsg.sys +++ b/sql/share/danish/errmsg.sys diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index 18dd8ce09b8..b711079a2ff 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -196,3 +196,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/dutch/errmsg.sys b/sql/share/dutch/errmsg.sys Binary files differindex 0950a8d9bc4..a48e905103d 100644 --- a/sql/share/dutch/errmsg.sys +++ b/sql/share/dutch/errmsg.sys diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index 960200aa182..c093c4b8ecc 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -193,3 +193,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/english/errmsg.sys b/sql/share/english/errmsg.sys Binary files differindex 7451111fcce..167683fe913 100644 --- a/sql/share/english/errmsg.sys +++ b/sql/share/english/errmsg.sys diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index 7c456a6f592..5b70e96740f 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -193,3 +193,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/estonia/errmsg.sys b/sql/share/estonia/errmsg.sys Binary files differindex bd7927bdb5e..ee70248ab8f 100644 --- a/sql/share/estonia/errmsg.sys +++ b/sql/share/estonia/errmsg.sys diff --git a/sql/share/estonia/errmsg.txt b/sql/share/estonia/errmsg.txt index a1614fbd3e8..7bbae9adf86 100644 --- a/sql/share/estonia/errmsg.txt +++ b/sql/share/estonia/errmsg.txt @@ -197,3 +197,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/french/errmsg.sys b/sql/share/french/errmsg.sys Binary files differindex 6947930f875..477cef2f131 100644 --- a/sql/share/french/errmsg.sys +++ b/sql/share/french/errmsg.sys diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 34c488b7129..cf63dc0601d 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -193,3 +193,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/german/errmsg.sys b/sql/share/german/errmsg.sys Binary files differindex 94c99a9262d..c80a962568c 100644 --- a/sql/share/german/errmsg.sys +++ b/sql/share/german/errmsg.sys diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index adc69b823b7..5c2c50c1540 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -196,3 +196,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/greek/errmsg.sys b/sql/share/greek/errmsg.sys Binary files differindex 8fc053c381d..743532a9c75 100644 --- a/sql/share/greek/errmsg.sys +++ b/sql/share/greek/errmsg.sys diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index b3a17af8ec0..c1db8832650 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -193,3 +193,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/hungarian/errmsg.sys b/sql/share/hungarian/errmsg.sys Binary files differindex df039b66ec3..712262aa093 100644 --- a/sql/share/hungarian/errmsg.sys +++ b/sql/share/hungarian/errmsg.sys diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 8e9e04b79b7..e48cab983cf 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -195,3 +195,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/italian/errmsg.sys b/sql/share/italian/errmsg.sys Binary files differindex f1300819c3c..dde6350ba4b 100644 --- a/sql/share/italian/errmsg.sys +++ b/sql/share/italian/errmsg.sys diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 0aa12667b5e..e09b947e06a 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -193,3 +193,4 @@ "Errore di rete ricevendo dal master", "Errore di rete inviando al master", "Impossibile trovare un indice FULLTEXT che corrisponda all'elenco delle colonne", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/japanese/errmsg.sys b/sql/share/japanese/errmsg.sys Binary files differindex 1b5547999a5..ae5057dd7e0 100644 --- a/sql/share/japanese/errmsg.sys +++ b/sql/share/japanese/errmsg.sys diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index da15c0a22f1..5da104479aa 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -195,3 +195,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/korean/errmsg.sys b/sql/share/korean/errmsg.sys Binary files differindex 4bd754f1ff5..1f2c93f8e42 100644 --- a/sql/share/korean/errmsg.sys +++ b/sql/share/korean/errmsg.sys diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index b5f231e1b70..3ac5a9bb2fa 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -193,3 +193,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index 75f86103f7c..491f913cb47 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -195,3 +195,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index 7ad97882398..967de6da7fc 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -195,3 +195,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/polish/errmsg.sys b/sql/share/polish/errmsg.sys Binary files differindex e3879e04810..0b21296d7ee 100644 --- a/sql/share/polish/errmsg.sys +++ b/sql/share/polish/errmsg.sys diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index b73631afed1..f7b492a32d9 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -197,3 +197,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/portuguese/errmsg.sys b/sql/share/portuguese/errmsg.sys Binary files differindex e9d5d4b9cec..12debe72eaf 100644 --- a/sql/share/portuguese/errmsg.sys +++ b/sql/share/portuguese/errmsg.sys diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 466a2cadfd4..f9fbd57c647 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -193,3 +193,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/romania/errmsg.sys b/sql/share/romania/errmsg.sys Binary files differindex 018333d3e1e..20870bb1fa3 100644 --- a/sql/share/romania/errmsg.sys +++ b/sql/share/romania/errmsg.sys diff --git a/sql/share/romania/errmsg.txt b/sql/share/romania/errmsg.txt index 5d34f32e602..5ef2e630e81 100644 --- a/sql/share/romania/errmsg.txt +++ b/sql/share/romania/errmsg.txt @@ -197,3 +197,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/russian/errmsg.sys b/sql/share/russian/errmsg.sys Binary files differindex 5ddaf2e2973..439223e4248 100644 --- a/sql/share/russian/errmsg.sys +++ b/sql/share/russian/errmsg.sys diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index fe12cad035d..634c1f36249 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -196,3 +196,4 @@ "Net error reading from master", "Net error writing to master", "FULLTEXT ÉÎÄĹËÓ, ÓĎĎÔ×ĹÔÓÔ×ŐŔÝÉĘ ÚÁÄÁÎÎĎÍŐ ÓĐÉÓËŐ ÓÔĎĚÂĂĎ×, ÎĹ ÎÁĘÄĹÎ", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/slovak/errmsg.sys b/sql/share/slovak/errmsg.sys Binary files differindex c14049c829f..9efe926ff15 100644 --- a/sql/share/slovak/errmsg.sys +++ b/sql/share/slovak/errmsg.sys diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index 7b5d8f9a015..485fff107ed 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -201,3 +201,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/spanish/errmsg.sys b/sql/share/spanish/errmsg.sys Binary files differindex 60c71cb8e8f..e90aac38bc5 100644 --- a/sql/share/spanish/errmsg.sys +++ b/sql/share/spanish/errmsg.sys diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 0f16b66f6d8..6a26480f7d4 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -194,3 +194,4 @@ "Net error reading from master", "Net error writing to master", "Can't find FULLTEXT index matching the column list", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/swedish/errmsg.OLD b/sql/share/swedish/errmsg.OLD index 0181d0febd6..94055083e54 100644 --- a/sql/share/swedish/errmsg.OLD +++ b/sql/share/swedish/errmsg.OLD @@ -193,3 +193,5 @@ "Fick nätverksfel vid läsning frĺn master", "Fick nätverksfel vid skrivning till master", "Hittar inte ett FULLTEXT index i kolumnlist", +#ER_LOCK_OR_ACTIVE_TRANSACTION +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/share/swedish/errmsg.sys b/sql/share/swedish/errmsg.sys Binary files differindex d48cd88bf7b..ea9ae0f32fd 100644 --- a/sql/share/swedish/errmsg.sys +++ b/sql/share/swedish/errmsg.sys diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 0181d0febd6..233a60a5221 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -193,3 +193,4 @@ "Fick nätverksfel vid läsning frĺn master", "Fick nätverksfel vid skrivning till master", "Hittar inte ett FULLTEXT index i kolumnlist", +"Can't execute the given command because you have active locked tables or an active transaction", diff --git a/sql/slave.cc b/sql/slave.cc index afb14dd11c2..a527f3a1485 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -406,7 +406,7 @@ static int init_slave_thread(THD* thd) if (init_thr_lock() || my_pthread_setspecific_ptr(THR_THD, thd) || - my_pthread_setspecific_ptr(THR_MALLOC, &thd->alloc) || + my_pthread_setspecific_ptr(THR_MALLOC, &thd->mem_root) || my_pthread_setspecific_ptr(THR_NET, &thd->net)) { close_connection(&thd->net,ER_OUT_OF_RESOURCES); // is this needed? @@ -422,7 +422,7 @@ static int init_slave_thread(THD* thd) VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); #endif - thd->alloc.free=thd->alloc.used=0; + thd->mem_root.free=thd->mem_root.used=0; // Probably not needed if (thd->max_join_size == (ulong) ~0L) thd->options |= OPTION_BIG_SELECTS; @@ -557,7 +557,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) { Query_log_event* qev = (Query_log_event*)ev; int q_len = qev->q_len; - init_sql_alloc(&thd->alloc, 8192); + init_sql_alloc(&thd->mem_root, 8192); thd->db = (char*)qev->db; if(db_ok(thd->db, replicate_do_db, replicate_ignore_db)) { @@ -602,13 +602,13 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) thd->db = 0;// prevent db from being freed thd->query = 0; // just to be sure close_thread_tables(thd); - free_root(&thd->alloc); - if(thd->query_error) - { - sql_print_error("Slave: error running query '%s' ", - qev->query); - return 1; - } + free_root(&thd->mem_root); + if (thd->query_error) + { + sql_print_error("Slave: error running query '%s' ", + qev->query); + return 1; + } delete ev; if(thd->fatal_error) @@ -626,7 +626,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) case LOAD_EVENT: { Load_log_event* lev = (Load_log_event*)ev; - init_sql_alloc(&thd->alloc, 8192); + init_sql_alloc(&thd->mem_root, 8192); thd->db = (char*)lev->db; thd->query = 0; thd->query_error = 0; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 983ffef0ace..e4e0bf14a3d 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -29,8 +29,6 @@ #include <io.h> #endif -#define MAX_DBKEY_LENGTH (FN_LEN*2+2) - static int key_cache_used=0; TABLE *unused_tables; /* Used by mysql_test */ HASH open_cache; /* Used by mysql_test */ @@ -120,7 +118,7 @@ static byte *cache_key(const byte *record,uint *length, void table_cache_init(void) { - VOID(hash_init(&open_cache,table_cache_size,0,0,cache_key, + VOID(hash_init(&open_cache,table_cache_size+16,0,0,cache_key, (void (*)(void*)) free_cache_entry,0)); mysql_rm_tmp_tables(); } @@ -1234,7 +1232,7 @@ void close_old_data_files(THD *thd, TABLE *table, bool abort_locks) if the table is closed */ -static bool table_is_used(TABLE *table) +bool table_is_used(TABLE *table) { do { @@ -2171,4 +2169,3 @@ int setup_ftfuncs(THD *thd,TABLE_LIST *tables, List<Item_func_match> &ftfuncs) return 0; } - diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 19b9ecdaae0..cdf100cb9a7 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -109,7 +109,7 @@ THD::THD() net.vio=0; ull=0; system_thread=0; - bzero((char*) &alloc,sizeof(alloc)); + bzero((char*) &mem_root,sizeof(mem_root)); #ifdef __WIN__ real_id = 0 ; #endif @@ -154,7 +154,7 @@ THD::~THD() safeFree(user); safeFree(db); safeFree(ip); - free_root(&alloc); + free_root(&mem_root); mysys_var=0; // Safety (shouldn't be needed) DBUG_VOID_RETURN; } @@ -165,11 +165,10 @@ THD::~THD() bool THD::store_globals() { return (my_pthread_setspecific_ptr(THR_THD, this) || - my_pthread_setspecific_ptr(THR_MALLOC, &alloc) || + my_pthread_setspecific_ptr(THR_MALLOC, &mem_root) || my_pthread_setspecific_ptr(THR_NET, &net)); } - /***************************************************************************** ** Functions to provide a interface to select results *****************************************************************************/ diff --git a/sql/sql_class.h b/sql/sql_class.h index 2ea18751dea..7e561cf9d80 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -223,7 +223,7 @@ class THD :public ilink { public: NET net; LEX lex; - MEM_ROOT alloc; + MEM_ROOT mem_root; HASH user_vars; String packet; /* Room for 1 row */ struct sockaddr_in remote; @@ -287,6 +287,19 @@ public: } return last_insert_id; } + inline bool active_transaction() { return transaction.bdb_tid != 0; } + inline gptr alloc(unsigned int size) { return alloc_root(&mem_root,size); } + inline gptr calloc(unsigned int size) + { + gptr ptr; + if ((ptr=alloc_root(&mem_root,size))) + bzero((char*) ptr,size); + return ptr; + } + inline char *strdup(const char *str) + { return strdup_root(&mem_root,str); } + inline char *memdup(const char *str, unsigned int size) + { return memdup_root(&mem_root,str,size); } }; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index fe8264814a6..bd0415aa936 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1215,14 +1215,19 @@ void select_insert::send_error(uint errcode,const char *err) ::send_error(&thd->net,errcode,err); table->file->extra(HA_EXTRA_NO_CACHE); table->file->activate_all_index(thd); + ha_rollback(thd); } bool select_insert::send_eof() { - int error; - if ((error=table->file->extra(HA_EXTRA_NO_CACHE)) || - (error=table->file->activate_all_index(thd))) + int error,error2; + if (!(error=table->file->extra(HA_EXTRA_NO_CACHE))) + error=table->file->activate_all_index(thd); + if ((error2=ha_autocommit_or_rollback(thd,error)) && ! error) + error=error2; + + if (error) { table->file->print_error(error,MYF(0)); ::send_error(&thd->net); diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 6fd9f203d52..083bc8a83b5 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -46,7 +46,8 @@ enum enum_sql_command { SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_SHOW_GRANTS, SQLCOM_ANALYZE, SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP, SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_SHOW_CREATE, - SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, SQLCOM_CHANGE_MASTER + SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, SQLCOM_CHANGE_MASTER, + SQLCOM_RENAME_TABLE }; enum lex_states { STATE_START, STATE_CHAR, STATE_IDENT, diff --git a/sql/sql_select.cc b/sql/sql_select.cc index fb5125ac79f..9c509484b3c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -773,9 +773,9 @@ make_join_statistics(JOIN *join,TABLE_LIST *tables,COND *conds, DBUG_ENTER("make_join_statistics"); table_count=join->tables; - stat=(JOIN_TAB*) sql_calloc(sizeof(JOIN_TAB)*table_count); - stat_ref=(JOIN_TAB**) sql_alloc(sizeof(JOIN_TAB*)*MAX_TABLES); - table_vector=(TABLE**) sql_alloc(sizeof(TABLE**)*(table_count*2)); + stat=(JOIN_TAB*) join->thd->calloc(sizeof(JOIN_TAB)*table_count); + stat_ref=(JOIN_TAB**) join->thd->alloc(sizeof(JOIN_TAB*)*MAX_TABLES); + table_vector=(TABLE**) join->thd->alloc(sizeof(TABLE**)*(table_count*2)); if (!stat || !stat_ref || !table_vector) DBUG_RETURN(1); // Eom /* purecov: inspected */ select=0; @@ -1832,7 +1832,7 @@ get_best_combination(JOIN *join) table_count=join->tables; if (!(join->join_tab=join_tab= - (JOIN_TAB*) sql_alloc(sizeof(JOIN_TAB)*table_count))) + (JOIN_TAB*) join->thd->alloc(sizeof(JOIN_TAB)*table_count))) return TRUE; join->const_tables=0; /* for checking */ @@ -2056,8 +2056,8 @@ make_simple_join(JOIN *join,TABLE *tmp_table) TABLE **tableptr; JOIN_TAB *join_tab; - if (!(tableptr=(TABLE**) sql_alloc(sizeof(TABLE*))) || - !(join_tab=(JOIN_TAB*) sql_alloc(sizeof(JOIN_TAB)))) + if (!(tableptr=(TABLE**) join->thd->alloc(sizeof(TABLE*))) || + !(join_tab=(JOIN_TAB*) join->thd->alloc(sizeof(JOIN_TAB)))) return TRUE; join->join_tab=join_tab; join->table=tableptr; tableptr[0]=tmp_table; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 55142e21dad..c027f6397c2 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -55,7 +55,7 @@ mysqld_show_dbs(THD *thd,const char *wild) char *file_name; DBUG_ENTER("mysqld_show_dbs"); - field->name=(char*) sql_alloc(20+ (wild ? strlen(wild)+4: 0)); + field->name=(char*) thd->alloc(20+ (wild ? strlen(wild)+4: 0)); field->max_length=NAME_LEN; end=strmov(field->name,"Database"); if (wild && wild[0]) @@ -92,7 +92,7 @@ int mysqld_show_tables(THD *thd,const char *db,const char *wild) char *file_name; DBUG_ENTER("mysqld_show_tables"); - field->name=(char*) sql_alloc(20+strlen(db)+(wild ? strlen(wild)+4:0)); + field->name=(char*) thd->alloc(20+strlen(db)+(wild ? strlen(wild)+4:0)); end=strxmov(field->name,"Tables_in_",db,NullS); if (wild && wild[0]) strxmov(end," (",wild,")",NullS); @@ -170,7 +170,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path, if (check_grant(thd,TABLE_ACLS,&table_list,1)) continue; } - if (files->push_back(sql_strdup(file->name))) + if (files->push_back(thd->strdup(file->name))) { my_dirend(dirp); DBUG_RETURN(-1); @@ -868,12 +868,12 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) thread_info *thd_info=new thread_info; thd_info->thread_id=tmp->thread_id; - thd_info->user=sql_strdup(tmp->user ? tmp->user : (tmp->system_thread ? + thd_info->user=thd->strdup(tmp->user ? tmp->user : (tmp->system_thread ? "system user" : "unauthenticated user")); - thd_info->host=sql_strdup(tmp->host ? tmp->host : (tmp->ip ? tmp->ip : + thd_info->host=thd->strdup(tmp->host ? tmp->host : (tmp->ip ? tmp->ip : (tmp->system_thread ? "none" : "connecting host"))); if ((thd_info->db=tmp->db)) // Safe test - thd_info->db=sql_strdup(thd_info->db); + thd_info->db=thd->strdup(thd_info->db); thd_info->command=(int) tmp->command; if (tmp->mysys_var) pthread_mutex_lock(&tmp->mysys_var->mutex); @@ -902,7 +902,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) uint length=strlen(tmp->query); if (length > max_query_length) length=max_query_length; - thd_info->query=(char*) sql_memdup(tmp->query,length+1); + thd_info->query=(char*) thd->memdup(tmp->query,length+1); thd_info->query[length]=0; } thread_infos.append(thd_info); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index d9e14014189..1440929c98b 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -644,7 +644,7 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, ** Alter a table definition ****************************************************************************/ -static bool +bool mysql_rename_table(enum db_type base, const char *old_db, const char * old_name, @@ -659,9 +659,17 @@ mysql_rename_table(enum db_type base, (void) sprintf(to,"%s/%s/%s",mysql_data_home,new_db,new_name); fn_format(from,from,"","",4); fn_format(to,to, "","",4); - if (file->rename_table((const char*) from,(const char *) to) || - rename_file_ext(from,to,reg_ext)) + if (file->rename_table((const char*) from,(const char *) to)) error=1; + else + { + if (rename_file_ext(from,to,reg_ext)) + { + error=1; + /* Restore old file name */ + file->rename_table((const char*) to,(const char *) from); + } + } delete file; DBUG_RETURN(error); } @@ -1412,7 +1420,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, #ifdef __WIN__ // Win32 can't rename an open table, so we must close the org table! - table_name=sql_strdup(table_name); // must be saved + table_name=thd->strdup(table_name); // must be saved if (close_cached_table(thd,table)) { // Aborted VOID(quick_rm_table(new_db_type,new_db,tmp_name)); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3028990fc95..5cfc05406c4 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -488,7 +488,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); query verb_clause create change select drop insert replace insert2 insert_values update delete show describe load alter optimize flush begin commit rollback slave master_def master_defs - repair analyze check field_list field_list_item field_spec kill + repair analyze check rename + field_list field_list_item field_spec kill select_item_list select_item values_list no_braces limit_clause delete_limit_clause fields opt_values values procedure_list procedure_list2 procedure_item @@ -504,6 +505,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); flush_options flush_option insert_lock_option replace_lock_option equal optional_braces opt_key_definition key_usage_list2 opt_mi_check_type opt_to mi_check_types normal_join + table_to_table_list table_to_table END_OF_INPUT %type <NONE> @@ -539,6 +541,7 @@ verb_clause: | lock | kill | optimize + | rename | repair | replace | revoke @@ -1078,6 +1081,7 @@ opt_place: opt_to: /* empty */ {} | TO_SYM {} + | AS {} slave: SLAVE START_SYM @@ -1134,6 +1138,24 @@ optimize: YYABORT; } +rename: + RENAME table_or_tables + { + Lex->sql_command=SQLCOM_RENAME_TABLE; + } + table_to_table_list + +table_to_table_list: + table_to_table + | table_to_table_list ',' table_to_table + +table_to_table: + table_ident TO_SYM table_ident + { if (add_table_to_list($1,NULL,TL_IGNORE) || + add_table_to_list($3,NULL,TL_IGNORE)) + YYABORT; + } + /* ** Select : retrieve data from table */ diff --git a/sql/thr_malloc.cc b/sql/thr_malloc.cc index 8cf4f937546..9273b3eb5a5 100644 --- a/sql/thr_malloc.cc +++ b/sql/thr_malloc.cc @@ -23,6 +23,7 @@ extern "C" { void sql_alloc_error_handler(void) { current_thd->fatal_error=1; /* purecov: inspected */ + sql_print_error(ER(ER_OUT_OF_RESOURCES)); } } @@ -37,10 +38,6 @@ gptr sql_alloc(uint Size) { MEM_ROOT *root=my_pthread_getspecific_ptr(MEM_ROOT*,THR_MALLOC); char *ptr= (char*) alloc_root(root,Size); - if (!ptr) - { - sql_print_error(ER(ER_OUT_OF_RESOURCES)); - } return ptr; } diff --git a/sql/unireg.h b/sql/unireg.h index a0890473de8..988be3d398f 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -40,6 +40,7 @@ #define ERRMAPP 1 /* Errormap f|r my_error */ #define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */ +#define MAX_DBKEY_LENGTH (FN_LEN*2+2) #define MAX_FIELD_NAME 34 /* Max colum name length +2 */ #define MAX_KEY 32 /* Max used keys */ #define MAX_REF_PARTS 16 /* Max parts used as ref */ diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c index 119443a0c95..9a5a91f9265 100644 --- a/strings/ctype-sjis.c +++ b/strings/ctype-sjis.c @@ -224,7 +224,8 @@ int my_strnncoll_sjis(const uchar *s1, int len1, const uchar *s2, int len2) int my_strcoll_sjis(const uchar *s1, const uchar *s2) { - return (uint) my_strnncoll_sjis(s1,(uint) strlen(s1), s2,(uint) strlen(s2)); + return (uint) my_strnncoll_sjis(s1,(uint) strlen((char*) s1), + s2,(uint) strlen((char*) s2)); } int my_strnxfrm_sjis(uchar *dest, uchar *src, int len, int srclen) @@ -245,7 +246,7 @@ int my_strnxfrm_sjis(uchar *dest, uchar *src, int len, int srclen) int my_strxfrm_sjis(uchar *dest, uchar *src, int len) { - return my_strnxfrm_sjis(dest, src, len, (uint) strlen(src)); + return my_strnxfrm_sjis(dest, src, len, (uint) strlen((char*) src)); } |