Changeset: 84a23e24786f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=84a23e24786f Modified Files: sql/server/rel_exp.c sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out Branch: Apr2019 Log Message:
Further improvements for Bug 6706. When the column expression is an alias, search for the referencing column. diffs (77 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 @@ -2179,9 +2179,9 @@ exp_set_type_recurse(mvc *sql, sql_subty /* if the column pretended is found, set its type */ const char *next_rel = exp_relname(e), *next_exp = exp_name(e); if (next_rel && !strcmp(next_rel, *relname)) { - *relname = next_rel; + *relname = (e->type == e_column && e->l) ? (const char*) e->l : next_rel; if (next_exp && !strcmp(next_exp, *expname)) { - *expname = next_exp; + *expname = (e->type == e_column && e->r) ? (const char*) e->r : next_exp; if (e->type == e_column && !e->tpe.type) { if (set_type_param(sql, type, e->flag) == 0) e->tpe = *type; diff --git a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql --- a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql +++ b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql @@ -11,7 +11,8 @@ exec **(); prepare merge into test.share_daily_history as target using (select * from (values('BHP',?,?,?,?,?,?)) as a(id,timeid,c1,c2,c3,c4,volume)) as source on source.id=target.id and source.timeid=target.timeid -when not matched then insert (id,timeid,c1,c2,c3,c4,volume) values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume); --error +when not matched then insert (id,timeid,c1,c2,c3,c4,volume) values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume); +exec **(1,2,3,4,5,6); prepare select * from test.share_daily_history inner join (values('BHP',?,?,?,?,?,?)) as source(id,timeid,c1,c2,c3,c4,volume) diff --git a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err --- a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err +++ b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err @@ -30,14 +30,7 @@ stderr of test 'prepared-merge-statement # 10:09:57 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-31613" "--port=31509" # 10:09:57 > -MAPI = (monetdb) /var/tmp/mtest-31613/.s.monetdb.31509 -QUERY = prepare merge into test.share_daily_history as target - using (select * from (values('BHP',?,?,?,?,?,?)) as a(id,timeid,c1,c2,c3,c4,volume)) as source - on source.id=target.id and source.timeid=target.timeid - when not matched then insert (id,timeid,c1,c2,c3,c4,volume) values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume); --error -ERROR = !Could not determine type for argument number 2 -CODE = 42000 -MAPI = (monetdb) /var/tmp/mtest-31613/.s.monetdb.31509 +MAPI = (monetdb) /var/tmp/mtest-16265/.s.monetdb.32049 QUERY = prepare select * from test.share_daily_history inner join (values('BHP',?,?,?,?,?,?)) as source(id,timeid,c1,c2,c3,c4,volume) on source.id=share_daily_history.id and source.timeid=share_daily_history.timeid; --error diff --git a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out --- a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out +++ b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out @@ -82,6 +82,26 @@ Ready. [ 1 ] #exec 7(); [ 0 ] +#prepare merge into test.share_daily_history as target +#using (select * from (values('BHP',?,?,?,?,?,?)) as a(id,timeid,c1,c2,c3,c4,volume)) as source +#on source.id=target.id and source.timeid=target.timeid +#when not matched then insert (id,timeid,c1,c2,c3,c4,volume) values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume); +#prepare merge into test.share_daily_history as target +#using (select * from (values('BHP',?,?,?,?,?,?)) as a(id,timeid,c1,c2,c3,c4,volume)) as source +#on source.id=target.id and source.timeid=target.timeid +#when not matched then insert (id,timeid,c1,c2,c3,c4,volume) values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume); +% .prepare, .prepare, .prepare, .prepare, .prepare, .prepare # table_name +% type, digits, scale, schema, table, column # name +% varchar, int, int, str, str, str # type +% 3, 2, 1, 0, 0, 0 # length +[ "int", 32, 0, NULL, NULL, NULL ] +[ "int", 32, 0, NULL, NULL, NULL ] +[ "int", 32, 0, NULL, NULL, NULL ] +[ "int", 32, 0, NULL, NULL, NULL ] +[ "int", 32, 0, NULL, NULL, NULL ] +[ "int", 32, 0, NULL, NULL, NULL ] +#exec 9(1,2,3,4,5,6); +[ 0 ] #prepare select * from test.share_daily_history inner join (values('BHP',?)) as source(id,timeid) #on source.id=share_daily_history.id and source.timeid=share_daily_history.timeid; #prepare select * from test.share_daily_history inner join (values('BHP',?)) as source(id,timeid) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list