Changeset: f4e1435850ad for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f4e1435850ad
Added Files:
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
Modified Files:
clients/nodejs/Tests/nodetest.js
clients/nodejs/monetdb/mapiclient.js
gdk/gdk_aggr.c
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_group.c
gdk/gdk_select.c
java/src/nl/cwi/monetdb/jdbc/MonetDriver.java.in
monetdb5/modules/kernel/aggr.c
monetdb5/modules/mal/mkey.c
sql/test/BugTracker-2014/Tests/All
sql/test/BugTracker-2014/Tests/empty_intermediate_quantile.Bug-3611.sql
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/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/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/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
Branch: default
Log Message:
merge with default
diffs (truncated from 8182 to 300 lines):
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
@@ -90,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);
diff --git a/clients/nodejs/monetdb/mapiclient.js
b/clients/nodejs/monetdb/mapiclient.js
--- a/clients/nodejs/monetdb/mapiclient.js
+++ b/clients/nodejs/monetdb/mapiclient.js
@@ -328,73 +328,72 @@ function _parsetuples(names, types, line
for (li in lines) {
var line = lines[li];
var resultline = [];
- var tokenStart = 2;
- var endQuote = 0;
- var valPtr = '';
var cCol = 0;
-
+ var curtok = '';
/* mostly adapted from clients/R/MonetDB.R/src/mapisplit.c */
- for (var curPos = tokenStart; curPos < line.length - 1;
curPos++) {
+ for (var curPos = 2; curPos < line.length - 1; curPos++) {
var chr = line.charAt(curPos);
switch (state) {
case 'INCRAP':
if (chr != '\t' && chr != ',') {
- tokenStart = curPos;
if (chr == '"') {
state = 'INQUOTES';
- tokenStart++;
} else {
state = 'INTOKEN';
+ curtok += chr;
}
}
break;
case 'INTOKEN':
if (chr == ',' || curPos == line.length - 2) {
- var tokenLen = curPos - tokenStart -
endQuote;
- valPtr = line.substring(tokenStart,
tokenStart + tokenLen);
- if (tokenLen < 1 || valPtr == 'NULL') {
+ if (curtok == 'NULL') {
resultline.push(undefined);
} else {
switch(types[cCol]) {
case 'boolean':
-
resultline.push(valPtr == 'true');
+
resultline.push(curtok == 'true');
break;
case 'tinyint':
case 'smallint':
case 'int':
case 'wrd':
case 'bigint':
-
resultline.push(parseInt(valPtr));
+
resultline.push(parseInt(curtok));
break
case 'real':
case 'double':
case 'decimal':
-
resultline.push(parseFloat(valPtr));
+
resultline.push(parseFloat(curtok));
break
default:
-
resultline.push(valPtr);
+ // we need to
unescape double quotes
+ //valPtr =
valPtr.replace(/[^\\]\\"/g, '"');
+
resultline.push(curtok);
break;
}
}
cCol++;
- endQuote = 0;
state = 'INCRAP';
+ curtok = '';
+ } else {
+ curtok += chr;
}
break;
case 'ESCAPED':
state = 'INQUOTES';
+ curtok += chr;
break;
case 'INQUOTES':
if (chr == '"') {
state = 'INTOKEN';
- endQuote++;
break;
}
if (chr == '\\') {
state = 'ESCAPED';
break;
}
+ curtok += chr;
break;
}
}
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -323,10 +323,10 @@ dosum(const void *values, int nonil, oid
return BUN_NONE;
}
- switch (ATOMstorage(tp2)) {
+ switch (tp2) {
case TYPE_bte: {
bte *sums = (bte *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_SUM(bte, bte);
break;
@@ -337,7 +337,7 @@ dosum(const void *values, int nonil, oid
}
case TYPE_sht: {
sht *sums = (sht *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_SUM(bte, sht);
break;
@@ -349,15 +349,21 @@ dosum(const void *values, int nonil, oid
}
break;
}
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
case TYPE_int: {
int *sums = (int *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_SUM(bte, int);
break;
case TYPE_sht:
AGGR_SUM(sht, int);
break;
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
case TYPE_int:
AGGR_SUM(int, int);
break;
@@ -366,18 +372,27 @@ dosum(const void *values, int nonil, oid
}
break;
}
+#if SIZEOF_WRD == SIZEOF_LNG
+ case TYPE_wrd:
+#endif
case TYPE_lng: {
lng *sums = (lng *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_SUM(bte, lng);
break;
case TYPE_sht:
AGGR_SUM(sht, lng);
break;
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
case TYPE_int:
AGGR_SUM(int, lng);
break;
+#if SIZEOF_WRD == SIZEOF_LNG
+ case TYPE_wrd:
+#endif
case TYPE_lng:
AGGR_SUM(lng, lng);
break;
@@ -413,7 +428,7 @@ dosum(const void *values, int nonil, oid
#endif
case TYPE_flt: {
flt *sums = (flt *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_flt:
AGGR_SUM(flt, flt);
break;
@@ -424,7 +439,7 @@ dosum(const void *values, int nonil, oid
}
case TYPE_dbl: {
dbl *sums = (dbl *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_flt:
AGGR_SUM(flt, dbl);
break;
@@ -556,16 +571,22 @@ BATsum(void *res, int tp, BAT *b, BAT *s
GDKerror("BATsum: %s\n", err);
return GDK_FAIL;
}
- switch (ATOMstorage(tp)) {
+ switch (tp) {
case TYPE_bte:
* (bte *) res = nil_if_empty ? bte_nil : 0;
break;
case TYPE_sht:
* (sht *) res = nil_if_empty ? sht_nil : 0;
break;
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
case TYPE_int:
* (int *) res = nil_if_empty ? int_nil : 0;
break;
+#if SIZEOF_WRD == SIZEOF_LNG
+ case TYPE_wrd:
+#endif
case TYPE_lng:
* (lng *) res = nil_if_empty ? lng_nil : 0;
break;
@@ -576,10 +597,11 @@ BATsum(void *res, int tp, BAT *b, BAT *s
#endif
case TYPE_flt:
case TYPE_dbl:
- switch (ATOMstorage(b->ttype)) {
+ switch (b->ttype) {
case TYPE_bte:
case TYPE_sht:
case TYPE_int:
+ case TYPE_wrd:
case TYPE_lng:
#ifdef HAVE_HGE
case TYPE_hge:
@@ -605,7 +627,7 @@ BATsum(void *res, int tp, BAT *b, BAT *s
/* there were nils */
avg = dbl_nil;
}
- if (ATOMstorage(tp) == TYPE_flt) {
+ if (tp == TYPE_flt) {
if (avg == dbl_nil)
*(flt *) res = flt_nil;
else if (cnt > 0 &&
@@ -637,7 +659,7 @@ BATsum(void *res, int tp, BAT *b, BAT *s
default:
break;
}
- if (ATOMstorage(b->ttype) == TYPE_dbl)
+ if (b->ttype == TYPE_dbl)
* (dbl *) res = nil_if_empty ? dbl_nil : 0;
else
* (flt *) res = nil_if_empty ? flt_nil : 0;
@@ -872,10 +894,10 @@ doprod(const void *values, oid seqb, BUN
return GDK_FAIL;
}
- switch (ATOMstorage(tp2)) {
+ switch (tp2) {
case TYPE_bte: {
bte *prods = (bte *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_PROD(bte, bte, sht);
break;
@@ -886,7 +908,7 @@ doprod(const void *values, oid seqb, BUN
}
case TYPE_sht: {
sht *prods = (sht *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_PROD(bte, sht, int);
break;
@@ -898,9 +920,12 @@ doprod(const void *values, oid seqb, BUN
}
break;
}
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
case TYPE_int: {
int *prods = (int *) results;
- switch (ATOMstorage(tp1)) {
+ switch (tp1) {
case TYPE_bte:
AGGR_PROD(bte, int, lng);
break;
@@ -908,6 +933,9 @@ doprod(const void *values, oid seqb, BUN
AGGR_PROD(sht, int, lng);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list