Changeset: e01286a0b8f5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e01286a0b8f5 Modified Files: sql/server/rel_propagate.c sql/server/rel_schema.c sql/server/rel_updates.c sql/test/merge-partitions/Tests/mergepart15.stable.err Branch: merge-partitions Log Message:
As I don't know the transaction manager entirely :( I will simply check the cached value of the upper merge table. If the bottom table could not be found, then is no longer part of the merge table. diffs (71 lines): diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c --- a/sql/server/rel_propagate.c +++ b/sql/server/rel_propagate.c @@ -461,9 +461,14 @@ rel_propagate(mvc *sql, sql_rel *rel, in } else { assert(0); } - } else if(t->p && (isRangePartitionTable(t->p) || isListPartitionTable(t->p)) && !find_prop(l->p, PROP_USED)) { - if(is_insert(rel->op)) { //insertion directly to sub-table (must do validation) - return rel_subtable_insert(sql, rel, t, changes); + } else if(t->p) { + sql_part *pt = find_sql_part(t->p, t->base.name); + if(!pt) { + t->p = NULL; + } else if((isRangePartitionTable(t->p) || isListPartitionTable(t->p)) && !find_prop(l->p, PROP_USED)) { + if(is_insert(rel->op)) { //insertion directly to sub-table (must do validation) + return rel_subtable_insert(sql, rel, t, changes); + } } } } diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -1060,7 +1060,8 @@ table_element(mvc *sql, symbol *s, sql_s } static int -create_partition_column(mvc *sql, sql_table *t, int tt, symbol* partition_def) { +create_partition_column(mvc *sql, sql_table *t, int tt, symbol* partition_def) +{ if((tt == tt_list_partition || tt == tt_range_partition) && partition_def) { dlist* list = partition_def->data.lval; str colname = list->h->next->data.sval; diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -904,10 +904,14 @@ update_table(mvc *sql, dlist *qname, dli if(isRangePartitionTable(t) || isListPartitionTable(t)) { partitioned_column = t->pcol->colnr; - } else if(t->p && (isRangePartitionTable(t->p) || isListPartitionTable(t->p))) { - partitioned_column = t->p->pcol->colnr; + } else if(t->p) { + sql_part *pt = find_sql_part(t->p, t->base.name); + if(!pt) { + t->p = NULL; + } else if(isRangePartitionTable(t->p) || isListPartitionTable(t->p)) { + partitioned_column = t->p->pcol->colnr; + } } - res = bt; #if 0 dlist *selection = dlist_create(sql->sa); diff --git a/sql/test/merge-partitions/Tests/mergepart15.stable.err b/sql/test/merge-partitions/Tests/mergepart15.stable.err --- a/sql/test/merge-partitions/Tests/mergepart15.stable.err +++ b/sql/test/merge-partitions/Tests/mergepart15.stable.err @@ -30,9 +30,9 @@ stderr of test 'mergepart15` in director MAPI = (monetdb) /var/tmp/mtest-26053/.s.monetdb.37352 QUERY = ALTER TABLE testme ADD TABLE sublimits1 AS PARTITION WITH NULL; --error -ERROR = !ALTER TABLE: there are non-null values in the column which is not allowed for this partition -CODE = 42000 -MAPI = (monetdb) /var/tmp/mtest-26053/.s.monetdb.37352 +ERROR = !ALTER TABLE: there are values in the column a, outside the partition range +CODE = M0M29 +MAPI = (monetdb) /var/tmp/mtest-18994/.s.monetdb.34581 QUERY = INSERT INTO testme VALUES (2, 'third'); --error ERROR = !INSERT: the insert violates the partition range of values CODE = M0M29 _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list