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