Changeset: 00ab6503524c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=00ab6503524c
Modified Files:
sql/server/rel_propagate.c
sql/server/rel_updates.c
sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.err
sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.out
Branch: default
Log Message:
With partitioned tables handling addition, we can now support delete statements
in non-partitioned tables as well. This fixes bug 3743.
diffs (91 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
@@ -881,21 +881,25 @@ rel_propagate(mvc *sql, sql_rel *rel, in
propagate = rel->l;
}
}
- if(isRangePartitionTable(t) || isListPartitionTable(t)) {
+ if(isMergeTable(t)) {
assert(list_length(t->members.set) > 0);
if(is_delete(propagate->op) ||
is_truncate(propagate->op)) { //propagate deletions to the partitions
sql->caching = 0;
rel = rel_propagate_delete(sql, rel, t,
changes);
- } else if(is_insert(propagate->op)) { //on inserts
create a selection for each partition
- sql->caching = 0;
- if(isSubtable) {
- rel->l = rel_propagate_insert(sql,
propagate, t, changes);
+ } else if(isRangePartitionTable(t) ||
isListPartitionTable(t)) {
+ if(is_insert(propagate->op)) { //on inserts
create a selection for each partition
+ sql->caching = 0;
+ if(isSubtable) {
+ rel->l =
rel_propagate_insert(sql, propagate, t, changes);
+ } else {
+ rel = rel_propagate_insert(sql,
rel, t, changes);
+ }
+ } else if(is_update(propagate->op)) { //for
updates propagate like in deletions
+ sql->caching = 0;
+ rel = rel_propagate_update(sql, rel, t,
changes);
} else {
- rel = rel_propagate_insert(sql, rel, t,
changes);
+ assert(0);
}
- } else if(is_update(propagate->op)) { //for updates
propagate like in deletions
- sql->caching = 0;
- rel = rel_propagate_update(sql, rel, t,
changes);
} else {
assert(0);
}
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
@@ -439,8 +439,10 @@ update_allowed(mvc *sql, sql_table *t, c
return sql_error(sql, 02, SQLSTATE(42S02) "%s: no such table
'%s'", op, tname);
} else if (isView(t)) {
return sql_error(sql, 02, SQLSTATE(42000) "%s: cannot %s view
'%s'", op, opname, tname);
- } else if (isNonPartitionedTable(t)) {
+ } else if (isNonPartitionedTable(t) && is_delete == 0) {
return sql_error(sql, 02, SQLSTATE(42000) "%s: cannot %s merge
table '%s'", op, opname, tname);
+ } else if (isNonPartitionedTable(t) && is_delete != 0 &&
cs_size(&t->members) == 0) {
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: cannot %s merge
table '%s' has no partitions set", op, opname, tname);
} else if ((isRangePartitionTable(t) || isListPartitionTable(t)) &&
cs_size(&t->members) == 0) {
return sql_error(sql, 02, SQLSTATE(42000) "%s: %s partitioned
table '%s' has no partitions set", op, isListPartitionTable(t)?"list":"range",
tname);
} else if (isRemote(t)) {
diff --git
a/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.err
b/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.err
--- a/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.err
+++ b/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.err
@@ -29,18 +29,6 @@ stderr of test 'delete_from_merge_table.
# 17:32:34 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-19147" "--port=31497"
# 17:32:34 >
-MAPI = (monetdb) /var/tmp/mtest-8392/.s.monetdb.34552
-QUERY = delete from tt where t = 1;
-ERROR = !DELETE FROM: cannot delete from merge table 'tt'
-CODE = 42000
-MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
-QUERY = delete from tt where t = 2;
-ERROR = !DELETE FROM: cannot delete from merge table 'tt'
-CODE = 42000
-MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
-QUERY = delete from tt;
-ERROR = !DELETE FROM: cannot delete from merge table 'tt'
-CODE = 42000
# 17:32:35 >
# 17:32:35 > "Done."
diff --git
a/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.out
b/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.out
--- a/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.out
+++ b/sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.out
@@ -81,6 +81,12 @@ Ready.
% 1 # length
[ 1 ]
[ 2 ]
+#delete from tt where t = 1;
+[ 1 ]
+#delete from tt where t = 2;
+[ 1 ]
+#delete from tt;
+[ 0 ]
#drop table tt cascade;
#drop table t1 cascade;
#drop table t2 cascade;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list