Changeset: d2f58b9bdad2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d2f58b9bdad2
Added Files:
        sql/test/json/Tests/aggregate01.sql
        sql/test/json/Tests/aggregate01.stable.err
        sql/test/json/Tests/aggregate01.stable.out
Modified Files:
        monetdb5/modules/atoms/json.c
        monetdb5/modules/atoms/json.mal
        sql/backends/monet5/generator/Tests/generator03.sql
        sql/backends/monet5/generator/Tests/generator03.stable.out
        sql/backends/monet5/generator/generator.c
        sql/scripts/40_json.sql
        sql/test/json/Tests/All
        sql/test/json/Tests/aggregate00.sql
        sql/test/json/Tests/aggregate00.stable.out
Branch: transaction-replication
Log Message:

Merge with default branch


diffs (truncated from 751 to 300 lines):

diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -1603,11 +1603,13 @@ JSONgroupStr(str *ret, const bat *bid)
 {
        BAT *b;
        BUN p, q;
-       const char *t;
+       const char *t = NULL;
        size_t len, size = BUFSIZ, offset;
        str buf = GDKmalloc(size);
        BATiter bi;
        const char *err = NULL;
+       char temp[128] = "";
+       const double * val = NULL;
 
        if (buf == NULL)
                throw(MAL, "json.group",MAL_MALLOC_FAIL);
@@ -1620,9 +1622,20 @@ JSONgroupStr(str *ret, const bat *bid)
        offset = 0;
        bi = bat_iterator(b);
        BATloop(b, p, q) {
-               int n;
+               int n = 0;
 
-               t = (const char *) BUNtail(bi, p);
+               switch (b->ttype) {
+               case TYPE_str:
+                       t = (const char *) BUNtail(bi, p);
+                       break;
+               case TYPE_dbl:
+                       val = (const double *) BUNtail(bi, p);
+                       snprintf(temp, sizeof(temp), "%f", *val);
+                       t = (const char *)temp;
+                       break;
+               }
+
+               //t = (const char *) BUNtail(bi, p);
 
                if (strNil(t))
                        continue;
@@ -1635,18 +1648,37 @@ JSONgroupStr(str *ret, const bat *bid)
                                goto failed;
                        }
                }
-               if (offset == 0) {
-                       if (BATcount(b) == 1) {
-                               n = snprintf(buf, size, "[ \"%s\" ]", t);
+               switch (b->ttype) {
+               case TYPE_str:
+                       if (offset == 0) {
+                               if (BATcount(b) == 1) {
+                                       n = snprintf(buf, size, "[ \"%s\" ]", 
t);
+                               } else {
+                                       n = snprintf(buf, size, "[ \"%s\"", t);
+                               }
                        } else {
-                               n = snprintf(buf, size, "[ \"%s\"", t);
+                               if (p == BUNlast(b) - 1) {
+                                       n = snprintf(buf + offset, size - 
offset, ", \"%s\" ]", t);
+                               } else {
+                                       n = snprintf(buf + offset, size - 
offset, ", \"%s\"", t);
+                               }
                        }
-               } else {
-                       if (p == BUNlast(b) - 1) {
-                               n = snprintf(buf + offset, size - offset, ", 
\"%s\" ]", t);
-                       } else {
-                               n = snprintf(buf + offset, size - offset, ", 
\"%s\"", t);
+                       break;
+               case TYPE_dbl:
+                       if (offset == 0) {
+                               if (BATcount(b) == 1) {
+                                       n = snprintf(buf, size, "[ %s ]", t);
+                               } else {
+                                       n = snprintf(buf, size, "[ %s", t);
+                               }
+                       } else {
+                               if (p == BUNlast(b) - 1) {
+                                       n = snprintf(buf + offset, size - 
offset, ", %s ]", t);
+                               } else {
+                                       n = snprintf(buf + offset, size - 
offset, ", %s", t);
+                               }
                        }
+                       break;
                }
                offset += n;
        }
@@ -1670,7 +1702,7 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
        BUN nils = 0;
        int isnil;
        const oid *cand = NULL, *candend = NULL;
-       const char *v;
+       const char *v = NULL;
        const oid *grps, *map;
        oid mapoff = 0;
        oid prev;
@@ -1679,12 +1711,14 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
        char *buf = NULL;
        size_t buflen, maxlen, len;
        const char *err;
+       char temp[128] = "";
+       const double * val = NULL;
 
        if ((err = BATgroupaggrinit(b, g, e, s, &min, &max, &ngrp, &start, &end,
                                    &cnt, &cand, &candend)) != NULL) {
                return err;
        }
-       assert(b->ttype == TYPE_str);
+       assert(b->ttype == TYPE_str||b->ttype == TYPE_dbl);
        if (BATcount(b) == 0 || ngrp == 0) {
                bn = BATconstant(TYPE_str, ATOMnilptr(TYPE_str), ngrp);
                if (bn == NULL)
@@ -1775,7 +1809,7 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
                                        bunfastapp_nocheck(bn, BUNlast(bn), 
str_nil, Tsize(bn));
                                        nils++;
                                }
-                               bunfastapp_nocheck(bn, BUNlast(bn), buf, 
Tsize(b));
+                               bunfastapp_nocheck(bn, BUNlast(bn), buf, 
Tsize(bn));
                                nils += strNil(buf);
                                strncpy(buf, str_nil, maxlen);
                                buflen = 0;
@@ -1786,9 +1820,21 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
                        }
                        if (isnil)
                                continue;
-                       v = (const char *) BUNtail(bi, BUNfirst(b) + (map ? 
(BUN) map[p] : p + mapoff));
-
-                       if (strNil(v)) {
+                       switch(b->ttype) {
+                               case  TYPE_str:
+                               v = (const char *) BUNtail(bi, BUNfirst(b) + 
(map ? (BUN) map[p] : p + mapoff));
+                               break;
+                       case TYPE_dbl:
+                               val = (const double *) BUNtail(bi, BUNfirst(b) 
+ (map ? (BUN) map[p] : p + mapoff));
+                               if (*val != dbl_nil) {
+                                       snprintf(temp, sizeof(temp), "%f", 
*val);
+                                       v = (const char *)temp;
+                               } else {
+                                       v =  NULL;
+                               } 
+                               break;
+                       }
+                       if (!v||strNil(v)) {
                                if (skip_nils)
                                        continue;
                                strncpy(buf, str_nil, buflen);
@@ -1803,12 +1849,25 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
                                                goto bunins_failed;
                                        }
                                }
-                               if (buflen == 0) {
-                                       len = snprintf(buf + buflen, maxlen - 
buflen, "[ \"%s\"", v);
-                                       buflen += len;
-                               } else {
-                                       len = snprintf(buf + buflen, maxlen - 
buflen, ", \"%s\"", v);
-                                       buflen += len;
+                               switch (b->ttype) {
+                               case TYPE_str:
+                                       if (buflen == 0) {
+                                               len = snprintf(buf + buflen, 
maxlen - buflen, "[ \"%s\"", v);
+                                               buflen += len;
+                                       } else {
+                                               len = snprintf(buf + buflen, 
maxlen - buflen, ", \"%s\"", v);
+                                               buflen += len;
+                                       }
+                                       break;
+                               case TYPE_dbl:
+                                       if (buflen == 0) {
+                                               len = snprintf(buf + buflen, 
maxlen - buflen, "[ %s", v);
+                                               buflen += len;
+                                       } else {
+                                               len = snprintf(buf + buflen, 
maxlen - buflen, ", %s", v);
+                                               buflen += len;
+                                       }
+                                        break;
                                }
                        }
                }
diff --git a/monetdb5/modules/atoms/json.mal b/monetdb5/modules/atoms/json.mal
--- a/monetdb5/modules/atoms/json.mal
+++ b/monetdb5/modules/atoms/json.mal
@@ -172,12 +172,24 @@ command json.aggr(val:bat[:oid,:str]):st
 address JSONgroupStr
 comment "Aggregate the string values to array.";
 
+command json.aggr(val:bat[:oid,:dbl]):str
+address JSONgroupStr
+comment "Aggregate the double values to array.";
+
 command json.subaggr(val:bat[:oid,:str],g:bat[:oid,:oid],e:bat[:oid,:any_1], 
skip_nils:bit) :bat[:oid,:str]
 address JSONsubjson
 comment "Grouped aggregation of values.";
 
+command json.subaggr(val:bat[:oid,:dbl],g:bat[:oid,:oid],e:bat[:oid,:any_1], 
skip_nils:bit) :bat[:oid,:str]
+address JSONsubjson
+comment "Grouped aggregation of values.";
+
 command 
json.subaggr(val:bat[:oid,:str],g:bat[:oid,:oid],e:bat[:oid,:any_1],s:bat[:oid,:oid],
 skip_nils:bit) :bat[:oid,:str]
 address JSONsubjsoncand
 comment "Grouped aggregation of values with candidates list.";
 
+command 
json.subaggr(val:bat[:oid,:dbl],g:bat[:oid,:oid],e:bat[:oid,:any_1],s:bat[:oid,:oid],
 skip_nils:bit) :bat[:oid,:str]
+address JSONsubjsoncand
+comment "Grouped aggregation of values with candidates list.";
+
 json.prelude();
diff --git a/sql/backends/monet5/generator/Tests/generator03.sql 
b/sql/backends/monet5/generator/Tests/generator03.sql
--- a/sql/backends/monet5/generator/Tests/generator03.sql
+++ b/sql/backends/monet5/generator/Tests/generator03.sql
@@ -1,12 +1,26 @@
-select cast( '2008-03-01 00:00' as timestamp);
-select cast( '10' as interval second);
+select timestamp '2008-03-01 00:00';
+select cast( '10' as interval hour);
 
 select * from generate_series(
-       cast( '2008-03-01 00:00' as timestamp),
-       cast( '2008-03-04 12:00' as timestamp), 
+       timestamp '2008-03-01 00:00',
+       timestamp '2008-03-04 12:00',
        cast( '10' as interval hour));
 
 select * from generate_series(
-       cast( '2008-03-01 00:00' as timestamp),
-       cast( '2008-03-04 12:00' as timestamp), 
+       timestamp '2008-03-01 00:00',
+       timestamp '2008-03-04 12:00',
        cast( '1' as interval day));
+
+select * from generate_series(
+       timestamp '2008-03-01 00:00',
+       timestamp '2008-03-04 12:00',
+       cast( '10' as interval hour))
+where value < timestamp '2008-03-22 00:00';
+
+select * from generate_series(
+       timestamp '2008-03-01 00:00',
+       timestamp '2008-03-04 12:00',
+       cast( '10' as interval hour))
+where value > timestamp '2008-03-01 00:00'
+and value < timestamp '2008-03-22 00:00';
+
diff --git a/sql/backends/monet5/generator/Tests/generator03.stable.out 
b/sql/backends/monet5/generator/Tests/generator03.stable.out
--- a/sql/backends/monet5/generator/Tests/generator03.stable.out
+++ b/sql/backends/monet5/generator/Tests/generator03.stable.out
@@ -35,9 +35,10 @@ Ready.
 % single_value # name
 % sec_interval # type
 % 0 # length
-[ 10.000       ]
-#select * from generate_series(cast( '2008-03-01 00:00' as timestamp),
-#                              cast( '2008-03-04 12:00' as timestamp), 
+[ 36000.000    ]
+#select * from generate_series(
+#      timestamp '2008-03-01 00:00',
+#      timestamp '2008-03-04 12:00',
 #                                                        cast( '10' as 
interval hour));
 % . # table_name
 % value # name
diff --git a/sql/backends/monet5/generator/generator.c 
b/sql/backends/monet5/generator/generator.c
--- a/sql/backends/monet5/generator/generator.c
+++ b/sql/backends/monet5/generator/generator.c
@@ -18,7 +18,7 @@
  */
 
 /*
- * (c) Martin Kersten
+ * (c) Martin Kersten, Sjoerd Mullender
  * Series generating module for integer, decimal, real, double and timestamps.
  */
 
@@ -289,10 +289,11 @@ findLastAssign(MalBlkPtr mb, InstrPtr pc
 {
        InstrPtr q, p = NULL;
        int i;
+       str vaultRef = putName("vault",5);
 
        for (i = 1; i < mb->stop; i++) {
                q = getInstrPtr(mb, i);
-               if (q->argv[0] == target)
+               if (q->argv[0] == target && getModuleId(q) == vaultRef)
                        p = q;
                if (q == pci)
                        return p;
@@ -759,16 +760,15 @@ str VLTgenerator_leftfetchjoin(Client cn
 
 /* The operands of a join operation can either be defined on a generator */
 #define VLTjoin(TPE) \
-       { TPE f,l,s;\
-       TPE *v,w;\
+       { TPE f,l,s; TPE *v; BUN w;\
        f = *(TPE*) getArgReference(stk,p, 1);\
        l = *(TPE*) getArgReference(stk,p, 2);\
        s = *(TPE*) getArgReference(stk,p, 3);\
        for( ; cnt >0; cnt--,os++,o++){\
                v = (TPE*) Tloc(bl,BUNfirst(bl));\
-               w = floor((*v -f)/s);\
-               if ( *v >= f && *v < l && f + w * s == *v ){\
-                       *or++ = (oid) w;\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to