From 5e75c1fe36066b80336aa8cc168da07c06e7500c Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Jan 2005 00:14:46 +0100 Subject: [PATCH 01/62] my_close(), my_sync(): retry if EINTR mysys/my_open.c: my_close(): retry if EINTR mysys/my_sync.c: fsync(): retry if EINTR --- mysys/my_open.c | 9 +++++++-- mysys/my_sync.c | 10 +++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/mysys/my_open.c b/mysys/my_open.c index ca5c0d8683f..a5cd3811bbf 100644 --- a/mysys/my_open.c +++ b/mysys/my_open.c @@ -69,7 +69,7 @@ File my_open(const char *FileName, int Flags, myf MyFlags) my_close() fd File sescriptor myf Special Flags - + */ int my_close(File fd, myf MyFlags) @@ -79,7 +79,12 @@ int my_close(File fd, myf MyFlags) DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags)); pthread_mutex_lock(&THR_LOCK_open); - if ((err = close(fd))) + do + { + err= close(fd); + } while (err == -1 && errno == EINTR); + + if (err) { DBUG_PRINT("error",("Got error %d on close",err)); my_errno=errno; diff --git a/mysys/my_sync.c b/mysys/my_sync.c index 317ca039346..bd372f03c87 100644 --- a/mysys/my_sync.c +++ b/mysys/my_sync.c @@ -40,15 +40,19 @@ int my_sync(File fd, myf my_flags) DBUG_ENTER("my_sync"); DBUG_PRINT("my",("Fd: %d my_flags: %d", fd, my_flags)); + do + { #if defined(HAVE_FDATASYNC) - res= fdatasync(fd); + res= fdatasync(fd); #elif defined(HAVE_FSYNC) - res=fsync(fd); + res= fsync(fd); #elif defined(__WIN__) res= _commit(fd); #else - res= 0; /* No sync (strange OS) */ + res= 0; /* No sync (strange OS) */ #endif + } while (res == -1 && errno == EINTR); + if (res) { if (!(my_errno= errno)) From ca8fcc0026aa4dfcbb7b03f549bc02eb1abfdadd Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Jan 2005 10:36:50 +0200 Subject: [PATCH 02/62] Take a shared record lock (LOCK_REC_NOT_GAP) for a matching record in the foreign key check because we can allow inserts into gaps (Support Issue #4317). innobase/row/row0ins.c: Take a shared record lock (LOCK_REC_NOT_GAP) for a matching record in the foreign key check because we can allow inserts into gaps. --- innobase/row/row0ins.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/innobase/row/row0ins.c b/innobase/row/row0ins.c index f8a98f74c09..15ffabf70cc 100644 --- a/innobase/row/row0ins.c +++ b/innobase/row/row0ins.c @@ -1105,7 +1105,6 @@ row_ins_check_foreign_constraint( dict_table_t* check_table; dict_index_t* check_index; ulint n_fields_cmp; - ibool unique_search; rec_t* rec; btr_pcur_t pcur; ibool moved; @@ -1223,14 +1222,6 @@ run_again: dtuple_set_n_fields_cmp(entry, foreign->n_fields); - if (dict_index_get_n_unique(check_index) <= foreign->n_fields) { - /* We can just set a LOCK_REC_NOT_GAP type lock */ - - unique_search = TRUE; - } else { - unique_search = FALSE; - } - btr_pcur_open(check_index, entry, PAGE_CUR_GE, BTR_SEARCH_LEAF, &pcur, &mtr); @@ -1268,17 +1259,13 @@ run_again: break; } } else { - /* Found a matching record */ + /* Found a matching record. Lock only + a record because we can allow inserts + into gaps */ - if (unique_search) { - err = row_ins_set_shared_rec_lock( - LOCK_REC_NOT_GAP, - rec, check_index, thr); - } else { - err = row_ins_set_shared_rec_lock( - LOCK_ORDINARY, - rec, check_index, thr); - } + err = row_ins_set_shared_rec_lock( + LOCK_REC_NOT_GAP, + rec, check_index, thr); if (err != DB_SUCCESS) { From ae8cc9846f506ca28b91eb95144a0cd011d20346 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Jan 2005 01:06:15 +0200 Subject: [PATCH 03/62] dict0load.c, dict0crea.c: Add diagnostic code to track corruption in mix_len; it was reported on the mailing list Jan 14, 2005 innobase/dict/dict0crea.c: Add diagnostic code to track corruption in mix_len; it was reported on the mailing list Jan 14, 2005 innobase/dict/dict0load.c: Add diagnostic code to track corruption in mix_len; it was reported on the mailing list Jan 14, 2005 --- innobase/dict/dict0crea.c | 11 +++++++++++ innobase/dict/dict0load.c | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/innobase/dict/dict0crea.c b/innobase/dict/dict0crea.c index cbdc0aab53c..d9e89316613 100644 --- a/innobase/dict/dict0crea.c +++ b/innobase/dict/dict0crea.c @@ -81,6 +81,17 @@ dict_create_sys_tables_tuple( dfield_set_data(dfield, ptr, 8); /* 7: MIX_LEN --------------------------*/ + + /* Track corruption reported on mailing list Jan 14, 2005 */ + if (table->mix_len != 0 && table->mix_len != 0x80000000) { + fprintf(stderr, +"InnoDB: Error: mix_len is %lu in table %s\n", (ulong)table->mix_len, + table->name); + mem_analyze_corruption((byte*)&(table->mix_len)); + + ut_error; + } + dfield = dtuple_get_nth_field(entry, 5); ptr = mem_heap_alloc(heap, 4); diff --git a/innobase/dict/dict0load.c b/innobase/dict/dict0load.c index 61facc8818d..e52c81c82e8 100644 --- a/innobase/dict/dict0load.c +++ b/innobase/dict/dict0load.c @@ -729,6 +729,7 @@ dict_load_table( ulint space; ulint n_cols; ulint err; + ulint mix_len; mtr_t mtr; #ifdef UNIV_SYNC_DEBUG @@ -775,6 +776,22 @@ dict_load_table( return(NULL); } + /* Track a corruption bug reported on the MySQL mailing list Jan 14, + 2005: mix_id had a value different from 0 */ + + field = rec_get_nth_field(rec, 7, &len); + ut_a(len == 4); + + mix_len = mach_read_from_4(field); + + if (mix_len != 0 && mix_len != 0x80000000) { + ut_print_timestamp(stderr); + + fprintf(stderr, + " InnoDB: table %s has a nonsensical mix len %lu\n", + name, (ulong)mix_len); + } + #if MYSQL_VERSION_ID < 50300 /* Starting from MySQL 5.0.3, the high-order bit of MIX_LEN is the "compact format" flag. */ From 540f0541ddb6039f174dd14eaeb6ffd229ce8cf0 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Jan 2005 01:10:40 +0200 Subject: [PATCH 04/62] dict0load.c: Correct typo in comment innobase/dict/dict0load.c: Correct typo in comment --- innobase/dict/dict0load.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/innobase/dict/dict0load.c b/innobase/dict/dict0load.c index e52c81c82e8..717c64c3963 100644 --- a/innobase/dict/dict0load.c +++ b/innobase/dict/dict0load.c @@ -777,7 +777,7 @@ dict_load_table( } /* Track a corruption bug reported on the MySQL mailing list Jan 14, - 2005: mix_id had a value different from 0 */ + 2005: mix_len had a value different from 0 */ field = rec_get_nth_field(rec, 7, &len); ut_a(len == 4); From 77b8a94d7a767291f90d57f0e667b421c5f41037 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Jan 2005 22:35:53 +0100 Subject: [PATCH 05/62] make the code to look safe, not only be safe --- ndb/src/common/util/strdup.c | 4 ++-- sql/log.cc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ndb/src/common/util/strdup.c b/ndb/src/common/util/strdup.c index afe2306427e..d8f4d99bd28 100644 --- a/ndb/src/common/util/strdup.c +++ b/ndb/src/common/util/strdup.c @@ -21,8 +21,8 @@ char * strdup(const char *s){ void *p2; - p2 = malloc(strlen(s)+1); - strcpy(p2, s); + if ((p2 = malloc(strlen(s)+1))) + strcpy(p2, s); return p2; } #endif diff --git a/sql/log.cc b/sql/log.cc index 4504b286506..38844877f1b 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -2247,9 +2247,9 @@ void print_buffer_to_nt_eventlog(enum loglevel level, char *buff, DBUG_ENTER("print_buffer_to_nt_eventlog"); buffptr= buff; - if (length > (uint)(buffLen-4)) + if (length > (uint)(buffLen-5)) { - char *newBuff= new char[length + 4]; + char *newBuff= new char[length + 5]; strcpy(newBuff, buff); buffptr= newBuff; } From f003895df9f562018ba47e5f7af2eae03d937368 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Jan 2005 11:27:38 +0100 Subject: [PATCH 06/62] myisam/ft_boolean_search.c -trunc* bug - don't increase yweaks in this case myisam/ft_boolean_search.c: -trunc* bug - don't increase yweaks in this case mysql-test/r/fulltext.result: -trunc* bug - don't increase yweaks in this case mysql-test/t/fulltext.test: -trunc* bug - don't increase yweaks in this case --- myisam/ft_boolean_search.c | 11 ++++++----- mysql-test/r/fulltext.result | 3 +++ mysql-test/t/fulltext.test | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index ffc7e1bf104..aab3854dd34 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -345,11 +345,12 @@ static void _ftb_init_index_search(FT_INFO *ftb) if (ftbe->flags & FTB_FLAG_NO || /* 2 */ ftbe->up->ythresh - ftbe->up->yweaks >1) /* 1 */ { - FTB_EXPR *top_ftbe=ftbe->up->up; + FTB_EXPR *top_ftbe=ftbe->up; ftbw->docid[0]=HA_OFFSET_ERROR; - for (ftbe=ftbw->up; ftbe != top_ftbe; ftbe=ftbe->up) - if (!(ftbe->flags & FTB_FLAG_NO)) - ftbe->yweaks++; + for (ftbe=(FTB_EXPR *)ftbw; + ftbe != top_ftbe && !(ftbe->flags & FTB_FLAG_NO); + ftbe=ftbe->up) + ftbe->up->yweaks++; ftbe=0; break; } @@ -363,7 +364,7 @@ static void _ftb_init_index_search(FT_INFO *ftb) else reset_tree(& ftb->no_dupes); } - + if (_ft2_search(ftb, ftbw, 1)) return; } diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index 7acc8a2d23f..a042248ba34 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -148,6 +148,9 @@ select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN B a b select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); a b +select * from t1 where MATCH a,b AGAINST ('+collections -supp* -foobar*' IN BOOLEAN MODE); +a b +Full-text indexes are called collections select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); a b select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE); diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 008e965297f..62dcecaff68 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -67,6 +67,7 @@ select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); +select * from t1 where MATCH a,b AGAINST ('+collections -supp* -foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); # bug#2708, bug#3870 crash From af5778538db5694f3bec965e1bc95e4d883dceee Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Jan 2005 12:04:35 +0400 Subject: [PATCH 07/62] A fix (bug #6999: Traditional: Wrong SQLSTATE returned for string truncation). sql/share/errmsg.txt: A fix (bug #6999: Traditional: Wrong SQLSTATE returned for string truncation). ER_DATA_TOO_LONG (22001) has been added. --- mysql-test/r/strict.result | 4 ++-- mysql-test/t/strict.test | 4 ++-- sql/field.cc | 8 ++++++-- sql/share/errmsg.txt | 2 ++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/strict.result b/mysql-test/r/strict.result index fb228d37da3..c8f8006b992 100644 --- a/mysql-test/r/strict.result +++ b/mysql-test/r/strict.result @@ -814,14 +814,14 @@ DROP TABLE t1; CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6)); INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello '); INSERT INTO t1 (col1) VALUES ('hellobob'); -ERROR 01000: Data truncated for column 'col1' at row 1 +ERROR 22001: Data too long for column 'col1' at row 1 INSERT INTO t1 (col2) VALUES ('hellobob'); ERROR 01000: Data truncated for column 'col2' at row 1 INSERT INTO t1 (col2) VALUES ('hello '); Warnings: Note 1265 Data truncated for column 'col2' at row 1 UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he'; -ERROR 01000: Data truncated for column 'col1' at row 2 +ERROR 22001: Data too long for column 'col1' at row 2 UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he'; ERROR 01000: Data truncated for column 'col2' at row 2 INSERT IGNORE INTO t1 VALUES ('hellobob', 'hellobob'); diff --git a/mysql-test/t/strict.test b/mysql-test/t/strict.test index a0cfc0c60f4..e9612dd5729 100644 --- a/mysql-test/t/strict.test +++ b/mysql-test/t/strict.test @@ -565,12 +565,12 @@ DROP TABLE t1; CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6)); INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello '); ---error 1265 +--error 1400 INSERT INTO t1 (col1) VALUES ('hellobob'); --error 1265 INSERT INTO t1 (col2) VALUES ('hellobob'); INSERT INTO t1 (col2) VALUES ('hello '); ---error 1265 +--error 1400 UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he'; --error 1265 UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he'; diff --git a/sql/field.cc b/sql/field.cc index 400ebf65273..6c97a5a3e0c 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4368,8 +4368,12 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs) error= 1; } if (error) - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); - + { + if (table->in_use->abort_on_warning) + set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1); + else + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + } return error; } diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 951bffd698d..f1050cc7b63 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5210,3 +5210,5 @@ ER_PROC_AUTO_GRANT_FAIL eng "Failed to grant EXECUTE and ALTER ROUTINE privileges" ER_PROC_AUTO_REVOKE_FAIL eng "Failed to revoke all privileges to dropped routine" +ER_DATA_TOO_LONG 22001 + eng "Data too long for column '%s' at row %ld" From 8e1e1e73d811d4090255b49128ffa697163b2e1d Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Jan 2005 12:55:54 +0200 Subject: [PATCH 08/62] Final patch for BUG#4285. This patch collects all previous patches into one. The main problem was due to that there is are two variables - dflt_key_cache and sql_key_cache with have more or less duplicate function. The reson for the bug was that the default value in the key cache hash was set to dflt_key_cache, then sql_key_cache was set to a new key cache object, and then dflt_key_cache was set to sql_key_cache which was different from the dflt_key_cache_var. After sending SIGHUP, the server was using the original default value for the key cache hash, which was different from the actual key cache object used for the default key cache. include/keycache.h: Import patch 4285.diff mysys/mf_keycache.c: Import patch 4285.diff sql/mysql_priv.h: Import patch 4285.diff sql/mysqld.cc: Import patch 4285.diff sql/set_var.cc: Import patch 4285.diff sql/sql_parse.cc: Import patch 4285.diff sql/sql_show.cc: Import patch 4285.diff --- include/keycache.h | 5 ++++- mysys/mf_keycache.c | 35 +++++++++++++++++++++++++++++++++++ sql/mysql_priv.h | 1 - sql/mysqld.cc | 13 +++++-------- sql/set_var.cc | 4 ++-- sql/sql_parse.cc | 14 +++----------- sql/sql_show.cc | 2 +- 7 files changed, 50 insertions(+), 24 deletions(-) diff --git a/include/keycache.h b/include/keycache.h index 26ee0ccadb1..a292a69b0a3 100644 --- a/include/keycache.h +++ b/include/keycache.h @@ -88,12 +88,13 @@ typedef struct st_key_cache ulong param_division_limit; /* min. percentage of warm blocks */ ulong param_age_threshold; /* determines when hot block is downgraded */ - /* Statistics variables */ + /* Statistics variables. These are reset in reset_key_cache_counters(). */ ulong global_blocks_changed; /* number of currently dirty blocks */ ulong global_cache_w_requests;/* number of write requests (write hits) */ ulong global_cache_write; /* number of writes from the cache to files */ ulong global_cache_r_requests;/* number of read requests (read hits) */ ulong global_cache_read; /* number of reads from files to the cache */ + int blocks; /* max number of blocks in the cache */ my_bool in_init; /* Set to 1 in MySQL during init/resize */ } KEY_CACHE; @@ -132,5 +133,7 @@ extern my_bool multi_key_cache_set(const byte *key, uint length, KEY_CACHE *key_cache); extern void multi_key_cache_change(KEY_CACHE *old_data, KEY_CACHE *new_data); +extern int reset_key_cache_counters(const char *name, + KEY_CACHE *key_cache); C_MODE_END #endif /* _keycache_h */ diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index 052d6c79ab9..a1227989a4b 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -2444,6 +2444,41 @@ static int flush_all_key_blocks(KEY_CACHE *keycache) } +/* + Reset the counters of a key cache. + + SYNOPSIS + reset_key_cache_counters() + name the name of a key cache + key_cache pointer to the key kache to be reset + + DESCRIPTION + This procedure is used by process_key_caches() to reset the counters of all + currently used key caches, both the default one and the named ones. + + RETURN + 0 on success (always because it can't fail) +*/ + +int reset_key_cache_counters(const char *name, KEY_CACHE *key_cache) +{ + DBUG_ENTER("reset_key_cache_counters"); + if (!key_cache->key_cache_inited) + { + DBUG_PRINT("info", ("Key cache %s not initialized.", name)); + DBUG_RETURN(0); + } + DBUG_PRINT("info", ("Resetting counters for key cache %s.", name)); + + key_cache->global_blocks_changed= 0; /* Key_blocks_not_flushed */ + key_cache->global_cache_r_requests= 0; /* Key_read_requests */ + key_cache->global_cache_read= 0; /* Key_reads */ + key_cache->global_cache_w_requests= 0; /* Key_write_requests */ + key_cache->global_cache_write= 0; /* Key_writes */ + DBUG_RETURN(0); +} + + #ifndef DBUG_OFF /* Test if disk-cache is ok diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 4b785aafc5f..4f4aea66dd7 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -938,7 +938,6 @@ extern SHOW_COMP_OPTION have_ndbcluster; extern struct system_variables global_system_variables; extern struct system_variables max_system_variables; extern struct rand_struct sql_rand; -extern KEY_CACHE *sql_key_cache; extern const char *opt_date_time_formats[]; extern KNOWN_DATE_TIME_FORMAT known_date_time_formats[]; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d1fef3519bf..21b1cb7ffd0 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -383,7 +383,6 @@ struct system_variables max_system_variables; MY_TMPDIR mysql_tmpdir_list; MY_BITMAP temp_pool; -KEY_CACHE *sql_key_cache; CHARSET_INFO *system_charset_info, *files_charset_info ; CHARSET_INFO *national_charset_info, *table_alias_charset; @@ -1846,14 +1845,14 @@ We will try our best to scrape up some info that will hopefully help diagnose\n\ the problem, but since we have already crashed, something is definitely wrong\n\ and this may fail.\n\n"); fprintf(stderr, "key_buffer_size=%lu\n", - (ulong) sql_key_cache->key_cache_mem_size); + (ulong) dflt_key_cache->key_cache_mem_size); fprintf(stderr, "read_buffer_size=%ld\n", global_system_variables.read_buff_size); fprintf(stderr, "max_used_connections=%ld\n", max_used_connections); fprintf(stderr, "max_connections=%ld\n", max_connections); fprintf(stderr, "threads_connected=%d\n", thread_count); fprintf(stderr, "It is possible that mysqld could use up to \n\ key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = %ld K\n\ -bytes of memory\n", ((ulong) sql_key_cache->key_cache_mem_size + +bytes of memory\n", ((ulong) dflt_key_cache->key_cache_mem_size + (global_system_variables.read_buff_size + global_system_variables.sortbuff_size) * max_connections)/ 1024); @@ -2120,12 +2119,12 @@ extern "C" void *signal_hand(void *arg __attribute__((unused))) case SIGHUP: if (!abort_loop) { + mysql_print_status((THD*) 0); // Print some debug info reload_acl_and_cache((THD*) 0, (REFRESH_LOG | REFRESH_TABLES | REFRESH_FAST | REFRESH_STATUS | REFRESH_GRANT | REFRESH_THREADS | REFRESH_HOSTS), (TABLE_LIST*) 0, NULL); // Flush logs - mysql_print_status((THD*) 0); // Send debug some info } break; #ifdef USE_ONE_SIGNAL_HAND @@ -2699,8 +2698,6 @@ server."); /* call ha_init_key_cache() on all key caches to init them */ process_key_caches(&ha_init_key_cache); - /* We must set dflt_key_cache in case we are using ISAM tables */ - dflt_key_cache= sql_key_cache; #if defined(HAVE_MLOCKALL) && defined(MCL_CURRENT) && !defined(EMBEDDED_LIBRARY) if (locked_in_memory && !getuid()) @@ -5598,10 +5595,10 @@ static void mysql_init_variables(void) threads.empty(); thread_cache.empty(); key_caches.empty(); - multi_keycache_init(); - if (!(sql_key_cache= get_or_create_key_cache(default_key_cache_base.str, + if (!(dflt_key_cache= get_or_create_key_cache(default_key_cache_base.str, default_key_cache_base.length))) exit(1); + multi_keycache_init(); /* set key_cache_hash.default_value = dflt_key_cache */ /* Initialize structures that is used when processing options */ replicate_rewrite_db.empty(); diff --git a/sql/set_var.cc b/sql/set_var.cc index e44ac742abe..1237c31075c 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -2174,7 +2174,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var) if (!tmp) // Zero size means delete { - if (key_cache == sql_key_cache) + if (key_cache == dflt_key_cache) goto end; // Ignore default key cache if (key_cache->key_cache_inited) // If initied @@ -2188,7 +2188,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var) base_name->length, &list); key_cache->in_init= 1; pthread_mutex_unlock(&LOCK_global_system_variables); - error= reassign_keycache_tables(thd, key_cache, sql_key_cache); + error= reassign_keycache_tables(thd, key_cache, dflt_key_cache); pthread_mutex_lock(&LOCK_global_system_variables); key_cache->in_init= 0; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c81aefc9cea..9eb4019b5d7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4946,6 +4946,7 @@ void kill_one_thread(THD *thd, ulong id) net_printf(thd,error,id); } + /* Clear most status variables */ static void refresh_status(void) @@ -4955,18 +4956,9 @@ static void refresh_status(void) { if (ptr->type == SHOW_LONG) *(ulong*) ptr->value= 0; - else if (ptr->type == SHOW_KEY_CACHE_LONG) - { - /* - Reset value in 'default' key cache. - This needs to be recoded when we have thread specific key values - */ - char *value= (((char*) sql_key_cache) + - (uint) ((char*) (ptr->value) - - (char*) &dflt_key_cache_var)); - *(ulong*) value= 0; - } } + /* Reset the counters of all key caches (default and named). */ + process_key_caches(reset_key_cache_counters); pthread_mutex_unlock(&LOCK_status); } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8929872c466..d9acd47c5a6 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2066,7 +2066,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables, #endif /* HAVE_OPENSSL */ case SHOW_KEY_CACHE_LONG: case SHOW_KEY_CACHE_CONST_LONG: - value= (value-(char*) &dflt_key_cache_var)+ (char*) sql_key_cache; + value= (value-(char*) &dflt_key_cache_var)+ (char*) dflt_key_cache; end= int10_to_str(*(long*) value, buff, 10); break; case SHOW_UNDEF: // Show never happen From 86f45f067cf065a942727d39cefc7c82b757c8cc Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Jan 2005 16:24:06 +0400 Subject: [PATCH 09/62] ER_WARN_DATA_TRUNCATED replaced with WARN_DATA_TRUNCATED. extra/comp_err.c: WARN_PREFIX added. --- extra/comp_err.c | 3 ++- sql/field.cc | 54 +++++++++++++++++++++----------------------- sql/field_conv.cc | 11 ++++----- sql/share/errmsg.txt | 2 +- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/extra/comp_err.c b/extra/comp_err.c index a02eea4e510..baed28a0350 100644 --- a/extra/comp_err.c +++ b/extra/comp_err.c @@ -35,6 +35,7 @@ #define HEADER_LENGTH 32 /* Length of header in errmsg.sys */ #define DEFAULT_CHARSET_DIR "../sql/share/charsets" #define ER_PREFIX "ER_" +#define WARN_PREFIX "WARN_" static char *OUTFILE= (char*) "errmsg.sys"; static char *HEADERFILE= (char*) "mysqld_error.h"; static char *NAMEFILE= (char*) "mysqld_ername.h"; @@ -453,7 +454,7 @@ static int parse_input_file(const char *file_name, struct errors **top_error, DBUG_RETURN(0); continue; } - if (is_prefix(str, ER_PREFIX)) + if (is_prefix(str, ER_PREFIX) || is_prefix(str, WARN_PREFIX)) { if (!(current_error= parse_error_string(str, rcount))) { diff --git a/sql/field.cc b/sql/field.cc index dd447d41ab0..7d0e69681c0 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -117,7 +117,7 @@ bool Field::check_int(const char *str, int length, const char *int_end, { if (!my_isspace(cs,*str)) { - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); return 1; } } @@ -662,7 +662,7 @@ int Field_decimal::store(const char *from, uint len, CHARSET_INFO *cs) from++; if (from == end) { - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); is_cuted_fields_incr=1; } else if (*from == '+' || *from == '-') // Found some sign ? @@ -738,7 +738,7 @@ int Field_decimal::store(const char *from, uint len, CHARSET_INFO *cs) for (;from != end && my_isspace(&my_charset_bin, *from); from++) ; if (from != end) // If still something left, warn { - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); is_cuted_fields_incr=1; } } @@ -917,7 +917,7 @@ int Field_decimal::store(const char *from, uint len, CHARSET_INFO *cs) { if (!is_cuted_fields_incr) set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, 1); + WARN_DATA_TRUNCATED, 1); return 0; } continue; @@ -939,7 +939,7 @@ int Field_decimal::store(const char *from, uint len, CHARSET_INFO *cs) This is a note, not a warning, as we don't want to abort when we cut decimals in strict mode */ - set_warning(MYSQL_ERROR::WARN_LEVEL_NOTE, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_NOTE, WARN_DATA_TRUNCATED, 1); } return 0; } @@ -2367,8 +2367,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs) table->in_use->count_cuted_fields)) { set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - (error ? ER_WARN_DATA_OUT_OF_RANGE : ER_WARN_DATA_TRUNCATED), - 1); + (error ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED), 1); error= 1; } Field_float::store(nr); @@ -2656,8 +2655,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs) table->in_use->count_cuted_fields)) { set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - (error ? ER_WARN_DATA_OUT_OF_RANGE : ER_WARN_DATA_TRUNCATED), - 1); + (error ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED), 1); error= 1; } Field_double::store(nr); @@ -3024,7 +3022,7 @@ int Field_timestamp::store(const char *from,uint len,CHARSET_INFO *cs) if (error || !have_smth_to_conv) { error= 1; - set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, + set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, from, len, MYSQL_TIMESTAMP_DATETIME, 1); } @@ -3104,7 +3102,7 @@ int Field_timestamp::store(longlong nr) } else if (error) set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, + WARN_DATA_TRUNCATED, nr, MYSQL_TIMESTAMP_DATETIME, 1); #ifdef WORDS_BIGENDIAN @@ -3337,14 +3335,14 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs) { tmp=0L; error= 1; - set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, + set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, from, len, MYSQL_TIMESTAMP_TIME, 1); } else { if (error) set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, + WARN_DATA_TRUNCATED, from, len, MYSQL_TIMESTAMP_TIME, 1); if (ltime.month) @@ -3700,7 +3698,7 @@ int Field_date::store(const char *from, uint len,CHARSET_INFO *cs) tmp=(uint32) l_time.year*10000L + (uint32) (l_time.month*100+l_time.day); if (error) - set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, + set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, from, len, MYSQL_TIMESTAMP_DATE, 1); #ifdef WORDS_BIGENDIAN @@ -3896,7 +3894,7 @@ int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs) tmp= l_time.day + l_time.month*32 + l_time.year*16*32; if (error) - set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, + set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, from, len, MYSQL_TIMESTAMP_DATE, 1); int3store(ptr,tmp); @@ -3909,7 +3907,7 @@ int Field_newdate::store(double nr) { (void) Field_newdate::store((longlong) -1); set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, nr, MYSQL_TIMESTAMP_DATE); + WARN_DATA_TRUNCATED, nr, MYSQL_TIMESTAMP_DATE); return 1; } else @@ -3968,7 +3966,7 @@ int Field_newdate::store_time(TIME *ltime,timestamp_type type) { tmp=0; error= 1; - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); } int3store(ptr,tmp); return error; @@ -4124,7 +4122,7 @@ int Field_datetime::store(longlong nr) if (error) set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, initial_nr, + WARN_DATA_TRUNCATED, initial_nr, MYSQL_TIMESTAMP_DATETIME, 1); #ifdef WORDS_BIGENDIAN @@ -4154,7 +4152,7 @@ int Field_datetime::store_time(TIME *ltime,timestamp_type type) { tmp=0; error= 1; - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); } #ifdef WORDS_BIGENDIAN if (table->s->db_low_byte_first) @@ -4374,7 +4372,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs) if (table->in_use->abort_on_warning) set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1); else - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); } return error; } @@ -4728,7 +4726,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs) error= 1; } if (error) - set_warning(level, ER_WARN_DATA_TRUNCATED, 1); + set_warning(level, WARN_DATA_TRUNCATED, 1); return error; } @@ -5329,7 +5327,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs) bmove(ptr+packlength,(char*) &from,sizeof(char*)); } if (error) - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); return 0; } @@ -5915,11 +5913,11 @@ int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs) if (err || end != from+length || tmp > typelib->count) { tmp=0; - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); } } else - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); } store_type((ulonglong) tmp); return err; @@ -5937,7 +5935,7 @@ int Field_enum::store(longlong nr) int error= 0; if ((uint) nr > typelib->count || nr == 0) { - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); nr=0; error=1; } @@ -6096,11 +6094,11 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs) tmp > (ulonglong) (((longlong) 1 << typelib->count) - (longlong) 1)) { tmp=0; - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); } } else if (got_warning) - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); store_type(tmp); return err; } @@ -6113,7 +6111,7 @@ int Field_set::store(longlong nr) (longlong) 1)) { nr&= (longlong) (((longlong) 1 << typelib->count) - (longlong) 1); - set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); error=1; } store_type((ulonglong) nr); diff --git a/sql/field_conv.cc b/sql/field_conv.cc index 07cc90283b7..002f059f70b 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -121,8 +121,7 @@ set_field_to_null(Field *field) field->reset(); if (current_thd->count_cuted_fields == CHECK_FIELD_WARN) { - field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, 1); + field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); return 0; } if (!current_thd->no_errors) @@ -230,7 +229,7 @@ static void do_copy_not_null(Copy_field *copy) if (*copy->from_null_ptr & copy->from_bit) { copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, 1); + WARN_DATA_TRUNCATED, 1); copy->to_field->reset(); } else @@ -336,7 +335,7 @@ static void do_cut_string(Copy_field *copy) if (!my_isspace(system_charset_info, *ptr)) // QQ: ucs incompatible { copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, 1); + WARN_DATA_TRUNCATED, 1); break; } } @@ -360,7 +359,7 @@ static void do_varstring1(Copy_field *copy) length=copy->to_length - 1; if (current_thd->count_cuted_fields) copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, 1); + WARN_DATA_TRUNCATED, 1); } *(uchar*) copy->to_ptr= (uchar) length; memcpy(copy->to_ptr+1, copy->from_ptr + 1, length); @@ -375,7 +374,7 @@ static void do_varstring2(Copy_field *copy) length=copy->to_length-HA_KEY_BLOB_LENGTH; if (current_thd->count_cuted_fields) copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, - ER_WARN_DATA_TRUNCATED, 1); + WARN_DATA_TRUNCATED, 1); } int2store(copy->to_ptr,length); memcpy(copy->to_ptr+HA_KEY_BLOB_LENGTH, copy->from_ptr + HA_KEY_BLOB_LENGTH, diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index f1050cc7b63..8cd1c2338f1 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -4798,7 +4798,7 @@ ER_WARN_DATA_OUT_OF_RANGE 22003 ger "Daten abgeschnitten, außerhalb des Wertebereichs für Spalte '%s' in Zeile %ld" por "Dado truncado, fora de alcance para coluna '%s' na linha %ld" spa "Datos truncados, fuera de gama para columna '%s' en la línea %ld" -ER_WARN_DATA_TRUNCATED 01000 +WARN_DATA_TRUNCATED 01000 eng "Data truncated for column '%s' at row %ld" ger "Daten abgeschnitten für Spalte '%s' in Zeile %ld" por "Dado truncado para coluna '%s' na linha %ld" From faff1cda2bd0c45daf32768f3c2daef9eb0b48a9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Jan 2005 12:23:24 -0800 Subject: [PATCH 10/62] Warn when mysqld starts up with lower_case_table_names=2 but datadir is on a case-sensitive filesystem. (Bug #7887) sql/mysqld.cc: Add warning when running with lower_case_table_names=2 and datadir is on a case-sensitive filesystem. --- sql/mysqld.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d1fef3519bf..b21b84a34e7 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2913,6 +2913,17 @@ You should consider changing lower_case_table_names to 1 or 2", lower_case_table_names= 2; } } + else if (lower_case_table_names == 2 && + (test_if_case_insensitive(mysql_real_data_home) == 0)) + { + if (global_system_variables.log_warnings) + sql_print_warning("\ +You have forced lower_case_table_names to 2 through a command-line \ +option, even though your file system '%s' is case sensitive. This means \ +that you can create a table that you can then no longer access. \ +You should consider changing lower_case_table_names to 0.", + mysql_real_data_home); + } select_thread=pthread_self(); select_thread_in_use=1; From c03aaf85f23f5c8f55a9b3182839b2e440431260 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Jan 2005 16:25:38 +0100 Subject: [PATCH 11/62] - renamed client_test -> mysql_client_test - renamed the tests that use the embedded server (client_test -> mysql_client_test_embedded, mysqltest -> mysql_test_embedded and changed some Makefiles and scripts so they are installed in $bindir (required to be able to run the test suite against the embedded server) tests/mysql_client_test.c: Rename: tests/client_test.c -> tests/mysql_client_test.c libmysql/libmysql.c: - renamed client_test.c to mysql_client_test.c in a comment libmysqld/examples/Makefile.am: - renamed client_test -> mysql_client_test_embedded - renamed mysqltest -> mysqltest_embedded - both will be installed in $bindir scripts/make_binary_distribution.sh: - install mysql_client_test, mysql_client_test_embedded and mysqltest_embedded into bin directory tests/Makefile.am: - renamed client_test to mysql_client_test BitKeeper/etc/ignore: Added tests/mysql_client_test to the ignore list --- .bzrignore | 2 ++ libmysql/libmysql.c | 2 +- libmysqld/examples/Makefile.am | 17 +++++++++-------- scripts/make_binary_distribution.sh | 4 +++- tests/Makefile.am | 6 +++--- tests/{client_test.c => mysql_client_test.c} | 0 6 files changed, 18 insertions(+), 13 deletions(-) rename tests/{client_test.c => mysql_client_test.c} (100%) diff --git a/.bzrignore b/.bzrignore index 54a8c8fd03a..40b7668cb64 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1002,3 +1002,5 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl +tests/mysql_client_test +tests/mysql_client_test diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 206fd8f77b4..3d84059e981 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -2978,7 +2978,7 @@ static my_bool int_is_null_false= 0; values and mysql_stmt_execute() the statement. See also: mysql_stmt_send_long_data() for sending long text/blob - data in pieces, examples in tests/client_test.c. + data in pieces, examples in tests/mysql_client_test.c. Next steps you might want to make: - execute statement with mysql_stmt_execute(), - reset statement using mysql_stmt_reset() or reprepare it with diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index 5b0a86e679c..c6759d99aab 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -1,6 +1,7 @@ -noinst_PROGRAMS = mysqltest mysql client_test -client_sources = $(mysqltest_SOURCES) $(mysql_SOURCES) -tests_sources= $(client_test_SOURCES) +noinst_PROGRAMS = mysql +bin_PROGRAMS = mysqltest_embedded mysql_client_test_embedded +client_sources = $(mysqltest_embedded_SOURCES) $(mysql_SOURCES) +tests_sources= $(mysql_client_test_SOURCES) link_sources: for f in $(client_sources); do \ @@ -19,16 +20,16 @@ INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \ LIBS = @LIBS@ @WRAPLIBS@ @CLIENT_LIBS@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @innodb_system_libs@ @LIBDL@ $(CXXLDFLAGS) -mysqltest_LINK = $(CXXLINK) -mysqltest_SOURCES = mysqltest.c -mysqltest_LDADD = $(LDADD) $(top_builddir)/regex/libregex.a +mysqltest_embedded_LINK = $(CXXLINK) +mysqltest_embedded_SOURCES = mysqltest.c +mysqltest_embedded_LDADD = $(LDADD) $(top_builddir)/regex/libregex.a mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \ my_readline.h sql_string.h completion_hash.h mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) -client_test_LINK = $(CXXLINK) -client_test_SOURCES = client_test.c +mysql_client_test_embedded_LINK = $(CXXLINK) +mysql_client_test_embedded_SOURCES = mysql_client_test.c clean: rm -f $(client_sources) diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 281ef9bd469..22b51168c23 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -127,6 +127,8 @@ else client/.libs/mysqltest client/.libs/mysqlcheck \ client/.libs/mysqlbinlog client/.libs/mysqlmanagerc \ client/.libs/mysqlmanager-pwgen tools/.libs/mysqlmanager \ + tests/.libs/mysql_client_test libmysqld/examples/mysql_client_test_embedded \ + libmysqld/examples/mysqltest_embedded \ "; fi @@ -187,7 +189,7 @@ fi if [ $BASE_SYSTEM != "netware" ] ; then if [ -d tests ] ; then - $CP tests/client_test tests/*.res tests/*.tst tests/*.pl $BASE/tests + $CP tests/*.res tests/*.tst tests/*.pl $BASE/tests fi if [ -d man ] ; then $CP man/*.1 $BASE/man/man1 diff --git a/tests/Makefile.am b/tests/Makefile.am index df16ee789a5..de4fbb2a4f2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -26,7 +26,7 @@ EXTRA_DIST = auto_increment.res auto_increment.tst \ pmail.pl mail_to_db.pl table_types.pl \ udf_test udf_test.res myisam-big-rows.tst -bin_PROGRAMS = client_test +bin_PROGRAMS = mysql_client_test noinst_PROGRAMS = insert_test select_test thread_test # @@ -35,8 +35,8 @@ noinst_PROGRAMS = insert_test select_test thread_test INCLUDES = -I$(top_srcdir)/include $(openssl_includes) LIBS = @CLIENT_LIBS@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysql/libmysqlclient.la -client_test_LDADD= $(LDADD) $(CXXLDFLAGS) -client_test_SOURCES= client_test.c +mysql_client_test_LDADD= $(LDADD) $(CXXLDFLAGS) +mysql_client_test_SOURCES= mysql_client_test.c insert_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) select_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) diff --git a/tests/client_test.c b/tests/mysql_client_test.c similarity index 100% rename from tests/client_test.c rename to tests/mysql_client_test.c From 4e1e23a17438433bf498e038b60b024d345f9959 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Jan 2005 17:00:30 +0100 Subject: [PATCH 12/62] - fixed one missing occasion from the mysql_client_test renaming libmysqld/examples/Makefile.am: - fixed a missing rename (mysql_client_test -> mysql_client_test_embedded) --- libmysqld/examples/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index c6759d99aab..51a7252440a 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -1,7 +1,7 @@ noinst_PROGRAMS = mysql bin_PROGRAMS = mysqltest_embedded mysql_client_test_embedded client_sources = $(mysqltest_embedded_SOURCES) $(mysql_SOURCES) -tests_sources= $(mysql_client_test_SOURCES) +tests_sources= $(mysql_client_test_embedded_SOURCES) link_sources: for f in $(client_sources); do \ From 7a3767fc5ebdf376280f4d0ecaa52e9e3aef9bf4 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 07:53:02 +0100 Subject: [PATCH 13/62] Bug#8051 - ndb Make sure to ship error code in system error signal --- ndb/src/kernel/blocks/dbdih/DbdihMain.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index a8ad4008a74..d6315ab259e 100644 --- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -2976,6 +2976,8 @@ void Dbdih::execCOPY_FRAGREF(Signal* signal) SystemError * const sysErr = (SystemError*)&signal->theData[0]; sysErr->errorCode = SystemError::CopyFragRefError; sysErr->errorRef = reference(); + sysErr->data1 = errorCode; + sysErr->data2 = 0; sendSignal(cntrRef, GSN_SYSTEM_ERROR, signal, SystemError::SignalLength, JBB); return; @@ -4492,6 +4494,8 @@ void Dbdih::handleTakeOverNewMaster(Signal* signal, Uint32 takeOverPtrI) SystemError * const sysErr = (SystemError*)&signal->theData[0]; sysErr->errorCode = SystemError::CopyFragRefError; sysErr->errorRef = reference(); + signal->data1= 0; + signal->data2= __LINE__; sendSignal(cntrRef, GSN_SYSTEM_ERROR, signal, SystemError::SignalLength, JBB); } From 4bfad5aedb45d386a4449f70cf079357c297642c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 08:28:23 +0100 Subject: [PATCH 14/62] bug#8051 - ndb, typo, more info on crash ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: typo --- ndb/src/kernel/blocks/dbdih/DbdihMain.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index d6315ab259e..dba1efbba9a 100644 --- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -4494,8 +4494,8 @@ void Dbdih::handleTakeOverNewMaster(Signal* signal, Uint32 takeOverPtrI) SystemError * const sysErr = (SystemError*)&signal->theData[0]; sysErr->errorCode = SystemError::CopyFragRefError; sysErr->errorRef = reference(); - signal->data1= 0; - signal->data2= __LINE__; + sysErr->data1= 0; + sysErr->data2= __LINE__; sendSignal(cntrRef, GSN_SYSTEM_ERROR, signal, SystemError::SignalLength, JBB); } From 4c0a0c3e56fa94baff9f12895c6d96f1ffb77698 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 08:41:38 +0100 Subject: [PATCH 15/62] moved START_AND_EXIT check so it can actually be used fix as not to overwrite previoulsy set flags in configure config/ac-macros/ha_ndbcluster.m4: fix as not to overwrite previoulsy set flags in configure configure.in: fix as not to overwrite previoulsy set flags in configure mysql-test/mysql-test-run.sh: movet START_AND_EXIT check so it can actually be used --- config/ac-macros/ha_ndbcluster.m4 | 4 ++-- configure.in | 1 + mysql-test/mysql-test-run.sh | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/config/ac-macros/ha_ndbcluster.m4 b/config/ac-macros/ha_ndbcluster.m4 index 751a11d1895..dc5e0e73558 100644 --- a/config/ac-macros/ha_ndbcluster.m4 +++ b/config/ac-macros/ha_ndbcluster.m4 @@ -64,8 +64,8 @@ AC_DEFUN([MYSQL_CHECK_NDB_OPTIONS], [ AC_ARG_WITH([ndb-ccflags], [ --with-ndb-ccflags Extra CC options for ndb compile], - [ndb_cxxflags_fix=$withval], - [ndb_cxxflags_fix=]) + [ndb_cxxflags_fix="$ndb_cxxflags_fix $withval"], + [ndb_cxxflags_fix=$ndb_cxxflags_fix]) AC_MSG_CHECKING([for NDB Cluster options]) AC_MSG_RESULT([]) diff --git a/configure.in b/configure.in index e20edf97a72..3a0a2aa9c9d 100644 --- a/configure.in +++ b/configure.in @@ -962,6 +962,7 @@ esac MAX_C_OPTIMIZE="-O3" MAX_CXX_OPTIMIZE="-O3" +ndb_cxxflags_fix= case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc in # workaround for Sun Forte/x86 see BUG#4681 *solaris*-i?86-no) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index a6cbea2d1e5..037fdb28199 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -1547,6 +1547,12 @@ run_testcase () fi fi fi + + if [ "x$START_AND_EXIT" = "x1" ] ; then + echo "Servers started, exiting" + exit + fi + cd $MYSQL_TEST_DIR if [ -f $tf ] ; then @@ -1682,10 +1688,6 @@ then mysql_loadstd fi -if [ "x$START_AND_EXIT" = "x1" ] ; then - echo "Servers started, exiting" - exit -fi $ECHO "Starting Tests" From e5dc8298062e73de83d0c00baee9b3f4dedaf932 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 11:43:25 +0100 Subject: [PATCH 16/62] corrected "merge error" with wl2299 ndb/src/mgmclient/CommandInterpreter.cpp: added debug printouts --- ndb/src/mgmapi/mgmapi.cpp | 5 +++-- ndb/src/mgmclient/CommandInterpreter.cpp | 26 +++++++++++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/ndb/src/mgmapi/mgmapi.cpp b/ndb/src/mgmapi/mgmapi.cpp index 2872960f90a..f7585ec3ab5 100644 --- a/ndb/src/mgmapi/mgmapi.cpp +++ b/ndb/src/mgmapi/mgmapi.cpp @@ -1158,7 +1158,7 @@ ndb_mgm_set_loglevel_node(NdbMgmHandle handle, int nodeId, int ndb_mgm_listen_event_internal(NdbMgmHandle handle, const int filter[], - int structured) + int parsable) { SET_ERROR(handle, NDB_MGM_NO_ERROR, "Executing: ndb_mgm_listen_event"); const ParserRow stat_reply[] = { @@ -1181,7 +1181,8 @@ ndb_mgm_listen_event_internal(NdbMgmHandle handle, const int filter[], Properties args; - args.put("structured", structured); + if (parsable) + args.put("parsable", parsable); { BaseString tmp; for(int i = 0; filter[i] != 0; i += 2){ diff --git a/ndb/src/mgmclient/CommandInterpreter.cpp b/ndb/src/mgmclient/CommandInterpreter.cpp index bb48f08dda0..286264e070f 100644 --- a/ndb/src/mgmclient/CommandInterpreter.cpp +++ b/ndb/src/mgmclient/CommandInterpreter.cpp @@ -389,7 +389,7 @@ CommandInterpreter::CommandInterpreter(const char *_host,int verbose) } m_mgmsrv2 = ndb_mgm_create_handle(); if(m_mgmsrv2 == NULL) { - ndbout_c("Cannot create handle to management server."); + ndbout_c("Cannot create 2:nd handle to management server."); exit(-1); } if (ndb_mgm_set_connectstring(m_mgmsrv, _host)) @@ -459,6 +459,8 @@ event_thread_run(void* m) my_thread_init(); + DBUG_ENTER("event_thread_run"); + int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0 }; int fd = ndb_mgm_listen_event(handle, filter); if (fd > 0) @@ -486,17 +488,20 @@ event_thread_run(void* m) bool CommandInterpreter::connect() { + DBUG_ENTER("CommandInterpreter::connect"); if(!m_connected) { if(!ndb_mgm_connect(m_mgmsrv, try_reconnect-1, 5, 1)) { const char *host= ndb_mgm_get_connected_host(m_mgmsrv); unsigned port= ndb_mgm_get_connected_port(m_mgmsrv); - if(!ndb_mgm_set_connectstring(m_mgmsrv2, - BaseString(host).appfmt(":%d",port).c_str()) - && + BaseString constr; + constr.assfmt("%s:%d",host,port); + if(!ndb_mgm_set_connectstring(m_mgmsrv2, constr.c_str()) && !ndb_mgm_connect(m_mgmsrv2, try_reconnect-1, 5, 1)) { + DBUG_PRINT("info",("2:ndb connected to Management Server ok at: %s:%d", + host, port)); assert(m_event_thread == 0); assert(do_event_thread == 0); do_event_thread= 0; @@ -507,6 +512,7 @@ CommandInterpreter::connect() NDB_THREAD_PRIO_LOW); if (m_event_thread != 0) { + DBUG_PRINT("info",("Thread created ok, waiting for started...")); int iter= 1000; // try for 30 seconds while(do_event_thread == 0 && iter-- > 0) @@ -516,15 +522,25 @@ CommandInterpreter::connect() do_event_thread == 0 || do_event_thread == -1) { + DBUG_PRINT("warning",("thread not started")); printf("Warning, event thread startup failed, degraded printouts as result\n"); do_event_thread= 0; } } else { + DBUG_PRINT("warning", + ("Could not do 2:nd connect to mgmtserver for event listening")); + DBUG_PRINT("info", ("code: %d, msg: %s", + ndb_mgm_get_latest_error(m_mgmsrv2), + ndb_mgm_get_latest_error_msg(m_mgmsrv2))); printf("Warning, event connect failed, degraded printouts as result\n"); + printf("code: %d, msg: %s\n", + ndb_mgm_get_latest_error(m_mgmsrv2), + ndb_mgm_get_latest_error_msg(m_mgmsrv2)); } m_connected= true; + DBUG_PRINT("info",("Connected to Management Server at: %s:%d", host, port)); if (m_verbose) { printf("Connected to Management Server at: %s:%d\n", @@ -532,7 +548,7 @@ CommandInterpreter::connect() } } } - return m_connected; + DBUG_RETURN(m_connected); } bool From 9f7f6ed2c94d2e44bf5c5adf620a2b9e39887d67 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 15:14:31 +0400 Subject: [PATCH 17/62] A fix (bug #7261: Alter table loses temp table with lower_case_table_names=2). --- sql/sql_table.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c3bfbe086f1..e01df8a3fcd 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3231,7 +3231,8 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, } /* Remove link to old table and rename the new one */ close_temporary_table(thd,table->table_cache_key,table_name); - if (rename_temporary_table(thd, new_table, new_db, new_alias)) + /* Should pass the 'new_name' as we store table name in the cache */ + if (rename_temporary_table(thd, new_table, new_db, new_name)) { // Fatal error close_temporary_table(thd,new_db,tmp_name); my_free((gptr) new_table,MYF(0)); From eaec73c3bee229a1b1e45919580370701dab0c83 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 12:15:14 +0100 Subject: [PATCH 18/62] enabled adding option to ndb_mgm in mysql test run --- mysql-test/mysql-test-run.sh | 5 ++++- mysql-test/ndb/ndbcluster.sh | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 037fdb28199..953b560fe09 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -241,6 +241,7 @@ USE_EMBEDDED_SERVER="" RESULT_EXT="" TEST_MODE="default" +NDB_MGM_EXTRA_OPTS= NDB_MGMD_EXTRA_OPTS= NDBD_EXTRA_OPTS= @@ -264,6 +265,8 @@ while test $# -gt 0; do --ndb-connectstring=*) USE_NDBCLUSTER="--ndbcluster" ; USE_RUNNING_NDBCLUSTER=`$ECHO "$1" | $SED -e "s;--ndb-connectstring=;;"` ;; + --ndb_mgm-extra-opts=*) + NDB_MGM_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgm-extra-opts=;;"` ;; --ndb_mgmd-extra-opts=*) NDB_MGMD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgmd-extra-opts=;;"` ;; --ndbd-extra-opts=*) @@ -470,7 +473,7 @@ SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M" export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1 NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2` -NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgmd-extra-opts=\"$NDB_MGMD_EXTRA_OPTS\" --ndbd-extra-opts=\"$NDBD_EXTRA_OPTS\"" +NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgm-extra-opts=$NDB_MGM_EXTRA_OPTS --ndb_mgmd-extra-opts=$NDB_MGMD_EXTRA_OPTS --ndbd-extra-opts=$NDBD_EXTRA_OPTS" if [ x$SOURCE_DIST = x1 ] ; then MY_BASEDIR=$MYSQL_TEST_DIR diff --git a/mysql-test/ndb/ndbcluster.sh b/mysql-test/ndb/ndbcluster.sh index a86e482b2ab..16bb3a9b122 100644 --- a/mysql-test/ndb/ndbcluster.sh +++ b/mysql-test/ndb/ndbcluster.sh @@ -58,6 +58,7 @@ ndb_con_op=105000 ndb_dmem=80M ndb_imem=24M +NDB_MGM_EXTRA_OPTS= NDB_MGMD_EXTRA_OPTS= NDBD_EXTRA_OPTS= @@ -97,6 +98,9 @@ while test $# -gt 0; do --port-base=*) port_base=`echo "$1" | sed -e "s;--port-base=;;"` ;; + --ndb_mgm-extra-opts=*) + NDB_MGM_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgm-extra-opts=;;"` + ;; --ndb_mgmd-extra-opts=*) NDB_MGMD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgmd-extra-opts=;;"` ;; @@ -130,7 +134,7 @@ if [ ! -x "$exec_waiter" ]; then exit 1 fi -exec_mgmtclient="$exec_mgmtclient --no-defaults" +exec_mgmtclient="$exec_mgmtclient --no-defaults $NDB_MGM_EXTRA_OPTS" exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults $NDB_MGMD_EXTRA_OPTS" exec_ndb="$exec_ndb --no-defaults $NDBD_EXTRA_OPTS" exec_waiter="$exec_waiter --no-defaults" @@ -178,8 +182,8 @@ fi # Edit file system path and ports in config file if [ $initial_ndb ] ; then - rm -f $fs_ndb/ndb_* -sed \ + rm -f $fs_ndb/ndb_* 2>&1 | cat > /dev/null + sed \ -e s,"CHOOSE_MaxNoOfOrderedIndexes","$ndb_no_ord",g \ -e s,"CHOOSE_MaxNoOfConcurrentOperations","$ndb_con_op",g \ -e s,"CHOOSE_DataMemory","$ndb_dmem",g \ From 9351499b2d3d6aa751356d012005165eaaaa3b8b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 12:50:18 +0100 Subject: [PATCH 19/62] EventLogger.cpp: fixed node id printout bug ndb/src/common/debugger/EventLogger.cpp: fixed node id printout bug --- ndb/src/common/debugger/EventLogger.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ndb/src/common/debugger/EventLogger.cpp b/ndb/src/common/debugger/EventLogger.cpp index 32a170d27a4..5a534b36b59 100644 --- a/ndb/src/common/debugger/EventLogger.cpp +++ b/ndb/src/common/debugger/EventLogger.cpp @@ -789,7 +789,8 @@ EventLogger::getText(char * dst, size_t dst_len, BaseString::snprintf(dst, dst_len, "Node %u: ", nodeId); pos= strlen(dst); } - textF(dst,dst_len,theData); + if (dst_len-pos > 0) + textF(dst+pos,dst_len-pos,theData); return dst; } From 92be4551cb016d866200a53899a78a9dcfa6256f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 13:16:46 +0100 Subject: [PATCH 20/62] Fix weird link error on sol9x86 - use incremental linker configure.in: Fix weird link error on sol9x86 --- configure.in | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/configure.in b/configure.in index 3a0a2aa9c9d..fbbf3918c45 100644 --- a/configure.in +++ b/configure.in @@ -2572,6 +2572,15 @@ EOF AC_CONFIG_SUBDIRS(innobase) fi +case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc-$have_ndbcluster in + *solaris*-i?86-no-yes) + # ndb fail for whatever strange reason to link Sun Forte/x86 + # unless using incremental linker + CXXFLAGS="$CXXFLAGS -xildon" + ;; + *) ;; +esac + if test X"$have_ndbcluster" = Xyes then if test X"$mysql_cv_compress" != Xyes From f813e0dac0d9f31140b699f3903940b50c9481fc Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 16:49:20 +0400 Subject: [PATCH 21/62] Bug#7943: Wrong prefix lengths reported on UTF-8 columns SHOW KEYS FROM t1 now displays number of characters in Sub_part, not number of bytes, to be compatible with SHOW CREATE TABLE. --- mysql-test/r/ctype_mb.result | 4 ++-- sql/sql_show.cc | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/ctype_mb.result b/mysql-test/r/ctype_mb.result index 5e273b3c800..dbdb9c1343c 100644 --- a/mysql-test/r/ctype_mb.result +++ b/mysql-test/r/ctype_mb.result @@ -33,7 +33,7 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 SHOW KEYS FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 1 key_a 1 a A NULL 9 NULL YES BTREE +t1 1 key_a 1 a A NULL 3 NULL YES BTREE ALTER TABLE t1 CHANGE a a CHAR(4); SHOW CREATE TABLE t1; Table Create Table @@ -53,5 +53,5 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 SHOW KEYS FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 1 key_a 1 a A NULL 9 NULL YES BTREE +t1 1 key_a 1 a A NULL 3 NULL YES BTREE DROP TABLE t1; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8929872c466..91cac29f3a3 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1025,7 +1025,8 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list) /* Check if we have a key part that only uses part of the field */ if (!(key_info->flags & HA_FULLTEXT) && (!key_part->field || key_part->length != table->field[key_part->fieldnr-1]->key_length())) - protocol->store_tiny((longlong) key_part->length); + protocol->store_tiny((longlong) key_part->length / + key_part->field->charset()->mbmaxlen); else protocol->store_null(); protocol->store_null(); // No pack_information yet From 90f94790986ba8c3938b575d8e5592a7a06471db Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 17:00:14 +0400 Subject: [PATCH 22/62] sql_show.cc: #7943: Wrong prefix lengths reported on UTF-8 columns after merge fix. sql/sql_show.cc: #7943: Wrong prefix lengths reported on UTF-8 columns after merge fix. --- sql/sql_show.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index c7b4b61ca33..f3a9f92274d 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2607,7 +2607,8 @@ static int get_schema_stat_record(THD *thd, struct st_table_list *tables, key_part->length != show_table->field[key_part->fieldnr-1]->key_length())) { - table->field[10]->store((longlong) key_part->length); + table->field[10]->store((longlong) key_part->length / + key_part->field->charset()->mbmaxlen); table->field[10]->set_notnull(); } uint flags= key_part->field ? key_part->field->flags : 0; From da931f9d67cb521fd23fc0389df763f0342179b7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 17:41:11 +0200 Subject: [PATCH 23/62] Manual merge of the fix for BUG#4285 from 4.1 sql/sql_show.cc: removed sql_key_cache --- sql/sql_show.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index f3a9f92274d..b909e9cec1b 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1512,7 +1512,7 @@ static bool show_status_array(THD *thd, const char *wild, #endif /* HAVE_OPENSSL */ case SHOW_KEY_CACHE_LONG: case SHOW_KEY_CACHE_CONST_LONG: - value= (value-(char*) &dflt_key_cache_var)+ (char*) sql_key_cache; + value= (value-(char*) &dflt_key_cache_var)+ (char*) dflt_key_cache; end= int10_to_str(*(long*) value, buff, 10); break; case SHOW_UNDEF: // Show never happen From 5e98f462bed44f1f6e0bb541368685f51d63815a Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 17:54:50 +0200 Subject: [PATCH 24/62] dict0dict.c: Fix bug #7831: ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY ... complained about bad foreign key definition innobase/dict/dict0dict.c: Fix bug #7831: ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY ... complained about bad foreign key definition --- innobase/dict/dict0dict.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/innobase/dict/dict0dict.c b/innobase/dict/dict0dict.c index 2e6504cac11..186f3be2f31 100644 --- a/innobase/dict/dict0dict.c +++ b/innobase/dict/dict0dict.c @@ -2895,9 +2895,9 @@ loop: constraint_name = NULL; if (ptr1 < ptr2) { - /* The user has specified a constraint name. Pick it so + /* The user may have specified a constraint name. Pick it so that we can store 'databasename/constraintname' as the id of - the id of the constraint to system tables. */ + of the constraint to system tables. */ ptr = ptr1; ptr = dict_accept(ptr, "CONSTRAINT", &success); @@ -2934,6 +2934,10 @@ loop: ptr = dict_accept(ptr, "FOREIGN", &success); + if (!success) { + goto loop; + } + if (!isspace(*ptr)) { goto loop; } From 6eecb8e4e206db57b3d01c07f0482e86af6b4e12 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 17:59:23 +0200 Subject: [PATCH 25/62] fil0fil.c: Fix bug #8021 :Windows error number 87 with multiple tablespaces after mysqld restart; still has to be tested on Windows that this now works innobase/fil/fil0fil.c: Fix bug #8021 :Windows error number 87 with multiple tablespaces after mysqld restart; still has to be tested on Windows that this now works --- innobase/fil/fil0fil.c | 78 ++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c index d1a083fcd66..ea34b6ffd93 100644 --- a/innobase/fil/fil0fil.c +++ b/innobase/fil/fil0fil.c @@ -477,28 +477,33 @@ fil_node_open_file( ut_a(node->n_pending == 0); ut_a(node->open == FALSE); - /* printf("Opening file %s\n", node->name); */ - - if (space->purpose == FIL_LOG) { - node->handle = os_file_create(node->name, OS_FILE_OPEN, - OS_FILE_AIO, OS_LOG_FILE, &ret); - } else if (node->is_raw_disk) { - node->handle = os_file_create(node->name, - OS_FILE_OPEN_RAW, - OS_FILE_AIO, OS_DATA_FILE, &ret); - } else { - node->handle = os_file_create(node->name, OS_FILE_OPEN, - OS_FILE_AIO, OS_DATA_FILE, &ret); - } - - ut_a(ret); - - node->open = TRUE; - - system->n_open++; - if (node->size == 0) { + /* It must be a single-table tablespace and we do not know the + size of the file yet. First we open the file in the normal + mode, no async I/O here, for simplicity. Then do some checks, + and close the file again. + NOTE that we could not use the simple file read function + os_file_read() in Windows to read from a file opened for + async I/O! */ + + node->handle = os_file_create_simple_no_error_handling( + node->name, OS_FILE_OPEN, + OS_FILE_READ_ONLY, &success); + if (!success) { + /* The following call prints an error message */ + os_file_get_last_error(TRUE); + + ut_print_timestamp(stderr); + + fprintf(stderr, +" InnoDB: Fatal error: cannot open %s\n." +"InnoDB: Have you deleted .ibd files under a running mysqld server?\n", + node->name); + ut_a(0); + } + ut_a(space->purpose != FIL_LOG); + ut_a(space->id != 0); os_file_get_size(node->handle, &size_low, &size_high); @@ -508,11 +513,6 @@ fil_node_open_file( node->size = (ulint) (size_bytes / UNIV_PAGE_SIZE); #else - /* It must be a single-table tablespace and we do not know the - size of the file yet */ - - ut_a(space->id != 0); - if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) { fprintf(stderr, "InnoDB: Error: the size of single-table tablespace file %s\n" @@ -536,6 +536,10 @@ fil_node_open_file( ut_free(buf2); + /* Close the file now that we have read the space id from it */ + + os_file_close(node->handle); + if (space_id == ULINT_UNDEFINED || space_id == 0) { fprintf(stderr, "InnoDB: Error: tablespace id %lu in file %s is not sensible\n", @@ -563,6 +567,30 @@ fil_node_open_file( space->size += node->size; } + /* printf("Opening file %s\n", node->name); */ + + /* Open the file for reading and writing, in Windows normally in the + unbuffered async I/O mode, though global variables may make + os_file_create() to fall back to the normal file I/O mode. */ + + if (space->purpose == FIL_LOG) { + node->handle = os_file_create(node->name, OS_FILE_OPEN, + OS_FILE_AIO, OS_LOG_FILE, &ret); + } else if (node->is_raw_disk) { + node->handle = os_file_create(node->name, + OS_FILE_OPEN_RAW, + OS_FILE_AIO, OS_DATA_FILE, &ret); + } else { + node->handle = os_file_create(node->name, OS_FILE_OPEN, + OS_FILE_AIO, OS_DATA_FILE, &ret); + } + + ut_a(ret); + + node->open = TRUE; + + system->n_open++; + if (space->purpose == FIL_TABLESPACE && space->id != 0) { /* Put the node to the LRU list */ UT_LIST_ADD_FIRST(LRU, system->LRU, node); From a3f7796dd93baebe835a98992c775a099da0b0b2 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 17:57:44 +0100 Subject: [PATCH 26/62] Bug#8070 corrected possible unalignment in NdbRecAttr access methods --- ndb/include/ndbapi/NdbRecAttr.hpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ndb/include/ndbapi/NdbRecAttr.hpp b/ndb/include/ndbapi/NdbRecAttr.hpp index da03df13027..29eab64a84f 100644 --- a/ndb/include/ndbapi/NdbRecAttr.hpp +++ b/ndb/include/ndbapi/NdbRecAttr.hpp @@ -304,7 +304,9 @@ inline Int64 NdbRecAttr::int64_value() const { - return *(Int64*)theRef; + Int64 val; + memcpy(&val,theRef,8); + return val; } inline @@ -332,7 +334,9 @@ inline Uint64 NdbRecAttr::u_64_value() const { - return *(Uint64*)theRef; + Uint64 val; + memcpy(&val,theRef,8); + return val; } inline @@ -360,14 +364,18 @@ inline float NdbRecAttr::float_value() const { - return *(float*)theRef; + float val; + memcpy(&val,theRef,sizeof(val)); + return val; } inline double NdbRecAttr::double_value() const { - return *(double*)theRef; + double val; + memcpy(&val,theRef,sizeof(val)); + return val; } inline From b5269973ab0f25866970caa369f7ae483a3590a7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 22:03:08 +0200 Subject: [PATCH 27/62] dict0load.c: Fix a compilation error reported by Paul Dubois; I forgot to compile 5.0 after the merge os0thread.c: test innobase/os/os0thread.c: test innobase/dict/dict0load.c: Fix a compilation error reported by Paul Dubois; I forgot to compile 5.0 after the merge --- innobase/dict/dict0load.c | 2 +- innobase/os/os0thread.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/innobase/dict/dict0load.c b/innobase/dict/dict0load.c index 63f25cdddfe..17b53a7a140 100644 --- a/innobase/dict/dict0load.c +++ b/innobase/dict/dict0load.c @@ -779,7 +779,7 @@ dict_load_table( /* Track a corruption bug reported on the MySQL mailing list Jan 14, 2005: mix_len had a value different from 0 */ - field = rec_get_nth_field(rec, 7, &len); + field = rec_get_nth_field_old(rec, 7, &len); ut_a(len == 4); mix_len = mach_read_from_4(field); diff --git a/innobase/os/os0thread.c b/innobase/os/os0thread.c index 12a8abf3069..91061bc8459 100644 --- a/innobase/os/os0thread.c +++ b/innobase/os/os0thread.c @@ -88,7 +88,7 @@ os_thread_create( /*=============*/ /* out: handle to the thread */ #ifndef __WIN__ - os_posix_f_t start_f, + os_posix_f_t start_f, #else ulint (*start_f)(void*), /* in: pointer to function from which to start */ From 531065373a85334a87f839ce20ccb9c8bd346e08 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 23:36:00 +0200 Subject: [PATCH 28/62] fil0fil.c: Add a missing newline to an error print innobase/fil/fil0fil.c: Add a missing newline to an error print --- innobase/fil/fil0fil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c index 2a2ce73bd7f..c4eddecd5cc 100644 --- a/innobase/fil/fil0fil.c +++ b/innobase/fil/fil0fil.c @@ -519,7 +519,7 @@ fil_node_open_file( if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) { fprintf(stderr, "InnoDB: Error: the size of single-table tablespace file %s\n" -"InnoDB: is only %lu %lu, should be at least %lu!", node->name, +"InnoDB: is only %lu %lu, should be at least %lu!\n", node->name, (ulong) size_high, (ulong) size_low, (ulong) (4 * UNIV_PAGE_SIZE)); From fcd09022662a2d1f7c393fac3a8d4938edeb98f4 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Jan 2005 23:47:44 +0200 Subject: [PATCH 29/62] log0recv.c: Remove superfluous fprintf about log record application in InnoDB startup innobase/log/log0recv.c: Remove superfluous fprintf about log record application in InnoDB startup --- innobase/log/log0recv.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/innobase/log/log0recv.c b/innobase/log/log0recv.c index 35dc9a06020..40a7deee604 100644 --- a/innobase/log/log0recv.c +++ b/innobase/log/log0recv.c @@ -2897,11 +2897,6 @@ recv_recovery_from_checkpoint_finish(void) int i; os_thread_id_t recovery_thread_id; - /* Rollback the uncommitted transactions which have no user session */ - - fprintf(stderr, - "InnoDB: Starting to apply log records to the database...\n"); - /* Apply the hashed log records to the respective file pages */ if (srv_force_recovery < SRV_FORCE_NO_LOG_REDO) { @@ -2938,6 +2933,9 @@ recv_recovery_from_checkpoint_finish(void) recv_sys_free(); #endif if (srv_force_recovery < SRV_FORCE_NO_TRX_UNDO) { + /* Rollback the uncommitted transactions which have no user + session */ + os_thread_create(trx_rollback_or_clean_all_without_sess, (void *)&i, &recovery_thread_id); } From c695ccd27e753fe9ed67dc28443de7639203a4bc Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Jan 2005 04:45:22 +0200 Subject: [PATCH 30/62] fil0fil.c: Fix a race condition that could cause the assertion space->n_pending_flushes == 0 to fail in fil0fil.c, in fil_space_free(), in DROP TABLE or in ALTER TABLE innobase/fil/fil0fil.c: Fix a race condition that could cause the assertion space->n_pending_flushes == 0 to fail in fil0fil.c, in fil_space_free() --- innobase/fil/fil0fil.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c index ea34b6ffd93..5f71c00aea6 100644 --- a/innobase/fil/fil0fil.c +++ b/innobase/fil/fil0fil.c @@ -4139,7 +4139,8 @@ fil_flush_file_spaces( space = UT_LIST_GET_FIRST(system->space_list); while (space) { - if (space->purpose == purpose) { + if (space->purpose == purpose && !space->is_being_deleted) { + space->n_pending_flushes++; /* prevent dropping of the space while we are flushing */ From 25c2d1adb09a3dd521a110013ab03eac3e1fc01a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Jan 2005 02:40:27 -0800 Subject: [PATCH 31/62] select_found.result, select_found.test: Added a test case for bug #7945. sql_select.cc: Fixed bug #7945. If DISTINCT is used only with constants in a query with GROUP BY, we can apply an optimization that set LIMIT to 1 only in the case when there is no SQL_CALC_FOUND_ROWS. sql/sql_select.cc: Fixed bug #7945. If DISTINCT is used only with constants in a query with GROUP BY, we can apply an optimization that set LIMIT to 1 only in the case when there is no SQL_CALC_FOUND_ROWS. mysql-test/t/select_found.test: Added a test case for bug #7945. mysql-test/r/select_found.result: Added a test case for bug #7945. --- mysql-test/r/select_found.result | 8 ++++++++ mysql-test/t/select_found.test | 9 +++++++++ sql/sql_select.cc | 13 ++++++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result index 444124bcd67..11629addba4 100644 --- a/mysql-test/r/select_found.result +++ b/mysql-test/r/select_found.result @@ -223,3 +223,11 @@ SELECT FOUND_ROWS(); FOUND_ROWS() 0 DROP TABLE t1; +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,2), (1,3), (1,4), (1,5); +SELECT SQL_CALC_FOUND_ROWS DISTINCT 'a' FROM t1 GROUP BY b LIMIT 2; +a +a +SELECT FOUND_ROWS(); +FOUND_ROWS() +1 diff --git a/mysql-test/t/select_found.test b/mysql-test/t/select_found.test index 7599277a867..997cadc2992 100644 --- a/mysql-test/t/select_found.test +++ b/mysql-test/t/select_found.test @@ -146,3 +146,12 @@ INSERT INTO t1 VALUES (0), (0), (1), (2); SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a = 0 GROUP BY a HAVING a > 10; SELECT FOUND_ROWS(); DROP TABLE t1; + +# +# Bug #7945: group by + distinct with constant expression + limit +# + +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,2), (1,3), (1,4), (1,5); +SELECT SQL_CALC_FOUND_ROWS DISTINCT 'a' FROM t1 GROUP BY b LIMIT 2; +SELECT FOUND_ROWS(); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index eda4ce73186..468cdf05d36 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2114,9 +2114,15 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, x = used key parts (1 <= x <= c) */ double rec_per_key; +#if 0 if (!(rec_per_key=(double) keyinfo->rec_per_key[keyinfo->key_parts-1])) rec_per_key=(double) s->records/rec+1; +#else + rec_per_key= keyinfo->rec_per_key[keyinfo->key_parts-1] ? + (double) keyinfo->rec_per_key[keyinfo->key_parts-1] : + (double) s->records/rec+1; +#endif if (!s->records) tmp=0; @@ -6276,13 +6282,14 @@ remove_duplicates(JOIN *join, TABLE *entry,List &fields, Item *having) field_count++; } - if (!field_count) - { // only const items + if (!field_count && !(join->select_options & OPTION_FOUND_ROWS)) + { // only const items with no OPTION_FOUND_ROWS join->thd->select_limit=1; // Only send first row DBUG_RETURN(0); } Field **first_field=entry->field+entry->fields - field_count; - offset=entry->field[entry->fields - field_count]->offset(); + offset= field_count ? + entry->field[entry->fields - field_count]->offset() : 0; reclength=entry->reclength-offset; free_io_cache(entry); // Safety From fdedd0fc5b75c98d3fb8a84448e14942309445d4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 23 Jan 2005 12:12:50 +0100 Subject: [PATCH 32/62] backported from 5.0 extra option to ndb_waiter --- ndb/tools/waiter.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/ndb/tools/waiter.cpp b/ndb/tools/waiter.cpp index 4b86de36514..dfdb11524e3 100644 --- a/ndb/tools/waiter.cpp +++ b/ndb/tools/waiter.cpp @@ -31,11 +31,13 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status, unsigned int _timeout); enum ndb_waiter_options { - NDB_STD_OPTS_OPTIONS + NDB_STD_OPTS_OPTIONS, + OPT_WAIT_STATUS_NOT_STARTED }; NDB_STD_OPTS_VARS; static int _no_contact = 0; +static int _not_started = 0; static int _timeout = 120; static struct my_option my_long_options[] = { @@ -43,6 +45,9 @@ static struct my_option my_long_options[] = { "no-contact", 'n', "Wait for cluster no contact", (gptr*) &_no_contact, (gptr*) &_no_contact, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, + { "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started", + (gptr*) &_not_started, (gptr*) &_not_started, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "timeout", 't', "Timeout to wait", (gptr*) &_timeout, (gptr*) &_timeout, 0, GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 }, @@ -91,12 +96,22 @@ int main(int argc, char** argv){ if (_hostName == 0) _hostName= opt_connect_str; - if (_no_contact) { - if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_NO_CONTACT, _timeout) != 0) - return NDBT_ProgramExit(NDBT_FAILED); - } else if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_STARTED, _timeout) != 0) - return NDBT_ProgramExit(NDBT_FAILED); + enum ndb_mgm_node_status wait_status; + if (_no_contact) + { + wait_status= NDB_MGM_NODE_STATUS_NO_CONTACT; + } + else if (_not_started) + { + wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED; + } + else + { + wait_status= NDB_MGM_NODE_STATUS_STARTED; + } + if (waitClusterStatus(_hostName, wait_status, _timeout) != 0) + return NDBT_ProgramExit(NDBT_FAILED); return NDBT_ProgramExit(NDBT_OK); } From be3b13749e9861d9afb60dcd82b3192e439466c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 23 Jan 2005 20:13:42 +0100 Subject: [PATCH 33/62] ndb - Add includes to test prg as memcpy is introduced in NdbRecAttr ndb/test/ndbapi/flexAsynch.cpp: Add includes as memcpy is introduced in NdbRecAttr ndb/test/ndbapi/flexBench.cpp: Add includes as memcpy is introduced in NdbRecAttr ndb/test/ndbapi/flexHammer.cpp: Add includes as memcpy is introduced in NdbRecAttr ndb/test/ndbapi/slow_select.cpp: Add includes as memcpy is introduced in NdbRecAttr ndb/test/src/HugoCalculator.cpp: Add includes as memcpy is introduced in NdbRecAttr --- ndb/test/ndbapi/flexAsynch.cpp | 1 + ndb/test/ndbapi/flexBench.cpp | 1 + ndb/test/ndbapi/flexHammer.cpp | 1 + ndb/test/ndbapi/slow_select.cpp | 1 + ndb/test/src/HugoCalculator.cpp | 1 + 5 files changed, 5 insertions(+) diff --git a/ndb/test/ndbapi/flexAsynch.cpp b/ndb/test/ndbapi/flexAsynch.cpp index fc50cc99acf..d840993470c 100644 --- a/ndb/test/ndbapi/flexAsynch.cpp +++ b/ndb/test/ndbapi/flexAsynch.cpp @@ -16,6 +16,7 @@ +#include #include "NdbApi.hpp" #include #include diff --git a/ndb/test/ndbapi/flexBench.cpp b/ndb/test/ndbapi/flexBench.cpp index 71ceb468a63..728188ab28d 100644 --- a/ndb/test/ndbapi/flexBench.cpp +++ b/ndb/test/ndbapi/flexBench.cpp @@ -49,6 +49,7 @@ Arguments: * *************************************************** */ +#include #include "NdbApi.hpp" #include diff --git a/ndb/test/ndbapi/flexHammer.cpp b/ndb/test/ndbapi/flexHammer.cpp index aa783d00d20..49629dac875 100644 --- a/ndb/test/ndbapi/flexHammer.cpp +++ b/ndb/test/ndbapi/flexHammer.cpp @@ -47,6 +47,7 @@ Revision history: * *************************************************** */ +#include #include #include diff --git a/ndb/test/ndbapi/slow_select.cpp b/ndb/test/ndbapi/slow_select.cpp index 3febae2c8eb..8d615fa5771 100644 --- a/ndb/test/ndbapi/slow_select.cpp +++ b/ndb/test/ndbapi/slow_select.cpp @@ -1,4 +1,5 @@ +#include #include #include #include diff --git a/ndb/test/src/HugoCalculator.cpp b/ndb/test/src/HugoCalculator.cpp index 2fee787bbed..44edb34295a 100644 --- a/ndb/test/src/HugoCalculator.cpp +++ b/ndb/test/src/HugoCalculator.cpp @@ -14,6 +14,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include #include "HugoCalculator.hpp" #include #include From 99ef8f44d6ee3c91427cc91bc67b9c88ecc060b8 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 10:03:00 +0100 Subject: [PATCH 34/62] use select for sleep instead of nanosleep for portability reasons added make of mgmapi_logevent_example ndb/examples/Makefile: added make of mgmapi_logevent_example ndb/examples/ndbapi_async_example/ndbapi_async.cpp: use select for sleep instead of nanosleep for portability reasons ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp: use select for sleep instead of nanosleep for portability reasons --- ndb/examples/Makefile | 3 ++- ndb/examples/ndbapi_async_example/ndbapi_async.cpp | 11 +++++------ ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp | 11 +++++------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/ndb/examples/Makefile b/ndb/examples/Makefile index 87a821773ec..965dc3ec29f 100644 --- a/ndb/examples/Makefile +++ b/ndb/examples/Makefile @@ -4,7 +4,8 @@ BIN_DIRS := ndbapi_simple_example \ ndbapi_retries_example \ ndbapi_simple_index_example \ ndbapi_event_example \ - ndbapi_scan_example + ndbapi_scan_example \ + mgmapi_logevent_example bins: $(patsubst %, _bins_%, $(BIN_DIRS)) diff --git a/ndb/examples/ndbapi_async_example/ndbapi_async.cpp b/ndb/examples/ndbapi_async_example/ndbapi_async.cpp index 16731411c76..aa745f4d28d 100644 --- a/ndb/examples/ndbapi_async_example/ndbapi_async.cpp +++ b/ndb/examples/ndbapi_async_example/ndbapi_async.cpp @@ -57,16 +57,15 @@ /** * Helper sleep function */ -int +static void milliSleep(int milliseconds){ - int result = 0; - struct timespec sleeptime; + struct timeval sleeptime; sleeptime.tv_sec = milliseconds / 1000; - sleeptime.tv_nsec = (milliseconds - (sleeptime.tv_sec * 1000)) * 1000000; - result = nanosleep(&sleeptime, NULL); - return result; + sleeptime.tv_usec = (milliseconds - (sleeptime.tv_sec * 1000)) * 1000000; + select(0, 0, 0, 0, &sleeptime); } + /** * error printout macro */ diff --git a/ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp b/ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp index bb19eaaf1d6..f0dc74bf3f5 100644 --- a/ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp +++ b/ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp @@ -72,18 +72,17 @@ #include // Used for cout #include +#include /** * Helper sleep function */ -int +static void milliSleep(int milliseconds){ - int result = 0; - struct timespec sleeptime; + struct timeval sleeptime; sleeptime.tv_sec = milliseconds / 1000; - sleeptime.tv_nsec = (milliseconds - (sleeptime.tv_sec * 1000)) * 1000000; - result = nanosleep(&sleeptime, NULL); - return result; + sleeptime.tv_usec = (milliseconds - (sleeptime.tv_sec * 1000)) * 1000000; + select(0, 0, 0, 0, &sleeptime); } From 2f196ec77177209edc308b715e6fd61b119647ce Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 10:33:39 +0100 Subject: [PATCH 35/62] remmoved inline in NdbRecAttr methods including memcpy --- ndb/include/ndbapi/NdbRecAttr.hpp | 36 ------------------------------- ndb/src/ndbapi/NdbRecAttr.cpp | 32 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/ndb/include/ndbapi/NdbRecAttr.hpp b/ndb/include/ndbapi/NdbRecAttr.hpp index 29eab64a84f..05635a99385 100644 --- a/ndb/include/ndbapi/NdbRecAttr.hpp +++ b/ndb/include/ndbapi/NdbRecAttr.hpp @@ -300,15 +300,6 @@ NdbRecAttr::arraySize() const return theArraySize; } -inline -Int64 -NdbRecAttr::int64_value() const -{ - Int64 val; - memcpy(&val,theRef,8); - return val; -} - inline Int32 NdbRecAttr::int32_value() const @@ -330,15 +321,6 @@ NdbRecAttr::char_value() const return *(char*)theRef; } -inline -Uint64 -NdbRecAttr::u_64_value() const -{ - Uint64 val; - memcpy(&val,theRef,8); - return val; -} - inline Uint32 NdbRecAttr::u_32_value() const @@ -360,24 +342,6 @@ NdbRecAttr::u_char_value() const return *(Uint8*)theRef; } -inline -float -NdbRecAttr::float_value() const -{ - float val; - memcpy(&val,theRef,sizeof(val)); - return val; -} - -inline -double -NdbRecAttr::double_value() const -{ - double val; - memcpy(&val,theRef,sizeof(val)); - return val; -} - inline void NdbRecAttr::release() diff --git a/ndb/src/ndbapi/NdbRecAttr.cpp b/ndb/src/ndbapi/NdbRecAttr.cpp index bcd91292fcd..f2427fb32e8 100644 --- a/ndb/src/ndbapi/NdbRecAttr.cpp +++ b/ndb/src/ndbapi/NdbRecAttr.cpp @@ -245,3 +245,35 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) return out; } + +Int64 +NdbRecAttr::int64_value() const +{ + Int64 val; + memcpy(&val,theRef,8); + return val; +} + +Uint64 +NdbRecAttr::u_64_value() const +{ + Uint64 val; + memcpy(&val,theRef,8); + return val; +} + +float +NdbRecAttr::float_value() const +{ + float val; + memcpy(&val,theRef,sizeof(val)); + return val; +} + +double +NdbRecAttr::double_value() const +{ + double val; + memcpy(&val,theRef,sizeof(val)); + return val; +} From 343e9bbd34ecd89deb7d28214e23171894b8b2a0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 10:47:51 +0100 Subject: [PATCH 36/62] mysql-test-run.sh: backported access to ndb_mgm from 5.0 mysql-test/mysql-test-run.sh: backported access to ndb_mgm from 5.0 --- mysql-test/mysql-test-run.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 722da516d9b..5c4fe0577a2 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -537,6 +537,7 @@ if [ x$SOURCE_DIST = x1 ] ; then INSTALL_DB="./install_test_db" MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$BASEDIR/ndb/tools" + NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm" else if test -x "$BASEDIR/libexec/mysqld" then @@ -558,6 +559,7 @@ else INSTALL_DB="./install_test_db --bin" MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$CLIENT_BINDIR" + NDB_MGM="$CLIENT_BINDIR/ndb_mgm" if test -d "$BASEDIR/share/mysql/english" then LANGUAGE="$BASEDIR/share/mysql/english/" @@ -607,6 +609,7 @@ MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --u export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR export NDB_TOOLS_DIR +export NDB_MGM MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \ From 8827dbd4eb4aaaab769b4cc456319b24a1200d70 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 13:06:27 +0100 Subject: [PATCH 37/62] ndb_restore.result, mysql-test-run.sh: added ndb_restore test ndb_restore.result, ndb_restore.test: new file mysql-test/mysql-test-run.sh: added ndb_restore test mysql-test/r/ndb_restore.result: added ndb_restore test --- mysql-test/mysql-test-run.sh | 2 + mysql-test/r/ndb_restore.result | 249 ++++++++++++++++++++++++++++++++ mysql-test/t/ndb_restore.test | 209 +++++++++++++++++++++++++++ 3 files changed, 460 insertions(+) create mode 100644 mysql-test/r/ndb_restore.result create mode 100644 mysql-test/t/ndb_restore.test diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 5c4fe0577a2..1e1e288b198 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -468,6 +468,7 @@ export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MA NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2` NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgmd-extra-opts=\"$NDB_MGMD_EXTRA_OPTS\" --ndbd-extra-opts=\"$NDBD_EXTRA_OPTS\"" +NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT if [ x$SOURCE_DIST = x1 ] ; then MY_BASEDIR=$MYSQL_TEST_DIR @@ -610,6 +611,7 @@ export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR export NDB_TOOLS_DIR export NDB_MGM +export NDB_BACKUP_DIR MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \ diff --git a/mysql-test/r/ndb_restore.result b/mysql-test/r/ndb_restore.result new file mode 100644 index 00000000000..7a81e8cd802 --- /dev/null +++ b/mysql-test/r/ndb_restore.result @@ -0,0 +1,249 @@ +use test; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; +CREATE TABLE `t1` ( +`capgoaledatta` smallint(5) unsigned NOT NULL auto_increment, +`goaledatta` char(2) NOT NULL default '', +`maturegarbagefa` varchar(32) NOT NULL default '', +PRIMARY KEY (`capgoaledatta`,`goaledatta`,`maturegarbagefa`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t1` VALUES (2,'3','q3plus.qt'),(4,'4','q3plus.qt'),(1,'3','q3.net'),(3,'4','q3.net'),(3,'20','threetrees.qt'); +CREATE TABLE `t2` ( +`capgotod` smallint(5) unsigned NOT NULL auto_increment, +`gotod` smallint(5) unsigned NOT NULL default '0', +`goaledatta` char(2) default NULL, +`maturegarbagefa` varchar(32) default NULL, +`descrpooppo` varchar(64) default NULL, +`svcutonsa` varchar(64) NOT NULL default '', +PRIMARY KEY (`capgotod`), +KEY `i_quadaddsvr` (`gotod`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t2` VALUES (5,4,'','q3.net','addavp:MK_CASELECTOR=1','postorod rattoaa'),(2,1,'4','','addavp:MK_BRANDTAD=345','REDS Brandtad'),(3,2,'4','q3.net','execorder','fixedRatediPO REDS'),(1,1,'3','','addavp:MK_BRANDTAD=123','TEST Brandtad'),(6,5,'','told.q3.net','addavp:MK_BRANDTAD=123','Brandtad Toldzone'),(4,3,'3','q3.net','addavp:MK_POOLHINT=2','ratedi PO TEST'); +CREATE TABLE `t3` ( +`CapGoaledatta` smallint(5) unsigned NOT NULL default '0', +`capgotod` smallint(5) unsigned NOT NULL default '0', +PRIMARY KEY (`capgotod`,`CapGoaledatta`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t3` VALUES (5,3),(2,4),(5,4),(1,3); +CREATE TABLE `t4` ( +`capfa` bigint(20) unsigned NOT NULL auto_increment, +`realm` varchar(32) NOT NULL default '', +`authpwchap` varchar(32) default NULL, +`fa` varchar(32) NOT NULL default '', +`payyingatta` tinyint(4) NOT NULL default '0', +`status` char(1) default NULL, +PRIMARY KEY (`fa`,`realm`), +KEY `capfa` (`capfa`), +KEY `i_quadentity` (`fa`,`realm`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t4` VALUES (18,'john.smith','q3.net','dessjohn.smith',0,NULL),(21,'quad_katt_with_brandtad','q3.net','acne',0,NULL),(22,'quad_katt_carattoaa','q3.net','acne',0,NULL),(26,'436462612809','sqasdt.q3.net','N/A',0,'6'),(19,'john','smith.qt','dessjohn',0,NULL),(33,'436643196120','sqasdt.q3.net','N/A',1,'6'),(28,'436642900019','sqasdt.q3.net','N/A',0,'6'),(30,'436462900209','sqasdt.q3.net','N/A',0,'6'),(16,'436640006666','sqasdt.q3.net','',0,NULL),(19,'dette','el-redun.com','dessdette',0,NULL),(12,'quad_kattPP','q3.net','acne',2,NULL),(14,'436640008888','sqasdt.q3.net','',0,NULL),(29,'463624900028','sqasdt.q3.net','N/A',0,'6'),(15,'436640099099','sqasdt.q3.net','',0,NULL),(13,'pap','q3plus.qt','acne',1,NULL),(19,'436642612091','sqasdt.q3.net','N/A',0,'6'),(12,'quad_katt','q3.net','acne',0,NULL),(11,'quad_kattVK','q3.net','acne',1,NULL),(32,'463641969502','sqasdt.q3.net','N/A',1,'6'),(20,'joe','q3.net','joedesswd',0,NULL),(29,'436642900034','sqasdt.q3.net','N/A',0,'6'),(25,'contind','armerde.qt','acne',1,NULL); +CREATE TABLE `t5` ( +`capfa` bigint(20) unsigned NOT NULL default '0', +`gotod` smallint(5) unsigned NOT NULL default '0', +`orderutonsa` varchar(64) NOT NULL default '', +PRIMARY KEY (`capfa`,`gotod`,`orderutonsa`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t5` VALUES (21,2,''),(21,1,''),(22,4,''); +CREATE TABLE `t6` ( +`capfa_parent` bigint(20) unsigned NOT NULL default '0', +`capfa_child` bigint(20) unsigned NOT NULL default '0', +`relatta` smallint(5) unsigned NOT NULL default '0', +PRIMARY KEY (`capfa_child`,`capfa_parent`,`relatta`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t6` VALUES (15,16,0),(19,20,0),(18326932092909551615,30,0),(26,29,0),(18326932092909551615,29,0),(19,18,0),(26,28,0),(12,14,0); +CREATE TABLE `t7` ( +`dardpo` char(15) NOT NULL default '', +`dardtestard` tinyint(3) unsigned NOT NULL default '0', +`FastFA` char(5) NOT NULL default '', +`FastCode` char(6) NOT NULL default '', +`Fastca` char(1) NOT NULL default '', +`Fastmag` char(1) NOT NULL default '', +`Beareratta` char(2) NOT NULL default '', +PRIMARY KEY (`dardpo`,`dardtestard`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t7` VALUES ('2.6.2.4',24,'CECHP','54545','0','0','5'),('2.2.5.4',26,'CANFA','33223','1','1','4'),('4.3.2.4',28,'ITALD','54222','1','0','5'),('129..0.0.eins',28,'G','99999','1','1','5'),('1.1.1.1',24,'AUTPT','32323','0','1','3'); +CREATE TABLE `t8` ( +`kattjame` varchar(32) NOT NULL default '', +`realm` varchar(32) NOT NULL default '', +`realm_entered` varchar(32) NOT NULL default '', +`maturegarbagefa` varchar(32) NOT NULL default '', +`hunderaaarbagefa_parent` varchar(32) NOT NULL default '', +`kattjame_entered` varchar(32) NOT NULL default '', +`hunderaaarbagefa` varchar(32) NOT NULL default '', +`gest` varchar(16) default NULL, +`hassetino` varchar(16) NOT NULL default '', +`aaaproxysessfa` varchar(255) default NULL, +`autologonallowed` char(1) default NULL, +`squardporoot` varchar(15) NOT NULL default '', +`naspo` varchar(15) default NULL, +`beareratta` char(2) default NULL, +`fastCode` varchar(6) default NULL, +`fastFA` varchar(5) default NULL, +`fastca` char(1) default NULL, +`fastmag` char(1) default NULL, +`lastupdate` datetime default NULL, +`hassetistart` datetime NOT NULL default '0000-00-00 00:00:00', +`accthassetitime` int(10) unsigned default NULL, +`acctoutputoctets` bigint(20) unsigned default NULL, +`acctinputoctets` bigint(20) unsigned default NULL, +PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`), +KEY `squardporoot` (`squardporoot`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t8` VALUES ('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643196120','436643196929','8956234534568968','5524595699','uxasmt21.net.acne.qt/481889229462692422','','1.1.1.1','2.2.4.6','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565),('4545435545','john','q3.net','q3.net','acne.li','436643196120','436643196929','45345234568968','995696699','uxasmt21.net.acne.qt/481889229462692423','','1.1.1.1','2.2.9.8','2','86989','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8821923,169,3565),('versteckter_q3net_katt','joe','q3.net','elredun.com','q3.net','436643196120','436643196939','91341234568968','695595699','uxasmt21.net.acne.qt/481889229462692421','','1.1.1.1','2.5.2.5','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',1923123,9569,6565); +CREATE TABLE `t9` ( +`kattjame` varchar(32) NOT NULL default '', +`kattjame_entered` varchar(32) NOT NULL default '', +`realm` varchar(32) NOT NULL default '', +`realm_entered` varchar(32) NOT NULL default '', +`maturegarbagefa` varchar(32) NOT NULL default '', +`hunderaaarbagefa` varchar(32) NOT NULL default '', +`hunderaaarbagefa_parent` varchar(32) NOT NULL default '', +`gest` varchar(16) default NULL, +`hassetino` varchar(16) NOT NULL default '', +`squardporoot` varchar(15) NOT NULL default '', +`naspo` varchar(15) default NULL, +`beareratta` char(2) default NULL, +`fastCode` varchar(6) default NULL, +`fastFA` varchar(5) default NULL, +`fastca` char(1) default NULL, +`fastmag` char(1) default NULL, +`lastupdate` datetime default NULL, +`hassetistart` datetime NOT NULL default '0000-00-00 00:00:00', +`accthassetitime` int(10) unsigned default NULL, +`actcoutpuocttets` bigint(20) unsigned default NULL, +`actinputocctets` bigint(20) unsigned default NULL, +`terminateraste` tinyint(3) unsigned default NULL, +PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t9` VALUES ('3g4jh8gar2t','joe','q3.net','elredun.com','q3.net','436643316120','436643316939','91341234568968','695595699','1.1.1.1','2.2.6.2','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',3123123,9569,6565,1),('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643316120','436643316939','8956234534568968','5254595969','1.1.1.1','8.6.2.2','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565,2),('4545435545','john','q3.net','q3.net','acne.li','436643316120','436643316939','45345234568968','995696699','1.1.1.1','2.9.9.2','2','86998','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8823123,169,3565,3); +create table t1_c engine=myisam as select * from t1; +create table t2_c engine=myisam as select * from t2; +create table t3_c engine=myisam as select * from t3; +create table t4_c engine=myisam as select * from t4; +create table t5_c engine=myisam as select * from t5; +create table t6_c engine=myisam as select * from t6; +create table t7_c engine=myisam as select * from t7; +create table t8_c engine=myisam as select * from t8; +create table t9_c engine=myisam as select * from t9; +drop table t1,t2,t3,t4,t5,t6,t7,t8,t9; +show tables; +Tables_in_test +t1_c +t2_c +t3_c +t4_c +t5_c +t6_c +t7_c +t8_c +t9_c +t9 +t4 +t1 +t2 +t7 +t8 +t5 +t6 +t3 +select count(*) from t1; +count(*) +5 +select count(*) from t1_c; +count(*) +5 +select count(*) +from (select * from t1 union +select * from t1_c) a; +count(*) +5 +select count(*) from t2; +count(*) +6 +select count(*) from t2_c; +count(*) +6 +select count(*) +from (select * from t2 union +select * from t2_c) a; +count(*) +6 +select count(*) from t3; +count(*) +4 +select count(*) from t3_c; +count(*) +4 +select count(*) +from (select * from t3 union +select * from t3_c) a; +count(*) +4 +select count(*) from t4; +count(*) +22 +select count(*) from t4_c; +count(*) +22 +select count(*) +from (select * from t4 union +select * from t4_c) a; +count(*) +22 +select count(*) from t5; +count(*) +3 +select count(*) from t5_c; +count(*) +3 +select count(*) +from (select * from t5 union +select * from t5_c) a; +count(*) +3 +select count(*) from t6; +count(*) +8 +select count(*) from t6_c; +count(*) +8 +select count(*) +from (select * from t6 union +select * from t6_c) a; +count(*) +8 +select count(*) from t7; +count(*) +5 +select count(*) from t7_c; +count(*) +5 +select count(*) +from (select * from t7 union +select * from t7_c) a; +count(*) +5 +select count(*) from t8; +count(*) +3 +select count(*) from t8_c; +count(*) +3 +select count(*) +from (select * from t8 union +select * from t8_c) a; +count(*) +3 +select count(*) from t9; +count(*) +3 +select count(*) from t9_c; +count(*) +3 +select count(*) +from (select * from t9 union +select * from t9_c) a; +count(*) +3 +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; diff --git a/mysql-test/t/ndb_restore.test b/mysql-test/t/ndb_restore.test new file mode 100644 index 00000000000..79a4f8a06d3 --- /dev/null +++ b/mysql-test/t/ndb_restore.test @@ -0,0 +1,209 @@ +-- source include/have_ndb.inc + +--disable_warnings +use test; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; +--enable_warnings + +CREATE TABLE `t1` ( + `capgoaledatta` smallint(5) unsigned NOT NULL auto_increment, + `goaledatta` char(2) NOT NULL default '', + `maturegarbagefa` varchar(32) NOT NULL default '', + PRIMARY KEY (`capgoaledatta`,`goaledatta`,`maturegarbagefa`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t1` VALUES (2,'3','q3plus.qt'),(4,'4','q3plus.qt'),(1,'3','q3.net'),(3,'4','q3.net'),(3,'20','threetrees.qt'); + +CREATE TABLE `t2` ( + `capgotod` smallint(5) unsigned NOT NULL auto_increment, + `gotod` smallint(5) unsigned NOT NULL default '0', + `goaledatta` char(2) default NULL, + `maturegarbagefa` varchar(32) default NULL, + `descrpooppo` varchar(64) default NULL, + `svcutonsa` varchar(64) NOT NULL default '', + PRIMARY KEY (`capgotod`), + KEY `i_quadaddsvr` (`gotod`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t2` VALUES (5,4,'','q3.net','addavp:MK_CASELECTOR=1','postorod rattoaa'),(2,1,'4','','addavp:MK_BRANDTAD=345','REDS Brandtad'),(3,2,'4','q3.net','execorder','fixedRatediPO REDS'),(1,1,'3','','addavp:MK_BRANDTAD=123','TEST Brandtad'),(6,5,'','told.q3.net','addavp:MK_BRANDTAD=123','Brandtad Toldzone'),(4,3,'3','q3.net','addavp:MK_POOLHINT=2','ratedi PO TEST'); + +CREATE TABLE `t3` ( + `CapGoaledatta` smallint(5) unsigned NOT NULL default '0', + `capgotod` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`capgotod`,`CapGoaledatta`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t3` VALUES (5,3),(2,4),(5,4),(1,3); + +CREATE TABLE `t4` ( + `capfa` bigint(20) unsigned NOT NULL auto_increment, + `realm` varchar(32) NOT NULL default '', + `authpwchap` varchar(32) default NULL, + `fa` varchar(32) NOT NULL default '', + `payyingatta` tinyint(4) NOT NULL default '0', + `status` char(1) default NULL, + PRIMARY KEY (`fa`,`realm`), + KEY `capfa` (`capfa`), + KEY `i_quadentity` (`fa`,`realm`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t4` VALUES (18,'john.smith','q3.net','dessjohn.smith',0,NULL),(21,'quad_katt_with_brandtad','q3.net','acne',0,NULL),(22,'quad_katt_carattoaa','q3.net','acne',0,NULL),(26,'436462612809','sqasdt.q3.net','N/A',0,'6'),(19,'john','smith.qt','dessjohn',0,NULL),(33,'436643196120','sqasdt.q3.net','N/A',1,'6'),(28,'436642900019','sqasdt.q3.net','N/A',0,'6'),(30,'436462900209','sqasdt.q3.net','N/A',0,'6'),(16,'436640006666','sqasdt.q3.net','',0,NULL),(19,'dette','el-redun.com','dessdette',0,NULL),(12,'quad_kattPP','q3.net','acne',2,NULL),(14,'436640008888','sqasdt.q3.net','',0,NULL),(29,'463624900028','sqasdt.q3.net','N/A',0,'6'),(15,'436640099099','sqasdt.q3.net','',0,NULL),(13,'pap','q3plus.qt','acne',1,NULL),(19,'436642612091','sqasdt.q3.net','N/A',0,'6'),(12,'quad_katt','q3.net','acne',0,NULL),(11,'quad_kattVK','q3.net','acne',1,NULL),(32,'463641969502','sqasdt.q3.net','N/A',1,'6'),(20,'joe','q3.net','joedesswd',0,NULL),(29,'436642900034','sqasdt.q3.net','N/A',0,'6'),(25,'contind','armerde.qt','acne',1,NULL); + +CREATE TABLE `t5` ( + `capfa` bigint(20) unsigned NOT NULL default '0', + `gotod` smallint(5) unsigned NOT NULL default '0', + `orderutonsa` varchar(64) NOT NULL default '', + PRIMARY KEY (`capfa`,`gotod`,`orderutonsa`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t5` VALUES (21,2,''),(21,1,''),(22,4,''); + +CREATE TABLE `t6` ( + `capfa_parent` bigint(20) unsigned NOT NULL default '0', + `capfa_child` bigint(20) unsigned NOT NULL default '0', + `relatta` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`capfa_child`,`capfa_parent`,`relatta`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t6` VALUES (15,16,0),(19,20,0),(18326932092909551615,30,0),(26,29,0),(18326932092909551615,29,0),(19,18,0),(26,28,0),(12,14,0); + +CREATE TABLE `t7` ( + `dardpo` char(15) NOT NULL default '', + `dardtestard` tinyint(3) unsigned NOT NULL default '0', + `FastFA` char(5) NOT NULL default '', + `FastCode` char(6) NOT NULL default '', + `Fastca` char(1) NOT NULL default '', + `Fastmag` char(1) NOT NULL default '', + `Beareratta` char(2) NOT NULL default '', + PRIMARY KEY (`dardpo`,`dardtestard`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t7` VALUES ('2.6.2.4',24,'CECHP','54545','0','0','5'),('2.2.5.4',26,'CANFA','33223','1','1','4'),('4.3.2.4',28,'ITALD','54222','1','0','5'),('129..0.0.eins',28,'G','99999','1','1','5'),('1.1.1.1',24,'AUTPT','32323','0','1','3'); + +CREATE TABLE `t8` ( + `kattjame` varchar(32) NOT NULL default '', + `realm` varchar(32) NOT NULL default '', + `realm_entered` varchar(32) NOT NULL default '', + `maturegarbagefa` varchar(32) NOT NULL default '', + `hunderaaarbagefa_parent` varchar(32) NOT NULL default '', + `kattjame_entered` varchar(32) NOT NULL default '', + `hunderaaarbagefa` varchar(32) NOT NULL default '', + `gest` varchar(16) default NULL, + `hassetino` varchar(16) NOT NULL default '', + `aaaproxysessfa` varchar(255) default NULL, + `autologonallowed` char(1) default NULL, + `squardporoot` varchar(15) NOT NULL default '', + `naspo` varchar(15) default NULL, + `beareratta` char(2) default NULL, + `fastCode` varchar(6) default NULL, + `fastFA` varchar(5) default NULL, + `fastca` char(1) default NULL, + `fastmag` char(1) default NULL, + `lastupdate` datetime default NULL, + `hassetistart` datetime NOT NULL default '0000-00-00 00:00:00', + `accthassetitime` int(10) unsigned default NULL, + `acctoutputoctets` bigint(20) unsigned default NULL, + `acctinputoctets` bigint(20) unsigned default NULL, + PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`), + KEY `squardporoot` (`squardporoot`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t8` VALUES ('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643196120','436643196929','8956234534568968','5524595699','uxasmt21.net.acne.qt/481889229462692422','','1.1.1.1','2.2.4.6','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565),('4545435545','john','q3.net','q3.net','acne.li','436643196120','436643196929','45345234568968','995696699','uxasmt21.net.acne.qt/481889229462692423','','1.1.1.1','2.2.9.8','2','86989','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8821923,169,3565),('versteckter_q3net_katt','joe','q3.net','elredun.com','q3.net','436643196120','436643196939','91341234568968','695595699','uxasmt21.net.acne.qt/481889229462692421','','1.1.1.1','2.5.2.5','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',1923123,9569,6565); + +CREATE TABLE `t9` ( + `kattjame` varchar(32) NOT NULL default '', + `kattjame_entered` varchar(32) NOT NULL default '', + `realm` varchar(32) NOT NULL default '', + `realm_entered` varchar(32) NOT NULL default '', + `maturegarbagefa` varchar(32) NOT NULL default '', + `hunderaaarbagefa` varchar(32) NOT NULL default '', + `hunderaaarbagefa_parent` varchar(32) NOT NULL default '', + `gest` varchar(16) default NULL, + `hassetino` varchar(16) NOT NULL default '', + `squardporoot` varchar(15) NOT NULL default '', + `naspo` varchar(15) default NULL, + `beareratta` char(2) default NULL, + `fastCode` varchar(6) default NULL, + `fastFA` varchar(5) default NULL, + `fastca` char(1) default NULL, + `fastmag` char(1) default NULL, + `lastupdate` datetime default NULL, + `hassetistart` datetime NOT NULL default '0000-00-00 00:00:00', + `accthassetitime` int(10) unsigned default NULL, + `actcoutpuocttets` bigint(20) unsigned default NULL, + `actinputocctets` bigint(20) unsigned default NULL, + `terminateraste` tinyint(3) unsigned default NULL, + PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +INSERT INTO `t9` VALUES ('3g4jh8gar2t','joe','q3.net','elredun.com','q3.net','436643316120','436643316939','91341234568968','695595699','1.1.1.1','2.2.6.2','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',3123123,9569,6565,1),('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643316120','436643316939','8956234534568968','5254595969','1.1.1.1','8.6.2.2','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565,2),('4545435545','john','q3.net','q3.net','acne.li','436643316120','436643316939','45345234568968','995696699','1.1.1.1','2.9.9.2','2','86998','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8823123,169,3565,3); + +create table t1_c engine=myisam as select * from t1; +create table t2_c engine=myisam as select * from t2; +create table t3_c engine=myisam as select * from t3; +create table t4_c engine=myisam as select * from t4; +create table t5_c engine=myisam as select * from t5; +create table t6_c engine=myisam as select * from t6; +create table t7_c engine=myisam as select * from t7; +create table t8_c engine=myisam as select * from t8; +create table t9_c engine=myisam as select * from t9; + + +--exec $NDB_MGM --no-defaults -e "start backup" > /dev/null +drop table t1,t2,t3,t4,t5,t6,t7,t8,t9; +--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 1 -m -r --print --print_meta $NDB_BACKUP_DIR/BACKUP/BACKUP-1 > /tmp/ndb_restore.out +--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 2 -r --print --print_meta $NDB_BACKUP_DIR/BACKUP/BACKUP-1 > /tmp/ndb_restore.out + +show tables; + + +select count(*) from t1; +select count(*) from t1_c; +select count(*) + from (select * from t1 union + select * from t1_c) a; + +select count(*) from t2; +select count(*) from t2_c; +select count(*) + from (select * from t2 union + select * from t2_c) a; + +select count(*) from t3; +select count(*) from t3_c; +select count(*) + from (select * from t3 union + select * from t3_c) a; + +select count(*) from t4; +select count(*) from t4_c; +select count(*) + from (select * from t4 union + select * from t4_c) a; + +select count(*) from t5; +select count(*) from t5_c; +select count(*) + from (select * from t5 union + select * from t5_c) a; + +select count(*) from t6; +select count(*) from t6_c; +select count(*) + from (select * from t6 union + select * from t6_c) a; + +select count(*) from t7; +select count(*) from t7_c; +select count(*) + from (select * from t7 union + select * from t7_c) a; + +select count(*) from t8; +select count(*) from t8_c; +select count(*) + from (select * from t8 union + select * from t8_c) a; + +select count(*) from t9; +select count(*) from t9_c; +select count(*) + from (select * from t9 union + select * from t9_c) a; + +--disable_warnings +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; +--enable_warnings From 8bdb500105f97e3007e652f73d99c373d38f2aad Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 15:48:25 +0100 Subject: [PATCH 38/62] fixes/cleanups according to Coverity report --- client/mysql.cc | 13 +++------- client/mysqlbinlog.cc | 6 +---- client/mysqldump.c | 5 ++-- client/mysqltest.c | 5 ++-- isam/sort.c | 3 +++ myisam/mi_packrec.c | 7 ----- myisam/rt_index.c | 7 +++-- myisam/sort.c | 3 +++ mysys/mf_keycache.c | 1 + mysys/thr_alarm.c | 2 +- sql/item.cc | 24 +++++------------- sql/item_create.cc | 13 ++++------ sql/item_strfunc.cc | 3 +++ sql/item_timefunc.cc | 23 ++++++++++------- sql/set_var.cc | 4 +-- sql/slave.cc | 11 ++++---- sql/sql_acl.cc | 14 ++++++---- sql/sql_acl.h | 2 +- sql/sql_analyse.cc | 59 +++++++++++++++++++++++-------------------- sql/sql_base.cc | 18 ++++++------- sql/sql_cache.cc | 10 ++++---- sql/sql_db.cc | 22 ++++++++-------- sql/sql_lex.cc | 3 --- sql/sql_parse.cc | 29 ++++++++++----------- sql/sql_table.cc | 4 +-- sql/sql_update.cc | 9 +++---- sql/table.cc | 10 +++++--- sql/tztime.cc | 2 +- tests/client_test.c | 6 +++++ 29 files changed, 156 insertions(+), 162 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 480a0deb347..635973e946c 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1430,12 +1430,6 @@ static void build_completion_hash(bool rehash, bool write_info) if (status.batch || quick || !current_db) DBUG_VOID_RETURN; // We don't need completion in batches - if (tables) - { - mysql_free_result(tables); - tables=0; - } - /* hash SQL commands */ while (cmd->name) { add_word(&ht,(char*) cmd->name); @@ -1681,8 +1675,8 @@ static int com_server_help(String *buffer __attribute__((unused)), else if (num_fields >= 2 && num_rows) { init_pager(); - char last_char; - + char last_char= 0; + int num_name= 0, num_cat= 0; LINT_INIT(num_name); LINT_INIT(num_cat); @@ -1693,7 +1687,6 @@ static int com_server_help(String *buffer __attribute__((unused)), put_info("To make a more specific request, please type 'help ',\nwhere is one of the following", INFO_INFO); num_name= 0; num_cat= 1; - last_char= '_'; } else if ((cur= mysql_fetch_row(result))) { @@ -1703,7 +1696,7 @@ static int com_server_help(String *buffer __attribute__((unused)), num_cat= 2; print_help_item(&cur,1,2,&last_char); } - + while ((cur= mysql_fetch_row(result))) print_help_item(&cur,num_name,num_cat,&last_char); tee_fprintf(PAGER, "\n"); diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index de53831c43d..7ddb01d9ec8 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -717,11 +717,7 @@ static int check_master_version(MYSQL* mysql) if (mysql_query(mysql, "SELECT VERSION()") || !(res = mysql_store_result(mysql))) - { - mysql_close(mysql); - die("Error checking master version: %s", - mysql_error(mysql)); - } + die("Error checking master version: %s", mysql_error(mysql)); if (!(row = mysql_fetch_row(res))) { mysql_free_result(res); diff --git a/client/mysqldump.c b/client/mysqldump.c index 7280bea43f3..00f5272e3d7 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2328,14 +2328,13 @@ static const char *check_if_ignore_table(const char *table_name) fprintf(stderr, "Error: Couldn't read status information for table %s (%s)\n", table_name, mysql_error(sock)); - if (res) - mysql_free_result(res); + mysql_free_result(res); return 0; /* assume table is ok */ } if (strcmp(row[1], (result= "MRG_MyISAM")) && strcmp(row[1], (result= "MRG_ISAM"))) result= 0; - mysql_free_result(res); + mysql_free_result(res); return result; } diff --git a/client/mysqltest.c b/client/mysqltest.c index abacd73d878..d81e199ab1f 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -715,9 +715,10 @@ VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw, die("Empty variable"); } length= (uint) (var_name - save_var_name); + if (length >= MAX_VAR_NAME) + die("Too long variable name: %s", save_var_name); - if (!(v = (VAR*) hash_search(&var_hash, save_var_name, length)) && - length < MAX_VAR_NAME) + if (!(v = (VAR*) hash_search(&var_hash, save_var_name, length))) { char buff[MAX_VAR_NAME+1]; strmake(buff, save_var_name, length); diff --git a/isam/sort.c b/isam/sort.c index d22b0e648a0..5d13f8085d2 100644 --- a/isam/sort.c +++ b/isam/sort.c @@ -122,7 +122,10 @@ uint sortbuff_size; MYF(0)))) break; else + { my_free((gptr) sort_keys,MYF(0)); + sort_keys= 0; + } } old_memavl=memavl; if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY) diff --git a/myisam/mi_packrec.c b/myisam/mi_packrec.c index a277c2ca9d1..1a71d43a7f1 100644 --- a/myisam/mi_packrec.c +++ b/myisam/mi_packrec.c @@ -182,21 +182,14 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys) my_malloc((length+OFFSET_TABLE_SIZE)*sizeof(uint16)+ (uint) (share->pack.header_length+7), MYF(MY_WME | MY_ZEROFILL)))) - { - my_free((gptr) share->decode_trees,MYF(0)); goto err1; - } tmp_buff=share->decode_tables+length; disk_cache=(byte*) (tmp_buff+OFFSET_TABLE_SIZE); if (my_read(file,disk_cache, (uint) (share->pack.header_length-sizeof(header)), MYF(MY_NABP))) - { - my_free((gptr) share->decode_trees,MYF(0)); - my_free((gptr) share->decode_tables,MYF(0)); goto err2; - } huff_tree_bits=max_bit(trees ? trees-1 : 0); init_bit_buffer(&bit_buff, (uchar*) disk_cache, diff --git a/myisam/rt_index.c b/myisam/rt_index.c index bdf5ee9c60f..97554dca4e6 100644 --- a/myisam/rt_index.c +++ b/myisam/rt_index.c @@ -948,15 +948,14 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) /* check for redundant root (not leaf, 1 child) and eliminate */ if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) goto err1; - if (!_mi_fetch_keypage(info, keyinfo, old_root, DFLT_INIT_HITS, + if (!_mi_fetch_keypage(info, keyinfo, old_root, DFLT_INIT_HITS, info->buff, 0)) goto err1; nod_flag = mi_test_if_nod(info->buff); page_size = mi_getint(info->buff); - if (nod_flag && (page_size == 2 + key_length + - (nod_flag ? nod_flag : info->s->base.rec_reflength))) + if (nod_flag && (page_size == 2 + key_length + nod_flag)) { - my_off_t new_root = _mi_kpos(nod_flag, + my_off_t new_root = _mi_kpos(nod_flag, rt_PAGE_FIRST_KEY(info->buff, nod_flag)); if (_mi_dispose(info, keyinfo, old_root, DFLT_INIT_HITS)) goto err1; diff --git a/myisam/sort.c b/myisam/sort.c index 39bde41e4c9..7c6efa9a05b 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -162,7 +162,10 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, { if (my_init_dynamic_array(&buffpek, sizeof(BUFFPEK), maxbuffer, maxbuffer/2)) + { my_free((gptr) sort_keys,MYF(0)); + sort_keys= 0; + } else break; } diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index 052d6c79ab9..c246e9b320c 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -352,6 +352,7 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, MYF(0)))) break; my_free_lock(keycache->block_mem, MYF(0)); + keycache->block_mem= 0; } if (blocks < 8) { diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c index caef1caaf3d..19611a6027a 100644 --- a/mysys/thr_alarm.c +++ b/mysys/thr_alarm.c @@ -248,7 +248,7 @@ void thr_end_alarm(thr_alarm_t *alarmed) if (alarm_data->malloced) my_free((gptr) alarm_data,MYF(0)); found++; -#ifndef DBUG_OFF +#ifdef DBUG_OFF break; #endif } diff --git a/sql/item.cc b/sql/item.cc index 92a15694e89..eda569378be 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1444,7 +1444,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) ¬_used)) != (Item **) not_found_item) { - if (*refer && (*refer)->fixed) // Avoid crash in case of error + if (refer && (*refer)->fixed) // Avoid crash in case of error { prev_subselect_item->used_tables_cache|= (*refer)->used_tables(); prev_subselect_item->const_item_cache&= (*refer)->const_item(); @@ -2057,7 +2057,6 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) if (!ref) { TABLE_LIST *where= 0, *table_list; - bool upward_lookup= 0; SELECT_LEX_UNIT *prev_unit= thd->lex->current_select->master_unit(); SELECT_LEX *sl= prev_unit->outer_select(); /* @@ -2078,7 +2077,6 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) { Field *tmp= (Field*) not_found_field; SELECT_LEX *last= 0; - upward_lookup= 1; /* We can't find table field in select list of current select, consequently we have to find it in outer subselect(s). @@ -2098,7 +2096,7 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) ¬_used)) != (Item **)not_found_item) { - if (*ref && (*ref)->fixed) // Avoid crash in case of error + if (ref && (*ref)->fixed) // Avoid crash in case of error { prev_subselect_item->used_tables_cache|= (*ref)->used_tables(); prev_subselect_item->const_item_cache&= (*ref)->const_item(); @@ -2142,20 +2140,10 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) return -1; if (ref == (Item **)not_found_item && tmp == not_found_field) { - if (upward_lookup) - { - // We can't say exactly what absend (table or field) - my_printf_error(ER_BAD_FIELD_ERROR, ER(ER_BAD_FIELD_ERROR), MYF(0), - full_name(), thd->where); - } - else - { - // Call to report error - find_item_in_list(this, - *(thd->lex->current_select->get_item_list()), - &counter, REPORT_ALL_ERRORS, ¬_used); - } - ref= 0; // Safety + // We can't say exactly what absend (table or field) + my_printf_error(ER_BAD_FIELD_ERROR, ER(ER_BAD_FIELD_ERROR), MYF(0), + full_name(), thd->where); + ref= 0; // Safety return 1; } if (tmp != not_found_field) diff --git a/sql/item_create.cc b/sql/item_create.cc index 800489a6a72..99db184e71f 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -365,22 +365,19 @@ Item *create_func_sin(Item* a) Item *create_func_sha(Item* a) { - return new Item_func_sha(a); + return new Item_func_sha(a); } - + Item *create_func_space(Item *a) { CHARSET_INFO *cs= current_thd->variables.collation_connection; Item *sp; - + if (cs->mbminlen > 1) { + uint dummy_errors; sp= new Item_string("",0,cs); - if (sp) - { - uint dummy_errors; - sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors); - } + sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors); } else { diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index f131d849d62..cd98fb62818 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2489,6 +2489,9 @@ String* Item_func_export_set::val_str(String* str) case 3: sep_buf.set(",", 1, default_charset()); sep = &sep_buf; + break; + default: + DBUG_ASSERT(0); // cannot happen } null_value=0; diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index f9c9d1f013d..39c88c8b0a3 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -2112,20 +2112,25 @@ void Item_char_typecast::print(String *str) String *Item_char_typecast::val_str(String *str) { DBUG_ASSERT(fixed == 1); - String *res, *res1; + String *res; uint32 length; - if (!charset_conversion && !(res= args[0]->val_str(str))) +#if 0 + if (!charset_conversion) { - null_value= 1; - return 0; + if (!(res= args[0]->val_str(str))) + { + null_value= 1; + return 0; + } } else +#endif { // Convert character set if differ uint dummy_errors; - if (!(res1= args[0]->val_str(&tmp_value)) || - str->copy(res1->ptr(), res1->length(), res1->charset(), + if (!(res= args[0]->val_str(&tmp_value)) || + str->copy(res->ptr(), res->length(), res->charset(), cast_cs, &dummy_errors)) { null_value= 1; @@ -2135,13 +2140,13 @@ String *Item_char_typecast::val_str(String *str) } res->set_charset(cast_cs); - + /* Cut the tail if cast with length and the result is longer than cast length, e.g. CAST('string' AS CHAR(1)) */ - if (cast_length >= 0 && + if (cast_length >= 0 && (res->length() > (length= (uint32) res->charpos(cast_length)))) { // Safe even if const arg if (!res->alloced_length()) @@ -2150,7 +2155,7 @@ String *Item_char_typecast::val_str(String *str) res= &str_value; } res->length((uint) length); - } + } null_value= 0; return res; } diff --git a/sql/set_var.cc b/sql/set_var.cc index e44ac742abe..3d21e6db069 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -2912,8 +2912,8 @@ int set_var_password::check(THD *thd) if (!user->host.str) user->host.str= (char*) thd->host_or_ip; /* Returns 1 as the function sends error to client */ - return check_change_password(thd, user->host.str, user->user.str, password) ? - 1 : 0; + return check_change_password(thd, user->host.str, user->user.str, + password, strlen(password)) ? 1 : 0; #else return 0; #endif diff --git a/sql/slave.cc b/sql/slave.cc index ef9caa5f5b5..75f51437d0c 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2422,18 +2422,19 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name, init_abort_pos_wait= abort_pos_wait; /* - We'll need to + We'll need to handle all possible log names comparisons (e.g. 999 vs 1000). - We use ulong for string->number conversion ; this is no + We use ulong for string->number conversion ; this is no stronger limitation than in find_uniq_filename in sql/log.cc */ ulong log_name_extension; char log_name_tmp[FN_REFLEN]; //make a char[] from String - char *end= strmake(log_name_tmp, log_name->ptr(), min(log_name->length(), - FN_REFLEN-1)); + + strmake(log_name_tmp, log_name->ptr(), min(log_name->length(), FN_REFLEN-1)); + char *p= fn_ext(log_name_tmp); char *p_end; - if (!*p || log_pos<0) + if (!*p || log_pos<0) { error= -2; //means improper arguments goto err; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 2c11d1c87ad..7c17a4ef275 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -438,7 +438,7 @@ void acl_free(bool end) SYNOPSIS acl_reload() - thd Thread handle + thd Thread handle (can be NULL) */ void acl_reload(THD *thd) @@ -1128,6 +1128,10 @@ bool acl_check_host(const char *host, const char *ip) thd THD host hostname for the user user user name + new_password new password + + NOTE: + new_password cannot be NULL RETURN VALUE 0 OK @@ -1135,7 +1139,7 @@ bool acl_check_host(const char *host, const char *ip) */ bool check_change_password(THD *thd, const char *host, const char *user, - char *new_password) + char *new_password, uint new_password_len) { if (!initialized) { @@ -1186,12 +1190,13 @@ bool check_change_password(THD *thd, const char *host, const char *user, bool change_password(THD *thd, const char *host, const char *user, char *new_password) { + uint new_password_len= strlen(new_password); DBUG_ENTER("change_password"); DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'", host,user,new_password)); DBUG_ASSERT(host != 0); // Ensured by parent - if (check_change_password(thd, host, user, new_password)) + if (check_change_password(thd, host, user, new_password, new_password_len)) DBUG_RETURN(1); VOID(pthread_mutex_lock(&acl_cache->lock)); @@ -1203,7 +1208,6 @@ bool change_password(THD *thd, const char *host, const char *user, DBUG_RETURN(1); } /* update loaded acl entry: */ - uint new_password_len= new_password ? strlen(new_password) : 0; set_user_salt(acl_user, new_password, new_password_len); if (update_user_table(thd, @@ -2697,7 +2701,7 @@ end: SYNOPSIS grant_reload() - thd Thread handler + thd Thread handler (can be NULL) NOTES Locked tables are checked by acl_init and doesn't have to be checked here diff --git a/sql/sql_acl.h b/sql/sql_acl.h index 68cb1476eb5..dc1b04c063a 100644 --- a/sql/sql_acl.h +++ b/sql/sql_acl.h @@ -143,7 +143,7 @@ int acl_getroot(THD *thd, USER_RESOURCES *mqh, const char *passwd, uint passwd_len); bool acl_check_host(const char *host, const char *ip); bool check_change_password(THD *thd, const char *host, const char *user, - char *password); + char *password, uint password_len); bool change_password(THD *thd, const char *host, const char *user, char *password); int mysql_grant(THD *thd, const char *db, List &user_list, diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 33ce62bc5cf..7ac9a0866df 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -70,6 +70,9 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result, field_info **f_info; DBUG_ENTER("proc_analyse_init"); + if (!pc) + DBUG_RETURN(0); + if (!(param = param->next)) { pc->max_tree_elements = MAX_TREE_ELEMENTS; @@ -81,33 +84,30 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result, if ((*param->item)->type() != Item::INT_ITEM || (*param->item)->val() < 0) { - delete pc; my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name); - DBUG_RETURN(0); + goto err; } pc->max_tree_elements = (uint) (*param->item)->val_int(); param = param->next; if (param->next) // no third parameter possible { my_error(ER_WRONG_PARAMCOUNT_TO_PROCEDURE, MYF(0), proc_name); - DBUG_RETURN(0); + goto err; } // second parameter if ((*param->item)->type() != Item::INT_ITEM || (*param->item)->val() < 0) { - delete pc; my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name); - DBUG_RETURN(0); + goto err; } pc->max_treemem = (uint) (*param->item)->val_int(); } else if ((*param->item)->type() != Item::INT_ITEM || (*param->item)->val() < 0) { - delete pc; my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name); - DBUG_RETURN(0); + goto err; } // if only one parameter was given, it will be the value of max_tree_elements else @@ -116,34 +116,39 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result, pc->max_treemem = MAX_TREEMEM; } - if (!pc || !(pc->f_info = (field_info**) - sql_alloc(sizeof(field_info*)*field_list.elements))) - DBUG_RETURN(0); + if (!(pc->f_info= + (field_info**)sql_alloc(sizeof(field_info*)*field_list.elements))) + goto err; pc->f_end = pc->f_info + field_list.elements; pc->fields = field_list; - List_iterator_fast it(pc->fields); - f_info = pc->f_info; - - Item *item; - while ((item = it++)) { - if (item->result_type() == INT_RESULT) + List_iterator_fast it(pc->fields); + f_info = pc->f_info; + + Item *item; + while ((item = it++)) { - // Check if fieldtype is ulonglong - if (item->type() == Item::FIELD_ITEM && - ((Item_field*) item)->field->type() == FIELD_TYPE_LONGLONG && - ((Field_longlong*) ((Item_field*) item)->field)->unsigned_flag) - *f_info++ = new field_ulonglong(item, pc); - else - *f_info++ = new field_longlong(item, pc); + if (item->result_type() == INT_RESULT) + { + // Check if fieldtype is ulonglong + if (item->type() == Item::FIELD_ITEM && + ((Item_field*) item)->field->type() == FIELD_TYPE_LONGLONG && + ((Field_longlong*) ((Item_field*) item)->field)->unsigned_flag) + *f_info++ = new field_ulonglong(item, pc); + else + *f_info++ = new field_longlong(item, pc); + } + if (item->result_type() == REAL_RESULT) + *f_info++ = new field_real(item, pc); + if (item->result_type() == STRING_RESULT) + *f_info++ = new field_str(item, pc); } - if (item->result_type() == REAL_RESULT) - *f_info++ = new field_real(item, pc); - if (item->result_type() == STRING_RESULT) - *f_info++ = new field_str(item, pc); } DBUG_RETURN(pc); +err: + delete pc; + DBUG_RETURN(0); } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 263c68a82b7..7d26996856d 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -251,13 +251,19 @@ void free_io_cache(TABLE *table) DBUG_VOID_RETURN; } - /* Close all tables which aren't in use by any thread */ +/* + Close all tables which aren't in use by any thread + + THD can be NULL, but then if_wait_for_refresh must be FALSE + and tables must be NULL. +*/ bool close_cached_tables(THD *thd, bool if_wait_for_refresh, TABLE_LIST *tables) { bool result=0; DBUG_ENTER("close_cached_tables"); + DBUG_ASSERT(thd || (!if_wait_for_refresh && !tables)); VOID(pthread_mutex_lock(&LOCK_open)); if (!tables) @@ -333,7 +339,6 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh, VOID(pthread_mutex_unlock(&LOCK_open)); if (if_wait_for_refresh) { - THD *thd=current_thd; pthread_mutex_lock(&thd->mysys_var->mutex); thd->mysys_var->current_mutex= 0; thd->mysys_var->current_cond= 0; @@ -2068,13 +2073,8 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables, strxnmov(buff,sizeof(buff)-1,db,".",table_name,NullS); table_name=buff; } - if (report_error) - { - my_printf_error(ER_UNKNOWN_TABLE, ER(ER_UNKNOWN_TABLE), MYF(0), - table_name, thd->where); - } - else - return (Field*) not_found_field; + my_printf_error(ER_UNKNOWN_TABLE, ER(ER_UNKNOWN_TABLE), MYF(0), + table_name, thd->where); } else if (report_error) diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index bd42a2c1720..55e96ec0c6d 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1157,12 +1157,12 @@ void Query_cache::invalidate(THD *thd, TABLE_LIST *tables_used, DBUG_ASSERT(!using_transactions || tables_used->table!=0); if (tables_used->derived) continue; - if (using_transactions && - (tables_used->table->file->table_cache_type() == + if (using_transactions && + (tables_used->table->file->table_cache_type() == HA_CACHE_TBL_TRANSACT)) - /* + /* Tables_used->table can't be 0 in transaction. - Only 'drop' invalidate not opened table, but 'drop' + Only 'drop' invalidate not opened table, but 'drop' force transaction finish. */ thd->add_changed_table(tables_used->table); @@ -1210,7 +1210,7 @@ void Query_cache::invalidate(CHANGED_TABLE_LIST *tables_used) */ void Query_cache::invalidate_locked_for_write(TABLE_LIST *tables_used) { - DBUG_ENTER("Query_cache::invalidate (changed table list)"); + DBUG_ENTER("Query_cache::invalidate_locked_for_write"); if (query_cache_size > 0 && tables_used) { STRUCT_LOCK(&structure_guard_mutex); diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 39c3f8586ed..407e2b23e38 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -225,7 +225,7 @@ void del_dbopt(const char *path) } -/* +/* Create database options file: DESCRIPTION @@ -244,10 +244,10 @@ static bool write_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) if (!create->default_table_charset) create->default_table_charset= thd->variables.collation_server; - + if (put_dbopt(path, create)) return 1; - + if ((file=my_create(path, CREATE_MODE,O_RDWR | O_TRUNC,MYF(MY_WME))) >= 0) { ulong length; @@ -523,14 +523,14 @@ int mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info) if ((error=write_db_opt(thd, path, create_info))) goto exit; - /* + /* Change options if current database is being altered TODO: Delete this code */ if (thd->db && !strcmp(thd->db,db)) { - thd->db_charset= (create_info && create_info->default_table_charset) ? - create_info->default_table_charset : + thd->db_charset= create_info->default_table_charset ? + create_info->default_table_charset : thd->variables.collation_server; thd->variables.collation_database= thd->db_charset; } @@ -538,7 +538,7 @@ int mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info) mysql_update_log.write(thd,thd->query, thd->query_length); if (mysql_bin_log.is_open()) { - Query_log_event qinfo(thd, thd->query, thd->query_length, 0, + Query_log_event qinfo(thd, thd->query, thd->query_length, 0, /* suppress_use */ TRUE); /* @@ -620,12 +620,12 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) pthread_mutex_lock(&LOCK_open); remove_db_from_cache(db); pthread_mutex_unlock(&LOCK_open); - + error= -1; if ((deleted= mysql_rm_known_files(thd, dirp, db, path, 0)) >= 0) { ha_drop_database(path); - query_cache_invalidate1(db); + query_cache_invalidate1(db); error = 0; } } @@ -636,7 +636,7 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) my_casedn_str(files_charset_info, tmp_db); db= tmp_db; } - if (!silent && deleted>=0 && thd) + if (!silent && deleted>=0) { const char *query; ulong query_length; @@ -686,7 +686,7 @@ exit: have 'if (data_buf) free(data_buf)' data_buf is !=0 so this makes a DOUBLE free(). Side effects of this double free() are, randomly (depends on the machine), - when the slave is replicating a DROP DATABASE: + when the slave is replicating a DROP DATABASE: - garbage characters in the error message: "Error 'Can't drop database 'test2'; database doesn't exist' on query 'h4zI©'" diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 2783406e16a..e0cb43e093e 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1685,9 +1685,6 @@ void st_select_lex::print_order(String *str, ORDER *order) void st_select_lex::print_limit(THD *thd, String *str) { - if (!thd) - thd= current_thd; - if (explicit_limit) { str->append(" limit ", 7); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c81aefc9cea..ca626539eb4 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -866,14 +866,16 @@ static int check_connection(THD *thd) char *user= end; char *passwd= strend(user)+1; char *db= passwd; - char db_buff[NAME_LEN+1]; // buffer to store db in utf8 + char db_buff[NAME_LEN+1]; // buffer to store db in utf8 char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8 - /* + uint dummy_errors; + + /* Old clients send null-terminated string as password; new clients send the size (1 byte) + string (not null-terminated). Hence in case of empty password both send '\0'. */ - uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ? + uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ? *passwd++ : strlen(passwd); db= thd->client_capabilities & CLIENT_CONNECT_WITH_DB ? db + passwd_len + 1 : 0; @@ -881,7 +883,6 @@ static int check_connection(THD *thd) /* Since 4.1 all database names are stored in utf8 */ if (db) { - uint dummy_errors; db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1, system_charset_info, db, strlen(db), @@ -889,14 +890,10 @@ static int check_connection(THD *thd) db= db_buff; } - if (user) - { - uint dummy_errors; - user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, - system_charset_info, user, strlen(user), - thd->charset(), &dummy_errors)]= '\0'; - user= user_buff; - } + user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, + system_charset_info, user, strlen(user), + thd->charset(), &dummy_errors)]= '\0'; + user= user_buff; if (thd->user) x_free(thd->user); @@ -3217,12 +3214,12 @@ purposes internal to the MySQL server", MYF(0)); /* If in a slave thread : ALTER DATABASE DB may not be preceded by USE DB. - For that reason, maybe db_ok() in sql/slave.cc did not check the + For that reason, maybe db_ok() in sql/slave.cc did not check the do_db/ignore_db. And as this query involves no tables, tables_ok() above was not called. So we have to check rules again here. */ #ifdef HAVE_REPLICATION - if (thd->slave_thread && + if (thd->slave_thread && (!db_ok(db, replicate_do_db, replicate_ignore_db) || !db_ok_with_wild_table(db))) { @@ -3309,9 +3306,9 @@ purposes internal to the MySQL server", MYF(0)); case SQLCOM_GRANT: { if (check_access(thd, lex->grant | lex->grant_tot_col | GRANT_ACL, - tables && tables->db ? tables->db : select_lex->db, + tables ? tables->db : select_lex->db, tables ? &tables->grant.privilege : 0, - tables ? 0 : 1,0)) + tables ? 0 : 1, 0)) goto error; /* diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c3bfbe086f1..5d756653cdd 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1897,9 +1897,9 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, for (table = tables; table; table = table->next) { char table_name[NAME_LEN*2+2]; - char* db = (table->db) ? table->db : thd->db; + char* db = table->db; bool fatal_error=0; - strxmov(table_name,db ? db : "",".",table->real_name,NullS); + strxmov(table_name, db, ".", table->real_name, NullS); thd->open_options|= extra_open_options; table->table = open_ltable(thd, table, lock_type); diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 761e8d6de8b..c2894a0c86b 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -61,7 +61,7 @@ int mysql_update(THD *thd, bool safe_update= thd->options & OPTION_SAFE_UPDATES; bool used_key_is_modified, transactional_table, log_delayed; int error=0; - uint used_index; + uint used_index= MAX_KEY; #ifndef NO_EMBEDDED_ACCESS_CHECKS uint want_privilege; #endif @@ -75,7 +75,6 @@ int mysql_update(THD *thd, thd->lex->select_lex.table_list.first); DBUG_ENTER("mysql_update"); - LINT_INIT(used_index); LINT_INIT(timestamp_query_id); if ((open_and_lock_tables(thd, table_list))) @@ -175,7 +174,7 @@ int mysql_update(THD *thd, matching rows before updating the table! */ table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS); - if (old_used_keys.is_set(used_index)) + if (used_index < MAX_KEY && old_used_keys.is_set(used_index)) { table->key_read=1; table->file->extra(HA_EXTRA_KEYREAD); @@ -542,8 +541,8 @@ int mysql_multi_update(THD *thd, /* Unlock the tables in preparation for relocking */ if (!using_lock_tables) - { - mysql_unlock_tables(thd, thd->lock); + { + mysql_unlock_tables(thd, thd->lock); thd->lock= 0; } diff --git a/sql/table.cc b/sql/table.cc index 5ede9c1e43d..0d3f2545b20 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -99,11 +99,11 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, *root_ptr= &outparam->mem_root; outparam->real_name=strdup_root(&outparam->mem_root, - name+dirname_length(name)); - *fn_ext(outparam->real_name)='\0'; // Remove extension + name+dirname_length(name)); outparam->table_name=my_strdup(alias,MYF(MY_WME)); if (!outparam->real_name || !outparam->table_name) goto err_end; + *fn_ext(outparam->real_name)='\0'; // Remove extension if ((file=my_open(fn_format(index_file,name,"",reg_ext,MY_UNPACK_FILENAME), O_RDONLY | O_SHARE, @@ -305,12 +305,14 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, VOID(my_seek(file,pos,MY_SEEK_SET,MYF(0))); if (my_read(file,(byte*) head,288,MYF(MY_NABP))) goto err_not_open; +#ifdef HAVE_CRYPTED_FRM if (crypted) { crypted->decode((char*) head+256,288-256); if (sint2korr(head+284) != 0) // Should be 0 goto err_not_open; // Wrong password } +#endif outparam->fields= uint2korr(head+258); pos=uint2korr(head+260); /* Length of all screens */ @@ -339,12 +341,14 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, pos+ (uint) (n_length+int_length+com_length)); if (read_string(file,(gptr*) &disk_buff,read_length)) goto err_not_open; /* purecov: inspected */ +#ifdef HAVE_CRYPTED_FRM if (crypted) { crypted->decode((char*) disk_buff,read_length); delete crypted; crypted=0; } +#endif strpos= disk_buff+pos; outparam->intervals= (TYPELIB*) (field_ptr+outparam->fields+1); @@ -1453,7 +1457,7 @@ bool check_column_name(const char *name) { const char *start= name; bool last_char_is_space= TRUE; - + while (*name) { #if defined(USE_MB) && defined(USE_MB_IDENT) diff --git a/sql/tztime.cc b/sql/tztime.cc index c2143b0d5dd..597389220f7 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1825,7 +1825,7 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables) { ttid= (uint)table->field[1]->val_int(); - if (ttid > TZ_MAX_TYPES) + if (ttid >= TZ_MAX_TYPES) { sql_print_error("Error while loading time zone description from " "mysql.time_zone_transition_type table: too big " diff --git a/tests/client_test.c b/tests/client_test.c index beaff795d0e..83f8f6ab143 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -10778,6 +10778,12 @@ static void test_bug5194() if (bind == 0 || query == 0 || param_str == 0) { fprintf(stderr, "Can't allocate enough memory for query structs\n"); + if (bind) + free(bind); + if (query) + free(query); + if (param_str) + free(param_str); return; } From 0af8f701089edd8c73afe50d7ab88ed48b4eccee Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 16:56:17 +0100 Subject: [PATCH 39/62] mysql_client_test.test, mysql-test-run.sh: Let MYSQL_CLIENT_TEST be set with command line from mysql-test-run script mysql-test-run.sh: Renamed client_test to mysql_client_test Support --embedded-server test on installed server mysql_client_test.test: Renamed client_test to mysql_client_test Use env var CLIENT_TEST with full name, it differs when run with --embedded-server Rename: mysql-test/t/client_test.test -> mysql-test/t/mysql_client_test.test mysql-test/mysql-test-run.sh: Let MYSQL_CLIENT_TEST be set with command line from mysql-test-run script mysql-test/t/mysql_client_test.test: Let MYSQL_CLIENT_TEST be set with command line from mysql-test-run script --- mysql-test/mysql-test-run.sh | 42 ++++++++++++++++++++++------- mysql-test/t/client_test.test | 4 --- mysql-test/t/mysql_client_test.test | 3 +++ 3 files changed, 35 insertions(+), 14 deletions(-) delete mode 100644 mysql-test/t/client_test.test create mode 100644 mysql-test/t/mysql_client_test.test diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 722da516d9b..990adbcf4b8 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -493,13 +493,13 @@ DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c # on binary, use what is installed if [ x$SOURCE_DIST = x1 ] ; then if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then - if [ -f "$BASEDIR/libmysqld/examples/mysqltest" ] ; then - MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest" + if [ -f "$BASEDIR/libmysqld/examples/mysqltest_embedded" ] ; then + MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest_embedded" else - echo "Fatal error: Cannot find embedded server 'mysqltest'" 1>&2 + echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2 exit 1 fi - TESTS_BINDIR="$BASEDIR/libmysqld/examples" + MYSQL_CLIENT_TEST="$BASEDIR/libmysqld/examples/mysql_client_test_embedded" else MYSQLD="$VALGRIND $BASEDIR/sql/mysqld" if [ -f "$BASEDIR/client/.libs/lt-mysqltest" ] ; then @@ -509,7 +509,7 @@ if [ x$SOURCE_DIST = x1 ] ; then else MYSQL_TEST="$BASEDIR/client/mysqltest" fi - TESTS_BINDIR="$BASEDIR/tests" + MYSQL_CLIENT_TEST="$BASEDIR/tests/mysql_client_test" fi if [ -f "$BASEDIR/client/.libs/mysqldump" ] ; then MYSQL_DUMP="$BASEDIR/client/.libs/mysqldump" @@ -538,6 +538,14 @@ if [ x$SOURCE_DIST = x1 ] ; then MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$BASEDIR/ndb/tools" else + + # We have a binary installation. Note that this can be both from + # unpacking a MySQL AB binary distribution (created using + # "scripts/make_binary_distribution", and from a "make install". + # Unfortunately the structure differs a bit, for a "make install" + # currently all binaries are in "bin", for a MySQL AB packaging + # some are in "tests". + if test -x "$BASEDIR/libexec/mysqld" then MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld" @@ -545,8 +553,6 @@ else MYSQLD="$VALGRIND $BASEDIR/bin/mysqld" fi CLIENT_BINDIR="$BASEDIR/bin" - TESTS_BINDIR="$BASEDIR/tests" - MYSQL_TEST="$CLIENT_BINDIR/mysqltest" MYSQL_DUMP="$CLIENT_BINDIR/mysqldump" MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog" MYSQLADMIN="$CLIENT_BINDIR/mysqladmin" @@ -565,7 +571,23 @@ else else LANGUAGE="$BASEDIR/share/english/" CHARSETSDIR="$BASEDIR/share/charsets" - fi + fi + if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then + if [ -f "$CLIENT_BINDIR/mysqltest_embedded" ] ; then + MYSQL_TEST="$VALGRIND $CLIENT_BINDIR/mysqltest_embedded" + else + echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2 + exit 1 + fi + if [ -d "$BASEDIR/tests/mysql_client_test_embedded" ] ; then + MYSQL_CLIENT_TEST="$TESTS_BINDIR/mysql_client_test_embedded" + else + MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test_embedded" + fi + else + MYSQL_TEST="$CLIENT_BINDIR/mysqltest" + MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test" + fi fi if [ -z "$MASTER_MYSQLD" ] @@ -599,13 +621,13 @@ then EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --user=root" fi - +MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent" MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT" MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR $EXTRA_MYSQLBINLOG_OPT" MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose" MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD" export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES -export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR +export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR export NDB_TOOLS_DIR MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ diff --git a/mysql-test/t/client_test.test b/mysql-test/t/client_test.test deleted file mode 100644 index 29e7c23ab35..00000000000 --- a/mysql-test/t/client_test.test +++ /dev/null @@ -1,4 +0,0 @@ -# Skip when testing the embedded server ---source include/not_embedded.inc ---disable_result_log ---exec $TESTS_BINDIR/client_test --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent diff --git a/mysql-test/t/mysql_client_test.test b/mysql-test/t/mysql_client_test.test new file mode 100644 index 00000000000..86aecf43cbd --- /dev/null +++ b/mysql-test/t/mysql_client_test.test @@ -0,0 +1,3 @@ +# We run with different binaries for normal and --embedded-server +--disable_result_log +--exec $MYSQL_CLIENT_TEST From 2eabdaa2f773202ac90be9151deaf5d5b0744db1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 17:10:03 +0100 Subject: [PATCH 40/62] my_global.h: Bug#7145 Added cast to doublestore() and ARM include/my_global.h: Added cast to doublestore() and ARM --- include/my_global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/my_global.h b/include/my_global.h index ff59f7bfc55..f54a18649c5 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -1072,7 +1072,7 @@ do { doubleget_union _tmp; \ #define float4store(V,M) memcpy_fixed((byte*) V,(byte*) (&M),sizeof(float)) #if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) -#define doublestore(T,V) do { *(T)= ((byte *) &V)[4];\ +#define doublestore(T,V) do { *(((char*)T)+0)=(char) ((byte *) &V)[4];\ *(((char*)T)+1)=(char) ((byte *) &V)[5];\ *(((char*)T)+2)=(char) ((byte *) &V)[6];\ *(((char*)T)+3)=(char) ((byte *) &V)[7];\ From 7109999b92ec8541a61ca5babc5b06f4315478a8 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 18:38:46 +0100 Subject: [PATCH 41/62] remove the entry from the list, before freeing --- mysys/mf_keycaches.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysys/mf_keycaches.c b/mysys/mf_keycaches.c index fee3096de52..38fef31fdd4 100644 --- a/mysys/mf_keycaches.c +++ b/mysys/mf_keycaches.c @@ -275,7 +275,11 @@ static void safe_hash_change(SAFE_HASH *hash, byte *old_data, byte *new_data) if (entry->data == old_data) { if (new_data == hash->default_value) + { + if ((*entry->prev= entry->next)) + entry->next->prev= entry->prev; hash_delete(&hash->hash, (byte*) entry); + } else entry->data= new_data; } From 712f3f677b97a89bc1a2ff6a67cbda00a2be25ca Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 21:30:21 +0100 Subject: [PATCH 42/62] merged mysql-test/t/ctype_cp932.test: Change mode to -rw-rw-r-- mysql-test/t/ctype_eucjpms.test: Change mode to -rw-rw-r-- BitKeeper/etc/ignore: Added libmysqld/ha_federated.cc to the ignore list --- .bzrignore | 1 + mysql-test/t/ctype_cp932.test | 0 mysql-test/t/ctype_eucjpms.test | 0 3 files changed, 1 insertion(+) mode change 100755 => 100644 mysql-test/t/ctype_cp932.test mode change 100755 => 100644 mysql-test/t/ctype_eucjpms.test diff --git a/.bzrignore b/.bzrignore index 608a414ae20..c8f50c927ad 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1047,3 +1047,4 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl +libmysqld/ha_federated.cc diff --git a/mysql-test/t/ctype_cp932.test b/mysql-test/t/ctype_cp932.test old mode 100755 new mode 100644 diff --git a/mysql-test/t/ctype_eucjpms.test b/mysql-test/t/ctype_eucjpms.test old mode 100755 new mode 100644 From 15f37ac2b43592063b27d9f02876d35bda05aa06 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Jan 2005 12:31:14 -0800 Subject: [PATCH 43/62] Set lower_case_file_system when it is being tested to check if lower_case_tables_names=2 is sensible. Related to Bug #7887. sql/mysqld.cc: Set lower_case_file_system when it is being tested to check if lower_case_tables_names=2 is sensible. --- sql/mysqld.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b21b84a34e7..425911570ef 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2914,7 +2914,8 @@ You should consider changing lower_case_table_names to 1 or 2", } } else if (lower_case_table_names == 2 && - (test_if_case_insensitive(mysql_real_data_home) == 0)) + !(lower_case_file_system= + (test_if_case_insensitive(mysql_real_data_home) == 1))) { if (global_system_variables.log_warnings) sql_print_warning("\ From dc43c6ea4b2bd3c466049674b4c760cad9ad2979 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 02:31:51 +0300 Subject: [PATCH 44/62] A fix for Bug#5787 "mysql_stmt_prepare is upto 8 times slower": it's crucial to disable Nagle algorithm on client for no-reply commands (like mysql_stmt_free) to always work fast. Nagle algorithm instructs the sender to buffer (store) data if any unacknowledged data is outstanding and the size of to-send data is less than the network segment. It was exactly the case with COM_STMT_CLOSE after COM_STMT_PREPARE, so the client was waiting for Nagle timer to expire or for ACK from the server, while the server was holding up ACK because of delayed acknowledgement algorithm. The tricky part is that we have been already disabling Nagle algorithm (by setting TCP_NODELAY) almost everywhere except Windows (and maybe Netware). It is the reason why the bug was repeatable only with Windows client. vio/viosocket.c: A fix for Bug#5787 "mysql_stmt_prepare is upto 8 times slower": if we disable Nagle algorithm, do it everywhere. --- vio/viosocket.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/vio/viosocket.c b/vio/viosocket.c index bcba05beef1..202d70b6c26 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -142,23 +142,29 @@ int vio_fastsend(Vio * vio __attribute__((unused))) int r=0; DBUG_ENTER("vio_fastsend"); -#ifdef IPTOS_THROUGHPUT +#if defined(IPTOS_THROUGHPUT) && !defined(__EMX__) { -#ifndef __EMX__ int tos = IPTOS_THROUGHPUT; - if (!setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos))) -#endif /* !__EMX__ */ - { - int nodelay = 1; - if (setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (void *) &nodelay, - sizeof(nodelay))) { - DBUG_PRINT("warning", - ("Couldn't set socket option for fast send")); - r= -1; - } - } + r= setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos)); + } +#endif /* IPTOS_THROUGHPUT && !__EMX__ */ + if (!r) + { +#ifdef __WIN__ + BOOL nodelay= 1; + r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (const char*) &nodelay, + sizeof(nodelay)); +#else + int nodelay = 1; + r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (void*) &nodelay, + sizeof(nodelay)); +#endif /* __WIN__ */ + } + if (r) + { + DBUG_PRINT("warning", ("Couldn't set socket option for fast send")); + r= -1; } -#endif /* IPTOS_THROUGHPUT */ DBUG_PRINT("exit", ("%d", r)); DBUG_RETURN(r); } From b796a7e4d01b740ac53913f6312445ee2619afc3 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 07:37:06 +0300 Subject: [PATCH 45/62] Fix for BUG#8003 attempt 2: Call file->external_lock() for handler objects that index_merge code creates in addition to the handler object opened in open_and_lock_tables. --- sql/opt_range.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index e67a9881bba..c3b84564504 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -778,6 +778,7 @@ QUICK_RANGE_SELECT::~QUICK_RANGE_SELECT() DBUG_PRINT("info", ("Freeing separate handler %p (free=%d)", file, free_file)); file->reset(); + file->external_lock(current_thd, F_UNLCK); file->close(); } } @@ -929,6 +930,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler) DBUG_RETURN(0); } + THD *thd= current_thd; if (!(file= get_new_handler(head, head->s->db_type))) goto failure; DBUG_PRINT("info", ("Allocated new handler %p", file)); @@ -937,11 +939,14 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler) /* Caller will free the memory */ goto failure; } + if (file->external_lock(thd, F_RDLCK)) + goto failure; if (file->extra(HA_EXTRA_KEYREAD) || file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY) || init() || reset()) { + file->external_lock(thd, F_UNLCK); file->close(); goto failure; } From b7b042689c566fc91a0c1ef2a2345ce964e6d191 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 10:58:30 +0400 Subject: [PATCH 46/62] Test case (bug #7261: Alter table loses temp table with lower_case_table_names=2). --- mysql-test/r/lowercase_table2.result | 12 +++++++++++- mysql-test/t/lowercase_table2.test | 13 ++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/lowercase_table2.result b/mysql-test/r/lowercase_table2.result index 3be73f6cc6a..cfd8f78a77c 100644 --- a/mysql-test/r/lowercase_table2.result +++ b/mysql-test/r/lowercase_table2.result @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3; +DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3,tT; DROP DATABASE IF EXISTS `TEST_$1`; DROP DATABASE IF EXISTS `test_$1`; CREATE TABLE T1 (a int); @@ -131,3 +131,13 @@ show tables like 't1%'; Tables_in_test (t1%) t1 drop table t1; +create temporary table tT(a int(11), b varchar(8)); +insert into tT values (1, 'abc'); +select * from tT; +a b +1 abc +alter table tT add index (a); +select * from tT; +a b +1 abc +drop table tT; diff --git a/mysql-test/t/lowercase_table2.test b/mysql-test/t/lowercase_table2.test index a4eaeac4ef4..237dcd29950 100644 --- a/mysql-test/t/lowercase_table2.test +++ b/mysql-test/t/lowercase_table2.test @@ -10,7 +10,7 @@ show variables like "lower_case_table_names"; enable_query_log; --disable_warnings -DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3; +DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3,tT; DROP DATABASE IF EXISTS `TEST_$1`; DROP DATABASE IF EXISTS `test_$1`; --enable_warnings @@ -100,3 +100,14 @@ show tables like 'T1%'; alter table t1 add index (A); show tables like 't1%'; drop table t1; + +# +# Bug #7261: Alter table loses temp table +# + +create temporary table tT(a int(11), b varchar(8)); +insert into tT values (1, 'abc'); +select * from tT; +alter table tT add index (a); +select * from tT; +drop table tT; From 64fcbec855918cc1547821be8c1b7c4cb1fdc5f6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 09:47:00 +0100 Subject: [PATCH 47/62] fix for make error in Makefile.am of mysql_client_test.c --- libmysqld/examples/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index 85c76df1513..b94d2db2912 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -29,7 +29,7 @@ mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \ mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) mysql_client_test_embedded_LINK = $(CXXLINK) -mysql_client_test_embedded_SOURCES = mysql_client_test.c +mysql_client_test_embedded_SOURCES = $(top_srcdir)/tests/mysql_client_test.c clean: rm -f $(client_sources) From bb762b50a305b8ac5a67f0e63cf4e888cc55a98f Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 10:03:27 +0100 Subject: [PATCH 48/62] backported ndb_mgm options from 5.0 changed ndb_restore test somewhat to fisrt make the tables in myisam mysql-test/mysql-test-run.sh: backported ndb_mgm options from 5.0 mysql-test/ndb/ndbcluster.sh: backported ndb_mgm options from 5.0 mysql-test/r/ndb_restore.result: changed ndb_restore test somewhat to fisrt make the tables in myisam mysql-test/t/ndb_restore.test: changed ndb_restore test somewhat to fisrt make the tables in myisam --- mysql-test/mysql-test-run.sh | 5 ++- mysql-test/ndb/ndbcluster.sh | 10 +++-- mysql-test/r/ndb_restore.result | 66 ++++++++++++++++----------------- mysql-test/t/ndb_restore.test | 38 +++++++++---------- 4 files changed, 63 insertions(+), 56 deletions(-) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 241e881cdfc..c2ac26217b9 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -241,6 +241,7 @@ USE_EMBEDDED_SERVER="" RESULT_EXT="" TEST_MODE="default" +NDB_MGM_EXTRA_OPTS= NDB_MGMD_EXTRA_OPTS= NDBD_EXTRA_OPTS= @@ -264,6 +265,8 @@ while test $# -gt 0; do --ndb-connectstring=*) USE_NDBCLUSTER="--ndbcluster" ; USE_RUNNING_NDBCLUSTER=`$ECHO "$1" | $SED -e "s;--ndb-connectstring=;;"` ;; + --ndb_mgm-extra-opts=*) + NDB_MGM_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgm-extra-opts=;;"` ;; --ndb_mgmd-extra-opts=*) NDB_MGMD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgmd-extra-opts=;;"` ;; --ndbd-extra-opts=*) @@ -467,7 +470,7 @@ SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M" export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1 NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2` -NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgmd-extra-opts=\"$NDB_MGMD_EXTRA_OPTS\" --ndbd-extra-opts=\"$NDBD_EXTRA_OPTS\"" +NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgm-extra-opts=$NDB_MGM_EXTRA_OPTS --ndb_mgmd-extra-opts=$NDB_MGMD_EXTRA_OPTS --ndbd-extra-opts=$NDBD_EXTRA_OPTS" NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT if [ x$SOURCE_DIST = x1 ] ; then diff --git a/mysql-test/ndb/ndbcluster.sh b/mysql-test/ndb/ndbcluster.sh index a86e482b2ab..16bb3a9b122 100644 --- a/mysql-test/ndb/ndbcluster.sh +++ b/mysql-test/ndb/ndbcluster.sh @@ -58,6 +58,7 @@ ndb_con_op=105000 ndb_dmem=80M ndb_imem=24M +NDB_MGM_EXTRA_OPTS= NDB_MGMD_EXTRA_OPTS= NDBD_EXTRA_OPTS= @@ -97,6 +98,9 @@ while test $# -gt 0; do --port-base=*) port_base=`echo "$1" | sed -e "s;--port-base=;;"` ;; + --ndb_mgm-extra-opts=*) + NDB_MGM_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgm-extra-opts=;;"` + ;; --ndb_mgmd-extra-opts=*) NDB_MGMD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgmd-extra-opts=;;"` ;; @@ -130,7 +134,7 @@ if [ ! -x "$exec_waiter" ]; then exit 1 fi -exec_mgmtclient="$exec_mgmtclient --no-defaults" +exec_mgmtclient="$exec_mgmtclient --no-defaults $NDB_MGM_EXTRA_OPTS" exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults $NDB_MGMD_EXTRA_OPTS" exec_ndb="$exec_ndb --no-defaults $NDBD_EXTRA_OPTS" exec_waiter="$exec_waiter --no-defaults" @@ -178,8 +182,8 @@ fi # Edit file system path and ports in config file if [ $initial_ndb ] ; then - rm -f $fs_ndb/ndb_* -sed \ + rm -f $fs_ndb/ndb_* 2>&1 | cat > /dev/null + sed \ -e s,"CHOOSE_MaxNoOfOrderedIndexes","$ndb_no_ord",g \ -e s,"CHOOSE_MaxNoOfConcurrentOperations","$ndb_con_op",g \ -e s,"CHOOSE_DataMemory","$ndb_dmem",g \ diff --git a/mysql-test/r/ndb_restore.result b/mysql-test/r/ndb_restore.result index 7a81e8cd802..8e4449b1996 100644 --- a/mysql-test/r/ndb_restore.result +++ b/mysql-test/r/ndb_restore.result @@ -6,7 +6,7 @@ CREATE TABLE `t1` ( `goaledatta` char(2) NOT NULL default '', `maturegarbagefa` varchar(32) NOT NULL default '', PRIMARY KEY (`capgoaledatta`,`goaledatta`,`maturegarbagefa`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t1` VALUES (2,'3','q3plus.qt'),(4,'4','q3plus.qt'),(1,'3','q3.net'),(3,'4','q3.net'),(3,'20','threetrees.qt'); CREATE TABLE `t2` ( `capgotod` smallint(5) unsigned NOT NULL auto_increment, @@ -17,13 +17,13 @@ CREATE TABLE `t2` ( `svcutonsa` varchar(64) NOT NULL default '', PRIMARY KEY (`capgotod`), KEY `i_quadaddsvr` (`gotod`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t2` VALUES (5,4,'','q3.net','addavp:MK_CASELECTOR=1','postorod rattoaa'),(2,1,'4','','addavp:MK_BRANDTAD=345','REDS Brandtad'),(3,2,'4','q3.net','execorder','fixedRatediPO REDS'),(1,1,'3','','addavp:MK_BRANDTAD=123','TEST Brandtad'),(6,5,'','told.q3.net','addavp:MK_BRANDTAD=123','Brandtad Toldzone'),(4,3,'3','q3.net','addavp:MK_POOLHINT=2','ratedi PO TEST'); CREATE TABLE `t3` ( `CapGoaledatta` smallint(5) unsigned NOT NULL default '0', `capgotod` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`capgotod`,`CapGoaledatta`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t3` VALUES (5,3),(2,4),(5,4),(1,3); CREATE TABLE `t4` ( `capfa` bigint(20) unsigned NOT NULL auto_increment, @@ -35,21 +35,21 @@ CREATE TABLE `t4` ( PRIMARY KEY (`fa`,`realm`), KEY `capfa` (`capfa`), KEY `i_quadentity` (`fa`,`realm`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t4` VALUES (18,'john.smith','q3.net','dessjohn.smith',0,NULL),(21,'quad_katt_with_brandtad','q3.net','acne',0,NULL),(22,'quad_katt_carattoaa','q3.net','acne',0,NULL),(26,'436462612809','sqasdt.q3.net','N/A',0,'6'),(19,'john','smith.qt','dessjohn',0,NULL),(33,'436643196120','sqasdt.q3.net','N/A',1,'6'),(28,'436642900019','sqasdt.q3.net','N/A',0,'6'),(30,'436462900209','sqasdt.q3.net','N/A',0,'6'),(16,'436640006666','sqasdt.q3.net','',0,NULL),(19,'dette','el-redun.com','dessdette',0,NULL),(12,'quad_kattPP','q3.net','acne',2,NULL),(14,'436640008888','sqasdt.q3.net','',0,NULL),(29,'463624900028','sqasdt.q3.net','N/A',0,'6'),(15,'436640099099','sqasdt.q3.net','',0,NULL),(13,'pap','q3plus.qt','acne',1,NULL),(19,'436642612091','sqasdt.q3.net','N/A',0,'6'),(12,'quad_katt','q3.net','acne',0,NULL),(11,'quad_kattVK','q3.net','acne',1,NULL),(32,'463641969502','sqasdt.q3.net','N/A',1,'6'),(20,'joe','q3.net','joedesswd',0,NULL),(29,'436642900034','sqasdt.q3.net','N/A',0,'6'),(25,'contind','armerde.qt','acne',1,NULL); CREATE TABLE `t5` ( `capfa` bigint(20) unsigned NOT NULL default '0', `gotod` smallint(5) unsigned NOT NULL default '0', `orderutonsa` varchar(64) NOT NULL default '', PRIMARY KEY (`capfa`,`gotod`,`orderutonsa`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t5` VALUES (21,2,''),(21,1,''),(22,4,''); CREATE TABLE `t6` ( `capfa_parent` bigint(20) unsigned NOT NULL default '0', `capfa_child` bigint(20) unsigned NOT NULL default '0', `relatta` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`capfa_child`,`capfa_parent`,`relatta`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t6` VALUES (15,16,0),(19,20,0),(18326932092909551615,30,0),(26,29,0),(18326932092909551615,29,0),(19,18,0),(26,28,0),(12,14,0); CREATE TABLE `t7` ( `dardpo` char(15) NOT NULL default '', @@ -60,7 +60,7 @@ CREATE TABLE `t7` ( `Fastmag` char(1) NOT NULL default '', `Beareratta` char(2) NOT NULL default '', PRIMARY KEY (`dardpo`,`dardtestard`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t7` VALUES ('2.6.2.4',24,'CECHP','54545','0','0','5'),('2.2.5.4',26,'CANFA','33223','1','1','4'),('4.3.2.4',28,'ITALD','54222','1','0','5'),('129..0.0.eins',28,'G','99999','1','1','5'),('1.1.1.1',24,'AUTPT','32323','0','1','3'); CREATE TABLE `t8` ( `kattjame` varchar(32) NOT NULL default '', @@ -88,7 +88,7 @@ CREATE TABLE `t8` ( `acctinputoctets` bigint(20) unsigned default NULL, PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`), KEY `squardporoot` (`squardporoot`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t8` VALUES ('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643196120','436643196929','8956234534568968','5524595699','uxasmt21.net.acne.qt/481889229462692422','','1.1.1.1','2.2.4.6','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565),('4545435545','john','q3.net','q3.net','acne.li','436643196120','436643196929','45345234568968','995696699','uxasmt21.net.acne.qt/481889229462692423','','1.1.1.1','2.2.9.8','2','86989','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8821923,169,3565),('versteckter_q3net_katt','joe','q3.net','elredun.com','q3.net','436643196120','436643196939','91341234568968','695595699','uxasmt21.net.acne.qt/481889229462692421','','1.1.1.1','2.5.2.5','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',1923123,9569,6565); CREATE TABLE `t9` ( `kattjame` varchar(32) NOT NULL default '', @@ -114,38 +114,38 @@ CREATE TABLE `t9` ( `actinputocctets` bigint(20) unsigned default NULL, `terminateraste` tinyint(3) unsigned default NULL, PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t9` VALUES ('3g4jh8gar2t','joe','q3.net','elredun.com','q3.net','436643316120','436643316939','91341234568968','695595699','1.1.1.1','2.2.6.2','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',3123123,9569,6565,1),('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643316120','436643316939','8956234534568968','5254595969','1.1.1.1','8.6.2.2','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565,2),('4545435545','john','q3.net','q3.net','acne.li','436643316120','436643316939','45345234568968','995696699','1.1.1.1','2.9.9.2','2','86998','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8823123,169,3565,3); -create table t1_c engine=myisam as select * from t1; -create table t2_c engine=myisam as select * from t2; -create table t3_c engine=myisam as select * from t3; -create table t4_c engine=myisam as select * from t4; -create table t5_c engine=myisam as select * from t5; -create table t6_c engine=myisam as select * from t6; -create table t7_c engine=myisam as select * from t7; -create table t8_c engine=myisam as select * from t8; -create table t9_c engine=myisam as select * from t9; -drop table t1,t2,t3,t4,t5,t6,t7,t8,t9; +create table t1_c engine=ndbcluster as select * from t1; +create table t2_c engine=ndbcluster as select * from t2; +create table t3_c engine=ndbcluster as select * from t3; +create table t4_c engine=ndbcluster as select * from t4; +create table t5_c engine=ndbcluster as select * from t5; +create table t6_c engine=ndbcluster as select * from t6; +create table t7_c engine=ndbcluster as select * from t7; +create table t8_c engine=ndbcluster as select * from t8; +create table t9_c engine=ndbcluster as select * from t9; +drop table t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; show tables; Tables_in_test -t1_c -t2_c -t3_c -t4_c -t5_c -t6_c -t7_c -t8_c -t9_c -t9 -t4 t1 t2 -t7 -t8 +t3 +t4 t5 t6 -t3 +t7 +t8 +t9 +t8_c +t9_c +t1_c +t7_c +t6_c +t5_c +t4_c +t3_c +t2_c select count(*) from t1; count(*) 5 diff --git a/mysql-test/t/ndb_restore.test b/mysql-test/t/ndb_restore.test index 79a4f8a06d3..09939ec119d 100644 --- a/mysql-test/t/ndb_restore.test +++ b/mysql-test/t/ndb_restore.test @@ -11,7 +11,7 @@ CREATE TABLE `t1` ( `goaledatta` char(2) NOT NULL default '', `maturegarbagefa` varchar(32) NOT NULL default '', PRIMARY KEY (`capgoaledatta`,`goaledatta`,`maturegarbagefa`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t1` VALUES (2,'3','q3plus.qt'),(4,'4','q3plus.qt'),(1,'3','q3.net'),(3,'4','q3.net'),(3,'20','threetrees.qt'); CREATE TABLE `t2` ( @@ -23,14 +23,14 @@ CREATE TABLE `t2` ( `svcutonsa` varchar(64) NOT NULL default '', PRIMARY KEY (`capgotod`), KEY `i_quadaddsvr` (`gotod`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t2` VALUES (5,4,'','q3.net','addavp:MK_CASELECTOR=1','postorod rattoaa'),(2,1,'4','','addavp:MK_BRANDTAD=345','REDS Brandtad'),(3,2,'4','q3.net','execorder','fixedRatediPO REDS'),(1,1,'3','','addavp:MK_BRANDTAD=123','TEST Brandtad'),(6,5,'','told.q3.net','addavp:MK_BRANDTAD=123','Brandtad Toldzone'),(4,3,'3','q3.net','addavp:MK_POOLHINT=2','ratedi PO TEST'); CREATE TABLE `t3` ( `CapGoaledatta` smallint(5) unsigned NOT NULL default '0', `capgotod` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`capgotod`,`CapGoaledatta`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t3` VALUES (5,3),(2,4),(5,4),(1,3); CREATE TABLE `t4` ( @@ -43,7 +43,7 @@ CREATE TABLE `t4` ( PRIMARY KEY (`fa`,`realm`), KEY `capfa` (`capfa`), KEY `i_quadentity` (`fa`,`realm`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t4` VALUES (18,'john.smith','q3.net','dessjohn.smith',0,NULL),(21,'quad_katt_with_brandtad','q3.net','acne',0,NULL),(22,'quad_katt_carattoaa','q3.net','acne',0,NULL),(26,'436462612809','sqasdt.q3.net','N/A',0,'6'),(19,'john','smith.qt','dessjohn',0,NULL),(33,'436643196120','sqasdt.q3.net','N/A',1,'6'),(28,'436642900019','sqasdt.q3.net','N/A',0,'6'),(30,'436462900209','sqasdt.q3.net','N/A',0,'6'),(16,'436640006666','sqasdt.q3.net','',0,NULL),(19,'dette','el-redun.com','dessdette',0,NULL),(12,'quad_kattPP','q3.net','acne',2,NULL),(14,'436640008888','sqasdt.q3.net','',0,NULL),(29,'463624900028','sqasdt.q3.net','N/A',0,'6'),(15,'436640099099','sqasdt.q3.net','',0,NULL),(13,'pap','q3plus.qt','acne',1,NULL),(19,'436642612091','sqasdt.q3.net','N/A',0,'6'),(12,'quad_katt','q3.net','acne',0,NULL),(11,'quad_kattVK','q3.net','acne',1,NULL),(32,'463641969502','sqasdt.q3.net','N/A',1,'6'),(20,'joe','q3.net','joedesswd',0,NULL),(29,'436642900034','sqasdt.q3.net','N/A',0,'6'),(25,'contind','armerde.qt','acne',1,NULL); CREATE TABLE `t5` ( @@ -51,7 +51,7 @@ CREATE TABLE `t5` ( `gotod` smallint(5) unsigned NOT NULL default '0', `orderutonsa` varchar(64) NOT NULL default '', PRIMARY KEY (`capfa`,`gotod`,`orderutonsa`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t5` VALUES (21,2,''),(21,1,''),(22,4,''); CREATE TABLE `t6` ( @@ -59,7 +59,7 @@ CREATE TABLE `t6` ( `capfa_child` bigint(20) unsigned NOT NULL default '0', `relatta` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`capfa_child`,`capfa_parent`,`relatta`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t6` VALUES (15,16,0),(19,20,0),(18326932092909551615,30,0),(26,29,0),(18326932092909551615,29,0),(19,18,0),(26,28,0),(12,14,0); CREATE TABLE `t7` ( @@ -71,7 +71,7 @@ CREATE TABLE `t7` ( `Fastmag` char(1) NOT NULL default '', `Beareratta` char(2) NOT NULL default '', PRIMARY KEY (`dardpo`,`dardtestard`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t7` VALUES ('2.6.2.4',24,'CECHP','54545','0','0','5'),('2.2.5.4',26,'CANFA','33223','1','1','4'),('4.3.2.4',28,'ITALD','54222','1','0','5'),('129..0.0.eins',28,'G','99999','1','1','5'),('1.1.1.1',24,'AUTPT','32323','0','1','3'); CREATE TABLE `t8` ( @@ -100,7 +100,7 @@ CREATE TABLE `t8` ( `acctinputoctets` bigint(20) unsigned default NULL, PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`), KEY `squardporoot` (`squardporoot`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t8` VALUES ('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643196120','436643196929','8956234534568968','5524595699','uxasmt21.net.acne.qt/481889229462692422','','1.1.1.1','2.2.4.6','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565),('4545435545','john','q3.net','q3.net','acne.li','436643196120','436643196929','45345234568968','995696699','uxasmt21.net.acne.qt/481889229462692423','','1.1.1.1','2.2.9.8','2','86989','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8821923,169,3565),('versteckter_q3net_katt','joe','q3.net','elredun.com','q3.net','436643196120','436643196939','91341234568968','695595699','uxasmt21.net.acne.qt/481889229462692421','','1.1.1.1','2.5.2.5','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',1923123,9569,6565); CREATE TABLE `t9` ( @@ -127,22 +127,22 @@ CREATE TABLE `t9` ( `actinputocctets` bigint(20) unsigned default NULL, `terminateraste` tinyint(3) unsigned default NULL, PRIMARY KEY (`kattjame`,`hunderaaarbagefa`,`hassetistart`,`hassetino`) -) ENGINE=ndbcluster DEFAULT CHARSET=latin1; +) ENGINE=myisam DEFAULT CHARSET=latin1; INSERT INTO `t9` VALUES ('3g4jh8gar2t','joe','q3.net','elredun.com','q3.net','436643316120','436643316939','91341234568968','695595699','1.1.1.1','2.2.6.2','3','86989','34','x','x','2012-03-12 18:35:04','2012-12-05 12:35:04',3123123,9569,6565,1),('4tt45345235','pap','q3plus.qt','q3plus.qt','q3.net','436643316120','436643316939','8956234534568968','5254595969','1.1.1.1','8.6.2.2','4','86989','34','x','x','2012-03-12 12:55:34','2012-12-05 11:20:04',3223433,3369,9565,2),('4545435545','john','q3.net','q3.net','acne.li','436643316120','436643316939','45345234568968','995696699','1.1.1.1','2.9.9.2','2','86998','34','x','x','2012-03-12 11:35:03','2012-12-05 08:50:04',8823123,169,3565,3); -create table t1_c engine=myisam as select * from t1; -create table t2_c engine=myisam as select * from t2; -create table t3_c engine=myisam as select * from t3; -create table t4_c engine=myisam as select * from t4; -create table t5_c engine=myisam as select * from t5; -create table t6_c engine=myisam as select * from t6; -create table t7_c engine=myisam as select * from t7; -create table t8_c engine=myisam as select * from t8; -create table t9_c engine=myisam as select * from t9; +create table t1_c engine=ndbcluster as select * from t1; +create table t2_c engine=ndbcluster as select * from t2; +create table t3_c engine=ndbcluster as select * from t3; +create table t4_c engine=ndbcluster as select * from t4; +create table t5_c engine=ndbcluster as select * from t5; +create table t6_c engine=ndbcluster as select * from t6; +create table t7_c engine=ndbcluster as select * from t7; +create table t8_c engine=ndbcluster as select * from t8; +create table t9_c engine=ndbcluster as select * from t9; --exec $NDB_MGM --no-defaults -e "start backup" > /dev/null -drop table t1,t2,t3,t4,t5,t6,t7,t8,t9; +drop table t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; --exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 1 -m -r --print --print_meta $NDB_BACKUP_DIR/BACKUP/BACKUP-1 > /tmp/ndb_restore.out --exec $NDB_TOOLS_DIR/ndb_restore --no-defaults -b 1 -n 2 -r --print --print_meta $NDB_BACKUP_DIR/BACKUP/BACKUP-1 > /tmp/ndb_restore.out From 16ecc67559b3a3df171425cdb43f6c5dd8478286 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 12:10:24 +0200 Subject: [PATCH 49/62] InnoDB: Write status bits to MLOG_COMP_REC_INSERT entries. It is not safe to infer the status bits from the B-tree page level, because after MLOG_COMP_LIST_END_COPY_CREATED, the level will not be initialized before the records have been inserted. (Bug #7973) innobase/btr/btr0cur.c: Add parameter "offsets" to page_cur_insert_rec_low() innobase/include/page0cur.h: page_cur_rec_insert(), page_cur_insert_rec_low(): Add param "offsets" innobase/include/page0cur.ic: page_cur_rec_insert(), page_cur_insert_rec_low(): Add param "offsets" innobase/include/rem0rec.h: Add rec_get_info_and_status_bits() and rec_set_info_and_status_bits() innobase/include/rem0rec.ic: Add rec_get_info_and_status_bits() and rec_set_info_and_status_bits() innobase/page/page0cur.c: page_cur_insert_rec_write_log(), page_cur_parse_insert_rec(): write the status bits of the record to the log (Bug #7973) page_cur_insert_rec_low(): add parameter "offsets" page_copy_rec_list_end_to_created_page(): remove unnecessary call to mem_heap_create() innobase/page/page0page.c: page_copy_rec_list_end_no_locks(), page_copy_rec_list_start(): compute offsets and pass them to page_cur_rec_insert() --- innobase/btr/btr0cur.c | 3 ++- innobase/include/page0cur.h | 2 ++ innobase/include/page0cur.ic | 6 +++-- innobase/include/rem0rec.h | 21 ++++++++++++++++ innobase/include/rem0rec.ic | 47 ++++++++++++++++++++++++++++++++++++ innobase/page/page0cur.c | 46 ++++++++++++++++------------------- innobase/page/page0page.c | 34 +++++++++++++++++++++----- 7 files changed, 125 insertions(+), 34 deletions(-) diff --git a/innobase/btr/btr0cur.c b/innobase/btr/btr0cur.c index 4c2a501a08a..8559df16d08 100644 --- a/innobase/btr/btr0cur.c +++ b/innobase/btr/btr0cur.c @@ -1022,7 +1022,8 @@ calculate_sizes_again: /* Now, try the insert */ - *rec = page_cur_insert_rec_low(page_cursor, entry, index, NULL, mtr); + *rec = page_cur_insert_rec_low(page_cursor, entry, index, + NULL, NULL, mtr); if (!(*rec)) { /* If the record did not fit, reorganize */ btr_page_reorganize(page, index, mtr); diff --git a/innobase/include/page0cur.h b/innobase/include/page0cur.h index a693931968e..7c6ff081c6d 100644 --- a/innobase/include/page0cur.h +++ b/innobase/include/page0cur.h @@ -144,6 +144,7 @@ page_cur_rec_insert( page_cur_t* cursor, /* in: a page cursor */ rec_t* rec, /* in: record to insert */ dict_index_t* index, /* in: record descriptor */ + ulint* offsets,/* in: rec_get_offsets(rec, index) */ mtr_t* mtr); /* in: mini-transaction handle */ /*************************************************************** Inserts a record next to page cursor. Returns pointer to inserted record if @@ -160,6 +161,7 @@ page_cur_insert_rec_low( dtuple_t* tuple, /* in: pointer to a data tuple or NULL */ dict_index_t* index, /* in: record descriptor */ rec_t* rec, /* in: pointer to a physical record or NULL */ + ulint* offsets,/* in: rec_get_offsets(rec, index) or NULL */ mtr_t* mtr); /* in: mini-transaction handle */ /***************************************************************** Copies records from page to a newly created page, from a given record onward, diff --git a/innobase/include/page0cur.ic b/innobase/include/page0cur.ic index 03010fbd766..e99d799b372 100644 --- a/innobase/include/page0cur.ic +++ b/innobase/include/page0cur.ic @@ -195,7 +195,7 @@ page_cur_tuple_insert( dict_index_t* index, /* in: record descriptor */ mtr_t* mtr) /* in: mini-transaction handle */ { - return(page_cur_insert_rec_low(cursor, tuple, index, NULL, mtr)); + return(page_cur_insert_rec_low(cursor, tuple, index, NULL, NULL, mtr)); } /*************************************************************** @@ -211,8 +211,10 @@ page_cur_rec_insert( page_cur_t* cursor, /* in: a page cursor */ rec_t* rec, /* in: record to insert */ dict_index_t* index, /* in: record descriptor */ + ulint* offsets,/* in: rec_get_offsets(rec, index) */ mtr_t* mtr) /* in: mini-transaction handle */ { - return(page_cur_insert_rec_low(cursor, NULL, index, rec, mtr)); + return(page_cur_insert_rec_low(cursor, NULL, index, rec, + offsets, mtr)); } diff --git a/innobase/include/rem0rec.h b/innobase/include/rem0rec.h index ab89b912523..2cc87a34f27 100644 --- a/innobase/include/rem0rec.h +++ b/innobase/include/rem0rec.h @@ -133,6 +133,27 @@ rec_set_status( rec_t* rec, /* in: physical record */ ulint bits); /* in: info bits */ +/********************************************************** +The following function is used to retrieve the info and status +bits of a record. (Only compact records have status bits.) */ +UNIV_INLINE +ulint +rec_get_info_and_status_bits( +/*==============*/ + /* out: info bits */ + rec_t* rec, /* in: physical record */ + ibool comp); /* in: TRUE=compact page format */ +/********************************************************** +The following function is used to set the info and status +bits of a record. (Only compact records have status bits.) */ +UNIV_INLINE +void +rec_set_info_and_status_bits( +/*==============*/ + rec_t* rec, /* in: physical record */ + ibool comp, /* in: TRUE=compact page format */ + ulint bits); /* in: info bits */ + /********************************************************** The following function tells if record is delete marked. */ UNIV_INLINE diff --git a/innobase/include/rem0rec.ic b/innobase/include/rem0rec.ic index 7d35e8e4110..f15e0fdffef 100644 --- a/innobase/include/rem0rec.ic +++ b/innobase/include/rem0rec.ic @@ -520,6 +520,53 @@ rec_set_status( REC_NEW_STATUS_MASK, REC_NEW_STATUS_SHIFT); } +/********************************************************** +The following function is used to retrieve the info and status +bits of a record. (Only compact records have status bits.) */ +UNIV_INLINE +ulint +rec_get_info_and_status_bits( +/*==============*/ + /* out: info bits */ + rec_t* rec, /* in: physical record */ + ibool comp) /* in: TRUE=compact page format */ +{ + ulint bits; +#if (REC_NEW_STATUS_MASK >> REC_NEW_STATUS_SHIFT) \ +& (REC_INFO_BITS_MASK >> REC_INFO_BITS_SHIFT) +# error "REC_NEW_STATUS_MASK and REC_INFO_BITS_MASK overlap" +#endif + if (comp) { + bits = rec_get_info_bits(rec, TRUE) | rec_get_status(rec); + } else { + bits = rec_get_info_bits(rec, FALSE); + ut_ad(!(bits & ~(REC_INFO_BITS_MASK >> REC_INFO_BITS_SHIFT))); + } + return(bits); +} +/********************************************************** +The following function is used to set the info and status +bits of a record. (Only compact records have status bits.) */ +UNIV_INLINE +void +rec_set_info_and_status_bits( +/*==============*/ + rec_t* rec, /* in: physical record */ + ibool comp, /* in: TRUE=compact page format */ + ulint bits) /* in: info bits */ +{ +#if (REC_NEW_STATUS_MASK >> REC_NEW_STATUS_SHIFT) \ +& (REC_INFO_BITS_MASK >> REC_INFO_BITS_SHIFT) +# error "REC_NEW_STATUS_MASK and REC_INFO_BITS_MASK overlap" +#endif + if (comp) { + rec_set_status(rec, bits & REC_NEW_STATUS_MASK); + } else { + ut_ad(!(bits & ~(REC_INFO_BITS_MASK >> REC_INFO_BITS_SHIFT))); + } + rec_set_info_bits(rec, bits & ~REC_NEW_STATUS_MASK, comp); +} + /********************************************************** The following function tells if record is delete marked. */ UNIV_INLINE diff --git a/innobase/page/page0cur.c b/innobase/page/page0cur.c index 53c3c573b8e..fc94fc4b1e0 100644 --- a/innobase/page/page0cur.c +++ b/innobase/page/page0cur.c @@ -605,8 +605,8 @@ page_cur_insert_rec_write_log( log_end = &log_ptr[5 + 1 + 5 + 5 + MLOG_BUF_MARGIN]; } - if ((rec_get_info_bits(insert_rec, index->table->comp) != - rec_get_info_bits(cursor_rec, index->table->comp)) + if ((rec_get_info_and_status_bits(insert_rec, index->table->comp) != + rec_get_info_and_status_bits(cursor_rec, index->table->comp)) || (extra_size != cur_extra_size) || (rec_size != cur_rec_size)) { @@ -622,7 +622,8 @@ page_cur_insert_rec_write_log( if (extra_info_yes) { /* Write the info bits */ mach_write_to_1(log_ptr, - rec_get_info_bits(insert_rec, index->table->comp)); + rec_get_info_and_status_bits(insert_rec, + index->table->comp)); log_ptr++; /* Write the record origin offset */ @@ -673,7 +674,7 @@ page_cur_parse_insert_rec( byte buf1[1024]; byte* buf; byte* ptr2 = ptr; - ulint info_bits = 0; /* remove warning */ + ulint info_and_status_bits = 0; /* remove warning */ page_cur_t cursor; mem_heap_t* heap = NULL; ulint offsets_[100] = { 100, }; @@ -723,7 +724,7 @@ page_cur_parse_insert_rec( return(NULL); } - info_bits = mach_read_from_1(ptr); + info_and_status_bits = mach_read_from_1(ptr); ptr++; ptr = mach_parse_compressed(ptr, end_ptr, &origin_offset); @@ -768,7 +769,8 @@ page_cur_parse_insert_rec( ULINT_UNDEFINED, &heap); if (extra_info_yes == 0) { - info_bits = rec_get_info_bits(cursor_rec, index->table->comp); + info_and_status_bits = rec_get_info_and_status_bits( + cursor_rec, index->table->comp); origin_offset = rec_offs_extra_size(offsets); mismatch_index = rec_offs_size(offsets) - end_seg_len; } @@ -783,11 +785,12 @@ page_cur_parse_insert_rec( if (mismatch_index >= UNIV_PAGE_SIZE) { fprintf(stderr, - "Is short %lu, info_bits %lu, offset %lu, " + "Is short %lu, info_and_status_bits %lu, offset %lu, " "o_offset %lu\n" "mismatch index %lu, end_seg_len %lu\n" "parsed len %lu\n", - (ulong) is_short, (ulong) info_bits, (ulong) offset, + (ulong) is_short, (ulong) info_and_status_bits, + (ulong) offset, (ulong) origin_offset, (ulong) mismatch_index, (ulong) end_seg_len, (ulong) (ptr - ptr2)); @@ -803,21 +806,14 @@ page_cur_parse_insert_rec( ut_memcpy(buf, rec_get_start(cursor_rec, offsets), mismatch_index); ut_memcpy(buf + mismatch_index, ptr, end_seg_len); - rec_set_info_bits(buf + origin_offset, index->table->comp, info_bits); - - /* Set the status bits for new-style records. */ - if (index->table->comp) { - /* Leaf pages (level 0) contain ordinary records; - non-leaf pages contain node pointer records. */ - ulint level = page_header_get_field( - buf_frame_align(cursor_rec), PAGE_LEVEL); - rec_set_status(buf + origin_offset, - level ? REC_STATUS_NODE_PTR : REC_STATUS_ORDINARY); - } + rec_set_info_and_status_bits(buf + origin_offset, index->table->comp, + info_and_status_bits); page_cur_position(cursor_rec, &cursor); - page_cur_rec_insert(&cursor, buf + origin_offset, index, mtr); + offsets = rec_get_offsets(buf + origin_offset, index, offsets, + ULINT_UNDEFINED, &heap); + page_cur_rec_insert(&cursor, buf + origin_offset, index, offsets, mtr); if (buf != buf1) { @@ -846,6 +842,7 @@ page_cur_insert_rec_low( dtuple_t* tuple, /* in: pointer to a data tuple or NULL */ dict_index_t* index, /* in: record descriptor */ rec_t* rec, /* in: pointer to a physical record or NULL */ + ulint* offsets,/* in: rec_get_offsets(rec, index) or NULL */ mtr_t* mtr) /* in: mini-transaction handle */ { byte* insert_buf = NULL; @@ -863,8 +860,6 @@ page_cur_insert_rec_low( rec_t* owner_rec; ulint n_owned; mem_heap_t* heap = NULL; - ulint offsets_[100] = { 100, }; - ulint* offsets = offsets_; ibool comp = index->table->comp; ut_ad(cursor && mtr); @@ -882,8 +877,11 @@ page_cur_insert_rec_low( if (tuple != NULL) { rec_size = rec_get_converted_size(index, tuple); } else { - offsets = rec_get_offsets(rec, index, offsets, + if (!offsets) { + offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); + } + ut_ad(rec_offs_validate(rec, index, offsets)); rec_size = rec_offs_size(offsets); } @@ -1131,8 +1129,6 @@ page_copy_rec_list_end_to_created_page( slot_index = 0; n_recs = 0; - heap = mem_heap_create(100); - /* should be do ... until, comment by Jani */ while (rec != page_get_supremum_rec(page)) { offsets = rec_get_offsets(rec, index, offsets, diff --git a/innobase/page/page0page.c b/innobase/page/page0page.c index d71c243e7c5..901c8cd0831 100644 --- a/innobase/page/page0page.c +++ b/innobase/page/page0page.c @@ -463,6 +463,9 @@ page_copy_rec_list_end_no_locks( page_cur_t cur1; page_cur_t cur2; rec_t* sup; + mem_heap_t* heap = NULL; + ulint offsets_[100] = { 100, }; + ulint* offsets = offsets_; page_cur_position(rec, &cur1); @@ -483,8 +486,11 @@ page_copy_rec_list_end_no_locks( sup = page_get_supremum_rec(page); while (sup != page_cur_get_rec(&cur1)) { - if (!page_cur_rec_insert(&cur2, - page_cur_get_rec(&cur1), index, mtr)) { + rec_t* cur1_rec = page_cur_get_rec(&cur1); + offsets = rec_get_offsets(cur1_rec, index, offsets, + ULINT_UNDEFINED, &heap); + if (!page_cur_rec_insert(&cur2, cur1_rec, index, + offsets, mtr)) { /* Track an assertion failure reported on the mailing list on June 18th, 2003 */ @@ -503,7 +509,11 @@ page_copy_rec_list_end_no_locks( page_cur_move_to_next(&cur1); page_cur_move_to_next(&cur2); } -} + + if (heap) { + mem_heap_free(heap); + } +} /***************************************************************** Copies records from page to new_page, from a given record onward, @@ -553,6 +563,9 @@ page_copy_rec_list_start( page_cur_t cur1; page_cur_t cur2; rec_t* old_end; + mem_heap_t* heap = NULL; + ulint offsets_[100] = { 100, }; + ulint* offsets = offsets_; page_cur_set_before_first(page, &cur1); @@ -570,8 +583,13 @@ page_copy_rec_list_start( /* Copy records from the original page to the new page */ while (page_cur_get_rec(&cur1) != rec) { - ut_a(page_cur_rec_insert(&cur2, - page_cur_get_rec(&cur1), index, mtr)); + rec_t* ins_rec; + rec_t* cur1_rec = page_cur_get_rec(&cur1); + offsets = rec_get_offsets(cur1_rec, index, offsets, + ULINT_UNDEFINED, &heap); + ins_rec = page_cur_rec_insert(&cur2, cur1_rec, index, + offsets, mtr); + ut_a(ins_rec); page_cur_move_to_next(&cur1); page_cur_move_to_next(&cur2); @@ -584,7 +602,11 @@ page_copy_rec_list_start( page_update_max_trx_id(new_page, page_get_max_trx_id(page)); btr_search_move_or_delete_hash_entries(new_page, page, index); -} + + if (heap) { + mem_heap_free(heap); + } +} /************************************************************** Writes a log record of a record list end or start deletion. */ From aa500975558344daf1c7952a31d20a505ec06ec3 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 13:08:21 +0100 Subject: [PATCH 50/62] updated logevent example added handling of Arbit log events ndb/examples/mgmapi_logevent_example/mgmapi_logevent.cpp: updated logevent example ndb/include/mgmapi/ndb_logevent.h: added comments added handling af aritration events ndb/src/mgmapi/ndb_logevent.cpp: added handling of Arit log events --- .../mgmapi_logevent.cpp | 76 ++++++++++++++----- ndb/include/mgmapi/ndb_logevent.h | 60 +++++++++++++++ ndb/src/mgmapi/ndb_logevent.cpp | 10 ++- 3 files changed, 124 insertions(+), 22 deletions(-) diff --git a/ndb/examples/mgmapi_logevent_example/mgmapi_logevent.cpp b/ndb/examples/mgmapi_logevent_example/mgmapi_logevent.cpp index abd8089a286..5ec1fba6314 100644 --- a/ndb/examples/mgmapi_logevent_example/mgmapi_logevent.cpp +++ b/ndb/examples/mgmapi_logevent_example/mgmapi_logevent.cpp @@ -42,8 +42,13 @@ int main() { NdbMgmHandle h; - NdbLogEventHandle l; - int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0 }; + NdbLogEventHandle le; + int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP, + 15, NDB_MGM_EVENT_CATEGORY_CONNECTION, + 15, NDB_MGM_EVENT_CATEGORY_NODE_RESTART, + 15, NDB_MGM_EVENT_CATEGORY_STARTUP, + 15, NDB_MGM_EVENT_CATEGORY_ERROR, + 0 }; struct ndb_logevent event; ndb_init(); @@ -56,48 +61,79 @@ int main() } if (ndb_mgm_connect(h,0,0,0)) MGMERROR(h); - l= ndb_mgm_create_logevent_handle(h, filter); - if ( l == 0 ) MGMERROR(h); + le= ndb_mgm_create_logevent_handle(h, filter); + if ( le == 0 ) MGMERROR(h); while (1) { int timeout= 5000; - int r= ndb_logevent_get_next(l,&event,timeout); + int r= ndb_logevent_get_next(le,&event,timeout); if (r == 0) printf("No event within %d milliseconds\n", timeout); else if (r < 0) - LOGEVENTERROR(l) + LOGEVENTERROR(le) else { - printf("Event %d from node ID %d\n", - event.type, - event.source_nodeid); - printf("Category %d, severity %d, level %d\n", - event.category, - event.severity, - event.level); switch (event.type) { case NDB_LE_BackupStarted: - printf("BackupStartded\n"); - printf("Starting node ID: %d\n", event.BackupStarted.starting_node); - printf("Backup ID: %d\n", event.BackupStarted.backup_id); + printf("Node %d: BackupStarted\n", event.source_nodeid); + printf(" Starting node ID: %d\n", event.BackupStarted.starting_node); + printf(" Backup ID: %d\n", event.BackupStarted.backup_id); break; case NDB_LE_BackupCompleted: - printf("BackupCompleted\n"); - printf("Backup ID: %d\n", event.BackupStarted.backup_id); + printf("Node %d: BackupCompleted\n", event.source_nodeid); + printf(" Backup ID: %d\n", event.BackupStarted.backup_id); break; case NDB_LE_BackupAborted: + printf("Node %d: BackupAborted\n", event.source_nodeid); break; case NDB_LE_BackupFailedToStart: + printf("Node %d: BackupFailedToStart\n", event.source_nodeid); break; + + case NDB_LE_NodeFailCompleted: + printf("Node %d: NodeFailCompleted\n", event.source_nodeid); + break; + case NDB_LE_ArbitResult: + printf("Node %d: ArbitResult\n", event.source_nodeid); + printf(" code %d, arbit_node %d\n", + event.ArbitResult.code & 0xffff, + event.ArbitResult.arbit_node); + break; + case NDB_LE_DeadDueToHeartbeat: + printf("Node %d: DeadDueToHeartbeat\n", event.source_nodeid); + printf(" node %d\n", event.DeadDueToHeartbeat.node); + break; + + case NDB_LE_Connected: + printf("Node %d: Connected\n", event.source_nodeid); + printf(" node %d\n", event.Connected.node); + break; + case NDB_LE_Disconnected: + printf("Node %d: Disconnected\n", event.source_nodeid); + printf(" node %d\n", event.Disconnected.node); + break; + case NDB_LE_NDBStartCompleted: + printf("Node %d: StartCompleted\n", event.source_nodeid); + printf(" version %d.%d.%d\n", + event.NDBStartCompleted.version >> 16 & 0xff, + event.NDBStartCompleted.version >> 8 & 0xff, + event.NDBStartCompleted.version >> 0 & 0xff); + break; + case NDB_LE_ArbitState: + printf("Node %d: ArbitState\n", event.source_nodeid); + printf(" code %d, arbit_node %d\n", + event.ArbitState.code & 0xffff, + event.ArbitResult.arbit_node); + break; + default: - printf("Unexpected event\n"); break; } } } - ndb_mgm_destroy_logevent_handle(&l); + ndb_mgm_destroy_logevent_handle(&le); ndb_mgm_destroy_handle(&h); ndb_end(0); return 0; diff --git a/ndb/include/mgmapi/ndb_logevent.h b/ndb/include/mgmapi/ndb_logevent.h index 3ca744bcc2e..d5744b0fffe 100644 --- a/ndb/include/mgmapi/ndb_logevent.h +++ b/ndb/include/mgmapi/ndb_logevent.h @@ -286,101 +286,125 @@ extern "C" { */ union { /* CONNECT */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } Connected; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } Disconnected; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } CommunicationClosed; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } CommunicationOpened; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; unsigned version; } ConnectedApiVersion; /* CHECKPOINT */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned gci; } GlobalCheckpointStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned gci; } GlobalCheckpointCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned lci; unsigned keep_gci; unsigned restore_gci; } LocalCheckpointStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned lci; } LocalCheckpointCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned data; } LCPStoppedInCalcKeepGci; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; unsigned table_id; unsigned fragment_id; } LCPFragmentCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned acc_count; unsigned tup_count; } UndoLogBlocked; /* STARTUP */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned version; } NDBStartStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned version; } NDBStartCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } STTORRYRecieved; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned phase; unsigned starttype; } StartPhaseCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned own_id; unsigned president_id; unsigned dynamic_id; } CM_REGCONF; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned own_id; unsigned other_id; unsigned cause; } CM_REGREF; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned own_id; unsigned left_id; unsigned right_id; unsigned dynamic_id; } FIND_NEIGHBOURS; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned stoptype; } NDBStopStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } NDBStopAborted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; unsigned keep_gci; unsigned completed_gci; unsigned restorable_gci; } StartREDOLog; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned log_part; unsigned start_mb; unsigned stop_mb; unsigned gci; } StartLog; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned block; unsigned data1; @@ -396,48 +420,70 @@ extern "C" { } UNDORecordsExecuted; /* NODERESTART */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } NR_CopyDict; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } NR_CopyDistr; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned dest_node; } NR_CopyFragsStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned dest_node; unsigned table_id; unsigned fragment_id; } NR_CopyFragDone; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned dest_node; } NR_CopyFragsCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned block; /* 0 = all */ unsigned failed_node; unsigned completing_node; /* 0 = all */ } NodeFailCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned failed_node; unsigned failure_state; } NODE_FAILREP; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { + unsigned code; /* code & state << 16 */ + unsigned arbit_node; + unsigned ticket_0; + unsigned ticket_1; /* TODO */ } ArbitState; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { + unsigned code; /* code & state << 16 */ + unsigned arbit_node; + unsigned ticket_0; + unsigned ticket_1; /* TODO */ } ArbitResult; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } GCP_TakeoverStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } GCP_TakeoverCompleted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { } LCP_TakeoverStarted; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned state; } LCP_TakeoverCompleted; /* STATISTIC */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned trans_count; unsigned commit_count; @@ -450,23 +496,29 @@ extern "C" { unsigned scan_count; unsigned range_scan_count; } TransReportCounters; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned ops; } OperationReportCounters; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned table_id; } TableCreated; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned mean_loop_count; } JobStatistic; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned to_node; unsigned mean_sent_bytes; } SendBytesStatistic; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned from_node; unsigned mean_received_bytes; } ReceiveBytesStatistic; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { int gth; unsigned page_size_kb; @@ -476,32 +528,40 @@ extern "C" { } MemoryUsage; /* ERROR */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned to_node; unsigned code; } TransporterError; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned to_node; unsigned code; } TransporterWarning; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; unsigned count; } MissedHeartbeat; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } DeadDueToHeartbeat; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { /* TODO */ } WarningEvent; /* INFO */ + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } SentHeartbeat; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { unsigned node; } CreateLogBytes; + /** Log event specific data for for corresponding NDB_LE_ log event */ struct { /* TODO */ } InfoEvent; diff --git a/ndb/src/mgmapi/ndb_logevent.cpp b/ndb/src/mgmapi/ndb_logevent.cpp index 89ca9a50883..2817abcfdbb 100644 --- a/ndb/src/mgmapi/ndb_logevent.cpp +++ b/ndb/src/mgmapi/ndb_logevent.cpp @@ -197,10 +197,16 @@ struct Ndb_logevent_body_row ndb_logevent_body[]= { ROW( NODE_FAILREP, "failure_state", 2, failure_state), /* TODO */ -// ROW( ArbitState), + ROW( ArbitState, "code", 1, code), + ROW( ArbitState, "arbit_node", 2, arbit_node), + ROW( ArbitState, "ticket_0", 3, ticket_0), + ROW( ArbitState, "ticket_1", 4, ticket_1), /* TODO */ -// ROW( ArbitResult), + ROW( ArbitResult, "code", 1, code), + ROW( ArbitResult, "arbit_node", 2, arbit_node), + ROW( ArbitResult, "ticket_0", 3, ticket_0), + ROW( ArbitResult, "ticket_1", 4, ticket_1), // ROW( GCP_TakeoverStarted), From b7c59b9e2266f35dbaa60f8fd2ffa371bbfc46b6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 14:16:41 +0200 Subject: [PATCH 51/62] InnoDB: Enable ut_ad() assertions in MySQL debug builds. innobase/include/univ.i: InnoDB: Define UNIV_DEBUG when DBUG_ON (in MySQL) is defined. This enables InnoDB debug assertions in debug builds of mysqld. --- innobase/include/univ.i | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/innobase/include/univ.i b/innobase/include/univ.i index 4854e5a7b78..12846593977 100644 --- a/innobase/include/univ.i +++ b/innobase/include/univ.i @@ -86,8 +86,10 @@ memory is read outside the allocated blocks. */ /* Make a non-inline debug version */ +#ifdef DBUG_ON +# define UNIV_DEBUG +#endif /* DBUG_ON */ /* -#define UNIV_DEBUG #define UNIV_SYNC_DEBUG #define UNIV_MEM_DEBUG From 65a0093dc9b5beed0cbc0e62a9a9fa867fa36e50 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 16:29:24 +0400 Subject: [PATCH 52/62] Makefile.am: after merge fix tests/Makefile.am: after merge fix --- tests/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index e66637de0aa..b4dda0ab6e8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -36,9 +36,9 @@ INCLUDES = -I$(top_srcdir)/include $(openssl_includes) LIBS = @CLIENT_LIBS@ LDADD = @CLIENT_EXTRA_LDFLAGS@ \ $(top_builddir)/libmysql/libmysqlclient.la -client_test_LDADD= $(LDADD) $(CXXLDFLAGS) \ +mysql_client_test_LDADD= $(LDADD) $(CXXLDFLAGS) \ $(top_builddir)/mysys/libmysys.a -client_test_SOURCES= mysql_client_test.c +mysql_client_test_SOURCES= mysql_client_test.c insert_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) select_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) From 892adb947e1f401e186289609c9b081712c9b331 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 14:49:30 +0200 Subject: [PATCH 53/62] =?UTF-8?q?One=20more=20after=20merge=20fix=20of=20J?= =?UTF-8?q?an=20Lindstr=C3=B6m's=20changeset=20in=204.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit innobase/row/row0ins.c: One more after merge fix --- innobase/row/row0ins.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/innobase/row/row0ins.c b/innobase/row/row0ins.c index f1f1f45821a..aab0f5affa7 100644 --- a/innobase/row/row0ins.c +++ b/innobase/row/row0ins.c @@ -1285,9 +1285,9 @@ run_again: into gaps */ err = row_ins_set_shared_rec_lock( - LOCK_REC_NOT_GAP, - rec, check_index, thr); - + LOCK_REC_NOT_GAP, rec, + check_index, offsets, thr); + if (err != DB_SUCCESS) { break; From 8fd38c7ab38bac89ca3d8addecec0e1cc19bcf28 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 15:08:51 +0100 Subject: [PATCH 54/62] Fix for failing INSERT IGNORE in test ndb_insert --- sql/sql_insert.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 92c429bcfde..844e5e7dac2 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -241,7 +241,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, error=0; id=0; thd->proc_info="update"; - if (duplic != DUP_ERROR) + if (duplic != DUP_ERROR || ignore) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); /* let's *try* to start bulk inserts. It won't necessary @@ -380,7 +380,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, table->next_number_field=0; thd->count_cuted_fields= CHECK_FIELD_IGNORE; thd->next_insert_id=0; // Reset this if wrongly used - if (duplic != DUP_ERROR) + if (duplic != DUP_ERROR || ignore) table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); /* Reset value of LAST_INSERT_ID if no rows where inserted */ @@ -1345,7 +1345,7 @@ bool delayed_insert::handle_inserts(void) info.ignore= row->ignore; info.handle_duplicates= row->dup; if (info.ignore || - info.handle_duplicates == DUP_REPLACE) + info.handle_duplicates != DUP_ERROR) { table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); using_ignore=1; @@ -1463,7 +1463,7 @@ select_insert::prepare(List &values, SELECT_LEX_UNIT *u) table->next_number_field=table->found_next_number_field; thd->cuted_fields=0; if (info.ignore || - info.handle_duplicates == DUP_REPLACE) + info.handle_duplicates != DUP_ERROR) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); table->file->start_bulk_insert((ha_rows) 0); DBUG_RETURN(0); @@ -1649,7 +1649,7 @@ select_create::prepare(List &values, SELECT_LEX_UNIT *u) restore_record(table,default_values); // Get empty record thd->cuted_fields=0; if (info.ignore || - info.handle_duplicates == DUP_REPLACE) + info.handle_duplicates != DUP_ERROR) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); table->file->start_bulk_insert((ha_rows) 0); DBUG_RETURN(0); From fec9018eff353a7811eed38d2ffc23e3652cbd7f Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 17:25:46 +0300 Subject: [PATCH 55/62] Fix two typos in comments. sql/sql_parse.cc: Fix a comment. sql/sql_select.cc: Fix a comment. --- sql/sql_parse.cc | 2 +- sql/sql_select.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 4bd6acce499..c0bcaf771a5 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5377,7 +5377,7 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, Initialize a new table list for a nested join SYNOPSIS - init_table_list() + init_nested_join() thd current thread DESCRIPTION diff --git a/sql/sql_select.cc b/sql/sql_select.cc index d6e725341fe..dd1ac332df9 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -12962,7 +12962,7 @@ static void print_join(THD *thd, String *str, List *tables) { TABLE_LIST *curr= *tbl; if (curr->outer_join) - str->append(" left join ", 11); // MySQL converg right to left joins + str->append(" left join ", 11); // MySQL converts right to left joins else if (curr->straight) str->append(" straight_join ", 15); else From e749259da6e32ee6035d41bc44b1ae8d4b30a443 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 15:56:20 +0100 Subject: [PATCH 56/62] ndb - Move mysql-test-run & testBackup into "basic suite" ndb/test/run-test/atrt-mysql-test-run: Fix result handling ndb/test/run-test/daily-basic-tests.txt: Move mysql-test-run & testBackup into "basic" ndb/test/run-test/daily-devel-tests.txt: Move mysql-test-run & testBackup into "basic" --- ndb/test/run-test/atrt-mysql-test-run | 4 ++-- ndb/test/run-test/daily-basic-tests.txt | 8 ++++++++ ndb/test/run-test/daily-devel-tests.txt | 8 -------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ndb/test/run-test/atrt-mysql-test-run b/ndb/test/run-test/atrt-mysql-test-run index dd7b709bd06..2ebc11b0070 100755 --- a/ndb/test/run-test/atrt-mysql-test-run +++ b/ndb/test/run-test/atrt-mysql-test-run @@ -5,8 +5,8 @@ p=`pwd` cd $MYSQL_BASE_DIR/mysql-test ./mysql-test-run --with-ndbcluster --ndb-connectstring=$NDB_CONNECTSTRING $* | tee $p/output.txt -f=`grep -c fail $p/output.txt` -o=`grep -c pass $p/output.txt` +f=`grep -c '\[ fail \]' $p/output.txt` +o=`grep -c '\[ pass \]' $p/output.txt` if [ $o -gt 0 -a $f -eq 0 ] then diff --git a/ndb/test/run-test/daily-basic-tests.txt b/ndb/test/run-test/daily-basic-tests.txt index 8a927b88194..87f86795370 100644 --- a/ndb/test/run-test/daily-basic-tests.txt +++ b/ndb/test/run-test/daily-basic-tests.txt @@ -1,3 +1,11 @@ +max-time: 25000 +cmd: atrt-mysql-test-run +args: --force + +max-time: 600 +cmd: atrt-testBackup +args: -n BackupOne T1 T6 T3 I3 + # BASIC FUNCTIONALITY max-time: 500 cmd: testBasic diff --git a/ndb/test/run-test/daily-devel-tests.txt b/ndb/test/run-test/daily-devel-tests.txt index 5c0b2821d85..5c9b36fb836 100644 --- a/ndb/test/run-test/daily-devel-tests.txt +++ b/ndb/test/run-test/daily-devel-tests.txt @@ -1,7 +1,3 @@ -max-time: 2500 -cmd: atrt-mysql-test-run -args: --do-test=ndb --force - # # INDEX # @@ -22,10 +18,6 @@ args: -n CreateLoadDrop T1 T10 # # BACKUP # -max-time: 600 -cmd: atrt-testBackup -args: -n BackupOne T1 T6 T3 I3 - max-time: 1000 cmd: atrt-testBackup args: -n BackupBank T6 From a2fdebaa8db68227b7d30d90dc8a9fc818cf5ddb Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 18:32:09 +0200 Subject: [PATCH 57/62] Some bug fixes and a feature add to mysql-test-run client/mysql.cc: Fixed Bug#981 ".mysql_history is lost if mysql clinent exit when out of space" client/mysqlbinlog.cc: Fix for mysqlbinlog, mysql_close() needs to be called. libmysql/Makefile.shared: Added use of my_rename() mysql-test/mysql-test-run.sh: Added possibility to add file t/testname.disabled. This will disable a test with same base name. Additionally, if the .disabled file contains text, it will be appended as a comment after the test during run. --- client/mysql.cc | 14 ++++++++++++-- client/mysqlbinlog.cc | 8 +++++++- libmysql/Makefile.shared | 5 +++-- mysql-test/mysql-test-run.sh | 17 +++++++++++++++++ mysql-test/t/federated.disabled | 1 + 5 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 mysql-test/t/federated.disabled diff --git a/client/mysql.cc b/client/mysql.cc index bbba5be1cdf..046cba536be 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -44,7 +44,7 @@ #include #endif -const char *VER= "14.7"; +const char *VER= "14.8"; /* Don't try to make a nice table if the data is too big */ #define MAX_COLUMN_LENGTH 1024 @@ -144,6 +144,7 @@ static char *current_host,*current_db,*current_user=0,*opt_password=0, *current_prompt=0, *delimiter_str= 0, *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; static char *histfile; +static char *histfile_tmp; static String glob_buffer,old_buffer; static String processed_prompt; static char *full_username=0,*part_username=0,*default_prompt=0; @@ -442,6 +443,13 @@ int main(int argc,char *argv[]) if (verbose) tee_fprintf(stdout, "Reading history-file %s\n",histfile); read_history(histfile); + if (!(histfile_tmp= (char*) my_malloc((uint) strlen(histfile) + 5, + MYF(MY_WME)))) + { + fprintf(stderr, "Couldn't allocate memory for temp histfile!\n"); + exit(1); + } + sprintf(histfile_tmp, "%s.TMP", histfile); } } #endif @@ -470,7 +478,8 @@ sig_handler mysql_end(int sig) /* write-history */ if (verbose) tee_fprintf(stdout, "Writing history-file %s\n",histfile); - write_history(histfile); + if (!write_history(histfile_tmp)) + my_rename(histfile_tmp, histfile, MYF(MY_WME)); } batch_readline_end(status.line_buff); completion_hash_free(&ht); @@ -485,6 +494,7 @@ sig_handler mysql_end(int sig) my_free(opt_password,MYF(MY_ALLOW_ZERO_PTR)); my_free(opt_mysql_unix_port,MYF(MY_ALLOW_ZERO_PTR)); my_free(histfile,MYF(MY_ALLOW_ZERO_PTR)); + my_free(histfile_tmp,MYF(MY_ALLOW_ZERO_PTR)); my_free(current_db,MYF(MY_ALLOW_ZERO_PTR)); my_free(current_host,MYF(MY_ALLOW_ZERO_PTR)); my_free(current_user,MYF(MY_ALLOW_ZERO_PTR)); diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 6917797c03c..45daa64705a 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -780,7 +780,13 @@ static int check_master_version(MYSQL* mysql, if (mysql_query(mysql, "SELECT VERSION()") || !(res = mysql_store_result(mysql))) - die("Error checking master version: %s", mysql_error(mysql)); + { + char errmsg[FN_REFLEN]; + + strmake(errmsg, mysql_error(mysql), sizeof(errmsg) - 1); + mysql_close(mysql); + die("Error checking master version: %s", errmsg); + } if (!(row = mysql_fetch_row(res))) { mysql_free_result(res); diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared index c5dc1de0c5a..50dedebe119 100644 --- a/libmysql/Makefile.shared +++ b/libmysql/Makefile.shared @@ -65,8 +65,9 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \ my_compress.lo array.lo my_once.lo list.lo my_net.lo \ charset.lo charset-def.lo hash.lo mf_iocache.lo \ mf_iocache2.lo my_seek.lo my_sleep.lo \ - my_pread.lo mf_cache.lo md5.lo sha1.lo\ - my_getopt.lo my_gethostbyname.lo my_port.lo + my_pread.lo mf_cache.lo md5.lo sha1.lo \ + my_getopt.lo my_gethostbyname.lo my_port.lo \ + my_rename.lo sqlobjects = net.lo sql_cmn_objects = pack.lo client.lo my_time.lo diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 1e10ee97e40..1145b7e0948 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -765,6 +765,17 @@ skip_test() { $ECHO "$RES$RES_SPACE [ skipped ]" } + +disable_test() { + USERT=" ...." + SYST=" ...." + REALT=" ...." + pname=`$ECHO "$1 "|$CUT -c 1-24` + RES="$pname" + skip_inc + $ECHO "$RES$RES_SPACE [ disabled ] $2" +} + report_stats () { if [ $TOT_FAIL = 0 ]; then $ECHO "All $TOT_TEST tests were successful." @@ -1411,6 +1422,12 @@ run_testcase () if [ -n "$RESULT_EXT" -a \( x$RECORD = x1 -o -f "$result_file$RESULT_EXT" \) ] ; then result_file="$result_file$RESULT_EXT" fi + if [ -e "$TESTDIR/$tname.disabled" ] + then + comment=`$CAT $TESTDIR/$tname.disabled`; + disable_test $tname "$comment" + return + fi if [ "$USE_MANAGER" = 1 ] ; then many_slaves=`$EXPR \( \( $tname : rpl_failsafe \) != 0 \) \| \( \( $tname : rpl_chain_temp_table \) != 0 \)` fi diff --git a/mysql-test/t/federated.disabled b/mysql-test/t/federated.disabled new file mode 100644 index 00000000000..5ad728b6f10 --- /dev/null +++ b/mysql-test/t/federated.disabled @@ -0,0 +1 @@ +Patrick Galbraith should fix this From 026dacc1acb3e8454d6099e503560289e1343de8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 20:08:16 +0200 Subject: [PATCH 58/62] Some minor fixes. mysql-test/mysql-test-run.sh: Less restricted permissions. mysql-test/r/rpl_rotate_logs.result: If the path where mysql-test-run was run was symlinked, this test could fail. This is a fix. mysql-test/t/rpl_rotate_logs.test: If the path where mysql-test-run was run was symlinked, this test could fail. This is a fix. --- mysql-test/mysql-test-run.sh | 7 +++++++ mysql-test/r/rpl_rotate_logs.result | 2 +- mysql-test/t/rpl_rotate_logs.test | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 1145b7e0948..1e3052de8e8 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -198,6 +198,13 @@ LD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$LD_LIBRARY_PATH" DYLD_LIBRARY_PATH="$BASEDIR/lib:$BASEDIR/libmysql/.libs:$DYLD_LIBRARY_PATH" export LD_LIBRARY_PATH DYLD_LIBRARY_PATH +# +# Allow anyone in the group to see the generated database files +# +UMASK=0660 +UMASK_DIR=0770 +export UMASK UMASK_DIR + MASTER_RUNNING=0 MASTER1_RUNNING=0 MASTER_MYPORT=9306 diff --git a/mysql-test/r/rpl_rotate_logs.result b/mysql-test/r/rpl_rotate_logs.result index cfd296fd44b..b1847636790 100644 --- a/mysql-test/r/rpl_rotate_logs.result +++ b/mysql-test/r/rpl_rotate_logs.result @@ -1,7 +1,7 @@ drop table if exists t1, t2, t3, t4; drop table if exists t1, t2, t3, t4; start slave; -ERROR HY000: File 'TESTDIR/var/slave-data/master.info' not found (Errcode: 13) +Got one of the listed errors start slave; ERROR HY000: Could not initialize master info structure; more error messages can be found in the MySQL error log change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; diff --git a/mysql-test/t/rpl_rotate_logs.test b/mysql-test/t/rpl_rotate_logs.test index 63ddf495347..2b5c72d16d2 100644 --- a/mysql-test/t/rpl_rotate_logs.test +++ b/mysql-test/t/rpl_rotate_logs.test @@ -24,7 +24,7 @@ drop table if exists t1, t2, t3, t4; # START SLAVE will fail because it can't read the file (mode 000) # (system error 13) --replace_result $MYSQL_TEST_DIR TESTDIR ---error 1105 +--error 1105,1105 start slave; system chmod 600 var/slave-data/master.info; # It will fail again because the file is empty so the slave cannot get valuable From 6975ce41d7f4b0d8299094259941c6e84628f7b5 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 22:40:20 +0200 Subject: [PATCH 59/62] rem0rec.h: Corrected formatting of comments. rem0rec.ic: rec_set_info_and_status_bits(): pass arguments to rec_set_info_bits() in the correct order. Corrected formatting of comments. innobase/include/rem0rec.ic: rec_set_info_and_status_bits(): pass arguments to rec_set_info_bits() in the correct order. Corrected formatting of comments. innobase/include/rem0rec.h: Corrected formatting of comments. --- innobase/include/rem0rec.h | 4 ++-- innobase/include/rem0rec.ic | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/innobase/include/rem0rec.h b/innobase/include/rem0rec.h index 2cc87a34f27..c430def684a 100644 --- a/innobase/include/rem0rec.h +++ b/innobase/include/rem0rec.h @@ -139,7 +139,7 @@ bits of a record. (Only compact records have status bits.) */ UNIV_INLINE ulint rec_get_info_and_status_bits( -/*==============*/ +/*=========================*/ /* out: info bits */ rec_t* rec, /* in: physical record */ ibool comp); /* in: TRUE=compact page format */ @@ -149,7 +149,7 @@ bits of a record. (Only compact records have status bits.) */ UNIV_INLINE void rec_set_info_and_status_bits( -/*==============*/ +/*=========================*/ rec_t* rec, /* in: physical record */ ibool comp, /* in: TRUE=compact page format */ ulint bits); /* in: info bits */ diff --git a/innobase/include/rem0rec.ic b/innobase/include/rem0rec.ic index f15e0fdffef..ca69b9ca871 100644 --- a/innobase/include/rem0rec.ic +++ b/innobase/include/rem0rec.ic @@ -564,7 +564,7 @@ rec_set_info_and_status_bits( } else { ut_ad(!(bits & ~(REC_INFO_BITS_MASK >> REC_INFO_BITS_SHIFT))); } - rec_set_info_bits(rec, bits & ~REC_NEW_STATUS_MASK, comp); + rec_set_info_bits(rec, comp, bits & ~REC_NEW_STATUS_MASK); } /********************************************************** From 56bf2ce986d6a41e0b8359d3f60d77d949a0e597 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Jan 2005 23:52:47 -0800 Subject: [PATCH 60/62] change to Makefile.am per Serg's request libmysqld/examples/Makefile.am: Change to Makefile.pm per serg's request, was to go out with federated push, but this fix is needed asap for Lenz. This has passed 'make test' --- libmysqld/examples/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index b94d2db2912..d70d7330e55 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -29,7 +29,7 @@ mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \ mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) mysql_client_test_embedded_LINK = $(CXXLINK) -mysql_client_test_embedded_SOURCES = $(top_srcdir)/tests/mysql_client_test.c +mysql_client_test_embedded_SOURCES = mysql_client_test.c clean: rm -f $(client_sources) From 979ec6afde95aa802ec3769e637c9d0e15450165 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Jan 2005 10:32:56 +0100 Subject: [PATCH 61/62] ndb - make sure all used tables are dropped in beginning of test case mysql-test/t/ndb_index_unique.test: Drop table t8 in beginning of test as it's used --- mysql-test/t/ndb_index_unique.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/t/ndb_index_unique.test b/mysql-test/t/ndb_index_unique.test index f235d1ffc30..d585ac107bc 100644 --- a/mysql-test/t/ndb_index_unique.test +++ b/mysql-test/t/ndb_index_unique.test @@ -1,7 +1,7 @@ -- source include/have_ndb.inc --disable_warnings -drop table if exists t1, t2, t3, t4, t5, t6, t7; +drop table if exists t1, t2, t3, t4, t5, t6, t7, t8; --enable_warnings # From 02f42e3c32cfc7e76e91f6823c123f6da2cb33ce Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Jan 2005 11:23:43 +0100 Subject: [PATCH 62/62] ndb - make sure all used tables are dropped in beginning of test case mysql-test/r/ndb_index_unique.result: Fix result file for unique test --- mysql-test/r/ndb_index_unique.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/r/ndb_index_unique.result b/mysql-test/r/ndb_index_unique.result index f9cc89ee4cc..d9397ad42e1 100644 --- a/mysql-test/r/ndb_index_unique.result +++ b/mysql-test/r/ndb_index_unique.result @@ -1,4 +1,4 @@ -drop table if exists t1, t2, t3, t4, t5, t6, t7; +drop table if exists t1, t2, t3, t4, t5, t6, t7, t8; CREATE TABLE t1 ( a int unsigned NOT NULL PRIMARY KEY, b int unsigned not null,