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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list