From 2082e9eff3d72169a80e685df2396752d893139e Mon Sep 17 00:00:00 2001 From: cetec Date: Tue, 7 Mar 2017 17:40:07 -0300 Subject: [PATCH 1/2] Enable additional JVM parameters on JDBC() instantiation --- R/class.R | 5 +++-- test.sh => test-mysql.sh | 0 2 files changed, 3 insertions(+), 2 deletions(-) rename test.sh => test-mysql.sh (100%) diff --git a/R/class.R b/R/class.R index ff95885..597a2d6 100644 --- a/R/class.R +++ b/R/class.R @@ -2,10 +2,11 @@ setClass("JDBCDriver", representation("DBIDriver", identifier.quote="character", jdrv="jobjRef")) -JDBC <- function(driverClass='', classPath='', identifier.quote=NA) { +JDBC <- function(driverClass='', classPath='', identifier.quote=NA, jvmParams=NA) { ## expand all paths in the classPath classPath <- path.expand(unlist(strsplit(classPath, .Platform$path.sep))) - .jinit(classPath) ## this is benign in that it's equivalent to .jaddClassPath if a JVM is running + #.jinit(classPath) ## this is benign in that it's equivalent to .jaddClassPath if a JVM is running + .jinit(classpath=classPath, parameters=jvmParams) .jaddClassPath(system.file("java", "RJDBC.jar", package="RJDBC")) if (nchar(driverClass) && is.jnull(.jfindClass(as.character(driverClass)[1]))) stop("Cannot find JDBC driver class ",driverClass) diff --git a/test.sh b/test-mysql.sh similarity index 100% rename from test.sh rename to test-mysql.sh From 17495e0be3e5d434546f4ae8e8be4a6323a12e0c Mon Sep 17 00:00:00 2001 From: Rodrigo Hjort Date: Tue, 7 Mar 2017 17:42:06 -0300 Subject: [PATCH 2/2] Created test script for PostgreSQL databases --- test-mysql.sh | 0 test-pgsql.sh | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) mode change 100644 => 100755 test-mysql.sh create mode 100755 test-pgsql.sh diff --git a/test-mysql.sh b/test-mysql.sh old mode 100644 new mode 100755 diff --git a/test-pgsql.sh b/test-pgsql.sh new file mode 100755 index 0000000..d784607 --- /dev/null +++ b/test-pgsql.sh @@ -0,0 +1,70 @@ +#!/bin/sh + +## Poor man's test suite -- if you want to run it, +## you'll need PostgreSQL on the local machine and +## adjust the paths/names below as needed + +DRIVER="/opt/jdbc/postgresql-9.4-1204-jdbc4.jar" +DRVCLASS="org.postgresql.Driver" + +##---- cut here ---- + +if [ ! -e "$DRIVER" ]; then + echo "Cannot find JDBC driver for PostgreSQL, cannot perform tests" + exit 1 +fi + +echo "library(RJDBC) + +## load driver +drv<-JDBC('$DRVCLASS', '$DRIVER', '\"') + +## connect +c<-dbConnect(drv, 'jdbc:postgresql://localhost/postgres', 'postgres', 'postgres') + +## table operations write/read +data(iris) +dbWriteTable(c, 'iris', iris, overwrite=TRUE) +dbReadTable(c, 'iris') + +## simple send query +fetch(r <- dbSendQuery(c, 'SELECT count(*) FROM iris'), 1) + +## query info - some people need this +dbGetInfo(r) +dbHasCompleted(r) + +## prepared send query +fetch(r <- dbSendQuery(c, 'SELECT Species as Kind, count(Species) as Count FROM iris WHERE \"Sepal.Width\" > ? GROUP BY Species', 3), 1e3, block=1e3) +dbColumnInfo(r) + +## simple update +dbSendUpdate(c, 'DROP TABLE IF EXISTS foo') +dbSendUpdate(c, 'CREATE TABLE foo (alpha VARCHAR(32), beta INT)') + +## prepared update +dbSendUpdate(c, 'INSERT INTO foo VALUES (?, ?)', 'foo', 123) +dbSendUpdate(c, 'INSERT INTO foo VALUES (?, ?)', 'bar', 456) + +## vectorized update +dbSendUpdate(c, 'INSERT INTO foo VALUES (?, ?)', c('x','y','z'), 1:3) +fetch(dbSendQuery(c, 'SELECT * FROM foo'), -1) + +## list +dbGetTables(c) +dbListTables(c) + +## calls +#dbSendUpdate(c, 'CREATE PROCEDURE bar() BEGIN SELECT * FROM foo; END') +#fetch(dbSendQuery(c, '{call bar()}'), -1) +#dbSendUpdate(c, 'DROP PROCEDURE bar') +## parametrized +#dbSendUpdate(c, 'CREATE PROCEDURE foobar(IN x INT) BEGIN SELECT * FROM foo WHERE beta >= x; END') +#fetch(dbSendQuery(c, '{call foobar(222)}'), -1) +#dbSendUpdate(c, 'DROP PROCEDURE foobar') + +dbDisconnect(c) +" > $0.r + +cat $0.r | R --vanilla --quiet || echo '*** TEST FAILED ***' +