Changeset: 581590c25764 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=581590c25764
Modified Files:
        sql/server/sql_scan.c
        tools/embedded/Tests/lowlevel.R
        tools/embedded/rpackage/R/monetdb.R
Branch: embedded
Log Message:

fix for lowlevel R layer


diffs (160 lines):

diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -404,12 +404,13 @@ scanner_query_processed(struct scanner *
                s->rs->buf[s->rs->pos + s->yycur] = s->yybak;
                s->yybak = 0;
        }
-
-       s->rs->pos += s->yycur;
-       /* completely eat the query including white space after the ; */
-       while (s->rs->pos < s->rs->len &&
-              (cur = s->rs->buf[s->rs->pos], iswspace(cur))) {
-               s->rs->pos++;
+       if (s->rs) {
+               s->rs->pos += s->yycur;
+               /* completely eat the query including white space after the ; */
+               while (s->rs->pos < s->rs->len &&
+                          (cur = s->rs->buf[s->rs->pos], iswspace(cur))) {
+                       s->rs->pos++;
+               }
        }
        /*assert(s->rs->pos <= s->rs->len);*/
        s->yycur = 0;
diff --git a/tools/embedded/Tests/lowlevel.R b/tools/embedded/Tests/lowlevel.R
--- a/tools/embedded/Tests/lowlevel.R
+++ b/tools/embedded/Tests/lowlevel.R
@@ -3,13 +3,14 @@ if (basedir == "") {
        stop("Need TSTTRGDIR environment vars")
 }
 library(MonetDBLite, quietly=T, lib.loc=file.path(basedir, "rlibdir"))
-
 library(testthat)
 
 test_that("db starts up", {
        expect_error(monetdb_embedded_startup("/dev/null"))
-       expect_equal(monetdb_embedded_startup(), TRUE)
-       expect_warning(monetdb_embedded_startup())
+       dbdir <- tempdir()
+       expect_equal(monetdb_embedded_startup(dbdir), TRUE)
+       expect_warning(monetdb_embedded_startup("/tmp"))
+       expect_equal(monetdb_embedded_startup(dbdir), TRUE)
 })
 
 
@@ -31,6 +32,7 @@ test_that("db runs queries and returns r
        expect_is(res$tuples, "data.frame")
        expect_true(nrow(res$tuples) > 0)
        expect_true(ncol(res$tuples) > 0)
+       monetdb_embedded_disconnect(con)
 })
 
 test_that("commit", {
@@ -46,6 +48,7 @@ test_that("commit", {
        res <- monetdb_embedded_query(con, "SELECT * FROM tables WHERE 
name='foo'")
        expect_equal(nrow(res$tuples), 1)
        monetdb_embedded_query(con, "DROP TABLE foo")
+       monetdb_embedded_disconnect(con)
 })
 
 test_that("rollback works", {
@@ -60,6 +63,7 @@ test_that("rollback works", {
        expect_equal(nrow(res$tuples), 0)
        res <- monetdb_embedded_query(con, "SELECT i FROM foo")
        expect_equal(res$type, "!")
+       monetdb_embedded_disconnect(con)
 })
 
 test_that("rollback with errors", {
@@ -72,6 +76,7 @@ test_that("rollback with errors", {
        monetdb_embedded_query(con, "ROLLBACK")
        res <- monetdb_embedded_query(con, "SELECT 42")
        expect_equal(res$type, 1)
+       monetdb_embedded_disconnect(con)
 })
 
 test_that("pointless rollback/commit", {
@@ -81,6 +86,7 @@ test_that("pointless rollback/commit", {
        expect_equal(monetdb_embedded_query(con, "SELECT 1")$type, 1)
        monetdb_embedded_query(con, "ROLLBACK")
        expect_equal(monetdb_embedded_query(con, "SELECT 1")$type, 1)
+       monetdb_embedded_disconnect(con)
 })
 
 test_that("inserting data", {
@@ -93,12 +99,15 @@ test_that("inserting data", {
        expect_equal(res$tuples$i, 1:10)
        expect_equal(res$tuples$j, 21:30)
        monetdb_embedded_query(con, "DROP TABLE foo")
+       monetdb_embedded_disconnect(con)
 })
 
 test_that("the logger does not misbehave", {
+       con <- monetdb_embedded_connect()
        monetdb_embedded_query(con, "CREATE TABLE foo(i INTEGER, j INTEGER)")
        Sys.sleep(5)
        monetdb_embedded_query(con, "DROP TABLE foo")
+       monetdb_embedded_disconnect(con)
 })
 
 
diff --git a/tools/embedded/rpackage/R/monetdb.R 
b/tools/embedded/rpackage/R/monetdb.R
--- a/tools/embedded/rpackage/R/monetdb.R
+++ b/tools/embedded/rpackage/R/monetdb.R
@@ -1,10 +1,12 @@
 # we need this to find our MAL scripts and DLLs on Windows
-installdir <- ""
-is_started <- FALSE
-started_dir <- ""
+
+monetdb_embedded_env <- new.env(parent=emptyenv())
+monetdb_embedded_env$is_started <- FALSE
+monetdb_embedded_env$started_dir <- ""
+monetdb_embedded_env$install_dir <- ""
 
 .onLoad <- function(libname, pkgname){
-       installdir <<- file.path(libname, pkgname, "libs")
+       monetdb_embedded_env$install_dir <- file.path(libname, pkgname, "libs")
        library.dynam("libmonetdb5", pkgname, lib.loc=libname, now=T, local=F)
 }
 
@@ -22,22 +24,20 @@ monetdb_embedded_startup <- function(dir
        if (file.access(dir, mode=2) < 0) {
                stop("Cannot write to ", dir)
        }
-       if (!is_started) {
-               res <- .Call("monetdb_startup_R", installdir, dir, quiet, 
PACKAGE="libmonetdb5")
+       if (!monetdb_embedded_env$is_started) {
+               res <- .Call("monetdb_startup_R", 
monetdb_embedded_env$install_dir, dir, quiet, PACKAGE="libmonetdb5")
        } else {
-               if (!identical(dir, started_dir)) {
-                       stop("MonetDBLite cannot change database directories 
(already started in ", started_dir, ").")
+               if (dir != monetdb_embedded_env$started_dir) {
+                       warning("MonetDBLite cannot change database directories 
(already started in ", monetdb_embedded_env$started_dir, ").")
                }
                return(invisible(TRUE))
        }
        if (is.character(res)) {
                stop("Failed to initialize embedded MonetDB ", res)
        }
-       if (res == FALSE) {
-               warning("monetdb_embedded_startup() was already called. 
Ignoring this invocation.")
-       }
-       is_started <<- TRUE
-       started_dir <<- dir
+
+       monetdb_embedded_env$is_started <- TRUE
+       monetdb_embedded_env$started_dir <- dir
        invisible(TRUE)
 }
 
@@ -96,6 +96,9 @@ monetdb_embedded_append <- function(conn
 
 
 monetdb_embedded_connect <- function() {
+       if (!monetdb_embedded_env$is_started) {
+               stop("Call monetdb_embedded_startup() first")
+       }
        res <- .Call("monetdb_connect_R", PACKAGE="libmonetdb5")
        class(res) <- classname
        return(res)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to