Changeset: b49fd117675a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b49fd117675a
Added Files:
sql/test/mergetables/Tests/multiple-merge-tables.sql
sql/test/mergetables/Tests/multiple-merge-tables.stable.err
sql/test/mergetables/Tests/multiple-merge-tables.stable.out
Modified Files:
sql/storage/store.c
sql/test/mergetables/Tests/All
sql/test/mergetables/Tests/mergedrop2.sql
Branch: Jun2020-mmt
Log Message:
mergetables and schemas lists of parts use different node lists, so find again
on the schema while removing. Also added test
diffs (185 lines):
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -6326,7 +6326,7 @@ sql_trans_set_table_schema(sql_trans *tr
sql_table *
sql_trans_del_table(sql_trans *tr, sql_table *mt, sql_table *pt, int
drop_action)
{
- node *n = members_find_child_id(mt->members, pt->base.id);
+ node *sn, *n = members_find_child_id(mt->members, pt->base.id);
sql_part *p = n ? (sql_part*) n->data : NULL;
sql_schema *syss = find_sql_schema(tr, isGlobal(mt)?"sys":"tmp");
sql_table *sysobj = find_sql_table(syss, "objects");
@@ -6349,7 +6349,9 @@ sql_trans_del_table(sql_trans *tr, sql_t
/* merge table depends on part table */
sql_trans_drop_dependency(tr, pt->base.id, mt->base.id,
TABLE_DEPENDENCY);
- cs_del(&mt->s->parts, n, p->base.flags);
+ sn = list_find_base_id(mt->s->parts.set, p->base.id);
+ assert(sn);
+ cs_del(&mt->s->parts, sn, p->base.flags);
list_remove_data(mt->members, p);
pt->partition--;/* check other hierarchies? */
p->member = NULL;
diff --git a/sql/test/mergetables/Tests/All b/sql/test/mergetables/Tests/All
--- a/sql/test/mergetables/Tests/All
+++ b/sql/test/mergetables/Tests/All
@@ -33,3 +33,4 @@ sqlsmith-exists
sqlsmith-exists2
mergedb_drop
mergetable_rel_push_aggr_down
+multiple-merge-tables
diff --git a/sql/test/mergetables/Tests/mergedrop2.sql
b/sql/test/mergetables/Tests/mergedrop2.sql
--- a/sql/test/mergetables/Tests/mergedrop2.sql
+++ b/sql/test/mergetables/Tests/mergedrop2.sql
@@ -22,3 +22,12 @@ alter table t add table t3;
alter table t drop table t1;
alter table t add table t1;
+
+alter table t drop table t1;
+alter table t drop table t2;
+alter table t drop table t3;
+
+drop table t;
+drop table t1;
+drop table t2;
+drop table t3;
diff --git a/sql/test/mergetables/Tests/multiple-merge-tables.sql
b/sql/test/mergetables/Tests/multiple-merge-tables.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/multiple-merge-tables.sql
@@ -0,0 +1,31 @@
+create table t (i int);
+insert into t values (42), (666);
+create merge table mt1 (like t);
+create merge table mt2 (like t);
+
+create temp table mycount(cc BIGINT) ON COMMIT PRESERVE ROWS;
+insert into mycount SELECT (SELECT COUNT(*) FROM sys.dependencies) + (SELECT
COUNT(*) FROM sys.objects);
+
+alter table mt1 add table t;
+select i from mt1;
+select i from mt2; -- error, no tables associated
+
+alter table mt2 add table t;
+select i from mt1;
+select i from mt2;
+
+alter table mt1 drop table t;
+select i from mt1; -- error, no tables associated
+select i from mt2;
+
+alter table mt2 drop table t;
+select i from mt1; -- error, no tables associated
+select i from mt2; -- error, no tables associated
+
+SELECT CAST((SELECT COUNT(*) FROM sys.dependencies) + (SELECT COUNT(*) FROM
sys.objects) - (SELECT cc FROM mycount) AS BIGINT);
+ -- 0 it shouldn't have increased
+
+drop table mycount;
+drop table mt1;
+drop table mt2;
+drop table t;
diff --git a/sql/test/mergetables/Tests/multiple-merge-tables.stable.err
b/sql/test/mergetables/Tests/multiple-merge-tables.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/multiple-merge-tables.stable.err
@@ -0,0 +1,28 @@
+stderr of test 'multiple-merge-tables` in directory 'sql/test/mergetables`
itself:
+
+
+# 10:32:16 >
+# 10:32:16 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-37610" "--port=36699"
+# 10:32:16 >
+
+MAPI = (monetdb) /var/tmp/mtest-40339/.s.monetdb.34967
+QUERY = select i from mt2; -- error, no tables associated
+ERROR = !MERGE or REPLICA TABLE should have at least one table associated
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-40339/.s.monetdb.34967
+QUERY = select i from mt1; -- error, no tables associated
+ERROR = !MERGE or REPLICA TABLE should have at least one table associated
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-37610/.s.monetdb.36699
+QUERY = select i from mt1; -- error, no tables associated
+ERROR = !MERGE or REPLICA TABLE should have at least one table associated
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-37610/.s.monetdb.36699
+QUERY = select i from mt2; -- error, no tables associated
+ERROR = !MERGE or REPLICA TABLE should have at least one table associated
+CODE = 42000
+
+# 10:32:16 >
+# 10:32:16 > "Done."
+# 10:32:16 >
+
diff --git a/sql/test/mergetables/Tests/multiple-merge-tables.stable.out
b/sql/test/mergetables/Tests/multiple-merge-tables.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/multiple-merge-tables.stable.out
@@ -0,0 +1,64 @@
+stdout of test 'multiple-merge-tables` in directory 'sql/test/mergetables`
itself:
+
+
+# 10:32:16 >
+# 10:32:16 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-37610" "--port=36699"
+# 10:32:16 >
+
+#create table t (i int);
+#insert into t values (42), (666);
+[ 2 ]
+#create merge table mt1 (like t);
+#create merge table mt2 (like t);
+#create temp table mycount(cc BIGINT) ON COMMIT PRESERVE ROWS;
+#insert into mycount SELECT (SELECT COUNT(*) FROM sys.dependencies) + (SELECT
COUNT(*) FROM sys.objects);
+[ 1 ]
+#alter table mt1 add table t;
+#select i from mt1;
+% sys.mt1 # table_name
+% i # name
+% int # type
+% 3 # length
+[ 42 ]
+[ 666 ]
+#alter table mt2 add table t;
+#select i from mt1;
+% sys.mt1 # table_name
+% i # name
+% int # type
+% 3 # length
+[ 42 ]
+[ 666 ]
+#select i from mt2;
+% sys.mt2 # table_name
+% i # name
+% int # type
+% 3 # length
+[ 42 ]
+[ 666 ]
+#alter table mt1 drop table t;
+#select i from mt2;
+% sys.mt2 # table_name
+% i # name
+% int # type
+% 3 # length
+[ 42 ]
+[ 666 ]
+#alter table mt2 drop table t;
+#SELECT CAST((SELECT COUNT(*) FROM sys.dependencies) + (SELECT COUNT(*) FROM
sys.objects) - (SELECT cc FROM mycount) AS BIGINT);
+% .%4 # table_name
+% %4 # name
+% bigint # type
+% 1 # length
+[ 0 ]
+#drop table mycount;
+#drop table mt1;
+#drop table mt2;
+#drop table t;
+
+
+
+# 10:32:16 >
+# 10:32:16 > "Done."
+# 10:32:16 >
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list