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]
