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