summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-08-21 03:00:52 +0300
committerunknown <monty@donna.mysql.com>2000-08-21 03:00:52 +0300
commit55c5016f92383fdf7cd14de4ef3ec5afbb89fd5a (patch)
treef46edbbf41f400440bde25519820b29885305b1b
parent259c7ea0f84f25d82ec7b818e5b770f0bc7917d3 (diff)
downloadmariadb-git-55c5016f92383fdf7cd14de4ef3ec5afbb89fd5a.tar.gz
RENAME TABLE table_name TO new_table_name ; Faster Alloc
Small bug fixes myisammrg/myrg_rfirst.c: Change mode to -rw-rw-r-- myisammrg/myrg_rlast.c: Change mode to -rw-rw-r-- myisammrg/myrg_rnext.c: Change mode to -rw-rw-r-- myisammrg/myrg_rprev.c: Change mode to -rw-rw-r-- Docs/manual.texi: Update of RENAME configure.in: Portability fix include/global.h: Fix for ODBC and Intel Ia64 include/mysqld_error.h: RENAME TABLE myisam/myisamchk.c: Faster --fast myisammrg/myrg_queue.c: Bug fix myisammrg/myrg_rkey.c: Portability fix sql-bench/test-insert.sh: Fix for duplicate key test sql/ChangeLog: Changelog sql/Makefile.am: RENAME TABLE sql/item_sum.cc: Fix for COUNT(DISTINCT) sql/lock.cc: RENAME TABLE sql/share/czech/errmsg.sys: RENAME TABLE sql/share/czech/errmsg.txt: RENAME TABLE sql/share/danish/errmsg.sys: RENAME TABLE sql/share/danish/errmsg.txt: RENAME TABLE sql/share/dutch/errmsg.sys: RENAME TABLE sql/share/dutch/errmsg.txt: RENAME TABLE sql/share/english/errmsg.sys: RENAME TABLE sql/share/english/errmsg.txt: RENAME TABLE sql/share/estonia/errmsg.sys: RENAME TABLE sql/share/estonia/errmsg.txt: RENAME TABLE sql/share/french/errmsg.sys: RENAME TABLE sql/share/french/errmsg.txt: RENAME TABLE sql/share/german/errmsg.sys: RENAME TABLE sql/share/german/errmsg.txt: RENAME TABLE sql/share/greek/errmsg.sys: RENAME TABLE sql/share/greek/errmsg.txt: RENAME TABLE sql/share/hungarian/errmsg.sys: RENAME TABLE sql/share/hungarian/errmsg.txt: RENAME TABLE sql/share/italian/errmsg.sys: RENAME TABLE sql/share/italian/errmsg.txt: RENAME TABLE sql/share/japanese/errmsg.sys: RENAME TABLE sql/share/japanese/errmsg.txt: RENAME TABLE sql/share/korean/errmsg.sys: RENAME TABLE sql/share/korean/errmsg.txt: RENAME TABLE sql/share/norwegian-ny/errmsg.txt: RENAME TABLE sql/share/norwegian/errmsg.txt: RENAME TABLE sql/share/polish/errmsg.sys: RENAME TABLE sql/share/polish/errmsg.txt: RENAME TABLE sql/share/portuguese/errmsg.sys: RENAME TABLE sql/share/portuguese/errmsg.txt: RENAME TABLE sql/share/romania/errmsg.sys: RENAME TABLE sql/share/romania/errmsg.txt: RENAME TABLE sql/share/romanian/errmsg.txt: ***MISSING WEAVE*** sql/share/russian/errmsg.sys: RENAME TABLE sql/share/russian/errmsg.txt: RENAME TABLE sql/share/slovak/errmsg.sys: RENAME TABLE sql/share/slovak/errmsg.txt: RENAME TABLE sql/share/spanish/errmsg.sys: RENAME TABLE sql/share/spanish/errmsg.txt: RENAME TABLE sql/share/swedish/errmsg.OLD: RENAME TABLE sql/share/swedish/errmsg.sys: RENAME TABLE sql/share/swedish/errmsg.txt: RENAME TABLE sql/slave.cc: Faster alloc sql/sql_base.cc: RENAME TABLE sql/sql_class.cc: Faster alloc sql/sql_class.h: Faster alloc sql/sql_insert.cc: Fix bug in INSERT ... SELECT to BDB table sql/sql_lex.h: RENAME TABLE sql/sql_select.cc: Faster alloc sql/sql_show.cc: Faster alloc sql/sql_table.cc: RENAME TABLE sql/sql_yacc.yy: RENAME TABLE sql/thr_malloc.cc: Faster alloc sql/unireg.h: RENAME TABLE strings/ctype-sjis.c: Portability fix
-rw-r--r--Docs/manual.texi113
-rw-r--r--configure.in8
-rw-r--r--include/global.h10
-rw-r--r--include/mysqld_error.h3
-rw-r--r--myisam/myisamchk.c48
-rw-r--r--myisammrg/myrg_queue.c1
-rw-r--r--myisammrg/myrg_rkey.c3
-rwxr-xr-xsql-bench/test-insert.sh2
-rw-r--r--sql/ChangeLog5
-rw-r--r--sql/Makefile.am2
-rw-r--r--sql/item_sum.cc4
-rw-r--r--sql/lock.cc84
-rw-r--r--sql/share/czech/errmsg.sysbin9707 -> 10283 bytes
-rw-r--r--sql/share/czech/errmsg.txt377
-rw-r--r--sql/share/danish/errmsg.sysbin10135 -> 10232 bytes
-rw-r--r--sql/share/danish/errmsg.txt1
-rw-r--r--sql/share/dutch/errmsg.sysbin10351 -> 10448 bytes
-rw-r--r--sql/share/dutch/errmsg.txt1
-rw-r--r--sql/share/english/errmsg.sysbin9516 -> 9613 bytes
-rw-r--r--sql/share/english/errmsg.txt1
-rw-r--r--sql/share/estonia/errmsg.sysbin9492 -> 9589 bytes
-rw-r--r--sql/share/estonia/errmsg.txt1
-rw-r--r--sql/share/french/errmsg.sysbin9957 -> 10054 bytes
-rw-r--r--sql/share/french/errmsg.txt1
-rw-r--r--sql/share/german/errmsg.sysbin10736 -> 10833 bytes
-rw-r--r--sql/share/german/errmsg.txt1
-rw-r--r--sql/share/greek/errmsg.sysbin11563 -> 11660 bytes
-rw-r--r--sql/share/greek/errmsg.txt1
-rw-r--r--sql/share/hungarian/errmsg.sysbin10472 -> 10569 bytes
-rw-r--r--sql/share/hungarian/errmsg.txt1
-rw-r--r--sql/share/italian/errmsg.sysbin11081 -> 11178 bytes
-rw-r--r--sql/share/italian/errmsg.txt1
-rw-r--r--sql/share/japanese/errmsg.sysbin10263 -> 10360 bytes
-rw-r--r--sql/share/japanese/errmsg.txt1
-rw-r--r--sql/share/korean/errmsg.sysbin10393 -> 10490 bytes
-rw-r--r--sql/share/korean/errmsg.txt1
-rw-r--r--sql/share/norwegian-ny/errmsg.txt1
-rw-r--r--sql/share/norwegian/errmsg.txt1
-rw-r--r--sql/share/polish/errmsg.sysbin10151 -> 10248 bytes
-rw-r--r--sql/share/polish/errmsg.txt1
-rw-r--r--sql/share/portuguese/errmsg.sysbin10076 -> 10173 bytes
-rw-r--r--sql/share/portuguese/errmsg.txt1
-rw-r--r--sql/share/romania/errmsg.sysbin11663 -> 11760 bytes
-rw-r--r--sql/share/romania/errmsg.txt1
-rw-r--r--sql/share/russian/errmsg.sysbin9970 -> 10067 bytes
-rw-r--r--sql/share/russian/errmsg.txt1
-rw-r--r--sql/share/slovak/errmsg.sysbin9736 -> 9833 bytes
-rw-r--r--sql/share/slovak/errmsg.txt1
-rw-r--r--sql/share/spanish/errmsg.sysbin10092 -> 10189 bytes
-rw-r--r--sql/share/spanish/errmsg.txt1
-rw-r--r--sql/share/swedish/errmsg.OLD2
-rw-r--r--sql/share/swedish/errmsg.sysbin9840 -> 9937 bytes
-rw-r--r--sql/share/swedish/errmsg.txt1
-rw-r--r--sql/slave.cc22
-rw-r--r--sql/sql_base.cc7
-rw-r--r--sql/sql_class.cc7
-rw-r--r--sql/sql_class.h15
-rw-r--r--sql/sql_insert.cc11
-rw-r--r--sql/sql_lex.h3
-rw-r--r--sql/sql_select.cc12
-rw-r--r--sql/sql_show.cc14
-rw-r--r--sql/sql_table.cc16
-rw-r--r--sql/sql_yacc.yy24
-rw-r--r--sql/thr_malloc.cc5
-rw-r--r--sql/unireg.h1
-rw-r--r--strings/ctype-sjis.c5
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
index e509b71a857..2c20765abd3 100644
--- a/sql/share/czech/errmsg.sys
+++ b/sql/share/czech/errmsg.sys
Binary files differ
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
index e59cb624472..fa6e3ed8edc 100644
--- a/sql/share/danish/errmsg.sys
+++ b/sql/share/danish/errmsg.sys
Binary files differ
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
index 0950a8d9bc4..a48e905103d 100644
--- a/sql/share/dutch/errmsg.sys
+++ b/sql/share/dutch/errmsg.sys
Binary files differ
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
index 7451111fcce..167683fe913 100644
--- a/sql/share/english/errmsg.sys
+++ b/sql/share/english/errmsg.sys
Binary files differ
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
index bd7927bdb5e..ee70248ab8f 100644
--- a/sql/share/estonia/errmsg.sys
+++ b/sql/share/estonia/errmsg.sys
Binary files differ
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
index 6947930f875..477cef2f131 100644
--- a/sql/share/french/errmsg.sys
+++ b/sql/share/french/errmsg.sys
Binary files differ
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
index 94c99a9262d..c80a962568c 100644
--- a/sql/share/german/errmsg.sys
+++ b/sql/share/german/errmsg.sys
Binary files differ
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
index 8fc053c381d..743532a9c75 100644
--- a/sql/share/greek/errmsg.sys
+++ b/sql/share/greek/errmsg.sys
Binary files differ
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
index df039b66ec3..712262aa093 100644
--- a/sql/share/hungarian/errmsg.sys
+++ b/sql/share/hungarian/errmsg.sys
Binary files differ
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
index f1300819c3c..dde6350ba4b 100644
--- a/sql/share/italian/errmsg.sys
+++ b/sql/share/italian/errmsg.sys
Binary files differ
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
index 1b5547999a5..ae5057dd7e0 100644
--- a/sql/share/japanese/errmsg.sys
+++ b/sql/share/japanese/errmsg.sys
Binary files differ
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
index 4bd754f1ff5..1f2c93f8e42 100644
--- a/sql/share/korean/errmsg.sys
+++ b/sql/share/korean/errmsg.sys
Binary files differ
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
index e3879e04810..0b21296d7ee 100644
--- a/sql/share/polish/errmsg.sys
+++ b/sql/share/polish/errmsg.sys
Binary files differ
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
index e9d5d4b9cec..12debe72eaf 100644
--- a/sql/share/portuguese/errmsg.sys
+++ b/sql/share/portuguese/errmsg.sys
Binary files differ
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
index 018333d3e1e..20870bb1fa3 100644
--- a/sql/share/romania/errmsg.sys
+++ b/sql/share/romania/errmsg.sys
Binary files differ
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
index 5ddaf2e2973..439223e4248 100644
--- a/sql/share/russian/errmsg.sys
+++ b/sql/share/russian/errmsg.sys
Binary files differ
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
index c14049c829f..9efe926ff15 100644
--- a/sql/share/slovak/errmsg.sys
+++ b/sql/share/slovak/errmsg.sys
Binary files differ
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
index 60c71cb8e8f..e90aac38bc5 100644
--- a/sql/share/spanish/errmsg.sys
+++ b/sql/share/spanish/errmsg.sys
Binary files differ
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
index d48cd88bf7b..ea9ae0f32fd 100644
--- a/sql/share/swedish/errmsg.sys
+++ b/sql/share/swedish/errmsg.sys
Binary files differ
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));
}