Changeset: 0ec4b5608b0a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0ec4b5608b0a
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: arrays
Log Message:

changing multiple values at once


diffs (127 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -420,7 +420,7 @@ dup_bat(sql_trans *tr, sql_table *t, sql
 
 
 static BAT*
-materialise_nonDimensional_column(sql_column *c, unsigned int cellsNum, void* 
defVal) {
+materialise_nonDimensional_column(sql_column *c, unsigned int cellsNum, char* 
defVal) {
     BAT *b = NULL;
 
 #define fillVals(TPE, def)                     \
@@ -444,50 +444,50 @@ materialise_nonDimensional_column(sql_co
     } while (0)
 
        switch (c->type.type->localtype) {
-        case TYPE_bte:
-            if(!defVal)
-                fillVals(bte, bte_nil);
-            else
-                fillVals(bte, *(bte*)defVal);
-            break;
-        case TYPE_sht:
-            if(!defVal)
-                fillVals(sht, sht_nil);
-            else
-                fillVals(sht, *(sht*)defVal);
-            break;
-        case TYPE_int:
-            if(!defVal)
-                fillVals(int, int_nil);
-            else
-                fillVals(int, *(int*)defVal);
-            break;
-        case TYPE_lng:
-            if(!defVal)
-                fillVals(lng, lng_nil);
-            else
-                fillVals(lng, *(lng*)defVal);
-            break;
+        case TYPE_bte: {
+                       bte val = bte_nil;
+            if(defVal)
+               val = atoi(defVal);
+                       fillVals(bte, val);
+        }      break;
+        case TYPE_sht: {
+                       short val = sht_nil;
+            if(defVal)
+                               val = atoi(defVal);
+            fillVals(sht, val);
+        }      break;
+        case TYPE_int: {
+                       int val = int_nil;
+            if(defVal)
+                               val = atoi(defVal);
+            fillVals(int, val);
+        }      break;
+        case TYPE_lng: {
+                       long val = lng_nil;
+            if(defVal)
+                               val = atol(defVal);
+            fillVals(lng, val);
+        }      break;
 #ifdef HAVE_HGE
-        case TYPE_hge:
-            if(!defVal)
-                fillVals(hge, hge_nil);
-            else
-                fillVals(hge, *(hge*)defVal);
-            break;
+        case TYPE_hge: {
+                       hge val = hge_nil;
+            if(defVal)
+                               val = atol(defVal);
+            fillVals(hge, val);
+               }       break;
 #endif
-        case TYPE_flt:
-            if(!defVal)
-                fillVals(flt, flt_nil);
-            else
-                fillVals(flt, *(flt*)defVal);
-            break;
-        case TYPE_dbl:
-            if(!defVal)
-                fillVals(dbl, dbl_nil);
-            else
-                fillVals(dbl, *(dbl*)defVal);
-            break;
+        case TYPE_flt: {
+                       float val = flt_nil;
+            if(defVal)
+                               val = atof(defVal);
+            fillVals(flt, val);
+        }    break;
+        case TYPE_dbl: {
+                       double val = dbl_nil;
+            if(defVal)
+                               val = atof(defVal);
+            fillVals(dbl, val);
+        }    break;
         case TYPE_str: {
             BUN i; 
 
@@ -496,7 +496,7 @@ materialise_nonDimensional_column(sql_co
 
             /*Fill the rest of the cells with the default value or NULL if no \
              * default values is provided*/
-                       for(i=BATcount(b_in); i<cellsNum; i++) {
+                       for(i=0; i<cellsNum; i++) {
                 if(!defVal)
                     BUNappend(b,str_nil, TRUE);
                 else
@@ -553,9 +553,10 @@ update_col(sql_trans *tr, sql_column *c,
                        updatedOids = (oid*)Tloc(b, BUNfirst(b));
                        if(updatedOids)
                                neededCells = updatedOids[BATcount(b)-1]; //we 
do not need to create more than the maximum updated oid
-                       else
+                       else {
                                neededCells = b->tseqbase;
-                       neededCells++; //the previous is oid and oids start 
from 0
+                               neededCells+=BATcount(b);
+                       }
                        b_in = temp_descriptor(bat->ibid); //the BAT of the 
updated column
 
                        existingCells = BATcount(b_in) + bat->cnt;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to