Changeset: 63038f6a6091 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=63038f6a6091
Modified Files:
monetdb5/optimizer/opt_coercion.c
sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
Branch: default
Log Message:
Minor typos to opt_coercion and approvals
and enabled again de batcalc.dbl()
diffs (285 lines):
diff --git a/monetdb5/optimizer/opt_coercion.c
b/monetdb5/optimizer/opt_coercion.c
--- a/monetdb5/optimizer/opt_coercion.c
+++ b/monetdb5/optimizer/opt_coercion.c
@@ -18,11 +18,6 @@ typedef struct{
int fromtype;
int totype;
int src;
-/* not used, yet !?? Indeed
- int digits;
- int fromscale;
- int scale;
-*/
} Coercion;
static int
@@ -71,27 +66,27 @@ coercionOptimizerCalcStep(Client cntxt,
a = getColumnType(getVarType(mb, getArg(p,1)));
b = getColumnType(getVarType(mb, getArg(p,2)));
- if ( a == r && coerce[getArg(p,1)].src && coerce[getArg(p,1)].fromtype
< r )
+ varid = getArg(p,1);
+ if ( a == r && coerce[varid].src && coerce[varid].fromtype < r )
{
#ifdef _DEBUG_COERCION_
mnstr_printf(cntxt->fdout,"#remove upcast on first argument
%d\n", getArg(p,1));
printInstruction(cntxt->fdout, mb, 0, p, LIST_MAL_ALL);
#endif
- varid = getArg(p,1);
- getArg(p,1) = coerce[getArg(p,1)].src;
- if ( chkInstruction(NULL, cntxt->nspace, mb, p))
- p->argv[1] = varid;
+ getArg(p,1) = coerce[varid].src;
+ if ( chkInstruction(NULL, cntxt->nspace, mb, p) || p->typechk
== TYPE_UNKNOWN)
+ getArg(p,1)= varid;
}
- if ( b == r && coerce[getArg(p,2)].src && coerce[getArg(p,2)].fromtype
< r )
+ varid = getArg(p,2);
+ if ( b == r && coerce[varid].src && coerce[varid].fromtype < r )
{
#ifdef _DEBUG_COERCION_
mnstr_printf(cntxt->fdout,"#remove upcast on second argument
%d\n", getArg(p,2));
printInstruction(cntxt->fdout, mb, 0, p, LIST_MAL_ALL);
#endif
- varid = getArg(p,2);
- getArg(p,2) = coerce[getArg(p,2)].src;
- if ( chkInstruction(NULL, cntxt->nspace, mb, p))
- p->argv[2] = varid;
+ getArg(p,2) = coerce[varid].src;
+ if ( chkInstruction(NULL, cntxt->nspace, mb, p) || p->typechk
== TYPE_UNKNOWN)
+ getArg(p,2) = varid;
}
#ifdef _DEBUG_COERCION_
mnstr_printf(cntxt->fdout,"#final instruction\n");
@@ -114,8 +109,11 @@ coercionOptimizerAggrStep(Client cntxt,
r = getColumnType(getVarType(mb, getArg(p,0)));
k = getArg(p,1);
- if( r == TYPE_dbl && coerce[k].src )
+ if( r == TYPE_dbl && coerce[k].src ){
getArg(p,1) = coerce[getArg(p,1)].src;
+ if ( chkInstruction(NULL, cntxt->nspace, mb, p) || p->typechk
== TYPE_UNKNOWN)
+ getArg(p,1)= k;
+ }
return;
}
@@ -158,14 +156,8 @@ OPTcoercionImplementation(Client cntxt,M
coerce[k].totype= TYPE_hge;
coerce[k].src= getArg(p,2);
coerce[k].fromtype= getColumnType(getArgType(mb,p,2));
-/* not used, yet !?? indeed
- coerce[k].fromscale=
getVarConstant(mb,getArg(p,1)).val.ival;
- coerce[k].digits=
getVarConstant(mb,getArg(p,3)).val.ival;
- coerce[k].scale=
getVarConstant(mb,getArg(p,4)).val.ival;
-*/
}
#endif
-/*
if ( getModuleId(p) == batcalcRef
&& getFunctionId(p) == dblRef
&& p->retc == 1
@@ -181,7 +173,6 @@ OPTcoercionImplementation(Client cntxt,M
coerce[k].src= getArg(p,1 + (p->argc ==3));
coerce[k].fromtype= getColumnType(getArgType(mb,p,1 +
(p->argc ==3)));
}
-*/
coercionOptimizerAggrStep(cntxt,mb, i, coerce);
coercionOptimizerCalcStep(cntxt,mb, i, coerce);
if (getModuleId(p)==calcRef && p->argc == 2) {
diff --git a/sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
b/sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
--- a/sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
+++ b/sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
@@ -52,17 +52,17 @@ Ready.
% clob # type
% 622 # length
function user.s2_1{autoCommit=true}(A0:bte,A1:bte,A2:bte,A3:date,A4:lng):void;
- X_168:void := querylog.define("explain
select\n\tl_returnflag,\n\tl_linestatus,\n\tsum(l_quantity) as
sum_qty,\n\tsum(l_extendedprice) as sum_base_price,\n\tsum(l_extendedprice * (1
- l_discount)) as sum_disc_price,\n\tsum(l_extendedprice * (1 - l_discount) *
(1 + l_tax)) as sum_charge,\n\tavg(l_quantity) as
avg_qty,\n\tavg(l_extendedprice) as avg_price,\n\tavg(l_discount) as
avg_disc,\n\tcount(*) as count_order\nfrom\n\tlineitem\nwhere\n\tl_shipdate <=
date \\'1998-12-01\\' - interval \\'90\\' day (3)\ngroup
by\n\tl_returnflag,\n\tl_linestatus\norder
by\n\tl_returnflag,\n\tl_linestatus;","sequential_pipe",86);
+ X_167:void := querylog.define("explain
select\n\tl_returnflag,\n\tl_linestatus,\n\tsum(l_quantity) as
sum_qty,\n\tsum(l_extendedprice) as sum_base_price,\n\tsum(l_extendedprice * (1
- l_discount)) as sum_disc_price,\n\tsum(l_extendedprice * (1 - l_discount) *
(1 + l_tax)) as sum_charge,\n\tavg(l_quantity) as
avg_qty,\n\tavg(l_extendedprice) as avg_price,\n\tavg(l_discount) as
avg_disc,\n\tcount(*) as count_order\nfrom\n\tlineitem\nwhere\n\tl_shipdate <=
date \\'1998-12-01\\' - interval \\'90\\' day (3)\ngroup
by\n\tl_returnflag,\n\tl_linestatus\norder
by\n\tl_returnflag,\n\tl_linestatus;","sequential_pipe",85);
X_7 := sql.mvc();
X_11:bat[:oid,:date] := sql.bind(X_7,"sys","lineitem","l_shipdate",0);
X_8:bat[:oid,:oid] := sql.tid(X_7,"sys","lineitem");
X_19 := mtime.date_sub_msec_interval(A3,A4);
- X_187 := algebra.thetasubselect(X_11,X_8,X_19,"<=");
+ X_186 := algebra.thetasubselect(X_11,X_8,X_19,"<=");
(X_14,r1_14) := sql.bind(X_7,"sys","lineitem","l_shipdate",2);
- X_188 := algebra.thetasubselect(r1_14,nil:bat[:oid,:oid],X_19,"<=");
+ X_187 := algebra.thetasubselect(r1_14,nil:bat[:oid,:oid],X_19,"<=");
X_17:bat[:oid,:date] := sql.bind(X_7,"sys","lineitem","l_shipdate",1);
- X_190 := algebra.thetasubselect(X_17,X_8,X_19,"<=");
- X_20 := sql.subdelta(X_187,X_8,X_14,X_188,X_190);
+ X_189 := algebra.thetasubselect(X_17,X_8,X_19,"<=");
+ X_20 := sql.subdelta(X_186,X_8,X_14,X_187,X_189);
X_22:bat[:oid,:str] := sql.bind(X_7,"sys","lineitem","l_linestatus",0);
(X_24,r1_28) := sql.bind(X_7,"sys","lineitem","l_linestatus",2);
X_26:bat[:oid,:str] := sql.bind(X_7,"sys","lineitem","l_linestatus",1);
@@ -104,38 +104,37 @@ function user.s2_1{autoCommit=true}(A0:b
X_101:bat[:oid,:lng] := batcalc.+(X_94,X_100);
X_102:bat[:oid,:hge] := batcalc.*(X_93,X_101);
X_103:bat[:oid,:hge] := aggr.subsum(X_102,X_37,r1_45,true,true);
- X_105 := batcalc.dbl(X_61);
- X_106:bat[:oid,:dbl] := aggr.subavg(X_105,X_37,r1_45,true,true);
- X_108:bat[:oid,:dbl] := batcalc.dbl(2,X_70);
- X_110:bat[:oid,:dbl] := aggr.subavg(X_108,X_37,r1_45,true,true);
- X_112:bat[:oid,:dbl] := batcalc.dbl(2,X_85);
- X_113:bat[:oid,:dbl] := aggr.subavg(X_112,X_37,r1_45,true,true);
- X_116:bat[:oid,:wrd] := aggr.subcount(X_37,X_37,r1_45,false);
+ X_105:bat[:oid,:dbl] := aggr.subavg(X_61,X_37,r1_45,true,true);
+ X_107:bat[:oid,:dbl] := batcalc.dbl(2,X_70);
+ X_109:bat[:oid,:dbl] := aggr.subavg(X_107,X_37,r1_45,true,true);
+ X_111:bat[:oid,:dbl] := batcalc.dbl(2,X_85);
+ X_112:bat[:oid,:dbl] := aggr.subavg(X_111,X_37,r1_45,true,true);
+ X_115:bat[:oid,:wrd] := aggr.subcount(X_37,X_37,r1_45,false);
(X_42,r1_50,r2_50) := algebra.subsort(X_41,false,false);
(X_46,r1_54,r2_54) := algebra.subsort(X_40,r1_50,r2_50,false,false);
X_49 := algebra.leftfetchjoin(r1_54,X_41);
- X_118 := algebra.leftfetchjoin(r1_54,X_116);
- X_115 := algebra.leftfetchjoin(r1_54,X_113);
- X_111 := algebra.leftfetchjoin(r1_54,X_110);
- X_107 := algebra.leftfetchjoin(r1_54,X_106);
+ X_117 := algebra.leftfetchjoin(r1_54,X_115);
+ X_114 := algebra.leftfetchjoin(r1_54,X_112);
+ X_110 := algebra.leftfetchjoin(r1_54,X_109);
+ X_106 := algebra.leftfetchjoin(r1_54,X_105);
X_104 := algebra.leftfetchjoin(r1_54,X_103);
X_90 := algebra.leftfetchjoin(r1_54,X_88);
X_72 := algebra.leftfetchjoin(r1_54,X_71);
X_64 := algebra.leftfetchjoin(r1_54,X_62);
X_50 := algebra.leftfetchjoin(r1_54,X_40);
- X_119 := sql.resultSet(10,1,X_49);
- sql.rsColumn(X_119,"sys.lineitem","l_returnflag","varchar",1,0,X_49);
- sql.rsColumn(X_119,"sys.lineitem","l_linestatus","varchar",1,0,X_50);
- sql.rsColumn(X_119,"sys.L1","sum_qty","hugeint",128,0,X_64);
- sql.rsColumn(X_119,"sys.L2","sum_base_price","decimal",15,2,X_72);
- sql.rsColumn(X_119,"sys.L3","sum_disc_price","decimal",33,4,X_90);
- sql.rsColumn(X_119,"sys.L4","sum_charge","decimal",39,6,X_104);
- sql.rsColumn(X_119,"sys.L5","avg_qty","double",53,0,X_107);
- sql.rsColumn(X_119,"sys.L6","avg_price","double",53,0,X_111);
- sql.rsColumn(X_119,"sys.L7","avg_disc","double",53,0,X_115);
- sql.rsColumn(X_119,"sys.L10","count_order","wrd",64,0,X_118);
- X_166 := io.stdout();
- sql.exportResult(X_166,X_119);
+ X_118 := sql.resultSet(10,1,X_49);
+ sql.rsColumn(X_118,"sys.lineitem","l_returnflag","varchar",1,0,X_49);
+ sql.rsColumn(X_118,"sys.lineitem","l_linestatus","varchar",1,0,X_50);
+ sql.rsColumn(X_118,"sys.L1","sum_qty","hugeint",128,0,X_64);
+ sql.rsColumn(X_118,"sys.L2","sum_base_price","decimal",15,2,X_72);
+ sql.rsColumn(X_118,"sys.L3","sum_disc_price","decimal",33,4,X_90);
+ sql.rsColumn(X_118,"sys.L4","sum_charge","decimal",39,6,X_104);
+ sql.rsColumn(X_118,"sys.L5","avg_qty","double",53,0,X_106);
+ sql.rsColumn(X_118,"sys.L6","avg_price","double",53,0,X_110);
+ sql.rsColumn(X_118,"sys.L7","avg_disc","double",53,0,X_114);
+ sql.rsColumn(X_118,"sys.L10","count_order","wrd",64,0,X_117);
+ X_165 := io.stdout();
+ sql.exportResult(X_165,X_118);
end user.s2_1;
# 22:53:25 >
diff --git a/sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
b/sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
--- a/sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
+++ b/sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
@@ -48,7 +48,7 @@ Ready.
% clob # type
% 378 # length
function user.s2_1{autoCommit=true}(A0:bte,A1:str,A2:str,A3:dbl):void;
- X_119:void := querylog.define("explain select\n\tsum(l_extendedprice) /
7.0 as avg_yearly\nfrom\n\tlineitem,\n\tpart\nwhere\n\tp_partkey =
l_partkey\n\tand p_brand = \\'Brand#23\\'\n\tand p_container = \\'MED
BOX\\'\n\tand l_quantity < (\n\t\tselect\n\t\t\t0.2 *
avg(l_quantity)\n\t\tfrom\n\t\t\tlineitem\n\t\twhere\n\t\t\tl_partkey =
p_partkey\n\t);","sequential_pipe",68);
+ X_118:void := querylog.define("explain select\n\tsum(l_extendedprice) /
7.0 as avg_yearly\nfrom\n\tlineitem,\n\tpart\nwhere\n\tp_partkey =
l_partkey\n\tand p_brand = \\'Brand#23\\'\n\tand p_container = \\'MED
BOX\\'\n\tand l_quantity < (\n\t\tselect\n\t\t\t0.2 *
avg(l_quantity)\n\t\tfrom\n\t\t\tlineitem\n\t\twhere\n\t\t\tl_partkey =
p_partkey\n\t);","sequential_pipe",67);
X_6 := sql.mvc();
X_7:bat[:oid,:oid] := sql.tid(X_6,"sys","lineitem");
X_10:bat[:oid,:int] := sql.bind(X_6,"sys","lineitem","l_partkey",0);
@@ -62,18 +62,18 @@ function user.s2_1{autoCommit=true}(A0:b
X_27:bat[:oid,:str] := sql.bind(X_6,"sys","part","p_container",0);
X_32:bat[:oid,:str] := sql.bind(X_6,"sys","part","p_brand",0);
X_25:bat[:oid,:oid] := sql.tid(X_6,"sys","part");
- X_142 := algebra.subselect(X_32,X_25,A1,A1,true,true,false);
+ X_141 := algebra.subselect(X_32,X_25,A1,A1,true,true,false);
(X_34,r1_40) := sql.bind(X_6,"sys","part","p_brand",2);
- X_143 := algebra.subselect(r1_40,nil:bat[:oid,:oid],A1,A1,true,true,false);
+ X_142 := algebra.subselect(r1_40,nil:bat[:oid,:oid],A1,A1,true,true,false);
X_37:bat[:oid,:str] := sql.bind(X_6,"sys","part","p_brand",1);
- X_145 := algebra.subselect(X_37,X_25,A1,A1,true,true,false);
- X_38 := sql.subdelta(X_142,X_25,X_34,X_143,X_145);
- X_146 := algebra.subselect(X_27,X_38,A2,A2,true,true,false);
+ X_144 := algebra.subselect(X_37,X_25,A1,A1,true,true,false);
+ X_38 := sql.subdelta(X_141,X_25,X_34,X_142,X_144);
+ X_145 := algebra.subselect(X_27,X_38,A2,A2,true,true,false);
(X_29,r1_32) := sql.bind(X_6,"sys","part","p_container",2);
- X_147 := algebra.subselect(r1_32,nil:bat[:oid,:oid],A2,A2,true,true,false);
+ X_146 := algebra.subselect(r1_32,nil:bat[:oid,:oid],A2,A2,true,true,false);
X_31:bat[:oid,:str] := sql.bind(X_6,"sys","part","p_container",1);
- X_149 := algebra.subselect(X_31,X_38,A2,A2,true,true,false);
- X_41 := sql.subdelta(X_146,X_38,X_29,X_147,X_149);
+ X_148 := algebra.subselect(X_31,X_38,A2,A2,true,true,false);
+ X_41 := sql.subdelta(X_145,X_38,X_29,X_146,X_148);
X_42 := X_41;
(X_43,r1_52) := algebra.subjoin(X_24,X_42,nil:BAT,nil:BAT,false,nil:lng);
X_47:bat[:oid,:int] := sql.bind(X_6,"sys","part","p_partkey",0);
@@ -90,30 +90,29 @@ function user.s2_1{autoCommit=true}(A0:b
X_69:bat[:oid,:oid] := batcalc.identity(X_68);
X_70 := algebra.leftfetchjoin(r1_69,X_69);
(X_71,r1_85,r2_85) := group.subgroupdone(X_70);
- X_150 := algebra.leftfetchjoin(r1_85,r1_69);
+ X_149 := algebra.leftfetchjoin(r1_85,r1_69);
X_74:bat[:oid,:int] := sql.bind(X_6,"sys","lineitem","l_quantity",0);
(X_76,r1_90) := sql.bind(X_6,"sys","lineitem","l_quantity",2);
X_78:bat[:oid,:int] := sql.bind(X_6,"sys","lineitem","l_quantity",1);
X_79 := sql.projectdelta(X_7,X_74,X_76,r1_90,X_78);
X_86 := algebra.leftfetchjoin(X_58,X_79);
- X_87 := batcalc.dbl(X_86);
- X_88:bat[:oid,:dbl] := aggr.subavg(X_87,X_71,r1_85,true,true);
- X_80:bat[:oid,:int] := algebra.leftfetchjoinPath(X_150,X_43,X_79);
+ X_87:bat[:oid,:dbl] := aggr.subavg(X_86,X_71,r1_85,true,true);
+ X_80:bat[:oid,:int] := algebra.leftfetchjoinPath(X_149,X_43,X_79);
X_81 := batcalc.dbl(X_80);
- X_90:bat[:oid,:dbl] := batcalc.*(A3,X_88);
- X_91:bat[:oid,:bit] := batcalc.<(X_81,X_90);
- X_92 := algebra.subselect(X_91,true,true,true,true,false);
- X_94:bat[:oid,:lng] := sql.bind(X_6,"sys","lineitem","l_extendedprice",0);
- (X_97,r1_124) := sql.bind(X_6,"sys","lineitem","l_extendedprice",2);
- X_99:bat[:oid,:lng] := sql.bind(X_6,"sys","lineitem","l_extendedprice",1);
- X_100 := sql.projectdelta(X_7,X_94,X_97,r1_124,X_99);
- X_101:bat[:oid,:lng] := algebra.leftfetchjoinPath(X_92,X_150,X_43,X_100);
- X_102:hge := aggr.sum(X_101);
- X_103 := calc.lng(2,X_102,15,2);
- X_105 := calc.lng(2,X_103,18,5);
- X_109 := calc.lng(1,A0,15,2);
- X_111 := calc./(X_105,X_109);
- sql.exportValue(1,"sys.L3","avg_yearly","decimal",18,3,10,X_111,"");
+ X_89:bat[:oid,:dbl] := batcalc.*(A3,X_87);
+ X_90:bat[:oid,:bit] := batcalc.<(X_81,X_89);
+ X_91 := algebra.subselect(X_90,true,true,true,true,false);
+ X_93:bat[:oid,:lng] := sql.bind(X_6,"sys","lineitem","l_extendedprice",0);
+ (X_96,r1_124) := sql.bind(X_6,"sys","lineitem","l_extendedprice",2);
+ X_98:bat[:oid,:lng] := sql.bind(X_6,"sys","lineitem","l_extendedprice",1);
+ X_99 := sql.projectdelta(X_7,X_93,X_96,r1_124,X_98);
+ X_100:bat[:oid,:lng] := algebra.leftfetchjoinPath(X_91,X_149,X_43,X_99);
+ X_101:hge := aggr.sum(X_100);
+ X_102 := calc.lng(2,X_101,15,2);
+ X_104 := calc.lng(2,X_102,18,5);
+ X_108 := calc.lng(1,A0,15,2);
+ X_110 := calc./(X_104,X_108);
+ sql.exportValue(1,"sys.L3","avg_yearly","decimal",18,3,10,X_110,"");
end user.s2_1;
# 22:53:29 >
diff --git
a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
--- a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
+++ b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
@@ -63,7 +63,7 @@ function user.s4_1(A0:hge,A1:bte):void;
X_24:bat[:oid,:hge] := batcalc.*(A0,X_23);
X_25 := sql.resultSet(3,1,X_14);
sql.rsColumn(X_25,"sys.dbg","d","int",32,0,X_14);
- sql.rsColumn(X_25,"sys.L1","L1","hugeint",32,0,X_18);
+ sql.rsColumn(X_25,"sys.L1","L1","hugeint",128,0,X_18);
sql.rsColumn(X_25,".L3","f","hugeint",128,0,X_24);
X_42 := io.stdout();
sql.exportResult(X_42,X_25);
@@ -116,7 +116,7 @@ function user.s10_1(A0:hge,A1:bte):void;
X_24:bat[:oid,:hge] := batcalc.*(A0,X_23);
X_25 := sql.resultSet(3,1,X_14);
sql.rsColumn(X_25,"sys.dbg","d","int",32,0,X_14);
- sql.rsColumn(X_25,"sys.L1","e","hugeint",32,0,X_18);
+ sql.rsColumn(X_25,"sys.L1","e","hugeint",128,0,X_18);
sql.rsColumn(X_25,".L3","f","hugeint",128,0,X_24);
X_42 := io.stdout();
sql.exportResult(X_42,X_25);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list