Commit 8cd4c235 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

Fix that mysqladmin shutdown can be interrupted with ^C

Fixed bug with BLOB keys in BDB tables
Fixed problem with MERGE tables on OS with 32 bit files
Fixed that TIME_TO_SEC() works with negative times
parent daa4229a
...@@ -46791,6 +46791,7 @@ users use this code as the rest of the code and because of this we are ...@@ -46791,6 +46791,7 @@ users use this code as the rest of the code and because of this we are
not yet 100% confident in this code. not yet 100% confident in this code.
@menu @menu
* News-3.23.45:: Changes in release 3.23.45
* News-3.23.44:: Changes in release 3.23.44 * News-3.23.44:: Changes in release 3.23.44
* News-3.23.43:: Changes in release 3.23.43 * News-3.23.43:: Changes in release 3.23.43
* News-3.23.42:: Changes in release 3.23.42 * News-3.23.42:: Changes in release 3.23.42
...@@ -46839,7 +46840,18 @@ not yet 100% confident in this code. ...@@ -46839,7 +46840,18 @@ not yet 100% confident in this code.
* News-3.23.0:: Changes in release 3.23.0 * News-3.23.0:: Changes in release 3.23.0
@end menu @end menu
@node News-3.23.44, News-3.23.43, News-3.23.x, News-3.23.x @node News-3.23.45, News-3.23.44, News-3.23.x, News-3.23.x
@appendixsubsec Changes in release 3.23.45
@itemize @bullet
@item
Fixed bug with BDB tables and keys on @code{BLOB}'s.
@item
Fixed bug in @code{MERGE} tables on OS with 32 bit file pointers.
@item
Fixed bug in @code{TIME_TO_SEC()} when using negative values.
@end itemize
@node News-3.23.44, News-3.23.43, News-3.23.45, News-3.23.x
@appendixsubsec Changes in release 3.23.44 @appendixsubsec Changes in release 3.23.44
@itemize @bullet @itemize @bullet
@item @item
...@@ -46861,10 +46873,6 @@ Fixed problem with sjis character strings used within quoted table names. ...@@ -46861,10 +46873,6 @@ Fixed problem with sjis character strings used within quoted table names.
Fixed coredump when using @code{CREATE ... FULLTEXT} keys with other table Fixed coredump when using @code{CREATE ... FULLTEXT} keys with other table
handlers than MyISAM. handlers than MyISAM.
@item @item
Add missing @code{InnoDB} variables to @code{SHOW VARIABLES}.
@item
Foreign keys checking is now done for @code{InnoDB} tables.
@item
Don't use @code{signal()} on windows because this appears to not be Don't use @code{signal()} on windows because this appears to not be
100 % reliable. 100 % reliable.
@item @item
...@@ -46881,6 +46889,57 @@ a core dump. ...@@ -46881,6 +46889,57 @@ a core dump.
Applied portability fixes for OS/2 (Patch by Yuri Dario). Applied portability fixes for OS/2 (Patch by Yuri Dario).
@end itemize @end itemize
The following changes are for @code{InnoDB} tables:
@itemize @bullet
@item
Add missing @code{InnoDB} variables to @code{SHOW VARIABLES}.
@item
Foreign keys checking is now done for @code{InnoDB} tables.
@item
@code{DROP DATABASE} now works also for @code{InnoDB} tables.
@item
@code{InnoDB} now supports data files and raw disk partitions bigger
than 4 GB on those operating systems which have big files.
@item
@code{InnoDB} calculates better table cardinality estimates for the
MySQL optimizer.
@item
Accent characters in the default character set latin1 are ordered
according to the MySQL ordering.
NOTE: if you are using latin1 and have inserted characters whose code is >
127 to an indexed CHAR column, you should run CHECK TABLE on your table when
you upgrade to 3.23.44, and drop and reimport the table if CHECK TABLE
reports an error!
@item
A new @file{my.cnf} parameter @code{innodb_thread_concurrency} helps in
performance tuning in heavily concurrent environments.
@item
A new @code{my.cnf} parameter @code{innodb_fast_shutdown} speeds up
server shutdown.
@item
A new @code{my.cnf} parameter @code{innodb_force_recovery} helps to save
your data in case the disk image of the database becomes corrupt.
@item
@code{innodb_monitor} has been improved and a new
@code{innodb_table_monitor} added.
@item
Increased maximum key length from 500 to 7000 bytes.
@item
Fixed a bug in replication of auto-inc columns with multiline inserts.
@item
Fixed a bug when the case of letters changes in an update of an indexed
secondary column.
@item
Fixed a hang when there are > 24 data files.
@item
Fixed a crash when @code{MAX(col)} is selected from an empty table, and
col is a not the first column in a multi-column index.
@item
Fixed a bug in purge which could cause crashes.
@end itemize
@node News-3.23.43, News-3.23.42, News-3.23.44, News-3.23.x @node News-3.23.43, News-3.23.42, News-3.23.44, News-3.23.x
@appendixsubsec Changes in release 3.23.43 @appendixsubsec Changes in release 3.23.43
@itemize @bullet @itemize @bullet
...@@ -46981,15 +47040,15 @@ Fixed possible problem with @code{shutdown} on Solaris where the ...@@ -46981,15 +47040,15 @@ Fixed possible problem with @code{shutdown} on Solaris where the
@item @item
InnoDB now supports < 4 GB rows. The former limit was 8000 bytes. InnoDB now supports < 4 GB rows. The former limit was 8000 bytes.
@item @item
The @code{doublewrite} file flush method is used in InnoDB. The @code{doublewrite} file flush method is used in @code{InnoDB}.
It reduces the need for Unix fsync calls to a fraction and It reduces the need for Unix fsync calls to a fraction and
improves performance on most Unix flavors. improves performance on most Unix flavors.
@item @item
You can now use the InnoDB Monitor to print a lot of InnoDB state You can now use the @code{InnoDB} Monitor to print a lot of @code{InnoDB} state
information, including locks, to the standard output; useful in information, including locks, to the standard output; useful in
performance tuning. performance tuning.
@item @item
Several bugs which could cause hangs in InnoDB have been fixed. Several bugs which could cause hangs in @code{InnoDB} have been fixed.
@item @item
Split @code{record_buffer} to @code{record_buffer} and Split @code{record_buffer} to @code{record_buffer} and
@code{record_rnd_buffer}. To make things compatible to previous MySQL @code{record_rnd_buffer}. To make things compatible to previous MySQL
...@@ -47103,7 +47162,7 @@ Extended argument length in option files from 256 to 512 chars. ...@@ -47103,7 +47162,7 @@ Extended argument length in option files from 256 to 512 chars.
Fixed problem with shutdown when @code{INSERT DELAYED} was waiting for Fixed problem with shutdown when @code{INSERT DELAYED} was waiting for
a @code{LOCK TABLE}. a @code{LOCK TABLE}.
@item @item
Fixed coredump bug in InnoDB when tablespace was full. Fixed coredump bug in @code{InnoDB} when tablespace was full.
@item @item
Fixed problem with @code{MERGE} tables and big tables (> 4G) when using Fixed problem with @code{MERGE} tables and big tables (> 4G) when using
@code{ORDER BY}. @code{ORDER BY}.
...@@ -47148,7 +47207,7 @@ New program @code{mysqlcheck}. ...@@ -47148,7 +47207,7 @@ New program @code{mysqlcheck}.
Added database name to output for administrative commands like @code{CHECK}, Added database name to output for administrative commands like @code{CHECK},
@code{REPAIR}, @code{OPTIMIZE}. @code{REPAIR}, @code{OPTIMIZE}.
@item @item
Lots of portability fixes for InnoDB. Lots of portability fixes for @code{InnoDB}.
@item @item
Changed optimizer so that queries like Changed optimizer so that queries like
@code{SELECT * FROM table_name,table_name2 ... ORDER BY key_part1 LIMIT #} @code{SELECT * FROM table_name,table_name2 ... ORDER BY key_part1 LIMIT #}
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <my_pthread.h> /* because of signal() */ #include <my_pthread.h> /* because of signal() */
#endif #endif
#define ADMIN_VERSION "8.22" #define ADMIN_VERSION "8.23"
#define MAX_MYSQL_VAR 64 #define MAX_MYSQL_VAR 64
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */ #define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
#define MAX_TRUNC_LENGTH 3 #define MAX_TRUNC_LENGTH 3
...@@ -1130,7 +1130,7 @@ static void wait_pidfile(char *pidfile) ...@@ -1130,7 +1130,7 @@ static void wait_pidfile(char *pidfile)
system_filename(buff,pidfile); system_filename(buff,pidfile);
while ((fd = my_open(buff, O_RDONLY, MYF(0))) >= 0 && while ((fd = my_open(buff, O_RDONLY, MYF(0))) >= 0 &&
count++ < opt_shutdown_timeout) count++ < opt_shutdown_timeout && !interrupted)
{ {
my_close(fd,MYF(0)); my_close(fd,MYF(0));
sleep(1); sleep(1);
......
...@@ -211,7 +211,7 @@ ...@@ -211,7 +211,7 @@
#define ER_DROP_DB_WITH_READ_LOCK 1208 #define ER_DROP_DB_WITH_READ_LOCK 1208
#define ER_CREATE_DB_WITH_READ_LOCK 1209 #define ER_CREATE_DB_WITH_READ_LOCK 1209
#define ER_WRONG_ARGUMENTS 1210 #define ER_WRONG_ARGUMENTS 1210
#define ER_NO_PERMISSON_TO_CREATE_USER 1211 #define ER_NO_PERMISSION_TO_CREATE_USER 1211
#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 #define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
#define ER_LOCK_DEADLOCK 1213 #define ER_LOCK_DEADLOCK 1213
#define ER_TABLE_CANT_HANDLE_FULLTEXT 1214 #define ER_TABLE_CANT_HANDLE_FULLTEXT 1214
......
...@@ -8,6 +8,8 @@ from_unixtime(unix_timestamp("1994-03-02 10:11:12")) from_unixtime(unix_timestam ...@@ -8,6 +8,8 @@ from_unixtime(unix_timestamp("1994-03-02 10:11:12")) from_unixtime(unix_timestam
1994-03-02 10:11:12 1994-03-02 10:11:12 19940302101112 1994-03-02 10:11:12 1994-03-02 10:11:12 19940302101112
sec_to_time(9001) sec_to_time(9001)+0 time_to_sec("15:12:22") sec_to_time(time_to_sec("0:30:47")/6.21) sec_to_time(9001) sec_to_time(9001)+0 time_to_sec("15:12:22") sec_to_time(time_to_sec("0:30:47")/6.21)
02:30:01 23001 54742 00:04:57 02:30:01 23001 54742 00:04:57
sec_to_time(time_to_sec('-838:59:59'))
-838:59:59
now()-curdate()*1000000-curtime() now()-curdate()*1000000-curtime()
0 0
strcmp(current_timestamp(),concat(current_date()," ",current_time())) strcmp(current_timestamp(),concat(current_date()," ",current_time()))
......
...@@ -9,6 +9,7 @@ select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_times ...@@ -9,6 +9,7 @@ select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_times
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0; select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"), select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
sec_to_time(time_to_sec("0:30:47")/6.21); sec_to_time(time_to_sec("0:30:47")/6.21);
select sec_to_time(time_to_sec('-838:59:59'));
select now()-curdate()*1000000-curtime(); select now()-curdate()*1000000-curtime();
select strcmp(current_timestamp(),concat(current_date()," ",current_time())); select strcmp(current_timestamp(),concat(current_date()," ",current_time()));
select date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w"); select date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w");
......
rm $MYSQL_TEST_DIR/var/slave-data/master.info rm -f $MYSQL_TEST_DIR/var/slave-data/master.info
rm $MYSQL_TEST_DIR/var/slave-data/master.info rm -f $MYSQL_TEST_DIR/var/slave-data/master.info
...@@ -3466,9 +3466,9 @@ int Field_string::pack_cmp(const char *b, uint length) ...@@ -3466,9 +3466,9 @@ int Field_string::pack_cmp(const char *b, uint length)
} }
uint Field_string::packed_col_length(const char *ptr) uint Field_string::packed_col_length(const char *ptr, uint length)
{ {
if (field_length > 255) if (length > 255)
return uint2korr(ptr)+2; return uint2korr(ptr)+2;
else else
return (uint) ((uchar) *ptr)+1; return (uint) ((uchar) *ptr)+1;
...@@ -3476,7 +3476,7 @@ uint Field_string::packed_col_length(const char *ptr) ...@@ -3476,7 +3476,7 @@ uint Field_string::packed_col_length(const char *ptr)
uint Field_string::max_packed_col_length(uint max_length) uint Field_string::max_packed_col_length(uint max_length)
{ {
return (field_length > 255 ? 2 : 1)+max_length; return (max_length > 255 ? 2 : 1)+max_length;
} }
...@@ -3685,9 +3685,9 @@ int Field_varstring::pack_cmp(const char *b, uint key_length) ...@@ -3685,9 +3685,9 @@ int Field_varstring::pack_cmp(const char *b, uint key_length)
return my_sortncmp(a,a_length, b,b_length); return my_sortncmp(a,a_length, b,b_length);
} }
uint Field_varstring::packed_col_length(const char *ptr) uint Field_varstring::packed_col_length(const char *ptr, uint length)
{ {
if (field_length > 255) if (length > 255)
return uint2korr(ptr)+2; return uint2korr(ptr)+2;
else else
return (uint) ((uchar) *ptr)+1; return (uint) ((uchar) *ptr)+1;
...@@ -3695,7 +3695,7 @@ uint Field_varstring::packed_col_length(const char *ptr) ...@@ -3695,7 +3695,7 @@ uint Field_varstring::packed_col_length(const char *ptr)
uint Field_varstring::max_packed_col_length(uint max_length) uint Field_varstring::max_packed_col_length(uint max_length)
{ {
return (field_length > 255 ? 2 : 1)+max_length; return (max_length > 255 ? 2 : 1)+max_length;
} }
/**************************************************************************** /****************************************************************************
...@@ -4225,6 +4225,18 @@ char *Field_blob::pack_key_from_key_image(char *to, const char *from, ...@@ -4225,6 +4225,18 @@ char *Field_blob::pack_key_from_key_image(char *to, const char *from,
return to+length; return to+length;
} }
uint Field_blob::packed_col_length(const char *ptr, uint length)
{
if (length > 255)
return uint2korr(ptr)+2;
else
return (uint) ((uchar) *ptr)+1;
}
uint Field_blob::max_packed_col_length(uint max_length)
{
return (max_length > 255 ? 2 : 1)+max_length;
}
/**************************************************************************** /****************************************************************************
** enum type. ** enum type.
......
...@@ -176,10 +176,10 @@ public: ...@@ -176,10 +176,10 @@ public:
{ {
return pack(to,from,max_length); return pack(to,from,max_length);
} }
virtual uint packed_col_length(const char *to) virtual uint packed_col_length(const char *to, uint length)
{ return pack_length();} { return length;}
virtual uint max_packed_col_length(uint max_length) virtual uint max_packed_col_length(uint max_length)
{ return pack_length();} { return max_length;}
virtual int pack_cmp(const char *a,const char *b, uint key_length_arg) virtual int pack_cmp(const char *a,const char *b, uint key_length_arg)
{ return cmp(a,b); } { return cmp(a,b); }
...@@ -748,7 +748,7 @@ public: ...@@ -748,7 +748,7 @@ public:
const char *unpack(char* to, const char *from); const char *unpack(char* to, const char *from);
int pack_cmp(const char *a,const char *b,uint key_length); int pack_cmp(const char *a,const char *b,uint key_length);
int pack_cmp(const char *b,uint key_length); int pack_cmp(const char *b,uint key_length);
uint packed_col_length(const char *to); uint packed_col_length(const char *to, uint length);
uint max_packed_col_length(uint max_length); uint max_packed_col_length(uint max_length);
uint size_of() const { return sizeof(*this); } uint size_of() const { return sizeof(*this); }
enum_field_types real_type() const { return FIELD_TYPE_STRING; } enum_field_types real_type() const { return FIELD_TYPE_STRING; }
...@@ -800,7 +800,7 @@ public: ...@@ -800,7 +800,7 @@ public:
const char *unpack(char* to, const char *from); const char *unpack(char* to, const char *from);
int pack_cmp(const char *a, const char *b, uint key_length); int pack_cmp(const char *a, const char *b, uint key_length);
int pack_cmp(const char *b, uint key_length); int pack_cmp(const char *b, uint key_length);
uint packed_col_length(const char *to); uint packed_col_length(const char *to, uint length);
uint max_packed_col_length(uint max_length); uint max_packed_col_length(uint max_length);
uint size_of() const { return sizeof(*this); } uint size_of() const { return sizeof(*this); }
enum_field_types real_type() const { return FIELD_TYPE_VAR_STRING; } enum_field_types real_type() const { return FIELD_TYPE_VAR_STRING; }
...@@ -901,11 +901,8 @@ public: ...@@ -901,11 +901,8 @@ public:
char *pack_key_from_key_image(char* to, const char *from, uint max_length); char *pack_key_from_key_image(char* to, const char *from, uint max_length);
int pack_cmp(const char *a, const char *b, uint key_length); int pack_cmp(const char *a, const char *b, uint key_length);
int pack_cmp(const char *b, uint key_length); int pack_cmp(const char *b, uint key_length);
uint packed_col_length(const char *col_ptr) uint packed_col_length(const char *col_ptr, uint length);
{ return get_length(col_ptr)+packlength;} uint max_packed_col_length(uint max_length);
virtual uint max_packed_col_length(uint max_length)
{ return packlength+max_length; }
inline void free() { value.free(); } inline void free() { value.free(); }
inline void clear_temporary() { bzero((char*) &value,sizeof(value)); } inline void clear_temporary() { bzero((char*) &value,sizeof(value)); }
friend void field_conv(Field *to,Field *from); friend void field_conv(Field *to,Field *from);
......
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
- Get a more accurate count of the number of rows (estimate_number_of_rows()). - Get a more accurate count of the number of rows (estimate_number_of_rows()).
We could store the found number of rows when the table is scanned and We could store the found number of rows when the table is scanned and
then increment the counter for each attempted write. then increment the counter for each attempted write.
- We will need a manager thread that calls flush_logs, removes old - We will need to extend the manager thread to makes checkpoints at
logs and makes checkpoints at given intervals. given intervals.
- When not using UPDATE IGNORE, don't make a sub transaction but abort - When not using UPDATE IGNORE, don't make a sub transaction but abort
the main transaction on errors. the main transaction on errors.
- Handling of drop table during autocommit=0 ? - Handling of drop table during autocommit=0 ?
...@@ -90,7 +90,7 @@ const char *berkeley_lock_names[] = ...@@ -90,7 +90,7 @@ const char *berkeley_lock_names[] =
{ "DEFAULT", "OLDEST","RANDOM","YOUNGEST",0 }; { "DEFAULT", "OLDEST","RANDOM","YOUNGEST",0 };
u_int32_t berkeley_lock_types[]= u_int32_t berkeley_lock_types[]=
{ DB_LOCK_DEFAULT, DB_LOCK_OLDEST, DB_LOCK_RANDOM }; { DB_LOCK_DEFAULT, DB_LOCK_OLDEST, DB_LOCK_RANDOM };
TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names),"", TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names)-1,"",
berkeley_lock_names}; berkeley_lock_names};
static void berkeley_print_error(const char *db_errpfx, char *buffer); static void berkeley_print_error(const char *db_errpfx, char *buffer);
...@@ -372,10 +372,12 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) ...@@ -372,10 +372,12 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key)
if ((cmp=key_part->field->pack_cmp(new_key_ptr,saved_key_ptr, if ((cmp=key_part->field->pack_cmp(new_key_ptr,saved_key_ptr,
key_part->length))) key_part->length)))
return cmp; return cmp;
uint length=key_part->field->packed_col_length(new_key_ptr); uint length=key_part->field->packed_col_length(new_key_ptr,
key_part->length);
new_key_ptr+=length; new_key_ptr+=length;
key_length-=length; key_length-=length;
saved_key_ptr+=key_part->field->packed_col_length(saved_key_ptr); saved_key_ptr+=key_part->field->packed_col_length(saved_key_ptr,
key_part->length);
} }
return key->handler.bdb_return_if_eq; return key->handler.bdb_return_if_eq;
} }
...@@ -433,7 +435,7 @@ berkeley_key_cmp(TABLE *table, KEY *key_info, const char *key, uint key_length) ...@@ -433,7 +435,7 @@ berkeley_key_cmp(TABLE *table, KEY *key_info, const char *key, uint key_length)
} }
if ((cmp=key_part->field->pack_cmp(key,key_part->length))) if ((cmp=key_part->field->pack_cmp(key,key_part->length)))
return cmp; return cmp;
uint length=key_part->field->packed_col_length(key); uint length=key_part->field->packed_col_length(key,key_part->length);
key+=length; key+=length;
key_length-=length; key_length-=length;
} }
...@@ -1552,7 +1554,7 @@ DBT *ha_berkeley::get_pos(DBT *to, byte *pos) ...@@ -1552,7 +1554,7 @@ DBT *ha_berkeley::get_pos(DBT *to, byte *pos)
KEY_PART_INFO *end=key_part+table->key_info[primary_key].key_parts; KEY_PART_INFO *end=key_part+table->key_info[primary_key].key_parts;
for ( ; key_part != end ; key_part++) for ( ; key_part != end ; key_part++)
pos+=key_part->field->packed_col_length((char*) pos); pos+=key_part->field->packed_col_length((char*) pos,key_part->length);
to->size= (uint) (pos- (byte*) to->data); to->size= (uint) (pos- (byte*) to->data);
} }
return to; return to;
......
...@@ -175,7 +175,11 @@ void ha_myisammrg::info(uint flag) ...@@ -175,7 +175,11 @@ void ha_myisammrg::info(uint flag)
mean_rec_length=info.reclength; mean_rec_length=info.reclength;
block_size=0; block_size=0;
update_time=0; update_time=0;
#if SIZEOF_OFF_T > 4
ref_length=6; // Should be big enough ref_length=6; // Should be big enough
#else
ref_length=4; // Can't be > than my_off_t
#endif
} }
......
...@@ -248,8 +248,10 @@ longlong Item_func_unix_timestamp::val_int() ...@@ -248,8 +248,10 @@ longlong Item_func_unix_timestamp::val_int()
longlong Item_func_time_to_sec::val_int() longlong Item_func_time_to_sec::val_int()
{ {
TIME ltime; TIME ltime;
longlong seconds;
(void) get_arg0_time(&ltime); (void) get_arg0_time(&ltime);
return ltime.hour*3600L+ltime.minute*60+ltime.second; seconds=ltime.hour*3600L+ltime.minute*60+ltime.second;
return ltime.neg ? -seconds : seconds;
} }
......
...@@ -212,7 +212,7 @@ ...@@ -212,7 +212,7 @@
"DROP DATABASE är inte tillåtet när man har ett globalt läs-lås", "DROP DATABASE är inte tillåtet när man har ett globalt läs-lås",
"CREATE DATABASE är inte tillåtet när man har ett globalt läs-lås", "CREATE DATABASE är inte tillåtet när man har ett globalt läs-lås",
"Felaktiga argument till %s", "Felaktiga argument till %s",
"%-.32s@%-.64s har inte rättigheter att skapa nya användare", "%-.32s@%-.64s har inte rättighet att skapa nya användare",
"Felaktig tabell definition: Alla tabeller i en MERGE tabell måste vara i samma databas", "Felaktig tabell definition: Alla tabeller i en MERGE tabell måste vara i samma databas",
"Fick 'DEADLOCK' vid låsförsök av block/rad; Försök att starta om transaktionen", "Fick 'DEADLOCK' vid låsförsök av block/rad; Försök att starta om transaktionen",
"Tabelltypen har inte hantering av FULLTEXT index", "Tabelltypen har inte hantering av FULLTEXT index",
......
...@@ -1003,8 +1003,8 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo, ...@@ -1003,8 +1003,8 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT), my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT),
MYF(0),combo.user.str,combo.host.str); MYF(0),combo.user.str,combo.host.str);
else else
my_printf_error(ER_NO_PERMISSON_TO_CREATE_USER, my_printf_error(ER_NO_PERMISSION_TO_CREATE_USER,
ER(ER_NO_PERMISSON_TO_CREATE_USER), ER(ER_NO_PERMISSION_TO_CREATE_USER),
MYF(0),thd->user, MYF(0),thd->user,
thd->host ? thd->host : thd->ip ? thd->ip: ""); thd->host ? thd->host : thd->ip ? thd->ip: "");
error= -1; error= -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment