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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list