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