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

Reply via email to