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

Reply via email to