Changeset: 07f9dc08e500 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/07f9dc08e500
Modified Files:
        monetdb5/modules/atoms/json.c
Branch: default
Log Message:

Merge with Jan2022 branch.


diffs (163 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
@@ -2706,87 +2706,82 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
                        default:
                                assert(0);
                        }
-                       bn->tnil = nils != 0;
-                       bn->tnonil = nils == 0;
-                       bn->tsorted = BATcount(bn) <= 1;
-                       bn->trevsorted = BATcount(bn) <= 1;
-                       bn->tkey = BATcount(bn) <= 1;
-                       goto out;
-               }
-               grps = (const oid *) Tloc(g, 0);
-               prev = grps[0];
-               for (p = 0, q = BATcount(g); p <= q; p++) {
-                       if (p == q || grps[p] != prev) {
-                               if (isnil) {
-                                       strcpy(buf, str_nil);
-                                       nils = 1;
-                               } else if (buflen == 0) {
-                                       strcpy(buf, "[  ]");
-                               } else {
-                                       strcpy(buf + buflen, " ]");
+               } else {
+                       grps = (const oid *) Tloc(g, 0);
+                       prev = grps[0];
+                       for (p = 0, q = BATcount(g); p <= q; p++) {
+                               if (p == q || grps[p] != prev) {
+                                       if (isnil) {
+                                               strcpy(buf, str_nil);
+                                               nils = 1;
+                                       } else if (buflen == 0) {
+                                               strcpy(buf, "[  ]");
+                                       } else {
+                                               strcpy(buf + buflen, " ]");
+                                       }
+                                       while (BATcount(bn) < prev - min) {
+                                               if (bunfastapp_nocheckVAR(bn, 
str_nil) != GDK_SUCCEED)
+                                                       goto bunins_failed;
+                                               nils = 1;
+                                       }
+                                       if (bunfastapp_nocheckVAR(bn, buf) != 
GDK_SUCCEED)
+                                               goto bunins_failed;
+                                       if (p == q)
+                                               break;
+                                       buflen = 0;
+                                       isnil = 0;
+                                       prev = grps[p];
                                }
-                               while (BATcount(bn) < prev - min) {
-                                       if (bunfastapp_nocheckVAR(bn, str_nil) 
!= GDK_SUCCEED)
-                                               goto bunins_failed;
-                                       nils = 1;
+                               if (isnil)
+                                       continue;
+                               switch (b->ttype) {
+                               case TYPE_str: {
+                                       const char *v = (const char *) 
BUNtvar(bi, p);
+                                       if (strNil(v)) {
+                                               if (skip_nils)
+                                                       continue;
+                                               isnil = 1;
+                                       } else {
+                                               /* '[' or ',' plus space and 
null terminator and " ]" final string */
+                                               
JSON_AGGR_CHECK_NEXT_LENGTH(strlen(v) * 2 + 7);
+                                               char *dst = buf + buflen, *odst 
= dst;
+                                               if (buflen == 0)
+                                                       *dst++ = '[';
+                                               else
+                                                       *dst++ = ',';
+                                               *dst++ = ' ';
+                                               *dst++ = '"';
+                                               JSON_STR_CPY;
+                                               *dst++ = '"';
+                                               buflen += (dst - odst);
+                                       }
+                               } break;
+                               case TYPE_dbl: {
+                                       dbl val = vals[p];
+                                       if (is_dbl_nil(val)) {
+                                               if (skip_nils)
+                                                       continue;
+                                               isnil = 1;
+                                       } else {
+                                               /* '[' or ',' plus space and 
null terminator and " ]" final string */
+                                               JSON_AGGR_CHECK_NEXT_LENGTH(130 
+ 6);
+                                               char *dst = buf + buflen;
+                                               if (buflen == 0)
+                                                       *dst++ = '[';
+                                               else
+                                                       *dst++ = ',';
+                                               *dst++ = ' ';
+                                               buflen += 2;
+                                               buflen += snprintf(buf + 
buflen, maxlen - buflen, "%f", val);
+                                       }
+                               } break;
+                               default:
+                                       assert(0);
                                }
-                               if (bunfastapp_nocheckVAR(bn, buf) != 
GDK_SUCCEED)
-                                       goto bunins_failed;
-                               if (p == q)
-                                       break;
-                               buflen = 0;
-                               isnil = 0;
-                               prev = grps[p];
                        }
-                       if (isnil)
-                               continue;
-                       switch (b->ttype) {
-                       case TYPE_str: {
-                               const char *v = (const char *) BUNtvar(bi, p);
-                               if (strNil(v)) {
-                                       if (skip_nils)
-                                               continue;
-                                       isnil = 1;
-                               } else {
-                                       /* '[' or ',' plus space and null 
terminator and " ]" final string */
-                                       JSON_AGGR_CHECK_NEXT_LENGTH(strlen(v) * 
2 + 7);
-                                       char *dst = buf + buflen, *odst = dst;
-                                       if (buflen == 0)
-                                               *dst++ = '[';
-                                       else
-                                               *dst++ = ',';
-                                       *dst++ = ' ';
-                                       *dst++ = '"';
-                                       JSON_STR_CPY;
-                                       *dst++ = '"';
-                                       buflen += (dst - odst);
-                               }
-                       } break;
-                       case TYPE_dbl: {
-                               dbl val = vals[p];
-                               if (is_dbl_nil(val)) {
-                                       if (skip_nils)
-                                               continue;
-                                       isnil = 1;
-                               } else {
-                                       /* '[' or ',' plus space and null 
terminator and " ]" final string */
-                                       JSON_AGGR_CHECK_NEXT_LENGTH(130 + 6);
-                                       char *dst = buf + buflen;
-                                       if (buflen == 0)
-                                               *dst++ = '[';
-                                       else
-                                               *dst++ = ',';
-                                       *dst++ = ' ';
-                                       buflen += 2;
-                                       buflen += snprintf(buf + buflen, maxlen 
- buflen, "%f", val);
-                               }
-                       } break;
-                       default:
-                               assert(0);
-                       }
+                       BBPunfix(t2->batCacheid);
+                       t2 = NULL;
                }
-               BBPunfix(t2->batCacheid);
-               t2 = NULL;
        } else {
                switch (b->ttype) {
                case TYPE_str:
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to