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
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to