Changeset: cbe1ee5b34a8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cbe1ee5b34a8
Added Files:
sql/test/mergetables/Tests/transaction-conflict.stable.err
sql/test/mergetables/Tests/transaction-conflict.stable.out
Modified Files:
sql/common/sql_list.c
sql/include/sql_catalog.h
sql/storage/store.c
sql/test/mergetables/Tests/transaction-conflict.py
Branch: Nov2019
Log Message:
Fix for transaction-conflict bug. Whenever attempting to remove a child table
from the parent table, use the transaction flags from the sql_part instead of
the sql_table
diffs (240 lines):
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -314,6 +314,7 @@ list_remove_node(list *l, node *n)
l->t = p;
node_destroy(l, n);
l->cnt--;
+ assert(l->cnt >= 0);
MT_lock_set(&l->ht_lock);
if (l->ht && data)
hash_delete(l->ht, data);
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
@@ -364,13 +364,13 @@ typedef enum sql_ftype {
F_LOADER = 7
} sql_ftype;
-#define IS_FUNC(f) (f->type == F_FUNC)
-#define IS_PROC(f) (f->type == F_PROC)
-#define IS_AGGR(f) (f->type == F_AGGR)
-#define IS_FILT(f) (f->type == F_FILT)
-#define IS_UNION(f) (f->type == F_UNION)
-#define IS_ANALYTIC(f) (f->type == F_ANALYTIC)
-#define IS_LOADER(f) (f->type == F_LOADER)
+#define IS_FUNC(f) ((f)->type == F_FUNC)
+#define IS_PROC(f) ((f)->type == F_PROC)
+#define IS_AGGR(f) ((f)->type == F_AGGR)
+#define IS_FILT(f) ((f)->type == F_FILT)
+#define IS_UNION(f) ((f)->type == F_UNION)
+#define IS_ANALYTIC(f) ((f)->type == F_ANALYTIC)
+#define IS_LOADER(f) ((f)->type == F_LOADER)
typedef enum sql_flang {
FUNC_LANG_INT = 0, /* internal */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1155,7 +1155,7 @@ load_schema(sql_trans *tr, sqlid id, oid
type_id = find_sql_column(types, "id");
rs = table_funcs.rids_select(tr, type_schema, &s->base.id, &s->base.id,
type_id, &tmpid, NULL, NULL);
for (rid = table_funcs.rids_next(rs); !is_oid_nil(rid); rid =
table_funcs.rids_next(rs))
- cs_add(&s->types, load_type(tr, s, rid), 0);
+ cs_add(&s->types, load_type(tr, s, rid), 0);
table_funcs.rids_destroy(rs);
/* second tables */
@@ -1703,7 +1703,6 @@ bootstrap_create_table(sql_trans *tr, sq
return t;
}
-
static sql_schema *
bootstrap_create_schema(sql_trans *tr, char *name, sqlid auth_id, int owner)
{
@@ -2201,7 +2200,6 @@ store_exit(void)
store_initialized=0;
}
-
/* call locked! */
int
store_apply_deltas(bool not_locked)
@@ -2312,7 +2310,6 @@ idle_manager(void)
}
}
-
void
store_lock(void)
{
@@ -2649,7 +2646,6 @@ sql_trans_copy_part( sql_trans *tr, sql_
{
sql_schema *syss = find_sql_schema(tr, isGlobal(t)?"sys":"tmp");
sql_table *sysic = find_sql_table(syss, "objects");
- node *n;
sql_part *npt = SA_ZNEW(tr->sa, sql_part);
base_init(tr->sa, &npt->base, pt->base.id, TR_NEW, npt->base.name);
@@ -2658,7 +2654,7 @@ sql_trans_copy_part( sql_trans *tr, sql_
npt->with_nills = pt->with_nills;
npt->t = t;
- assert(!npt->t || isMergeTable(npt->t) || isReplicaTable(npt->t));
+ assert(isMergeTable(npt->t) || isReplicaTable(npt->t));
if (isRangePartitionTable(t)) {
npt->part.range.minvalue = sa_alloc(tr->sa,
pt->part.range.minlength);
npt->part.range.maxvalue = sa_alloc(tr->sa,
pt->part.range.maxlength);
@@ -2668,7 +2664,7 @@ sql_trans_copy_part( sql_trans *tr, sql_
npt->part.range.maxlength = pt->part.range.maxlength;
} else if (isListPartitionTable(t)) {
npt->part.values = list_new(tr->sa, (fdestroy) NULL);
- for (n = pt->part.values->h ; n ; n = n->next) {
+ for (node *n = pt->part.values->h ; n ; n = n->next) {
sql_part_value *prev = (sql_part_value*) n->data,
*nextv = SA_ZNEW(tr->sa, sql_part_value);
nextv->tpe = prev->tpe;
nextv->value = sa_alloc(tr->sa, prev->length);
@@ -2694,7 +2690,6 @@ trigger_dup(sql_trans *tr, int flags, sq
{
sql_allocator *sa = (newFlagSet(flags))?tr->parent->sa:tr->sa;
sql_trigger *nt = SA_ZNEW(sa, sql_trigger);
- node *n;
base_init(sa, &nt->base, i->base.id, tr_flag(&i->base, flags),
i->base.name);
@@ -2712,7 +2707,7 @@ trigger_dup(sql_trans *tr, int flags, sq
nt->condition = sa_strdup(sa, i->condition);
nt->statement = sa_strdup(sa, i->statement);
- for (n = i->columns->h; n; n = n->next) {
+ for (node *n = i->columns->h; n; n = n->next) {
sql_kc *okc = n->data;
list_append(nt->columns, kc_dup(tr, flags, okc, t));
@@ -5530,6 +5525,7 @@ sql_trans_del_table(sql_trans *tr, sql_t
sql_table *sysobj = find_sql_table(syss, "objects");
node *n = cs_find_name(&mt->members, pt->base.name);
oid obj_oid = table_funcs.column_find_row(tr, find_sql_column(sysobj,
"nr"), &pt->base.id, NULL), rid;
+ sql_part *p = (sql_part*) n->data;
if (is_oid_nil(obj_oid))
return NULL;
@@ -5551,7 +5547,7 @@ sql_trans_del_table(sql_trans *tr, sql_t
/* merge table depends on part table */
sql_trans_drop_dependency(tr, pt->base.id, mt->base.id,
TABLE_DEPENDENCY);
- cs_del(&mt->members, n, pt->base.flags);
+ cs_del(&mt->members, n, p->base.flags);
pt->p = NULL;
table_funcs.table_delete(tr, sysobj, obj_oid);
diff --git a/sql/test/mergetables/Tests/transaction-conflict.py
b/sql/test/mergetables/Tests/transaction-conflict.py
--- a/sql/test/mergetables/Tests/transaction-conflict.py
+++ b/sql/test/mergetables/Tests/transaction-conflict.py
@@ -66,7 +66,6 @@ cursor.execute("""
START TRANSACTION;
DROP TABLE "mt";
DROP TABLE "part";
-DROP TABLE "dummy";
COMMIT;
""")
diff --git a/sql/test/mergetables/Tests/transaction-conflict.stable.err
b/sql/test/mergetables/Tests/transaction-conflict.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/transaction-conflict.stable.err
@@ -0,0 +1,24 @@
+stderr of test 'transaction-conflict` in directory 'sql/test/mergetables`
itself:
+
+
+# 09:38:29 >
+# 09:38:29 > "/usr/bin/python3" "transaction-conflict.py"
"transaction-conflict"
+# 09:38:29 >
+
+# 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 = 38130
+# cmdline opt mapi_usock = /var/tmp/mtest-42574/.s.monetdb.38130
+# cmdline opt gdk_dbpath =
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_mergetables
+
+# 09:38:31 >
+# 09:38:31 > "Done."
+# 09:38:31 >
+
diff --git a/sql/test/mergetables/Tests/transaction-conflict.stable.out
b/sql/test/mergetables/Tests/transaction-conflict.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/transaction-conflict.stable.out
@@ -0,0 +1,64 @@
+stdout of test 'transaction-conflict` in directory 'sql/test/mergetables`
itself:
+
+
+# 09:38:29 >
+# 09:38:29 > "/usr/bin/python3" "transaction-conflict.py"
"transaction-conflict"
+# 09:38:29 >
+
+# MonetDB 5 server v11.35.4 (hg id: fa6ec6bdafb1)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_mergetables', using 8 threads
+# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
+# Found 15.504 GiB available main-memory of which we use 12.635 GiB
+# 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:38130/
+# Listening for UNIX domain connection requests on
mapi:monetdb:///var/tmp/mtest-42574/.s.monetdb.38130
+# 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
+# loading sql script: 39_analytics_hge.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 40_json_hge.sql
+# loading sql script: 41_md5sum.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_profiler.sql
+# loading sql script: 51_sys_schema_extension.sql
+# loading sql script: 60_wlcr.sql
+# loading sql script: 61_wlcr.sql
+# loading sql script: 72_fits.sql
+# loading sql script: 74_netcdf.sql
+# loading sql script: 75_lidar.sql
+# loading sql script: 75_shp.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 80_udf_hge.sql
+# loading sql script: 85_bam.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 90_generator_hge.sql
+# loading sql script: 99_system.sql
+# MonetDB/SQL module loaded
+
+# 09:38:31 >
+# 09:38:31 > "Done."
+# 09:38:31 >
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list