Changeset: dff1ed3d3681 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dff1ed3d3681
Modified Files:
sql/backends/monet5/sql_cat.c
sql/test/merge-partitions/Tests/mergepart01.stable.err
sql/test/merge-partitions/Tests/mergepart07.stable.err
sql/test/merge-partitions/Tests/mergepart18.stable.err
sql/test/merge-partitions/Tests/mergepart19.stable.err
Branch: default
Log Message:
Throw better error message.
diffs (191 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
@@ -74,68 +74,68 @@ table_has_updates(sql_trans *tr, sql_tab
}
static char *
-rel_check_tables(sql_table *nt, sql_table *nnt, const char* errtable)
+rel_check_tables(sql_table *nt, sql_table *nnt, const char *errtable)
{
node *n, *m, *nn, *mm;
if (cs_size(&nt->columns) != cs_size(&nnt->columns))
- throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s
TABLE: to be added table doesn't match %s TABLE definition", errtable,
errtable);
+ throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to
be added table doesn't match %s definition", errtable, errtable);
for (n = nt->columns.set->h, m = nnt->columns.set->h; n && m; n =
n->next, m = m->next) {
sql_column *nc = n->data;
sql_column *mc = m->data;
if (subtype_cmp(&nc->type, &mc->type) != 0)
- throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s TABLE: to be added table column type doesn't match %s TABLE definition",
errtable, errtable);
+ throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table column type doesn't match %s definition", errtable,
errtable);
if(isRangePartitionTable(nt) || isListPartitionTable(nt)) {
if (nc->null != mc->null)
-
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s TABLE: to be added
table column NULL check doesn't match %s TABLE definition", errtable, errtable);
+
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
column NULL check doesn't match %s definition", errtable, errtable);
if ((!nc->def && mc->def) || (nc->def && !mc->def) ||
(nc->def && mc->def && strcmp(nc->def, mc->def) != 0))
-
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s TABLE: to be added
table column DEFAULT value doesn't match %s TABLE definition", errtable,
errtable);
+
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
column DEFAULT value doesn't match %s definition", errtable, errtable);
}
}
if(isNonPartitionedTable(nt)) {
if (cs_size(&nt->idxs) != cs_size(&nnt->idxs))
- throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s TABLE: to be added table index doesn't match %s TABLE definition", errtable,
errtable);
+ throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table index doesn't match %s definition", errtable, errtable);
if (cs_size(&nt->idxs))
for (n = nt->idxs.set->h, m = nnt->idxs.set->h; n && m;
n = n->next, m = m->next) {
sql_idx *ni = n->data;
sql_idx *mi = m->data;
if (ni->type != mi->type)
-
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s TABLE: to be added
table index type doesn't match %s TABLE definition", errtable, errtable);
+
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
index type doesn't match %s definition", errtable, errtable);
}
} else { //for partitioned tables we allow indexes but the key set must
be exactly the same
if (cs_size(&nt->keys) != cs_size(&nnt->keys))
- throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s TABLE: to be added table key doesn't match %s TABLE definition", errtable,
errtable);
+ throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table key doesn't match %s definition", errtable, errtable);
if (cs_size(&nt->keys))
for (n = nt->keys.set->h, m = nnt->keys.set->h; n && m;
n = n->next, m = m->next) {
sql_key *ni = n->data;
sql_key *mi = m->data;
if (ni->type != mi->type)
-
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s TABLE: to be added
table key type doesn't match %s TABLE definition", errtable, errtable);
+
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
key type doesn't match %s definition", errtable, errtable);
if (list_length(ni->columns) !=
list_length(mi->columns))
-
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s TABLE: to be added
table key type doesn't match %s TABLE definition", errtable, errtable);
+
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
key type doesn't match %s definition", errtable, errtable);
for (nn = ni->columns->h, mm = mi->columns->h;
nn && mm; nn = nn->next, mm = mm->next) {
sql_kc *nni = nn->data;
sql_kc *mmi = mm->data;
if (nni->c->colnr != mmi->c->colnr)
-
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s TABLE: to be added
table key's columns doesn't match %s TABLE definition", errtable, errtable);
+
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
key's columns doesn't match %s definition", errtable, errtable);
}
}
}
for(sql_table *up = nt->p ; up ; up = up->p) {
if(!strcmp(up->s->base.name, nnt->s->base.name) &&
!strcmp(up->base.name, nnt->base.name))
- throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s TABLE: to be added table is a parent of the %s TABLE", errtable, errtable);
+ throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table is a parent of the %s", errtable, errtable);
}
return MAL_SUCCEED;
}
static char*
validate_alter_table_add_table(mvc *sql, char* call, char *msname, char
*mtname, char *psname, char *ptname,
- sql_table **mt,
sql_table **pt, int update, const char* errtable)
+ sql_table **mt,
sql_table **pt, int update)
{
sql_schema *ms = mvc_bind_schema(sql, msname), *ps =
mvc_bind_schema(sql, psname);
sql_table *rmt = NULL, *rpt = NULL;
@@ -151,11 +151,12 @@ validate_alter_table_add_table(mvc *sql,
if (rmt && rpt) {
char *msg;
node *n = cs_find_id(&rmt->members, rpt->base.id);
+ const char *errtable = TABLE_TYPE_DESCRIPTION(rmt->type,
rmt->properties);
if (n && !update)
- throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table
'%s.%s' is already part of the MERGE TABLE '%s.%s'", psname, ptname, msname,
mtname);
- if(!n && update)
- throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table
'%s.%s' isn't part of the MERGE TABLE '%s.%s'", psname, ptname, msname, mtname);
+ throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table
'%s.%s' is already part of the %s '%s.%s'", psname, ptname, errtable, msname,
mtname);
+ if (!n && update)
+ throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table
'%s.%s' isn't part of the %s '%s.%s'", psname, ptname, errtable, msname,
mtname);
if ((msg = rel_check_tables(rmt, rpt, errtable)) != NULL)
return msg;
return MAL_SUCCEED;
@@ -170,7 +171,7 @@ static char *
alter_table_add_table(mvc *sql, char *msname, char *mtname, char *psname, char
*ptname)
{
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,
"MERGE");
+ str msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_table", msname, mtname, psname, ptname, &mt, &pt, 0);
if(msg == MAL_SUCCEED)
sql_trans_add_table(sql->session->tr, mt, pt);
@@ -191,7 +192,7 @@ alter_table_add_range_partition(mvc *sql
sql_subtype tpe;
if((msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_range_partition", msname, mtname, psname, ptname,
-
&mt, &pt, update, "RANGE PARTITION"))) {
+
&mt, &pt, update))) {
return msg;
} else if(!isRangePartitionTable(mt)) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
@@ -292,7 +293,7 @@ alter_table_add_value_partition(mvc *sql
sql_subtype tpe;
if((msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_value_partition", msname, mtname, psname, ptname,
-
&mt, &pt, update, "LIST PARTITION"))) {
+
&mt, &pt, update))) {
return msg;
} else if(!isListPartitionTable(mt)) {
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
diff --git a/sql/test/merge-partitions/Tests/mergepart01.stable.err
b/sql/test/merge-partitions/Tests/mergepart01.stable.err
--- a/sql/test/merge-partitions/Tests/mergepart01.stable.err
+++ b/sql/test/merge-partitions/Tests/mergepart01.stable.err
@@ -31,7 +31,7 @@ stderr of test 'mergepart01` in director
MAPI = (monetdb) /var/tmp/mtest-24782/.s.monetdb.30770
QUERY = ALTER TABLE testme ADD TABLE subtable1 AS PARTITION BETWEEN 5 AND 10;
--error
-ERROR = !ALTER TABLE: table 'sys.subtable1' is already part of the MERGE TABLE
'sys.testme'
+ERROR = !ALTER TABLE: table 'sys.subtable1' is already part of the RANGE
PARTITION TABLE 'sys.testme'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-24782/.s.monetdb.30770
QUERY = ALTER TABLE testme ADD TABLE wrongtable AS PARTITION BETWEEN 5 AND 6;
--error
diff --git a/sql/test/merge-partitions/Tests/mergepart07.stable.err
b/sql/test/merge-partitions/Tests/mergepart07.stable.err
--- a/sql/test/merge-partitions/Tests/mergepart07.stable.err
+++ b/sql/test/merge-partitions/Tests/mergepart07.stable.err
@@ -53,19 +53,19 @@ ERROR = !ALTER TABLE: there are values i
CODE = M0M29
MAPI = (monetdb) /var/tmp/mtest-14313/.s.monetdb.34865
QUERY = ALTER TABLE anothertest ADD TABLE othersub1 AS PARTITION BETWEEN NULL
AND 'nono'; --error
-ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the MERGE TABLE
'sys.anothertest'
+ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the RANGE
PARTITION TABLE 'sys.anothertest'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-20774/.s.monetdb.31597
QUERY = ALTER TABLE anothertest ADD TABLE othersub1 AS PARTITION BETWEEN
'nono' AND NULL; --error
-ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the MERGE TABLE
'sys.anothertest'
+ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the RANGE
PARTITION TABLE 'sys.anothertest'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-20774/.s.monetdb.31597
QUERY = ALTER TABLE anothertest ADD TABLE othersub1 AS PARTITION BETWEEN NULL
AND NULL; --error
-ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the MERGE TABLE
'sys.anothertest'
+ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the RANGE
PARTITION TABLE 'sys.anothertest'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-20774/.s.monetdb.31597
QUERY = ALTER TABLE anothertest ADD TABLE othersub1 AS PARTITION BETWEEN
'nono' AND 'wrong' WITH NULL; --error
-ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the MERGE TABLE
'sys.anothertest'
+ERROR = !ALTER TABLE: table 'sys.othersub1' is already part of the RANGE
PARTITION TABLE 'sys.anothertest'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-2104/.s.monetdb.37654
QUERY = ALTER TABLE anothertest ADD TABLE othersub1 AS PARTITION BETWEEN 'a'
AND 'string'; --error
diff --git a/sql/test/merge-partitions/Tests/mergepart18.stable.err
b/sql/test/merge-partitions/Tests/mergepart18.stable.err
--- a/sql/test/merge-partitions/Tests/mergepart18.stable.err
+++ b/sql/test/merge-partitions/Tests/mergepart18.stable.err
@@ -30,7 +30,7 @@ stderr of test 'mergepart18` in director
MAPI = (monetdb) /var/tmp/mtest-9747/.s.monetdb.32333
QUERY = ALTER TABLE updateme SET TABLE subt1 AS PARTITION BETWEEN '1' AND
'100'; --error
-ERROR = !ALTER TABLE: table 'sys.subt1' isn't part of the MERGE TABLE
'sys.updateme'
+ERROR = !ALTER TABLE: table 'sys.subt1' isn't part of the RANGE PARTITION
TABLE 'sys.updateme'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-9747/.s.monetdb.32333
QUERY = ALTER TABLE updateme SET TABLE subt1 AS PARTITION BETWEEN '-100' AND
'0'; --error
diff --git a/sql/test/merge-partitions/Tests/mergepart19.stable.err
b/sql/test/merge-partitions/Tests/mergepart19.stable.err
--- a/sql/test/merge-partitions/Tests/mergepart19.stable.err
+++ b/sql/test/merge-partitions/Tests/mergepart19.stable.err
@@ -30,7 +30,7 @@ stderr of test 'mergepart19` in director
MAPI = (monetdb) /var/tmp/mtest-15034/.s.monetdb.31422
QUERY = ALTER TABLE testme SET TABLE subt1 AS PARTITION IN ('21', '22', '23');
--error
-ERROR = !ALTER TABLE: table 'sys.subt1' isn't part of the MERGE TABLE
'sys.testme'
+ERROR = !ALTER TABLE: table 'sys.subt1' isn't part of the LIST PARTITION TABLE
'sys.testme'
CODE = 42S02
MAPI = (monetdb) /var/tmp/mtest-15034/.s.monetdb.31422
QUERY = ALTER TABLE testme SET TABLE subt1 AS PARTITION IN ('44', '45', '46');
--error
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list