Changeset: d094ee4b76b7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d094ee4b76b7
Added Files:
sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.err
sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.out
Modified Files:
sql/backends/monet5/rel_bin.c
sql/include/sql_catalog.h
sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.sql
Branch: default
Log Message:
Merge with Nov2019
diffs (truncated from 346 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
@@ -3688,7 +3688,7 @@ rel2bin_insert(backend *be, sql_rel *rel
}
/* before */
- if(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -3702,8 +3702,9 @@ rel2bin_insert(backend *be, sql_rel *rel
stmt *is = m->data;
sql_idx *i = n->data;
- if ((hash_index(i->type) && list_length(i->columns) <= 1) ||
- i->type == no_idx)
+ if (non_updatable_index(i->type)) /* Some indexes don't hold
delta structures */
+ continue;
+ if (hash_index(i->type) && list_length(i->columns) <= 1)
is = NULL;
if (i->key && constraint) {
stmt *ckeys = sql_insert_key(be, inserts->op4.lval,
i->key, is, pin);
@@ -3728,7 +3729,7 @@ rel2bin_insert(backend *be, sql_rel *rel
if (!insert)
return NULL;
- if(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -3748,7 +3749,7 @@ rel2bin_insert(backend *be, sql_rel *rel
ret = s;
}
- if(be->cur_append) //building the total number of rows affected across
all tables
+ if (be->cur_append) //building the total number of rows affected across
all tables
ret->nr = add_to_merge_partitions_accumulator(be, ret->nr);
if (ddl)
@@ -4553,7 +4554,6 @@ sql_update_triggers(backend *be, sql_tab
return res;
}
-
static void
sql_update_check_null(backend *be, sql_table *t, stmt **updates)
{
@@ -4603,7 +4603,7 @@ sql_update(backend *be, sql_table *t, st
}
/* before */
- if(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -4623,7 +4623,7 @@ 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(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -4695,13 +4695,16 @@ rel2bin_update(backend *be, sql_rel *rel
for (m = rel->exps->h; m; m = m->next) {
sql_exp *ce = m->data;
sql_idx *i = find_sql_idx(t, exp_name(ce)+1);
+ stmt *update_idx, *is = NULL;
if (i) {
- stmt *update_idx = bin_find_column(be, update, ce->l,
ce->r), *is = NULL;
-
+ if (non_updatable_index(i->type)) /* Some indexes don't
hold delta structures */
+ continue;
+
+ update_idx = bin_find_column(be, update, ce->l, ce->r);
if (update_idx)
is = update_idx;
- if ((hash_index(i->type) && list_length(i->columns) <=
1) || i->type == no_idx) {
+ if (hash_index(i->type) && list_length(i->columns) <=
1) {
is = NULL;
update_idx = NULL;
}
@@ -4713,7 +4716,7 @@ rel2bin_update(backend *be, sql_rel *rel
}
/* before */
- if(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -4735,7 +4738,7 @@ 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(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -4752,7 +4755,7 @@ rel2bin_update(backend *be, sql_rel *rel
cnt = s;
}
- if(be->cur_append) //building the total number of rows affected across
all tables
+ if (be->cur_append) //building the total number of rows affected across
all tables
cnt->nr = add_to_merge_partitions_accumulator(be, cnt->nr);
if (sql->cascade_action)
@@ -4923,7 +4926,7 @@ sql_delete(backend *be, sql_table *t, st
}
/* before */
- if(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -4947,7 +4950,7 @@ sql_delete(backend *be, sql_table *t, st
}
/* after */
- if(be->cur_append && !be->first_statement_generated) {
+ 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);
@@ -4957,7 +4960,7 @@ sql_delete(backend *be, sql_table *t, st
return sql_error(sql, 02, SQLSTATE(27000) "DELETE: triggers
failed for table '%s'", t->base.name);
if (rows)
s = stmt_aggr(be, rows, NULL, NULL, sql_bind_aggr(sql->sa,
sql->session->schema, "count", NULL), 1, 0, 1);
- if(be->cur_append) //building the total number of rows affected across
all tables
+ if (be->cur_append) //building the total number of rows affected across
all tables
s->nr = add_to_merge_partitions_accumulator(be, s->nr);
return s;
}
@@ -5249,7 +5252,7 @@ rel2bin_list(backend *be, sql_rel *rel,
(void)refs;
- if(find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /* create
affected rows accumulator */
+ if (find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /*
create affected rows accumulator */
create_merge_partitions_accumulator(be);
if (rel->l) /* first construct the sub relation */
@@ -5271,7 +5274,7 @@ rel2bin_psm(backend *be, sql_rel *rel)
list *l = sa_list(sql->sa);
stmt *sub = NULL;
- for(n = rel->exps->h; n; n = n->next) {
+ for (n = rel->exps->h; n; n = n->next) {
sql_exp *e = n->data;
stmt *s = exp_bin(be, e, sub, NULL, NULL, NULL, NULL, NULL);
if(!s)
@@ -5300,8 +5303,8 @@ rel2bin_partition_limits(backend *be, sq
assert(rel->exps);
assert(rel->flag == ddl_alter_table_add_range_partition || rel->flag ==
ddl_alter_table_add_list_partition);
- if(rel->exps) {
- for(n = rel->exps->h; n; n = n->next) {
+ if (rel->exps) {
+ for (n = rel->exps->h; n; n = n->next) {
sql_exp *e = n->data;
stmt *s = exp_bin(be, e, l, r, NULL, NULL, NULL, NULL);
append(slist, s);
@@ -5317,7 +5320,7 @@ rel2bin_exception(backend *be, sql_rel *
node *n = NULL;
list *slist = sa_list(be->mvc->sa);
- if(find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /* create
affected rows accumulator */
+ if (find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /*
create affected rows accumulator */
create_merge_partitions_accumulator(be);
if (rel->l) /* first construct the sub relation */
@@ -5325,8 +5328,8 @@ rel2bin_exception(backend *be, sql_rel *
if (rel->r) /* first construct the sub relation */
r = subrel_bin(be, rel->r, refs);
- if(rel->exps) {
- for(n = rel->exps->h; n; n = n->next) {
+ if (rel->exps) {
+ for (n = rel->exps->h; n; n = n->next) {
sql_exp *e = n->data;
stmt *s = exp_bin(be, e, l, r, NULL, NULL, NULL, NULL);
append(slist, s);
@@ -5715,7 +5718,7 @@ output_rel_bin(backend *be, sql_rel *rel
if (!is_ddl(rel->op) && s && s->type != st_none && sql->type == Q_TABLE)
s = stmt_output(be, s);
if (sqltype == Q_UPDATE && s && (s->type != st_list || be->cur_append))
{
- if(be->cur_append) { /* finish the output bat */
+ if (be->cur_append) { /* finish the output bat */
s->nr = be->cur_append;
be->cur_append = 0;
be->first_statement_generated = false;
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -464,6 +464,7 @@ typedef enum idx_type {
#define hash_index(t) (t == hash_idx || t == oph_idx )
#define idx_has_column(t) (hash_index(t) || t == join_idx)
#define oid_index(t) (t == join_idx)
+#define non_updatable_index(t) (t == ordered_idx || t == no_idx)
typedef struct sql_idx {
sql_base base;
diff --git a/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.sql
b/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.sql
--- a/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.sql
+++ b/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.sql
@@ -2,5 +2,8 @@ start transaction;
create table a(a int, b int, id bigserial);
create ordered index a_pk on a(id);
create index a_idx1 on a(a);
-insert into a(a) values(1);
+insert into a(a) values(1), (2);
+update a set a = 3, b = 3 where a = 1;
+delete from a where a = 3;
+truncate table a;
rollback;
diff --git
a/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.err
b/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.err
@@ -0,0 +1,30 @@
+stderr of test 'index-insert-crash.Bug-6781` in directory
'sql/test/BugTracker-2019` itself:
+
+
+# 16:41:05 >
+# 16:41:05 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=39858" "--set"
"mapi_usock=/var/tmp/mtest-320772/.s.monetdb.39858" "--forcemito"
"--dbpath=/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2019"
"--set" "embedded_c=true"
+# 16:41:05 >
+
+# builtin opt gdk_dbpath =
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/monetdb5/dbfarm/demo
+# builtin opt mapi_port = 50000
+# builtin opt mapi_open = false
+# builtin opt mapi_ipv6 = false
+# builtin opt mapi_autosense = false
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 39858
+# cmdline opt mapi_usock = /var/tmp/mtest-320772/.s.monetdb.39858
+# cmdline opt gdk_dbpath =
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2019
+# cmdline opt embedded_c = true
+
+# 16:41:06 >
+# 16:41:06 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-320772" "--port=39858"
+# 16:41:06 >
+
+
+# 16:41:06 >
+# 16:41:06 > "Done."
+# 16:41:06 >
+
diff --git
a/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.out
b/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2019/Tests/index-insert-crash.Bug-6781.stable.out
@@ -0,0 +1,82 @@
+stdout of test 'index-insert-crash.Bug-6781` in directory
'sql/test/BugTracker-2019` itself:
+
+
+# 16:41:05 >
+# 16:41:05 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=39858" "--set"
"mapi_usock=/var/tmp/mtest-320772/.s.monetdb.39858" "--forcemito"
"--dbpath=/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2019"
"--set" "embedded_c=true"
+# 16:41:05 >
+
+# MonetDB 5 server v11.35.0 (hg id: fa18e9dd4cf2+)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2019', using 8 threads
+# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
+# Found 15.504 GiB available main-memory.
+# Copyright (c) 1993 - July 2008 CWI.
+# Copyright (c) August 2008 - 2019 MonetDB B.V., all rights reserved
+# Visit https://www.monetdb.org/ for further information
+# Listening for connection requests on
mapi:monetdb://localhost.localdomain:39858/
+# Listening for UNIX domain connection requests on
mapi:monetdb:///var/tmp/mtest-320772/.s.monetdb.39858
+# MonetDB/GIS module loaded
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_querylog.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 17_temporal.sql
+# loading sql script: 18_index.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_views.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 27_rejects.sql
+# loading sql script: 39_analytics.sql
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list