Changeset: 046ffbd65de1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=046ffbd65de1 Modified Files: sql/backends/monet5/sql_rank.c Branch: window-tunning Log Message:
Use the only necessary bat descriptors for the input frame diffs (154 lines): 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 @@ -783,18 +783,20 @@ SQLanalytics_args(BAT **r, BAT **b, int if (pci->argc != 7) throw(SQL, mod, ILLEGAL_ARGUMENT "%s requires exactly 7 arguments", mod); + *frame_type = *getArgReference_int(stk, pci, 4); + assert(*frame_type >= 0 && *frame_type <= 6); + if (isaBatType(getArgType(mb, pci, 1)) && !(*b = BATdescriptor(*getArgReference_bat(stk, pci, 1)))) throw(SQL, mod, SQLSTATE(HY005) "Cannot access column descriptor"); if (*b && !(*r = COLnew((*b)->hseqbase, rtype ? rtype : (*b)->ttype, BATcount(*b), TRANSIENT))) throw(MAL, mod, SQLSTATE(HY013) MAL_MALLOC_FAIL); if (isaBatType(getArgType(mb, pci, 2)) && !(*p = BATdescriptor(*getArgReference_bat(stk, pci, 2)))) throw(SQL, mod, SQLSTATE(HY005) "Cannot access column descriptor"); - if (isaBatType(getArgType(mb, pci, 3)) && !(*o = BATdescriptor(*getArgReference_bat(stk, pci, 3)))) + if ((*frame_type == 3 || *frame_type == 4) && isaBatType(getArgType(mb, pci, 3)) && !(*o = BATdescriptor(*getArgReference_bat(stk, pci, 3)))) throw(SQL, mod, SQLSTATE(HY005) "Cannot access column descriptor"); - *frame_type = *getArgReference_int(stk, pci, 4); - if (isaBatType(getArgType(mb, pci, 5)) && !(*s = BATdescriptor(*getArgReference_bat(stk, pci, 5)))) + if (*frame_type < 3 && isaBatType(getArgType(mb, pci, 5)) && !(*s = BATdescriptor(*getArgReference_bat(stk, pci, 5)))) throw(SQL, mod, SQLSTATE(HY005) "Cannot access column descriptor"); - if (isaBatType(getArgType(mb, pci, 6)) && !(*e = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) + if (*frame_type < 3 && isaBatType(getArgType(mb, pci, 6)) && !(*e = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) throw(SQL, mod, SQLSTATE(HY005) "Cannot access column descriptor"); if ((*s && BATcount(*b) != BATcount(*s)) || (*e && BATcount(*b) != BATcount(*e)) || (*p && BATcount(*b) != BATcount(*p)) || (*o && BATcount(*b) != BATcount(*o))) @@ -840,7 +842,7 @@ do_limit_value(Client cntxt, MalBlkPtr m gdk_return (*func)(BAT *, BAT *, BAT *, BAT *, int)) { int tpe = getArgType(mb, pci, 1); - BAT *r = NULL, *b = NULL, *s = NULL, *e = NULL; + BAT *r = NULL, *b = NULL, *s = NULL, *e = NULL; /* p and o are ignored for this one */ bat *res = NULL; str msg = MAL_SUCCEED; @@ -928,7 +930,7 @@ SQLlast_value(Client cntxt, MalBlkPtr mb str SQLnth_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - BAT *r = NULL, *b = NULL, *l = NULL, *s = NULL, *e = NULL; + BAT *r = NULL, *b = NULL, *l = NULL, *s = NULL, *e = NULL; /* p and o are ignored for this one */ int tpe; bat *res = NULL; str msg = MAL_SUCCEED; @@ -1196,6 +1198,7 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal tpe = getArgType(mb, pci, 1); ignore_nils = *getArgReference_bit(stk, pci, 2); frame_type = *getArgReference_int(stk, pci, 5); + assert(frame_type >= 0 && frame_type <= 6); if (isaBatType(tpe)) tpe = getBatType(tpe); @@ -1211,15 +1214,15 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal msg = createException(SQL, "sql.count", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 4)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 4)))) { + if ((frame_type == 3 || frame_type == 4) && isaBatType(getArgType(mb, pci, 4)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 4)))) { msg = createException(SQL, "sql.count", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 6)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 6)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) { msg = createException(SQL, "sql.count", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 7)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 7)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 7)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 7)))) { msg = createException(SQL, "sql.count", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } @@ -1264,6 +1267,7 @@ do_analytical_sumprod(Client cntxt, MalB throw(SQL, op, ILLEGAL_ARGUMENT "%s requires exactly 7 arguments", op); tp1 = getArgType(mb, pci, 1); frame_type = *getArgReference_int(stk, pci, 4); + assert(frame_type >= 0 && frame_type <= 6); if (isaBatType(tp1)) { tp1 = getBatType(tp1); @@ -1305,15 +1309,15 @@ do_analytical_sumprod(Client cntxt, MalB msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 3)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 3)))) { + if ((frame_type == 3 || frame_type == 4) && isaBatType(getArgType(mb, pci, 3)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 3)))) { msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 5)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 5)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 5)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 5)))) { msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 6)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 6)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) { msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } @@ -1732,6 +1736,7 @@ do_covariance_and_correlation(Client cnt tp1 = getArgType(mb, pci, 1); tp2 = getArgType(mb, pci, 2); frame_type = *getArgReference_int(stk, pci, 5); + assert(frame_type >= 0 && frame_type <= 6); is_a_bat1 = isaBatType(tp1); is_a_bat2 = isaBatType(tp2); @@ -1761,15 +1766,15 @@ do_covariance_and_correlation(Client cnt msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 4)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 4)))) { + if ((frame_type == 3 || frame_type == 4) && isaBatType(getArgType(mb, pci, 4)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 4)))) { msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 6)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 6)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 6)))) { msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 7)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 7)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 7)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 7)))) { msg = createException(SQL, op, SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } @@ -1884,6 +1889,7 @@ SQLstrgroup_concat(Client cntxt, MalBlkP assert(tpe == TYPE_bit); /* otherwise it must be the partition's type */ frame_type = *getArgReference_int(stk, pci, 4 + separator_offset); + assert(frame_type >= 0 && frame_type <= 6); if (isaBatType(getArgType(mb, pci, 1))) { res = getArgReference_bat(stk, pci, 0); @@ -1911,15 +1917,15 @@ SQLstrgroup_concat(Client cntxt, MalBlkP msg = createException(SQL, "sql.strgroup_concat", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 3 + separator_offset)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 3 + separator_offset)))) { + if ((frame_type == 3 || frame_type == 4) && isaBatType(getArgType(mb, pci, 3 + separator_offset)) && !(o = BATdescriptor(*getArgReference_bat(stk, pci, 3 + separator_offset)))) { msg = createException(SQL, "sql.strgroup_concat", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 5 + separator_offset)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 5 + separator_offset)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 5 + separator_offset)) && !(s = BATdescriptor(*getArgReference_bat(stk, pci, 5 + separator_offset)))) { msg = createException(SQL, "sql.strgroup_concat", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } - if (isaBatType(getArgType(mb, pci, 6 + separator_offset)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 6 + separator_offset)))) { + if (frame_type < 3 && isaBatType(getArgType(mb, pci, 6 + separator_offset)) && !(e = BATdescriptor(*getArgReference_bat(stk, pci, 6 + separator_offset)))) { msg = createException(SQL, "sql.strgroup_concat", SQLSTATE(HY005) "Cannot access column descriptor"); goto bailout; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list