Update of /cvsroot/monetdb/sql/src/storage/bat
In directory sc8-pr-cvs16:/tmp/cvs-serv6370/bat
Modified Files:
bat_dependency.mx bat_store.mx sql_catalog.mx
Log Message:
changes to implement drop cascade.
The implementation of drop cascade operations is covered by the tests:
sql/src/test/DropCascade/
Note: All these tests should be green after this checkin..
Index: bat_store.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/storage/bat/bat_store.mx,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -d -r1.127 -r1.128
--- bat_store.mx 12 Apr 2007 12:16:28 -0000 1.127
+++ bat_store.mx 17 Apr 2007 10:27:32 -0000 1.128
@@ -445,8 +445,10 @@
list_remove_data(k->t->s->keys,k);
if (k->type == ukey || k->type == pkey) {
sql_ukey *uk = (sql_ukey *) k;
- if (uk->keys)
+ if (uk->keys) {
list_destroy(uk->keys);
+ uk->keys = NULL;
+ }
}
list_destroy(k->columns);
base_destroy(&k->base);
@@ -3125,6 +3127,7 @@
t->wtime = t->rtime = 0;
t->stime = timestamp ();
t->schema_updates = 0;
+ t->dropped = NULL;
t->status = 0;
if (ot != gtrans)
t->schema_updates = ot->schema_updates;
@@ -3552,16 +3555,29 @@
static int
rollforward_drop_key(sql_trans *tr, sql_key *k)
{
+ node *n = NULL;
+ sql_fkey *fk = NULL;
(void) tr; /* unused! */
-
/* remove key from schema */
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);
+ 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);
+ }
+ }
+ if (k->type == pkey) {
+ sql_ukey *uk = (sql_ukey *) k;
- list_remove_node(fk->rkey->keys, n);
+ if (uk->keys)
+ for (n = uk->keys->h; n; n= n->next) {
+ fk = (sql_fkey *) n->data;
+ fk->rkey = NULL;
+ }
}
+
return LOG_OK;
}
@@ -4422,54 +4438,61 @@
void
sql_trans_drop_all_dependencies(sql_trans *tr, sql_schema *s, int id, short
type)
{
- int dep_id=0, dep_type=0, t_id = -1;
+ int dep_id=0, t_id = -1;
+ short dep_type = 0;
sql_table *t = NULL;
list *dep = sql_trans_get_dependencies(tr, id, type);
node *n = dep->h, *t_n = NULL;
+
while (n) {
dep_id = *(int*) n->data;
- dep_type = *(int*) n->next->data;
-
- switch (dep_type){
- case SCHEMA_DEPENDENCY :
- sql_trans_drop_schema(tr,
s->base.name, dep_id, 1);
- break;
- case TABLE_DEPENDENCY :
- sql_trans_drop_table(tr, s,
NULL, dep_id, 1);
- break;
- case COLUMN_DEPENDENCY :
- t_id =
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY);
- t_n = find_sql_table_node(s,
NULL, t_id);
- t = t_n->data;
- sql_trans_drop_column(tr, t,
NULL, dep_id, 1);
- t_n = NULL;
- t = NULL;
- break;
- case VIEW_DEPENDENCY :
- sql_trans_drop_table(tr, s,
NULL, dep_id, 1);
- break;
- case TRIGGER_DEPENDENCY :
- sql_trans_drop_trigger(tr, s,
NULL, dep_id);
- break;
- case FKEY_DEPENDENCY :
- sql_trans_drop_key(tr, s, NULL,
dep_id, 1);
- break;
- case INDEX_DEPENDENCY :
- sql_trans_drop_idx(tr, s, NULL,
dep_id);
- break;
- case FUNC_DEPENDENCY :
- sql_trans_drop_func(tr, s,
NULL, dep_id, 1);
- break;
- case USER_DEPENDENCY : /*TODO schema and users
dependencies*/
- break;
+ dep_type = *(short*) n->next->data;
+
+ if (! list_find_id(tr->dropped, dep_id)) {
+
+ switch (dep_type){
+ case SCHEMA_DEPENDENCY :
+
sql_trans_drop_schema(tr, s->base.name, dep_id, 1);
+ break;
+ case TABLE_DEPENDENCY :
+
sql_trans_drop_table(tr, s, NULL, dep_id, 1);
+ break;
+ case COLUMN_DEPENDENCY :
+ t_id =
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY);
+ t_n =
find_sql_table_node(s, NULL, t_id);
+ t = t_n->data;
+
sql_trans_drop_column(tr, t, NULL, dep_id, 1);
+ t_n = NULL;
+ t = NULL;
+ break;
+ case VIEW_DEPENDENCY :
+
sql_trans_drop_table(tr, s, NULL, dep_id, 1);
+ break;
+ case TRIGGER_DEPENDENCY :
+
sql_trans_drop_trigger(tr, s, NULL, dep_id, 1);
+ break;
+ case KEY_DEPENDENCY :
+ sql_trans_drop_key(tr,
s, NULL, dep_id, 1);
+ break;
+ case FKEY_DEPENDENCY :
+ sql_trans_drop_key(tr,
s, NULL, dep_id, 1);
+ break;
+ case INDEX_DEPENDENCY :
+ sql_trans_drop_idx(tr,
s, NULL, dep_id, 1);
+ break;
+ case FUNC_DEPENDENCY :
+ sql_trans_drop_func(tr,
s, NULL, dep_id, 1);
+ break;
+ case USER_DEPENDENCY : /*TODO schema and users
dependencies*/
+ break;
+ }
}
n = n->next->next;
}
list_destroy(dep);
- sql_trans_drop_dependencies(tr, id);
}
static void
@@ -4488,7 +4511,7 @@
}
static void
-sys_drop_key(sql_trans *tr, sql_key *k)
+sys_drop_key(sql_trans *tr, sql_key *k, int cascade)
{
node *n;
sql_schema *syss = find_sql_schema(tr, isGlobalTable(k->t)?"sys":"tmp");
@@ -4513,6 +4536,12 @@
}
if (isGlobalTable(k->t))
tr->schema_updates ++;
+
+ sql_trans_drop_dependencies(tr, k->base.id);
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, k->base.id, (k->type
== fkey) ? FKEY_DEPENDENCY : KEY_DEPENDENCY);
+
}
static void
@@ -4532,7 +4561,7 @@
}
static void
-sys_drop_idx(sql_trans *tr, sql_idx * i)
+sys_drop_idx(sql_trans *tr, sql_idx * i, int cascade)
{
node *n;
sql_schema *syss = find_sql_schema(tr, isGlobalTable(i->t)?"sys":"tmp");
@@ -4548,10 +4577,14 @@
sys_drop_ic(tr, i, ic);
}
- /* remove idx from schema */
+ /* remove idx from schema and table*/
list_remove_data(i->t->s->idxs, i);
+ sql_trans_drop_dependencies(tr, i->base.id);
if (isGlobalTable(i->t))
tr->schema_updates ++;
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, i->base.id,
INDEX_DEPENDENCY);
}
static void
@@ -4586,12 +4619,13 @@
}
/* remove trigger from schema */
list_remove_data(i->t->s->triggers, i);
+ sql_trans_drop_dependencies(tr, i->base.id);
if (isGlobalTable(i->t))
tr->schema_updates ++;
}
static void
-sys_drop_sequence(sql_trans *tr, sql_sequence * seq)
+sys_drop_sequence(sql_trans *tr, sql_sequence * seq, int cascade)
{
sql_schema *syss = find_sql_schema(tr, "sys");
sql_table *sysseqs = find_sql_table(syss, "sequences");
@@ -4599,10 +4633,14 @@
assert(rid != -1);
table_delete(tr, sysseqs, rid);
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, seq->base.id,
SEQ_DEPENDENCY);
+
}
static void
-sys_drop_column(sql_trans *tr, sql_column *col)
+sys_drop_column(sql_trans *tr, sql_column *col, int cascade)
{
sql_schema *syss = find_sql_schema(tr,
isGlobalTable(col->t)?"sys":"tmp");
sql_table *syscolumn = find_sql_table(syss, "_columns");
@@ -4611,12 +4649,16 @@
assert(rid != -1);
table_delete(tr, syscolumn, rid);
+ sql_trans_drop_dependencies(tr, col->base.id);
if (isGlobalTable(col->t))
tr->schema_updates ++;
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, col->base.id,
COLUMN_DEPENDENCY);
}
static void
-sys_drop_keys(sql_trans *tr, sql_table *t)
+sys_drop_keys(sql_trans *tr, sql_table *t, int cascade)
{
node *n;
@@ -4624,12 +4666,12 @@
for (n = t->keys.set->h; n; n = n->next) {
sql_key *k = n->data;
- sys_drop_key(tr, k);
+ sys_drop_key(tr, k, cascade);
}
}
static void
-sys_drop_idxs(sql_trans *tr, sql_table *t)
+sys_drop_idxs(sql_trans *tr, sql_table *t, int cascade)
{
node *n;
@@ -4637,12 +4679,12 @@
for (n = t->idxs.set->h; n; n = n->next) {
sql_idx *k = n->data;
- sys_drop_idx(tr, k);
+ sys_drop_idx(tr, k, cascade);
}
}
static void
-sys_drop_columns(sql_trans *tr, sql_table *t)
+sys_drop_columns(sql_trans *tr, sql_table *t, int cascade)
{
node *n;
@@ -4650,12 +4692,12 @@
for (n = t->columns.set->h; n; n = n->next) {
sql_column *c = n->data;
- sys_drop_column(tr, c);
+ sys_drop_column(tr, c, cascade);
}
}
static void
-sys_drop_table(sql_trans *tr, sql_table *t)
+sys_drop_table(sql_trans *tr, sql_table *t, int cascade)
{
sql_schema *syss = find_sql_schema(tr, isGlobalTable(t)?"sys":"tmp");
sql_table *systable = find_sql_table(syss, "_tables");
@@ -4664,18 +4706,23 @@
assert(rid != -1);
table_delete(tr, systable, rid);
- sys_drop_keys(tr, t);
- sys_drop_idxs(tr, t);
+ sys_drop_keys(tr, t, cascade);
+ sys_drop_idxs(tr, t, cascade);
+
+ sql_trans_drop_dependencies(tr, t->base.id);
if (isTable(t))
- sys_drop_columns(tr, t);
+ sys_drop_columns(tr, t, cascade);
if (isGlobalTable(t))
tr->schema_updates ++;
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, t->base.id,
isTable(t) ? TABLE_DEPENDENCY : VIEW_DEPENDENCY);
}
static void
-sys_drop_type(sql_trans *tr, sql_type *type)
+sys_drop_type(sql_trans *tr, sql_type *type, int cascade)
{
sql_schema *syss = find_sql_schema(tr, "sys");
sql_table *sys_tab_type = find_sql_table(syss, "types");
@@ -4685,12 +4732,17 @@
assert(rid != -1);
table_delete(tr, sys_tab_type, rid);
+ sql_trans_drop_dependencies(tr, type->base.id);
+
tr->schema_updates ++;
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, type->base.id,
TYPE_DEPENDENCY);
}
static void
-sys_drop_func(sql_trans *tr, sql_func *func)
+sys_drop_func(sql_trans *tr, sql_func *func, int cascade)
{
sql_schema *syss = find_sql_schema(tr, "sys");
sql_table *sys_tab_func = find_sql_table(syss, "functions");
@@ -4705,11 +4757,16 @@
table_delete(tr, sys_tab_func, rid_func);
table_delete(tr, sys_tab_args, rid_args);
+ sql_trans_drop_dependencies(tr, func->base.id);
+
tr->schema_updates ++;
+
+ if (cascade)
+ sql_trans_drop_all_dependencies(tr, syss, func->base.id,
FUNC_DEPENDENCY);
}
static void
-sys_drop_types(sql_trans *tr, sql_schema *s)
+sys_drop_types(sql_trans *tr, sql_schema *s, int cascade)
{
node *n;
@@ -4717,12 +4774,12 @@
for (n = s->types.set->h; n; n = n->next) {
sql_type *t = n->data;
- sys_drop_type(tr, t);
+ sys_drop_type(tr, t, cascade);
}
}
static void
-sys_drop_tables(sql_trans *tr, sql_schema *s)
+sys_drop_tables(sql_trans *tr, sql_schema *s, int cascade)
{
node *n;
@@ -4730,12 +4787,12 @@
for (n = s->tables.set->h; n; n = n->next) {
sql_table *t = n->data;
- sys_drop_table(tr, t);
+ sys_drop_table(tr, t, cascade);
}
}
static void
-sys_drop_funcs(sql_trans *tr, sql_schema *s)
+sys_drop_funcs(sql_trans *tr, sql_schema *s, int cascade)
{
node *n;
@@ -4743,12 +4800,12 @@
for (n = s->funcs.set->h; n; n = n->next) {
sql_func *f = n->data;
- sys_drop_func(tr, f);
+ sys_drop_func(tr, f, cascade);
}
}
static void
-sys_drop_sequences(sql_trans *tr, sql_schema *s)
+sys_drop_sequences(sql_trans *tr, sql_schema *s, int cascade)
{
node *n;
@@ -4756,7 +4813,7 @@
for (n = s->seqs.set->h; n; n = n->next) {
sql_sequence *seq = n->data;
- sys_drop_sequence(tr, seq);
+ sys_drop_sequence(tr, seq, cascade);
}
}
@@ -4844,14 +4901,27 @@
{
node *n = find_sql_func_node(s, name, id);
sql_func *func = n->data;
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &func->base.id, sizeof(int));
- sys_drop_func(tr, func);
+ if (cascade) {
+ if (! tr->dropped)
+ tr->dropped = list_create((fdestroy) NULL);
+
+ list_append(tr->dropped, local_id);
+ }
+
+ sys_drop_func(tr, func, cascade);
func->base.wtime = s->base.wtime = tr->wtime = tr->stime;
tr->schema_updates ++;
cs_del(&s->funcs, n, func->base.flag);
- if (cascade)
- sql_trans_drop_all_dependencies(tr, s, func->base.id,
FUNC_DEPENDENCY);
+
+ if ( name && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
+ }
+
}
sql_schema *
@@ -4885,20 +4955,32 @@
sql_schema *s = n->data;
sql_table *sysschema = find_sql_table(find_sql_schema(tr, "sys"),
"schemas");
ssize_t rid = column_find_row(tr, find_sql_column(sysschema, "id"),
&s->base.id, NULL);
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &s->base.id, sizeof(int));
+
+ if (cascade) {
+ if (! tr->dropped)
+ tr->dropped = list_create((fdestroy) NULL);
+
+ list_append(tr->dropped, local_id);
+ }
+
assert(rid != -1);
table_delete(tr, sysschema, rid);
- sys_drop_funcs(tr, s);
- sys_drop_tables(tr, s);
- sys_drop_types(tr, s);
- sys_drop_sequences(tr, s);
+ sys_drop_funcs(tr, s, cascade);
+ sys_drop_tables(tr, s, cascade);
+ sys_drop_types(tr, s, cascade);
+ sys_drop_sequences(tr, s, cascade);
s->base.wtime = tr->wtime = tr->stime;
tr->schema_updates ++;
cs_del(&tr->schemas, n, s->base.flag);
-
- if (cascade)
- sql_trans_drop_all_dependencies(tr, s, id, SCHEMA_DEPENDENCY);
+
+ if ( sname && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
+ }
}
@@ -5020,21 +5102,29 @@
{
node *n = find_sql_table_node(s, name, id);
sql_table *t = n->data;
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &t->base.id, sizeof(int));
- sys_drop_table(tr, t);
+ if (cascade) {
+ if (! tr->dropped)
+ tr->dropped = list_create((fdestroy) NULL);
+
+ list_append(tr->dropped, local_id);
+ }
+
+
+ sys_drop_table(tr, t, cascade);
t->base.wtime = s->base.wtime = tr->wtime = tr->stime;
if (isGlobalTable(t))
tr->schema_updates ++;
cs_del(&s->tables, n, t->base.flag);
-
- if (cascade) {
- if (isTable(t))
- sql_trans_drop_all_dependencies(tr, s, id,
TABLE_DEPENDENCY);
- else
- sql_trans_drop_all_dependencies(tr, s, id,
VIEW_DEPENDENCY);
+
+ if ( name && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
}
-
+
}
size_t
@@ -5186,17 +5276,29 @@
{
node *n = find_sql_column_node(t, name, id);
sql_column *col = n->data;
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &col->base.id, sizeof(int));
+ if (cascade) {
+ if (! tr->dropped)
+ tr->dropped = list_create((fdestroy) NULL);
+
+ list_append(tr->dropped, local_id);
+ }
+
if (isTable(t))
- sys_drop_column(tr, col);
+ sys_drop_column(tr, col, cascade);
col->base.wtime = t->base.wtime = t->s->base.wtime = tr->wtime =
tr->stime;
cs_del(&t->columns, n, col->base.flag);
if (isGlobalTable(t))
tr->schema_updates ++;
-
- if (cascade)
- sql_trans_drop_all_dependencies(tr, t->s, id,
COLUMN_DEPENDENCY);
+
+ if ( name && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
+ }
+
}
sql_column *
@@ -5275,7 +5377,7 @@
uk->keys = NULL;
- if (nk->type == pkey)
+ if (nk->type == pkey)
t->pkey = uk;
cs_add(&t->keys, nk, TR_NEW);
@@ -5330,6 +5432,8 @@
table_insert(tr, syskey, &nk->base.id, &t->base.id, &nk->type,
nk->base.name, (nk->type == fkey) ? &((sql_fkey *) nk)->rkey->k.base.id : &neg,
&action);
+ sql_trans_create_dependency(tr, ((sql_fkey *) nk)->rkey->k.base.id,
nk->base.id, FKEY_DEPENDENCY);
+
syskey->base.wtime = syskey->s->base.wtime = t->base.wtime =
t->s->base.wtime = tr->wtime = tr->stime;
if (isGlobalTable(t))
tr->schema_updates ++;
@@ -5352,8 +5456,10 @@
if (k->idx)
sql_trans_create_ic(tr, k->idx, c);
- if (k->type == pkey)
+ if (k->type == pkey) {
+ sql_trans_create_dependency(tr, c->base.id, k->base.id,
KEY_DEPENDENCY);
sql_trans_alter_null(tr, c, 0);
+ }
table_insert(tr, syskc, &k->base.id, kc->c->base.name, &kc->trunc, &nr);
@@ -5379,6 +5485,8 @@
if (k->idx)
sql_trans_create_ic(tr, k->idx, c);
+ sql_trans_create_dependency(tr, c->base.id, k->base.id,
FKEY_DEPENDENCY);
+
table_insert(tr, syskc, &k->base.id, kc->c->base.name, &kc->trunc, &nr);
syskc->base.wtime = tr->wtime = tr->stime;
@@ -5390,23 +5498,44 @@
void
sql_trans_drop_key(sql_trans *tr, sql_schema *s, char *name, int id, int
cascade)
{
- node *n = name ? list_find_name(s->keys, name) : list_find_id(s->keys,
id);
+ node *n = name ? list_find_name(s->keys, name) :
list_find_base_id(s->keys, id);
sql_key *k = n->data;
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &k->base.id, sizeof(int));
+ if (cascade) {
+ if (! tr->dropped)
+ tr->dropped = list_create((fdestroy) NULL);
+
+ list_append(tr->dropped, local_id);
+ }
+
if (!isTempTable(k->t))
- sys_drop_key(tr, k);
+ sys_drop_key(tr, k, cascade);
k->base.wtime = k->t->base.wtime = s->base.wtime = tr->wtime =
tr->stime;
if (isGlobalTable(k->t))
tr->schema_updates ++;
- n = cs_find_name(&k->t->keys, name);
+
+ /*Clean the key from the keys*/
+ n = cs_find_name(&k->t->keys, k->base.name);
if (n)
cs_del(&k->t->keys, n, k->base.flag);
- if (cascade && (k->type == pkey))
- sql_trans_drop_all_dependencies(tr, s, k->base.id,
KEY_DEPENDENCY);
+ /*Clean the index of the key*/
+
+ if (k->type == fkey) {
+ n = cs_find_name(&k->t->idxs, k->base.name);
+ if (n)
+ cs_del(&k->t->idxs, n, k->base.flag);
+ }
+ if ( name && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
+ }
+
}
sql_idx *
@@ -5483,20 +5612,35 @@
}
void
-sql_trans_drop_idx(sql_trans *tr, sql_schema *s, char *name, int id)
+sql_trans_drop_idx(sql_trans *tr, sql_schema *s, char *name, int id, int
cascade)
{
- node *n = name ? list_find_name(s->idxs, name) : list_find_id(s->idxs,
id);
+ node *n = name ? list_find_name(s->idxs, name) :
list_find_base_id(s->idxs, id);
sql_idx *i = n->data;
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &i->base.id, sizeof(int));
+
+ if (cascade) {
+ if (! tr->dropped)
+ tr->dropped = list_create((fdestroy) NULL);
+
+ list_append(tr->dropped, local_id);
+ }
+
if (!isTempTable(i->t))
- sys_drop_idx(tr, i);
+ sys_drop_idx(tr, i, cascade);
i->base.wtime = i->t->base.wtime = s->base.wtime = tr->wtime =
tr->stime;
if (isGlobalTable(i->t))
tr->schema_updates ++;
- n = cs_find_name(&i->t->idxs, name);
+ n = cs_find_name(&i->t->idxs, i->base.name);
if (n)
cs_del(&i->t->idxs, n, i->base.flag);
+
+ if ( name && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
+ }
}
sql_trigger *
@@ -5556,18 +5700,31 @@
}
void
-sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, char *name, int id)
+sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, char *name, int id, int
cascade)
{
- node *n = name ? list_find_name(s->triggers, name) :
list_find_id(s->triggers, id);
+ node *n = name ? list_find_name(s->triggers, name) :
list_find_base_id(s->triggers, id);
sql_trigger *i = n->data;
+ int *local_id = GDKmalloc(sizeof(int));
+ memcpy(local_id, &i->base.id, sizeof(int));
+
+ if (cascade) {
+ list_append(tr->dropped, local_id);
+ }
+
+
sys_drop_trigger(tr, i);
i->base.wtime = i->t->base.wtime = s->base.wtime = tr->wtime =
tr->stime;
if (isGlobalTable(i->t))
tr->schema_updates ++;
- n = cs_find_name(&i->t->triggers, name);
+ n = cs_find_name(&i->t->triggers, i->base.name);
if (n)
cs_del(&i->t->triggers, n, i->base.flag);
+
+ if ( name && tr->dropped) {
+ list_destroy(tr->dropped);
+ tr->dropped = NULL;
+ }
}
sql_sequence *
@@ -5597,12 +5754,12 @@
}
void
-sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name)
+sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name, int cascade)
{
node *n = cs_find_name(&s->seqs, name);
sql_sequence *seq = n->data;
- sys_drop_sequence(tr, seq);
+ sys_drop_sequence(tr, seq, cascade);
seq->base.wtime = s->base.wtime = tr->wtime = tr->stime;
cs_del(&s->seqs, n, seq->base.flag);
}
Index: bat_dependency.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/storage/bat/bat_dependency.mx,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- bat_dependency.mx 28 Mar 2007 14:55:08 -0000 1.12
+++ bat_dependency.mx 17 Apr 2007 10:27:32 -0000 1.13
@@ -127,7 +127,7 @@
{
list_append(dep_list, id_node->data);
- list_append(dep_list, type_node->data);
+ list_append(dep_list, (short *) type_node->data);
id_node = id_node->next;
type_node = type_node->next;
}
Index: sql_catalog.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/storage/bat/sql_catalog.mx,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- sql_catalog.mx 28 Mar 2007 14:55:08 -0000 1.18
+++ sql_catalog.mx 17 Apr 2007 10:27:37 -0000 1.19
@@ -77,6 +77,23 @@
return NULL;
}
+node *
+list_find_base_id(list *l, int id)
+{
+ node *n;
+
+ if (l)
+ for (n = l->h; n; n = n->next) {
+ sql_base *b = n->data;
+
+ /* check if names match */
+ if (id == b->id) {
+ return n;
+ }
+ }
+ return NULL;
+}
+
node *
find_sql_key_node(sql_table *t, char *kname, int id)
-------------------------------------------------------------------------
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