Changeset: 23c8a1a7ff28 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23c8a1a7ff28 Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_cat.c sql/common/sql_list.c sql/include/sql_catalog.h sql/server/rel_optimizer.c sql/server/rel_propagate.c sql/server/rel_schema.c sql/server/rel_select.c sql/server/rel_updates.c sql/server/sql_partition.c sql/storage/sql_catalog.c sql/storage/store.c sql/test/merge-partitions/Tests/mergepart01.stable.err Branch: Oct2020 Log Message:
Merged with Jun2020 diffs (truncated from 1833 to 300 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -3932,7 +3932,7 @@ rel2bin_insert(backend *be, sql_rel *rel pin = refs_find_rel(refs, prel); if (constraint && !be->first_statement_generated) - sql_insert_check_null(be, (be->cur_append && t->p) ? t->p : t, inserts->op4.lval); + sql_insert_check_null(be, /*(be->cur_append && t->p) ? t->p :*/ t, inserts->op4.lval); l = sa_list(sql->sa); @@ -3944,12 +3944,14 @@ rel2bin_insert(backend *be, sql_rel *rel } /* before */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_insert_triggers(be, up, updates, 0)) return sql_error(sql, 02, SQLSTATE(27000) "INSERT INTO: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_insert_triggers(be, t, updates, 0)) return sql_error(sql, 02, SQLSTATE(27000) "INSERT INTO: triggers failed for table '%s'", t->base.name); @@ -3986,12 +3988,14 @@ rel2bin_insert(backend *be, sql_rel *rel if (!insert) return NULL; +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_insert_triggers(be, up, updates, 1)) return sql_error(sql, 02, SQLSTATE(27000) "INSERT INTO: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_insert_triggers(be, t, updates, 1)) return sql_error(sql, 02, SQLSTATE(27000) "INSERT INTO: triggers failed for table '%s'", t->base.name); if (ddl) { @@ -4822,7 +4826,7 @@ sql_update(backend *be, sql_table *t, st node *n; if (!be->first_statement_generated) - sql_update_check_null(be, (be->cur_append && t->p) ? t->p : t, updates); + sql_update_check_null(be, /*(be->cur_append && t->p) ? t->p :*/ t, updates); /* check keys + get idx */ idx_updates = update_idxs_and_check_keys(be, t, rows, updates, l, NULL); @@ -4832,12 +4836,14 @@ sql_update(backend *be, sql_table *t, st } /* before */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_update_triggers(be, up, rows, updates, 0)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_update_triggers(be, t, rows, updates, 0)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", t->base.name); @@ -4852,12 +4858,14 @@ sql_update(backend *be, sql_table *t, st return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: cascade failed for table '%s'", t->base.name); /* after */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_update_triggers(be, up, rows, updates, 1)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_update_triggers(be, t, rows, updates, 1)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", t->base.name); @@ -4919,7 +4927,7 @@ rel2bin_update(backend *be, sql_rel *rel updates[c->colnr] = bin_find_column(be, update, ce->l, ce->r); } if (!be->first_statement_generated) - sql_update_check_null(be, (be->cur_append && t->p) ? t->p : t, updates); + sql_update_check_null(be, /*(be->cur_append && t->p) ? t->p :*/ t, updates); /* check keys + get idx */ updcol = first_updated_col(updates, list_length(t->columns.set)); @@ -4947,12 +4955,14 @@ rel2bin_update(backend *be, sql_rel *rel } /* before */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_update_triggers(be, up, tids, updates, 0)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_update_triggers(be, t, tids, updates, 0)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", t->base.name); @@ -4969,12 +4979,14 @@ rel2bin_update(backend *be, sql_rel *rel return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: cascade failed for table '%s'", t->base.name); /* after */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_update_triggers(be, up, tids, updates, 1)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_update_triggers(be, t, tids, updates, 1)) return sql_error(sql, 02, SQLSTATE(27000) "UPDATE: triggers failed for table '%s'", t->base.name); @@ -5157,12 +5169,14 @@ sql_delete(backend *be, sql_table *t, st } /* before */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_delete_triggers(be, up, v, 0, 1, 3)) return sql_error(sql, 02, SQLSTATE(27000) "DELETE: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_delete_triggers(be, t, v, 0, 1, 3)) return sql_error(sql, 02, SQLSTATE(27000) "DELETE: triggers failed for table '%s'", t->base.name); @@ -5178,12 +5192,14 @@ sql_delete(backend *be, sql_table *t, st } /* after */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for(sql_table *up = t->p ; up ; up = up->p) { if (!sql_delete_triggers(be, up, v, 1, 1, 3)) return sql_error(sql, 02, SQLSTATE(27000) "DELETE: triggers failed for table '%s'", up->base.name); } } +#endif if (!sql_delete_triggers(be, t, v, 1, 1, 3)) return sql_error(sql, 02, SQLSTATE(27000) "DELETE: triggers failed for table '%s'", t->base.name); if (rows) @@ -5354,6 +5370,7 @@ sql_truncate(backend *be, sql_table *t, v = stmt_tid(be, next, 0); /* before */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for (sql_table *up = t->p ; up ; up = up->p) { if (!sql_delete_triggers(be, up, v, 0, 3, 4)) { @@ -5363,6 +5380,7 @@ sql_truncate(backend *be, sql_table *t, } } } +#endif if (!sql_delete_triggers(be, next, v, 0, 3, 4)) { sql_error(sql, 02, SQLSTATE(27000) "TRUNCATE: triggers failed for table '%s'", next->base.name); error = 1; @@ -5381,6 +5399,7 @@ sql_truncate(backend *be, sql_table *t, ret = other; /* after */ +#if 0 if (be->cur_append && !be->first_statement_generated) { for (sql_table *up = t->p ; up ; up = up->p) { if (!sql_delete_triggers(be, up, v, 1, 3, 4)) { @@ -5390,6 +5409,7 @@ sql_truncate(backend *be, sql_table *t, } } } +#endif if (!sql_delete_triggers(be, next, v, 1, 3, 4)) { sql_error(sql, 02, SQLSTATE(27000) "TRUNCATE: triggers failed for table '%s'", next->base.name); error = 1; diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -389,12 +389,14 @@ create_table_or_view(mvc *sql, char* sna mvc_copy_key(sql, nt, k); } } - if (t->members.set) { - for (n = t->members.set->h; n; n = n->next) { + /* + if (t->members) { + for (n = t->members->h; n; n = n->next) { sql_part *pt = n->data; mvc_copy_part(sql, nt, pt); } } + */ if (t->triggers.set) { for (n = t->triggers.set->h; n; n = n->next) { sql_trigger *tr = n->data; diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -76,7 +76,7 @@ table_has_updates(sql_trans *tr, sql_tab } static char * -rel_check_tables(sql_table *nt, sql_table *nnt, const char *errtable) +rel_check_tables(mvc *sql, sql_table *nt, sql_table *nnt, const char *errtable) { node *n, *m, *nn, *mm; @@ -128,10 +128,8 @@ rel_check_tables(sql_table *nt, sql_tabl } } - for (sql_table *up = nt->p ; up ; up = up->p) { - if (!strcmp(up->s->base.name, nnt->s->base.name) && !strcmp(up->base.name, nnt->base.name)) - throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table is a parent of the %s", errtable, errtable); - } + if (nested_mergetable(sql->session->tr, nt/*mergetable*/, nnt->s->base.name, nnt->base.name/*parts*/)) + throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table is a parent of the %s", errtable, errtable); return MAL_SUCCEED; } @@ -159,7 +157,7 @@ validate_alter_table_add_table(mvc *sql, const char *errtable = TABLE_TYPE_DESCRIPTION(rmt->type, rmt->properties); if (!update && (!isMergeTable(rmt) && !isReplicaTable(rmt))) throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: cannot add table '%s.%s' to %s '%s.%s'", psname, ptname, errtable, msname, mtname); - node *n = cs_find_id(&rmt->members, rpt->base.id); + node *n = list_find_base_id(rmt->members, rpt->base.id); if (isView(rpt)) throw(SQL,call,SQLSTATE(42000) "ALTER TABLE: can't add a view into a %s", errtable); if (isDeclaredTable(rpt)) @@ -172,7 +170,7 @@ validate_alter_table_add_table(mvc *sql, throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table '%s.%s' is already part of %s '%s.%s'", psname, ptname, errtable, msname, mtname); if (!n && update) throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: table '%s.%s' isn't part of %s '%s.%s'", psname, ptname, errtable, msname, mtname); - if ((msg = rel_check_tables(rmt, rpt, errtable)) != MAL_SUCCEED) + if ((msg = rel_check_tables(sql, rmt, rpt, errtable)) != MAL_SUCCEED) return msg; *mt = rmt; @@ -215,7 +213,7 @@ alter_table_add_range_partition(mvc *sql "ALTER TABLE: cannot add range partition into a %s table", (isListPartitionTable(mt))?"list partition":"merge"); goto finish; - } else if (!update && pt->p) { + } else if (!update && isPartition(pt)) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: table '%s.%s' is already part of another table", psname, ptname); @@ -315,8 +313,6 @@ finish: GDKfree(conflict_err_min); if (conflict_err_max) GDKfree(conflict_err_max); - if (msg != MAL_SUCCEED) - pt->p = NULL; return msg; } @@ -340,7 +336,7 @@ alter_table_add_value_partition(mvc *sql "ALTER TABLE: cannot add value partition into a %s table", (isRangePartitionTable(mt))?"range partition":"merge"); goto finish; - } else if (!update && pt->p) { + } else if (!update && isPartition(pt)) { msg = createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) "ALTER TABLE: table '%s.%s' is already part of another table", psname, ptname); @@ -394,8 +390,6 @@ alter_table_add_value_partition(mvc *sql } finish: - if (msg != MAL_SUCCEED) - pt->p = NULL; return msg; } @@ -421,7 +415,7 @@ alter_table_del_table(mvc *sql, char *ms const char *errtable = TABLE_TYPE_DESCRIPTION(mt->type, mt->properties); if (!isMergeTable(mt) && !isReplicaTable(mt)) throw(SQL,"sql.alter_table_del_table",SQLSTATE(42S02) "ALTER TABLE: cannot drop table '%s.%s' to %s '%s.%s'", psname, ptname, errtable, msname, mtname); - if (!(n = cs_find_id(&mt->members, pt->base.id))) + if (!(n = list_find_base_id(mt->members, pt->base.id))) throw(SQL,"sql.alter_table_del_table",SQLSTATE(42S02) "ALTER TABLE: table '%s.%s' isn't part of %s '%s.%s'", ps->base.name, ptname, errtable, ms->base.name, mtname); sql_trans_del_table(sql->session->tr, mt, pt, drop_action); @@ -1714,12 +1708,8 @@ SQLrename_table(Client cntxt, MalBlkPtr throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER TABLE: not possible to change schema of a view"); if (isDeclaredTable(t)) throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER TABLE: not possible to change schema of a declared table"); - if (mvc_check_dependency(sql, t->base.id, TABLE_DEPENDENCY, NULL)) + if (mvc_check_dependency(sql, t->base.id, TABLE_DEPENDENCY, NULL) || !list_empty(t->members) || !list_empty(t->triggers.set)) throw(SQL, "sql.rename_table", SQLSTATE(2BM37) "ALTER TABLE: unable to set schema of table '%s' (there are database objects which depend on it)", otable_name); - if (!list_empty(t->members.set)) - throw(SQL, "sql.rename_table", SQLSTATE(2BM37) "ALTER TABLE: unable to set schema of table '%s' while it has children", otable_name); - if (!list_empty(t->triggers.set)) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list