Changeset: 4197d728f19c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4197d728f19c
Modified Files:
        gdk/gdk_join.c
        gdk/gdk_unique.c
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_pipes.c
Branch: unlock
Log Message:

merged with default


diffs (truncated from 926 to 300 lines):

diff --git a/ctest/tools/monetdbe/CMakeLists.txt 
b/ctest/tools/monetdbe/CMakeLists.txt
--- a/ctest/tools/monetdbe/CMakeLists.txt
+++ b/ctest/tools/monetdbe/CMakeLists.txt
@@ -20,12 +20,6 @@ target_link_libraries(example2
     monetdbe)
 add_test(run_example2 example2)
 
-add_executable(example_proxy example_proxy.c)
-target_link_libraries(example_proxy
-  PRIVATE
-    monetdb_config_header
-    monetdbe)
-
 add_executable(example_temporal example_temporal.c)
 target_link_libraries(example_temporal
   PRIVATE
@@ -77,12 +71,12 @@ target_link_libraries(example_connection
     monetdbe)
 add_test(run_example_connections example_connections)
 
-add_executable(example_remote example_remote.c)
-target_link_libraries(example_remote
+add_executable(example_proxy example_proxy.c)
+target_link_libraries(example_proxy
   PRIVATE
     monetdb_config_header
     monetdbe)
-add_test(run_example_remote example_remote)
+add_test(run_example_proxy example_proxy)
 
 if(WITH_CMOCKA)
   add_executable(cmocka_test cmocka_test.c test_helper.c)
@@ -95,3 +89,8 @@ if(WITH_CMOCKA)
   )
   add_test(run_cmocka_test cmocka_test)
 endif()
+
+if (TESTING)
+  install(TARGETS
+  example_proxy)
+endif()
diff --git a/ctest/tools/monetdbe/Tests/All b/ctest/tools/monetdbe/Tests/All
new file mode 100644
--- /dev/null
+++ b/ctest/tools/monetdbe/Tests/All
@@ -0,0 +1,1 @@
+example_proxy
diff --git a/ctest/tools/monetdbe/Tests/example_proxy.SQL.py 
b/ctest/tools/monetdbe/Tests/example_proxy.SQL.py
new file mode 100644
--- /dev/null
+++ b/ctest/tools/monetdbe/Tests/example_proxy.SQL.py
@@ -0,0 +1,45 @@
+import os, pymonetdb
+import subprocess
+
+db = os.getenv("TSTDB")
+port = os.getenv("MAPIPORT")
+
+client1 = pymonetdb.connect(database=db, port=port, autocommit=True)
+cur1 = client1.cursor()
+cur1.execute('''
+CREATE TABLE test (x INTEGER, y STRING);
+INSERT INTO test VALUES (42, 'Hello'), (NULL, 'World');
+''')
+
+cur1.close()
+client1.close()
+
+cmd = ['example_proxy', port, db]
+results = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, 
encoding='utf-8')
+
+if results.stderr:
+    print(results.stderr)
+
+lines = results.stdout.splitlines()
+
+if len(lines) != 3:
+    print(results.stdout)
+    print("Too many output lines.")
+    exit(1)
+
+def test_equal(expected, received):
+    if received != expected:
+        print("expected:")
+        print(expected)
+        print("received:")
+        print(received)
+        exit(1)
+
+expected="Query result with 2 cols and 2 rows"
+test_equal(expected, lines[0])
+
+expected="42, Hello"
+test_equal(expected, lines[1])
+
+expected="NULL, World"
+test_equal(expected, lines[2])
diff --git a/ctest/tools/monetdbe/example_proxy.c 
b/ctest/tools/monetdbe/example_proxy.c
--- a/ctest/tools/monetdbe/example_proxy.c
+++ b/ctest/tools/monetdbe/example_proxy.c
@@ -11,63 +11,33 @@
 #include <stdio.h>
 #include <inttypes.h>
 
+#define expected_error(msg) {fprintf(stderr, "Failure: %s\n", msg); return 0;}
 #define error(msg) {fprintf(stderr, "Failure: %s\n", msg); return -1;}
 
 int
-main(void)
+main(int argc, char** argv)
 {
        char* err = NULL;
        monetdbe_database mdbe = NULL;
        monetdbe_result* result = NULL;
-
-    monetdbe_remote remote = {
-        .host = "127.0.0.1",
-        .port = 50001,
-        .username="monetdb",
-        .password="monetdb",
-        .lang="sql"};
-
-    monetdbe_options opt = {.remote = &remote};
+       assert(argc==3);
+       const int port = strtol(argv[1], NULL, 10);
+       const char* database = argv[2];
+       monetdbe_remote remote = {.host="localhost", .port=port, 
.database=database, .username="monetdb", .password="monetdb"};
+       monetdbe_options opts = {.remote = &remote};
 
-       // second argument is a string for the db directory or NULL for 
in-memory mode
-       if (monetdbe_open(&mdbe, 
"mapi:monetdb://127.0.0.1:50000?database=devdb", &opt))
-               error("Failed to open database")
-
-
-       if ((err = monetdbe_query(mdbe, "DELETE FROM test WHERE x < 0; ", 
&result, NULL)) != NULL)
+       if (monetdbe_open(&mdbe, NULL, &opts))
+               expected_error("Failed to open database")
+       if ((err = monetdbe_query(mdbe, "SELECT x, y FROM test ORDER BY y ASC; 
", &result, NULL)) != NULL)
                error(err)
 
-       if ((err = monetdbe_query(mdbe, "SELECT * FROM test; ", &result, NULL)) 
!= NULL)
-               error(err)
-
-       monetdbe_column* appendable_columns[2];
-
        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++) {
                        monetdbe_column* rcol;
                        if ((err = monetdbe_result_fetch(result, &rcol, c)) != 
NULL)
                                error(err)
-                       appendable_columns[c] = rcol;
                        switch (rcol->type) {
-                               case monetdbe_int8_t: {
-                                       monetdbe_column_int8_t * col = 
(monetdbe_column_int8_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
-                               case monetdbe_int16_t: {
-                                       monetdbe_column_int16_t * col = 
(monetdbe_column_int16_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
                                case monetdbe_int32_t: {
                                        monetdbe_column_int32_t * col = 
(monetdbe_column_int32_t *) rcol;
                                        if (col->data[r] == col->null_value) {
@@ -79,71 +49,7 @@ main(void)
                                }
                                case monetdbe_str: {
                                        monetdbe_column_str * col = 
(monetdbe_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 = monetdbe_append(mdbe, "sys", "test", appendable_columns, 2)) 
!= NULL)
-               error(err)
-
-       if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL)
-               error(err)
-
-       if ((err = monetdbe_query(mdbe, "SELECT * FROM test; ", &result, 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++) {
-                       monetdbe_column* rcol;
-                       if ((err = monetdbe_result_fetch(result, &rcol, c)) != 
NULL)
-                               error(err)
-                       switch (rcol->type) {
-                               case monetdbe_int8_t: {
-                                       monetdbe_column_int8_t * col = 
(monetdbe_column_int8_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
-                               case monetdbe_int16_t: {
-                                       monetdbe_column_int16_t * col = 
(monetdbe_column_int16_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
-                               case monetdbe_int32_t: {
-                                       monetdbe_column_int32_t * col = 
(monetdbe_column_int32_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
-                               case monetdbe_str: {
-                                       monetdbe_column_str * col = 
(monetdbe_column_str *) rcol;
-                                       if (col->is_null(&col->data[r])) {
+                                       if (col->is_null(col->data+r)) {
                                                printf("NULL");
                                        } else {
                                                printf("%s", (char*) 
col->data[r]);
@@ -164,207 +70,6 @@ main(void)
 
        if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL)
                error(err)
-
-       if ((err = monetdbe_query(mdbe, "INSERT INTO test VALUES (100, 
'temp');", NULL, NULL)) != NULL)
-               error(err)
-
-       // Assumes the existance of a table test (x INT, y STRING)  on the 
remote.
-       monetdbe_statement *stmt = NULL;
-       if ((err = monetdbe_prepare(mdbe, "SELECT y, x, 1 AS some_fixed_int 
FROM test WHERE x = ?;", &stmt)) != NULL)
-               error(err)
-
-       int x = 100;
-
-       if ((err = monetdbe_bind(stmt, &x, 0)) != NULL)
-               error(err)
-
-       if ((err = monetdbe_execute(stmt, &result, 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++) {
-                       monetdbe_column* rcol;
-                       if ((err = monetdbe_result_fetch(result, &rcol, c)) != 
NULL)
-                               error(err)
-                       switch (rcol->type) {
-                               case monetdbe_int8_t: {
-                                       monetdbe_column_int8_t * col = 
(monetdbe_column_int8_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
-                               case monetdbe_int16_t: {
-                                       monetdbe_column_int16_t * col = 
(monetdbe_column_int16_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
-                                       }
-                                       break;
-                               }
-                               case monetdbe_int32_t: {
-                                       monetdbe_column_int32_t * col = 
(monetdbe_column_int32_t *) rcol;
-                                       if (col->data[r] == col->null_value) {
-                                               printf("NULL");
-                                       } else {
-                                               printf("%d", col->data[r]);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to