Changeset: d0c985a2eda3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d0c985a2eda3
Modified Files:
sql/backends/monet5/UDF/capi/capi.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_cat.c
sql/server/rel_dump.c
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_planner.c
sql/server/rel_rel.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/storage/bat/bat_logger.c
sql/storage/store.c
sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
Branch: mangled
Log Message:
Merge with default.
diffs (truncated from 1767 to 300 lines):
diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -3225,12 +3225,11 @@ convertCase(BAT *from, BAT *to, str *buf
const Hash *h = from->thash;
const int *restrict fromb = (const int *restrict) from->theap->base;
const int *restrict tob = (const int *restrict) to->theap->base;
- size_t nextlen = len + 1;
/* the from and to bats are not views */
assert(from->tbaseoff == 0);
assert(to->tbaseoff == 0);
- CHECK_STR_BUFFER_LENGTH(buf, buflen, nextlen, malfunc);
+ CHECK_STR_BUFFER_LENGTH(buf, buflen, len + 1, malfunc);
dst = *buf;
while (src < end) {
int c;
@@ -3263,7 +3262,16 @@ convertCase(BAT *from, BAT *to, str *buf
size_t off = dst - *buf;
size_t nextlen = (len += 4 + (end - src)) + 1;
- CHECK_STR_BUFFER_LENGTH(buf, buflen, nextlen, malfunc);
+ /* Don't use CHECK_STR_BUFFER_LENGTH here, because it
+ * does GDKmalloc instead of GDKrealloc and data could
be lost */
+ if (nextlen > *buflen) {
+ size_t newlen = ((nextlen + 1023) & ~1023); /*
align to a multiple of 1024 bytes */
+ str newbuf = GDKrealloc(*buf, newlen);
+ if (!newbuf)
+ throw(MAL, malfunc, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *buf = newbuf;
+ *buflen = newlen;
+ }
dst = *buf + off;
}
UTF8_PUTCHAR(c, dst);
@@ -4718,7 +4726,7 @@ STRspace(str *res, const int *ll)
if (is_int_nil(l) || l < 0) {
*res = GDKstrdup(str_nil);
} else {
- char space[] = " ", *s= space;
+ const char space[] = " ", *s= space;
size_t buflen = INITIAL_STR_BUFFER_LENGTH;
*res = NULL;
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -317,7 +317,7 @@ STRbatSpace(Client cntxt, MalBlkPtr mb,
int *restrict vals, x;
str buf = GDKmalloc(buflen), msg = MAL_SUCCEED;
bool nils = false;
- char space[]= " ", *s = space;
+ const char space[]= " ", *s = space;
struct canditer ci1 = {0};
oid off1;
bat *res = getArgReference_bat(stk, pci, 0), *bid =
getArgReference_bat(stk, pci, 1),
diff --git a/sql/backends/monet5/UDF/capi/capi.c
b/sql/backends/monet5/UDF/capi/capi.c
--- a/sql/backends/monet5/UDF/capi/capi.c
+++ b/sql/backends/monet5/UDF/capi/capi.c
@@ -377,7 +377,7 @@ static daytime time_from_data(cudf_data_
static void data_from_timestamp(timestamp d, cudf_data_timestamp *ptr);
static timestamp timestamp_from_data(cudf_data_timestamp *ptr);
-static char valid_path_characters[] = "abcdefghijklmnopqrstuvwxyz";
+static const char valid_path_characters[] = "abcdefghijklmnopqrstuvwxyz";
static str
empty_return(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, size_t retcols, oid
seqbase)
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4221,10 +4221,6 @@ sql_insert_check_null(backend *be, sql_t
stmt *s = i;
char *msg = NULL;
- /* foreach column add predicate */
- if (add_column_predicate(be, c) != LOG_OK)
- return sql_error(sql, 10, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
-
if (!(s->key && s->nrcols == 0)) {
s = stmt_selectnil(be, column(be, i));
s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1);
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -1467,7 +1467,7 @@ SQLdrop_schema(Client cntxt, MalBlkPtr m
if (s->system)
throw(SQL,"sql.drop_schema",SQLSTATE(42000) "DROP SCHEMA:
access denied for '%s'", sname);
if (sql_schema_has_user(sql, s))
- throw(SQL,"sql.drop_schema",SQLSTATE(2BM37) "DROP SCHEMA:
unable to drop schema '%s' (there are database objects which depend on it)",
sname);
+ throw(SQL,"sql.drop_schema",SQLSTATE(2BM37) "DROP SCHEMA:
unable to drop schema '%s' (there are database users using it as session's
default schema)", sname);
if (!action /* RESTRICT */ && (
os_size(s->tables, tr) || os_size(s->types, tr) ||
os_size(s->funcs, tr) || os_size(s->seqs, tr)))
throw(SQL,"sql.drop_schema",SQLSTATE(2BM37) "DROP SCHEMA:
unable to drop schema '%s' (there are database objects which depend on it)",
sname);
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -1501,7 +1501,7 @@ SQLprod(Client cntxt, MalBlkPtr mb, MalS
str
SQLavg(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int tpe = getArgType(mb, pci, 1), frame_type;
+ int tpe = getArgType(mb, pci, 1), frame_type = 0;
BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL, *s = NULL, *e = NULL;
str msg = SQLanalytics_args(&r, &b, &frame_type, &p, &o, &s, &e, cntxt,
mb, stk, pci, TYPE_dbl, "sql.avg");
bat *res = NULL;
@@ -1561,7 +1561,7 @@ bailout:
str
SQLavginteger(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int tpe = getArgType(mb, pci, 1), frame_type;
+ int tpe = getArgType(mb, pci, 1), frame_type = 0;
BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL, *s = NULL, *e = NULL;
str msg = SQLanalytics_args(&r, &b, &frame_type, &p, &o, &s, &e, cntxt,
mb, stk, pci, 0, "sql.avg");
bat *res = NULL;
@@ -1606,7 +1606,7 @@ static str
do_stddev_and_variance(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci, const char *op,
gdk_return (*func)(BAT *, BAT *, BAT
*, BAT *, BAT *, BAT *, int, int))
{
- int tpe = getArgType(mb, pci, 1), frame_type;
+ int tpe = getArgType(mb, pci, 1), frame_type = 0;
BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL, *s = NULL, *e = NULL;
str msg = SQLanalytics_args(&r, &b, &frame_type, &p, &o, &s, &e, cntxt,
mb, stk, pci, TYPE_dbl, op);
bat *res = NULL;
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -2124,6 +2124,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return NULL;
rel = rel_crossproduct(sql->sa, lrel, rrel, j);
rel->exps = exps;
+ set_processed(rel);
}
break;
case 'l':
@@ -2180,6 +2181,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return NULL;
rel = rel_crossproduct(sql->sa, lrel, rrel, j);
rel->exps = exps;
+ set_processed(rel);
break;
case 'u':
if (j == op_basetable) {
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2077,7 +2077,12 @@ exps_rel_get_rel(sql_allocator *sa, list
if (exp_has_rel(e)) {
if (!(r = exp_rel_get_rel(sa, e)))
return NULL;
- xp = xp ? rel_crossproduct(sa, xp, r, op_full) : r;
+ if (xp) {
+ xp = rel_crossproduct(sa, xp, r, op_full);
+ set_processed(xp);
+ } else {
+ xp = r;
+ }
}
}
return xp;
@@ -2125,7 +2130,12 @@ exp_rel_get_rel(sql_allocator *sa, sql_e
if (exps_have_rel_exp(e->r)) {
if (!(r = exps_rel_get_rel(sa, e->r)))
return NULL;
- xp = xp ? rel_crossproduct(sa, xp, r, op_join)
: r;
+ if (xp) {
+ xp = rel_crossproduct(sa, xp, r,
op_join);
+ set_processed(xp);
+ } else {
+ xp = r;
+ }
}
} else if (e->flag == cmp_in || e->flag == cmp_notin) {
if (exp_has_rel(e->l))
@@ -2133,7 +2143,12 @@ exp_rel_get_rel(sql_allocator *sa, sql_e
if (exps_have_rel_exp(e->r)) {
if (!(r = exps_rel_get_rel(sa, e->r)))
return NULL;
- xp = xp ? rel_crossproduct(sa, xp, r, op_join)
: r;
+ if (xp) {
+ xp = rel_crossproduct(sa, xp, r,
op_join);
+ set_processed(xp);
+ } else {
+ xp = r;
+ }
}
} else {
if (exp_has_rel(e->l))
@@ -2141,12 +2156,22 @@ exp_rel_get_rel(sql_allocator *sa, sql_e
if (exp_has_rel(e->r)) {
if (!(r = exp_rel_get_rel(sa, e->r)))
return NULL;
- xp = xp ? rel_crossproduct(sa, xp, r, op_join)
: r;
+ if (xp) {
+ xp = rel_crossproduct(sa, xp, r,
op_join);
+ set_processed(xp);
+ } else {
+ xp = r;
+ }
}
if (e->f && exp_has_rel(e->f)) {
if (!(r = exp_rel_get_rel(sa, e->f)))
return NULL;
- xp = xp ? rel_crossproduct(sa, xp, r, op_join)
: r;
+ if (xp) {
+ xp = rel_crossproduct(sa, xp, r,
op_join);
+ set_processed(xp);
+ } else {
+ xp = r;
+ }
}
}
return xp;
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -665,6 +665,7 @@ order_joins(visitor *v, list *rels, list
top = rel_crossproduct(v->sql->sa, l, r, op_join);
if (rsingle)
set_single(r);
+ set_processed(top);
rel_join_add_exp(v->sql->sa, top, cje);
/* all other join expressions on these 2 relations */
@@ -734,6 +735,7 @@ order_joins(visitor *v, list *rels, list
top = rel_crossproduct(v->sql->sa, top, r,
op_join);
if (rsingle)
set_single(r);
+ set_processed(top);
rel_join_add_exp(v->sql->sa, top, cje);
/* all join expressions on these tables */
@@ -770,6 +772,7 @@ order_joins(visitor *v, list *rels, list
top = rel_crossproduct(v->sql->sa, top, nr,
op_join);
if (rsingle)
set_single(nr);
+ set_processed(top);
} else
top = nr;
}
@@ -873,6 +876,7 @@ push_in_join_down(mvc *sql, list *rels,
sql_rel *nr = rel_crossproduct(sql->sa,
l, r, op_join);
if (rsingle)
set_single(r);
+ set_processed(nr);
rel_join_add_exp(sql->sa, nr, je);
list_append(rels, nr);
list_remove_data(rels, NULL, l);
@@ -1393,6 +1397,7 @@ rel_push_count_down(visitor *v, sql_rel
}
cp = rel_crossproduct(v->sql->sa, gbl, gbr, op_join);
+ set_processed(cp);
if (!(nce = rel_binop_(v->sql, NULL, cnt1, cnt2, "sys",
"sql_mul", card_value))) {
v->sql->session->status = 0;
@@ -4690,6 +4695,7 @@ rel_push_join_down(visitor *v, sql_rel *
/* push join's left side (as semijoin) down group by */
l = gb->l = rel_crossproduct(v->sql->sa, gb->l, l,
op_semi);
l->exps = jes;
+ set_processed(l);
v->changes++;
return rel;
}
@@ -4821,11 +4827,13 @@ rel_push_semijoin_down_or_up(visitor *v,
else
l = rel_crossproduct(v->sql->sa, rel_dup(lr),
rel_dup(r), op);
l->exps = nsexps;
+ set_processed(l);
if (left)
l = rel_crossproduct(v->sql->sa, l, rel_dup(lr), lop);
else
l = rel_crossproduct(v->sql->sa, rel_dup(ll), l, lop);
l->exps = njexps;
+ set_processed(l);
rel_destroy(rel);
rel = l;
if (level <= 0)
@@ -4938,6 +4946,8 @@ rel_push_join_down_union(visitor *v, sql
nr = rel_crossproduct(v->sql->sa, lr, rel_dup(or),
rel->op);
nl->exps = exps_copy(v->sql, exps);
nr->exps = exps_copy(v->sql, exps);
+ set_processed(nl);
+ set_processed(nr);
nl = rel_project(v->sql->sa, nl,
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr,
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
@@ -4981,6 +4991,8 @@ rel_push_join_down_union(visitor *v, sql
nr = rel_crossproduct(v->sql->sa, lr, rr, rel->op);
nl->exps = exps_copy(v->sql, exps);
nr->exps = exps_copy(v->sql, exps);
+ set_processed(nl);
+ set_processed(nr);
nl = rel_project(v->sql->sa, nl,
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr,
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
@@ -5010,6 +5022,8 @@ rel_push_join_down_union(visitor *v, sql
nr = rel_crossproduct(v->sql->sa, rel_dup(ol), rr,
rel->op);
nl->exps = exps_copy(v->sql, exps);
nr->exps = exps_copy(v->sql, exps);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list