Changeset: c5ac27d51925 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c5ac27d51925
Modified Files:
        ctest/tools/monetdbe/cmocka_test.c
        ctest/tools/monetdbe/test_helper.c
        ctest/tools/monetdbe/test_helper.h
        ctest/tools/monetdbe/test_helper_template.h
Branch: default
Log Message:

Support NULL values in expected column syntax.


diffs (truncated from 321 to 300 lines):

diff --git a/ctest/tools/monetdbe/cmocka_test.c 
b/ctest/tools/monetdbe/cmocka_test.c
--- a/ctest/tools/monetdbe/cmocka_test.c
+++ b/ctest/tools/monetdbe/cmocka_test.c
@@ -40,7 +40,7 @@ static void create_table_test(void **sta
        monetdbe_database mdbe = *state;
     char* err;
 
-       err = monetdbe_query(mdbe, "CREATE TABLE test (x integer, y string)", 
NULL, NULL);
+       err = monetdbe_query(mdbe, "CREATE TABLE test (si SMALLINT,i INTEGER, 
bi BIGINT, c CLOB, b BLOB, d DATE, t TIME, ts TIMESTAMP)", NULL, NULL);
 
        assert_null(err);
 }
@@ -49,7 +49,13 @@ static void populate_table_test(void **s
        monetdbe_database mdbe = *state;
     char* err;
 
-       err = monetdbe_query(mdbe, "INSERT INTO test VALUES (42, 'Hello, '), 
(58, 'World!')", NULL, NULL);
+       err = monetdbe_query(mdbe,
+       "INSERT INTO test VALUES "
+               "(4, 40, 400, 'aaa', x'aaaaaa', '2020-06-17', '12:00:00', 
'2020-06-17 12:00:00'),"
+               "(6, 60, 600, 'ccc', x'cccccc', '2022-06-17', '14:00:00', 
'2022-06-17 14:00:00'),"
+               "(5, 50, 500, 'bbb', x'bbbbbb', '2021-06-17', '13:00:00', 
'2021-06-17 13:00:00'),"
+               "(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)",
+       NULL, NULL);
 
        assert_null(err);
 }
@@ -60,22 +66,14 @@ static void query_table_test(void **stat
        monetdbe_database mdbe = *state;
     char* err;
 
-       err = monetdbe_query(mdbe, "SELECT MIN(x), CONCAT(MIN(y), MAX(y)) FROM 
test; ", &result, NULL);
+       err = monetdbe_query(mdbe, "SELECT MIN(si), MAX(i) FROM test; ", 
&result, NULL);
 
        assert_null(err);
 
-       assert_int_equal((int) result->nrows, 1);
        assert_int_equal((int) result->ncols, 2);
-       monetdbe_column* rcol;
-
-       CHECK_COLUMN(mdbe, result, 0, int32_t, {42});
 
-       err = monetdbe_result_fetch(result, &rcol, 1);
-       assert_null(err);
-
-       monetdbe_column_str * col_y = (monetdbe_column_str *) rcol;
-
-       assert_string_equal((const char*) col_y->data[0], "Hello, World!");
+       assert_true(CHECK_COLUMN(result, 0, int16_t, {{4}}));
+       assert_true(CHECK_COLUMN(result, 1, int32_t, {{60}}));
 
        err = monetdbe_cleanup_result(mdbe, result);
 
@@ -88,15 +86,43 @@ static void query_table_test2(void **sta
        monetdbe_database mdbe = *state;
     char* err;
 
-       err = monetdbe_query(mdbe, "SELECT x, y FROM test; ", &result, NULL);
+       err = monetdbe_query(mdbe, "SELECT si, i, bi, c, b, d, t, ts FROM test; 
", &result, NULL);
 
        assert_null(err);
 
-       assert_int_equal((int) result->nrows, 2);
-       assert_int_equal((int) result->ncols, 2);
+       assert_int_equal((int) result->ncols, 8);
+
+       int a;
+
+       assert_true(CHECK_COLUMN(result, 0, int16_t, {{(a=3,a+1)}, {6}, {5}, 
Null}));
+       assert_true(CHECK_COLUMN(result, 1, int32_t, {{40}, {60}, {50}, Null}));
+       assert_true(CHECK_COLUMN(result, 2, int64_t, {{400}, {600}, {500}, 
Null}));
+       assert_true(CHECK_COLUMN(result, 3, str, {{"aaa"}, {"ccc"}, {"bbb"}, 
Null}));
+       assert_true(CHECK_COLUMN(result, 4, blob, {{{3, "\xaa\xaa\xaa"}}, {{3, 
"\xcc\xcc\xcc"}}, {{3, "\xbb\xbb\xbb"}}, Null}));
+       assert_true(CHECK_COLUMN(result, 5, date, {{{17, 6, 2020}}, {{17, 6, 
2022}}, {{17, 6, 2021}}, Null}));
+       assert_true(CHECK_COLUMN(result, 6, time, {{{0, 0, 0, 12}}, {{0, 0, 0, 
14}}, {{0, 0, 0, 13}}, Null}));
+       assert_true(CHECK_COLUMN(result, 7, timestamp, {{{{17, 6, 2020}, {0, 0, 
0, 12}}}, {{{17, 6, 2022}, {0, 0, 0, 14}}}, {{{17, 6, 2021}, {0, 0, 0, 13}}}, 
Null}));
+
+       err = monetdbe_cleanup_result(mdbe, result);
 
-       assert_true(CHECK_COLUMN(mdbe, result, 0, int32_t, {42, 58}));
-       assert_true(CHECK_COLUMN(mdbe, result, 1, str, {"Hello, ", "World!"}));
+       assert_null(err);
+}
+
+static void query_table_test3(void **state) {
+
+       monetdbe_result* result = NULL;
+       monetdbe_database mdbe = *state;
+    char* err;
+
+       err = monetdbe_query(mdbe, "SELECT SUM(si), SUM(i), SUM(bi) FROM test; 
", &result, NULL);
+
+       assert_null(err);
+
+       assert_int_equal((int) result->ncols, 3);
+
+       assert_true(CHECK_COLUMN(result, 0, BIGGEST_INTEGER_TPE, {{15}}));
+       assert_true(CHECK_COLUMN(result, 1, BIGGEST_INTEGER_TPE, {{150}}));
+       /* FAIL assert_true(CHECK_COLUMN(result, 2, BIGGEST_INTEGER_TPE, 
{1500})); */
 
        err = monetdbe_cleanup_result(mdbe, result);
 
@@ -110,7 +136,8 @@ main(void)
         cmocka_unit_test(create_table_test),
                cmocka_unit_test(populate_table_test),
                cmocka_unit_test(query_table_test),
-               cmocka_unit_test(query_table_test2)
+               cmocka_unit_test(query_table_test2),
+               cmocka_unit_test(query_table_test3)
     };
 
        return cmocka_run_group_tests_name("SQL queries for MonetDBe", tests, 
setup, teardown);
diff --git a/ctest/tools/monetdbe/test_helper.c 
b/ctest/tools/monetdbe/test_helper.c
--- a/ctest/tools/monetdbe/test_helper.c
+++ b/ctest/tools/monetdbe/test_helper.c
@@ -6,77 +6,77 @@
 
 #define GET_TPE_ENUM(TPE) CONCAT(monetdb_, TPE)
 
-#define TPE int8_t
+#define TPE TEST_TPE_ID(int8_t)
 #define CHECK_COLUMN_FUNC check_column_bool
 #define TPE_ENUM monetdbe_bool
 #define MONETDB_COLUMN_TPE monetdbe_column_bool
 #include "test_helper_template.h"
 
-#define TPE int8_t
+#define TPE TEST_TPE_ID(int8_t)
 #define CHECK_COLUMN_FUNC check_column_int8_t
 #define TPE_ENUM monetdbe_int8_t
 #define MONETDB_COLUMN_TPE monetdbe_column_int8_t
 #include "test_helper_template.h"
 
-#define TPE int16_t
+#define TPE TEST_TPE_ID(int16_t)
 #define CHECK_COLUMN_FUNC check_column_int16_t
 #define TPE_ENUM monetdbe_int16_t
 #define MONETDB_COLUMN_TPE monetdbe_column_int16_t
 #include "test_helper_template.h"
 
-#define TPE int32_t
+#define TPE TEST_TPE_ID(int32_t)
 #define CHECK_COLUMN_FUNC check_column_int32_t
 #define TPE_ENUM monetdbe_int32_t
 #define MONETDB_COLUMN_TPE monetdbe_column_int32_t
 #include "test_helper_template.h"
 
-#define TPE int64_t
+#define TPE TEST_TPE_ID(int64_t)
 #define CHECK_COLUMN_FUNC check_column_int64_t
 #define TPE_ENUM monetdbe_int64_t
 #define MONETDB_COLUMN_TPE monetdbe_column_int64_t
 #include "test_helper_template.h"
 
 #if HAVE_HGE
-#define TPE __int128
+#define TPE TEST_TPE_ID(int128_t)
 #define CHECK_COLUMN_FUNC check_column_int128_t
 #define TPE_ENUM monetdbe_int128_t
 #define MONETDB_COLUMN_TPE monetdbe_column_int128_t
 #include "test_helper_template.h"
 #endif
 
-#define TPE size_t
+#define TPE TEST_TPE_ID(size_t)
 #define CHECK_COLUMN_FUNC check_column_size_t
 #define TPE_ENUM monetdbe_size_t
 #define MONETDB_COLUMN_TPE monetdbe_column_size_t
 #include "test_helper_template.h"
 
-#define TPE float
+#define TPE TEST_TPE_ID(float)
 #define CHECK_COLUMN_FUNC check_column_float
 #define TPE_ENUM monetdbe_float
 #define MONETDB_COLUMN_TPE monetdbe_column_float
 #include "test_helper_template.h"
 
-#define TPE double
+#define TPE TEST_TPE_ID(double)
 #define CHECK_COLUMN_FUNC check_column_double
 #define TPE_ENUM monetdbe_double
 #define MONETDB_COLUMN_TPE monetdbe_column_double
 #include "test_helper_template.h"
 
-#define TPE char*
+#define TPE TEST_TPE_ID(str)
 #define CHECK_COLUMN_FUNC check_column_str
 #define TPE_ENUM monetdbe_str
 #define MONETDB_COLUMN_TPE monetdbe_column_str
 #define EQUALS(A,B) (strcmp(A, B)==0)
 #include "test_helper_template.h"
 
-#define TPE monetdbe_data_blob
+#define TPE TEST_TPE_ID(blob)
 #define CHECK_COLUMN_FUNC check_column_blob
 #define TPE_ENUM monetdbe_blob
 #define EQUALS(A,B) ((A).size != (B).size?false:(memcmp((A).data, (B).data, 
(A).size)) == 0)
 #define MONETDB_COLUMN_TPE monetdbe_column_blob
 #include "test_helper_template.h"
 
-#define TPE monetdbe_data_date
+#define TPE TEST_TPE_ID(date)
 #define CHECK_COLUMN_FUNC check_column_date
 #define TPE_ENUM monetdbe_date
 #define EQUALS_DATE(A,B) (((A).day == (B).day) && ((A).month == (B).month) && 
((A).year == (B).year))
@@ -84,7 +84,7 @@
 #define MONETDB_COLUMN_TPE monetdbe_column_date
 #include "test_helper_template.h"
 
-#define TPE monetdbe_data_time
+#define TPE TEST_TPE_ID(time)
 #define CHECK_COLUMN_FUNC check_column_time
 #define TPE_ENUM monetdbe_time
 #define EQUALS_TIME(A,B) (((A).ms == (B).ms) && ((A).seconds == (B).seconds) 
&& ((A).minutes == (B).minutes) && ((A).hours == (B).hours))
@@ -92,7 +92,7 @@
 #define MONETDB_COLUMN_TPE monetdbe_column_time
 #include "test_helper_template.h"
 
-#define TPE monetdbe_data_timestamp
+#define TPE TEST_TPE_ID(timestamp)
 #define CHECK_COLUMN_FUNC check_column_timestamp
 #define TPE_ENUM monetdbe_timestamp
 #define EQUALS(A,B) (EQUALS_DATE(A.date, B.date) && EQUALS_TIME(A.time, 
B.time))
diff --git a/ctest/tools/monetdbe/test_helper.h 
b/ctest/tools/monetdbe/test_helper.h
--- a/ctest/tools/monetdbe/test_helper.h
+++ b/ctest/tools/monetdbe/test_helper.h
@@ -1,30 +1,63 @@
 
 #include "monetdbe.h"
 
-monetdbe_export bool check_column_bool      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, int8_t* expected_column);
-monetdbe_export bool check_column_int8_t    (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, int8_t* expected_column);
-monetdbe_export bool check_column_int16_t   (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, int16_t* expected_column);
-monetdbe_export bool check_column_int32_t   (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, int32_t* expected_column);
-monetdbe_export bool check_column_int64_t   (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, int64_t* expected_column);
+#define TEST_TPE(TPE) struct {TPE data; char _is_null;}
+
+#define TEST_TPE_ID(TPE) TEST_##TPE
+
+#define TYPE_DEFTEST_TPE(TPE, ACTUAL_TPE) typedef TEST_TPE(ACTUAL_TPE) 
TEST_TPE_ID(TPE)
+
+
+TYPE_DEFTEST_TPE(bool, int8_t);
+TYPE_DEFTEST_TPE(int8_t, int8_t);
+TYPE_DEFTEST_TPE(int16_t, int16_t);
+TYPE_DEFTEST_TPE(int32_t, int32_t);
+TYPE_DEFTEST_TPE(int64_t, int64_t);
 #if HAVE_HGE
-monetdbe_export bool check_column_int128_t  (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, __int128* expected_column);
+TYPE_DEFTEST_TPE(int128_t, __int128);
 #endif
-monetdbe_export bool check_column_size_t    (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, size_t* expected_column);
-monetdbe_export bool check_column_float     (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, float* expected_column);
-monetdbe_export bool check_column_double    (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, double* expected_column);
-monetdbe_export bool check_column_str       (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, char ** expected_column);
-monetdbe_export bool check_column_blob      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, monetdbe_data_blob* 
expected_column);
-monetdbe_export bool check_column_date      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, monetdbe_data_date* 
expected_column);
-monetdbe_export bool check_column_time      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, monetdbe_data_time* 
expected_column);
-monetdbe_export bool check_column_timestamp (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, monetdbe_data_timestamp* 
expected_column);
+TYPE_DEFTEST_TPE(size_t, size_t);
+TYPE_DEFTEST_TPE(float, float);
+TYPE_DEFTEST_TPE(double, double);
+TYPE_DEFTEST_TPE(str, char*);
+TYPE_DEFTEST_TPE(blob, monetdbe_data_blob);
+TYPE_DEFTEST_TPE(date, monetdbe_data_date);
+TYPE_DEFTEST_TPE(time, monetdbe_data_time);
+TYPE_DEFTEST_TPE(timestamp, monetdbe_data_timestamp);
+
+#define GET_ACTUAL_TPE(TPE_ID) ACTUAL_TPE_monetdb_##TPE_ID
+
+#define Null  {._is_null = 1}
 
-#ifndef str
-#define str char*
+monetdbe_export bool check_column_bool      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(int8_t) 
expected_column[]);
+monetdbe_export bool check_column_int8_t    (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(int8_t)* 
expected_column);
+monetdbe_export bool check_column_int16_t   (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(int16_t)* 
expected_column);
+monetdbe_export bool check_column_int32_t   (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(int32_t)* 
expected_column);
+monetdbe_export bool check_column_int64_t   (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(int64_t)* 
expected_column);
+#if HAVE_HGE
+monetdbe_export bool check_column_int128_t  (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(int128_t)* 
expected_column);
+#endif
+monetdbe_export bool check_column_size_t    (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(size_t)* 
expected_column);
+monetdbe_export bool check_column_float     (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(float)* 
expected_column);
+monetdbe_export bool check_column_double    (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(double)* 
expected_column);
+monetdbe_export bool check_column_str       (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(str)* 
expected_column);
+monetdbe_export bool check_column_blob      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(blob)* 
expected_column);
+monetdbe_export bool check_column_date      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(date)* 
expected_column);
+monetdbe_export bool check_column_time      (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(time)* 
expected_column);
+monetdbe_export bool check_column_timestamp (monetdbe_result* result, size_t 
column_index, size_t expected_nr_column_entries, TEST_TPE_ID(timestamp)* 
expected_column);
+
+#if HAVE_HGE
+#define BIGGEST_INTEGER_TPE int128_t
+#define check_column_BIGGEST_INTEGER_TPE check_column_int128_t
+#else
+#define BIGGEST_INTEGER_TPE int64_t
+#define check_column_BIGGEST_INTEGER_TPE check_column_int64_t
 #endif
 
-#define CHECK_COLUMN(conn, result, column_index, TPE, ...) \
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to