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

Reply via email to