Changeset: f8357589dd10 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f8357589dd10 Modified Files: sql/server/rel_schema.c sql/server/sql_parser.y sql/storage/store.c sql/test/mergetables/Tests/alter.stable.err Branch: Mar2018 Log Message:
Merge with Jul2017 branch. diffs (103 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 @@ -1352,15 +1352,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 @@ -1055,7 +1055,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(); @@ -1168,9 +1168,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); append_int(l, FALSE ); /* no if exists check */ diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -565,7 +565,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); } @@ -1015,7 +1014,6 @@ load_schema(sql_trans *tr, sqlid id, oid for(rid = table_funcs.rids_next(rs); !is_oid_nil(rid); 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; } @@ -1068,6 +1066,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"); @@ -1077,6 +1076,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 @@ -40,7 +40,7 @@ ERROR = !ALTER TABLE: no such table 'par CODE = 42S02 MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685 QUERY = alter table mys.smalltable add table mys.part1; -ERROR = !ALTER TABLE: no such table 'mys' in schema 'mys' +ERROR = !ALTER TABLE: no such table 'part1' in schema 'mys' CODE = 42S02 MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685 QUERY = select * from mys.smalltable; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list