Changeset: 3cea50b93bcd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3cea50b93bcd
Added Files:
tools/embedded/embeddedr.c
tools/embedded/embeddedr.h
Modified Files:
clients/R/MonetDB.R/NEWS
clients/R/MonetDB.R/R/dbi.R
clients/R/MonetDB.R/R/dplyr.R
clients/R/Tests/install.R
monetdb5/extras/rapi/rapi.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_client.h
monetdb5/mal/mal_private.h
sql/backends/monet5/sql_scenario.c
sql/server/sql_scan.c
tools/Makefile.ag
tools/embedded/Makefile.ag
tools/embedded/Tests/lowlevel.R
tools/embedded/embedded.c
tools/embedded/embedded.h
tools/embedded/rpackage/NAMESPACE
tools/embedded/rpackage/R/monetdb.R
tools/embedded/rpackage/configure
tools/embedded/rpackage/man/embedded.Rd
Branch: embedded-java
Log Message:
Merge with embedded branch
diffs (truncated from 1006 to 300 lines):
diff --git a/clients/R/MonetDB.R/NEWS b/clients/R/MonetDB.R/NEWS
--- a/clients/R/MonetDB.R/NEWS
+++ b/clients/R/MonetDB.R/NEWS
@@ -19,6 +19,7 @@ 1.0.0
- Fixed a bug when running in a non-UTF8 locale (Thanks, Marcis)
- Fixed a bug when dbWriteTable would not adhere to transactional semantics
(Thanks, Anthony)
- Added transactions to monetdb.read.csv so no empty tables are left over
(Thanks, Anthony)
+- Fixed != comparisions in dplyr (Thanks, Anthony)
0.9.7
- Fixed crash on Windows (Sorry, everyone)
diff --git a/clients/R/MonetDB.R/R/dbi.R b/clients/R/MonetDB.R/R/dbi.R
--- a/clients/R/MonetDB.R/R/dbi.R
+++ b/clients/R/MonetDB.R/R/dbi.R
@@ -93,6 +93,7 @@ setMethod("dbConnect", "MonetDBDriver",
}
MonetDBLite::monetdb_embedded_startup(embedded,
!getOption("monetdb.debug.embedded", FALSE))
connenv <- new.env(parent=emptyenv())
+ connenv$conn <- MonetDBLite::monetdb_embedded_connect()
connenv$open <- TRUE
return(new("MonetDBEmbeddedConnection", connenv=connenv))
}
@@ -167,6 +168,7 @@ setMethod("dbDisconnect", "MonetDBConnec
setMethod("dbDisconnect", "MonetDBEmbeddedConnection", def=function(conn, ...)
{
conn@connenv$open <- FALSE
+ MonetDBLite::monetdb_embedded_disconnect(conn@connenv$conn)
invisible(TRUE)
})
@@ -325,7 +327,7 @@ setMethod("dbSendQuery", signature(conn=
env <- NULL
if (getOption("monetdb.debug.query", F)) message("QQ: '", statement, "'")
- resp <- MonetDBLite::monetdb_embedded_query(statement, notreally)
+ resp <- MonetDBLite::monetdb_embedded_query(conn@connenv$conn, statement,
notreally)
env <- new.env(parent=emptyenv())
if (resp$type == Q_TABLE) {
@@ -446,7 +448,7 @@ setMethod("dbWriteTable", "MonetDBConnec
value[[c]] <- as.character(value[[c]])
}
- insres <- MonetDBLite::monetdb_embedded_append(qname, value)
+ insres <- MonetDBLite::monetdb_embedded_append(conn@connenv$conn, qname,
value)
if (!is.logical(insres)) {
stop("Failed to insert data: ", insres)
}
diff --git a/clients/R/MonetDB.R/R/dplyr.R b/clients/R/MonetDB.R/R/dplyr.R
--- a/clients/R/MonetDB.R/R/dplyr.R
+++ b/clients/R/MonetDB.R/R/dplyr.R
@@ -10,7 +10,9 @@ src_monetdb <- function(dbname, host = "
src_translate_env.src_monetdb <- function(x) {
dplyr::sql_variant(
- dplyr::base_scalar,
+ dplyr::sql_translator(.parent = dplyr::base_scalar,
+ `!=` = dplyr::sql_infix("<>")
+ ),
dplyr::sql_translator(.parent = dplyr::base_agg,
n = function() dplyr::sql("COUNT(*)"),
sd = dplyr::sql_prefix("STDDEV_SAMP"),
diff --git a/clients/R/Tests/install.R b/clients/R/Tests/install.R
--- a/clients/R/Tests/install.R
+++ b/clients/R/Tests/install.R
@@ -7,8 +7,8 @@ if (basedir == "" || srcdir == "") {
builddir <- file.path(basedir, "rbuilddir")
installdir <- file.path(basedir, "rlibdir")
dir.create(builddir)
+if (file.exists(installdir)) unlink(installdir, recursive=T)
dir.create(installdir)
-file.remove(file.path(builddir, "MonetDB.R"), recursive=T, showWarnings=F)
file.copy(from=file.path(srcdir, "..", "MonetDB.R"), to=builddir, recursive=T)
dd <- capture.output(suppressMessages( {
sink(file=file(tempfile(), open = "wt"), type = "message")
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -329,7 +329,6 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
size_t pos;
char* rcall;
size_t rcalllen;
- size_t ret_rows = 0;
int ret_cols = 0; /* int because pci->retc is int, too*/
str *args;
int evalErr;
@@ -490,7 +489,6 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
// ret should be a data frame with exactly as many columns as we need
from retc
ret_cols = LENGTH(retval);
- ret_rows = LENGTH(VECTOR_ELT(retval, 0));
if (ret_cols != pci->retc) {
msg = createException(MAL, "rapi.eval",
"Expected result of
%d columns, got %d", pci->retc, ret_cols);
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -254,7 +254,7 @@ MCinitClient(oid user, bstream *fin, str
if ((c = MCnewClient()) == NULL)
return NULL;
- return MCinitClientRecord(c, user, fin,fout);
+ return MCinitClientRecord(c, user, fin, fout);
}
/*
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -188,6 +188,7 @@ mal_export Client MCgetClient(int id);
mal_export Client MCinitClient(oid user, bstream *fin, stream *fout);
mal_export Client MCinitClientRecord(Client c, oid user, bstream *fin, stream
*fout);
mal_export int MCinitClientThread(Client c);
+mal_export Client MCforkClient(Client father);
mal_export void MCstopClients(Client c);
mal_export int MCshutdowninprogress(void);
mal_export int MCactiveClients(void);
@@ -195,5 +196,4 @@ mal_export void MCcloseClient(Client
mal_export str MCsuspendClient(int id);
mal_export str MCawakeClient(int id);
mal_export int MCpushClientInput(Client c, bstream *new_input, int
listing, char *prompt);
-
#endif /* _MAL_CLIENT_H_ */
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -16,8 +16,6 @@
/* FREECLIENT is defined in the same file as Client */
__hidden void MCexitClient(Client c)
__attribute__((__visibility__("hidden")));
-__hidden Client MCforkClient(Client c)
- __attribute__((__visibility__("hidden")));
__hidden int MCreadClient(Client c)
__attribute__((__visibility__("hidden")));
__hidden void MCpopClientInput(Client c)
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -449,7 +449,7 @@ SQLinitClient(Client c)
if (m->session->tr)
reset_functions(m->session->tr);
/* pass through credentials of the user if not console */
- if (!isAdministrator(c)) {
+ if (c->user != 0) {
schema = monet5_user_get_def_schema(m, c->user);
if (!schema) {
_DELETE(schema);
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/Makefile.ag b/tools/embedded/Makefile.ag
--- a/tools/embedded/Makefile.ag
+++ b/tools/embedded/Makefile.ag
@@ -34,7 +34,7 @@ INCLUDES = ../../monetdb5/mal \
-I"/Library/Frameworks/R.framework/Resources/include" \
$(pcre_CFLAGS)
-lib_embedded = {
+lib_embedded = {
SOURCES = embedded.c embedded.h
VERSION = 1
LIBS = ../../monetdb5/tools/libmonetdb5 \
@@ -42,3 +42,12 @@ lib_embedded = {
$(pcre_LIBS) $(PSAPILIB) \
$(SOCKET_LIBS) $(MALLOC_LIBS) $(DL_LIBS) $(PTHREAD_LIBS)
}
+
+lib_embeddedr = {
+ SOURCES = embeddedr.c embeddedr.h
+ VERSION = 1
+ LIBS = libembedded \
+ ../../gdk/libbat \
+ $(pcre_LIBS) $(PSAPILIB) \
+ $(SOCKET_LIBS) $(MALLOC_LIBS) $(DL_LIBS) $(PTHREAD_LIBS)
+}
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,96 +3,111 @@ 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)
+})
+
+
+test_that("one can connect", {
+ con <- monetdb_embedded_connect()
+ expect_that(con, is_a("monetdb_embedded_connection"))
+ monetdb_embedded_disconnect(con)
+ monetdb_embedded_disconnect(con)
+ expect_error(monetdb_embedded_disconnect(NULL))
})
test_that("db runs queries and returns results", {
- res <- monetdb_embedded_query("SELECT 42")
+ con <- monetdb_embedded_connect()
+ res <- monetdb_embedded_query(con, "SELECT 42")
expect_equal(res$type, 1)
expect_equal(res$tuples$single_value, 42)
- res <- monetdb_embedded_query("SELECT * FROM tables")
+ res <- monetdb_embedded_query(con, "SELECT * FROM tables")
expect_equal(res$type, 1)
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", {
- monetdb_embedded_query("START TRANSACTION")
- monetdb_embedded_query("CREATE TABLE foo (i integer)")
- monetdb_embedded_query("INSERT INTO foo VALUES (42)")
- res <- monetdb_embedded_query("SELECT i FROM foo")
+ con <- monetdb_embedded_connect()
+ monetdb_embedded_query(con, "START TRANSACTION")
+ monetdb_embedded_query(con, "CREATE TABLE foo (i integer)")
+ monetdb_embedded_query(con, "INSERT INTO foo VALUES (42)")
+ res <- monetdb_embedded_query(con, "SELECT i FROM foo")
expect_equal(res$tuples$i, 42)
- monetdb_embedded_query("COMMIT")
- res <- monetdb_embedded_query("SELECT i FROM foo")
+ monetdb_embedded_query(con, "COMMIT")
+ res <- monetdb_embedded_query(con, "SELECT i FROM foo")
expect_equal(res$tuples$i, 42)
- res <- monetdb_embedded_query("SELECT * FROM tables WHERE name='foo'")
+ res <- monetdb_embedded_query(con, "SELECT * FROM tables WHERE
name='foo'")
expect_equal(nrow(res$tuples), 1)
- monetdb_embedded_query("DROP TABLE foo")
+ monetdb_embedded_query(con, "DROP TABLE foo")
+ monetdb_embedded_disconnect(con)
})
test_that("rollback works", {
- monetdb_embedded_query("START TRANSACTION")
- monetdb_embedded_query("CREATE TABLE foo (i integer)")
- monetdb_embedded_query("INSERT INTO foo VALUES (42)")
- res <- monetdb_embedded_query("SELECT i FROM foo")
+ con <- monetdb_embedded_connect()
+ monetdb_embedded_query(con, "START TRANSACTION")
+ monetdb_embedded_query(con, "CREATE TABLE foo (i integer)")
+ monetdb_embedded_query(con, "INSERT INTO foo VALUES (42)")
+ res <- monetdb_embedded_query(con, "SELECT i FROM foo")
expect_equal(res$tuples$i, 42)
- monetdb_embedded_query("ROLLBACK")
- res <- monetdb_embedded_query("SELECT * FROM tables WHERE name='foo'")
+ monetdb_embedded_query(con, "ROLLBACK")
+ res <- monetdb_embedded_query(con, "SELECT * FROM tables WHERE
name='foo'")
expect_equal(nrow(res$tuples), 0)
- res <- monetdb_embedded_query("SELECT i FROM foo")
+ res <- monetdb_embedded_query(con, "SELECT i FROM foo")
expect_equal(res$type, "!")
+ monetdb_embedded_disconnect(con)
})
test_that("rollback with errors", {
- monetdb_embedded_query("START TRANSACTION")
- res <- monetdb_embedded_query("BULLSHIT")
+ con <- monetdb_embedded_connect()
+ monetdb_embedded_query(con,"START TRANSACTION")
+ res <- monetdb_embedded_query(con, "BULLSHIT")
expect_equal(res$type, "!")
- res <- monetdb_embedded_query("SELECT 1")
+ res <- monetdb_embedded_query(con, "SELECT 1")
expect_equal(res$type, "!")
- monetdb_embedded_query("ROLLBACK")
- res <- monetdb_embedded_query("SELECT 42")
+ monetdb_embedded_query(con, "ROLLBACK")
+ res <- monetdb_embedded_query(con, "SELECT 42")
expect_equal(res$type, 1)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list