Changeset: 7c12f11415eb for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7c12f11415eb Added Files: sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.sql sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.err sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.out Modified Files: sql/include/sql_catalog.h sql/server/rel_schema.c sql/storage/store.c sql/test/BugTracker-2016/Tests/All Branch: Dec2016 Log Message:
fixes for bug 6084 (ie do not allow changes to tables which are a part of a merge or replica table). diffs (211 lines): diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h --- a/sql/include/sql_catalog.h +++ b/sql/include/sql_catalog.h @@ -478,6 +478,7 @@ typedef enum table_types { #define isRemote(x) (x->type==tt_remote) #define isReplicaTable(x) (x->type==tt_replica_table) #define isKindOfTable(x) (isTable(x) || isMergeTable(x) || isRemote(x) || isReplicaTable(x)) +#define isPartition(x) (isTable(x) && x->p) #define TABLE_WRITABLE 0 #define TABLE_READONLY 1 diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -661,7 +661,11 @@ table_element(mvc *sql, symbol *s, sql_s { int res = SQL_OK; - if (alter && (isView(t) || ((isMergeTable(t) || isReplicaTable(t)) && (s->token != SQL_TABLE && s->token != SQL_DROP_TABLE && cs_size(&t->tables)>0)) || (isTable(t) && (s->token == SQL_TABLE || s->token == SQL_DROP_TABLE)) )){ + if (alter && + (isView(t) || + ((isMergeTable(t) || isReplicaTable(t)) && (s->token != SQL_TABLE && s->token != SQL_DROP_TABLE && cs_size(&t->tables)>0)) || + (isTable(t) && (s->token == SQL_TABLE || s->token == SQL_DROP_TABLE)) || + (isPartition(t) && (s->token == SQL_DROP_COLUMN || s->token == SQL_COLUMN || s->token == SQL_CONSTRAINT)))){ char *msg = ""; switch (s->token) { @@ -698,6 +702,7 @@ table_element(mvc *sql, symbol *s, sql_s } sql_error(sql, 02, "42000!ALTER TABLE: cannot %s %s '%s'\n", msg, + isPartition(t)?"a PARTITION of a MERGE or REPLICA TABLE": isMergeTable(t)?"MERGE TABLE": isReplicaTable(t)?"REPLICA TABLE":"VIEW", t->base.name); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1305,6 +1305,8 @@ dup_sql_table(sql_allocator *sa, sql_tab */ nt->tables.dset = NULL; nt->tables.nelm = NULL; + /* record if table is a partition */ + nt->p = t->p; return nt; } diff --git a/sql/test/BugTracker-2016/Tests/All b/sql/test/BugTracker-2016/Tests/All --- a/sql/test/BugTracker-2016/Tests/All +++ b/sql/test/BugTracker-2016/Tests/All @@ -59,3 +59,4 @@ ifthenelse-void.Bug-6075 assert-on-table-producing-function.Bug-6076 assert-on-push-project-up.Bug-6077 assert-on-project.Bug-6078 +merge-table-edit.Bug-6084 diff --git a/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.sql b/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.sql @@ -0,0 +1,16 @@ +start transaction; + +CREATE TABLE test_table (d int); +INSERT INTO test_table VALUES (6),(6); +CREATE MERGE TABLE test_merge_table (t int); +ALTER TABLE test_merge_table ADD TABLE test_table; +SELECT * FROM test_merge_table; + +ALTER TABLE test_table ADD COLUMN u int; +UPDATE test_table SET u = 2; +SELECT * FROM test_table; + +ALTER TABLE test_table DROP COLUMN d; +SELECT * FROM test_merge_table; + +rollback; diff --git a/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.err b/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.err @@ -0,0 +1,49 @@ +stderr of test 'merge-table-edit.Bug-6084` in directory 'sql/test/BugTracker-2016` itself: + + +# 17:26:57 > +# 17:26:57 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=37191" "--set" "mapi_usock=/var/tmp/mtest-71488/.s.monetdb.37191" "--set" "monet_prompt=" "--forcemito" "--dbpath=/Users/rkoopmanschap/projects/MonetDB-installation/var/MonetDB/mTests_sql_test_BugTracker-2016" +# 17:26:57 > + +# builtin opt gdk_dbpath = /usr/local/Cellar/monetdb/11.23.13/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 37191 +# cmdline opt mapi_usock = /var/tmp/mtest-71488/.s.monetdb.37191 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /Users/rkoopmanschap/projects/MonetDB-installation/var/MonetDB/mTests_sql_test_BugTracker-2016 +# cmdline opt gdk_debug = 536870922 + +# 17:26:57 > +# 17:26:57 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-71488" "--port=37191" +# 17:26:57 > + +MAPI = (monetdb) /var/tmp/mtest-71697/.s.monetdb.32414 +QUERY = ALTER TABLE test_table ADD COLUMN u int; +ERROR = !ALTER TABLE: cannot add column to a PARTITION of a MERGE or REPLICA TABLE 'test_table' +MAPI = (monetdb) /var/tmp/mtest-27276/.s.monetdb.34956 +QUERY = UPDATE test_table SET u = 2; +ERROR = !current transaction is aborted (please ROLLBACK) +MAPI = (monetdb) /var/tmp/mtest-71697/.s.monetdb.32414 +QUERY = SELECT * FROM test_table; +ERROR = !current transaction is aborted (please ROLLBACK) +MAPI = (monetdb) /var/tmp/mtest-71697/.s.monetdb.32414 +QUERY = ALTER TABLE test_table DROP COLUMN d; +ERROR = !current transaction is aborted (please ROLLBACK) +MAPI = (monetdb) /var/tmp/mtest-71697/.s.monetdb.32414 +QUERY = SELECT * FROM test_merge_table; +ERROR = !current transaction is aborted (please ROLLBACK) + +# 17:26:57 > +# 17:26:57 > "Done." +# 17:26:57 > + diff --git a/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.out b/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/merge-table-edit.Bug-6084.stable.out @@ -0,0 +1,76 @@ +stdout of test 'merge-table-edit.Bug-6084` in directory 'sql/test/BugTracker-2016` itself: + + +# 18:08:01 > +# 18:08:01 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36399" "--set" "mapi_usock=/var/tmp/mtest-71845/.s.monetdb.36399" "--set" "monet_prompt=" "--forcemito" "--dbpath=/Users/rkoopmanschap/projects/MonetDB-installation/var/MonetDB/mTests_sql_test_BugTracker-2016" +# 18:08:01 > + +# MonetDB 5 server v11.23.13 "Jun2016-SP2" +# Serving database 'mTests_sql_test_BugTracker-2016', using 4 threads +# Compiled for x86_64-apple-darwin16.0.0/64bit with 64bit OIDs and 128bit integers dynamically linked +# Found 16.000 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2016 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://dhcp-173.eduroam.cwi.nl:36399/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-71845/.s.monetdb.36399 +# MonetDB/SQL module loaded + +Ready. +# SQL catalog created, loading sql scripts once +# loading sql script: 09_like.sql +# loading sql script: 10_math.sql +# loading sql script: 11_times.sql +# loading sql script: 12_url.sql +# loading sql script: 13_date.sql +# loading sql script: 14_inet.sql +# loading sql script: 15_querylog.sql +# loading sql script: 16_tracelog.sql +# loading sql script: 17_temporal.sql +# loading sql script: 20_vacuum.sql +# loading sql script: 21_dependency_functions.sql +# loading sql script: 22_clients.sql +# loading sql script: 23_skyserver.sql +# loading sql script: 24_zorder.sql +# loading sql script: 25_debug.sql +# loading sql script: 26_sysmon.sql +# loading sql script: 27_rejects.sql +# loading sql script: 39_analytics.sql +# loading sql script: 39_analytics_hge.sql +# loading sql script: 40_json.sql +# loading sql script: 40_json_hge.sql +# loading sql script: 41_md5sum.sql +# loading sql script: 45_uuid.sql +# loading sql script: 46_profiler.sql +# loading sql script: 51_sys_schema_extension.sql +# loading sql script: 75_storagemodel.sql +# loading sql script: 80_statistics.sql +# loading sql script: 80_udf.sql +# loading sql script: 80_udf_hge.sql +# loading sql script: 90_generator.sql +# loading sql script: 90_generator_hge.sql +# loading sql script: 99_system.sql + +# 18:08:01 > +# 18:08:01 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-71845" "--port=36399" +# 18:08:01 > + +#start transaction; +#CREATE TABLE test_table (d int); +#INSERT INTO test_table VALUES (6),(6); +[ 2 ] +#CREATE MERGE TABLE test_merge_table (t int); +#ALTER TABLE test_merge_table ADD TABLE test_table; +#SELECT * FROM test_merge_table; +% sys.test_merge_table # table_name +% t # name +% int # type +% 1 # length +[ 6 ] +[ 6 ] +#rollback; + +# 18:08:01 > +# 18:08:01 > "Done." +# 18:08:01 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list