Changeset: 1289bc0d85de for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1289bc0d85de Added Files: clients/nodejs/monetdb/README.md sql/backends/monet5/generator/Tests/crash.Bug-3609.sql sql/backends/monet5/generator/Tests/crash.Bug-3609.stable.err sql/backends/monet5/generator/Tests/crash.Bug-3609.stable.out sql/backends/monet5/sql_upgrades.c sql/backends/monet5/sql_upgrades.h sql/test/BugTracker-2014/Tests/empty_intermediate_quantile.Bug-3611.sql sql/test/BugTracker-2014/Tests/empty_intermediate_quantile.Bug-3611.stable.err sql/test/BugTracker-2014/Tests/empty_intermediate_quantile.Bug-3611.stable.out sql/test/BugTracker-2014/Tests/fk-property-assert.Bug-3612.sql sql/test/BugTracker-2014/Tests/fk-property-assert.Bug-3612.stable.err sql/test/BugTracker-2014/Tests/fk-property-assert.Bug-3612.stable.out sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out.single sql/test/BugTracker-2014/Tests/querylog.Bug-3607.sql sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.err sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out sql/test/json/Tests/shop.sql sql/test/json/Tests/shop.stable.err sql/test/json/Tests/shop.stable.out sql/test/mergetables/Tests/doubletable.sql sql/test/mergetables/Tests/singlekeyconstraint.sql sql/test/pg_regress/Tests/loadwisconsin.sql Removed Files: clients/nodejs/monetdb/README 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/NAMESPACE clients/R/MonetDB.R/NEWS clients/R/MonetDB.R/R/dplyr.R clients/R/Tests/dplyr.R clients/Tests/MAL-signatures_all.stable.out.int128 clients/Tests/MAL-signatures_fits_geom.stable.out.int128 clients/Tests/MAL-signatures_geom.stable.out.int128 clients/Tests/MAL-signatures_none.stable.out.int128 clients/Tests/exports.stable.out clients/mapiclient/mclient.c clients/mapilib/mapi.rc clients/nodejs/Tests/nodetest.js clients/nodejs/monetdb/mapiclient.js clients/nodejs/monetdb/package.json clients/odbc/driver/driver.rc clients/odbc/winsetup/setup.rc clients/python2/setup.py clients/python3/setup.py configure.ag debian/changelog gdk/ChangeLog gdk/gdk.h gdk/gdk_aggr.c gdk/gdk_align.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_delta.c gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_imprints.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_private.h gdk/gdk_search.c gdk/gdk_search.h gdk/gdk_select.c gdk/gdk_setop.c gdk/gdk_utils.c gdk/libbat.rc java/src/nl/cwi/monetdb/jdbc/MonetDriver.java.in libversions monetdb5/extras/rdf/rdf_shredder.c monetdb5/mal/mal_authorize.c monetdb5/mal/mal_debugger.c monetdb5/mal/mal_interpreter.h monetdb5/modules/atoms/json.c monetdb5/modules/atoms/mtime.c monetdb5/modules/atoms/str.c monetdb5/modules/kernel/aggr.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/bat5.c monetdb5/modules/mal/00_calc_hge.mal monetdb5/modules/mal/00_mkey_hge.mal monetdb5/modules/mal/Tests/pqueue3.stable.out monetdb5/modules/mal/clients.c monetdb5/modules/mal/cluster.c monetdb5/modules/mal/mkey.c monetdb5/modules/mal/querylog.c monetdb5/modules/mal/tablet.c monetdb5/modules/mal/tokenizer.c monetdb5/optimizer/opt_generator.c monetdb5/optimizer/opt_querylog.c monetdb5/optimizer/opt_statistics.c monetdb5/tests/gdkTests/Tests/firstn.stable.out monetdb5/tools/libmonetdb5.rc sql/backends/monet5/Makefile.ag sql/backends/monet5/datacell/datacell.c sql/backends/monet5/datacell/opt_datacell.c sql/backends/monet5/datacell/opt_datacell.h sql/backends/monet5/generator/Tests/All sql/backends/monet5/sql.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_scenario.h sql/backends/monet5/sql_user.c sql/benchmarks/tpch/Tests/13-explain.stable.out.32bit sql/benchmarks/tpch/Tests/16-explain.stable.out.32bit sql/benchmarks/tpch/Tests/20-explain.stable.out.32bit sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit sql/server/rel_select.c sql/storage/bat/bat_table.c sql/storage/restrict/restrict_storage.c sql/storage/restrict/restrict_table.c sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single sql/test/BugTracker-2014/Tests/All sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out.32bit sql/test/json/Tests/All sql/test/mergetables/Tests/All sql/test/pg_regress/Tests/All sql/test/pg_regress/Tests/alter_table.sql sql/test/pg_regress/Tests/alter_table.stable.err sql/test/pg_regress/Tests/alter_table.stable.out sql/test/pg_regress/Tests/arrays.stable.err sql/test/pg_regress/Tests/boolean.stable.err sql/test/pg_regress/Tests/case.stable.err sql/test/pg_regress/Tests/case.stable.out sql/test/pg_regress/Tests/char.stable.err sql/test/pg_regress/Tests/comments.stable.err sql/test/pg_regress/Tests/create_aggregate.stable.err sql/test/pg_regress/Tests/create_misc.stable.out sql/test/pg_regress/Tests/create_operator.stable.err sql/test/pg_regress/Tests/date.stable.err sql/test/pg_regress/Tests/date.stable.out sql/test/pg_regress/Tests/drop.stable.err sql/test/pg_regress/Tests/float4.stable.err sql/test/pg_regress/Tests/float8.stable.err sql/test/pg_regress/Tests/inet.stable.err sql/test/pg_regress/Tests/insert.stable.err sql/test/pg_regress/Tests/int2.stable.err sql/test/pg_regress/Tests/int4.stable.err sql/test/pg_regress/Tests/int8.stable.err sql/test/pg_regress/Tests/interval.stable.err sql/test/pg_regress/Tests/interval.stable.out sql/test/pg_regress/Tests/limit.sql sql/test/pg_regress/Tests/limit.stable.err sql/test/pg_regress/Tests/limit.stable.out sql/test/pg_regress/Tests/numeric.stable.err sql/test/pg_regress/Tests/numeric_big.stable.err sql/test/pg_regress/Tests/numerology.stable.err sql/test/pg_regress/Tests/numerology.stable.out sql/test/pg_regress/Tests/oid.stable.err sql/test/pg_regress/Tests/random.sql sql/test/pg_regress/Tests/select_into.stable.err sql/test/pg_regress/Tests/strings.stable.err sql/test/pg_regress/Tests/strings_cast.stable.err sql/test/pg_regress/Tests/strings_cast.stable.out sql/test/pg_regress/Tests/strings_concat.stable.err sql/test/pg_regress/Tests/timestamp.stable.err sql/test/pg_regress/Tests/timestamp.stable.out sql/test/pg_regress/Tests/timestamptz.stable.err sql/test/pg_regress/Tests/timestamptz.stable.out sql/test/pg_regress/Tests/timetz.stable.out sql/test/pg_regress/Tests/vacuum.stable.out sql/test/pg_regress/Tests/varchar.stable.err sql/test/pg_regress/Tests/without_oid.stable.err sql/test/pg_regress/Tests/without_oid.stable.out tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/merovingian.c vertoo.data Branch: transaction-replication Log Message:
Merge with default branch Manually resolve merge conflicts in gdk_logger.c and sql_screnario.c diffs (truncated from 46511 to 300 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -578,3 +578,6 @@ 6c7d5f562fcb044b745c871344c25b1c6bab7cf4 3899334ca1f3c13924e8bd22d2afab8ab468e5ba Oct2014_root 0dd4a291a01def38d0d2f0a96559ea8c73a56b3f Oct2014_1 4f894ebf1a93ae895ec23d54ce2112bf21a6427e Oct2014_release +e92e434d19b7308c2952d50978c2cfd78e1bdb80 Oct2014_3 +4f894ebf1a93ae895ec23d54ce2112bf21a6427e Oct2014_release +88a29a5a2bef5c6cef6b3bfa5ab7c4d3b855a2c8 Oct2014_release diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -960,6 +960,9 @@ mv $RPM_BUILD_ROOT%{_datadir}/doc/MonetD rm -fr $RPM_BUILD_ROOT %changelog +* Tue Oct 28 2014 Sjoerd Mullender <sjo...@acm.org> - 11.19.3-20141028 +- Rebuilt. + * Fri Oct 24 2014 Sjoerd Mullender <sjo...@acm.org> - 11.19.1-20141024 - Rebuilt. - BZ#2618: Implement master slave scheme 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 @@ -28,4 +28,6 @@ export(db_insert_into.MonetDBConnection) export(db_create_index.MonetDBConnection) export(db_analyze.MonetDBConnection) export(sql_subquery.MonetDBConnection) -export(monetdb_queryinfo) +export(monetdb_queryinfo) +export(sample_n.tbl_monetdb) +export(sample_frac.tbl_monetdb) 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 @@ -1,6 +1,7 @@ 0.9.6 - Fixed non-ASCII character handling (thanks, Roman!) - Fully removed C-based socket code +- support for dplyr verbs sample_n() and sample_frac() 0.9.5 - Removed package date (Thanks, Dimitar) 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 @@ -19,7 +19,7 @@ src_translate_env.src_monetdb <- functio } src_desc.src_monetdb <- function(x) { - paste0("MonetDB ",x$info$monet_version, " (",x$info$monet_release, ") [", x$info$merovingian_uri,"]") + paste0("MonetDB ",x$info$monet_version, " (",x$info$monet_release, ")") } tbl.src_monetdb <- function(src, from, ...) { @@ -27,6 +27,25 @@ tbl.src_monetdb <- function(src, from, . dplyr::tbl_sql("monetdb", src = src, from = from, ...) } +sample_n.tbl_monetdb <- function(x, size, replace = FALSE, weight = NULL) { + if (replace || !is.null(weight)) { + stop("Sorry, replace and weight are not supported for MonetDB tables. \ + Consider collect()'ing first.") + } + dbGetQuery(x$src$con, dplyr::build_sql(x$query$sql, " SAMPLE ", as.integer(size))) +} + +sample_frac.tbl_monetdb <- function(tbl, frac=1, replace = FALSE, weight = NULL) { + if (frac < 0 || frac > 1) { + stop("frac must be in [0,1]") + } + n <- as.integer(round(dim(tbl)[[1]] * frac)) + if (n < 1) { + stop("not sampling 0 rows...") + } + sample_n(tbl, n, replace, weight) +} + db_query_fields.MonetDBConnection <- function(con, sql, ...) { # prepare gives us column info without actually running a query. Nice. dbGetQuery(con, dplyr::build_sql("PREPARE SELECT * FROM ", sql))$column diff --git a/clients/R/Tests/dplyr.R b/clients/R/Tests/dplyr.R --- a/clients/R/Tests/dplyr.R +++ b/clients/R/Tests/dplyr.R @@ -96,6 +96,10 @@ print(nrow(head(anti_join(player_info, h })) # TODO: set ops +# sample functions +print(nrow(sample_n(player_info, 10L))) +print(nrow(head(sample_frac(player_info, .5), n=10L))) + # Arbitrary SQL ------------------------------------------------------------- # You can also provide sql as is, using the sql function: batting2008 <- tbl(dps, diff --git a/clients/Tests/MAL-signatures_all.stable.out.int128 b/clients/Tests/MAL-signatures_all.stable.out.int128 --- a/clients/Tests/MAL-signatures_all.stable.out.int128 +++ b/clients/Tests/MAL-signatures_all.stable.out.int128 @@ -40603,7 +40603,7 @@ command bat.delete(b:bat[:any_1,:any_2], address BKCdelete_bun; comment Delete one specific BUN. -command bat.densebat(size:wrd):bat[:void,:void] +command bat.densebat(size:wrd):bat[:oid,:oid] address BKCdensebat; comment Creates a new [void,void] BAT of size 'size'. @@ -42476,7 +42476,7 @@ address CMDvarADDsignal; comment Return V1 + V2, guarantee no overflow by returning larger type pattern calc.++(v:hge):hge -address CMDvarINCR; +address CMDvarINCRsignal; comment Unary V + 1 pattern calc.-(v1:dbl,v2:dbl):dbl @@ -42944,7 +42944,7 @@ address CMDvarSUBsignal; comment Return V1 - V2, guarantee no overflow by returning larger type pattern calc.--(v:hge):hge -address CMDvarDECR; +address CMDvarDECRsignal; comment Unary V - 1 pattern calc.-(v:hge):hge @@ -51047,8 +51047,10 @@ pattern mkey.bulk_rotate_xor_hash(h:wrd, address MKEYrotate_xor_hash; comment post: [:xor=]([:rotate=](h, nbits), [hash](b)) -command mkey.hash(v:hge):wrd -address MKEYhash_hge; +pattern mkey.hash(v:hge):wrd +address MKEYhash; +comment calculate a hash value + pattern mkey.hash(v:str):wrd address MKEYhash; comment calculate a hash value diff --git a/clients/Tests/MAL-signatures_fits_geom.stable.out.int128 b/clients/Tests/MAL-signatures_fits_geom.stable.out.int128 --- a/clients/Tests/MAL-signatures_fits_geom.stable.out.int128 +++ b/clients/Tests/MAL-signatures_fits_geom.stable.out.int128 @@ -40527,7 +40527,7 @@ command bat.delete(b:bat[:any_1,:any_2], address BKCdelete_bun; comment Delete one specific BUN. -command bat.densebat(size:wrd):bat[:void,:void] +command bat.densebat(size:wrd):bat[:oid,:oid] address BKCdensebat; comment Creates a new [void,void] BAT of size 'size'. diff --git a/clients/Tests/MAL-signatures_geom.stable.out.int128 b/clients/Tests/MAL-signatures_geom.stable.out.int128 --- a/clients/Tests/MAL-signatures_geom.stable.out.int128 +++ b/clients/Tests/MAL-signatures_geom.stable.out.int128 @@ -40527,7 +40527,7 @@ command bat.delete(b:bat[:any_1,:any_2], address BKCdelete_bun; comment Delete one specific BUN. -command bat.densebat(size:wrd):bat[:void,:void] +command bat.densebat(size:wrd):bat[:oid,:oid] address BKCdensebat; comment Creates a new [void,void] BAT of size 'size'. diff --git a/clients/Tests/MAL-signatures_none.stable.out.int128 b/clients/Tests/MAL-signatures_none.stable.out.int128 --- a/clients/Tests/MAL-signatures_none.stable.out.int128 +++ b/clients/Tests/MAL-signatures_none.stable.out.int128 @@ -40550,7 +40550,7 @@ command bat.delete(b:bat[:any_1,:any_2], address BKCdelete_bun; comment Delete one specific BUN. -command bat.densebat(size:wrd):bat[:void,:void] +command bat.densebat(size:wrd):bat[:oid,:oid] address BKCdensebat; comment Creates a new [void,void] BAT of size 'size'. diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -233,7 +233,7 @@ BAT *BUNdel(BAT *b, const void *left, co BAT *BUNdelHead(BAT *b, const void *left, bit force); BUN BUNdelete(BAT *b, BUN p, bit force); BAT *BUNfastins(BAT *b, const void *left, const void *right); -BUN BUNfnd(BAT *b, const void *left); +BUN BUNfnd(BAT *b, const void *right); BAT *BUNinplace(BAT *b, BUN p, const void *left, const void *right, bit force); BAT *BUNins(BAT *b, const void *left, const void *right, bit force); BAT *BUNreplace(BAT *b, const void *left, const void *right, bit force); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1598,7 +1598,7 @@ format_result(Mapi mid, MapiHdl hdl, cha mnstr_printf(toConsole, LLFMT " affected row%s", aff, - aff == 1 ? "s" : ""); + aff != 1 ? "s" : ""); if (lid != -1) { mnstr_printf(toConsole, ", last generated key: " diff --git a/clients/nodejs/Tests/nodetest.js b/clients/nodejs/Tests/nodetest.js --- a/clients/nodejs/Tests/nodetest.js +++ b/clients/nodejs/Tests/nodetest.js @@ -13,21 +13,25 @@ monetdb.connect({dbname:'nonexist', port assert(err); }); -monetdb.connect({dbname:dbname, user:'nonexist', port:dbport}, function(err) { +var failedconn = monetdb.connect({dbname:dbname, user:'nonexist', port:dbport}, function(err) { + assert(err); +}); +/* try to query on a failed connection, we need this callback */ +failedconn.query('SELECT 1',function(err,res) { assert(err); }); /* now actually connect */ -var conn = monetdb.connect({dbname:dbname, port:dbport, debug: true}, function(err) { +var conn = monetdb.connect({dbname:dbname, port:dbport, debug: false}, function(err) { assert.equal(null, err); + assert.equal(conn.env.gdk_dbname, dbname); }); -/* some querying */ -conn.query('start transaction'); - -conn.query('create table foo(a int, b float, c clob)'); -conn.query("insert into foo values (42,4.2,'42'),(43,4.3,'43'),(44,4.4,'44'),(45,4.5,'45')"); +/* some querying, call chaining */ +conn.query('start transaction'). + query('create table foo(a int, b float, c clob)'). + query("insert into foo values (42,4.2,'42'),(43,4.3,'43'),(44,4.4,'44'),(45,4.5,'45')"); conn.query('select * from foo', function(err, res) { assert.equal(null, err); @@ -44,10 +48,11 @@ conn.query('select * from foo', function assert.equal(4, res.data.length); assert.equal(42, res.data[0][res.structure[0].index]); - assert.equal(4.3, res.data[1][1]); + assert.equal(4.3, res.data[1][res.col['b']]); assert.equal('44', res.data[2][2]); }); +/* we can also just put the queries in one .query call */ conn.query('delete from foo; drop table foo; rollback'); /* query that will stress multi-block operations */ @@ -85,6 +90,16 @@ conn.query('SELECT id from tables where }); +/* some quoting fun, jesus */ +conn.query("SELECT '\\\\asdf','\"', '\\\"', '\\\\\"', '\\''", function(err, res) { + assert.equal(null, err); + assert.equal('\\asdf', res.data[0][0]); + assert.equal('"', res.data[0][1]); + assert.equal('\"', res.data[0][2]); + assert.equal('\\"', res.data[0][3]); + assert.equal("'", res.data[0][4]); +}); + /* prepared statements can also be re-used */ conn.prepare('SELECT id from tables where name=? and type=? and readonly=?', function(err, res){ assert.equal(null, err); @@ -104,6 +119,3 @@ conn.prepare('SELECT id from tables wher }); conn.close(); - - - diff --git a/clients/nodejs/monetdb/README b/clients/nodejs/monetdb/README.md rename from clients/nodejs/monetdb/README rename to clients/nodejs/monetdb/README.md --- a/clients/nodejs/monetdb/README +++ b/clients/nodejs/monetdb/README.md @@ -1,8 +1,21 @@ -This package connects node.js and MonetDB +# monetdb +This package defines a mapiclient that allows easy communication between a NodeJS application and a running MonetDB server process. -Example usage: +# Installation +npm install [-g] monetdb -var conn = require('../monetdb').connect({'dbname':'mydb'} , function(err) { +# Example usage: + +``` +var options = { + host : 'localhost', + port : 50000, + dbname : 'mydb', + user : 'monetdb', + password : 'monetdb' +}; + +var conn = require('monetdb').connect(options , function(err) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list