Changeset: 59de99d3ebc9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=59de99d3ebc9 Branch: default Log Message:
Merged with octbugs diffs (176 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -1342,11 +1342,14 @@ can_push_func(sql_exp *e, sql_rel *rel, if (e->flag == cmp_or || e->flag == cmp_in || e->flag == cmp_notin || e->flag == cmp_filter) return 0; - return ((l->type == e_column || can_push_func(l, rel, &mustl)) && (*must = mustl)) || - (!f && (r->type == e_column || can_push_func(r, rel, &mustr)) && (*must = mustr)) || - (f && - (r->type == e_column || can_push_func(r, rel, &mustr)) && - (f->type == e_column || can_push_func(f, rel, &mustf)) && (*must = (mustr || mustf))); + if (!f) { + return ((l->type == e_column || can_push_func(l, rel, &mustl)) && (*must = mustl)) || + ((r->type == e_column || can_push_func(r, rel, &mustr)) && (*must = mustr)); + } else { + return (l->type == e_column || can_push_func(l, rel, &mustl)) && + (r->type == e_column || can_push_func(r, rel, &mustr)) && + (f->type == e_column || can_push_func(f, rel, &mustf)) && (*must = (mustl || mustr || mustf)); + } } case e_convert: return can_push_func(e->l, rel, must); diff --git a/sql/test/miscellaneous/Tests/simple_plans.stable.out b/sql/test/miscellaneous/Tests/simple_plans.stable.out --- a/sql/test/miscellaneous/Tests/simple_plans.stable.out +++ b/sql/test/miscellaneous/Tests/simple_plans.stable.out @@ -284,61 +284,61 @@ end user.main; % clob # type % 174 # length function user.main():void; - X_1:void := querylog.define("explain select 1 from another_t t1 inner join another_t t2 on t1.col1 between t2.col1 - 1 and t2.col1 + 1;":str, "default_pipe":str, 31:int); -barrier X_164:bit := language.dataflow(); - X_45:bat[:str] := bat.pack(".%3":str); - X_46:bat[:str] := bat.pack("%3":str); - X_47:bat[:str] := bat.pack("tinyint":str); - X_48:bat[:int] := bat.pack(1:int); - X_49:bat[:int] := bat.pack(0:int); + X_1:void := querylog.define("explain select 1 from another_t t1 inner join another_t t2 on t1.col1 between t2.col1 - 1 and t2.col1 + 1;":str, "default_pipe":str, 29:int); +barrier X_154:bit := language.dataflow(); + X_43:bat[:str] := bat.pack(".%1":str); + X_44:bat[:str] := bat.pack("%1":str); + X_45:bat[:str] := bat.pack("tinyint":str); + X_46:bat[:int] := bat.pack(1:int); + X_47:bat[:int] := bat.pack(0:int); X_4:int := sql.mvc(); - C_98:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 0:int, 4:int); - X_109:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 0:int, 4:int); - X_114:bat[:int] := algebra.projection(C_98:bat[:oid], X_109:bat[:int]); - X_118:bat[:lng] := batcalc.lng(X_114:bat[:int]); + C_96:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 0:int, 4:int); + X_107:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 0:int, 4:int); + X_112:bat[:int] := algebra.projection(C_96:bat[:oid], X_107:bat[:int]); + X_116:bat[:lng] := batcalc.lng(X_112:bat[:int]); C_12:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str); X_14:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int); - X_15:bat[:int] := algebra.projection(C_12:bat[:oid], X_14:bat[:int]); - X_16:bat[:lng] := batcalc.lng(X_15:bat[:int]); - X_19:bat[:lng] := batcalc.-(X_16:bat[:lng], 1:lng, nil:BAT); - X_24:bat[:lng] := batcalc.+(X_16:bat[:lng], 1:lng, nil:BAT); - X_122:bat[:oid] := algebra.rangejoin(X_118:bat[:lng], X_19:bat[:lng], X_24:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); - X_130:bat[:int] := algebra.projection(X_122:bat[:oid], X_114:bat[:int]); - X_146:bat[:bte] := algebra.project(X_130:bat[:int], 1:bte); - C_100:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 1:int, 4:int); - X_110:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 1:int, 4:int); - X_115:bat[:int] := algebra.projection(C_100:bat[:oid], X_110:bat[:int]); + X_16:bat[:int] := algebra.projection(C_12:bat[:oid], X_14:bat[:int]); + X_18:bat[:lng] := batcalc.lng(X_16:bat[:int]); + X_21:bat[:lng] := batcalc.-(X_18:bat[:lng], 1:lng, nil:BAT); + X_26:bat[:lng] := batcalc.+(X_18:bat[:lng], 1:lng, nil:BAT); + X_120:bat[:oid] := algebra.rangejoin(X_116:bat[:lng], X_21:bat[:lng], X_26:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); + X_128:bat[:int] := algebra.projection(X_120:bat[:oid], X_112:bat[:int]); + X_136:bat[:bte] := algebra.project(X_128:bat[:int], 1:bte); + C_98:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 1:int, 4:int); + X_108:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 1:int, 4:int); + X_113:bat[:int] := algebra.projection(C_98:bat[:oid], X_108:bat[:int]); + X_117:bat[:lng] := batcalc.lng(X_113:bat[:int]); + X_122:bat[:oid] := algebra.rangejoin(X_117:bat[:lng], X_21:bat[:lng], X_26:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); + X_129:bat[:int] := algebra.projection(X_122:bat[:oid], X_113:bat[:int]); + X_137:bat[:bte] := algebra.project(X_129:bat[:int], 1:bte); + C_100:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 2:int, 4:int); + X_109:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 2:int, 4:int); + X_114:bat[:int] := algebra.projection(C_100:bat[:oid], X_109:bat[:int]); + X_118:bat[:lng] := batcalc.lng(X_114:bat[:int]); + X_124:bat[:oid] := algebra.rangejoin(X_118:bat[:lng], X_21:bat[:lng], X_26:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); + X_130:bat[:int] := algebra.projection(X_124:bat[:oid], X_114:bat[:int]); + X_138:bat[:bte] := algebra.project(X_130:bat[:int], 1:bte); + C_102:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 3:int, 4:int); + X_110:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 3:int, 4:int); + X_115:bat[:int] := algebra.projection(C_102:bat[:oid], X_110:bat[:int]); X_119:bat[:lng] := batcalc.lng(X_115:bat[:int]); - X_124:bat[:oid] := algebra.rangejoin(X_119:bat[:lng], X_19:bat[:lng], X_24:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); - X_131:bat[:int] := algebra.projection(X_124:bat[:oid], X_115:bat[:int]); - X_147:bat[:bte] := algebra.project(X_131:bat[:int], 1:bte); - C_102:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 2:int, 4:int); - X_111:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 2:int, 4:int); - X_116:bat[:int] := algebra.projection(C_102:bat[:oid], X_111:bat[:int]); - X_120:bat[:lng] := batcalc.lng(X_116:bat[:int]); - X_126:bat[:oid] := algebra.rangejoin(X_120:bat[:lng], X_19:bat[:lng], X_24:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); - X_132:bat[:int] := algebra.projection(X_126:bat[:oid], X_116:bat[:int]); - X_148:bat[:bte] := algebra.project(X_132:bat[:int], 1:bte); - C_104:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str, 3:int, 4:int); - X_112:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int, 3:int, 4:int); - X_117:bat[:int] := algebra.projection(C_104:bat[:oid], X_112:bat[:int]); - X_121:bat[:lng] := batcalc.lng(X_117:bat[:int]); - X_128:bat[:oid] := algebra.rangejoin(X_121:bat[:lng], X_19:bat[:lng], X_24:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); - X_133:bat[:int] := algebra.projection(X_128:bat[:oid], X_117:bat[:int]); - X_149:bat[:bte] := algebra.project(X_133:bat[:int], 1:bte); - X_158:bat[:bte] := mat.packIncrement(X_146:bat[:bte], 4:int); - X_160:bat[:bte] := mat.packIncrement(X_158:bat[:bte], X_147:bat[:bte]); - X_161:bat[:bte] := mat.packIncrement(X_160:bat[:bte], X_148:bat[:bte]); - X_43:bat[:bte] := mat.packIncrement(X_161:bat[:bte], X_149:bat[:bte]); - language.pass(X_16:bat[:lng]); + X_126:bat[:oid] := algebra.rangejoin(X_119:bat[:lng], X_21:bat[:lng], X_26:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); + X_131:bat[:int] := algebra.projection(X_126:bat[:oid], X_115:bat[:int]); + X_139:bat[:bte] := algebra.project(X_131:bat[:int], 1:bte); + X_148:bat[:bte] := mat.packIncrement(X_136:bat[:bte], 4:int); + X_150:bat[:bte] := mat.packIncrement(X_148:bat[:bte], X_137:bat[:bte]); + X_151:bat[:bte] := mat.packIncrement(X_150:bat[:bte], X_138:bat[:bte]); + X_41:bat[:bte] := mat.packIncrement(X_151:bat[:bte], X_139:bat[:bte]); + language.pass(X_18:bat[:lng]); + language.pass(X_112:bat[:int]); + language.pass(X_113:bat[:int]); language.pass(X_114:bat[:int]); + language.pass(X_21:bat[:lng]); + language.pass(X_26:bat[:lng]); language.pass(X_115:bat[:int]); - language.pass(X_116:bat[:int]); - language.pass(X_19:bat[:lng]); - language.pass(X_24:bat[:lng]); - language.pass(X_117:bat[:int]); -exit X_164:bit; - sql.resultSet(X_45:bat[:str], X_46:bat[:str], X_47:bat[:str], X_48:bat[:int], X_49:bat[:int], X_43:bat[:bte]); +exit X_154:bit; + sql.resultSet(X_43:bat[:str], X_44:bat[:str], X_45:bat[:str], X_46:bat[:int], X_47:bat[:int], X_41:bat[:bte]); end user.main; #inline actions= 0 time=1 usec #remap actions= 2 time=106 usec diff --git a/sql/test/miscellaneous/Tests/simple_plans.stable.out.single b/sql/test/miscellaneous/Tests/simple_plans.stable.out.single --- a/sql/test/miscellaneous/Tests/simple_plans.stable.out.single +++ b/sql/test/miscellaneous/Tests/simple_plans.stable.out.single @@ -252,23 +252,23 @@ end user.main; % clob # type % 174 # length function user.main():void; - X_1:void := querylog.define("explain select 1 from another_t t1 inner join another_t t2 on t1.col1 between t2.col1 - 1 and t2.col1 + 1;":str, "default_pipe":str, 31:int); - X_45:bat[:str] := bat.pack(".%3":str); - X_46:bat[:str] := bat.pack("%3":str); - X_47:bat[:str] := bat.pack("tinyint":str); - X_48:bat[:int] := bat.pack(1:int); - X_49:bat[:int] := bat.pack(0:int); + X_1:void := querylog.define("explain select 1 from another_t t1 inner join another_t t2 on t1.col1 between t2.col1 - 1 and t2.col1 + 1;":str, "default_pipe":str, 29:int); + X_43:bat[:str] := bat.pack(".%1":str); + X_44:bat[:str] := bat.pack("%1":str); + X_45:bat[:str] := bat.pack("tinyint":str); + X_46:bat[:int] := bat.pack(1:int); + X_47:bat[:int] := bat.pack(0:int); X_4:int := sql.mvc(); C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "another_t":str); X_11:bat[:int] := sql.bind(X_4:int, "sys":str, "another_t":str, "col1":str, 0:int); X_15:bat[:int] := algebra.projection(C_5:bat[:oid], X_11:bat[:int]); - X_16:bat[:lng] := batcalc.lng(X_15:bat[:int]); - X_19:bat[:lng] := batcalc.-(X_16:bat[:lng], 1:lng, nil:BAT); - X_24:bat[:lng] := batcalc.+(X_16:bat[:lng], 1:lng, nil:BAT); - X_28:bat[:oid] := algebra.rangejoin(X_16:bat[:lng], X_19:bat[:lng], X_24:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); + X_17:bat[:lng] := batcalc.lng(X_15:bat[:int]); + X_21:bat[:lng] := batcalc.-(X_17:bat[:lng], 1:lng, nil:BAT); + X_26:bat[:lng] := batcalc.+(X_17:bat[:lng], 1:lng, nil:BAT); + X_28:bat[:oid] := algebra.rangejoin(X_17:bat[:lng], X_21:bat[:lng], X_26:bat[:lng], nil:BAT, nil:BAT, true:bit, true:bit, false:bit, false:bit, nil:lng); X_37:bat[:int] := algebra.projection(X_28:bat[:oid], X_15:bat[:int]); - X_43:bat[:bte] := algebra.project(X_37:bat[:int], 1:bte); - sql.resultSet(X_45:bat[:str], X_46:bat[:str], X_47:bat[:str], X_48:bat[:int], X_49:bat[:int], X_43:bat[:bte]); + X_41:bat[:bte] := algebra.project(X_37:bat[:int], 1:bte); + sql.resultSet(X_43:bat[:str], X_44:bat[:str], X_45:bat[:str], X_46:bat[:int], X_47:bat[:int], X_41:bat[:bte]); end user.main; #inline actions= 0 time=12 usec #remap actions= 2 time=134 usec _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list