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

Reply via email to