Changeset: 3d58e1ccd3f8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3d58e1ccd3f8 Added Files: sql/test/merge-partitions/Tests/mergepart30.sql sql/test/merge-partitions/Tests/mergepart30.stable.err sql/test/merge-partitions/Tests/mergepart30.stable.out Modified Files: sql/backends/monet5/sql_cat.c sql/server/rel_schema.c sql/test/merge-partitions/Tests/All sql/test/merge-partitions/Tests/mergepart23.stable.err Branch: Jun2020 Log Message:
Merged with linear-hashing diffs (175 lines): diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -162,6 +162,8 @@ validate_alter_table_add_table(mvc *sql, node *n = cs_find_id(&rmt->members, rpt->base.id); if (isView(rpt)) throw(SQL,call,SQLSTATE(42000) "ALTER TABLE: can't add a view into a %s", errtable); + if (isDeclaredTable(rpt)) + throw(SQL,call,SQLSTATE(42000) "ALTER TABLE: can't add a declared table into a %s", errtable); if (ms->base.id != ps->base.id) throw(SQL,call,SQLSTATE(42000) "ALTER TABLE: all children tables of '%s.%s' must be part of schema '%s'", msname, mtname, msname); if (n && !update) @@ -182,9 +184,13 @@ alter_table_add_table(mvc *sql, char *ms sql_table *mt = NULL, *pt = NULL; str msg = validate_alter_table_add_table(sql, "sql.alter_table_add_table", msname, mtname, psname, ptname, &mt, &pt, 0); - if (msg == MAL_SUCCEED) + if (msg == MAL_SUCCEED) { + if (isRangePartitionTable(mt)) + return createException(SQL, "sql.alter_table_add_table",SQLSTATE(42000) "ALTER TABLE: a range partition is required while adding under a range partition table"); + if (isListPartitionTable(mt)) + return createException(SQL, "sql.alter_table_add_table",SQLSTATE(42000) "ALTER TABLE: a value partition is required while adding under a list partition table"); sql_trans_add_table(sql->session->tr, mt, pt); - + } return msg; } @@ -206,11 +212,11 @@ alter_table_add_range_partition(mvc *sql } else if (!isRangePartitionTable(mt)) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: cannot add range partition into a %s table", - (mt->type == tt_merge_table)?"merge":"list partition"); + (isListPartitionTable(mt))?"list partition":"merge"); goto finish; } else if (!update && pt->p) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) - "ALTER TABLE: table %s.%s is already part of another range partition table", + "ALTER TABLE: table '%s.%s' is already part of another table", psname, ptname); goto finish; } @@ -302,11 +308,11 @@ alter_table_add_value_partition(mvc *sql } else if (!isListPartitionTable(mt)) { msg = createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) "ALTER TABLE: cannot add value partition into a %s table", - (mt->type == tt_merge_table)?"merge":"range partition"); + (isRangePartitionTable(mt))?"range partition":"merge"); goto finish; } else if (!update && pt->p) { msg = createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) - "ALTER TABLE: table %s.%s is already part of another list partition table", + "ALTER TABLE: table '%s.%s' is already part of another table", psname, ptname); goto finish; } 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 @@ -1475,12 +1475,22 @@ sql_alter_table(sql_query *query, dlist if (isView(pt)) return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: can't add a view into a %s", TABLE_TYPE_DESCRIPTION(t->type, t->properties)); + if (isDeclaredTable(pt)) + return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: can't add a declared table into a %s", + TABLE_TYPE_DESCRIPTION(t->type, t->properties)); if (strcmp(sname, nsname) != 0) return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: all children tables of '%s.%s' must be " "part of schema '%s'", sname, tname, sname); - if (!extra) + if (!extra) { + if (isRangePartitionTable(t)) { + return sql_error(sql, 02,SQLSTATE(42000) "ALTER TABLE: a range partition is required while adding under a %s", + TABLE_TYPE_DESCRIPTION(t->type, t->properties)); + } else if (isListPartitionTable(t)) { + return sql_error(sql, 02,SQLSTATE(42000) "ALTER TABLE: a value partition is required while adding under a %s", + TABLE_TYPE_DESCRIPTION(t->type, t->properties)); + } return rel_alter_table(sql->sa, ddl_alter_table_add_table, sname, tname, nsname, ntname, 0); - + } if ((isMergeTable(pt) || isReplicaTable(pt)) && list_empty(pt->members.set)) return sql_error(sql, 02, SQLSTATE(42000) "The %s %s.%s should have at least one table associated", TABLE_TYPE_DESCRIPTION(pt->type, pt->properties), spt->base.name, pt->base.name); diff --git a/sql/test/merge-partitions/Tests/All b/sql/test/merge-partitions/Tests/All --- a/sql/test/merge-partitions/Tests/All +++ b/sql/test/merge-partitions/Tests/All @@ -28,3 +28,4 @@ mergepart26 mergepart27 HAVE_DATA_PATH&HAVE_LIBPY3?mergepart28 HAVE_PYMONETDB?mergepart29 +mergepart30 diff --git a/sql/test/merge-partitions/Tests/mergepart23.stable.err b/sql/test/merge-partitions/Tests/mergepart23.stable.err --- a/sql/test/merge-partitions/Tests/mergepart23.stable.err +++ b/sql/test/merge-partitions/Tests/mergepart23.stable.err @@ -21,15 +21,9 @@ stderr of test 'mergepart23` in director # cmdline opt mapi_usock = /var/tmp/mtest-1771/.s.monetdb.33958 # cmdline opt monet_prompt = # cmdline opt gdk_dbpath = /home/ferreira/repositories/MonetDB-Apr2019/BUILD/var/MonetDB/mTests_sql_test_merge-partitions -#main thread:!ERROR:LoaderException:loadLibrary:Loading error failed to open library lidar (from within file '/home/ferreira/repositories/MonetDB-Apr2019/BUILD/lib/monetdb5/lib_lidar.so'): libpq.so.5: cannot open shared object file: No such file or directory -#main thread:!ERROR:SyntaxException:parseError: -#main thread:!ERROR:SyntaxException:parseError:^LoaderException:loadLibrary:Loading error failed to open library lidar (from within file '/home/ferreira/repositories/MonetDB-Apr2019/BUILD/lib/monetdb5/lib_lidar.so'): libpq.so.5: cannot open shared object file: No such file or directory -#main thread:!ERROR:LoaderException:loadLibrary:Loading error failed to open library shp (from within file '/home/ferreira/repositories/MonetDB-Apr2019/BUILD/lib/monetdb5/lib_shp.so'): libpq.so.5: cannot open shared object file: No such file or directory -#main thread:!ERROR:SyntaxException:parseError: -#main thread:!ERROR:SyntaxException:parseError:^LoaderException:loadLibrary:Loading error failed to open library shp (from within file '/home/ferreira/repositories/MonetDB-Apr2019/BUILD/lib/monetdb5/lib_shp.so'): libpq.so.5: cannot open shared object file: No such file or directory MAPI = (monetdb) /var/tmp/mtest-13251/.s.monetdb.37915 QUERY = SELECT "minimum", "maximum" FROM range_partitions;ALTER TABLE anothertest ADD TABLE subtable1 AS PARTITION FROM 11 TO 20;SELECT "minimum", "maximum" FROM range_partitions; -ERROR = !ALTER TABLE: table sys.subtable1 is already part of another range partition table +ERROR = !ALTER TABLE: table 'sys.subtable1' is already part of another table CODE = 42000 # builtin opt gdk_dbpath = /home/ferreira/repositories/MonetDB-merge-partitions/BUILD/var/monetdb5/dbfarm/demo # builtin opt gdk_debug = 0 diff --git a/sql/test/merge-partitions/Tests/mergepart30.sql b/sql/test/merge-partitions/Tests/mergepart30.sql new file mode 100644 --- /dev/null +++ b/sql/test/merge-partitions/Tests/mergepart30.sql @@ -0,0 +1,10 @@ +CREATE MERGE TABLE table1 (b varchar(32)) PARTITION BY RANGE ON (b); +CREATE MERGE TABLE table2 (b varchar(32)) PARTITION BY VALUES ON (b); +CREATE TABLE another (b varchar(32)); + +ALTER TABLE table1 ADD TABLE another; --error, a paritioning clause is required +ALTER TABLE table2 ADD TABLE another; --error, a paritioning clause is required + +DROP TABLE another; +DROP TABLE table1; +DROP TABLE table2; diff --git a/sql/test/merge-partitions/Tests/mergepart30.stable.err b/sql/test/merge-partitions/Tests/mergepart30.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/merge-partitions/Tests/mergepart30.stable.err @@ -0,0 +1,20 @@ +stderr of test 'mergepart30` in directory 'sql/test/merge-partitions` itself: + + +# 09:24:49 > +# 09:24:49 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-32190" "--port=38020" +# 09:24:49 > + +MAPI = (monetdb) /var/tmp/mtest-32190/.s.monetdb.38020 +QUERY = ALTER TABLE table1 ADD TABLE another; --error, a paritioning clause is required +ERROR = !ALTER TABLE: a range partition is required while adding under a RANGE PARTITION TABLE +CODE = 42000 +MAPI = (monetdb) /var/tmp/mtest-32190/.s.monetdb.38020 +QUERY = ALTER TABLE table2 ADD TABLE another; --error, a paritioning clause is required +ERROR = !ALTER TABLE: a value partition is required while adding under a LIST PARTITION TABLE +CODE = 42000 + +# 09:24:49 > +# 09:24:49 > "Done." +# 09:24:49 > + diff --git a/sql/test/merge-partitions/Tests/mergepart30.stable.out b/sql/test/merge-partitions/Tests/mergepart30.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/merge-partitions/Tests/mergepart30.stable.out @@ -0,0 +1,18 @@ +stdout of test 'mergepart30` in directory 'sql/test/merge-partitions` itself: + + +# 09:24:49 > +# 09:24:49 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-32190" "--port=38020" +# 09:24:49 > + +#CREATE MERGE TABLE table1 (b varchar(32)) PARTITION BY RANGE ON (b); +#CREATE MERGE TABLE table2 (b varchar(32)) PARTITION BY VALUES ON (b); +#CREATE TABLE another (b varchar(32)); +#DROP TABLE another; +#DROP TABLE table1; +#DROP TABLE table2; + +# 09:24:49 > +# 09:24:49 > "Done." +# 09:24:49 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list