Update of /cvsroot/monetdb/sql/src/storage/bat
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv24426/src/storage/bat

Modified Files:
        bat_store.mx 
Log Message:
propagated changes of Wednesday Jun 13 2007 - Friday Jun 15 2007
from the SQL_2-18 branch to the development trunk


Index: bat_store.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/storage/bat/bat_store.mx,v
retrieving revision 1.139
retrieving revision 1.140
diff -u -d -r1.139 -r1.140
--- bat_store.mx        12 Jun 2007 17:25:49 -0000      1.139
+++ bat_store.mx        15 Jun 2007 14:32:43 -0000      1.140
@@ -443,15 +443,31 @@
 void
 key_destroy(sql_key *k)
 {
+       node *n;
+
        /* remove key from schema */
        list_remove_data(k->t->s->keys,k);
        if (k->type == ukey || k->type == pkey) {
                sql_ukey *uk = (sql_ukey *) k;
                if (uk->keys) {
+                       for (n = uk->keys->h; n; n= n->next) {
+                               sql_fkey *fk = (sql_fkey *) n->data;
+                               fk->rkey = NULL;
+                       }
                        list_destroy(uk->keys);
                        uk->keys = NULL;
                }
        }
+       /* we need to be removed from the rkey list */
+       if (k->type == fkey) {
+               sql_fkey *fk = (sql_fkey *) k;
+
+               if (fk->rkey) {
+                       n = list_find_name(fk->rkey->keys, fk->k.base.name);
+                       list_remove_node(fk->rkey->keys, n);
+               }
+               fk->rkey = NULL;
+       }
        list_destroy(k->columns);
        base_destroy(&k->base);
        _DELETE(k);
@@ -3601,6 +3617,7 @@
                        n = list_find_name(fk->rkey->keys, fk->k.base.name);
                        list_remove_node(fk->rkey->keys, n);
                }
+               fk->rkey = NULL;
        }
        if (k->type == pkey) {  
                sql_ukey *uk = (sql_ukey *) k;
@@ -4216,6 +4233,15 @@
        return LOG_OK;
 }
 
+int
+reset_key(sql_trans *tr, sql_key *fk, sql_key *pfk)
+{
+       (void)tr;
+       (void)fk;
+       (void)pfk;
+       return LOG_OK;
+}
+
 static int
 reset_column(sql_trans *tr, sql_column *fc, sql_column *pfc)
 {
@@ -4314,7 +4340,7 @@
                if (ok == LOG_OK)
                        ok = reset_changeset( tr, &ft->idxs, &pft->idxs, 
&ft->base, (resetf) &reset_idx, (dupfunc) &idx_dup);
                if (ok == LOG_OK)
-                       ok = reset_changeset( tr, &ft->keys, &pft->keys, 
&ft->base, (resetf) NULL, (dupfunc) &key_dup);
+                       ok = reset_changeset( tr, &ft->keys, &pft->keys, 
&ft->base, (resetf) &reset_key, (dupfunc) &key_dup);
                if (ok == LOG_OK)
                        ok = reset_changeset( tr, &ft->triggers, 
&pft->triggers, &ft->base, (resetf) NULL, (dupfunc) &trigger_dup);
 
@@ -4568,10 +4594,14 @@
        list_remove_data(k->t->s->keys, k);
        if (k->type == fkey) {
                sql_fkey *fk = (sql_fkey *) k;
-               node *n = list_find_name(fk->rkey->keys, fk->k.base.name);
-
-               list_remove_node(fk->rkey->keys, n);
+               
+               if (fk->rkey) {
+                       n = list_find_name(fk->rkey->keys, fk->k.base.name);
+                       list_remove_node(fk->rkey->keys, n);
+               }
+               fk->rkey = NULL;
        }
+
        if (isGlobalTable(k->t)) 
                tr->schema_updates ++;
 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to