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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list