Changeset: 3dd1c1a9f82b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3dd1c1a9f82b
Modified Files:
sql/server/rel_schema.c
sql/server/sql_parser.y
sql/storage/store.c
sql/test/mergetables/Tests/alter.stable.err
Branch: Jul2017
Log Message:
fixed qualified names for merge table partitions
diffs (105 lines):
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
@@ -1312,15 +1312,19 @@ sql_alter_table(mvc *sql, dlist *qname,
sname = s->base.name;
if (te && (te->token == SQL_TABLE || te->token ==
SQL_DROP_TABLE)) {
- char *ntname = te->data.lval->h->data.sval;
+ dlist *nqname = te->data.lval->h->data.lval;
+ char *nsname = qname_schema(nqname);
+ char *ntname = qname_table(nqname);
- /* TODO partition sname */
+ /* partition sname */
+ if (!nsname)
+ nsname = sname;
if (te->token == SQL_TABLE) {
- return rel_alter_table(sql->sa,
DDL_ALTER_TABLE_ADD_TABLE, sname, tname, sname, ntname, 0);
+ return rel_alter_table(sql->sa,
DDL_ALTER_TABLE_ADD_TABLE, sname, tname, nsname, ntname, 0);
} else {
int drop_action =
te->data.lval->h->next->data.i_val;
- return rel_alter_table(sql->sa,
DDL_ALTER_TABLE_DEL_TABLE, sname, tname, sname, ntname, drop_action);
+ return rel_alter_table(sql->sa,
DDL_ALTER_TABLE_DEL_TABLE, sname, tname, nsname, ntname, drop_action);
}
}
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -1047,7 +1047,7 @@ alter_statement:
| ALTER TABLE qname ADD TABLE qname
{ dlist *l = L();
append_list(l, $3);
- append_symbol(l, _symbol_create_list( SQL_TABLE, $6));
+ append_symbol(l, _symbol_create_list( SQL_TABLE,
append_list(L(),$6)));
$$ = _symbol_create_list( SQL_ALTER_TABLE, l ); }
| ALTER TABLE qname ALTER alter_table_element
{ dlist *l = L();
@@ -1160,9 +1160,9 @@ drop_table_element:
append_string(l, $2 );
append_int(l, $3 );
$$ = _symbol_create_list( SQL_DROP_CONSTRAINT, l ); }
- | TABLE ident drop_action
+ | TABLE qname drop_action
{ dlist *l = L();
- append_string(l, $2 );
+ append_list(l, $2 );
append_int(l, $3 );
append_int(l, 0);
$$ = _symbol_create_list( SQL_DROP_TABLE, l ); }
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -569,7 +569,6 @@ load_part(sql_trans *tr, sql_table *t, o
v = table_funcs.column_find_value(tr, find_sql_column(objects, "nr"),
rid);
id = *(sqlid*)v; _DELETE(v);
v = table_funcs.column_find_value(tr, find_sql_column(objects, "name"),
rid);
- /* limitation, parts can only be within the same schema */
base_init(tr->sa, &pt->base, id, TR_OLD, v); _DELETE(v);
cs_add(&t->members, pt, TR_OLD);
}
@@ -1019,7 +1018,6 @@ load_schema(sql_trans *tr, sqlid id, oid
for(rid = table_funcs.rids_next(rs); rid != oid_nil; rid =
table_funcs.rids_next(rs))
cs_add(&s->seqs, load_seq(tr, s, rid), TR_OLD);
table_funcs.rids_destroy(rs);
- set_members(&s->tables);
return s;
}
@@ -1069,6 +1067,7 @@ load_trans(sql_trans* tr, sqlid id)
sql_column *sysschema_ids = find_sql_column(sysschema, "id");
rids *schemas = table_funcs.rids_select(tr, sysschema_ids, NULL, NULL);
oid rid;
+ node *n;
if (bs_debug)
fprintf(stderr, "#load trans\n");
@@ -1078,6 +1077,12 @@ load_trans(sql_trans* tr, sqlid id)
if (ns && ns->base.id > id)
cs_add(&tr->schemas, ns, TR_OLD);
}
+ /* members maybe from different schemas */
+ for (n = tr->schemas.set->h; n; n = n->next) {
+ sql_schema *s = n->data;
+
+ set_members(&s->tables);
+ }
table_funcs.rids_destroy(schemas);
}
diff --git a/sql/test/mergetables/Tests/alter.stable.err
b/sql/test/mergetables/Tests/alter.stable.err
--- a/sql/test/mergetables/Tests/alter.stable.err
+++ b/sql/test/mergetables/Tests/alter.stable.err
@@ -38,8 +38,8 @@ QUERY = alter table mys.smalltable add t
ERROR = !ALTER TABLE: no such table 'part1' in schema 'mys'
MAPI = (monetdb) /var/tmp/mtest-22017/.s.monetdb.30920
QUERY = alter table mys.smalltable add table mys.part1;
-ERROR = !ALTER TABLE: no such table 'mys' in schema 'mys'
-MAPI = (monetdb) /var/tmp/mtest-22017/.s.monetdb.30920
+ERROR = !ALTER TABLE: no such table 'part1' in schema 'mys'
+MAPI = (monetdb) /var/tmp/mtest-17872/.s.monetdb.31850
QUERY = select * from mys.smalltable;
ERROR = !MERGE or REPLICA TABLE should have at least one table associated
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list