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

Reply via email to