Changeset: bdb829e49166 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bdb829e49166
Modified Files:
        sql/backends/monet5/vaults/odbc/odbc_loader.c
Branch: Dec2025
Log Message:

Use bunfastapp() instead of BUNappend() in the for-each-row loop.
After the loop the properties have to be initialized for each BAT as 
bunfastapp() doesn't do that.


diffs (293 lines):

diff --git a/sql/backends/monet5/vaults/odbc/odbc_loader.c 
b/sql/backends/monet5/vaults/odbc/odbc_loader.c
--- a/sql/backends/monet5/vaults/odbc/odbc_loader.c
+++ b/sql/backends/monet5/vaults/odbc/odbc_loader.c
@@ -11,7 +11,7 @@
  */
 
 #include "monetdb_config.h"
-#include "gdk.h"       // COLnew(), BUNappend()
+#include "gdk.h"       // COLnew(), bunfastapp()
 #include "gdk_time.h"  // date_create(), daytime_create(), timestamp_create()
 #include "mal_exception.h"
 #include "mal_builder.h"
@@ -1103,13 +1103,13 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                GDKfree(ODBCmsg);
 
                                        /* as all bats need to be the same 
length, append NULL value */
-                                       if (BUNappend(b, ATOMnilptr(b->ttype), 
false) != GDK_SUCCEED)
-                                               TRC_ERROR(LOADER, "BUNappend(b, 
ATOMnilptr(b->ttype), false) failed after SQLGetData failed\n");
+                                       if (bunfastapp(b, ATOMnilptr(b->ttype)) 
!= GDK_SUCCEED)
+                                               TRC_ERROR(LOADER, 
"bunfastapp(b, ATOMnilptr(b->ttype)) failed after SQLGetData failed\n");
                                } else {
                                        if (strLen == SQL_NULL_DATA) {
                                                TRC_DEBUG(LOADER, "Data row %lu 
col %u: NULL\n", row, (unsigned) col+1);
-                                               if (BUNappend(b, 
ATOMnilptr(b->ttype), false) != GDK_SUCCEED)
-                                                       TRC_ERROR(LOADER, 
"BUNappend(b, ATOMnilptr(b->ttype), false) failed for setting SQL_NULL_DATA\n");
+                                               if (bunfastapp(b, 
ATOMnilptr(b->ttype)) != GDK_SUCCEED)
+                                                       TRC_ERROR(LOADER, 
"bunfastapp(b, ATOMnilptr(b->ttype)) failed for setting SQL_NULL_DATA\n");
                                        } else {
                                                switch(sqltype) {
                                                        case SQL_CHAR:
@@ -1132,58 +1132,58 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                
TRC_DEBUG(LOADER, "Data row %lu col %u: %s\n", row, (unsigned) col+1, str_val);
                                                                switch 
(colmetadata[col].battype) {
                                                                        case 
TYPE_str:
-                                                                               
gdkret = BUNappend(b, (void *) str_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) str_val);
                                                                                
break;
 #ifdef HAVE_HGE
                                                                        case 
TYPE_hge:
                                                                                
/* HUGEINT values are passed as string, need to convert to hge */
                                                                                
hge_val = str_to_hge(str_val);
-                                                                               
gdkret = BUNappend(b, (void *) &hge_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) &hge_val);
                                                                                
break;
 #endif
                                                                        default:
-                                                                               
gdkret = BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                               
gdkret = bunfastapp(b, ATOMnilptr(b->ttype));
                                                                                
break;
                                                                }
                                                                break;
                                                        case SQL_BIT:
                                                                if 
(colmetadata[col].battype == TYPE_bit) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %x\n", row, (unsigned) col+1, 
(unsigned) bit_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &bit_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &bit_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_TINYINT:
                                                                if 
(colmetadata[col].battype == TYPE_bte) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %hd\n", row, (unsigned) col+1, (sht) 
bte_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &bte_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &bte_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_SMALLINT:
                                                                if 
(colmetadata[col].battype == TYPE_sht) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %hd\n", row, (unsigned) col+1, sht_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &sht_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &sht_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_INTEGER:
                                                                if 
(colmetadata[col].battype == TYPE_int) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %d\n", row, (unsigned) col+1, int_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &int_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &int_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_BIGINT:
                                                                if 
(colmetadata[col].battype == TYPE_lng) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %" PRId64 "\n", row, (unsigned) col+1, 
lng_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &lng_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &lng_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_DECIMAL:
@@ -1205,62 +1205,62 @@ odbc_query(int caller, mvc *sql, sql_sub
 #ifdef HAVE_HGE
                                                                        case 
TYPE_hge:
                                                                                
hge_val = decstr_to_hge(str_val, (int)colmetadata[col].columnSize, 
colmetadata[col].decimalDigits);
-                                                                               
gdkret = BUNappend(b, (void *) &hge_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) &hge_val);
                                                                                
break;
 #endif
                                                                        case 
TYPE_lng:
                                                                                
lng_val = decstr_to_lng(str_val, (int)colmetadata[col].columnSize, 
colmetadata[col].decimalDigits);
-                                                                               
gdkret = BUNappend(b, (void *) &lng_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) &lng_val);
                                                                                
break;
                                                                        case 
TYPE_int:
                                                                                
lng_val = decstr_to_lng(str_val, (int)colmetadata[col].columnSize, 
colmetadata[col].decimalDigits);
                                                                                
int_val = (int)lng_val;
-                                                                               
gdkret = BUNappend(b, (void *) &int_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) &int_val);
                                                                                
break;
                                                                        case 
TYPE_sht:
                                                                                
lng_val = decstr_to_lng(str_val, (int)colmetadata[col].columnSize, 
colmetadata[col].decimalDigits);
                                                                                
sht_val = (sht)lng_val;
-                                                                               
gdkret = BUNappend(b, (void *) &sht_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) &sht_val);
                                                                                
break;
                                                                        case 
TYPE_bte:
                                                                                
lng_val = decstr_to_lng(str_val, (int)colmetadata[col].columnSize, 
colmetadata[col].decimalDigits);
                                                                                
bte_val = (bte)lng_val;
-                                                                               
gdkret = BUNappend(b, (void *) &bte_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) &bte_val);
                                                                                
break;
                                                                        case 
TYPE_str:
-                                                                               
gdkret = BUNappend(b, (void *) str_val, false);
+                                                                               
gdkret = bunfastapp(b, (void *) str_val);
                                                                                
break;
                                                                        default:
-                                                                               
gdkret = BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                               
gdkret = bunfastapp(b, ATOMnilptr(b->ttype));
                                                                                
break;
                                                                }
                                                                break;
                                                        case SQL_REAL:
                                                                if 
(colmetadata[col].battype == TYPE_flt) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %f\n", row, (unsigned) col+1, flt_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &flt_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &flt_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_DOUBLE:
                                                                if 
(colmetadata[col].battype == TYPE_dbl) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %f\n", row, (unsigned) col+1, dbl_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &dbl_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &dbl_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_FLOAT:
                                                                if 
(colmetadata[col].battype == TYPE_dbl) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %f\n", row, (unsigned) col+1, dbl_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &dbl_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &dbl_val);
                                                                } else
                                                                if 
(colmetadata[col].battype == TYPE_flt) {
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %f\n", row, (unsigned) col+1, flt_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &flt_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &flt_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_TYPE_DATE:
@@ -1268,9 +1268,9 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        date 
mdate_val = date_create(date_val.year, date_val.month, date_val.day);
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: date(%04d-%02u-%02u)\n",
                                                                                
row, (unsigned) col+1, date_val.year, date_val.month, date_val.day);
-                                                                       gdkret 
= BUNappend(b, (void *) &mdate_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &mdate_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_TYPE_TIME:
@@ -1278,9 +1278,9 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        daytime 
daytime_val = daytime_create(time_val.hour, time_val.minute, time_val.second, 
0);
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: daytime(%02u:%02u:%02u)\n",
                                                                                
row, (unsigned) col+1, time_val.hour, time_val.minute, time_val.second);
-                                                                       gdkret 
= BUNappend(b, (void *) &daytime_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &daytime_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_DATETIME:
@@ -1291,9 +1291,9 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        
timestamp timestamp_val = timestamp_create(mdate_val, daytime_val);
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: timestamp(%04d-%02u-%02u 
%02u:%02u:%02u.%06lu)\n", row, (unsigned) col+1,
                                                                                
          ts_val.year, ts_val.month, ts_val.day, ts_val.hour, ts_val.minute, 
ts_val.second, (unsigned long) ts_val.fraction);
-                                                                       gdkret 
= BUNappend(b, (void *) &timestamp_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &timestamp_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_INTERVAL_YEAR:
@@ -1318,9 +1318,9 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        if 
(itv_val.interval_sign == SQL_TRUE)
                                                                                
int_val = -int_val;
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %d\n", row, (unsigned) col+1, int_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &int_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &int_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_INTERVAL_DAY:
@@ -1387,9 +1387,9 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        if 
(itv_val.interval_sign == SQL_TRUE)
                                                                                
lng_val = -lng_val;
                                                                        
TRC_DEBUG(LOADER, "Data row %lu col %u: %" PRId64 "\n", row, (unsigned) col+1, 
lng_val);
-                                                                       gdkret 
= BUNappend(b, (void *) &lng_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &lng_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_GUID:
@@ -1406,9 +1406,9 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        
u_val.u[6] = (guid_val.Data3 >> 8) & 0xFF;
                                                                        
u_val.u[7] = guid_val.Data3 & 0xFF;
                                                                        
memcpy(&u_val.u[8], &guid_val.Data4[0], 8);
-                                                                       gdkret 
= BUNappend(b, (void *) &u_val.uuid_val, false);
+                                                                       gdkret 
= bunfastapp(b, (void *) &u_val.uuid_val);
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                        case SQL_BINARY:
@@ -1426,23 +1426,37 @@ odbc_query(int caller, mvc *sql, sql_sub
                                                                        if 
(blb) {
                                                                                
blb->nitems = bin_size;
                                                                                
memcpy(blb->data, bin_data, bin_size);
-                                                                               
gdkret = BUNappend(b, (void *) blb, false);
+                                                                               
gdkret = bunfastapp(b, (void *) blb);
                                                                                
GDKfree(blb);
                                                                        } else {
-                                                                               
gdkret = BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                               
gdkret = bunfastapp(b, ATOMnilptr(b->ttype));
                                                                        }
                                                                } else {
-                                                                       gdkret 
= BUNappend(b, ATOMnilptr(b->ttype), false);
+                                                                       gdkret 
= bunfastapp(b, ATOMnilptr(b->ttype));
                                                                }
                                                                break;
                                                }
                                                if (gdkret != GDK_SUCCEED)
-                                                       TRC_ERROR(LOADER, 
"BUNappend(b, val, false) failed!\n");
+                                                       TRC_ERROR(LOADER, 
"bunfastapp(b, val) failed!\n");
                                        }
                                }
                        }
                        ret = SQLFetch(stmt);   // get data of next row
                }
+               /* update the properties for each BAT */
+               for (SQLUSMALLINT col = 0; col < (SQLUSMALLINT) nr_cols; col++) 
{
+                       BAT * b = colmetadata[col].bat;
+                       b->tkey = false;
+                       b->tnonil = false;
+                       b->tnil = false;
+                       b->tsorted = false;
+                       b->trevsorted = false;
+                       b->tascii = false;
+                       b->tminpos = BUN_NONE;
+                       b->tmaxpos = BUN_NONE;
+                       BATsettrivprop(b);
+               }
+
                /* the last SQLFetch() will return SQL_NO_DATA at end, treat it 
as success */
                if (ret == SQL_NO_DATA)
                        ret = SQL_SUCCESS;      // we retrieved all rows
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to