Changeset: 6d92ae5e37f2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6d92ae5e37f2 Added Files: clients/R/MonetDB.R/man/MonetDBLite.Rd sql/test/BugTracker-2015/Tests/dump-DELETE.Bug-3850.sql sql/test/BugTracker-2015/Tests/dump-DELETE.Bug-3850.stable.err sql/test/BugTracker-2015/Tests/dump-DELETE.Bug-3850.stable.out sql/test/BugTracker-2015/Tests/hugeint-wrong-value.Bug-3849.sql sql/test/BugTracker-2015/Tests/hugeint-wrong-value.Bug-3849.stable.err sql/test/BugTracker-2015/Tests/hugeint-wrong-value.Bug-3849.stable.out Removed Files: monetdb5/mal/mal_properties.c monetdb5/mal/mal_properties.h Modified Files: MonetDB.spec clients/R/MonetDB.R/DESCRIPTION clients/R/MonetDB.R/NAMESPACE clients/R/MonetDB.R/NEWS clients/R/MonetDB.R/R/dbi.R clients/R/MonetDB.R/R/dplyr.R clients/R/MonetDB.R/R/mapi.R clients/R/MonetDB.R/man/MonetDB.R.Rd clients/R/MonetDB.R/man/monetdb.read.csv.Rd clients/R/Tests/dbi.stable.out clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out clients/Tests/malcheck.stable.err clients/mapiclient/dump.c clients/ruby/Tests/All clients/ruby/Tests/rubytest.rb clients/ruby/Tests/rubytest.stable.err clients/ruby/Tests/rubytest.stable.out clients/ruby/doc/readme.txt gdk/gdk_atoms.c geom/monetdb5/geom.mal monetdb5/ChangeLog monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out monetdb5/mal/Makefile.ag monetdb5/mal/Tests/All monetdb5/mal/Tests/tst3050.mal monetdb5/mal/mal.h monetdb5/mal/mal_debugger.c monetdb5/mal/mal_errors.h monetdb5/mal/mal_factory.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_listing.c monetdb5/mal/mal_listing.h monetdb5/mal/mal_parser.c monetdb5/mal/mal_session.c monetdb5/modules/atoms/mtime.mal monetdb5/modules/atoms/streams.mal monetdb5/modules/kernel/alarm.mal monetdb5/modules/kernel/mmath.mal monetdb5/modules/mal/batExtensions.c monetdb5/modules/mal/inspect.c monetdb5/modules/mal/manifold.c monetdb5/optimizer/Tests/All monetdb5/optimizer/Tests/dataflow3.mal monetdb5/optimizer/Tests/dataflow3.stable.out monetdb5/optimizer/Tests/inline00.mal monetdb5/optimizer/Tests/inline00.stable.out monetdb5/optimizer/Tests/inline01.mal monetdb5/optimizer/Tests/inline01.stable.out monetdb5/optimizer/Tests/inline02.mal monetdb5/optimizer/Tests/inline02.stable.out monetdb5/optimizer/Tests/inline03.mal monetdb5/optimizer/Tests/inline03.stable.out monetdb5/optimizer/Tests/inline04.mal monetdb5/optimizer/Tests/inline04.stable.out monetdb5/optimizer/Tests/inline05.mal monetdb5/optimizer/Tests/inline05.stable.out monetdb5/optimizer/Tests/inline06.mal monetdb5/optimizer/Tests/inline06.stable.out monetdb5/optimizer/Tests/inline07.mal monetdb5/optimizer/Tests/inline07.stable.out monetdb5/optimizer/Tests/inline08.mal monetdb5/optimizer/Tests/inline08.stable.out monetdb5/optimizer/Tests/inline09.mal monetdb5/optimizer/Tests/inline09.stable.out monetdb5/optimizer/Tests/inline10.mal monetdb5/optimizer/Tests/inline10.stable.out monetdb5/optimizer/Tests/inline11.mal monetdb5/optimizer/Tests/inlineCst.mal monetdb5/optimizer/Tests/inlineCst.stable.out monetdb5/optimizer/Tests/inlineFunction.mal monetdb5/optimizer/Tests/inlineFunction.stable.out monetdb5/optimizer/Tests/inlineFunction1.mal monetdb5/optimizer/Tests/inlineFunction1.stable.out monetdb5/optimizer/Tests/inlineFunction2.mal monetdb5/optimizer/Tests/inlineFunction2.stable.out monetdb5/optimizer/Tests/inlineFunction3.mal monetdb5/optimizer/Tests/inlineFunction3.stable.out monetdb5/optimizer/Tests/inlineFunction4.mal monetdb5/optimizer/Tests/inlineFunction4.stable.out monetdb5/optimizer/Tests/inlineIfthen.mal monetdb5/optimizer/Tests/inlineIfthen.stable.out monetdb5/optimizer/opt_costModel.c monetdb5/optimizer/opt_costModel.h monetdb5/optimizer/opt_dataflow.c monetdb5/optimizer/opt_deadcode.c monetdb5/optimizer/opt_evaluate.c monetdb5/optimizer/opt_garbageCollector.c monetdb5/optimizer/opt_generator.c monetdb5/optimizer/opt_inline.c monetdb5/optimizer/opt_joinpath.c monetdb5/optimizer/opt_macro.c monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_prelude.c monetdb5/optimizer/opt_prelude.h monetdb5/optimizer/opt_remap.c monetdb5/optimizer/opt_support.c monetdb5/optimizer/opt_support.h monetdb5/optimizer/opt_wrapper.c monetdb5/scheduler/Tests/sched00.mal monetdb5/scheduler/Tests/sched00.stable.out sql/backends/monet5/UDF/Tests/udf-fuse.stable.out sql/backends/monet5/UDF/Tests/udf-reverse.stable.out sql/backends/monet5/sql.c sql/backends/monet5/sql.mal sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_inspect.mal sql/benchmarks/ssbm/Tests/01-explain.stable.out sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/02-explain.stable.out sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/03-explain.stable.out sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/04-explain.stable.out sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/05-explain.stable.out sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/06-explain.stable.out sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/07-explain.stable.out sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/08-explain.stable.out sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/09-explain.stable.out sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/10-explain.stable.out sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/11-explain.stable.out sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/12-explain.stable.out sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/13-explain.stable.out sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128 sql/benchmarks/tpch/Tests/01-explain.stable.out sql/benchmarks/tpch/Tests/01-explain.stable.out.32bit sql/benchmarks/tpch/Tests/01-explain.stable.out.int128 sql/benchmarks/tpch/Tests/02-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out.int128 sql/benchmarks/tpch/Tests/04-explain.stable.out sql/benchmarks/tpch/Tests/04-explain.stable.out.32bit sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit sql/benchmarks/tpch/Tests/05-explain.stable.out.int128 sql/benchmarks/tpch/Tests/06-explain.stable.out sql/benchmarks/tpch/Tests/06-explain.stable.out.int128 sql/benchmarks/tpch/Tests/07-explain.stable.out sql/benchmarks/tpch/Tests/07-explain.stable.out.int128 sql/benchmarks/tpch/Tests/08-explain.stable.out.int128 sql/benchmarks/tpch/Tests/09-explain.stable.out sql/benchmarks/tpch/Tests/09-explain.stable.out.int128 sql/benchmarks/tpch/Tests/10-explain.stable.out sql/benchmarks/tpch/Tests/10-explain.stable.out.int128 sql/benchmarks/tpch/Tests/11-explain.stable.out sql/benchmarks/tpch/Tests/11-explain.stable.out.int128 sql/benchmarks/tpch/Tests/12-explain.stable.out sql/benchmarks/tpch/Tests/12-explain.stable.out.int128 sql/benchmarks/tpch/Tests/13-explain.stable.out sql/benchmarks/tpch/Tests/13-explain.stable.out.32bit sql/benchmarks/tpch/Tests/14-explain.stable.out.int128 sql/benchmarks/tpch/Tests/15-explain.stable.out sql/benchmarks/tpch/Tests/15-explain.stable.out.int128 sql/benchmarks/tpch/Tests/16-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out.int128 sql/benchmarks/tpch/Tests/18-explain.stable.out sql/benchmarks/tpch/Tests/18-explain.stable.out.int128 sql/benchmarks/tpch/Tests/19-explain.stable.out sql/benchmarks/tpch/Tests/19-explain.stable.out.int128 sql/benchmarks/tpch/Tests/20-explain.stable.out sql/benchmarks/tpch/Tests/20-explain.stable.out.32bit sql/benchmarks/tpch/Tests/20-explain.stable.out.int128 sql/benchmarks/tpch/Tests/21-explain.stable.out sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit sql/benchmarks/tpch/Tests/22-explain.stable.out sql/benchmarks/tpch/Tests/22-explain.stable.out.32bit sql/benchmarks/tpch/Tests/22-explain.stable.out.int128 sql/server/rel_optimizer.c sql/server/rel_select.c sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out sql/test/BugTracker-2015/Tests/All sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out.single sql/test/BugTracker/Tests/explain.SF-1739353.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/mapi/Tests/sql_int128.stable.out sql/test/mergetables/Tests/mergequery.stable.out sql/test/pg_regress/Tests/strings.stable.err.int128 sql/test/remote/Tests/partition_elim.stable.out sql/test/testdb-upgrade-hge/Tests/dump.stable.out sql/test/testdb-upgrade/Tests/dump.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 testing/Mfilter.py testing/Mtest.py.in tools/embedded/Tests/dbi.R Branch: embedded-java Log Message:
Merge with embedded branch diffs (truncated from 15903 to 300 lines): diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -403,38 +403,12 @@ program. %files -n rubygem-monetdb-sql %defattr(-,root,root) -%docdir %{gem_dir}/doc/ruby-monetdb-sql-0.1 -%{gem_dir}/doc/ruby-monetdb-sql-0.1/* -%{gem_dir}/cache/ruby-monetdb-sql-0.1.gem -# %dir %{gem_dir}/gems/ruby-monetdb-sql-0.1 -%{gem_dir}/gems/ruby-monetdb-sql-0.1 -%{gem_dir}/specifications/ruby-monetdb-sql-0.1.gemspec - -%package -n rubygem-activerecord-monetdb-adapter -Summary: MonetDB ruby interface -Group: Applications/Databases -Requires: ruby(release) -Requires: rubygem-activerecord -Requires: rubygem-monetdb-sql -BuildArch: noarch - -%description -n rubygem-activerecord-monetdb-adapter -MonetDB is a database management system that is developed from a -main-memory perspective with use of a fully decomposed storage model, -automatic index management, extensibility of data types and search -accelerators. It also has an SQL frontend. - -This package contains the activerecord adapter for MonetDB. - -%files -n rubygem-activerecord-monetdb-adapter -%defattr(-,root,root) -%docdir %{gem_dir}/doc/activerecord-monetdb-adapter-0.1 -%{gem_dir}/doc/activerecord-monetdb-adapter-0.1/* -%{gem_dir}/cache/activerecord-monetdb-adapter-0.1.gem -# %dir %{gem_dir}/gems/activerecord-monetdb-adapter-0.1 -%{gem_dir}/gems/activerecord-monetdb-adapter-0.1 -%{gem_dir}/specifications/activerecord-monetdb-adapter-0.1.gemspec -%endif +%docdir %{gem_dir}/doc/ruby-monetdb-sql-0.2 +%{gem_dir}/doc/ruby-monetdb-sql-0.2/* +%{gem_dir}/cache/ruby-monetdb-sql-0.2.gem +# %dir %{gem_dir}/gems/ruby-monetdb-sql-0.2 +%{gem_dir}/gems/ruby-monetdb-sql-0.2 +%{gem_dir}/specifications/ruby-monetdb-sql-0.2.gemspec %package client-tests Summary: MonetDB Client tests package diff --git a/clients/R/MonetDB.R/DESCRIPTION b/clients/R/MonetDB.R/DESCRIPTION --- a/clients/R/MonetDB.R/DESCRIPTION +++ b/clients/R/MonetDB.R/DESCRIPTION @@ -2,9 +2,9 @@ Package: MonetDB.R Version: 1.0.0 Title: Connect MonetDB to R Authors@R: c(person("Hannes Muehleisen", role = c("aut", "cre"),email = "han...@cwi.nl"), - person("Thomas Lumley", role = "ctb"), - person("Anthony Damico", role = "ctb")) -Author: Hannes Muehleisen [aut, cre], Thomas Lumley [ctb], Anthony Damico [ctb] + person("Anthony Damico", role = "aut"), + person("Thomas Lumley", role = "ctb")) +Author: Hannes Muehleisen [aut, cre], Anthony Damico [aut], Thomas Lumley [ctb] Maintainer: Hannes Muehleisen <han...@cwi.nl> Depends: DBI (>= 0.3.1) Imports: digest (>= 0.6.4), methods, codetools diff --git a/clients/R/MonetDB.R/NAMESPACE b/clients/R/MonetDB.R/NAMESPACE --- a/clients/R/MonetDB.R/NAMESPACE +++ b/clients/R/MonetDB.R/NAMESPACE @@ -2,6 +2,7 @@ import(DBI,digest,methods,codetools,util # export only driver constructor, everything else is DBI stuff.. export(MonetDB,MonetR,MonetDBR,MonetDB.R) +export(MonetDBLite,monetdblite,RMonetDBLite,rmonetdblite) export(monet.read.csv,monetdb.read.csv) # this one is not in the DBI exportMethods(dbSendUpdate,dbSendUpdateAsync,dbTransaction,mdbapply) 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 @@ -8,19 +8,22 @@ 1.0.0 - Fix for case when query only returns a prompt (CALL ..., Thanks, Roman) - Fix for empty result set on dbGetQuery(), no longer returning NULL (Thanks, Fabian) - Fix for dbConnect(), it ignored the url parameter somehow, which broke some sqlsurvey -- Added col.names argument to monet.read.csv() - Added lower.case.names argument to monet.read.csv() in case users want to avoid quoting (a bit) - Fix for dbConnect() that should be more robust to invalid connections - Cleaned up quoting behavior in dbListTables(), dbRemoveTable() etc. -- Initial support for running MonetDB in embedded mode (MonetDBLite) - Now re-establishing connection if interrupt (CMD-C or ESC) occurs - Fixed a bug in monetdb.read.csv for multiple CSV files without headers +- Added transactions to monetdb.read.csv so no empty tables are left over +- Removed nrows parameter to monetdb.read.csv +- Added col.names argument to monetdb.read.csv - dplyr src_monetdb now has a con parameter to pass an existing DBI connection - Fixed a bug when running in a non-UTF8 locale (Thanks, Marcis) - Fixed a bug when dbWriteTable would not adhere to transactional semantics -- Added transactions to monetdb.read.csv so no empty tables are left over - Fixed != comparisions in dplyr (Thanks, David) - New "mclient" function to get a shell-like DB interface +- Support for running MonetDB in embedded mode (MonetDBLite) +- Support for monetdblite:/some/path URLs in dbConnect() +- Fixed an off-by-one error in type conversion (Thanks, Kirill) 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 @@ -6,19 +6,16 @@ setOldClass(c("sockconn", "connection", ### MonetDBDriver setClass("MonetDBDriver", representation("DBIDriver")) +setClass("MonetDBEmbeddedDriver", representation("MonetDBDriver")) # allow instantiation of this driver with MonetDB to allow existing programs to work -MonetR <- MonetDB <- MonetDBR <- MonetDB.R <- function() { - new("MonetDBDriver") -} +MonetR <- MonetDB <- MonetDBR <- MonetDB.R <- function() new("MonetDBDriver") -setMethod("dbIsValid", "MonetDBDriver", def=function(dbObj, ...) { - return(invisible(TRUE)) # driver object cannot be invalid -}) +MonetDBLite <- monetdblite <- RMonetDBLite <- rmonetdblite <- function() new("MonetDBEmbeddedDriver") -setMethod("dbUnloadDriver", "MonetDBDriver", def=function(drv, ...) { - return(invisible(TRUE)) # there is nothing to really unload here... -}) +setMethod("dbIsValid", "MonetDBDriver", def=function(dbObj, ...) invisible(TRUE)) + +setMethod("dbUnloadDriver", "MonetDBDriver", def=function(drv, ...) invisible(TRUE)) setMethod("dbGetInfo", "MonetDBDriver", def=function(dbObj, ...) list(name="MonetDBDriver", @@ -46,7 +43,7 @@ setMethod("dbConnect", "MonetDBDriver", password="monetdb", host="localhost", port=50000L, timeout=86400L, wait=FALSE, language="sql", embedded=FALSE, ..., url="") { - if (substring(url, 1, 10) == "monetdb://") { + if (substring(url, 1, 10) == "monetdb://" || substring(url, 1, 12) == "monetdblite:") { dbname <- url } timeout <- as.integer(timeout) @@ -81,12 +78,21 @@ setMethod("dbConnect", "MonetDBDriver", } # this is important, otherwise we'll trip an assertion port <- as.integer(port) - # validate port number if (length(port) != 1 || port < 1 || port > 65535) { stop("Illegal port number ",port) } + # support monetdblite:/db/dir urls to fool sqlsurvey + if (substring(dbname, 1, 12) == "monetdblite:") { + embedded <- substring(dbname, 13, nchar(dbname)) + } + + if (inherits(drv, "MonetDBEmbeddedDriver")) { + if (missing(dbname)) embedded <- tempdir() + else embedded <- dbname + } + if (embedded != FALSE) { if (!require("MonetDBLite", character.only=T)) { stop("MonetDBLite package required for embedded mode") @@ -95,7 +101,9 @@ setMethod("dbConnect", "MonetDBDriver", connenv <- new.env(parent=emptyenv()) connenv$conn <- MonetDBLite::monetdb_embedded_connect() connenv$open <- TRUE - return(new("MonetDBEmbeddedConnection", connenv=connenv)) + conn <- new("MonetDBEmbeddedConnection", connenv=connenv) + attr(conn, "dbPreExists") <- TRUE + return(conn) } if (getOption("monetdb.debug.mapi", F)) message("II: Connecting to MonetDB on host ", host, " at " @@ -138,6 +146,7 @@ setMethod("dbConnect", "MonetDBDriver", message("MonetDB: Switching to single-threaded query execution.") dbSendQuery(conn, "set optimizer='sequential_pipe'") } + attr(conn, "dbPreExists") <- TRUE conn }, valueClass="MonetDBConnection") @@ -352,7 +361,7 @@ setMethod("dbSendQuery", signature(conn= env$conn <- conn env$query <- statement env$info <- resp - + env$info$rows <- 0 } if (resp$type == MSG_MESSAGE) { env$success = FALSE @@ -383,13 +392,31 @@ setMethod("dbSendQuery", signature(conn= }) +reserved_monetdb_keywords <- c(.SQL92Keywords, +"ADMIN", "AFTER", "AGGREGATE", "ALWAYS", "ASYMMETRIC", "ATOMIC", +"AUTO_INCREMENT", "BEFORE", "BEST", "BIGINT", "BIGSERIAL", "BINARY", +"BLOB", "CALL", "CHAIN", "CLOB", "COMMITTED", "COPY", "CROSS", +"CURRENT_ROLE", "CURRENT_TIME", "CURRENT_USER", "DELIMITERS", +"DO", "EACH", "EFFORT", "ELSEIF", "ENCRYPTED", "EXCLUDE", "FOLLOWING", +"FUNCTION", "GENERATED", "HUGEINT", "IF", "ILIKE", "LIMIT", "LOCALTIME", +"LOCALTIMESTAMP", "LOCKED", "MERGE", "NATURAL", "NEW", "NOCYCLE", +"NOMAXVALUE", "NOMINVALUE", "OFFSET", "OLD", "ON", "OTHERS", +"OVER", "PARTITION", "PRECEDING", "RANGE", "RECORDS", "REFERENCING", +"REMOTE", "RENAME", "REPEATABLE", "REPLICA", "RESTART", "RETURN", +"RETURNS", "SAMPLE", "SAVEPOINT", "SEQUENCE", "SERIAL", "SERIALIZABLE", +"SESSION_USER", "SIMPLE", "SPLIT_PART", "STDIN", "STDOUT", "STREAM", +"SYMMETRIC", "TIES", "TINYINT", "TRIGGER", "UNBOUNDED", "UNCOMMITTED", +"UNENCRYPTED", "WHILE", "XMLAGG", "XMLATTRIBUTES", "XMLCOMMENT", +"XMLCONCAT", "XMLDOCUMENT", "XMLELEMENT", "XMLFOREST", "XMLNAMESPACES", +"XMLPARSE", "XMLPI", "XMLQUERY", "XMLSCHEMA", "XMLTEXT", "XMLVALIDATE") + # quoting quoteIfNeeded <- function(conn, x, warn=T, ...) { chars <- !grepl("^[a-z_][a-z0-9_]*$", x, perl=T) & !grepl("^\"[^\"]*\"$", x, perl=T) if (any(chars) && warn) { message("Identifier(s) ", paste("\"", x[chars],"\"", collapse=", ", sep=""), " contain uppercase or reserved SQL characters and need(s) to be quoted in queries.") } - reserved <- toupper(x) %in% .SQL92Keywords + reserved <- toupper(x) %in% reserved_monetdb_keywords if (any(reserved) && warn) { message("Identifier(s) ", paste("\"", x[reserved],"\"", collapse=", ", sep=""), " are reserved SQL keywords and need(s) to be quoted in queries.") } @@ -575,7 +602,7 @@ setClass("MonetDBEmbeddedResult", repres .CT_RAW <- 5L # type mapping matrix -monetTypes <- rep(c("integer", "numeric", "character", "character", "logical", "raw"), c(6, 5, 4, 6, 1, 1)) +monetTypes <- rep(c("integer", "numeric", "character", "character", "logical", "raw"), c(5, 6, 4, 6, 1, 1)) names(monetTypes) <- c(c("WRD", "TINYINT", "SMALLINT", "INT", "MONTH_INTERVAL"), # month_interval is the diff between date cols, int c("BIGINT", "HUGEINT", "REAL", "DOUBLE", "DECIMAL", "SEC_INTERVAL"), # sec_interval is the difference between timestamps, float c("CHAR", "VARCHAR", "CLOB", "STR"), @@ -606,9 +633,13 @@ setMethod("dbFetch", signature(res="Mone if (!dbIsValid(res)) { stop("Cannot fetch results from closed response.") } - + # okay, so we arrive here with the tuples from the first result in res@env$data as a list info <- res@env$info + # apparently, one should be able to fetch results sets from ddl ops + if (info$type == Q_UPDATE) { + return(data.frame()) + } if (res@env$delivered < 0) { res@env$delivered <- 0 } @@ -788,18 +819,14 @@ setMethod("dbGetInfo", "MonetDBResult", }, valueClass="list") # adapted from RMonetDB, no java-specific things in here... -monet.read.csv <- monetdb.read.csv <- function(conn, files, tablename, nrows=NA, header=TRUE, - locked=FALSE, na.strings="", nrow.check=500, +monet.read.csv <- monetdb.read.csv <- function(conn, files, tablename, header=TRUE, + locked=FALSE, best.effort=FALSE, na.strings="", nrow.check=500, delim=",", newline="\\n", quote="\"", create=TRUE, col.names=NULL, lower.case.names=FALSE, ...){ if (length(na.strings)>1) stop("na.strings must be of length 1") headers <- lapply(files, utils::read.csv, sep=delim, na.strings=na.strings, quote=quote, nrows=nrow.check, header=header, ...) - if (!missing(nrows)) { - warning("monetdb.read.csv(): nrows parameter is not neccessary any more and deprecated.") - } - if (length(files)>1){ nn <- sapply(headers, ncol) if (!all(nn==nn[1])) stop("Files have different numbers of columns") @@ -833,7 +860,7 @@ monet.read.csv <- monetdb.read.csv <- fu thefile <- normalizePath(files[i]) dbSendUpdate(conn, paste("COPY", if(header) "OFFSET 2", "INTO", tablename, "FROM", paste("'", thefile, "'", sep=""), delimspec, "NULL as", paste("'", - na.strings[1], "'", sep=""), if(locked) "LOCKED")) + na.strings[1], "'", sep=""), if(locked) "LOCKED", if(best.effort) "BEST EFFORT")) } dbGetQuery(conn, paste("SELECT COUNT(*) FROM", tablename))[[1]] dbCommit(conn) 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 @@ -1,4 +1,4 @@ -src_monetdb <- function(dbname, host = "localhost", port = 50000L, user = "monetdb", +src_monetdb <- function(dbname="demo", host = "localhost", port = 50000L, user = "monetdb", password = "monetdb", con = FALSE, ...) { if (!inherits(con, "MonetDBConnection") || !dbIsValid(con)) { con <- dbConnect(MonetDB.R(), dbname = dbname , host = host, port = port, diff --git a/clients/R/MonetDB.R/R/mapi.R b/clients/R/MonetDB.R/R/mapi.R --- a/clients/R/MonetDB.R/R/mapi.R +++ b/clients/R/MonetDB.R/R/mapi.R @@ -183,7 +183,8 @@ REPLY_SIZE <- 100 # Apparently, -1 me if (typeKey == Q_TABLE || typeKey == Q_PREPARE) { header <- .mapiParseHeader(lines[1]) if (getOption("monetdb.debug.query", F)) message("QQ: Query result for query ", header$id, - " with ", header$rows, " rows and ", header$cols, " cols, ", header$index, " rows.") + " with ", .mapiLongInt(header$rows), " rows and ", + header$cols, " cols, ", header$index, " rows.") _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list