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

Reply via email to