Changeset: 6cd986132b9e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6cd986132b9e
Added Files:
sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql
sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.err
sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.out
Modified Files:
sql/server/rel_bin.c
sql/test/BugTracker-2012/Tests/All
Branch: Apr2012
Log Message:
fixed bug 3091. Handle single value (value lists) properly.
diffs (217 lines):
diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c
--- a/sql/server/rel_bin.c
+++ b/sql/server/rel_bin.c
@@ -310,6 +310,9 @@ value_list( mvc *sql, list *vals)
for( n = vals->h; n; n = n->next) {
sql_exp *e = n->data;
stmt *i = exp_bin(sql, e, NULL, NULL, NULL, NULL);
+
+ if (list_length(vals) == 1)
+ return i;
s = stmt_append(sql->sa, s, i);
}
@@ -2719,11 +2722,12 @@ insert_check_ukey(mvc *sql, list *insert
if (list_length(k->columns) > 1) {
node *m;
- stmt *s = nth(inserts, 0)->op1;
+ stmt *s, *ins = nth(inserts, 0)->op1;
sql_subaggr *sum;
stmt *ssum = NULL;
stmt *col = NULL;
+ s = ins;
/* 1st stage: find out if original contains same values */
if (s->key && s->nrcols == 0) {
s = stmt_relselect_init(sql->sa);
@@ -2760,7 +2764,7 @@ insert_check_ukey(mvc *sql, list *insert
s = stmt_binop(sql->sa, stmt_aggr(sql->sa, s, NULL, cnt, 1),
stmt_atom_wrd(sql->sa, 0), ne);
/* 2e stage: find out if inserted are unique */
- if ((!idx_inserts && nth(inserts,0)->nrcols) || (idx_inserts &&
idx_inserts->nrcols)) { /* insert columns not atoms */
+ if ((!idx_inserts && ins->nrcols) || (idx_inserts &&
idx_inserts->nrcols)) { /* insert columns not atoms */
stmt *ss = NULL;
sql_subfunc *or = sql_bind_func_result(sql->sa,
sql->session->schema, "or", bt, bt, bt);
/* implementation uses sort,refine, key check */
diff --git a/sql/test/BugTracker-2012/Tests/All
b/sql/test/BugTracker-2012/Tests/All
--- a/sql/test/BugTracker-2012/Tests/All
+++ b/sql/test/BugTracker-2012/Tests/All
@@ -42,3 +42,4 @@ aggregate_vs_positional_column_crash.Bug
predicate_select.Bug-3090
hash_join_crash.Bug-3089
row-number-nyi.Bug-3087
+insert_serial_with_unique_key.Bug-3091
diff --git
a/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql
b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql
@@ -0,0 +1,47 @@
+CREATE SCHEMA "meta";
+
+CREATE TABLE "meta"."program_specs" (
+ "id" INT AUTO_INCREMENT PRIMARY KEY,
+ "namespace" CLOB NOT NULL,
+ "simple_name" CLOB NOT NULL,
+ "description" CLOB NOT NULL DEFAULT '',
+ "xml_spec" CLOB NOT NULL,
+ CONSTRAINT "program_spec_unique_name" UNIQUE ("namespace", "simple_name")
+);
+
+INSERT INTO "meta"."program_specs"
+ ("namespace", "simple_name", "description", "xml_spec")
+VALUES
+ ( 'example', 'access-control', '', '<?xml version="1.0" encoding="UTF-8"?>'
+)
+;
+
+DROP TABLE "meta"."program_specs";
+DROP SCHEMA "meta";
+
+create table t30(
+ a varchar(100),
+ b varchar(100),
+ CONSTRAINT "t30_unique" UNIQUE ("a", "b")
+);
+insert into t30(a,b) values('x','y');
+
+create table t31(
+ a varchar(100),
+ b varchar(100),
+ c varchar(100),
+ CONSTRAINT "t31_unique" UNIQUE ("a", "b")
+);
+insert into t31(a,b) values('x','y');
+
+create table t32(
+ c varchar(100),
+ a varchar(100),
+ b varchar(100),
+ CONSTRAINT "t32_unique" UNIQUE ("a", "b")
+);
+insert into t32(c,a,b) values(NULL,'x','y');
+
+drop table t30;
+drop table t31;
+drop table t32;
diff --git
a/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.err
b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.err
new file mode 100644
--- /dev/null
+++
b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'insert_serial_with_unique_key.Bug-3091` in directory
'test/BugTracker-2012` itself:
+
+
+# 15:04:13 >
+# 15:04:13 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"gdk_dbfarm=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" "--set"
"mapi_open=true" "--set" "mapi_port=35209" "--set" "monet_prompt=" "--trace"
"--forcemito" "--set" "mal_listing=2" "--dbname=mTests_test_BugTracker-2012"
"--set" "mal_listing=0"
+# 15:04:13 >
+
+# builtin opt gdk_dbname = demo
+# builtin opt gdk_dbfarm =
/home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm
+# builtin opt gdk_debug = 0
+# builtin opt gdk_alloc_map = no
+# builtin opt gdk_vmtrim = yes
+# builtin opt monet_prompt = >
+# builtin opt monet_daemon = no
+# builtin opt mapi_port = 50000
+# builtin opt mapi_open = 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 gdk_dbfarm =
/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 35209
+# cmdline opt monet_prompt =
+# cmdline opt mal_listing = 2
+# cmdline opt gdk_dbname = mTests_test_BugTracker-2012
+# cmdline opt mal_listing = 0
+
+# 15:04:13 >
+# 15:04:13 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=niels"
"--port=35209"
+# 15:04:13 >
+
+
+# 15:04:13 >
+# 15:04:13 > "Done."
+# 15:04:13 >
+
diff --git
a/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.out
b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.out
new file mode 100644
--- /dev/null
+++
b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.stable.out
@@ -0,0 +1,74 @@
+stdout of test 'insert_serial_with_unique_key.Bug-3091` in directory
'test/BugTracker-2012` itself:
+
+
+# 15:04:13 >
+# 15:04:13 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"gdk_dbfarm=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" "--set"
"mapi_open=true" "--set" "mapi_port=35209" "--set" "monet_prompt=" "--trace"
"--forcemito" "--set" "mal_listing=2" "--dbname=mTests_test_BugTracker-2012"
"--set" "mal_listing=0"
+# 15:04:13 >
+
+# MonetDB 5 server v11.9.2
+# This is an unreleased version
+# Serving database 'mTests_test_BugTracker-2012', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically
linked
+# Found 3.778 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2012 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on
mapi:monetdb://niels.nesco.mine.nu:35209/
+# MonetDB/GIS module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+
+# 15:04:13 >
+# 15:04:13 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=niels"
"--port=35209"
+# 15:04:13 >
+
+#CREATE SCHEMA "meta";
+#CREATE TABLE "meta"."program_specs" (
+# "id" INT AUTO_INCREMENT PRIMARY KEY,
+# "namespace" CLOB NOT NULL,
+# "simple_name" CLOB NOT NULL,
+# "description" CLOB NOT NULL DEFAULT '',
+# "xml_spec" CLOB NOT NULL,
+# CONSTRAINT "program_spec_unique_name" UNIQUE ("namespace", "simple_name")
+#);
+#INSERT INTO "meta"."program_specs"
+# ("namespace", "simple_name", "description", "xml_spec")
+#VALUES
+# ( 'example', 'access-control', '', '<?xml version="1.0"
encoding="UTF-8"?>'
+#)
+#;
+[ 1 ]
+#DROP TABLE "meta"."program_specs";
+#DROP SCHEMA "meta";
+#create table t30(
+# a varchar(100),
+# b varchar(100),
+# CONSTRAINT "t30_unique" UNIQUE ("a", "b")
+#);
+#insert into t30(a,b) values('x','y');
+[ 1 ]
+#create table t31(
+# a varchar(100),
+# b varchar(100),
+# c varchar(100),
+# CONSTRAINT "t31_unique" UNIQUE ("a", "b")
+#);
+#insert into t31(a,b) values('x','y');
+[ 1 ]
+#create table t32(
+# c varchar(100),
+# a varchar(100),
+# b varchar(100),
+# CONSTRAINT "t32_unique" UNIQUE ("a", "b")
+#);
+#insert into t32(c,a,b) values(NULL,'x','y');
+[ 1 ]
+#drop table t30;
+#drop table t31;
+#drop table t32;
+
+# 15:04:13 >
+# 15:04:13 > "Done."
+# 15:04:13 >
+
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list