Changeset: ef1c25b826b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ef1c25b826b6
Added Files:
        sql/test/prepare/Tests/insert-prepare.Bug-7230.SQL.py
        sql/test/prepare/Tests/insert-prepare.Bug-7230.sql
        sql/test/prepare/Tests/insert-prepare.Bug-7230.stable.out
Modified Files:
        sql/server/rel_exp.c
        sql/test/prepare/Tests/All
Branch: Jan2022
Log Message:

Added test and fix for bug #7230 When propagating an expression, also copy the 
flag value, so parameter variables are correctly propagated


diffs (192 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -705,6 +705,7 @@ exp_propagate(sql_allocator *sa, sql_exp
                set_unique(ne);
        if (is_basecol(oe))
                set_basecol(ne);
+       ne->flag = oe->flag; /* needed if the referenced column is a parameter 
without type set yet */
        ne->p = prop_copy(sa, oe->p);
        return ne;
 }
diff --git a/sql/test/prepare/Tests/All b/sql/test/prepare/Tests/All
--- a/sql/test/prepare/Tests/All
+++ b/sql/test/prepare/Tests/All
@@ -30,3 +30,4 @@ prepare_commit_execute.SF-2606020
 prepare_decimal_bug.SF-2831994
 prepare-view
 prepare-mergetable
+insert-prepare.Bug-7230
diff --git a/sql/test/prepare/Tests/insert-prepare.Bug-7230.SQL.py 
b/sql/test/prepare/Tests/insert-prepare.Bug-7230.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/test/prepare/Tests/insert-prepare.Bug-7230.SQL.py
@@ -0,0 +1,8 @@
+from MonetDBtesting.sqltest import SQLTestCase
+
+with SQLTestCase() as tc:
+    tc.connect()
+    with open('insert-prepare.Bug-7230.sql') as f:
+        tr = tc.execute(query=None, client='mclient', stdin=f)\
+                .assertSucceeded()\
+                .assertMatchStableOut('insert-prepare.Bug-7230.stable.out')
diff --git a/sql/test/prepare/Tests/insert-prepare.Bug-7230.sql 
b/sql/test/prepare/Tests/insert-prepare.Bug-7230.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/prepare/Tests/insert-prepare.Bug-7230.sql
@@ -0,0 +1,36 @@
+START TRANSACTION;
+
+CREATE TABLE Test (c1 int not null, c2 varchar(255) not null, c3 int not null);
+INSERT INTO Test VALUES (1, 'asd', 1);
+PREPARE INSERT INTO Test SELECT c1, ?, ? FROM Test;
+EXEC **('aa', 2);
+EXEC **(10, '9');
+PREPARE INSERT INTO Test SELECT ?, ?, ? FROM Test;
+EXEC **(4, 'cc', 3);
+EXEC **('11', 12, '13');
+
+SELECT c1, c2, c3 FROM Test;
+
+CREATE TABLE Test2 (c1 int not null, c2 varchar(255) not null, c3 varchar(255) 
null);
+INSERT INTO Test2 VALUES (1, 'asd', 'asd');
+PREPARE INSERT INTO Test2 SELECT c1, ?, ? FROM Test2;
+EXEC **('bb', 'aa');
+EXEC **(14, 15);
+PREPARE INSERT INTO Test2 SELECT ?, ?, ? FROM Test2;
+EXEC **(5, 'ee','dd');
+EXEC **('16', 17, 18);
+
+SELECT c1, c2, c3 FROM Test2;
+
+CREATE TABLE Test3 (c1 int, c2 varchar(255), c3 int);
+INSERT INTO Test3 VALUES (1, 'asd', 1);
+PREPARE INSERT INTO Test3 SELECT c1, ?, ? FROM Test3;
+EXEC **('ff', 6);
+EXEC **(19, '20');
+PREPARE INSERT INTO Test3 SELECT ?, ?, ? FROM Test3;
+EXEC **(7, 'gg', 8);
+EXEC **('21', 22, '23');
+
+SELECT c1, c2, c3 FROM Test3;
+
+ROLLBACK;
diff --git a/sql/test/prepare/Tests/insert-prepare.Bug-7230.stable.out 
b/sql/test/prepare/Tests/insert-prepare.Bug-7230.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/prepare/Tests/insert-prepare.Bug-7230.stable.out
@@ -0,0 +1,114 @@
+[ 1    ]
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    varchar,        varchar,        varchar # type
+% 7,   3,      1,      0,      0,      0 # length
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ 1    ]
+[ 2    ]
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    varchar,        varchar,        varchar # type
+% 7,   3,      1,      0,      0,      0 # length
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ 4    ]
+[ 8    ]
+% sys.test,    sys.test,       sys.test # table_name
+% c1,  c2,     c3 # name
+% int, varchar,        int # type
+% 2,   3,      2 # length
+[ 1,   "asd",  1       ]
+[ 1,   "aa",   2       ]
+[ 1,   "10",   9       ]
+[ 1,   "10",   9       ]
+[ 4,   "cc",   3       ]
+[ 4,   "cc",   3       ]
+[ 4,   "cc",   3       ]
+[ 4,   "cc",   3       ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 11,  "12",   13      ]
+[ 1    ]
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    varchar,        varchar,        varchar # type
+% 7,   3,      1,      0,      0,      0 # length
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ 1    ]
+[ 2    ]
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    varchar,        varchar,        varchar # type
+% 7,   3,      1,      0,      0,      0 # length
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ 4    ]
+[ 8    ]
+% sys.test2,   sys.test2,      sys.test2 # table_name
+% c1,  c2,     c3 # name
+% int, varchar,        varchar # type
+% 2,   3,      3 # length
+[ 1,   "asd",  "asd"   ]
+[ 1,   "bb",   "aa"    ]
+[ 1,   "14",   "15"    ]
+[ 1,   "14",   "15"    ]
+[ 5,   "ee",   "dd"    ]
+[ 5,   "ee",   "dd"    ]
+[ 5,   "ee",   "dd"    ]
+[ 5,   "ee",   "dd"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 16,  "17",   "18"    ]
+[ 1    ]
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    varchar,        varchar,        varchar # type
+% 7,   3,      1,      0,      0,      0 # length
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ 1    ]
+[ 2    ]
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    varchar,        varchar,        varchar # type
+% 7,   3,      1,      0,      0,      0 # length
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "varchar",   255,    0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ 4    ]
+[ 8    ]
+% sys.test3,   sys.test3,      sys.test3 # table_name
+% c1,  c2,     c3 # name
+% int, varchar,        int # type
+% 2,   3,      2 # length
+[ 1,   "asd",  1       ]
+[ 1,   "ff",   6       ]
+[ 1,   "19",   20      ]
+[ 1,   "19",   20      ]
+[ 7,   "gg",   8       ]
+[ 7,   "gg",   8       ]
+[ 7,   "gg",   8       ]
+[ 7,   "gg",   8       ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
+[ 21,  "22",   23      ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to