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