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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to