From 7f8b23344a0a4031098d2b543269d3ae07ff0200 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 14 Jul 2005 17:33:35 +1000 Subject: [PATCH 1/5] BUG#11384 drop database causes mysqld to core Only reproducable in 5.1-wl2325, although the missing code is missing from 4.0 and up. sql/slave.cc: Clean up after slave sql thread when exiting. Wasn't calling close_thread_tables(). This was causing a crashing bug in the 5.1-wl2325 tree. It is conceivable that this could cause a problem in earlier versions, but we have not been able to reproduce. --- sql/slave.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/slave.cc b/sql/slave.cc index b0f911e7013..6132d334dbb 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2721,6 +2721,7 @@ err: net_end(&thd->net); // destructor will not free it, because net.vio is 0 pthread_mutex_lock(&LOCK_thread_count); THD_CHECK_SENTRY(thd); + close_thread_tables(thd); delete thd; pthread_mutex_unlock(&LOCK_thread_count); pthread_cond_broadcast(&mi->stop_cond); // tell the world we are done From 300d34124c0d3e9e2e55651fe349dacea62baf6d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 19 Jul 2005 16:48:12 +0500 Subject: [PATCH 2/5] ctype_utf8.result, ctype_utf8.test: added test case ctype-utf8.c: bug#11754: SET NAMES utf8 followed by SELECT "A\\" LIKE "A\\" returns 0 strings/ctype-utf8.c: bug#11754: SET NAMES utf8 followed by SELECT "A\\" LIKE "A\\" returns 0 mysql-test/t/ctype_utf8.test: added test case mysql-test/r/ctype_utf8.result: added test case --- mysql-test/r/ctype_utf8.result | 39 ++++++++++++++++++++++++++++++++++ mysql-test/t/ctype_utf8.test | 21 ++++++++++++++++++ strings/ctype-utf8.c | 18 +++++++++------- 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index 150c06840c6..bb3222ca98b 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -954,6 +954,45 @@ char_length(a) length(a) a 2 2 12 2 4 ан drop table t1; +set names utf8; +select 'a\\' like 'a\\'; +'a\\' like 'a\\' +1 +select 'aa\\' like 'a%\\'; +'aa\\' like 'a%\\' +1 +create table t1 (a char(10), key(a)) character set utf8; +insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); +select * from t1 where a like "abc%"; +a +abc +abcd +select * from t1 where a like concat("abc","%"); +a +abc +abcd +select * from t1 where a like "ABC%"; +a +abc +abcd +select * from t1 where a like "test%"; +a +test +select * from t1 where a like "te_t"; +a +test +select * from t1 where a like "%a%"; +a +a +abc +abcd +select * from t1 where a like "%abcd%"; +a +abcd +select * from t1 where a like "%abc\d%"; +a +abcd +drop table t1; CREATE TABLE t1 ( a varchar(255) NOT NULL default '', KEY a (a) diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index a135c8e409d..de31ca79bde 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -810,6 +810,27 @@ alter table t1 modify a char(2) character set utf8; select char_length(a), length(a), a from t1 order by a; drop table t1; + +# +# Bugs#11754: SET NAMES utf8 followed by SELECT "A\\" LIKE "A\\" returns 0 +# +set names utf8; +select 'a\\' like 'a\\'; +select 'aa\\' like 'a%\\'; + +create table t1 (a char(10), key(a)) character set utf8; +insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); +select * from t1 where a like "abc%"; +select * from t1 where a like concat("abc","%"); +select * from t1 where a like "ABC%"; +select * from t1 where a like "test%"; +select * from t1 where a like "te_t"; +select * from t1 where a like "%a%"; +select * from t1 where a like "%abcd%"; +select * from t1 where a like "%abc\d%"; +drop table t1; + + # # Bug#9557 MyISAM utf8 table crash # diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index f5192b26ce2..205701e87c7 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -1557,7 +1557,7 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, } wildstr+= scan; - if (w_wc == (my_wc_t)escape) + if (w_wc == (my_wc_t)escape && wildstr < wildend) { if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <= 0) @@ -1629,13 +1629,17 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <=0) return 1; + wildstr+= scan; if (w_wc == (my_wc_t)escape) { - wildstr+= scan; - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <=0) - return 1; + if (wildstr < wildend) + { + if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, + (const uchar*)wildend)) <=0) + return 1; + wildstr+= scan; + } } while (1) @@ -1661,14 +1665,12 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, if (str == str_end) return -1; + str+= scan; result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one, w_many, weights); - if (result <= 0) return result; - - str+= scan; } } } From be45e3a0f1d06fc60bba5c8a5baa07236d7a76ce Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 21 Jul 2005 17:17:46 +0500 Subject: [PATCH 3/5] Fix for bug #12042 (User breakpoints calling free() in embedded library) VC++Files/libmysqld/libmysqld.dsp: we should have SAFEMALLOC here --- VC++Files/libmysqld/libmysqld.dsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp index 7d393d5fb63..2d6800de9dc 100644 --- a/VC++Files/libmysqld/libmysqld.dsp +++ b/VC++Files/libmysqld/libmysqld.dsp @@ -71,8 +71,8 @@ LINK32=xilink6.exe # PROP Intermediate_Dir "debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "SAFEMALLOC" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /D "WIN32" /D "SAFEMALLOC" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "_DEBUG" From 606c22ac76c298ec46459f3086e3f1037b10283a Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 22 Jul 2005 04:11:45 +0200 Subject: [PATCH 4/5] Applied and tested this patch successfully (bug 10431) to a clean tree on brian's amd 64 box (which was already approved). [patg@zim mysql-5.0]$ bk changes ChangeSet@1.1882, 2005-07-21 18:43:55+05:00, gluh@eagle.intranet.mysql.r18.ru merge fix Was the changeset level I applied this patch to. Master shutdown finished Slave shutdown finished All 326 tests were successful. [patg@zim mysql-5.0]$ client/mysqldump.c: This is a fresh application of Magnus Svensson's patch for bug 10431 mysql-test/r/mysqldump.result: Fresh application of Magnus Svensson's patch for bug 10431 mysql-test/t/mysqldump.test: fresh application of Magnus Svensson's patch for bug 10431 --- client/mysqldump.c | 37 +++++++- mysql-test/r/mysqldump.result | 172 ++++++++++++++++++++++++++++++++++ mysql-test/t/mysqldump.test | 45 +++++++++ 3 files changed, 253 insertions(+), 1 deletion(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 4186c19db4d..be9eb5ef58b 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -86,7 +86,8 @@ static my_bool verbose=0,tFlag=0,dFlag=0,quick= 1, extended_insert= 1, opt_delete_master_logs=0, tty_password=0, opt_single_transaction=0, opt_comments= 0, opt_compact= 0, opt_hex_blob=0, opt_order_by_primary=0, opt_ignore=0, - opt_complete_insert= 0, opt_drop_database= 0; + opt_complete_insert= 0, opt_drop_database= 0, + opt_dump_triggers= 0; static ulong opt_max_allowed_packet, opt_net_buffer_length; static MYSQL mysql_connection,*sock=0; static my_bool insert_pat_inited=0; @@ -371,6 +372,9 @@ static struct my_option my_long_options[] = (gptr*) &path, (gptr*) &path, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"tables", OPT_TABLES, "Overrides option --databases (-B).", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"triggers", '/0', "Dump triggers for each dumped table", + (gptr*) &opt_dump_triggers, (gptr*) &opt_dump_triggers, 0, GET_BOOL, + NO_ARG, 1, 0, 0, 0, 0, 0}, #ifndef DONT_ALLOW_USER_CHANGE {"user", 'u', "User for login if not current user.", (gptr*) ¤t_user, (gptr*) ¤t_user, 0, GET_STR, REQUIRED_ARG, @@ -1315,6 +1319,37 @@ static uint get_table_structure(char *table, char *db) fprintf(sql_file, "%s;\n", row[1]); check_io(sql_file); mysql_free_result(tableRes); + if (opt_dump_triggers && + mysql_get_server_version(sock) >= 50009) + { + my_snprintf(query_buff, sizeof(query_buff), + "SHOW TRIGGERS LIKE %s", + quote_for_like(table, name_buff)); + + + if (mysql_query_with_error_report(sock, &tableRes, query_buff)) + { + if (path) + my_fclose(sql_file, MYF(MY_WME)); + safe_exit(EX_MYSQLERR); + DBUG_RETURN(0); + } + if (mysql_num_rows(tableRes)) + fprintf(sql_file, "\nDELIMITER //;\n"); + while ((row=mysql_fetch_row(tableRes))) + { + fprintf(sql_file, "CREATE TRIGGER %s %s %s ON %s\n" + "FOR EACH ROW%s//\n\n", + quote_name(row[0], name_buff, 0), + row[4], + row[1], + result_table, + row[3]); + } + if (mysql_num_rows(tableRes)) + fprintf(sql_file, "DELIMITER ;//"); + mysql_free_result(tableRes); + } } my_snprintf(query_buff, sizeof(query_buff), "show fields from %s", result_table); diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index be2003bbc67..bf783402921 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -1673,3 +1673,175 @@ a b c 3 6 three drop view v1, v2, v3; drop table t1; +CREATE TABLE t1 (a int, b bigint default NULL); +CREATE TABLE t2 (a int); +create trigger trg1 before insert on t1 for each row +begin +if new.a > 10 then +set new.a := 10; +set new.a := 11; +end if; +end| +create trigger trg2 before update on t1 for each row begin +if old.a % 2 = 0 then set new.b := 12; end if; +end| +create trigger trg3 after update on t1 for each row +begin +if new.a = -1 then +set @fired:= "Yes"; +end if; +end| +create trigger trg4 before insert on t2 for each row +begin +if new.a > 10 then +set @fired:= "No"; +end if; +end| +show triggers like "t1"; +Trigger Event Table Statement Timing Created +trg1 INSERT t1 +begin +if new.a > 10 then +set new.a := 10; +set new.a := 11; +end if; +end BEFORE 0000-00-00 00:00:00 +trg2 UPDATE t1 begin +if old.a % 2 = 0 then set new.b := 12; end if; +end BEFORE 0000-00-00 00:00:00 +trg3 UPDATE t1 +begin +if new.a = -1 then +set @fired:= "Yes"; +end if; +end AFTER 0000-00-00 00:00:00 +INSERT INTO t1 (a) VALUES (1),(2),(3),(22); +update t1 set a = 4 where a=3; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `test`; +DROP TABLE IF EXISTS `t1`; +CREATE TABLE `t1` ( + `a` int(11) default NULL, + `b` bigint(20) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +DELIMITER //; +CREATE TRIGGER `trg1` BEFORE INSERT ON `t1` +FOR EACH ROW +begin +if new.a > 10 then +set new.a := 10; +set new.a := 11; +end if; +end// + +CREATE TRIGGER `trg2` BEFORE UPDATE ON `t1` +FOR EACH ROW begin +if old.a % 2 = 0 then set new.b := 12; end if; +end// + +CREATE TRIGGER `trg3` AFTER UPDATE ON `t1` +FOR EACH ROW +begin +if new.a = -1 then +set @fired:= "Yes"; +end if; +end// + +DELIMITER ;// + +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +LOCK TABLES `t1` WRITE; +INSERT INTO `t1` VALUES (1,NULL),(2,NULL),(4,NULL),(11,NULL); +UNLOCK TABLES; +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +DROP TABLE IF EXISTS `t2`; +CREATE TABLE `t2` ( + `a` int(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +DELIMITER //; +CREATE TRIGGER `trg4` BEFORE INSERT ON `t2` +FOR EACH ROW +begin +if new.a > 10 then +set @fired:= "No"; +end if; +end// + +DELIMITER ;// + +/*!40000 ALTER TABLE `t2` DISABLE KEYS */; +LOCK TABLES `t2` WRITE; +UNLOCK TABLES; +/*!40000 ALTER TABLE `t2` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `test`; +DROP TABLE IF EXISTS `t1`; +CREATE TABLE `t1` ( + `a` int(11) default NULL, + `b` bigint(20) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + + +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +LOCK TABLES `t1` WRITE; +INSERT INTO `t1` VALUES (1,NULL),(2,NULL),(4,NULL),(11,NULL); +UNLOCK TABLES; +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +DROP TABLE IF EXISTS `t2`; +CREATE TABLE `t2` ( + `a` int(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + + +/*!40000 ALTER TABLE `t2` DISABLE KEYS */; +LOCK TABLES `t2` WRITE; +UNLOCK TABLES; +/*!40000 ALTER TABLE `t2` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +drop table t1; +show tables; +Tables_in_test +t1 +t2 +DROP TABLE t1, t2; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 811875a36f5..81000c17d98 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -709,3 +709,48 @@ select * from v1; drop view v1, v2, v3; drop table t1; +# +# Test for dumping triggers +# + +CREATE TABLE t1 (a int, b bigint default NULL); +CREATE TABLE t2 (a int); +delimiter |; +create trigger trg1 before insert on t1 for each row +begin + if new.a > 10 then + set new.a := 10; + set new.a := 11; + end if; +end| +create trigger trg2 before update on t1 for each row begin + if old.a % 2 = 0 then set new.b := 12; end if; +end| +create trigger trg3 after update on t1 for each row +begin + if new.a = -1 then + set @fired:= "Yes"; + end if; +end| +create trigger trg4 before insert on t2 for each row +begin + if new.a > 10 then + set @fired:= "No"; + end if; +end| +delimiter ;| +--replace_column 6 '0000-00-00 00:00:00' +show triggers like "t1"; +INSERT INTO t1 (a) VALUES (1),(2),(3),(22); +update t1 set a = 4 where a=3; +# Triggers should be dumped by default +--exec $MYSQL_DUMP --skip-comments --databases test +# Skip dumping triggers +--exec $MYSQL_DUMP --skip-comments --databases --skip-triggers test +# Dump and reload... +--exec $MYSQL_DUMP --skip-comments --databases test > var/tmp/mysqldump.sql +drop table t1; +--exec $MYSQL test < var/tmp/mysqldump.sql +# Check that tables have been reloaded +show tables; +DROP TABLE t1, t2; From 3ea233d5e0575ae07db6c5d711d98cd6b28a2f19 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 22 Jul 2005 12:17:53 +0200 Subject: [PATCH 5/5] bug#11675 - ndb backup Fix invalid backup log when using #nodes != 2^x Fix ndb_restore --printXXX options (among other init counters) ndb/src/kernel/blocks/backup/Backup.cpp: remove frag_mask since in 5.0 extra frag bit in in bit 0 ndb/src/kernel/blocks/backup/Backup.hpp: remove frag_mask since in 5.0 extra frag bit in in bit 0 ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp: send "real" frag id to backup ndb/tools/restore/Restore.cpp: Changed prinout (since it's wrong if you only print stuff) ndb/tools/restore/consumer_printer.hpp: Init log/data count in printer ndb/tools/restore/restore_main.cpp: Fix if-statements for correct handling of ndb_restore flags --- ndb/src/kernel/blocks/backup/Backup.cpp | 20 -------------------- ndb/src/kernel/blocks/backup/Backup.hpp | 3 --- ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp | 2 +- ndb/tools/restore/Restore.cpp | 2 +- ndb/tools/restore/consumer_printer.hpp | 2 ++ ndb/tools/restore/restore_main.cpp | 9 ++++++++- 6 files changed, 12 insertions(+), 26 deletions(-) diff --git a/ndb/src/kernel/blocks/backup/Backup.cpp b/ndb/src/kernel/blocks/backup/Backup.cpp index ecc329c641b..34545d4c7ff 100644 --- a/ndb/src/kernel/blocks/backup/Backup.cpp +++ b/ndb/src/kernel/blocks/backup/Backup.cpp @@ -2858,8 +2858,6 @@ Backup::parseTableDescription(Signal* signal, BackupRecordPtr ptr, Uint32 len) /** * Initialize table object */ - tabPtr.p->frag_mask = RNIL; - tabPtr.p->schemaVersion = tmpTab.TableVersion; tabPtr.p->noOfAttributes = tmpTab.NoOfAttributes; tabPtr.p->noOfNull = 0; @@ -2952,7 +2950,6 @@ Backup::execDI_FCOUNTCONF(Signal* signal) ndbrequire(findTable(ptr, tabPtr, tableId)); ndbrequire(tabPtr.p->fragments.seize(fragCount) != false); - tabPtr.p->frag_mask = calculate_frag_mask(fragCount); for(Uint32 i = 0; itab_ptr_i); - frag_id = frag_id & tabPtr.p->frag_mask; - /* - At the moment the fragment identity known by TUP is the - actual fragment id but with possibly an extra bit set. - This is due to that ACC splits the fragment. Thus fragment id 5 can - here be either 5 or 13. Thus masking with 2 ** n - 1 where number of - fragments <= 2 ** n will always provide a correct fragment id. - */ tabPtr.p->fragments.getPtr(fragPtr, frag_id); if (fragPtr.p->node != getOwnNodeId()) { jam(); diff --git a/ndb/src/kernel/blocks/backup/Backup.hpp b/ndb/src/kernel/blocks/backup/Backup.hpp index 7bcea5655b4..ab2bec7dad7 100644 --- a/ndb/src/kernel/blocks/backup/Backup.hpp +++ b/ndb/src/kernel/blocks/backup/Backup.hpp @@ -195,7 +195,6 @@ public: Uint32 tableId; Uint32 schemaVersion; - Uint32 frag_mask; Uint32 tableType; Uint32 noOfNull; Uint32 noOfAttributes; @@ -526,8 +525,6 @@ public: ArrayPool c_nodePool; ArrayPool c_triggerPool; - Uint32 calculate_frag_mask(Uint32); - void checkFile(Signal*, BackupFilePtr); void checkScan(Signal*, BackupFilePtr); void fragmentCompleted(Signal*, BackupFilePtr); diff --git a/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp b/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp index 2b65a8402c2..a5694587314 100644 --- a/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp +++ b/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp @@ -603,7 +603,7 @@ void Dbtup::executeTrigger(Signal* signal, for everybody else. */ signal->theData[0] = trigPtr->triggerId; - signal->theData[1] = regOperPtr->fragId; + signal->theData[1] = regOperPtr->fragId >> 1; // send "real" frag id EXECUTE_DIRECT(BACKUP, GSN_BACKUP_TRIG_REQ, signal, 2); ljamEntry(); if (signal->theData[0] == 0) { diff --git a/ndb/tools/restore/Restore.cpp b/ndb/tools/restore/Restore.cpp index b53255820db..60fbf7f8ceb 100644 --- a/ndb/tools/restore/Restore.cpp +++ b/ndb/tools/restore/Restore.cpp @@ -646,7 +646,7 @@ bool RestoreDataIterator::readFragmentHeader(int & ret) } info << "_____________________________________________________" << endl - << "Restoring data in table: " << m_currentTable->getTableName() + << "Processing data in table: " << m_currentTable->getTableName() << "(" << Header.TableId << ") fragment " << Header.FragmentNo << endl; diff --git a/ndb/tools/restore/consumer_printer.hpp b/ndb/tools/restore/consumer_printer.hpp index 7cbc924e364..e47bc56f874 100644 --- a/ndb/tools/restore/consumer_printer.hpp +++ b/ndb/tools/restore/consumer_printer.hpp @@ -29,6 +29,8 @@ public: m_print_log = false; m_print_data = false; m_print_meta = false; + m_logCount = 0; + m_dataCount = 0; } virtual bool table(const TableS &); diff --git a/ndb/tools/restore/restore_main.cpp b/ndb/tools/restore/restore_main.cpp index 93c40d31adb..d4a6b892458 100644 --- a/ndb/tools/restore/restore_main.cpp +++ b/ndb/tools/restore/restore_main.cpp @@ -317,7 +317,7 @@ main(int argc, char** argv) if (ga_restore || ga_print) { - if (ga_restore) + if(_restore_data || _print_data) { RestoreDataIterator dataIter(metaData, &free_data_callback); @@ -364,7 +364,10 @@ main(int argc, char** argv) for (i= 0; i < g_consumers.size(); i++) g_consumers[i]->endOfTuples(); + } + if(_restore_data || _print_log) + { RestoreLogIterator logIter(metaData); if (!logIter.readHeader()) { @@ -388,6 +391,10 @@ main(int argc, char** argv) logIter.validateFooter(); //not implemented for (i= 0; i < g_consumers.size(); i++) g_consumers[i]->endOfLogEntrys(); + } + + if(_restore_data) + { for(i = 0; igetTableName()))