Changeset: 059a149692a7 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=059a149692a7 Added Files: tools/embedded/Tests/embedded-test.R Modified Files: sql/backends/monet5/sql_execute.c sql/server/sql_qc.c tools/embedded/embedded.c Branch: embedded Log Message:
Fixed crash on startup due to uninitialized memory diffs (65 lines): diff --git a/sql/backends/monet5/sql_execute.c b/sql/backends/monet5/sql_execute.c --- a/sql/backends/monet5/sql_execute.c +++ b/sql/backends/monet5/sql_execute.c @@ -85,6 +85,9 @@ SQLstatementIntern(Client c, str *expr, if (!o) throw(SQL, "SQLstatement", "Out of memory"); *o = *m; + // hide query cache, this causes crashes in SQLtrans() due to uninitialized memory otherwise + // suspect this to be due to the shallow value copy above + m->qc = NULL; /* create private allocator */ m->sa = NULL; @@ -98,6 +101,7 @@ SQLstatementIntern(Client c, str *expr, if (!output) { sql->output_format = OFMT_NONE; } + // and do it again m->qc = NULL; m->caching = 0; m->user_id = m->role_id = USER_MONETDB; diff --git a/sql/server/sql_qc.c b/sql/server/sql_qc.c --- a/sql/server/sql_qc.c +++ b/sql/server/sql_qc.c @@ -115,7 +115,6 @@ void qc_destroy(qc *cache) { cq *q, *n; - for (q = cache->q; q; q = n) { n = q->next; diff --git a/tools/embedded/Tests/embedded-test.R b/tools/embedded/Tests/embedded-test.R new file mode 100644 --- /dev/null +++ b/tools/embedded/Tests/embedded-test.R @@ -0,0 +1,17 @@ +library(MonetDB) +monetdb_embedded_startup("/tmp/mydb", T) + +monetdb_embedded_query("CREATE TABLE FOO(i INTEGER, j STRING)") +monetdb_embedded_query("INSERT INTO FOO VALUES(42, 'Hello'), (84, 'World')") +monetdb_embedded_query("SELECT * FROM FOO") +monetdb_embedded_query("SELECT * FROM TABLES LIMIT 10") + +monetdb_embedded_query("SELECT 42") +monetdb_embedded_query("SELECT 42 AS one, 43 AS two") +monetdb_embedded_query("SELECT 'Hello, World' AS val") + +monetdb_embedded_query("SELECT COUNT(*) AS foundfoo FROM TABLES WHERE name='foo'") +monetdb_embedded_query("ROLLBACK") +monetdb_embedded_query("SELECT COUNT(*) AS foundfoo FROM TABLES WHERE name='foo'") + +#install.packages("~/source/monetdb-embedded/tools/reverserapi/", repos=NULL) diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c --- a/tools/embedded/embedded.c +++ b/tools/embedded/embedded.c @@ -82,6 +82,7 @@ int monetdb_startup(char* dir, char sile if (silent) { mal_clients[0].fdout = THRdata[0]; } + // This dynamically looks up functions, because the library containing them is loaded at runtime. SQLstatementIntern_ptr = (SQLstatementIntern_ptr_tpe) lookup_function("lib_sql", "SQLstatementIntern"); res_table_destroy_ptr = (res_table_destroy_ptr_tpe) lookup_function("libstore", "res_table_destroy"); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list