Changeset: 21be459f94b7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=21be459f94b7
Modified Files:
        sql/storage/store.c
Branch: Jul2015
Log Message:

properly load keys over 2 schema's


diffs (59 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -247,6 +247,24 @@ load_keycolumn(sql_trans *tr, sql_key *k
        assert(kc->c);
 }
 
+static void *
+find_key( sql_trans *tr, sql_table *t, sqlid rkey)
+{
+       node *n, *m;
+
+       if ((n = list_find(t->s->keys, &rkey, (fcmp) &key_cmp))){
+               return n->data;
+       }
+       for (n = tr->schemas.set->h; n; n = n->next) {
+               sql_schema *s = n->data;
+
+               if ((m = list_find(s->keys, &rkey, (fcmp) &key_cmp))){
+                       return m->data;
+               }
+       }
+       return NULL;
+}
+                       
 static sql_key *
 load_key(sql_trans *tr, sql_table *t, oid rid)
 {
@@ -309,12 +327,11 @@ load_key(sql_trans *tr, sql_table *t, oi
        if (ktype == fkey) {
                sql_fkey *fk = (sql_fkey *) nk;
                sqlid rkey;
+               sql_ukey *uk = NULL;
 
                v = table_funcs.column_find_value(tr, find_sql_column(keys, 
"rkey"), rid);
                rkey = *(sqlid *)v;             _DELETE(v);
-               if ((n = list_find(t->s->keys, &rkey, (fcmp) &key_cmp))){
-                       sql_ukey *uk = n->data;
-
+               if ((uk = find_key(tr, t, rkey)) != NULL) {
                        fk->rkey = uk;
                        if (!uk->keys)
                                uk->keys = list_new(tr->sa, NULL);
@@ -329,13 +346,12 @@ load_key(sql_trans *tr, sql_table *t, oi
 
                for(rid = table_funcs.rids_next(rs); rid != oid_nil; rid = 
table_funcs.rids_next(rs)) {
                        sqlid fkey;
+                       sql_fkey *fk;
 
                        v = table_funcs.column_find_value(tr, 
find_sql_column(keys, "id"), rid);
                        fkey = *(sqlid *)v;     _DELETE(v);
 
-                       if ((n = list_find(t->s->keys, &fkey, (fcmp)&key_cmp))){
-                               sql_fkey *fk = n->data;
-
+                       if ((fk = find_key(tr, t, fkey)) != NULL) {
                                if (!uk->keys)
                                        uk->keys = list_new(tr->sa, NULL);
                                if (!list_find(uk->keys, &fk->k.base.id, (fcmp) 
&key_cmp))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to