Changeset: a50693431f8c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a50693431f8c
Modified Files:
        ctest/tools/embedded/example2.c
        tools/embedded/monetdb_embedded.c
        tools/embedded/monetdb_embedded.h
Branch: mbedded
Log Message:

add initial support for hge in the embedded api


diffs (174 lines):

diff --git a/ctest/tools/embedded/example2.c b/ctest/tools/embedded/example2.c
--- a/ctest/tools/embedded/example2.c
+++ b/ctest/tools/embedded/example2.c
@@ -25,11 +25,17 @@ main(void)
                error(err)
        if ((err = monetdb_connect(&conn)) != NULL)
                error(err)
-       if ((err = monetdb_query(conn, "CREATE TABLE test (b bool, t tinyint, s 
smallint, x integer, l bigint, f float, d double, y string)", NULL, NULL, 
NULL)) != NULL)
+       if ((err = monetdb_query(conn, "CREATE TABLE test (b bool, t tinyint, s 
smallint, x integer, l bigint, "
+#if HAVE_HGE
+               "h hugeint, "
+#else
+               "h bigint, "
+#endif
+               "f float, d double, y string)", NULL, NULL, NULL)) != NULL)
                error(err)
-       if ((err = monetdb_query(conn, "INSERT INTO test VALUES (TRUE, 42, 42, 
42, 42, 42.42, 42.42, 'Hello'), (NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
'World')", NULL, NULL, NULL)) != NULL)
+       if ((err = monetdb_query(conn, "INSERT INTO test VALUES (TRUE, 42, 42, 
42, 42, 42, 42.42, 42.42, 'Hello'), (NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, 'World')", NULL, NULL, NULL)) != NULL)
                error(err)
-       if ((err = monetdb_query(conn, "SELECT b, t, s, x, l, f, d, y FROM 
test; ", &result, NULL, NULL)) != NULL)
+       if ((err = monetdb_query(conn, "SELECT b, t, s, x, l, h, f, d, y FROM 
test; ", &result, NULL, NULL)) != NULL)
                error(err)
 
        fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n", 
result->ncols, result->nrows);
@@ -84,6 +90,17 @@ main(void)
                                        }
                                        break;
                                }
+#if HAVE_HGE
+                               case monetdb_int128_t: {
+                                       monetdb_column_int128_t * col = 
(monetdb_column_int128_t *) rcol;
+                                       if (col->data[r] == col->null_value) {
+                                               printf("NULL");
+                                       } else {
+                                               printf("%" PRId64 "%" PRId64, 
(int64_t)(col->data[r]>>64), (int64_t)(col->data[r]));
+                                       }
+                                       break;
+                               }
+#endif
                                case monetdb_float: {
                                        monetdb_column_float * col = 
(monetdb_column_float *) rcol;
                                        if (col->data[r] == col->null_value) {
diff --git a/tools/embedded/monetdb_embedded.c 
b/tools/embedded/monetdb_embedded.c
--- a/tools/embedded/monetdb_embedded.c
+++ b/tools/embedded/monetdb_embedded.c
@@ -792,11 +792,18 @@ monetdb_shutdown(void)
        GENERATE_BASE_HEADERS(tpe, tpename); \
        static int tpename##_is_null(tpe value) { return value == mname##_nil; }
 
+#ifdef bool
+#undef bool
+#endif
+
 GENERATE_BASE_FUNCTIONS(int8_t, bool, bit)
 GENERATE_BASE_FUNCTIONS(int8_t, int8_t, bte)
 GENERATE_BASE_FUNCTIONS(int16_t, int16_t, sht)
 GENERATE_BASE_FUNCTIONS(int32_t, int32_t, int)
 GENERATE_BASE_FUNCTIONS(int64_t, int64_t, lng)
+#if HAVE_HGE
+GENERATE_BASE_FUNCTIONS(__int128, int128_t, hge)
+#endif
 GENERATE_BASE_FUNCTIONS(size_t, size_t, oid)
 
 GENERATE_BASE_FUNCTIONS(float, float, flt)
@@ -809,32 +816,32 @@ GENERATE_BASE_HEADERS(monetdb_data_date,
 GENERATE_BASE_HEADERS(monetdb_data_time, time);
 GENERATE_BASE_HEADERS(monetdb_data_timestamp, timestamp);
 
-#define GENERATE_BAT_INPUT_BASE(tpe)                                           
\
+#define GENERATE_BAT_INPUT_BASE(tpe)                                           
    \
        monetdb_column_##tpe *bat_data = 
GDKzalloc(sizeof(monetdb_column_##tpe));  \
        if (!bat_data) {                                                        
   \
                msg = createException(MAL, "embedded.monetdb_result_fetch", 
MAL_MALLOC_FAIL); \
-               goto cleanup;                                                   
       \
+               goto cleanup;                                                   
   \
        }                                                                       
   \
        bat_data->type = monetdb_##tpe;                                         
   \
        bat_data->is_null = tpe##_is_null;                                      
   \
        bat_data->scale = pow(10, sqltpe->scale);                               
   \
        column_result = (monetdb_column*) bat_data;
 
-#define GENERATE_BAT_INPUT(b, tpe, mtype)                                      
\
+#define GENERATE_BAT_INPUT(b, tpe, tpe_name, mtype)                            
    \
        {                                                                       
   \
-               GENERATE_BAT_INPUT_BASE(tpe);                                   
       \
-               bat_data->count = BATcount(b);                                  
       \
-               bat_data->null_value = mtype##_nil;                             
       \
+               GENERATE_BAT_INPUT_BASE(tpe_name);                              
   \
+               bat_data->count = BATcount(b);                                  
   \
+               bat_data->null_value = mtype##_nil;                             
   \
                bat_data->data = GDKzalloc(bat_data->count * 
sizeof(bat_data->null_value)); \
-               if (!bat_data->data) {                                          
       \
+               if (!bat_data->data) {                                          
   \
                        msg = createException(MAL, 
"embedded.monetdb_result_fetch", MAL_MALLOC_FAIL); \
-                       goto cleanup;                                           
           \
-               }                                                               
       \
-               size_t it = 0;                                                  
       \
-               mtype* val = (mtype*)Tloc(b, 0);                                
       \
-               /* bat is dense, materialize it */                              
       \
-               for (it = 0; it < bat_data->count; it++, val++)                 
       \
-                       bat_data->data[it] = (tpe) *val;                        
           \
+                       goto cleanup;                                           
   \
+               }                                                               
   \
+               size_t it = 0;                                                  
   \
+               mtype* val = (mtype*)Tloc(b, 0);                                
   \
+               /* bat is dense, materialize it */                              
   \
+               for (it = 0; it < bat_data->count; it++, val++)                 
   \
+                       bat_data->data[it] = (tpe) *val;                        
   \
        }
 
 static void data_from_date(date d, monetdb_data_date *ptr);
@@ -889,22 +896,25 @@ monetdb_result_fetch(monetdb_connection 
        sqltpe = &result->monetdb_resultset->cols[column_index].type;
 
        if (bat_type == TYPE_bit) {
-               GENERATE_BAT_INPUT(b, int8_t, bit);
-               column_result->type = monetdb_bool;
+               GENERATE_BAT_INPUT(b, int8_t, bool, bit);
        } else if (bat_type == TYPE_bte) {
-               GENERATE_BAT_INPUT(b, int8_t, bte);
+               GENERATE_BAT_INPUT(b, int8_t, int8_t, bte);
        } else if (bat_type == TYPE_sht) {
-               GENERATE_BAT_INPUT(b, int16_t, sht);
+               GENERATE_BAT_INPUT(b, int16_t, int16_t, sht);
        } else if (bat_type == TYPE_int) {
-               GENERATE_BAT_INPUT(b, int32_t, int);
+               GENERATE_BAT_INPUT(b, int32_t, int32_t, int);
        } else if (bat_type == TYPE_oid) {
-               GENERATE_BAT_INPUT(b, size_t, oid);
+               GENERATE_BAT_INPUT(b, size_t, size_t, oid);
        } else if (bat_type == TYPE_lng) {
-               GENERATE_BAT_INPUT(b, int64_t, lng);
+               GENERATE_BAT_INPUT(b, int64_t, int64_t, lng);
+#if HAVE_HGE
+       } else if (bat_type == TYPE_hge) {
+               GENERATE_BAT_INPUT(b, __int128, int128_t, hge);
+#endif
        } else if (bat_type == TYPE_flt) {
-               GENERATE_BAT_INPUT(b, float, flt);
+               GENERATE_BAT_INPUT(b, float, float, flt);
        } else if (bat_type == TYPE_dbl) {
-               GENERATE_BAT_INPUT(b, double, dbl);
+               GENERATE_BAT_INPUT(b, double, double, dbl);
        } else if (bat_type == TYPE_str) {
                BATiter li;
                BUN p = 0, q = 0;
diff --git a/tools/embedded/monetdb_embedded.h 
b/tools/embedded/monetdb_embedded.h
--- a/tools/embedded/monetdb_embedded.h
+++ b/tools/embedded/monetdb_embedded.h
@@ -77,8 +77,11 @@ typedef struct {
 } monetdb_data_blob;
 
 typedef enum  {
-       monetdb_bool, monetdb_int8_t, monetdb_int16_t, monetdb_int32_t, 
monetdb_int64_t, monetdb_size_t,
-       monetdb_float, monetdb_double,
+       monetdb_bool, monetdb_int8_t, monetdb_int16_t, monetdb_int32_t, 
monetdb_int64_t, 
+#if HAVE_HGE
+       monetdb_int128_t, 
+#endif
+       monetdb_size_t, monetdb_float, monetdb_double,
        monetdb_str, monetdb_blob,
        monetdb_date, monetdb_time, monetdb_timestamp
 } monetdb_types;
@@ -116,7 +119,9 @@ DEFAULT_STRUCT_DEFINITION(int8_t, int8_t
 DEFAULT_STRUCT_DEFINITION(int16_t, int16_t);
 DEFAULT_STRUCT_DEFINITION(int32_t, int32_t);
 DEFAULT_STRUCT_DEFINITION(int64_t, int64_t);
-// HUGE INT ?
+#if HAVE_HGE
+DEFAULT_STRUCT_DEFINITION(__int128, int128_t);
+#endif
 DEFAULT_STRUCT_DEFINITION(size_t, size_t);
 
 DEFAULT_STRUCT_DEFINITION(float, float);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to