Changeset: b743df5b6379 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b743df5b6379
Modified Files:
monetdb5/modules/mal/batExtensions.c
Branch: default
Log Message:
BUNappend does all property setting already, no need to do it twice.
diffs (135 lines):
diff --git a/monetdb5/modules/mal/batExtensions.c
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -213,57 +213,11 @@ CMDBATimprintsize(lng *ret, bat *bid)
return MAL_SUCCEED;
}
-#define append_bulk_imp_fixed_size(TPE, UNION_VAL) \
- do { \
- ValRecord *stack = stk->stk; \
- int *argv = pci->argv; \
- total = number_existing + inputs; \
- if (BATextend(b, total) != GDK_SUCCEED) { \
- BBPunfix(b->batCacheid); \
- throw(MAL,"bat.append_bulk", SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
- } \
- if (!b->tsorted && !b->trevsorted) { \
- for (int i = 3, args = pci->argc; i < args; i++) { \
- TPE next = stack[argv[i]].val.UNION_VAL; \
- new_nil |= is_##TPE##_nil(next); \
- if (BUNappend(b, &next, force) != GDK_SUCCEED)
{ \
- BBPunfix(b->batCacheid); \
- throw(MAL,"bat.append_bulk",
SQLSTATE(HY013) MAL_MALLOC_FAIL); \
- } \
- } \
- } else { \
- bool sorted = b->tsorted, revsorted = b->trevsorted; \
- TPE prev = stack[argv[3]].val.UNION_VAL; \
- new_nil |= is_##TPE##_nil(prev); \
- if (number_existing) { \
- TPE last = *(TPE*) Tloc(b, number_existing -
1); \
- sorted &= prev >= last; \
- revsorted &= prev <= last; \
- } \
- if (BUNappend(b, &prev, force) != GDK_SUCCEED) { \
- BBPunfix(b->batCacheid); \
- throw(MAL,"bat.append_bulk", SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
- } \
- for (int i = 4, args = pci->argc; i < args; i++) { \
- TPE next = stack[argv[i]].val.UNION_VAL; \
- new_nil |= is_##TPE##_nil(next); \
- sorted &= next >= prev; \
- revsorted &= next <= prev; \
- if (BUNappend(b, &next, force) != GDK_SUCCEED)
{ \
- BBPunfix(b->batCacheid); \
- throw(MAL,"bat.append_bulk",
SQLSTATE(HY013) MAL_MALLOC_FAIL); \
- } \
- } \
- b->tsorted &= sorted; \
- b->trevsorted &= revsorted; \
- } \
- } while (0)
-
static str
CMDBATappend_bulk(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
bat *r = getArgReference_bat(stk, pci, 0), *bid =
getArgReference_bat(stk, pci, 1);
- bit force = *getArgReference_bit(stk, pci, 2), new_nil = 0;
+ bit force = *getArgReference_bit(stk, pci, 2);
BAT *b;
BUN inputs = (BUN)(pci->argc - 3), number_existing = 0, total = 0;
@@ -272,7 +226,6 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt
throw(MAL, "bat.append_bulk", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
if (inputs > 0) {
- uint8_t storage = ATOMstorage(b->ttype);
number_existing = BATcount(b);
if (isaBatType(getArgType(mb, pci, 3))) { /* use BATappend for
the bulk case */
@@ -290,51 +243,8 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt
throw(MAL,"bat.append_bulk",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
}
- } else if (b->ttype < TYPE_str && storage == b->ttype) {
- switch (b->ttype) {
- case TYPE_bit:
- case TYPE_bte:
- append_bulk_imp_fixed_size(bte, btval);
- break;
- case TYPE_sht:
- append_bulk_imp_fixed_size(sht, shval);
- break;
- case TYPE_date:
- case TYPE_int:
- append_bulk_imp_fixed_size(int, ival);
- break;
- case TYPE_daytime:
- case TYPE_timestamp:
- case TYPE_lng:
- append_bulk_imp_fixed_size(lng, lval);
- break;
- case TYPE_oid:
- append_bulk_imp_fixed_size(oid, oval);
- break;
- case TYPE_flt:
- append_bulk_imp_fixed_size(flt, fval);
- break;
- case TYPE_dbl:
- append_bulk_imp_fixed_size(dbl, dval);
- break;
-#ifdef HAVE_HGE
- case TYPE_hge:
- append_bulk_imp_fixed_size(hge, hval);
- break;
-#endif
- default:
- assert(0);
- }
- BATsetcount(b, total);
- if (number_existing == 0) {
- b->tnil = new_nil;
- b->tnonil = !new_nil;
- } else {
- b->tnil |= new_nil;
- b->tnonil &= ~new_nil;
- }
- b->tkey = BATcount(b) <= 1;
- } else { /* non fixed size, use the conventional way */
+ } else {
+ bool external = ATOMextern(b->ttype);
total = number_existing + inputs;
if (BATextend(b, total) != GDK_SUCCEED) {
BBPunfix(b->batCacheid);
@@ -342,8 +252,8 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt
}
for (int i = 3, args = pci->argc; i < args; i++) {
ptr u = getArgReference(stk,pci,i);
- if (storage >= TYPE_str)
- u = (ptr) *(str *) u;
+ if (external)
+ u = (ptr) *(ptr *) u;
if (BUNappend(b, u, force) != GDK_SUCCEED) {
BBPunfix(b->batCacheid);
throw(MAL,"bat.append_bulk",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list