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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list