Changeset: fad7857f4ed0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fad7857f4ed0
Modified Files:
sql/backends/monet5/sql_scenario.c
Branch: less_explain_info
Log Message:
Merge with default branch
diffs (truncated from 1745 to 300 lines):
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -375,9 +375,11 @@ utf8strlenmax(char *s, char *e, size_t m
size_t len = 0, len0 = 0;
char *t0 = s;
- assert(max == 0 || t != NULL);
- if (s == NULL)
+ if (s == NULL) {
+ if (t)
+ *t = NULL;
return 0;
+ }
uint32_t state = 0, codepoint = 0;
while (*s && (e == NULL || s < e)) {
@@ -385,7 +387,8 @@ utf8strlenmax(char *s, char *e, size_t m
case UTF8_ACCEPT:
if (codepoint == '\n') {
if (max) {
- *t = s - 1; /* before the \n */
+ if (t)
+ *t = s - 1; /* before the
\n */
return len;
}
len++;
@@ -401,15 +404,20 @@ utf8strlenmax(char *s, char *e, size_t m
}
if (max != 0) {
if (len > max) {
- *t = t0;
+ if (t)
+ *t = t0;
return len0;
}
if (len == max) {
- /* add any following combining (zero
width) characters */
- do {
- *t = s;
- s = nextcharn(s, e == NULL ? 4
: (size_t) (e - s), &codepoint);
- } while (codepoint > 0 &&
charwidth(codepoint) == 0);
+ if (t) {
+ /* add any following combining
(zero width)
+ * characters */
+ do {
+ *t = s;
+ s = nextcharn(s, e ==
NULL ? 4 : (size_t) (e - s),
+
&codepoint);
+ } while (codepoint > 0 &&
charwidth(codepoint) == 0);
+ }
return len;
}
}
@@ -424,7 +432,7 @@ utf8strlenmax(char *s, char *e, size_t m
break;
}
}
- if (max != 0)
+ if (t)
*t = s;
return len;
}
@@ -461,7 +469,7 @@ SQLrow(int *len, int *numeric, char **re
if (trim == 1) {
for (i = 0; i < fields; i++) {
if ((t = rest[i]) != NULL &&
- utf8strlen(t, NULL) > (size_t) len[i]) {
+ utf8strlenmax(t, NULL, (size_t) len[i] + 10,
NULL) > (size_t) len[i]) {
/* eat leading whitespace */
while (*t != 0 && my_isspace(*t))
t++;
@@ -481,7 +489,7 @@ SQLrow(int *len, int *numeric, char **re
first ? '|' : i > 0 && cutafter[i
- 1] == 0 ? '>' : ':',
len[i], "");
} else {
- ulen = utf8strlen(rest[i], NULL);
+ ulen = utf8strlenmax(rest[i], NULL, len[i], &t);
if (first && trim == 2) {
/* calculate the height of
@@ -490,7 +498,7 @@ SQLrow(int *len, int *numeric, char **re
* correction for a terminal
* screen (1.62 * 2 -> 3 :
* 9.72~10) */
- if (ulen > (size_t) len[i]) {
+ if (ulen > (size_t) len[i] || *t) {
cutafter[i] = 3 * len[i] / 10;
if (cutafter[i] == 1)
cutafter[i]++;
@@ -503,11 +511,9 @@ SQLrow(int *len, int *numeric, char **re
/* break the string into pieces and
* left-adjust them in the column */
- t = strchr(rest[i], '\n');
- if (ulen > (size_t) len[i] || t) {
+ if (ulen > (size_t) len[i] || *t) {
char *s;
- t = utf8skip(rest[i], len[i]);
if (trim == 1) {
while (t > rest[i] &&
!my_isspace(*t))
while ((*--t & 0xC0) ==
0x80)
@@ -519,7 +525,7 @@ SQLrow(int *len, int *numeric, char **re
first ? '|' : i > 0 &&
cutafter[i - 1] == 0 ? '>' : ':');
if (numeric[i])
mnstr_printf(toConsole, "%*s",
- (int) (len[i] -
(ulen - utf8strlen(t, NULL))),
+ (int) (len[i] -
ulen),
"");
s = t;
@@ -529,7 +535,8 @@ SQLrow(int *len, int *numeric, char **re
if (trim == 2 && *s == '\n')
s++;
if (*s && cutafter[i] == 0) {
- t = utf8skip(rest[i], len[i] -
2);
+ size_t x =
utf8strlenmax(rest[i], NULL, len[i] - 2, &t);
+// t = utf8skip(rest[i], len[i] -
2);
s = t;
if (trim == 1)
while (my_isspace(*s))
@@ -559,7 +566,7 @@ SQLrow(int *len, int *numeric, char **re
}
}
mnstr_printf(toConsole,
"...%*s",
- len[i] - 2 - (int)
utf8strlen(rest[i], t),
+ len[i] - 2 - (int)
x,
"");
croppedfields++;
} else {
@@ -588,7 +595,7 @@ SQLrow(int *len, int *numeric, char **re
mnstr_write(toConsole, " ", 1,
1);
if (!numeric[i])
mnstr_printf(toConsole,
"%*s",
- (int)
(len[i] - (ulen - utf8strlen(t, NULL))),
+ (int)
(len[i] - ulen),
"");
}
rest[i] = *s ? s : 0;
@@ -1328,7 +1335,8 @@ sigint_handler(int signum)
static void
SQLrenderer(MapiHdl hdl)
{
- int i, total, lentotal, vartotal, minvartotal;
+ int i;
+ int64_t total, lentotal, vartotal, minvartotal;
int fields, rfields, printfields = 0, max = 1, graphwaste = 0;
int *len = NULL, *hdr = NULL, *numeric = NULL;
char **rest = NULL;
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2696,7 +2696,7 @@ read_line(Mapi mid)
ssize_t len;
if (mid->blk.lim - mid->blk.end < BLOCK) {
- int len;
+ size_t len;
len = mid->blk.lim;
if (mid->blk.nxt <= BLOCK) {
@@ -2716,7 +2716,7 @@ read_line(Mapi mid)
/* fetch one more block */
if (mid->trace)
- printf("fetch next block: start at:%d\n", mid->blk.end);
+ printf("fetch next block: start at:%zu\n",
mid->blk.end);
for (;;) {
len = mnstr_read(mid->from, mid->blk.buf +
mid->blk.end, 1, BLOCK);
if (len == -1 && mnstr_errnr(mid->from) ==
MNSTR_INTERRUPT) {
@@ -2750,7 +2750,7 @@ read_line(Mapi mid)
mid->blk.buf[mid->blk.end + 1] = '\n';
mid->blk.buf[mid->blk.end + 2] = 0;
}
- mid->blk.end += (int) len;
+ mid->blk.end += len;
}
if (mid->trace) {
printf("got complete block: \n");
@@ -2761,7 +2761,7 @@ read_line(Mapi mid)
assert(nl);
*nl++ = 0;
reply = mid->blk.buf + mid->blk.nxt;
- mid->blk.nxt = (int) (nl - mid->blk.buf);
+ mid->blk.nxt = nl - mid->blk.buf;
if (mid->trace)
printf("read_line:%s\n", reply);
@@ -3193,7 +3193,7 @@ parse_header_line(MapiHdl hdl, char *lin
result->fieldcnt = n;
for (i = 0; i < n; i++) {
if (anchors[i])
- result->fields[i].columnlength =
atoi(anchors[i]);
+ result->fields[i].columnlength = (int64_t)
strtoll(anchors[i], NULL, 10);
}
} else if (strcmp(tag, "table_name") == 0) {
result->fieldcnt = n;
@@ -4584,7 +4584,7 @@ mapi_get_len(MapiHdl hdl, int fnr)
mapi_hdl_check0(hdl);
if ((result = hdl->result) != 0 && fnr >= 0 && fnr < result->fieldcnt)
- return result->fields[fnr].columnlength;
+ return result->fields[fnr].columnlength > INT_MAX ? INT_MAX :
(int) result->fields[fnr].columnlength;
mapi_setError(hdl->mid, "Illegal field number", __func__, MERROR);
return 0;
}
diff --git a/clients/mapilib/mapi_intern.h b/clients/mapilib/mapi_intern.h
--- a/clients/mapilib/mapi_intern.h
+++ b/clients/mapilib/mapi_intern.h
@@ -122,7 +122,7 @@ struct MapiColumn {
char *tablename;
char *columnname;
char *columntype;
- int columnlength;
+ int64_t columnlength;
int digits;
int scale;
};
@@ -210,9 +210,9 @@ struct MapiStatement {
struct BlockCache {
char *buf;
- int lim;
- int nxt;
- int end;
+ size_t lim;
+ size_t nxt;
+ size_t end;
bool eos; /* end of sequence */
};
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3594,7 +3594,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
if (BATordered(b)) {
if (skipnil && !bi.nonil) {
- pos = binsearch(NULL, 0, bi.type, bi.base,
+ pos = binsearch(NULL, bi.type, bi.base,
bi.vh ? bi.vh->base : NULL,
bi.width, 0, bi.count,
ATOMnilptr(bi.type), 1, 1);
@@ -3607,7 +3607,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
}
} else if (BATordered_rev(b)) {
if (skipnil && !bi.nonil) {
- pos = binsearch(NULL, 0, bi.type, bi.base,
+ pos = binsearch(NULL, bi.type, bi.base,
bi.vh ? bi.vh->base : NULL,
bi.width, 0, bi.count,
ATOMnilptr(bi.type), -1, 0);
@@ -3647,7 +3647,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
BUN r;
if (skipnil && !bi.nonil) {
MT_thread_setalgorithm(usepoidx ?
"binsearch on parent oidx" : "binsearch on oidx");
- r = binsearch(ords, 0, bi.type, bi.base,
+ r = binsearch(ords, bi.type, bi.base,
bi.vh ? bi.vh->base :
NULL,
bi.width, 0, bi.count,
ATOMnilptr(bi.type), 1,
1);
@@ -3851,10 +3851,10 @@ BATmax(BAT *b, void *aggr)
/* quantiles/median */
#if SIZEOF_OID == SIZEOF_INT
-#define binsearch_oid(indir, offset, vals, lo, hi, v, ordering, last)
binsearch_int(indir, offset, (const int *) vals, lo, hi, (int) (v), ordering,
last)
+#define binsearch_oid(indir, vals, lo, hi, v, ordering, last)
binsearch_int(indir, (const int *) vals, lo, hi, (int) (v), ordering, last)
#endif
#if SIZEOF_OID == SIZEOF_LNG
-#define binsearch_oid(indir, offset, vals, lo, hi, v, ordering, last)
binsearch_lng(indir, offset, (const lng *) vals, lo, hi, (lng) (v), ordering,
last)
+#define binsearch_oid(indir, vals, lo, hi, v, ordering, last)
binsearch_lng(indir, (const lng *) vals, lo, hi, (lng) (v), ordering, last)
#endif
#define DO_QUANTILE_AVG(TPE) \
@@ -4013,10 +4013,10 @@ doBATgroupquantile(BAT *b, BAT *g, BAT *
prev = grps[r];
/* search for end of current group (grps is
* sorted so we can use binary search) */
- p = binsearch_oid(NULL, 0, grps, r, q - 1, prev, 1, 1);
+ p = binsearch_oid(NULL, grps, r, q - 1, prev, 1, 1);
if (skip_nils && !bi.nonil) {
/* within group, locate start of non-nils */
- r = binsearch(NULL, 0, tp, bi.base,
+ r = binsearch(NULL, tp, bi.base,
bi.vh ? bi.vh->base : NULL,
bi.width, r, p, nil,
1, 1);
@@ -4136,7 +4136,7 @@ doBATgroupquantile(BAT *b, BAT *g, BAT *
bi = bat_iterator(b);
if (skip_nils && !bi.nonil)
- r = binsearch(ords, 0, tp, bi.base,
+ r = binsearch(ords, tp, bi.base,
bi.vh ? bi.vh->base : NULL,
bi.width, 0, p,
nil, 1, 1);
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]