Changeset: c8ae499c9d36 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/c8ae499c9d36 Modified Files: clients/Tests/MAL-signatures-hge.test clients/Tests/MAL-signatures.test clients/Tests/exports.stable.out monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_support.c sql/backends/monet5/sql.c sql/server/rel_optimizer.c sql/server/rel_select.c sql/server/rel_unnest.c sql/test/SQLancer/Tests/sqlancer22.test Branch: default Log Message:
Merged with Jan2022 diffs (truncated from 743 to 300 lines): diff --git a/clients/Tests/MAL-signatures-hge.test b/clients/Tests/MAL-signatures-hge.test --- a/clients/Tests/MAL-signatures-hge.test +++ b/clients/Tests/MAL-signatures-hge.test @@ -44844,6 +44844,11 @@ SQLsum; return the sum of groups batsql sum +pattern batsql.sum(X_0:bat[:int], X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:int] +SQLsum; +return the sum of groups +batsql +sum pattern batsql.sum(X_0:bat[:int], X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:lng] SQLsum; return the sum of groups @@ -63794,6 +63799,11 @@ SQLsum; return the sum of groups sql sum +pattern sql.sum(X_0:int, X_1:bit, X_2:bit, X_3:int, X_4:oid, X_5:oid):int +SQLsum; +return the sum of groups +sql +sum pattern sql.sum(X_0:int, X_1:bit, X_2:bit, X_3:int, X_4:oid, X_5:oid):lng SQLsum; return the sum of groups diff --git a/clients/Tests/MAL-signatures.test b/clients/Tests/MAL-signatures.test --- a/clients/Tests/MAL-signatures.test +++ b/clients/Tests/MAL-signatures.test @@ -32094,6 +32094,11 @@ SQLsum; return the sum of groups batsql sum +pattern batsql.sum(X_0:bat[:int], X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:int] +SQLsum; +return the sum of groups +batsql +sum pattern batsql.sum(X_0:bat[:lng], X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:lng] SQLsum; return the sum of groups @@ -47219,6 +47224,11 @@ SQLsum; return the sum of groups sql sum +pattern sql.sum(X_0:int, X_1:bit, X_2:bit, X_3:int, X_4:oid, X_5:oid):int +SQLsum; +return the sum of groups +sql +sum pattern sql.sum(X_0:int, X_1:bit, X_2:bit, X_3:int, X_4:oid, X_5:oid):lng SQLsum; return the sum of groups diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -913,6 +913,7 @@ InstrPtr copyInstructionArgs(InstrPtr p, MalBlkPtr copyMalBlk(MalBlkPtr mb); const char *copyRef; const char *copy_fromRef; +const char *corrRef; const char *countRef; const char *count_no_nilRef; int cpyConstant(MalBlkPtr mb, VarPtr vr); diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -2095,6 +2095,20 @@ OPTmergetableImplementation(Client cntxt actions++; continue; } + if (match > 0 && getModuleId(p) == algebraRef && getFunctionId(p) == crossRef && + p->argc == 5 && p->retc == 2 && bats == 2) { + int max_one = (isVarConstant(mb,getArg(p,4)) && getVarConstant(mb,getArg(p,4)).val.btval); + if (!max_one) { + m = is_a_mat(getArg(p,p->retc), &ml); + n = is_a_mat(getArg(p,p->retc+1), &ml); + if(mat_join2(mb, p, &ml, m, n, -1, -1)) { + msg = createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL); + goto cleanup; + } + actions++; + continue; + } + } /* * Aggregate handling is a prime target for optimization. * The simple cases are dealt with first. diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c --- a/monetdb5/optimizer/opt_prelude.c +++ b/monetdb5/optimizer/opt_prelude.c @@ -84,6 +84,7 @@ const char *connectRef; const char *contextRef; const char *copy_fromRef; const char *copyRef; +const char *corrRef; const char *count_no_nilRef; const char *countRef; const char *create_constraintRef; @@ -401,6 +402,7 @@ void optimizerInit(void) contextRef = putName("context"); copy_fromRef = putName("copy_from"); copyRef = putName("copy"); + corrRef = putName("corr"); count_no_nilRef = putName("count_no_nil"); countRef = putName("count"); create_constraintRef = putName("create_constraint"); diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h --- a/monetdb5/optimizer/opt_prelude.h +++ b/monetdb5/optimizer/opt_prelude.h @@ -80,6 +80,7 @@ mal_export const char *connectRef; mal_export const char *contextRef; mal_export const char *copy_fromRef; mal_export const char *copyRef; +mal_export const char *corrRef; mal_export const char *count_no_nilRef; mal_export const char *countRef; mal_export const char *create_constraintRef; diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c --- a/monetdb5/optimizer/opt_support.c +++ b/monetdb5/optimizer/opt_support.c @@ -519,7 +519,7 @@ isOrderDepenent(InstrPtr p) { if( getModuleId(p) != batsqlRef) return 0; - if ( getFunctionId(p) == differenceRef || + if (getFunctionId(p) == differenceRef || getFunctionId(p) == window_boundRef || getFunctionId(p) == row_numberRef || getFunctionId(p) == rankRef || @@ -531,7 +531,8 @@ isOrderDepenent(InstrPtr p) getFunctionId(p) == last_valueRef || getFunctionId(p) == nth_valueRef || getFunctionId(p) == lagRef || - getFunctionId(p) == leadRef) + getFunctionId(p) == leadRef || + getFunctionId(p) == corrRef) return 1; return 0; } diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -5773,6 +5773,9 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "sum", SQLsum, false, "return the sum of groups", args(1,7, batarg("",dbl),batarg("b",flt),argany("p",0),argany("o",0),arg("t",int),argany("s",0),argany("e",0))), pattern("sql", "sum", SQLsum, false, "return the sum of groups", args(1,7, arg("",dbl),arg("b",dbl),arg("p",bit),arg("o",bit),arg("t",int),arg("s",oid),arg("e",oid))), pattern("batsql", "sum", SQLsum, false, "return the sum of groups", args(1,7, batarg("",dbl),batarg("b",dbl),argany("p",0),argany("o",0),arg("t",int),argany("s",0),argany("e",0))), + /* sql.sum for month intervals */ + pattern("sql", "sum", SQLsum, false, "return the sum of groups", args(1,7, arg("",int),arg("b",int),arg("p",bit),arg("o",bit),arg("t",int),arg("s",oid),arg("e",oid))), + pattern("batsql", "sum", SQLsum, false, "return the sum of groups", args(1,7, batarg("",int),batarg("b",int),argany("p",0),argany("o",0),arg("t",int),argany("s",0),argany("e",0))), pattern("sql", "prod", SQLprod, false, "return the product of groups", args(1,7, arg("",lng),arg("b",bte),arg("p",bit),arg("o",bit),arg("t",int),arg("s",oid),arg("e",oid))), pattern("batsql", "prod", SQLprod, false, "return the product of groups", args(1,7, batarg("",lng),batarg("b",bte),argany("p",0),argany("o",0),arg("t",int),argany("s",0),argany("e",0))), pattern("sql", "prod", SQLprod, false, "return the product of groups", args(1,7, arg("",lng),arg("b",sht),arg("p",bit),arg("o",bit),arg("t",int),arg("s",oid),arg("e",oid))), diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c --- a/sql/backends/monet5/sql_rank.c +++ b/sql/backends/monet5/sql_rank.c @@ -1364,6 +1364,7 @@ do_analytical_sumprod(Client cntxt, MalB (void) cntxt; if (pci->argc != 7) throw(SQL, op, ILLEGAL_ARGUMENT "%s requires exactly 7 arguments", op); + tp2 = getArgType(mb, pci, 0); tp1 = getArgType(mb, pci, 1); frame_type = *getArgReference_int(stk, pci, 4); assert(frame_type >= 0 && frame_type <= 6); @@ -1375,29 +1376,9 @@ do_analytical_sumprod(Client cntxt, MalB goto bailout; } } - switch (tp1) { - case TYPE_bte: - case TYPE_sht: - case TYPE_int: - case TYPE_lng: -#ifdef HAVE_HGE - case TYPE_hge: - tp2 = TYPE_hge; -#else - tp2 = TYPE_lng; -#endif - break; - case TYPE_flt: - tp2 = TYPE_flt; - break; - case TYPE_dbl: - tp2 = TYPE_dbl; - break; - default: { - msg = createException(SQL, op, SQLSTATE(42000) "%s not available for %s", op, ATOMname(tp1)); - goto bailout; - } - } + if (isaBatType(tp2)) + tp2 = getBatType(tp2); + if (b) { res = getArgReference_bat(stk, pci, 0); if (!(r = COLnew(b->hseqbase, tp2, BATcount(b), TRANSIENT))) { @@ -1437,8 +1418,68 @@ do_analytical_sumprod(Client cntxt, MalB ptr in = getArgReference(stk, pci, 1); int scale = 0; - switch (tp1) { + switch (tp2) { + case TYPE_bte:{ + switch (tp1) { + case TYPE_bte: + msg = bte_dec2_bte((bte*)res, &scale, (bte*)in); + break; + default: + msg = createException(SQL, op, SQLSTATE(42000) "type combination (%s(%s)->%s) not supported", op, ATOMname(tp1), ATOMname(tp2)); + } + break; + } + case TYPE_sht:{ + switch (tp1) { + case TYPE_bte: + msg = bte_dec2_sht((sht*)res, &scale, (bte*)in); + break; + case TYPE_sht: + msg = sht_dec2_sht((sht*)res, &scale, (sht*)in); + break; + default: + msg = createException(SQL, op, SQLSTATE(42000) "type combination (%s(%s)->%s) not supported", op, ATOMname(tp1), ATOMname(tp2)); + } + break; + } + case TYPE_int:{ + switch (tp1) { + case TYPE_bte: + msg = bte_dec2_int((int*)res, &scale, (bte*)in); + break; + case TYPE_sht: + msg = sht_dec2_int((int*)res, &scale, (sht*)in); + break; + case TYPE_int: + msg = int_dec2_int((int*)res, &scale, (int*)in); + break; + default: + msg = createException(SQL, op, SQLSTATE(42000) "type combination (%s(%s)->%s) not supported", op, ATOMname(tp1), ATOMname(tp2)); + } + break; + } + case TYPE_lng:{ + switch (tp1) { + case TYPE_bte: + msg = bte_dec2_lng((lng*)res, &scale, (bte*)in); + break; + case TYPE_sht: + msg = sht_dec2_lng((lng*)res, &scale, (sht*)in); + break; + case TYPE_int: + msg = int_dec2_lng((lng*)res, &scale, (int*)in); + break; + case TYPE_lng: + msg = lng_dec2_lng((lng*)res, &scale, (lng*)in); + break; + default: + msg = createException(SQL, op, SQLSTATE(42000) "type combination (%s(%s)->%s) not supported", op, ATOMname(tp1), ATOMname(tp2)); + } + break; + } #ifdef HAVE_HGE + case TYPE_hge:{ + switch (tp1) { case TYPE_bte: msg = bte_dec2_hge((hge*)res, &scale, (bte*)in); break; @@ -1452,22 +1493,26 @@ do_analytical_sumprod(Client cntxt, MalB msg = lng_dec2_hge((hge*)res, &scale, (lng*)in); break; case TYPE_hge: - *(hge*)res = *((hge*)in); - break; -#else - case TYPE_bte: - msg = bte_dec2_lng((lng*)res, &scale, (bte*)in); + msg = hge_dec2_hge((hge*)res, &scale, (hge*)in); break; - case TYPE_sht: - msg = sht_dec2_lng((lng*)res, &scale, (sht*)in); + default: + msg = createException(SQL, op, SQLSTATE(42000) "type combination (%s(%s)->%s) not supported", op, ATOMname(tp1), ATOMname(tp2)); + } + break; + } +#endif + case TYPE_flt:{ + switch (tp1) { + case TYPE_flt: + *(flt*)res = *((flt*)in); break; - case TYPE_int: - msg = int_dec2_lng((lng*)res, &scale, (int*)in); - break; - case TYPE_lng: - *(lng*)res = *((lng*)in); - break; -#endif + default: _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list