Changeset: fb9b6b17cd9a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fb9b6b17cd9a
Modified Files:
sql/storage/store.c
sql/test/mergetables/Tests/mergetabledependencies.test
Branch: sqlfuncfix
Log Message:
Added missing case and respective test
diffs (222 lines):
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3324,7 +3324,7 @@ sql_trans_copy_key( sql_trans *tr, sql_t
return res;
if (!isNew(rkey) && isGlobal(rkey->t) && !isGlobalTemp(rkey->t)
&& (res = sql_trans_add_dependency(tr, rkey->t->base.id, dml))) /* disallow
concurrent updates on other key */
return res;
- if ((res = store_reset_sql_functions(tr, rkey->t->base.id))) /*
reset sql that depend on table */
+ if ((res = store_reset_sql_functions(tr, rkey->t->base.id))) /*
reset sql functions depending on the table */
return res;
}
@@ -3351,7 +3351,7 @@ sql_trans_copy_key( sql_trans *tr, sql_t
if (!isNew(kc->c) && (res = sql_trans_add_dependency(tr,
kc->c->base.id, ddl)))
return res;
}
- if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
that depend on table */
+ if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
functions depending on the table */
return res;
/* TODO this has to be cleaned out too */
@@ -3406,7 +3406,7 @@ sql_trans_copy_idx( sql_trans *tr, sql_t
if ((res = os_add(t->s->idxs, tr, ni->base.name, dup_base(&ni->base))))
return res;
- if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
that depend on table */
+ if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
functions depending on the table */
return res;
if (isDeclaredTable(i->t))
@@ -3471,7 +3471,7 @@ sql_trans_copy_trigger( sql_trans *tr, s
if ((res = os_add(t->s->triggers, tr, nt->base.name,
dup_base(&nt->base))))
return res;
- if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
that depend on table */
+ if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
functions depending on the table */
return res;
if (!isDeclaredTable(t))
@@ -5122,7 +5122,7 @@ sql_trans_propagate_dependencies_parents
sql_part *pt = NULL;
for (; mt; mt = pt?pt->t:NULL) {
- if ((res = store_reset_sql_functions(tr, mt->base.id))) /*
reset sql that depend on table */
+ if ((res = store_reset_sql_functions(tr, mt->base.id))) /*
reset sql functions depending on the table */
return res;
if (!isNew(mt) && (res = sql_trans_add_dependency(tr,
mt->base.id, ddl))) /* protect from another transaction changing the table's
schema */
return res;
@@ -5138,7 +5138,10 @@ sql_trans_propagate_dependencies_childre
{
int res = LOG_OK;
- if ((res = store_reset_sql_functions(tr, pt->base.id))) /* reset sql
that depend on table */
+ if (THRhighwater()) /* for now throw malloc failure error */
+ return -1;
+
+ if ((res = store_reset_sql_functions(tr, pt->base.id))) /* reset sql
functions depending on the table */
return res;
if (!isNew(pt)) {
if ((res = sql_trans_add_dependency(tr, pt->base.id, ddl))) /*
protect from another transaction changing the table's schema */
@@ -5524,7 +5527,8 @@ sql_trans_del_table(sql_trans *tr, sql_t
{
int res = LOG_OK;
sqlstore *store = tr->store;
- sql_table *dup = NULL;
+ sql_table *dup = NULL, *mt_it;
+ sql_part *mti_part = NULL;
if ((res = new_table(tr, mt, &dup)))
return res;
@@ -5541,9 +5545,13 @@ sql_trans_del_table(sql_trans *tr, sql_t
if (drop_action == DROP_CASCADE && (res = sql_trans_drop_table_id(tr,
mt->s, pt->base.id, drop_action)))
return res;
- if ((res = store_reset_sql_functions(tr, mt->base.id))) /* reset sql
that depend on table */
- return res;
- if ((res = store_reset_sql_functions(tr, pt->base.id))) /* reset sql
that depend on table */
+ for (mt_it = mt; mt_it; mt_it = mti_part?mti_part->t:NULL) {
+ /* functions depending on parent tables need to be recompiled,
ugh */
+ if ((res = store_reset_sql_functions(tr, mt_it->base.id))) /*
reset sql functions depending on the table */
+ return res;
+ mti_part = partition_find_part(tr, mt_it, NULL);
+ }
+ if ((res = store_reset_sql_functions(tr, pt->base.id))) /* reset sql
functions depending on the table */
return res;
return res;
}
@@ -6048,7 +6056,7 @@ sql_trans_alter_null(sql_trans *tr, sql_
/* disallow concurrent updates on the column if not null is set
*/
if (!isnull && !isNew(col) && isGlobal(col->t) &&
!isGlobalTemp(col->t) && (res = sql_trans_add_dependency(tr, col->t->base.id,
dml)))
return res;
- if ((res = store_reset_sql_functions(tr, col->t->base.id))) /*
reset sql that depend on table */
+ if ((res = store_reset_sql_functions(tr, col->t->base.id))) /*
reset sql functions depending on the table */
return res;
}
return res;
@@ -6075,7 +6083,7 @@ sql_trans_alter_access(sql_trans *tr, sq
return res;
t = dup;
t->access = access;
- if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset
sql that depend on table */
+ if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset
sql functions depending on the table */
return res;
}
return res;
@@ -6112,7 +6120,7 @@ sql_trans_alter_default(sql_trans *tr, s
dup->def = NULL;
if (val)
dup->def = SA_STRDUP(tr->sa, val);
- if ((res = store_reset_sql_functions(tr, col->t->base.id))) /*
reset sql that depend on table */
+ if ((res = store_reset_sql_functions(tr, col->t->base.id))) /*
reset sql functions depending on the table */
return res;
}
return res;
@@ -6146,7 +6154,7 @@ sql_trans_alter_storage(sql_trans *tr, s
dup->storage_type = NULL;
if (storage)
dup->storage_type = SA_STRDUP(tr->sa, storage);
- if ((res = store_reset_sql_functions(tr, col->t->base.id))) /*
reset sql that depend on table */
+ if ((res = store_reset_sql_functions(tr, col->t->base.id))) /*
reset sql functions depending on the table */
return res;
}
return res;
@@ -6530,7 +6538,7 @@ sql_trans_drop_key(sql_trans *tr, sql_sc
if (k->idx && (res = sql_trans_drop_idx(tr, s, k->idx->base.id,
drop_action)))
return res;
- if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
that depend on table */
+ if ((res = store_reset_sql_functions(tr, t->base.id))) /* reset sql
functions depending on the table */
return res;
if (!isTempTable(k->t) && (res = sys_drop_key(tr, k, drop_action)))
@@ -6638,7 +6646,7 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc
if (!isTempTable(i->t) && (res = sys_drop_idx(tr, i, drop_action)))
return res;
- if ((res = store_reset_sql_functions(tr, i->t->base.id))) /* reset sql
that depend on table */
+ if ((res = store_reset_sql_functions(tr, i->t->base.id))) /* reset sql
functions depending on the table */
return res;
i->base.deleted = 1;
@@ -6729,7 +6737,7 @@ sql_trans_drop_trigger(sql_trans *tr, sq
list_append(tr->dropped, local_id);
}
- if ((res = store_reset_sql_functions(tr, i->t->base.id))) /* reset sql
that depend on table */
+ if ((res = store_reset_sql_functions(tr, i->t->base.id))) /* reset sql
functions depending on the table */
return res;
if ((res = sys_drop_trigger(tr, i)))
return res;
diff --git a/sql/test/mergetables/Tests/mergetabledependencies.test
b/sql/test/mergetables/Tests/mergetabledependencies.test
--- a/sql/test/mergetables/Tests/mergetabledependencies.test
+++ b/sql/test/mergetables/Tests/mergetabledependencies.test
@@ -196,3 +196,68 @@ 1
statement ok
rollback
+statement ok
+start transaction
+
+statement ok
+CREATE MERGE TABLE parent1(a int)
+
+statement ok
+CREATE MERGE TABLE parent2(a int)
+
+statement ok
+CREATE TABLE child1(a int)
+
+statement ok rowcount 2
+INSERT INTO child1 VALUES (1),(2)
+
+statement ok
+CREATE TABLE child2(a int)
+
+statement ok rowcount 2
+INSERT INTO child2 VALUES (3),(4)
+
+statement ok
+CREATE TABLE child3(a int)
+
+statement ok rowcount 2
+INSERT INTO child3 VALUES (5),(6)
+
+statement ok
+ALTER TABLE parent1 ADD table child1
+
+statement ok
+ALTER TABLE parent1 ADD table parent2
+
+statement ok
+ALTER TABLE parent2 ADD table child2
+
+statement ok
+ALTER TABLE parent2 ADD table child3
+
+statement ok
+create function myfunc() returns table(a int) begin return select a from
parent1; end
+
+query I rowsort
+SELECT a from myfunc()
+----
+1
+2
+3
+4
+5
+6
+
+statement ok
+ALTER TABLE parent2 DROP table child2
+
+query I rowsort
+SELECT a from myfunc()
+----
+1
+2
+5
+6
+
+statement ok
+rollback
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list