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