Changeset: 968f579b3cd3 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=968f579b3cd3 Modified Files: sql/server/rel_exp.c sql/test/SQLancer/Tests/sqlancer07.stable.out Branch: Oct2020 Log Message:
When setting the prepared statement parameter type recursively, be carefull to not set the same parameter twice. Look for the expression name diffs (49 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 @@ -2967,7 +2967,12 @@ exp_set_type_recurse(mvc *sql, sql_subty switch (e->type) { case e_atom: { - return exp_set_list_recurse(sql, type, e, relname, expname); + const char *next_exp = exp_name(e); + if (e->f || (next_exp && !strcmp(next_exp, *expname))) { + if (!e->f) + *expname = e->r ? (const char*) e->r : next_exp; + return exp_set_list_recurse(sql, type, e, relname, expname); + } } break; case e_convert: case e_column: { diff --git a/sql/test/SQLancer/Tests/sqlancer07.stable.out b/sql/test/SQLancer/Tests/sqlancer07.stable.out --- a/sql/test/SQLancer/Tests/sqlancer07.stable.out +++ b/sql/test/SQLancer/Tests/sqlancer07.stable.out @@ -51,6 +51,28 @@ stdout of test 'sqlancer07` in directory % boolean # type % 5 # length #ROLLBACK; +#START TRANSACTION; +#CREATE TABLE "t0" ("c0" BOOLEAN NOT NULL); +#CREATE TABLE "t1" ("c0" DECIMAL(18,3)); +#CREATE TABLE "t2" ("c0" DECIMAL(18,3),"c2" DATE); +#PREPARE (SELECT DISTINCT t0.c0, INTERVAL '1734780053' SECOND FROM t0, t1) UNION ALL (SELECT ?, ? FROM t2); +#PREPARE (SELECT DISTINCT t0.c0, INTERVAL '1734780053' SECOND FROM t0, t1) UNION ALL (SELECT ?, ? FROM t2); +% .prepare, .prepare, .prepare, .prepare, .prepare, .prepare # table_name +% type, digits, scale, schema, table, column # name +% varchar, int, int, str, str, str # type +% 12, 3, 1, 0, 3, 2 # length +[ "boolean", 1, 0, "", "%10", "c0" ] +[ "sec_interval", 13, 0, "", "%10", "%2" ] +[ "boolean", 1, 0, NULL, NULL, NULL ] +[ "sec_interval", 13, 0, NULL, NULL, NULL ] +#ROLLBACK; +#START TRANSACTION; +#CREATE TABLE "t0" ("c0" INTERVAL MONTH NOT NULL,CONSTRAINT "t0_c0_pkey" PRIMARY KEY ("c0"),CONSTRAINT "t0_c0_unique" UNIQUE ("c0"),CONSTRAINT "t0_c0_unique" UNIQUE ("c0")); +#INSERT INTO "t0" VALUES (INTERVAL '2101098338' MONTH); +[ 1 ] +#CREATE TABLE "t1" ("c0" INTERVAL MONTH,"c1" BOOLEAN); +#CREATE TABLE "t2" ("c0" INTERVAL MONTH); +#ROLLBACK; # 10:16:14 > # 10:16:14 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list