From 04b3c901d66dd8d0ba12f62a4193399068c810df Mon Sep 17 00:00:00 2001 From: "reggie@mdk10.(none)" <> Date: Mon, 28 Mar 2005 13:06:43 -0600 Subject: [PATCH 01/12] Bug #9175 seg fault on 'mysqldump --single-transaction --tab mysql nonexistent' My code in get_actual_tablename was not checking to make sure SHOW TABLES LIKE % was returning rows. Now I check that the resultset is not null and has at least 1 row before I process the table. mysqldump.c: Add code to get_actual_tablename() to guard against SHOW TABLES LIKE not returning any rows --- client/mysqldump.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 0ff88bcbc73..2a9029244d4 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2113,10 +2113,10 @@ static int dump_all_tables_in_db(char *database) different case (e.g. T1 vs t1) RETURN - void + int - 0 if a tablename was retrieved. 1 if not */ -static void get_actual_table_name(const char *old_table_name, +static int get_actual_table_name(const char *old_table_name, char *new_table_name, int buf_size) { @@ -2137,9 +2137,19 @@ static void get_actual_table_name(const char *old_table_name, } tableRes= mysql_store_result( sock ); - row= mysql_fetch_row( tableRes ); - strmake(new_table_name, row[0], buf_size-1); - mysql_free_result(tableRes); + if (tableRes != NULL) + { + my_ulonglong numRows = mysql_num_rows(tableRes); + if (numRows > 0) + { + row= mysql_fetch_row( tableRes ); + strmake(new_table_name, row[0], buf_size-1); + return 0; + } + mysql_free_result(tableRes); + return 1; + } + return 1; } @@ -2179,11 +2189,12 @@ static int dump_selected_tables(char *db, char **table_names, int tables) char new_table_name[NAME_LEN]; /* the table name passed on commandline may be wrong case */ - get_actual_table_name( *table_names, new_table_name, sizeof(new_table_name) ); - - numrows = getTableStructure(new_table_name, db); - if (!dFlag && numrows > 0) - dumpTable(numrows, new_table_name); + if (!get_actual_table_name( *table_names, new_table_name, sizeof(new_table_name) )) + { + numrows = getTableStructure(new_table_name, db); + if (!dFlag && numrows > 0) + dumpTable(numrows, new_table_name); + } my_free(order_by, MYF(MY_ALLOW_ZERO_PTR)); order_by= 0; } From 6d6d04a0ba361d2e2fa4dc4fb0988bf6ab4a6241 Mon Sep 17 00:00:00 2001 From: "dlenev@mysql.com" <> Date: Mon, 28 Mar 2005 23:36:25 +0400 Subject: [PATCH 02/12] Fix for bug #8894 "TIMESTAMP values scrambled/misaligned when using --new". Fixed Field_timestamp::val_int() so now it works correctly in --new mode (or for TIMESTAMP(19) columns). Also removed unused Field_timestamp::fill_and_store() method. --- mysql-test/r/type_timestamp.result | 9 ++++++++ mysql-test/t/type_timestamp.test | 13 +++++++++++ sql/field.cc | 35 ++++-------------------------- sql/field.h | 1 - 4 files changed, 26 insertions(+), 32 deletions(-) diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index 6253fa96ba8..d22fe9a94ae 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -221,3 +221,12 @@ ts1 20040101000000 20040101010000 drop table t1; +create table t1 (ts timestamp); +set TIMESTAMP=1000000000; +insert into t1 values (); +set new=1; +select ts+0 from t1; +ts+0 +20010909044640 +set new=0; +drop table t1; diff --git a/mysql-test/t/type_timestamp.test b/mysql-test/t/type_timestamp.test index 464ee63c137..9d61e0eaef1 100644 --- a/mysql-test/t/type_timestamp.test +++ b/mysql-test/t/type_timestamp.test @@ -148,3 +148,16 @@ select * from t1; set new=0; select * from t1; drop table t1; + +# +# Test for bug #8894 "TIMESTAMP values scrambled/misaligned when using +# --new". TIMESTAMP columns should have correct values when they are used in +# integer context in --new mode. +# +create table t1 (ts timestamp); +set TIMESTAMP=1000000000; +insert into t1 values (); +set new=1; +select ts+0 from t1; +set new=0; +drop table t1; diff --git a/sql/field.cc b/sql/field.cc index 69ee6606be4..59a71a93d68 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2505,34 +2505,6 @@ void Field_timestamp::store(const char *from,uint len) longstore(ptr,tmp); } -void Field_timestamp::fill_and_store(char *from,uint len) -{ - uint res_length; - if (len <= field_length) - res_length=field_length; - else if (len <= 12) - res_length=12; /* purecov: inspected */ - else if (len <= 14) - res_length=14; /* purecov: inspected */ - else - res_length=(len+1)/2*2; // must be even - if (res_length != len) - { - bmove_upp(from+res_length,from+len,len); - bfill(from,res_length-len,'0'); - len=res_length; - } - long tmp=(long) str_to_timestamp(from,len); -#ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) - { - int4store(ptr,tmp); - } - else -#endif - longstore(ptr,tmp); -} - void Field_timestamp::store(double nr) { @@ -2644,7 +2616,7 @@ double Field_timestamp::val_real(void) longlong Field_timestamp::val_int(void) { - uint len,pos; + uint len, pos, max_int_rep_len; int part_time; uint32 temp; time_t time_arg; @@ -2665,7 +2637,8 @@ longlong Field_timestamp::val_int(void) localtime_r(&time_arg,&tm_tmp); l_time=&tm_tmp; res=(longlong) 0; - for (pos=len=0; len+1 < (uint) field_length ; len+=2,pos++) + max_int_rep_len= min(field_length, 14); + for (pos= len= 0; len+1 < max_int_rep_len ; len+= 2,pos++) { bool year_flag=0; switch (dayord.pos[pos]) { @@ -2677,7 +2650,7 @@ longlong Field_timestamp::val_int(void) case 5: part_time=l_time->tm_sec; break; default: part_time=0; break; /* purecov: deadcode */ } - if (year_flag && (field_length == 8 || field_length == 14)) + if (year_flag && (max_int_rep_len == 8 || max_int_rep_len == 14)) { res=res*(longlong) 10000+(part_time+ ((part_time < YY_PART_YEAR) ? 2000 : 1900)); diff --git a/sql/field.h b/sql/field.h index 87a9732b41e..3e258f81dcc 100644 --- a/sql/field.h +++ b/sql/field.h @@ -591,7 +591,6 @@ public: longget(tmp,ptr); return tmp; } - void fill_and_store(char *from,uint len); bool get_date(TIME *ltime,bool fuzzydate); bool get_time(TIME *ltime); From cca1e62b802676a198d7352889cb5953f47f9793 Mon Sep 17 00:00:00 2001 From: "reggie@mdk10.(none)" <> Date: Thu, 31 Mar 2005 08:37:18 -0600 Subject: [PATCH 03/12] Bug #9175 seg fault on 'mysqldump --single-transaction --tab mysql nonexistent' mysqldump.c: Fixed get_actual_table_name so that it calls mysql_free_result in all cases that a non-NULl result is returned --- client/mysqldump.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 2a9029244d4..2573c812067 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2120,6 +2120,7 @@ static int get_actual_table_name(const char *old_table_name, char *new_table_name, int buf_size) { + int retval; MYSQL_RES *tableRes; MYSQL_ROW row; char query[50 + 2*NAME_LEN]; @@ -2137,6 +2138,7 @@ static int get_actual_table_name(const char *old_table_name, } tableRes= mysql_store_result( sock ); + retval = 1; if (tableRes != NULL) { my_ulonglong numRows = mysql_num_rows(tableRes); @@ -2144,12 +2146,11 @@ static int get_actual_table_name(const char *old_table_name, { row= mysql_fetch_row( tableRes ); strmake(new_table_name, row[0], buf_size-1); - return 0; + retval = 0; } mysql_free_result(tableRes); - return 1; } - return 1; + return retval; } From fe5384dad8f88c28baece9bb8602d79734e28a02 Mon Sep 17 00:00:00 2001 From: "msvensson@neptunus.(none)" <> Date: Fri, 1 Apr 2005 12:32:47 +0200 Subject: [PATCH 04/12] BUG#6554 Problem Building MySql on Fedora Core 3 - Remove the local static var --- BitKeeper/etc/logging_ok | 1 + sql/ha_berkeley.cc | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index bf0dfb9e31d..3495e7378b1 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -102,6 +102,7 @@ monty@tik. monty@tik.mysql.fi monty@tramp.mysql.fi monty@work.mysql.com +msvensson@neptunus.(none) mwagner@cash.mwagner.org mwagner@evoq.mwagner.org mwagner@here.mwagner.org diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index b307b3a4b75..e820fd023e6 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -336,8 +336,10 @@ void berkeley_cleanup_log_files(void) ** Berkeley DB tables *****************************************************************************/ +static const char *bdb_bas_exts[]= { ha_berkeley_ext, NullS }; const char **ha_berkeley::bas_ext() const -{ static const char *ext[]= { ha_berkeley_ext, NullS }; return ext; } +{ return bdb_bas_exts; } + static int From cf7c0e43cba237fea18271ebf1ec4d3300ee54ca Mon Sep 17 00:00:00 2001 From: "mskold@mysql.com" <> Date: Fri, 1 Apr 2005 17:59:46 +0200 Subject: [PATCH 05/12] Fix for bug#9435: TIMESTAMP columns don't update --- mysql-test/r/ndb_types.result | 44 +++++++++++++++++++++++++++++++---- mysql-test/t/ndb_types.test | 42 +++++++++++++++++++++++++++++---- sql/ha_ndbcluster.cc | 4 ++++ 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/mysql-test/r/ndb_types.result b/mysql-test/r/ndb_types.result index 9a45b77149b..5afa9c57e38 100644 --- a/mysql-test/r/ndb_types.result +++ b/mysql-test/r/ndb_types.result @@ -2,6 +2,9 @@ DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( auto int(5) unsigned NOT NULL auto_increment, string char(10) default "hello", +vstring varchar(10) default "hello", +bin binary(7), +vbin varbinary(7), tiny tinyint(4) DEFAULT '0' NOT NULL , short smallint(6) DEFAULT '1' NOT NULL , medium mediumint(8) DEFAULT '0' NOT NULL, @@ -14,12 +17,13 @@ ushort smallint(5) unsigned zerofill DEFAULT '00000' NOT NULL, umedium mediumint(8) unsigned DEFAULT '0' NOT NULL, ulong int(11) unsigned DEFAULT '0' NOT NULL, ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL, -time_stamp timestamp, -date_field date, -time_field time, -date_time datetime, options enum('one','two','tree') not null, flags set('one','two','tree') not null, +date_field date, +year_field year, +time_field time, +date_time datetime, +time_stamp timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (auto), KEY (utiny), KEY (tiny), @@ -33,4 +37,36 @@ KEY (ulong), KEY (ulonglong,ulong), KEY (options,flags) ); +set @now = now(); +insert into t1 +(string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, +real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, +options,flags,date_field,year_field,time_field,date_time) +values +("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1,1,1,1,1, +'one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01'); +select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, +real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, +options,flags,date_field,year_field,time_field,date_time +from t1; +auto string vstring bin vbin tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong options flags date_field year_field time_field date_time +1 aaaa aaaa ªª ªª -1 -1 -1 -1 -1 1.1 1.1000 1 00001 1 1 1 one one 1901-01-01 1901 01:01:01 1901-01-01 01:01:01 +select time_stamp>@now from t1; +time_stamp>@now +1 +set @now = now(); +update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB, +tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2, +real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2, +options='one',flags='one', date_field='1902-02-02',year_field='1902', +time_field='02:02:02',date_time='1902-02-02 02:02:02' where auto=1; +select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, +real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, +options,flags,date_field,year_field,time_field,date_time +from t1; +auto string vstring bin vbin tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong options flags date_field year_field time_field date_time +1 bbbb bbbb »» »» -2 -2 -2 -2 -2 2.2 2.2000 2 00002 2 2 2 one one 1902-02-02 1902 02:02:02 1902-02-02 02:02:02 +select time_stamp>@now from t1; +time_stamp>@now +1 drop table t1; diff --git a/mysql-test/t/ndb_types.test b/mysql-test/t/ndb_types.test index d9f50c8b3fc..d66718ca4e4 100644 --- a/mysql-test/t/ndb_types.test +++ b/mysql-test/t/ndb_types.test @@ -7,10 +7,12 @@ DROP TABLE IF EXISTS t1; # # Test creation of different column types in NDB # - CREATE TABLE t1 ( auto int(5) unsigned NOT NULL auto_increment, string char(10) default "hello", + vstring varchar(10) default "hello", + bin binary(7), + vbin varbinary(7), tiny tinyint(4) DEFAULT '0' NOT NULL , short smallint(6) DEFAULT '1' NOT NULL , medium mediumint(8) DEFAULT '0' NOT NULL, @@ -23,12 +25,13 @@ CREATE TABLE t1 ( umedium mediumint(8) unsigned DEFAULT '0' NOT NULL, ulong int(11) unsigned DEFAULT '0' NOT NULL, ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL, - time_stamp timestamp, - date_field date, - time_field time, - date_time datetime, options enum('one','two','tree') not null, flags set('one','two','tree') not null, + date_field date, + year_field year, + time_field time, + date_time datetime, + time_stamp timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (auto), KEY (utiny), KEY (tiny), @@ -43,5 +46,34 @@ CREATE TABLE t1 ( KEY (options,flags) ); +set @now = now(); +sleep 1; +insert into t1 +(string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, + real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, + options,flags,date_field,year_field,time_field,date_time) +values +("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1,1,1,1,1, + 'one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01'); + +select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, + real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, + options,flags,date_field,year_field,time_field,date_time +from t1; +select time_stamp>@now from t1; + +set @now = now(); +sleep 1; +update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB, +tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2, +real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2, +options='one',flags='one', date_field='1902-02-02',year_field='1902', +time_field='02:02:02',date_time='1902-02-02 02:02:02' where auto=1; + +select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, + real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, + options,flags,date_field,year_field,time_field,date_time +from t1; +select time_stamp>@now from t1; drop table t1; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 92d5e6119aa..7025ac2cd1a 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -1953,7 +1953,11 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data) statistic_increment(ha_update_count,&LOCK_status); if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) + { table->timestamp_field->set_time(); + // Set query_id so that field is really updated + table->timestamp_field->query_id= thd->query_id; + } /* Check for update of primary key for special handling */ if ((table->primary_key != MAX_KEY) && From 9f7ad11e34fc57f494fc690462d49f4501f918d2 Mon Sep 17 00:00:00 2001 From: "mskold@mysql.com" <> Date: Fri, 1 Apr 2005 22:14:30 +0200 Subject: [PATCH 06/12] Added more types --- mysql-test/r/ndb_types.result | 29 ++++++++++++++++------------- mysql-test/t/ndb_types.test | 21 ++++++++++++--------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/mysql-test/r/ndb_types.result b/mysql-test/r/ndb_types.result index 5afa9c57e38..37ce7732f65 100644 --- a/mysql-test/r/ndb_types.result +++ b/mysql-test/r/ndb_types.result @@ -12,11 +12,13 @@ long_int int(11) DEFAULT '0' NOT NULL, longlong bigint(13) DEFAULT '0' NOT NULL, real_float float(13,1) DEFAULT 0.0 NOT NULL, real_double double(16,4), +real_decimal decimal(16,4), utiny tinyint(3) unsigned DEFAULT '0' NOT NULL, ushort smallint(5) unsigned zerofill DEFAULT '00000' NOT NULL, umedium mediumint(8) unsigned DEFAULT '0' NOT NULL, ulong int(11) unsigned DEFAULT '0' NOT NULL, ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL, +bits bit(3), options enum('one','two','tree') not null, flags set('one','two','tree') not null, date_field date, @@ -40,32 +42,33 @@ KEY (options,flags) set @now = now(); insert into t1 (string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, -real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, -options,flags,date_field,year_field,time_field,date_time) +real_float,real_double, real_decimal,utiny, ushort, umedium,ulong,ulonglong, +bits,options,flags,date_field,year_field,time_field,date_time) values -("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1,1,1,1,1, -'one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01'); +("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1.1,1,1,1,1,1, +b'001','one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01'); select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, -real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, -options,flags,date_field,year_field,time_field,date_time +real_float,real_double,real_decimal,utiny,ushort,umedium,ulong,ulonglong, +bits,options,flags,date_field,year_field,time_field,date_time from t1; -auto string vstring bin vbin tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong options flags date_field year_field time_field date_time -1 aaaa aaaa ªª ªª -1 -1 -1 -1 -1 1.1 1.1000 1 00001 1 1 1 one one 1901-01-01 1901 01:01:01 1901-01-01 01:01:01 +auto string vstring bin vbin tiny short medium long_int longlong real_float real_double real_decimal utiny ushort umedium ulong ulonglong bits options flags date_field year_field time_field date_time +1 aaaa aaaa ªª ªª -1 -1 -1 -1 -1 1.1 1.1000 1.1000 1 00001 1 1 1  one one 1901-01-01 1901 01:01:01 1901-01-01 01:01:01 select time_stamp>@now from t1; time_stamp>@now 1 set @now = now(); update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB, tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2, -real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2, +real_double=2.2,real_decimal=2.2,utiny=2,ushort=2,umedium=2,ulong=2, +ulonglong=2, bits=b'010', options='one',flags='one', date_field='1902-02-02',year_field='1902', time_field='02:02:02',date_time='1902-02-02 02:02:02' where auto=1; select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, -real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, -options,flags,date_field,year_field,time_field,date_time +real_float,real_double,real_decimal,utiny,ushort,umedium,ulong,ulonglong, +bits,options,flags,date_field,year_field,time_field,date_time from t1; -auto string vstring bin vbin tiny short medium long_int longlong real_float real_double utiny ushort umedium ulong ulonglong options flags date_field year_field time_field date_time -1 bbbb bbbb »» »» -2 -2 -2 -2 -2 2.2 2.2000 2 00002 2 2 2 one one 1902-02-02 1902 02:02:02 1902-02-02 02:02:02 +auto string vstring bin vbin tiny short medium long_int longlong real_float real_double real_decimal utiny ushort umedium ulong ulonglong bits options flags date_field year_field time_field date_time +1 bbbb bbbb »» »» -2 -2 -2 -2 -2 2.2 2.2000 2.2000 2 00002 2 2 2  one one 1902-02-02 1902 02:02:02 1902-02-02 02:02:02 select time_stamp>@now from t1; time_stamp>@now 1 diff --git a/mysql-test/t/ndb_types.test b/mysql-test/t/ndb_types.test index d66718ca4e4..823ca942d57 100644 --- a/mysql-test/t/ndb_types.test +++ b/mysql-test/t/ndb_types.test @@ -20,11 +20,13 @@ CREATE TABLE t1 ( longlong bigint(13) DEFAULT '0' NOT NULL, real_float float(13,1) DEFAULT 0.0 NOT NULL, real_double double(16,4), + real_decimal decimal(16,4), utiny tinyint(3) unsigned DEFAULT '0' NOT NULL, ushort smallint(5) unsigned zerofill DEFAULT '00000' NOT NULL, umedium mediumint(8) unsigned DEFAULT '0' NOT NULL, ulong int(11) unsigned DEFAULT '0' NOT NULL, ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL, + bits bit(3), options enum('one','two','tree') not null, flags set('one','two','tree') not null, date_field date, @@ -50,15 +52,15 @@ set @now = now(); sleep 1; insert into t1 (string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, - real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, - options,flags,date_field,year_field,time_field,date_time) + real_float,real_double, real_decimal,utiny, ushort, umedium,ulong,ulonglong, + bits,options,flags,date_field,year_field,time_field,date_time) values -("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1,1,1,1,1, - 'one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01'); +("aaaa","aaaa",0xAAAA,0xAAAA,-1,-1,-1,-1,-1,1.1,1.1,1.1,1,1,1,1,1, + b'001','one','one', '1901-01-01','1901','01:01:01','1901-01-01 01:01:01'); select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, - real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, - options,flags,date_field,year_field,time_field,date_time + real_float,real_double,real_decimal,utiny,ushort,umedium,ulong,ulonglong, + bits,options,flags,date_field,year_field,time_field,date_time from t1; select time_stamp>@now from t1; @@ -66,13 +68,14 @@ set @now = now(); sleep 1; update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB, tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2, -real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2, +real_double=2.2,real_decimal=2.2,utiny=2,ushort=2,umedium=2,ulong=2, +ulonglong=2, bits=b'010', options='one',flags='one', date_field='1902-02-02',year_field='1902', time_field='02:02:02',date_time='1902-02-02 02:02:02' where auto=1; select auto,string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, - real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, - options,flags,date_field,year_field,time_field,date_time + real_float,real_double,real_decimal,utiny,ushort,umedium,ulong,ulonglong, + bits,options,flags,date_field,year_field,time_field,date_time from t1; select time_stamp>@now from t1; From 2292480e795a02973b828a37f826c6e4e0192b69 Mon Sep 17 00:00:00 2001 From: "kent@mysql.com" <> Date: Sat, 2 Apr 2005 03:35:28 +0200 Subject: [PATCH 07/12] mysqld.dsp: Corrected wrong exe naming from bad merge --- VC++Files/sql/mysqld.dsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VC++Files/sql/mysqld.dsp b/VC++Files/sql/mysqld.dsp index 5ca468f7fc9..723c0d63b36 100644 --- a/VC++Files/sql/mysqld.dsp +++ b/VC++Files/sql/mysqld.dsp @@ -58,7 +58,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=xilink6.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../client_release/mysqld-opt.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../client_release/mysqld.exe" # SUBTRACT LINK32 /debug !ELSEIF "$(CFG)" == "mysqld - Win32 Debug" @@ -84,7 +84,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=xilink6.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\vio.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\bdb.lib ..\lib_debug\innodb.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqld.exe" /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\vio.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\bdb.lib ..\lib_debug\innodb.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqld-debug.exe" /pdbtype:sept !ELSEIF "$(CFG)" == "mysqld - Win32 nt" From 3061a749e68b16e9aaeb788b25dafe40e5370492 Mon Sep 17 00:00:00 2001 From: "bell@sanja.is.com.ua" <> Date: Sat, 2 Apr 2005 18:05:00 +0300 Subject: [PATCH 08/12] fix of required privileges for altering view VIEW (DELETE->DROP) (BUG#9260) --- mysql-test/r/view.result | 8 ++++++-- mysql-test/t/view.test | 12 +++++++++++- sql/sql_view.cc | 6 +++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index c5fe4bf8565..4d32f2a22af 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -237,13 +237,17 @@ grant select on mysqltest.t1 to mysqltest_1@localhost; grant create view,select on test.* to mysqltest_1@localhost; create view v1 as select * from mysqltest.t1; alter view v1 as select * from mysqltest.t1; -ERROR 42000: DELETE command denied to user 'mysqltest_1'@'localhost' for table 'v1' +ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'v1' create or replace view v1 as select * from mysqltest.t1; -ERROR 42000: DELETE command denied to user 'mysqltest_1'@'localhost' for table 'v1' +ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'v1' create view mysqltest.v2 as select * from mysqltest.t1; ERROR 42000: CREATE VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v2' create view v2 as select * from mysqltest.t2; ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 't2' +grant create view,drop,select on test.* to mysqltest_1@localhost; +use test; +alter view v1 as select * from mysqltest.t1; +create or replace view v1 as select * from mysqltest.t1; revoke all privileges on mysqltest.t1 from mysqltest_1@localhost; revoke all privileges on test.* from mysqltest_1@localhost; drop database mysqltest; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 7a05ebb0204..69634b2098b 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -181,7 +181,7 @@ connect (user1,localhost,mysqltest_1,,test); connection user1; create view v1 as select * from mysqltest.t1; -# try to modify view without DELETE privilege on it +# try to modify view without DROP privilege on it -- error 1142 alter view v1 as select * from mysqltest.t1; -- error 1142 @@ -193,6 +193,16 @@ create view mysqltest.v2 as select * from mysqltest.t1; -- error 1142 create view v2 as select * from mysqltest.t2; +connection root; +grant create view,drop,select on test.* to mysqltest_1@localhost; + +connection user1; +# following 'use' command is workaround of bug #9582 and should be removed +# when that bug will be fixed +use test; +alter view v1 as select * from mysqltest.t1; +create or replace view v1 as select * from mysqltest.t1; + connection root; revoke all privileges on mysqltest.t1 from mysqltest_1@localhost; revoke all privileges on test.* from mysqltest_1@localhost; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index e4f30f72443..f902a31c85d 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -89,7 +89,7 @@ bool mysql_create_view(THD *thd, /* Privilege check for view creation: - user have CREATE VIEW privilege on view table - - user have DELETE privilege in case of ALTER VIEW or CREATE OR REPLACE + - user have DROP privilege in case of ALTER VIEW or CREATE OR REPLACE VIEW - have some (SELECT/UPDATE/INSERT/DELETE) privileges on columns of underlying tables used on top of SELECT list (because it can be @@ -104,9 +104,9 @@ bool mysql_create_view(THD *thd, 0, 0) || grant_option && check_grant(thd, CREATE_VIEW_ACL, view, 0, 1, 0)) || (mode != VIEW_CREATE_NEW && - (check_access(thd, DELETE_ACL, view->db, &view->grant.privilege, + (check_access(thd, DROP_ACL, view->db, &view->grant.privilege, 0, 0) || - grant_option && check_grant(thd, DELETE_ACL, view, 0, 1, 0)))) + grant_option && check_grant(thd, DROP_ACL, view, 0, 1, 0)))) DBUG_RETURN(TRUE); for (sl= select_lex; sl; sl= sl->next_select()) { From 4e916e251ba36a0e7ca4a0292def07fcf2285f2d Mon Sep 17 00:00:00 2001 From: "bell@sanja.is.com.ua" <> Date: Sat, 2 Apr 2005 18:45:44 +0300 Subject: [PATCH 09/12] postreview patch --- sql/sql_view.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/sql_view.cc b/sql/sql_view.cc index f902a31c85d..deba6a686a2 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -88,14 +88,14 @@ bool mysql_create_view(THD *thd, #ifndef NO_EMBEDDED_ACCESS_CHECKS /* Privilege check for view creation: - - user have CREATE VIEW privilege on view table - - user have DROP privilege in case of ALTER VIEW or CREATE OR REPLACE + - user has CREATE VIEW privilege on view table + - user has DROP privilege in case of ALTER VIEW or CREATE OR REPLACE VIEW - - have some (SELECT/UPDATE/INSERT/DELETE) privileges on columns of + - user has some (SELECT/UPDATE/INSERT/DELETE) privileges on columns of underlying tables used on top of SELECT list (because it can be (theoretically) updated, so it is enough to have UPDATE privilege on them, for example) - - have SELECT privilege on columns used in expressions of VIEW select + - user has SELECT privilege on columns used in expressions of VIEW select - for columns of underly tables used on top of SELECT list also will be checked that we have not more privileges on correspondent column of view table (i.e. user will not get some privileges by view creation) From 3098b93ef8e4f5154f5b701c59a1daa265b2c633 Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Sat, 2 Apr 2005 20:13:19 +0200 Subject: [PATCH 10/12] bug#3891 - DROP TABLE many-unexistent-tables, was printing an error with %s instead of table names sql/sql_table.cc: print an error with a function that respects width modifiers (%.64s) --- mysql-test/r/drop.result | 14 ++++++++++++++ mysql-test/t/drop.test | 23 +++++++++++++++++++++++ sql/share/english/errmsg.txt | 2 +- sql/share/russian/errmsg.txt | 2 +- sql/share/ukrainian/errmsg.txt | 2 +- sql/sql_table.cc | 3 ++- 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/drop.result b/mysql-test/r/drop.result index 5c732aebbcc..b2753e0ff84 100644 --- a/mysql-test/r/drop.result +++ b/mysql-test/r/drop.result @@ -22,6 +22,20 @@ n 4 drop database if exists mysqltest; create database mysqltest; +use mysqltest; +drop table table1, table2, table3, table4, table5, table6, +table7, table8, table9, table10, table11, table12, table13, +table14, table15, table16, table17, table18, table19, table20, +table21, table22, table23, table24, table25, table26, table27, +table28; +Unknown table 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10,table11,table12,table13,table14,table15,table16,table17,table18,table19,table20,table21,table22,table23,table' +drop table table1, table2, table3, table4, table5, table6, +table7, table8, table9, table10, table11, table12, table13, +table14, table15, table16, table17, table18, table19, table20, +table21, table22, table23, table24, table25, table26, table27, +table28, table29, table30; +Unknown table 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10,table11,table12,table13,table14,table15,table16,table17,table18,table19,table20,table21,table22,table23,table' +use test; drop database mysqltest; flush tables with read lock; create database mysqltest; diff --git a/mysql-test/t/drop.test b/mysql-test/t/drop.test index 2f3fa99bac0..51807fe403d 100644 --- a/mysql-test/t/drop.test +++ b/mysql-test/t/drop.test @@ -22,6 +22,28 @@ insert into mysqltest.mysqltest values (4); select * from mysqltest.mysqltest; drop database if exists mysqltest; create database mysqltest; + +# +# drop many tables - bug#3891 +# we'll do it in mysqltest db, to be able to use longer table names +# (tableN instead on tN) +# +use mysqltest; +--error 1051 +drop table table1, table2, table3, table4, table5, table6, +table7, table8, table9, table10, table11, table12, table13, +table14, table15, table16, table17, table18, table19, table20, +table21, table22, table23, table24, table25, table26, table27, +table28; + +--error 1051 +drop table table1, table2, table3, table4, table5, table6, +table7, table8, table9, table10, table11, table12, table13, +table14, table15, table16, table17, table18, table19, table20, +table21, table22, table23, table24, table25, table26, table27, +table28, table29, table30; + +use test; drop database mysqltest; # test drop/create database and FLUSH TABLES WITH READ LOCK @@ -39,3 +61,4 @@ drop database mysqltest; show databases; --error 1008 drop database mysqltest; + diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index cfd878195ac..7c9d789c86e 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -65,7 +65,7 @@ "Column '%-.64s' cannot be null", "Unknown database '%-.64s'", "Table '%-.64s' already exists", -"Unknown table '%-.64s'", +"Unknown table '%-.180s'", "Column: '%-.64s' in %-.64s is ambiguous", "Server shutdown in progress", "Unknown column '%-.64s' in '%-.64s'", diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 172ee97c883..668b310a5dc 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -70,7 +70,7 @@ "óÔÏÌÂÅà '%-.64s' ÎÅ ÍÏÖÅÔ ÐÒÉÎÉÍÁÔØ ×ÅÌÉÞÉÎÕ NULL", "îÅÉÚ×ÅÓÔÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ '%-.64s'", "ôÁÂÌÉÃÁ '%-.64s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ", -"îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.64s'", +"îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.175s'", "óÔÏÌÂÅà '%-.64s' × %-.64s ÚÁÄÁÎ ÎÅÏÄÎÏÚÎÁÞÎÏ", "óÅÒ×ÅÒ ÎÁÈÏÄÉÔÓÑ × ÐÒÏÃÅÓÓÅ ÏÓÔÁÎÏ×ËÉ", "îÅÉÚ×ÅÓÔÎÙÊ ÓÔÏÌÂÅà '%-.64s' × '%-.64s'", diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index 188523ecf45..131cf07a8e2 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -71,7 +71,7 @@ "óÔÏ×ÂÅÃØ '%-.64s' ÎÅ ÍÏÖÅ ÂÕÔÉ ÎÕÌØÏ×ÉÍ", "îÅצÄÏÍÁ ÂÁÚÁ ÄÁÎÎÉÈ '%-.64s'", "ôÁÂÌÉÃÑ '%-.64s' ×ÖÅ ¦ÓÎÕ¤", -"îÅצÄÏÍÁ ÔÁÂÌÉÃÑ '%-.64s'", +"îÅצÄÏÍÁ ÔÁÂÌÉÃÑ '%-.180s'", "óÔÏ×ÂÅÃØ '%-.64s' Õ %-.64s ×ÉÚÎÁÞÅÎÉÊ ÎÅÏÄÎÏÚÎÁÞÎÏ", "úÁ×ÅÒÛÕ¤ÔØÓÑ ÒÁÂÏÔÁ ÓÅÒ×ÅÒÁ", "îÅצÄÏÍÉÊ ÓÔÏ×ÂÅÃØ '%-.64s' Õ '%-.64s'", diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 33bdd992efb..cef480fadde 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -237,7 +237,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, if (wrong_tables.length()) { if (!foreign_key_error) - my_error(ER_BAD_TABLE_ERROR,MYF(0),wrong_tables.c_ptr()); + my_printf_error(ER_BAD_TABLE_ERROR, ER(ER_BAD_TABLE_ERROR), MYF(0), + wrong_tables.c_ptr()); else my_error(ER_ROW_IS_REFERENCED,MYF(0)); error= 1; From 4a0e73c63ac539975f1581a6897186e0a0573ad3 Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Sat, 2 Apr 2005 21:36:50 +0200 Subject: [PATCH 11/12] results updated --- mysql-test/r/drop.result | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/drop.result b/mysql-test/r/drop.result index 6d67160bc28..40dda86b729 100644 --- a/mysql-test/r/drop.result +++ b/mysql-test/r/drop.result @@ -30,13 +30,13 @@ table7, table8, table9, table10, table11, table12, table13, table14, table15, table16, table17, table18, table19, table20, table21, table22, table23, table24, table25, table26, table27, table28; -Unknown table 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10,table11,table12,table13,table14,table15,table16,table17,table18,table19,table20,table21,table22,table23,table' +ERROR 42S02: Unknown table 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10,table11,table12,table13,table14,table15,table16,table17,table18,table19,table20,table21,table22,table23,table' drop table table1, table2, table3, table4, table5, table6, table7, table8, table9, table10, table11, table12, table13, table14, table15, table16, table17, table18, table19, table20, table21, table22, table23, table24, table25, table26, table27, table28, table29, table30; -Unknown table 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10,table11,table12,table13,table14,table15,table16,table17,table18,table19,table20,table21,table22,table23,table' +ERROR 42S02: Unknown table 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10,table11,table12,table13,table14,table15,table16,table17,table18,table19,table20,table21,table22,table23,table' use test; drop database mysqltest; flush tables with read lock; From c67971af3c72b766d1d8044b5ccb48c3cf021667 Mon Sep 17 00:00:00 2001 From: "dlenev@brandersnatch.localdomain" <> Date: Sun, 3 Apr 2005 11:31:50 +0400 Subject: [PATCH 12/12] Bug #3891 - "DROP TABLE many-unexistent-tables, was printing an error with %s instead of table names". Propagating changes from old language-specific errmsg.txt files to new global errmsg.txt. --- sql/share/errmsg.txt | 48 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 71e4640e88b..9a92f1f4f76 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -1214,30 +1214,30 @@ ER_TABLE_EXISTS_ERROR 42S01 swe "Tabellen '%-.64s' finns redan" ukr "ôÁÂÌÉÃÑ '%-.64s' ×ÖÅ ¦ÓÎÕ¤" ER_BAD_TABLE_ERROR 42S02 - cze "Nezn-Bámá tabulka '%-.64s'" - dan "Ukendt tabel '%-.64s'" - nla "Onbekende tabel '%-.64s'" - eng "Unknown table '%-.64s'" - jps "table '%-.64s' ‚Í‚ ‚è‚Ü‚¹‚ñ.", - est "Tundmatu tabel '%-.64s'" - fre "Table '%-.64s' inconnue" - ger "Unbekannte Tabelle '%-.64s'" - greek "Áãíùóôïò ðßíáêáò '%-.64s'" - hun "Ervenytelen tabla: '%-.64s'" - ita "Tabella '%-.64s' sconosciuta" - jpn "table '%-.64s' ¤Ï¤¢¤ê¤Þ¤»¤ó." - kor "Å×À̺í '%-.64s'´Â ¾Ë¼ö ¾øÀ½" - nor "Ukjent tabell '%-.64s'" - norwegian-ny "Ukjent tabell '%-.64s'" - pol "Nieznana tabela '%-.64s'" - por "Tabela '%-.64s' desconhecida" - rum "Tabela '%-.64s' este invalida" - rus "îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.64s'" - serbian "Nepoznata tabela '%-.64s'" - slo "Neznáma tabuµka '%-.64s'" - spa "Tabla '%-.64s' desconocida" - swe "Okänd tabell '%-.64s'" - ukr "îÅצÄÏÍÁ ÔÁÂÌÉÃÑ '%-.64s'" + cze "Nezn-Bámá tabulka '%-.180s'" + dan "Ukendt tabel '%-.180s'" + nla "Onbekende tabel '%-.180s'" + eng "Unknown table '%-.180s'" + jps "table '%-.180s' ‚Í‚ ‚è‚Ü‚¹‚ñ.", + est "Tundmatu tabel '%-.180s'" + fre "Table '%-.180s' inconnue" + ger "Unbekannte Tabelle '%-.180s'" + greek "Áãíùóôïò ðßíáêáò '%-.180s'" + hun "Ervenytelen tabla: '%-.180s'" + ita "Tabella '%-.180s' sconosciuta" + jpn "table '%-.180s' ¤Ï¤¢¤ê¤Þ¤»¤ó." + kor "Å×À̺í '%-.180s'´Â ¾Ë¼ö ¾øÀ½" + nor "Ukjent tabell '%-.180s'" + norwegian-ny "Ukjent tabell '%-.180s'" + pol "Nieznana tabela '%-.180s'" + por "Tabela '%-.180s' desconhecida" + rum "Tabela '%-.180s' este invalida" + rus "îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.180s'" + serbian "Nepoznata tabela '%-.180s'" + slo "Neznáma tabuµka '%-.180s'" + spa "Tabla '%-.180s' desconocida" + swe "Okänd tabell '%-.180s'" + ukr "îÅצÄÏÍÁ ÔÁÂÌÉÃÑ '%-.180s'" ER_NON_UNIQ_ERROR 23000 cze "Sloupec '%-.64s' v %s nen-Bí zcela jasný" dan "Felt: '%-.64s' i tabel %s er ikke entydigt"