Changeset: bcfcc7107d9a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bcfcc7107d9a
Modified Files:
sql/backends/monet5/sql_rank.c
Branch: analytics
Log Message:
Perform proper cast for single element window aggregates.
diffs (142 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
@@ -698,9 +698,14 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal
else
return createException(SQL, "sql.count",
SQLSTATE(HY001) MAL_MALLOC_FAIL);
} else {
- ptr *res = getArgReference(stk, pci, 0);
+ lng *res = getArgReference(stk, pci, 0);
ptr *in = getArgReference(stk, pci, 1);
- *res = *in;
+ int (*atomcmp)(const void *, const void *) = ATOMcompare(tpe);
+ const void *nil = ATOMnilptr(tpe);
+ if(atomcmp(in, nil) == 0 && *ignore_nils)
+ *res = 0;
+ else
+ *res = 1;
}
return MAL_SUCCEED;
}
@@ -712,6 +717,7 @@ do_analytical_sumprod(Client cntxt, MalB
BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL;
int tp1, tp2, unit, start, end, excl;
gdk_return gdk_res;
+ str msg = MAL_SUCCEED;
(void) cntxt;
if (pci->argc != 8 ||
@@ -739,8 +745,6 @@ do_analytical_sumprod(Client cntxt, MalB
case TYPE_lng:
#ifdef HAVE_HGE
case TYPE_hge:
-#endif
-#ifdef HAVE_HGE
tp2 = TYPE_hge;
#else
tp2 = TYPE_lng;
@@ -793,12 +797,60 @@ do_analytical_sumprod(Client cntxt, MalB
if (o) BBPunfix(o->batCacheid);
if (gdk_res == GDK_SUCCEED)
BBPkeepref(*res = r->batCacheid);
+ else
+ return createException(SQL, op, SQLSTATE(HY001)
MAL_MALLOC_FAIL);
} else {
ptr *res = getArgReference(stk, pci, 0);
ptr *in = getArgReference(stk, pci, 1);
- *res = *in;
+ int scale = 0;
+
+ switch (tp1) {
+#ifdef HAVE_HGE
+ case TYPE_bte:
+ msg = bte_dec2_hge((hge*)res, &scale, (bte*)in);
+ break;
+ case TYPE_sht:
+ msg = sht_dec2_hge((hge*)res, &scale, (sht*)in);
+ break;
+ case TYPE_int:
+ msg = int_dec2_hge((hge*)res, &scale, (int*)in);
+ break;
+ case TYPE_lng:
+ msg = lng_dec2_hge((hge*)res, &scale, (lng*)in);
+ break;
+ case TYPE_hge:
+ *res = *in;
+ break;
+#else
+ 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:
+ *res = *in;
+ break;
+#endif
+ case TYPE_flt: {
+ flt fp = *((flt*)in);
+ dbl *db = (dbl*)res;
+ if(is_flt_nil(fp))
+ *db = dbl_nil;
+ else
+ *db = (dbl) fp;
+ } break;
+ case TYPE_dbl:
+ *res = *in;
+ break;
+ default:
+ throw(SQL, op, SQLSTATE(42000) "%s not
available for %s", op, ATOMname(tp1));
+ }
}
- return MAL_SUCCEED;
+ return msg;
}
str
@@ -850,7 +902,40 @@ SQLavg(Client cntxt, MalBlkPtr mb, MalSt
} else {
ptr *res = getArgReference(stk, pci, 0);
ptr *in = getArgReference(stk, pci, 1);
- *res = *in;
+ int scale = 0;
+
+ switch (tpe) {
+ case TYPE_bte:
+ msg = bte_dec2_dbl((dbl*)res, &scale, (bte*)in);
+ break;
+ case TYPE_sht:
+ msg = sht_dec2_dbl((dbl*)res, &scale, (sht*)in);
+ break;
+ case TYPE_int:
+ msg = int_dec2_dbl((dbl*)res, &scale, (int*)in);
+ break;
+ case TYPE_lng:
+ msg = lng_dec2_dbl((dbl*)res, &scale, (lng*)in);
+ break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ msg = hge_dec2_dbl((dbl*)res, &scale, (hge*)in);
+ break;
+#endif
+ case TYPE_flt: {
+ flt fp = *((flt*)in);
+ dbl *db = (dbl*)res;
+ if(is_flt_nil(fp))
+ *db = dbl_nil;
+ else
+ *db = (dbl) fp;
+ } break;
+ case TYPE_dbl:
+ *res = *in;
+ break;
+ default:
+ throw(SQL, "sql.avg", SQLSTATE(42000) "average
not available for %s", ATOMname(tpe));
+ }
}
return msg;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list