Changeset: 22f55e05b8b4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=22f55e05b8b4
Added Files:
clients/Tests/MAL-signatures_nogeom.malC.src
clients/Tests/MAL-signatures_nogeom.stable.err
clients/Tests/MAL-signatures_nogeom.stable.out
clients/Tests/SQL-dump_nogeom.sql.src
clients/Tests/SQL-dump_nogeom.stable.err
clients/Tests/SQL-dump_nogeom.stable.out
sql/benchmarks/tpch/fileleak/Tests/delete_all_nogeom.SQL.py.src
sql/benchmarks/tpch/fileleak/Tests/delete_all_nogeom.stable.err
sql/benchmarks/tpch/fileleak/Tests/delete_all_nogeom.stable.out
sql/benchmarks/tpch/fileleak/Tests/leaks_nogeom.SQL.py.src
sql/benchmarks/tpch/fileleak/Tests/leaks_nogeom.stable.err
sql/benchmarks/tpch/fileleak/Tests/leaks_nogeom.stable.out
Modified Files:
.hgtags
MonetDB.spec
NT/installer32/MonetDB-ODBC-Installer.vdproj
NT/installer32/MonetDB5-Geom-Module.vdproj
NT/installer32/MonetDB5-SQL-Installer.vdproj
NT/installer64/MonetDB-ODBC-Installer.vdproj
NT/installer64/MonetDB5-Geom-Module.vdproj
NT/installer64/MonetDB5-SQL-Installer.vdproj
NT/monetdb_config.h.in
NT/rules.msc
clients/R/MonetDB.R/DESCRIPTION
clients/R/MonetDB.R/R/monetdb.R
clients/R/MonetDB.R/src/mapi.c
clients/Tests/All
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.Windows
clients/Tests/exports.stable.out
clients/mapilib/mapi.rc
clients/odbc/driver/driver.rc
clients/odbc/winsetup/setup.rc
clients/python2/setup.py
clients/python3/setup.py
common/stream/stream.c
configure.ag
debian/changelog
gdk/gdk_select.c
gdk/libbat.rc
libversions
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_interpreter.h
monetdb5/modules/mal/language.mal
monetdb5/modules/mal/mat.c
monetdb5/modules/mal/tablet.c
monetdb5/optimizer/opt_dataflow.c
monetdb5/tools/libmonetdb5.rc
sql/backends/monet5/sql.mx
sql/benchmarks/tpch/fileleak/Tests/All
sql/server/rel_select.c
sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out
sql/test/Tests/systemfunctions_nogeom.stable.out
sql/test/leaks/Tests/check1_nogeom.stable.out
sql/test/leaks/Tests/check2_nogeom.stable.out
sql/test/leaks/Tests/check3_nogeom.stable.out
sql/test/leaks/Tests/check4_nogeom.stable.out
sql/test/leaks/Tests/check5_nogeom.stable.out
sql/test/leaks/Tests/temp2_nogeom.stable.out
vertoo.data
Branch: int128
Log Message:
Merge with changeset 54740f826e8d, i.e., default after merge with Feb2013-SP4
diffs (truncated from 52552 to 300 lines):
diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -535,3 +535,6 @@ 64caf95db680ce67235697114693cbcf4cc859eb
3d1afd974f11634c77ded6c090cdbd52be6ab1c1 int128_root
0ee7e3f578f7ed364682cae20edac923c27dfd86 Feb2013_13
89679ea95aac8f548c787cd74c35212137f5b56f Feb2013_SP4_release
+e4239a86f8032fd67169ddf4bcea6f37f32a0f8b Feb2013_15
+89679ea95aac8f548c787cd74c35212137f5b56f Feb2013_SP4_release
+11955d7a07f23672650e41dd0c9fbc9e0fc4c1af Feb2013_SP4_release
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -758,6 +758,9 @@ rm -f $RPM_BUILD_ROOT%{_bindir}/Maddlog
rm -fr $RPM_BUILD_ROOT
%changelog
+* Wed Sep 25 2013 Sjoerd Mullender <[email protected]> - 11.15.15-20130925
+- Rebuilt.
+
* Fri Sep 20 2013 Sjoerd Mullender <[email protected]> - 11.15.13-20130920
- Rebuilt.
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
@@ -1,10 +1,10 @@
Package: MonetDB.R
Version: 0.8.0
-Date: 2013-09-17
+Date: 2013-09-25
Title: Connect MonetDB to R
-Authors@R: c(person("Hannes Muehleisen", "Developer", role = c("aut",
"cre"),email = "[email protected]"),
- person("Thomas Lumley", "Contributor", role = "ctb"),
- person("Anthony Damico", "Contributor", role = "ctb"))
+Authors@R: c(person("Hannes Muehleisen", role = c("aut", "cre"),email =
"[email protected]"),
+ person("Thomas Lumley", role = "ctb"),
+ person("Anthony Damico", role = "ctb"))
Depends: DBI (>= 0.2-5), digest (>= 0.6.0), methods, utils, stats
Description: Allows to pull data from MonetDB into R
License: MPL (== 1.1)
diff --git a/clients/R/MonetDB.R/R/monetdb.R b/clients/R/MonetDB.R/R/monetdb.R
--- a/clients/R/MonetDB.R/R/monetdb.R
+++ b/clients/R/MonetDB.R/R/monetdb.R
@@ -1,15 +1,19 @@
require(DBI)
require(digest)
+C_LIBRARY <- "MonetDB.R"
+
.onLoad <- function(lib, pkg) {
- library.dynam( "MonetDB.R", pkg, lib )
- .Call("mapiInit",PACKAGE="MonetDB.R")
+ library.dynam( C_LIBRARY, pkg, lib )
+ .Call("mapiInit",PACKAGE=C_LIBRARY)
}
# TODO: make these values configurable in the call to dbConnect
DEBUG_IO <- FALSE
DEBUG_QUERY <- FALSE
+
+
# Make S4 aware of S3 classes
setOldClass(c("sockconn","connection","monetdb_mapi_conn"))
@@ -23,7 +27,7 @@ MonetR <- MonetDB <- MonetDBR <- MonetDB
setMethod("dbGetInfo", "MonetDBDriver", def=function(dbObj, ...)
list(name="MonetDBDriver",
- driver.version="0.7.11",
+ driver.version="0.8.0",
DBI.version="0.2-5",
client.version=NA,
max.connections=NA)
@@ -64,17 +68,17 @@ setMethod("dbConnect", "MonetDBDriver",
#
blocking = TRUE, open="r+b",timeout = 5 )
# this goes to
src/mapi.c
- socket <-
socket <<- .Call("mapiConnect",host,port,5,PACKAGE="MonetDB.R")
+ socket <-
socket <<- .Call("mapiConnect",host,port,5,PACKAGE=C_LIBRARY)
# authenticate
.monetAuthenticate(socket,dbname,user,password)
# test the
connection to make sure it works before
.mapiWrite(socket,"sSELECT 42;"); .mapiRead(socket)
#close(socket)
-
.Call("mapiDisconnect",socket,PACKAGE="MonetDB.R")
+
.Call("mapiDisconnect",socket,PACKAGE=C_LIBRARY)
break
}, error = function(e) {
if
("connection" %in% class(socket)) {
-
.Call("mapiDisconnect",socket,PACKAGE="MonetDB.R")
+
.Call("mapiDisconnect",socket,PACKAGE=C_LIBRARY)
}
cat(paste0("Server not ready(",e$message,"), retrying (ESC or CTRL+C to
abort)\n"))
Sys.sleep(1)
@@ -86,7 +90,7 @@ setMethod("dbConnect", "MonetDBDriver",
# make new socket with user-specified timeout
#socket <- socket <<- socketConnection(host = host,
port = port,
# blocking = TRUE, open="r+b",timeout = timeout)
- socket <- socket <<-
.Call("mapiConnect",host,port,timeout,PACKAGE="MonetDB.R")
+ socket <- socket <<-
.Call("mapiConnect",host,port,timeout,PACKAGE=C_LIBRARY)
.monetAuthenticate(socket,dbname,user,password)
connenv <- new.env(parent=emptyenv())
connenv$lock <- 0
@@ -102,7 +106,7 @@ setMethod("dbConnect", "MonetDBDriver",
setClass("MonetDBConnection",
representation("DBIConnection",socket="externalptr",connenv="environment",fetchSize="integer"))
setMethod("dbDisconnect", "MonetDBConnection", def=function(conn, ...) {
- .Call("mapiDisconnect",conn@socket,PACKAGE="MonetDB.R")
+ .Call("mapiDisconnect",conn@socket,PACKAGE=C_LIBRARY)
TRUE
})
@@ -403,7 +407,7 @@ setMethod("fetch", signature(res="MonetD
#parts[parts=="NULL"] <- NA
# call to a faster C implementation for the hard and
annoying task of splitting everyting into fields
- parts <- .Call("mapiSplit",
res@env$data[1:n],info$cols, PACKAGE="MonetDB.R")
+ parts <- .Call("mapiSplit",
res@env$data[1:n],info$cols, PACKAGE=C_LIBRARY)
# convert values column by column
for (j in seq.int(info$cols)) {
@@ -533,16 +537,25 @@ REPLY_SIZE <- 100 # Apparently, -1 me
conObj@connenv$lock <- 1
# send payload and read response
- .mapiWrite(conObj@socket,msg)
- resp <- .mapiRead(conObj@socket)
+ #.mapiWrite(conObj@socket,msg)
+ #resp <- .mapiRead(conObj@socket)
+
+ if (DEBUG_IO) cat(paste("TX: '",msg,"'\n",sep=""))
+ resp <- .Call("mapiRequest",conObj@socket,msg,PACKAGE=C_LIBRARY)
+ if (DEBUG_IO) {
+ dstr <- resp
+ if (nchar(dstr) > 300) {
+ dstr <-
paste0(substring(dstr,1,200),"...",substring(dstr,nchar(dstr)-100,nchar(dstr)))
+ }
+ cat(paste0("RX: '",dstr,"'\n"))
+ }
# get deferred statements from deferred list and execute
while (length(conObj@connenv$deferred) > 0) {
# take element, execute, check response for prompt
dmesg <- conObj@connenv$deferred[[1]]
conObj@connenv$deferred[[1]] <- NULL
- .mapiWrite(conObj@socket,dmesg)
- dresp <- .mapiParseResponse(.mapiRead(conObj@socket))
+ dresp <-
.mapiParseResponse(.Call("mapiRequest",conObj@socket,dmesg,PACKAGE=C_LIBRARY))
if (dresp$type == MSG_MESSAGE) {
conObj@connenv$lock <- 0
warning(paste("II: Failed to execute deferred statement
'",dmesg,"'. Server said: '",dresp$message,"'\n"))
@@ -556,7 +569,7 @@ REPLY_SIZE <- 100 # Apparently, -1 me
.mapiCleanup <- function(conObj) {
if (conObj@connenv$lock > 0) {
- cat("II: Interrupted query execution. Beware that a
long-running query in the MonetDB server is NOT affected by this, so please
consider restarting the server & reopen the connection.\n")
+ if (DEBUG_QUERY) cat("II: Interrupted query execution.\n")
conObj@connenv$lock <- 0
}
}
@@ -564,7 +577,7 @@ REPLY_SIZE <- 100 # Apparently, -1 me
.mapiRead <- function(con) {
if (!identical(class(con)[[1]],"externalptr"))
stop("I can only be called with a MonetDB connection object as
parameter.")
- respstr <- .Call("mapiRead",con,PACKAGE="MonetDB.R")
+ respstr <- .Call("mapiRead",con,PACKAGE=C_LIBRARY)
if (DEBUG_IO) {
dstr <- respstr
if (nchar(dstr) > 300) {
@@ -580,7 +593,7 @@ REPLY_SIZE <- 100 # Apparently, -1 me
stop("I can only be called with a MonetDB connection object as
parameter.")
if (DEBUG_IO) cat(paste("TX: '",msg,"'\n",sep=""))
- .Call("mapiWrite",con,msg,PACKAGE="MonetDB.R")
+ .Call("mapiWrite",con,msg,PACKAGE=C_LIBRARY)
return (NULL)
}
@@ -625,7 +638,8 @@ REPLY_SIZE <- 100 # Apparently, -1 me
env$lengths <- .mapiParseTableHeader(lines[5])
env$tuples <-lines[6:length(lines)]
-
+
+ stopifnot(length(env$tuples) == header$index)
return(env)
}
# Continuation of Q_TABLE without headers describing table
structure
@@ -640,6 +654,8 @@ REPLY_SIZE <- 100 # Apparently, -1 me
env$index <- header$index
env$tuples <- lines[2:length(lines)]
+ stopifnot(length(env$tuples) == header$rows)
+
return(env)
}
diff --git a/clients/R/MonetDB.R/src/mapi.c b/clients/R/MonetDB.R/src/mapi.c
--- a/clients/R/MonetDB.R/src/mapi.c
+++ b/clients/R/MonetDB.R/src/mapi.c
@@ -13,6 +13,7 @@
#endif
#include <assert.h>
#include <fcntl.h>
+#include <errno.h>
// R headers
#include <R.h>
@@ -31,8 +32,9 @@ static SEXP MAPI_type_tag;
#define CHECK_MAPI_SOCK(s) do { \
if (TYPEOF(s) != EXTPTRSXP || \
- R_ExternalPtrTag(s) != MAPI_type_tag) \
- error("bad socket"); \
+ R_ExternalPtrTag(s) != MAPI_type_tag || \
+ EXTPTR_PTR(s) == NULL) \
+ error("Socket has already been closed and cannot be used."); \
} while (0)
SEXP mapiInit(void) {
@@ -83,9 +85,14 @@ SEXP mapiConnect(SEXP host, SEXP port, S
#endif
// send/receive timeouts for socket
+#ifdef __WIN32__
+ int sto;
+ sto = timeoutval * 1000;
+#else
struct timeval sto;
sto.tv_sec = timeoutval;
sto.tv_usec = 0;
+#endif
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
@@ -105,11 +112,11 @@ SEXP mapiConnect(SEXP host, SEXP port, S
if (sock == -1)
continue;
- if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &sto,
+ if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const char *)
&sto,
sizeof(sto)) < 0) {
error("setsockopt failed");
}
- if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &sto,
+ if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const char *)
&sto,
sizeof(sto)) < 0) {
error("setsockopt failed\n");
}
@@ -149,16 +156,47 @@ SEXP mapiConnect(SEXP host, SEXP port, S
return connobj;
}
+size_t sockRead(int fd, void *buf, size_t size) {
+ ssize_t retval = -1;
+ do {
+ retval = recv(fd, buf, size, MSG_WAITALL);
+ } while (retval == -1 && errno == EINTR);
+ if (retval == -1) {
+#ifdef __WIN32__
+ errno = WSAGetLastError();
+#endif
+ error("error reading from socket (%d)", errno);
+ } else {
+ return retval;
+ }
+}
+
+size_t sockWrite(int fd, const void *buf, size_t size) {
+ ssize_t retval = -1;
+ do {
+ retval = send(fd, buf, size, 0);
+ } while (retval == -1 && errno == EINTR);
+ if (retval == -1) {
+#ifdef __WIN32__
+ errno = WSAGetLastError();
+#endif
+ error("error writing to socket (%d)", errno);
+ } else {
+ return retval;
+ }
+}
+
SEXP mapiRead(SEXP conn) {
CHECK_MAPI_SOCK(conn);
SOCKET sock = *((SOCKET*) R_ExternalPtrAddr(conn));
SEXP lines;
char read_buf[BUFSIZE];
- int n, block_final, block_length;
+ int block_final, block_length;
short header;
size_t response_buf_len = ALLOCSIZE;
size_t response_buf_offset = 0;
+ size_t n = 0;
char* response_buf = malloc(response_buf_len);
if (response_buf == NULL) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list