Changeset: a8c658fb035b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a8c658fb035b
Added Files:
        ctest/tools/embedded/example_temporal.c
Modified Files:
        ctest/tools/embedded/CMakeLists.txt
Branch: mbedded
Log Message:

add (tiny) example for temporal values


diffs (134 lines):

diff --git a/ctest/tools/embedded/CMakeLists.txt 
b/ctest/tools/embedded/CMakeLists.txt
--- a/ctest/tools/embedded/CMakeLists.txt
+++ b/ctest/tools/embedded/CMakeLists.txt
@@ -29,3 +29,15 @@ target_link_libraries(example2
     #sql
     )
 add_test(run_example2 example2)
+
+add_executable(example_temporal example_temporal.c)
+target_link_libraries(example_temporal
+  PRIVATE
+    monetdb_config_header
+    embedded
+    sqlinclude
+    gdk
+    mapi
+    #sql
+    )
+add_test(run_example_temporal example_temporal)
diff --git a/ctest/tools/embedded/example_temporal.c 
b/ctest/tools/embedded/example_temporal.c
new file mode 100644
--- /dev/null
+++ b/ctest/tools/embedded/example_temporal.c
@@ -0,0 +1,110 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
+ */
+
+#include "monetdb_embedded.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+
+#define error(msg) {fprintf(stderr, "Failure: %s\n", msg); return -1;}
+
+#define date_eq(d1, d2) (d1.year == d2.year && d1.month == d2.month && d1.day 
== d2.day)
+#define time_eq(t1, t2) (t1.hours == t2.hours && t1.minutes == t2.minutes && 
t1.seconds == t2.seconds && t1.ms == t2.ms)
+
+int
+main(void)
+{
+       char* err = NULL;
+       monetdb_connection conn = NULL;
+       monetdb_result* result = NULL;
+
+       // first argument is a string for the db directory or NULL for 
in-memory mode
+       if ((err = monetdb_startup(NULL, 0)) != NULL)
+               error(err)
+       if ((err = monetdb_connect(&conn)) != NULL)
+               error(err)
+       if ((err = monetdb_query(conn, "CREATE TABLE test (x integer, d date, t 
time, ts timestamp, y string)", NULL, NULL, NULL)) != NULL)
+               error(err)
+       if ((err = monetdb_query(conn, "INSERT INTO test VALUES (42, 
'2020-1-1', '13:13:30', '2020-1-1 13:13:30', 'Hello'), (NULL, NULL, NULL, NULL, 
'World')", NULL, NULL, NULL)) != NULL)
+               error(err)
+       if ((err = monetdb_query(conn, "SELECT x, d, t, ts, y FROM test; ", 
&result, NULL, NULL)) != NULL)
+               error(err)
+
+       fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n", 
result->ncols, result->nrows);
+       for (int64_t r = 0; r < result->nrows; r++) {
+               for (size_t c = 0; c < result->ncols; c++) {
+                       monetdb_column* rcol;
+                       if ((err = monetdb_result_fetch(conn, &rcol, result, 
c)) != NULL)
+                               error(err)
+                       switch (rcol->type) {
+                               case monetdb_int32_t: {
+                                       monetdb_column_int32_t * col = 
(monetdb_column_int32_t *) rcol;
+                                       if (col->data[r] == col->null_value) {
+                                               printf("NULL");
+                                       } else {
+                                               printf("%d", col->data[r]);
+                                       }
+                                       break;
+                               }
+                               case monetdb_date: {
+                                       monetdb_column_date * col = 
(monetdb_column_date *) rcol;
+                                       if (date_eq(col->data[r], 
col->null_value)) {
+                                               printf("NULL");
+                                       } else {
+                                               printf("%d-%d-%d", 
col->data[r].year, col->data[r].month, col->data[r].day);
+                                       }
+                                       break;
+                               }
+                               case monetdb_time: {
+                                       monetdb_column_time * col = 
(monetdb_column_time *) rcol;
+                                       if (time_eq(col->data[r], 
col->null_value)) {
+                                               printf("NULL");
+                                       } else {
+                                               printf("%d:%d:%d.%d", 
col->data[r].hours, col->data[r].minutes, col->data[r].seconds, 
col->data[r].ms);
+                                       }
+                                       break;
+                               }
+                               case monetdb_timestamp: {
+                                       monetdb_column_timestamp * col = 
(monetdb_column_timestamp *) rcol;
+                                       if (date_eq(col->data[r].date, 
col->null_value.date) && time_eq(col->data[r].time, col->null_value.time)) {
+                                               printf("NULL");
+                                       } else {
+                                               printf("%d-%d-%d ", 
col->data[r].date.year, col->data[r].date.month, col->data[r].date.day);
+                                               printf("%d:%d:%d.%d", 
col->data[r].time.hours, col->data[r].time.minutes, col->data[r].time.seconds, 
col->data[r].time.ms);
+                                       }
+                                       break;
+                               }
+                               case monetdb_str: {
+                                       monetdb_column_str * col = 
(monetdb_column_str *) rcol;
+                                       if (col->is_null(col->data[r])) {
+                                               printf("NULL");
+                                       } else {
+                                               printf("%s", (char*) 
col->data[r]);
+                                       }
+                                       break;
+                               }
+                               default: {
+                                       printf("UNKNOWN");
+                               }
+                       }
+
+                       if (c + 1 < result->ncols) {
+                               printf(", ");
+                       }
+               }
+               printf("\n");
+       }
+
+       if ((err = monetdb_cleanup_result(conn, result)) != NULL)
+               error(err)
+       if ((err = monetdb_disconnect(conn)) != NULL)
+               error(err)
+       if ((err = monetdb_shutdown()) != NULL)
+               error(err)
+       return 0;
+}
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to