MonetDB: Jun2020 - Missed case, don't apply topN merging if the ...
Changeset: cc438cd295bf for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cc438cd295bf Modified Files: sql/server/rel_optimizer.c Branch: Jun2020 Log Message: Missed case, don't apply topN merging if the under relation has more than one reference. Added merging of offsets if expressions are atoms diffs (97 lines): 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 @@ -2079,28 +2079,47 @@ rel_push_topn_and_sample_down(mvc *sql, operator_type relation_type = is_topn(rel->op) ? op_topn : op_sample; sql_rel *(*func) (sql_allocator *, sql_rel *, list *) = is_topn(rel->op) ? rel_topn : rel_sample; - /* nested topN relations without offset */ - if (r && is_topn(rel->op) && is_topn(r->op) && list_length(rel->exps) == 1 && list_length(r->exps) == 1) { + /* nested topN relations */ + if (r && is_topn(rel->op) && is_topn(r->op) && !rel_is_ref(r)) { sql_exp *topN1 = rel->exps->h->data, *topN2 = r->exps->h->data; - - if (topN1->l && topN2->l) { - atom *a1 = (atom *)topN1->l, *a2 = (atom *)topN2->l; - - if (a1->tpe.type->localtype == a2->tpe.type->localtype && !a1->isnull && !a2->isnull) { - if (atom_cmp(a1, a2) < 0) { - rel->l = r->l; - r->l = NULL; - rel_destroy(r); - (*changes)++; - return rel; - } else { - rel->l = NULL; - rel_destroy(rel); - rel = r; - (*changes)++; - return rel; + sql_exp *offset1 = list_length(rel->exps) > 1 ? rel->exps->h->next->data : NULL; + sql_exp *offset2 = list_length(r->exps) > 1 ? r->exps->h->next->data : NULL; + + if (topN1->l && topN2->l && (!offset1 || offset1->l) && (!offset2 || offset2->l)) { /* no parameters */ + bool changed = false; + + if ((!offset1 || (offset1->type == e_atom && offset1->l)) && (!offset2 || (offset2->type == e_atom && offset2->l))) { /* only atoms */ + if (!offset1 && offset2) { + list_append(rel->exps, exp_copy(sql, offset2)); + changed = true; + } else if (offset1 && offset2) { /* sum offsets */ + atom *b1 = (atom *)offset1->l, *b2 = (atom *)offset2->l, *c = atom_add(b1, b2); + + if (!c) /* error, don't apply optimization, WARNING because of this the offset optimization must come before the limit one */ + return rel; + if (atom_cmp(c, b2) < 0) /* overflow */ + c = atom_int(sql->sa, sql_bind_localtype("lng"), GDK_lng_max); + offset1->l = c; + changed = true; } } + + if (topN1->type == e_atom && topN1->l && topN2->type == e_atom && topN2->l) { /* only atoms */ + atom *a1 = (atom *)topN1->l, *a2 = (atom *)topN2->l; + + if (!a2->isnull && (a1->isnull || atom_cmp(a1, a2) >= 0)) { /* topN1 is not set or is larger than topN2 */ + rel->exps->h->data = exp_copy(sql, topN2); + changed = true; + } + } + + if (changed) { + rel->l = r->l; + r->l = NULL; + rel_destroy(r); + (*changes)++; + return rel; + } } } @@ -5505,6 +5524,8 @@ find_candidate_join2semi(sql_rel *rel, b (c=find_candidate_join2semi(rel->r, swap))
MonetDB: unlock - the storage is now organised using column_storage
Changeset: 96178f0350b8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=96178f0350b8 Modified Files: gdk/gdk_logger.c monetdb5/optimizer/opt_pushselect.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_cat.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_storage.h sql/storage/bat/bat_table.c sql/storage/store.c Branch: unlock Log Message: the storage is now organised using column_storage consisting of a bat for storage and bats for updates (id,val). insert first claims a slot, which marks this slot 'deleted' in the gtrans (or any intermediate savepoint) and marked as used localy using the updates on the deleted column. Deletes are updates on the deleted column. Updates are like before treated within private bats. diffs (truncated from 1227 to 300 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1649,6 +1649,8 @@ logger_load(int debug, const char *fn, c } for( ; log_id <= lg->saved_id; log_id++) (void)logger_cleanup(lg, log_id); /* ignore error of removing file */ + } else { + lg->id = lg->saved_id+1; } return GDK_SUCCEED; error: @@ -1698,7 +1700,7 @@ logger_new(int debug, const char *fn, co .prefuncp = prefuncp, .postfuncp = postfuncp, - .id = 1, + .id = 0, .saved_id = getBBPlogno(), /* get saved log numer from bbp */ .saved_tid = (int)getBBPtransid(), /* get saved transaction id from bbp */ }; diff --git a/monetdb5/optimizer/opt_pushselect.c b/monetdb5/optimizer/opt_pushselect.c --- a/monetdb5/optimizer/opt_pushselect.c +++ b/monetdb5/optimizer/opt_pushselect.c @@ -35,6 +35,16 @@ PushNil(MalBlkPtr mb, InstrPtr p, int po return p; } +static InstrPtr +ReplaceWithNil(MalBlkPtr mb, InstrPtr p, int pos, int tpe) +{ + p = pushNil(mb, p, tpe); /* push at end */ + getArg(p, pos) = getArg(p, p->argc-1); + p->argc--; + return p; +} + + #define MAX_TABLES 64 typedef struct subselect_t { @@ -611,12 +621,12 @@ OPTpushselectImplementation(Client cntxt } if (q && getModuleId(q) == sqlRef && getFunctionId(q) == deltaRef) { InstrPtr r = copyInstruction(p); - InstrPtr t = copyInstruction(p); + InstrPtr s = copyInstruction(p); InstrPtr u = copyInstruction(q); - if( r == NULL || t== NULL ||u == NULL){ + if( r == NULL || s == NULL ||u == NULL){ freeInstruction(r); - freeInstruction(t); + freeInstruction(s); freeInstruction(u); GDKfree(vars); GDKfree(nvars); @@ -631,17 +641,28 @@ OPTpushselectImplementation(Client cntxt getArg(r, 1) = getArg(q, 1); /* column */ r->typechk = TYPE_UNKNOWN; pushInstruction(mb,r); - getArg(t, 0) = newTmpVariable(mb, newBatType(TYPE_oid)); - setVarCList(mb,getArg(t,0)); - pushInstruction(mb,t); + getArg(s, 0) = newTmpVariable(mb, newBatType(TYPE_oid)); + setVarCList(mb,getArg(s,0)); + getArg(s, 1) = getArg(q, 3); /* updates */ + s = ReplaceWithNil(mb, s, 2, TYPE_bat); /* no candidate list */ + setArgType(mb, s, 2, newBatType(TYPE_oid)); + /* make sure to resolve again */ + s->token = ASSIGNsymbol; + s->typechk = TYPE_UNKNOWN; + s->fcn = NULL; + s->blk = NULL; + pushInstruction(mb,s); setFunctionId(u, subdeltaRef); getArg(u, 0) = getArg(p,0); getArg(u, 1) = getArg(r,0); getArg(u, 2) = getArg(p,2); /* pre-cands */ getArg(u, 3) = getArg(q,2); /* update ids */ - u = pushArgument(mb, u, getArg(t,0)); + u = pushArgument(mb, u, getArg(s,0)); /* selected updated values ids */ + u->token = ASSIGNsymbol;
MonetDB: Jun2020 - merged
Changeset: ce3dc71b7633 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce3dc71b7633 Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c Branch: Jun2020 Log Message: merged diffs (160 lines): 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 @@ -1525,7 +1525,7 @@ exp_is_eqjoin(sql_exp *e) } static sql_exp * -rel_find_exp_( sql_rel *rel, sql_exp *e) +rel_find_exp_and_corresponding_rel_( sql_rel *rel, sql_exp *e, sql_rel **res) { sql_exp *ne = NULL; @@ -1540,9 +1540,11 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) ne = exps_bind_column(rel->exps, e->r, NULL, 1); } } + if (ne && res) + *res = rel; return ne; case e_convert: - return rel_find_exp_(rel, e->l); + return rel_find_exp_and_corresponding_rel_(rel, e->l, res); case e_aggr: case e_func: if (e->l) { @@ -1551,7 +1553,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) ne = n->data; while (ne != NULL && n != NULL) { - ne = rel_find_exp_(rel, n->data); + ne = rel_find_exp_and_corresponding_rel_(rel, n->data, res); n = n->next; } return ne; @@ -1568,7 +1570,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) ne = n->data; while (ne != NULL && n != NULL) { - ne = rel_find_exp_(rel, n->data); + ne = rel_find_exp_and_corresponding_rel_(rel, n->data, res); n = n->next; } return ne; @@ -1579,9 +1581,9 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) } sql_exp * -rel_find_exp( sql_rel *rel, sql_exp *e) +rel_find_exp_and_corresponding_rel(sql_rel *rel, sql_exp *e, sql_rel **res) { - sql_exp *ne = rel_find_exp_(rel, e); + sql_exp *ne = rel_find_exp_and_corresponding_rel_(rel, e, res); if (rel && !ne) { switch(rel->op) { @@ -1589,38 +1591,53 @@ rel_find_exp( sql_rel *rel, sql_exp *e) case op_right: case op_full: case op_join: - ne = rel_find_exp(rel->l, e); + ne = rel_find_exp_and_corresponding_rel(rel->l, e, res); if (!ne) - ne = rel_find_exp(rel->r, e); + ne = rel_find_exp_and_corresponding_rel(rel->r, e, res); break; case op_table: if (rel->exps && e->type == e_column && e->l && exps_bind_column2(rel->exps, e->l, e->r)) ne = e; + if (ne && res) + *res = rel; break; case op_union: case op_except: case op_inter: { if (rel->l) - ne = rel_find_exp(rel->l, e); - else if (rel->exps && e->l) + ne = rel_find_exp_and_corresponding_rel(rel->l, e, res); + else if (rel->exps && e->l) { ne = exps_bind_column2(rel->exps, e->l, e->r); - else if (rel->exps) + if (ne && res) + *res = rel; + } else if (rel->exps) { ne = exps_bind_column(rel->exps, e->r, NULL, 1); + if (ne && res) + *res = rel; + } } break; case op_basetable: if (rel->exps && e->type == e_column && e->l) ne = exps_bind_column2(rel->exps, e->l, e->r); + if (ne && res) + *res = rel; break; default: if (!is_project(rel->op) && rel->l) - ne = rel_find_exp(rel->l, e); + ne = rel_find_exp_and_corresponding_rel(rel->l, e, res); } } return ne; } +sql_exp * +rel_find_exp( sql_rel *rel, sql_exp *e) +{ + return rel_find_exp_and_corresponding_rel(rel, e, NULL); +} + int exp_is_true(mvc *sql, sql_exp *e) { diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -123,6 +123,7 @@ extern
MonetDB: Jun2020 - add more projects around relations when intro...
Changeset: 2f87799f6ece for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f87799f6ece Modified Files: sql/server/rel_optimizer.c sql/server/rel_unnest.c sql/test/mergetables/Tests/sqlsmith-exists2.stable.out sql/test/subquery/Tests/subquery5.stable.out Branch: Jun2020 Log Message: add more projects around relations when introduction set operators reduce explosion of relations when rewriting outer joins into inner + union diffs (215 lines): 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 @@ -7701,7 +7701,6 @@ rel_simplify_predicates(mvc *sql, sql_re } else if (is_atom(r->type) && r->l) { /* direct literal */ atom *a = r->l; int flag = a->data.val.bval; - list *args = l->l; assert(list_length(args) == 1); l = args->h->data; diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2966,7 +2966,7 @@ include_tid(sql_rel *r) static sql_rel * rewrite_outer2inner_union(mvc *sql, sql_rel *rel, int *changes) { - if (is_outerjoin(rel->op) && !list_empty(rel->exps) && rel_has_freevar(sql,rel)) { + if (is_outerjoin(rel->op) && !list_empty(rel->exps) && (rel_has_freevar(sql,rel->l) || rel_has_freevar(sql,rel->r) || exps_have_rel_exp(rel->exps))) { sql_exp *f = exp_atom_bool(sql->sa, 0); int nrcols = rel->nrcols; @@ -2975,37 +2975,57 @@ rewrite_outer2inner_union(mvc *sql, sql_ nrcols += include_tid(rel->r); rel->nrcols = nrcols; if (is_left(rel->op)) { - sql_rel *except = rel_setop(sql->sa, rel_dup(rel->l), rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->l, NULL, 1, 1)), op_except); + sql_rel *except = rel_setop(sql->sa, + rel_project(sql->sa, rel_dup(rel->l), rel_projections(sql, rel->l, NULL, 1, 1)), + rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->l, NULL, 1, 1)), op_except); except->exps = rel_projections(sql, rel->l, NULL, 1, 1); sql_rel *nrel = rel_crossproduct(sql->sa, except, rel_dup(rel->r), op_left); rel_join_add_exp(sql->sa, nrel, f); rel->op = op_join; - nrel = rel_setop(sql->sa, rel, nrel, op_union); + nrel = rel_setop(sql->sa, + rel_project(sql->sa, rel, rel_projections(sql, rel, NULL, 1, 1)), + rel_project(sql->sa, nrel, rel_projections(sql, nrel, NULL, 1, 1)), + op_union); rel_set_exps(nrel, rel_projections(sql, rel, NULL, 1, 1)); return nrel; } else if (is_right(rel->op)) { - sql_rel *except = rel_setop(sql->sa, rel_dup(rel->r), rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->r, NULL, 1, 1)), op_except); + sql_rel *except = rel_setop(sql->sa, + rel_project(sql->sa, rel_dup(rel->r), rel_projections(sql, rel->r, NULL, 1, 1)), + rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->r, NULL, 1, 1)), op_except); except->exps = rel_projections(sql, rel->r, NULL, 1, 1); sql_rel *nrel = rel_crossproduct(sql->sa, rel_dup(rel->l), except, op_right); rel_join_add_exp(sql->sa, nrel, f); rel->op = op_join; - nrel = rel_setop(sql->sa, rel, nrel, op_union); + nrel = rel_setop(sql->sa, + rel_project(sql->sa, rel, rel_projections(sql, rel, NULL, 1, 1)), + rel_project(sql->sa, nrel, rel_projections(sql, nrel, NULL, 1, 1)), + op_union); rel_set_exps(nrel, rel_projections(sql, rel, NULL, 1, 1)); return nrel; } else if (is_full(rel->op)) { - sql_rel *except = rel_setop(sql->sa, rel_dup(rel->l), rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->l, NULL, 1, 1)), op_except); + sql_rel *except = rel_setop(sql->sa, + rel_project(sql->sa, rel_dup(rel->l), rel_projections(sql, rel->l, NULL, 1, 1)), +
MonetDB: mbedded - merged with default
Changeset: f6ef69aad4ed for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f6ef69aad4ed Modified Files: gdk/gdk_bbp.c gdk/gdk_cross.c gdk/gdk_logger.c gdk/gdk_posix.c gdk/gdk_storage.c gdk/gdk_string.c gdk/gdk_system.c gdk/gdk_tracer.c gdk/gdk_utils.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_select.c sql/server/rel_unnest.c sql/server/sql_parser.y sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out sql/test/mergetables/Tests/sqlsmith-exists2.sql sql/test/mergetables/Tests/sqlsmith-exists2.stable.out sql/test/miscellaneous/Tests/groupby_error.sql sql/test/miscellaneous/Tests/groupby_error.stable.out sql/test/miscellaneous/Tests/simple_plans.stable.out sql/test/subquery/Tests/subquery6.sql sql/test/subquery/Tests/subquery6.stable.err sql/test/subquery/Tests/subquery6.stable.out Branch: mbedded Log Message: merged with default diffs (truncated from 2213 to 300 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -652,8 +652,8 @@ fixdatebats(void) } fp = fopen(filename, "w"); if (fp == NULL) { - TRC_CRITICAL(GDK, "cannot create file %s: %s\n", -filename, GDKstrerror(errno, (char[128]){0}, 128)); + GDKsyserror("cannot create file %s\n", + filename); return GDK_FAIL; } fclose(fp); @@ -1137,7 +1137,7 @@ BBPaddfarm(const char *dirname, int role return GDK_FAIL; } } else { - GDKerror("%s: cannot create directory\n", dirname); + GDKsyserror("%s: cannot create directory\n", dirname); return GDK_FAIL; } } @@ -1161,7 +1161,6 @@ BBPaddfarm(const char *dirname, int role * database */ bbpdir = GDKfilepath(i, BATDIR, "BBP", "dir"); if (bbpdir == NULL) { - GDKerror("malloc failed\n"); return GDK_FAIL; } if (stat(bbpdir, ) != -1 || errno != ENOENT) { @@ -1172,7 +1171,6 @@ BBPaddfarm(const char *dirname, int role GDKfree(bbpdir); bbpdir = GDKfilepath(i, BAKDIR, "BBP", "dir"); if (bbpdir == NULL) { - GDKerror("malloc failed\n"); return GDK_FAIL; } if (stat(bbpdir, ) != -1 || errno != ENOENT) { @@ -1332,7 +1330,6 @@ BBPinit(void) if (j == i) { char *d = GDKfilepath(i, NULL, BATDIR, NULL); if (d == NULL) { - TRC_CRITICAL(GDK, "malloc failed\n"); return GDK_FAIL; } BBPdiskscan(d, strlen(d) - strlen(BATDIR)); @@ -2953,7 +2950,7 @@ BBPprepare(bool subcommit) ret = BBPrecover(0); if (ret == GDK_SUCCEED) { if (mkdir(bakdirpath, MONETDB_DIRMODE) < 0 && errno != EEXIST) { - GDKsyserror("BBPprepare: cannot create directory %s\n", bakdirpath); + GDKsyserror("cannot create directory %s\n", bakdirpath); ret = GDK_FAIL; } /* if BAKDIR already exists, don't signal error */ @@ -2963,7 +2960,7 @@ BBPprepare(bool subcommit) if (ret == GDK_SUCCEED && start_subcommit) { /* make a new SUBDIR (subdir of BAKDIR) */ if (mkdir(subdirpath, MONETDB_DIRMODE) < 0) { - GDKsyserror("BBPprepare: cannot create directory %s\n", subdirpath); + GDKsyserror("cannot create directory %s\n", subdirpath); ret = GDK_FAIL; } TRC_DEBUG(IO_, "mkdir %s = %d\n", subdirpath, (int) ret); @@ -3262,7 +3259,6 @@ force_move(int farmid, const char *srcdi strncpy(srcpath, name, len); srcpath[len] = '\0'; if(!(dstpath = GDKfilepath(farmid, dstdir, srcpath, NULL))) { - GDKsyserror("force_move: malloc fail\n");
MonetDB: mbedded - align code with default
Changeset: 463633f14094 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=463633f14094 Modified Files: common/utils/mcrypt.c Branch: mbedded Log Message: align code with default diffs (29 lines): diff --git a/common/utils/mcrypt.c b/common/utils/mcrypt.c --- a/common/utils/mcrypt.c +++ b/common/utils/mcrypt.c @@ -251,7 +251,7 @@ mcrypt_SHA384Sum(const char *string, siz } #endif -#if defined(HAVE_SHA512_UPDATE) +#ifdef HAVE_SHA512_UPDATE /** * Returns a malloced string representing the hex representation of * the SHA-512 hash of the given string. @@ -297,7 +297,7 @@ mcrypt_SHA512Sum(const char *string, siz } #endif -#if defined(HAVE_RIPEMD160_UPDATE) +#ifdef HAVE_RIPEMD160_UPDATE /** * Returns a malloced string representing the hex representation of * the RIPEMD-160 hash of the given string. @@ -343,7 +343,6 @@ mcrypt_BackendSum(const char *string, si #else (void) string; (void) len; - fprintf(stderr, "No digest function available.\n"); return NULL; #endif } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: scoping - Merged with default
Changeset: fe1ec107fdef for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe1ec107fdef Added Files: .bumpversion.cfg sql/test/BugTracker-2020/Tests/ilike-matches.Bug-6864.sql sql/test/BugTracker-2020/Tests/ilike-matches.Bug-6864.stable.err sql/test/BugTracker-2020/Tests/ilike-matches.Bug-6864.stable.out Removed Files: vertoo.config vertoo.data Modified Files: .hgtags MonetDB.spec NT/monetdb_config.h.in NT/rules.msc buildtools/conf/Maddlog clients/mapilib/mapi.rc clients/odbc/driver/driver.rc clients/odbc/winsetup/setup.rc configure.ag debian/changelog gdk/gdk_batop.c gdk/gdk_bbp.c gdk/gdk_cross.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_posix.c gdk/gdk_storage.c gdk/gdk_string.c gdk/gdk_system.c gdk/gdk_tracer.c gdk/gdk_utils.c gdk/libbat.rc geom/monetdb5/geom.c libversions monetdb5/mal/mal_client.c monetdb5/modules/mal/pcre.c monetdb5/tools/libmonetdb5.rc sql/backends/monet5/UDF/pyapi3/pyheader.h sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_rank.c sql/common/sql_types.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_outer_join_optimizer.h sql/server/rel_rel.c sql/server/rel_rel.h sql/server/rel_rewriter.c sql/server/rel_rewriter.h sql/server/rel_select.c sql/server/rel_unnest.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/server/sql_parser.y sql/server/sql_partition.c sql/server/sql_semantic.c sql/storage/bat/bat_storage.c sql/storage/sql_storage.h sql/storage/store.c sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out.single sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out sql/test/BugTracker-2020/Tests/All sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out sql/test/mergetables/Tests/sqlsmith-exists2.sql sql/test/mergetables/Tests/sqlsmith-exists2.stable.out sql/test/miscellaneous/Tests/groupby_error.sql sql/test/miscellaneous/Tests/groupby_error.stable.out sql/test/miscellaneous/Tests/simple_plans.stable.out sql/test/subquery/Tests/subquery6.sql sql/test/subquery/Tests/subquery6.stable.err sql/test/subquery/Tests/subquery6.stable.out sql/test/wlcr/Tests/wlr110.py sql/test/wlcr/Tests/wlr35.py testing/Mfilter.py testing/Mtest.py.in Branch: scoping Log Message: Merged with default diffs (truncated from 4786 to 300 lines): diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,32 @@ +[bumpversion] +current_version = 11.38.0 +commit = False +tag = False + +[bumpversion:file:configure.ag] + +[bumpversion:file:MonetDB.spec] + +[bumpversion:file:NT/rules.msc] + +[bumpversion:file:NT/monetdb_config.h.in] + +[bumpversion:file:gdk/libbat.rc] +parse = (?P\d+),(?P\d+),(?P\d+) +serialize = {major},{minor},{patch} + +[bumpversion:file:clients/odbc/winsetup/setup.rc] +parse = (?P\d+),(?P\d+),(?P\d+) +serialize = {major},{minor},{patch} + +[bumpversion:file:clients/odbc/driver/driver.rc] +parse = (?P\d+),(?P\d+),(?P\d+) +serialize = {major},{minor},{patch} + +[bumpversion:file:clients/mapilib/mapi.rc] +parse = (?P\d+),(?P\d+),(?P\d+) +serialize = {major},{minor},{patch} + +[bumpversion:file:monetdb5/tools/libmonetdb5.rc] +parse = (?P\d+),(?P\d+),(?P\d+) +serialize = {major},{minor},{patch} diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -766,3 +766,6 @@ 179977ed07cd8095f99a6a07968b8e9d1affa753 6b76e1fa9b32421197acf26f63948c858e487d6a Jun2020_root 03ea637c10b5217782acf5db261b4cd71a9afb25 Jun2020_1 03ea637c10b5217782acf5db261b4cd71a9afb25 Jun2020_release +0d51d6758f2b1f3f1804415545f8551a38da1848 Jun2020_3 +03ea637c10b5217782acf5db261b4cd71a9afb25 Jun2020_release +0d51d6758f2b1f3f1804415545f8551a38da1848 Jun2020_release diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -984,6 +984,10 @@ fi %postun -p /sbin/ldconfig %changelog +* Mon May 18 2020 Sjoerd Mullender - 11.37.3-20200518 +- Rebuilt. +-
MonetDB: default - Merged with Jun2020
Changeset: 15f8f49fa732 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=15f8f49fa732 Modified Files: gdk/gdk_bbp.c gdk/gdk_cross.c gdk/gdk_logger.c gdk/gdk_posix.c gdk/gdk_storage.c gdk/gdk_string.c gdk/gdk_system.c gdk/gdk_tracer.c gdk/gdk_utils.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_select.c sql/server/rel_unnest.c sql/server/sql_parser.y sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out sql/test/mergetables/Tests/sqlsmith-exists2.sql sql/test/mergetables/Tests/sqlsmith-exists2.stable.out sql/test/miscellaneous/Tests/groupby_error.sql sql/test/miscellaneous/Tests/groupby_error.stable.out sql/test/miscellaneous/Tests/simple_plans.stable.out sql/test/subquery/Tests/subquery6.sql sql/test/subquery/Tests/subquery6.stable.err sql/test/subquery/Tests/subquery6.stable.out Branch: default Log Message: Merged with Jun2020 diffs (truncated from 2127 to 300 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -652,8 +652,8 @@ fixdatebats(void) } fp = fopen(filename, "w"); if (fp == NULL) { - TRC_CRITICAL(GDK, "cannot create file %s: %s\n", -filename, GDKstrerror(errno, (char[128]){0}, 128)); + GDKsyserror("cannot create file %s\n", + filename); return GDK_FAIL; } fclose(fp); @@ -1137,7 +1137,7 @@ BBPaddfarm(const char *dirname, int role return GDK_FAIL; } } else { - GDKerror("%s: cannot create directory\n", dirname); + GDKsyserror("%s: cannot create directory\n", dirname); return GDK_FAIL; } } @@ -1161,7 +1161,6 @@ BBPaddfarm(const char *dirname, int role * database */ bbpdir = GDKfilepath(i, BATDIR, "BBP", "dir"); if (bbpdir == NULL) { - GDKerror("malloc failed\n"); return GDK_FAIL; } if (stat(bbpdir, ) != -1 || errno != ENOENT) { @@ -1172,7 +1171,6 @@ BBPaddfarm(const char *dirname, int role GDKfree(bbpdir); bbpdir = GDKfilepath(i, BAKDIR, "BBP", "dir"); if (bbpdir == NULL) { - GDKerror("malloc failed\n"); return GDK_FAIL; } if (stat(bbpdir, ) != -1 || errno != ENOENT) { @@ -1332,7 +1330,6 @@ BBPinit(void) if (j == i) { char *d = GDKfilepath(i, NULL, BATDIR, NULL); if (d == NULL) { - TRC_CRITICAL(GDK, "malloc failed\n"); return GDK_FAIL; } BBPdiskscan(d, strlen(d) - strlen(BATDIR)); @@ -2953,7 +2950,7 @@ BBPprepare(bool subcommit) ret = BBPrecover(0); if (ret == GDK_SUCCEED) { if (mkdir(bakdirpath, MONETDB_DIRMODE) < 0 && errno != EEXIST) { - GDKsyserror("BBPprepare: cannot create directory %s\n", bakdirpath); + GDKsyserror("cannot create directory %s\n", bakdirpath); ret = GDK_FAIL; } /* if BAKDIR already exists, don't signal error */ @@ -2963,7 +2960,7 @@ BBPprepare(bool subcommit) if (ret == GDK_SUCCEED && start_subcommit) { /* make a new SUBDIR (subdir of BAKDIR) */ if (mkdir(subdirpath, MONETDB_DIRMODE) < 0) { - GDKsyserror("BBPprepare: cannot create directory %s\n", subdirpath); + GDKsyserror("cannot create directory %s\n", subdirpath); ret = GDK_FAIL; } TRC_DEBUG(IO_, "mkdir %s = %d\n", subdirpath, (int) ret); @@ -3262,7 +3259,6 @@ force_move(int farmid, const char *srcdi strncpy(srcpath, name, len); srcpath[len] = '\0'; if(!(dstpath = GDKfilepath(farmid, dstdir, srcpath, NULL))) { - GDKsyserror("force_move: malloc fail\n");
MonetDB: Jun2020 - Making rel_join2semijoin more restrinct. The ...
Changeset: 941ce0aadf4e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=941ce0aadf4e Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c Branch: Jun2020 Log Message: Making rel_join2semijoin more restrinct. The found column must be the single group by column projected at a group relation to be unique diffs (160 lines): 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 @@ -1525,7 +1525,7 @@ exp_is_eqjoin(sql_exp *e) } static sql_exp * -rel_find_exp_( sql_rel *rel, sql_exp *e) +rel_find_exp_and_corresponding_rel_( sql_rel *rel, sql_exp *e, sql_rel **res) { sql_exp *ne = NULL; @@ -1540,9 +1540,11 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) ne = exps_bind_column(rel->exps, e->r, NULL, 1); } } + if (ne && res) + *res = rel; return ne; case e_convert: - return rel_find_exp_(rel, e->l); + return rel_find_exp_and_corresponding_rel_(rel, e->l, res); case e_aggr: case e_func: if (e->l) { @@ -1551,7 +1553,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) ne = n->data; while (ne != NULL && n != NULL) { - ne = rel_find_exp_(rel, n->data); + ne = rel_find_exp_and_corresponding_rel_(rel, n->data, res); n = n->next; } return ne; @@ -1568,7 +1570,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) ne = n->data; while (ne != NULL && n != NULL) { - ne = rel_find_exp_(rel, n->data); + ne = rel_find_exp_and_corresponding_rel_(rel, n->data, res); n = n->next; } return ne; @@ -1579,9 +1581,9 @@ rel_find_exp_( sql_rel *rel, sql_exp *e) } sql_exp * -rel_find_exp( sql_rel *rel, sql_exp *e) +rel_find_exp_and_corresponding_rel(sql_rel *rel, sql_exp *e, sql_rel **res) { - sql_exp *ne = rel_find_exp_(rel, e); + sql_exp *ne = rel_find_exp_and_corresponding_rel_(rel, e, res); if (rel && !ne) { switch(rel->op) { @@ -1589,38 +1591,53 @@ rel_find_exp( sql_rel *rel, sql_exp *e) case op_right: case op_full: case op_join: - ne = rel_find_exp(rel->l, e); + ne = rel_find_exp_and_corresponding_rel(rel->l, e, res); if (!ne) - ne = rel_find_exp(rel->r, e); + ne = rel_find_exp_and_corresponding_rel(rel->r, e, res); break; case op_table: if (rel->exps && e->type == e_column && e->l && exps_bind_column2(rel->exps, e->l, e->r)) ne = e; + if (ne && res) + *res = rel; break; case op_union: case op_except: case op_inter: { if (rel->l) - ne = rel_find_exp(rel->l, e); - else if (rel->exps && e->l) + ne = rel_find_exp_and_corresponding_rel(rel->l, e, res); + else if (rel->exps && e->l) { ne = exps_bind_column2(rel->exps, e->l, e->r); - else if (rel->exps) + if (ne && res) + *res = rel; + } else if (rel->exps) { ne = exps_bind_column(rel->exps, e->r, NULL, 1); + if (ne && res) + *res = rel; + } } break; case op_basetable: if (rel->exps && e->type == e_column && e->l) ne = exps_bind_column2(rel->exps, e->l, e->r); + if (ne && res) + *res = rel; break; default: if (!is_project(rel->op) && rel->l) - ne = rel_find_exp(rel->l, e); + ne = rel_find_exp_and_corresponding_rel(rel->l, e, res); } } return ne; } +sql_exp * +rel_find_exp( sql_rel *rel, sql_exp *e) +{ + return rel_find_exp_and_corresponding_rel(rel, e, NULL); +} + int exp_is_true(mvc *sql, sql_exp *e) { diff --git
MonetDB: Jun2020 - Small fixes for rel_join2semijoin optimizer.
Changeset: 842feff7722a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=842feff7722a Modified Files: sql/server/rel_optimizer.c sql/server/rel_unnest.c Branch: Jun2020 Log Message: Small fixes for rel_join2semijoin optimizer. Disallow rel_join2semijoin on selection relations, because upper projections may use the right side of the semijoin. Only e_columns are allowed as the single projection under the candidate join (e.g. aggregates may not be distinct). A better way to fix this would be adding an "unique" property under SQL expressions. Fixed grouping cardinalities at exp_reset_card. diffs (53 lines): 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 @@ -5452,11 +5452,14 @@ find_simple_projection_for_join2semi(sql if (rel->card < CARD_AGGR) /* const or groupby without group by exps */ return true; - if (e->card <= CARD_AGGR || find_prop(e->p, PROP_HASHCOL)) - return true; - sql_exp *found = rel_find_exp(rel->l, e); /* grouping column on inner relation */ - if (found && (found->card <= CARD_AGGR || find_prop(found->p, PROP_HASHCOL))) - return true; + /* a single group by column in the projection list from a group by relation is guaranteed to be unique, but not an aggregate */ + if (e->type == e_column) { + if (is_groupby(rel->op) || find_prop(e->p, PROP_HASHCOL)) + return true; + sql_exp *found = rel_find_exp(rel->l, e); /* grouping column on inner relation */ + if (found && ((found->type == e_column && found->card <= CARD_AGGR) || find_prop(found->p, PROP_HASHCOL))) + return true; + } } return false; } @@ -5524,7 +5527,7 @@ static sql_rel * rel_join2semijoin(mvc *sql, sql_rel *rel, int *changes) { (void)sql; - if ((is_simple_project(rel->op) || is_groupby(rel->op) || (is_select(rel->op) && !rel_is_ref(rel))) && rel->l) { + if ((is_simple_project(rel->op) || is_groupby(rel->op)) && rel->l) { bool swap = false; sql_rel *l = rel->l; sql_rel *c = find_candidate_join2semi(l, ); diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -1652,7 +1652,7 @@ exp_reset_card(mvc *sql, sql_rel *rel, s switch(e->type) { case e_aggr: case e_column: - e->card = CARD_AGGR; + e->card = rel->card; break; case e_func: case e_convert: @@ -1673,6 +1673,8 @@ exp_reset_card(mvc *sql, sql_rel *rel, s l = rel->l; if (e->card < l->card) e->card = l->card; + if (need_distinct(rel)) /* Need distinct, all expressions should have CARD_AGGR at max */ + e->card = MIN(e->card, CARD_AGGR); break; case e_aggr: /* should have been corrected by rewrites already */ case e_cmp: ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Propagate not through 'and' and 'or' symbols ...
Changeset: 5ed6b50c85cb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ed6b50c85cb Modified Files: sql/server/rel_select.c Branch: Jun2020 Log Message: Propagate not through 'and' and 'or' symbols if possible. No more rewrites on this file today diffs (164 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2208,52 +2208,90 @@ rel_in_exp(sql_query *query, sql_rel *re return rel_select_add_exp(sql->sa, rel, e);; } -#define SIMPLIFY_NOT(sc, NEXT_CALL) \ - switch (sc->data.sym->token) { \ - case SQL_IN: \ - sc->data.sym->token = SQL_NOT_IN; \ - return NEXT_CALL; \ - case SQL_NOT_IN: \ - sc->data.sym->token = SQL_IN; \ - return NEXT_CALL; \ - case SQL_EXISTS: \ - sc->data.sym->token = SQL_NOT_EXISTS; \ - return NEXT_CALL; \ - case SQL_NOT_EXISTS: \ - sc->data.sym->token = SQL_EXISTS; \ - return NEXT_CALL; \ - case SQL_LIKE: \ - sc->data.sym->token = SQL_NOT_LIKE; \ - return NEXT_CALL; \ - case SQL_NOT_LIKE: \ - sc->data.sym->token = SQL_LIKE; \ - return NEXT_CALL; \ - case SQL_BETWEEN: \ - sc->data.sym->token = SQL_NOT_BETWEEN; \ - return NEXT_CALL; \ - case SQL_NOT_BETWEEN: \ - sc->data.sym->token = SQL_BETWEEN; \ - return NEXT_CALL; \ - case SQL_IS_NULL: \ - sc->data.sym->token = SQL_IS_NOT_NULL; \ - return NEXT_CALL; \ - case SQL_IS_NOT_NULL: \ - sc->data.sym->token = SQL_IS_NULL; \ - return NEXT_CALL; \ - case SQL_NOT: /* nested NOTs eliminate each other */ \ - sc->data.sym = sc->data.sym->data.sym; \ - return NEXT_CALL; \ - case SQL_COMPARE: { \ - dnode *cmp_n = sc->data.sym->data.lval->h; \ - comp_type neg_cmp_type = negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the comparator */ \ - cmp_n->next->data.sval = sa_strdup(sql->sa, compare_func(neg_cmp_type, 0)); \ - if (cmp_n->next->next->next) /* negating ANY/ALL */ \ - cmp_n->next->next->next->data.i_val = cmp_n->next->next->next->data.i_val == 0 ? 1 : 0; \ - return NEXT_CALL; \ - } \ - default: \ - break; \ +static bool +not_symbol_can_be_propagated(mvc *sql, symbol *sc) +{ + switch (sc->token) { + case SQL_IN: + case SQL_NOT_IN: + case SQL_EXISTS: + case SQL_NOT_EXISTS: + case SQL_LIKE: + case SQL_NOT_LIKE: + case SQL_BETWEEN: + case SQL_NOT_BETWEEN: + case SQL_IS_NULL: + case SQL_IS_NOT_NULL: + case SQL_NOT: + case SQL_COMPARE: + return true; + case SQL_AND: + case SQL_OR: { + symbol *lo = sc->data.lval->h->data.sym; + symbol *ro = sc->data.lval->h->next->data.sym; + return not_symbol_can_be_propagated(sql, lo) && not_symbol_can_be_propagated(sql, ro); + } + default: + return false; } +} + +/* Warning, this function assumes the entire bison tree can be negated, so call it after 'not_symbol_can_be_propagated' */ +static void +negate_symbol_tree(mvc *sql, symbol *sc) +{ + switch (sc->token) { + case SQL_IN: + sc->token = SQL_NOT_IN; + break; + case SQL_NOT_IN: + sc->token = SQL_IN; + break; + case SQL_EXISTS: + sc->token = SQL_NOT_EXISTS; + break; + case SQL_NOT_EXISTS: + sc->token = SQL_EXISTS; + break; + case SQL_LIKE: + sc->token = SQL_NOT_LIKE; + break; + case SQL_NOT_LIKE: + sc->token = SQL_LIKE; + break; + case SQL_BETWEEN: + sc->token = SQL_NOT_BETWEEN; + break; + case SQL_NOT_BETWEEN: + sc->token = SQL_BETWEEN; + break; + case SQL_IS_NULL: + sc->token = SQL_IS_NOT_NULL; + break; + case SQL_IS_NOT_NULL: + sc->token = SQL_IS_NULL; + break; + case SQL_NOT: /* nested NOTs eliminate each other */ + memmove(sc, sc->data.sym, sizeof(symbol)); + break; + case SQL_COMPARE: { + dnode *cmp_n = sc->data.lval->h; + comp_type neg_cmp_type = negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the comparator */ + cmp_n->next->data.sval = sa_strdup(sql->sa, compare_func(neg_cmp_type, 0)); + if (cmp_n->next->next->next) /* negating ANY/ALL */ +
MonetDB: Jun2020 - Cleanup and propagate not through comparison ...
Changeset: 7e044dae5c3e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e044dae5c3e Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_select.c sql/server/sql_parser.y Branch: Jun2020 Log Message: Cleanup and propagate not through comparison symbols diffs (105 lines): 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 @@ -67,6 +67,42 @@ swap_compare( comp_type t ) } comp_type +negate_compare( comp_type t ) +{ + switch(t) { + case cmp_equal: + return cmp_notequal; + case cmp_notequal: + return cmp_equal; + case cmp_lt: + return cmp_gte; + case cmp_lte: + return cmp_gt; + case cmp_gte: + return cmp_lt; + case cmp_gt: + return cmp_lte; + + case cmp_in: + return cmp_notin; + case cmp_notin: + return cmp_in; + + case mark_in: + return mark_notin; + case mark_notin: + return mark_in; + case mark_exists: + return mark_notexists; + case mark_notexists: + return mark_exists; + + default: + return t; + } +} + +comp_type range2lcompare( int r ) { if (r&1) { diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -25,6 +25,7 @@ extern comp_type compare_str2type(const char *compare_op); extern comp_type swap_compare( comp_type t ); +extern comp_type negate_compare( comp_type t ); extern comp_type range2lcompare( int r ); extern comp_type range2rcompare( int r ); extern int compare2range( int l, int r ); diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2243,6 +2243,14 @@ rel_in_exp(sql_query *query, sql_rel *re case SQL_NOT: /* nested NOTs eliminate each other */ \ sc->data.sym = sc->data.sym->data.sym; \ return NEXT_CALL; \ + case SQL_COMPARE: { \ + dnode *cmp_n = sc->data.sym->data.lval->h; \ + comp_type neg_cmp_type = negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the comparator */ \ + cmp_n->next->data.sval = sa_strdup(sql->sa, compare_func(neg_cmp_type, 0)); \ + if (cmp_n->next->next->next) /* negating ANY/ALL */ \ + cmp_n->next->next->next->data.i_val = cmp_n->next->next->next->data.i_val == 0 ? 1 : 0; \ + return NEXT_CALL; \ + } \ default: \ break; \ } diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -3622,24 +3622,8 @@ predicate: ; pred_exp: -NOT pred_exp - { $$ = $2; - - if ($$->token == SQL_EXISTS) - $$->token = SQL_NOT_EXISTS; - else if ($$->token == SQL_NOT_EXISTS) - $$->token = SQL_EXISTS; - else if ($$->token == SQL_NOT_BETWEEN) - $$->token = SQL_BETWEEN; - else if ($$->token == SQL_BETWEEN) - $$->token = SQL_NOT_BETWEEN; - else if ($$->token == SQL_NOT_LIKE) - $$->token = SQL_LIKE; - else if ($$->token == SQL_LIKE) - $$->token = SQL_NOT_LIKE; - else - $$ = _symbol_create_symbol(SQL_NOT, $2); } - | predicate { $$ = $1; } +NOT pred_exp { $$ = _symbol_create_symbol(SQL_NOT, $2); } + | predicate { $$ = $1; } ; comparison_predicate: ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - better type check for in
Changeset: bb7a72ae8e6a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb7a72ae8e6a Modified Files: gdk/gdk_cross.c sql/server/rel_select.c sql/server/rel_unnest.c sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out sql/test/miscellaneous/Tests/simple_plans.stable.out sql/test/subquery/Tests/subquery6.stable.err sql/test/subquery/Tests/subquery6.stable.out Branch: Jun2020 Log Message: better type check for in fixed issued with unroling of single joins diffs (227 lines): diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c --- a/gdk/gdk_cross.c +++ b/gdk/gdk_cross.c @@ -27,7 +27,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l cnt1 = canditer_init(, l, sl); cnt2 = canditer_init(, r, sr); - if (max_one && cnt2 > 1) { + if (max_one && cnt1 > 0 && cnt2 > 1) { GDKerror("more than one match"); return GDK_FAIL; } diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -687,13 +687,13 @@ rel_op_(mvc *sql, sql_schema *s, char *f } static sql_exp* -exp_values_set_supertype(mvc *sql, sql_exp *values) +exp_values_set_supertype(mvc *sql, sql_exp *values, sql_exp *opt_le) { assert(is_values(values)); list *vals = exp_get_values(values), *nexps; - sql_subtype *tpe = exp_subtype(vals->h->data); - - if (tpe) + sql_subtype *tpe = opt_le?exp_subtype(opt_le):exp_subtype(vals->h->data); + + if (!opt_le && tpe) values->tpe = *tpe; for (node *m = vals->h; m; m = m->next) { @@ -893,7 +893,7 @@ rel_values(sql_query *query, symbol *tab } /* loop to check types */ for (m = exps->h; m; m = m->next) - if (!(m->data = exp_values_set_supertype(sql, (sql_exp*) m->data))) + if (!(m->data = exp_values_set_supertype(sql, (sql_exp*) m->data, NULL))) return NULL; r = rel_project(sql->sa, NULL, exps); @@ -2137,7 +2137,7 @@ rel_in_value_exp(sql_query *query, sql_r } else { /* if it's not a tuple, enforce coersion on the type for every element on the list */ sql_subtype super; - if (!(values = exp_values_set_supertype(sql, values))) + if (!(values = exp_values_set_supertype(sql, values, le))) return NULL; if (rel_binop_check_types(sql, rel ? *rel : NULL, le, values, 0) < 0) return NULL; diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -1242,6 +1242,8 @@ push_up_join(mvc *sql, sql_rel *rel, lis rel->r = rel_dup(jl); rel->exps = sa_list(sql->sa); nj = rel_crossproduct(sql->sa, rel_dup(d), rel_dup(jr), j->op); + if (j->single) + set_single(nj); rel_destroy(j); j = nj; set_dependent(j); @@ -1281,6 +1283,8 @@ push_up_join(mvc *sql, sql_rel *rel, lis if (!rd) { rel->r = rel_dup(jl); sql_rel *nj = rel_crossproduct(sql->sa, rel, rel_dup(jr), j->op); + if (j->single) + set_single(nj); nj->exps = exps_copy(sql, j->exps); rel_destroy(j); j = nj; @@ -1294,6 +1298,8 @@ push_up_join(mvc *sql, sql_rel *rel, lis if (!ld) { rel->r = rel_dup(jr); sql_rel *nj = rel_crossproduct(sql->sa, rel_dup(jl), rel, j->op); + if (j->single) + set_single(nj); nj->exps = exps_copy(sql, j->exps); rel_destroy(j); j = nj; diff --git a/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err b/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err --- a/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err +++ b/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err @@ -23,34 +23,7 @@ stderr of test 'lateral.Bug-6310` in dir # cmdline opt gdk_dbpath = /home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017 # cmdline opt gdk_debug = 536870922 -# 16:49:27 > -# 16:49:27 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-31693" "--port=34067"
MonetDB: mbedded - small fix for numpy/ pyintegration
Changeset: 05b1c8b235ef for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=05b1c8b235ef Modified Files: cmake/monetdb-findpackages.cmake sql/backends/monet5/UDF/pyapi3/CMakeLists.txt Branch: mbedded Log Message: small fix for numpy/ pyintegration diffs (24 lines): diff --git a/cmake/monetdb-findpackages.cmake b/cmake/monetdb-findpackages.cmake --- a/cmake/monetdb-findpackages.cmake +++ b/cmake/monetdb-findpackages.cmake @@ -28,6 +28,8 @@ else() endif() if(PY3INTEGRATION) set(HAVE_LIBPY3 "${Python3_NumPy_FOUND}") +else() + message(STATUS "Disable Py3integration, because required NumPy is missing") endif(PY3INTEGRATION) if(WIN32) diff --git a/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt b/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt --- a/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt +++ b/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt @@ -6,7 +6,7 @@ # Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V. #]] -if(PY3INTEGRATION) +if(HAVE_LIBPY3) add_library(pyapi3 MODULE) target_sources(pyapi3 ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Good programming practices: no duplicated code
Changeset: 2016ee14c9ba for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2016ee14c9ba Modified Files: sql/server/rel_select.c Branch: Jun2020 Log Message: Good programming practices: no duplicated code diffs (137 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2208,6 +2208,45 @@ rel_in_exp(sql_query *query, sql_rel *re return rel_select_add_exp(sql->sa, rel, e);; } +#define SIMPLIFY_NOT(sc, NEXT_CALL) \ + switch (sc->data.sym->token) { \ + case SQL_IN: \ + sc->data.sym->token = SQL_NOT_IN; \ + return NEXT_CALL; \ + case SQL_NOT_IN: \ + sc->data.sym->token = SQL_IN; \ + return NEXT_CALL; \ + case SQL_EXISTS: \ + sc->data.sym->token = SQL_NOT_EXISTS; \ + return NEXT_CALL; \ + case SQL_NOT_EXISTS: \ + sc->data.sym->token = SQL_EXISTS; \ + return NEXT_CALL; \ + case SQL_LIKE: \ + sc->data.sym->token = SQL_NOT_LIKE; \ + return NEXT_CALL; \ + case SQL_NOT_LIKE: \ + sc->data.sym->token = SQL_LIKE; \ + return NEXT_CALL; \ + case SQL_BETWEEN: \ + sc->data.sym->token = SQL_NOT_BETWEEN; \ + return NEXT_CALL; \ + case SQL_NOT_BETWEEN: \ + sc->data.sym->token = SQL_BETWEEN; \ + return NEXT_CALL; \ + case SQL_IS_NULL: \ + sc->data.sym->token = SQL_IS_NOT_NULL; \ + return NEXT_CALL; \ + case SQL_IS_NOT_NULL: \ + sc->data.sym->token = SQL_IS_NULL; \ + return NEXT_CALL; \ + case SQL_NOT: /* nested NOTs eliminate each other */ \ + sc->data.sym = sc->data.sym->data.sym; \ + return NEXT_CALL; \ + default: \ + break; \ + } + sql_exp * rel_logical_value_exp(sql_query *query, sql_rel **rel, symbol *sc, int f, exp_kind ek) { @@ -2464,42 +2503,7 @@ rel_logical_value_exp(sql_query *query, return le; } case SQL_NOT: { - switch (sc->data.sym->token) { - case SQL_IN: - sc->data.sym->token = SQL_NOT_IN; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_NOT_IN: - sc->data.sym->token = SQL_IN; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_EXISTS: - sc->data.sym->token = SQL_NOT_EXISTS; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_NOT_EXISTS: - sc->data.sym->token = SQL_EXISTS; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_LIKE: - sc->data.sym->token = SQL_NOT_LIKE; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_NOT_LIKE: - sc->data.sym->token = SQL_LIKE; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_BETWEEN: - sc->data.sym->token = SQL_NOT_BETWEEN; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_NOT_BETWEEN: - sc->data.sym->token = SQL_BETWEEN; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_IS_NULL: - sc->data.sym->token = SQL_IS_NOT_NULL; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_IS_NOT_NULL: - sc->data.sym->token = SQL_IS_NULL; - return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); - case SQL_NOT: /* nested NOTs eliminate each other */ - return rel_logical_value_exp(query, rel, sc->data.sym->data.sym, f, ek); - default: - break; - } + SIMPLIFY_NOT(sc, rel_logical_value_exp(query, rel, sc->data.sym, f, ek)); sql_exp *le = rel_logical_value_exp(query, rel, sc->data.sym, f, ek); if (!le) @@ -2813,42 +2817,7 @@ rel_logical_exp(sql_query *query, sql_re } case SQL_NOT: { sql_exp *le, *ls; - switch (sc->data.sym->token) { - case SQL_IN: - sc->data.sym->token = SQL_NOT_IN; - return rel_logical_exp(query, rel, sc->data.sym, f); - case SQL_NOT_IN: - sc->data.sym->token = SQL_IN; - return rel_logical_exp(query, rel,
MonetDB: Jun2020 - Fixed sqlite query optimizing early on nested...
Changeset: a48f714e5586 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a48f714e5586 Modified Files: sql/server/rel_select.c sql/test/miscellaneous/Tests/groupby_error.sql sql/test/miscellaneous/Tests/groupby_error.stable.out Branch: Jun2020 Log Message: Fixed sqlite query optimizing early on nested not symbols in the parser diffs (138 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2464,6 +2464,42 @@ rel_logical_value_exp(sql_query *query, return le; } case SQL_NOT: { + switch (sc->data.sym->token) { + case SQL_IN: + sc->data.sym->token = SQL_NOT_IN; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_NOT_IN: + sc->data.sym->token = SQL_IN; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_EXISTS: + sc->data.sym->token = SQL_NOT_EXISTS; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_NOT_EXISTS: + sc->data.sym->token = SQL_EXISTS; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_LIKE: + sc->data.sym->token = SQL_NOT_LIKE; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_NOT_LIKE: + sc->data.sym->token = SQL_LIKE; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_BETWEEN: + sc->data.sym->token = SQL_NOT_BETWEEN; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_NOT_BETWEEN: + sc->data.sym->token = SQL_BETWEEN; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_IS_NULL: + sc->data.sym->token = SQL_IS_NOT_NULL; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_IS_NOT_NULL: + sc->data.sym->token = SQL_IS_NULL; + return rel_logical_value_exp(query, rel, sc->data.sym, f, ek); + case SQL_NOT: /* nested NOTs eliminate each other */ + return rel_logical_value_exp(query, rel, sc->data.sym->data.sym, f, ek); + default: + break; + } sql_exp *le = rel_logical_value_exp(query, rel, sc->data.sym, f, ek); if (!le) @@ -2784,6 +2820,32 @@ rel_logical_exp(sql_query *query, sql_re case SQL_NOT_IN: sc->data.sym->token = SQL_IN; return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_EXISTS: + sc->data.sym->token = SQL_NOT_EXISTS; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_NOT_EXISTS: + sc->data.sym->token = SQL_EXISTS; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_LIKE: + sc->data.sym->token = SQL_NOT_LIKE; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_NOT_LIKE: + sc->data.sym->token = SQL_LIKE; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_BETWEEN: + sc->data.sym->token = SQL_NOT_BETWEEN; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_NOT_BETWEEN: + sc->data.sym->token = SQL_BETWEEN; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_IS_NULL: + sc->data.sym->token = SQL_IS_NOT_NULL; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_IS_NOT_NULL: + sc->data.sym->token = SQL_IS_NULL; + return rel_logical_exp(query, rel, sc->data.sym, f); + case SQL_NOT: /* nested NOTs eliminate each other */ + return rel_logical_exp(query, rel, sc->data.sym->data.sym, f); default: break; } diff --git a/sql/test/miscellaneous/Tests/groupby_error.sql b/sql/test/miscellaneous/Tests/groupby_error.sql --- a/sql/test/miscellaneous/Tests/groupby_error.sql +++ b/sql/test/miscellaneous/Tests/groupby_error.sql @@ -35,9 +35,19 @@ SELECT col0 FROM tab2 WHERE - - col2; SELECT 1 FROM tab0 WHERE
MonetDB: mbedded - typo
Changeset: b5703abaab7c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b5703abaab7c Modified Files: cmake/monetdb-findpackages.cmake Branch: mbedded Log Message: typo diffs (12 lines): diff --git a/cmake/monetdb-findpackages.cmake b/cmake/monetdb-findpackages.cmake --- a/cmake/monetdb-findpackages.cmake +++ b/cmake/monetdb-findpackages.cmake @@ -18,7 +18,7 @@ if(${CMAKE_VERSION} VERSION_LESS "3.14.0 set(Python_EXECUTABLE "${Python3_EXECUTABLE}") endif(Python3_Interpreter_FOUND) if(NumPy_FOUND) -set(Python3_Numpy_FOUND 1) +set(Python3_NumPy_FOUND 1) endif(NumPy_FOUND) else() find_package(Python3 COMPONENTS Interpreter Development NumPy) ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: mbedded - fix bugs in library detection and add tests
Changeset: 7389e7d623d7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7389e7d623d7 Added Files: ctest/cmake/detect-bz2.cmake ctest/cmake/detect-commoncrypto.cmake ctest/cmake/detect-curl.cmake ctest/cmake/detect-iconv.cmake ctest/cmake/detect-libz.cmake ctest/cmake/detect-lz4.cmake ctest/cmake/detect-openssl.cmake ctest/cmake/detect-pcre.cmake ctest/cmake/detect-proj.cmake ctest/cmake/detect-xml.cmake ctest/cmake/test_detect_bz2.c.in ctest/cmake/test_detect_commoncrypto.c.in ctest/cmake/test_detect_curl.c.in ctest/cmake/test_detect_iconv.c.in ctest/cmake/test_detect_libz.c.in ctest/cmake/test_detect_lz4.c.in ctest/cmake/test_detect_openssl.c.in ctest/cmake/test_detect_pcre.c.in ctest/cmake/test_detect_proj.c.in ctest/cmake/test_detect_xml.c.in Removed Files: ctest/cmake/test_detect.c ctest/cmake/test_detect_bz2.c ctest/cmake/test_detect_curl.c ctest/cmake/test_detect_libz.c ctest/cmake/test_detect_lz4.c ctest/cmake/test_detect_pcre.c ctest/cmake/test_detect_proj.c Modified Files: cmake/monetdb-functions.cmake ctest/cmake/CMakeLists.txt monetdb_config.h.in monetdb_config_win32.h.in Branch: mbedded Log Message: fix bugs in library detection and add tests diffs (truncated from 1143 to 300 lines): diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake --- a/cmake/monetdb-functions.cmake +++ b/cmake/monetdb-functions.cmake @@ -119,18 +119,22 @@ function(monetdb_cmake_summary) message(STATUS "Linux distro: ${LINUX_DISTRO}") message(STATUS "Linux distro version: ${LINUX_DISTRO_VERSION}") endif() + message(STATUS "Iconv library: ${Iconv_FOUND}") + message(STATUS "Pthread library: ${CMAKE_USE_PTHREADS_INIT}") + message(STATUS "Pcre library: ${PCRE_FOUND}") + message(STATUS "Openssl library: ${OPENSSL_FOUND}") + message(STATUS "Commoncrypto library: ${COMMONCRYPTO_FOUND}") + message(STATUS "Bz2 library: ${BZIP2_FOUND}") + message(STATUS "Curl library: ${CURL_FOUND}") + message(STATUS "Lzma library: ${LIBLZMA_FOUND}") + message(STATUS "Libxml2 library: ${LIBXML2_FOUND}") + message(STATUS "Zlib library: ${ZLIB_FOUND}") + message(STATUS "Lz4 library: ${LZ4_FOUND}") + message(STATUS "Proj library: ${PROJ_FOUND}") message(STATUS "Geos library: ${GEOS_FOUND}") message(STATUS "Gdal library: ${GDAL_FOUND}") - message(STATUS "Lzma library: ${LZMA_FOUND}") - message(STATUS "Libxml2 library: ${LIBXML2_FOUND}") - message(STATUS "Curl library: ${CURL_FOUND}") - message(STATUS "Bz2 library: ${BZ2_FOUND}") - message(STATUS "Zlib library: ${LIBZ_FOUND}") - message(STATUS "Proj library: ${PROJ_FOUND}") - message(STATUS "Lz4 library: ${LZ4_FOUND}") message(STATUS "Cfitsio library: ${CFITSIO_FOUND}") message(STATUS "Kvm library: ${KVM_FOUND}") - message(STATUS "Pcre library: ${PCRE_FOUND}") message(STATUS "Netcdf library: ${NETCDF_FOUND}") message(STATUS "Readline library: ${READLINE_FOUND}") message(STATUS "-") diff --git a/ctest/cmake/CMakeLists.txt b/ctest/cmake/CMakeLists.txt --- a/ctest/cmake/CMakeLists.txt +++ b/ctest/cmake/CMakeLists.txt @@ -16,55 +16,23 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" get_os_release_info(LINUX_DISTRO LINUX_DISTRO_VERSION) endif() -add_executable(test_detect test_detect.c) -target_link_libraries(test_detect - PRIVATE - monetdb_config_header) -add_test(testDetect test_detect) - -add_executable(test_detect_pcre test_detect_pcre.c) -target_link_libraries(test_detect_pcre - PRIVATE - monetdb_config_header) -add_test(testDetectPcre test_detect_pcre) - -add_executable(test_detect_bz2 test_detect_bz2.c) -target_link_libraries(test_detect_bz2 - PRIVATE - monetdb_config_header) -add_test(testDetectBz2 test_detect_bz2) - -add_executable(test_detect_curl test_detect_curl.c) -target_link_libraries(test_detect_curl - PRIVATE - monetdb_config_header) -add_test(testDetectCurl test_detect_curl) - -add_executable(test_detect_libz test_detect_libz.c) -target_link_libraries(test_detect_libz - PRIVATE - monetdb_config_header) -add_test(testDetectLibz test_detect_libz) - -add_executable(test_detect_lz4 test_detect_lz4.c) -target_link_libraries(test_detect_lz4 - PRIVATE - monetdb_config_header) -add_test(testDetectLz4 test_detect_lz4) - -add_executable(test_detect_proj test_detect_proj.c) -target_link_libraries(test_detect_proj - PRIVATE - monetdb_config_header) -add_test(testDetectProj test_detect_proj) - +include(${CMAKE_CURRENT_SOURCE_DIR}/detect-iconv.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/detect-pthreadh.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/detect-pcre.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/detect-openssl.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/detect-commoncrypto.cmake)
MonetDB: mbedded - only add PYINTEGRATION if we have NumPy
Changeset: b8f6409c85fc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b8f6409c85fc Modified Files: cmake/monetdb-findpackages.cmake Branch: mbedded Log Message: only add PYINTEGRATION if we have NumPy diffs (22 lines): diff --git a/cmake/monetdb-findpackages.cmake b/cmake/monetdb-findpackages.cmake --- a/cmake/monetdb-findpackages.cmake +++ b/cmake/monetdb-findpackages.cmake @@ -17,6 +17,9 @@ if(${CMAKE_VERSION} VERSION_LESS "3.14.0 if(Python3_Interpreter_FOUND) set(Python_EXECUTABLE "${Python3_EXECUTABLE}") endif(Python3_Interpreter_FOUND) + if(NumPy_FOUND) +set(Python3_Numpy_FOUND 1) + endif(NumPy_FOUND) else() find_package(Python3 COMPONENTS Interpreter Development NumPy) if(Python3_Interpreter_FOUND) @@ -24,7 +27,7 @@ else() endif(Python3_Interpreter_FOUND) endif() if(PY3INTEGRATION) - set(HAVE_LIBPY3 "${Python3_FOUND}") + set(HAVE_LIBPY3 "${Python3_NumPy_FOUND}") endif(PY3INTEGRATION) if(WIN32) ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: mbedded - so now on one line and with quotes and ; (con...
Changeset: e0b7d53126fc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e0b7d53126fc Modified Files: clients/mapilib/CMakeLists.txt Branch: mbedded Log Message: so now on one line and with quotes and ; (consistency would be nice) diffs (13 lines): diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt --- a/clients/mapilib/CMakeLists.txt +++ b/clients/mapilib/CMakeLists.txt @@ -47,8 +47,7 @@ set_target_properties(mapi PROPERTIES VERSION ${MAPI_VERSION} SOVERSION ${MAPI_VERSION_MAJOR} - PUBLIC_HEADER mapi.h - PUBLIC_HEADER mapi_querytype.h) + PUBLIC_HEADER "mapi.h;mapi_querytype.h") if (NOT WIN32) configure_file(monetdb-mapi.pc.in ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: mbedded - need 2 lines of PUBLIC_HEADER
Changeset: 74e82e39e631 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=74e82e39e631 Modified Files: clients/mapilib/CMakeLists.txt Branch: mbedded Log Message: need 2 lines of PUBLIC_HEADER diffs (13 lines): diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt --- a/clients/mapilib/CMakeLists.txt +++ b/clients/mapilib/CMakeLists.txt @@ -47,7 +47,8 @@ set_target_properties(mapi PROPERTIES VERSION ${MAPI_VERSION} SOVERSION ${MAPI_VERSION_MAJOR} - PUBLIC_HEADER mapi.h mapi_querytype.h) + PUBLIC_HEADER mapi.h + PUBLIC_HEADER mapi_querytype.h) if (NOT WIN32) configure_file(monetdb-mapi.pc.in ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: mbedded - we need mapi_querytype.h
Changeset: 942baf37b62b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=942baf37b62b Modified Files: clients/mapilib/CMakeLists.txt Branch: mbedded Log Message: we need mapi_querytype.h diffs (12 lines): diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt --- a/clients/mapilib/CMakeLists.txt +++ b/clients/mapilib/CMakeLists.txt @@ -47,7 +47,7 @@ set_target_properties(mapi PROPERTIES VERSION ${MAPI_VERSION} SOVERSION ${MAPI_VERSION_MAJOR} - PUBLIC_HEADER mapi.h /mapi_querytype.h) + PUBLIC_HEADER mapi.h mapi_querytype.h) if (NOT WIN32) configure_file(monetdb-mapi.pc.in ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: mbedded - we need mapi_querytype.h
Changeset: a7f5f9049936 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7f5f9049936 Modified Files: clients/mapilib/CMakeLists.txt Branch: mbedded Log Message: we need mapi_querytype.h diffs (12 lines): diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt --- a/clients/mapilib/CMakeLists.txt +++ b/clients/mapilib/CMakeLists.txt @@ -47,7 +47,7 @@ set_target_properties(mapi PROPERTIES VERSION ${MAPI_VERSION} SOVERSION ${MAPI_VERSION_MAJOR} - PUBLIC_HEADER mapi.h) + PUBLIC_HEADER mapi.h /mapi_querytype.h) if (NOT WIN32) configure_file(monetdb-mapi.pc.in ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - sqlsmith queries with timeouts and MAL errors
Changeset: bb00415a51ee for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb00415a51ee Modified Files: sql/test/mergetables/Tests/sqlsmith-exists2.sql Branch: Jun2020 Log Message: sqlsmith queries with timeouts and MAL errors diffs (210 lines): diff --git a/sql/test/mergetables/Tests/sqlsmith-exists2.sql b/sql/test/mergetables/Tests/sqlsmith-exists2.sql --- a/sql/test/mergetables/Tests/sqlsmith-exists2.sql +++ b/sql/test/mergetables/Tests/sqlsmith-exists2.sql @@ -283,5 +283,206 @@ select and (ref_4.i is not null) limit 56) as subq_0 on (true) where true limit 85; + --long output + +select + subq_1.c0 as c0, + subq_1.c0 as c1, + subq_1.c0 as c2, + subq_0.c0 as c3, + subq_0.c1 as c4, + subq_0.c0 as c5, + subq_0.c0 as c6 +from + (select + ref_0.col0 as c0, + ref_1.bb as c1 + from + tab0 as ref_0 + right join analytics as ref_1 + on (exists ( + select + ref_1.aa as c0 + from + longtable as ref_2 + where ref_0.col2 is not null)) + where ((ref_1.aa is null) + and ((false) + and (ref_0.col2 is not null))) + or (ref_0.col2 is not null)) as subq_0 + inner join (select + ref_3.col3 as c0 + from + tbl_productsales as ref_3 + where (ref_3.col3 is null) + and (exists ( + select + ref_3.col6 as c0, + ref_3.col2 as c1, + ref_4.col1 as c2, + ref_4.col1 as c3, + ref_4.col2 as c4, + ref_3.col4 as c5, + ref_4.col0 as c6, + ref_4.col0 as c7 + from + tab0 as ref_4 + where (true) + and (true))) + limit 173) as subq_1 + on ((subq_1.c0 is not null) + or (subq_0.c0 is null)) +where subq_1.c0 is not null; + --empty + +select + ref_0.col2 as c0, + cast(nullif(ref_0.col1, + ref_0.col0) as int) as c1, + 29 as c2, + ref_0.col1 as c3, + ref_0.col1 as c4, + ref_0.col0 as c5 +from + tab1 as ref_0 +where (((true) + and ((ref_0.col0 is not null) + and (ref_0.col2 is null))) + or (false)) + or (exists ( + select + ref_1.col2 as c0, + subq_0.c0 as c1, + ref_1.col1 as c2, + subq_0.c6 as c3, + ref_0.col1 as c4, + ref_1.col2 as c5, + ref_1.col1 as c6, + ref_1.col0 as c7, + ref_0.col2 as c8, + ref_1.col1 as c9, + ref_1.col0 as c10, + subq_0.c1 as c11, + ref_0.col2 as c12, + subq_0.c3 as c13, + ref_1.col1 as c14 + from + tab0 as ref_1 + right join (select + 17 as c0, + ref_0.col1 as c1, + ref_3.aa as c2, + ref_0.col1 as c3, + ref_3.aa as c4, + ref_3.aa as c5, + ref_0.col0 as c6 + from + tbl_productsales as ref_2 + inner join analytics as ref_3 + on (ref_2.col1 = ref_3.aa ) + where true) as subq_0 + on ((false) + or ((ref_1.col1 is null) + and ((true) + and ((true) + and subq_0.c5 is null) + or (false)) + or ((false) + or (true))) + and (exists ( + select + ref_1.col0 as c0, + subq_0.c0 as c1, + subq_0.c3 as c2, + ref_4.col1 as c3, + subq_0.c0 as c4 + from + tab0 as ref_4 + where exists ( + select + ref_4.col1 as c0, + ref_0.col0 as c1 + from + tab2 as ref_5 + where true + where ((exists ( + select + ref_6.col1 as c0, + ref_0.col2 as c1, + ref_1.col0 as c2, + subq_0.c1 as c3, + ref_1.col1 as c4, + subq_0.c3 as c5, + ref_1.col0 as c6, + ref_1.col2 as c7 + from + tab1 as ref_6 + where false)) + or (exists ( + select + ref_0.col1 as c0, + subq_0.c4 as c1, + ref_0.col2 as c2, + ref_1.col0 as c3, + ref_1.col0 as c4, + ref_0.col1 as c5 + from + tab1 as ref_7 + where ref_1.col2 is null))) + and (subq_0.c5 is not null))) +limit 74; + -- 96 14 29 14 14 51 + -- 59 5 29 5 5 85 + -- 68 47 29 47 47 91 + +select + cast(coalesce(subq_1.c0, + cast(nullif(subq_0.c0, + 93) as int)) as int) as c0, + subq_1.c0 as c1 +from + (select + ref_0.col4 as c0, + ref_0.col7 as c1, + ref_0.col4 as c2 + from + another_t as ref_0 + where false + limit 139) as subq_0 + inner join (select + ref_1.col1 as c0 + from + longtable as ref_1 + where 7 is not null + limit 114) as subq_1 + on (exists ( + select + ref_3.col1 as c0, + subq_1.c0 as c1, + ref_3.col0 as c2, + ref_2.bb as c3, + ref_4.col8 as c4 + from + analytics as ref_2 + left join tab2 as ref_3 + left join longtable as ref_4 + on (subq_0.c0 is null) + on (ref_2.bb = ref_4.col1 ) + where false)) +where (((exists ( + select + ref_5.col5 as c0 + from + longtable as ref_5 + where ((false) + and (subq_0.c1 is not null)) + or (false))) + or ((true) + and ((true) + and (false + or (subq_1.c0 is not null)) + and ((subq_0.c0 is null) + or (false)); + -- empty ROLLBACK; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Fix for sqlsmith crash, ie if a topN relation...
Changeset: 4ce20134d011 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ce20134d011 Modified Files: sql/server/rel_optimizer.c sql/test/mergetables/Tests/sqlsmith-exists2.stable.out Branch: Jun2020 Log Message: Fix for sqlsmith crash, ie if a topN relation has more than one reference, it cannot be pushed down diffs (99 lines): 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 @@ -2109,7 +2109,7 @@ rel_push_topn_and_sample_down(mvc *sql, /* push topn/sample under projections */ - if (r && is_simple_project(r->op) && !need_distinct(r) && !rel_is_ref(r) && r->l && !r->r) { + if (!rel_is_ref(rel) && r && is_simple_project(r->op) && !need_distinct(r) && !rel_is_ref(r) && r->l && !r->r) { sql_rel *x = r, *px = x; while (is_simple_project(x->op) && !need_distinct(x) && !rel_is_ref(x) && x->l && !x->r) { diff --git a/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out b/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out --- a/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out +++ b/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out @@ -221,6 +221,83 @@ stdout of test 'sqlsmith-exists2` in dir [ 1] [ 1] [ 1] +#select +# ref_1.col3 as c0, +# ref_1.col4 as c1, +# cast(nullif(ref_0.col0, +# subq_0.c8) as int) as c2 from +# tab1 as ref_0 +# right join tbl_productsales as ref_1 +# on (exists ( +# select +# ref_1.col1 as c0, +# ref_2.col2 as c1, +# ref_0.col0 as c2, +# ref_2.col0 as c3, +# ref_2.col0 as c4, +# ref_1.col2 as c5 +# from +# tab1 as ref_2 +# where false)) +# inner join (select +# ref_4.i as c0, +# ref_3.col0 as c1, +# ref_4.i as c2, +# ref_4.i as c3, +# ref_4.i as c4, +# ref_4.i as c5, +# ref_3.col2 as c6, +# ref_4.i as c7, +# ref_3.col2 as c8, +% ., ., . # table_name +% c0, c1, c2 # name +% varchar, int,int # type +% 9, 3, 1 # length +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "Mobo Game", 200,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "PKO Game", 400,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shirt", 500,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Shorts",100,NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] +[ "Ball", 0, NULL] #ROLLBACK; # 22:12:15 > ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Starting the day with breakfast bugs and cras...
Changeset: 92957b73e447 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=92957b73e447 Modified Files: sql/test/mergetables/Tests/sqlsmith-exists2.sql sql/test/miscellaneous/Tests/groupby_error.sql sql/test/subquery/Tests/subquery6.sql Branch: Jun2020 Log Message: Starting the day with breakfast bugs and crashes :S diffs (83 lines): diff --git a/sql/test/mergetables/Tests/sqlsmith-exists2.sql b/sql/test/mergetables/Tests/sqlsmith-exists2.sql --- a/sql/test/mergetables/Tests/sqlsmith-exists2.sql +++ b/sql/test/mergetables/Tests/sqlsmith-exists2.sql @@ -241,4 +241,47 @@ from tab1 on (true); -- 27 rows with 1 +select + ref_1.col3 as c0, + ref_1.col4 as c1, + cast(nullif(ref_0.col0, + subq_0.c8) as int) as c2 from + tab1 as ref_0 + right join tbl_productsales as ref_1 + on (exists ( + select + ref_1.col1 as c0, + ref_2.col2 as c1, + ref_0.col0 as c2, + ref_2.col0 as c3, + ref_2.col0 as c4, + ref_1.col2 as c5 + from + tab1 as ref_2 + where false)) + inner join (select + ref_4.i as c0, + ref_3.col0 as c1, + ref_4.i as c2, + ref_4.i as c3, + ref_4.i as c4, + ref_4.i as c5, + ref_3.col2 as c6, + ref_4.i as c7, + ref_3.col2 as c8, + ref_4.i as c9 + from + tab0 as ref_3 + right join integers as ref_4 + on (true) + where ((73 is null) + and (ref_4.i is not null)) + or (true)) + and (ref_4.i is null)) + or (ref_3.col2 is null)) + or (true)) + and (ref_4.i is not null) + limit 56) as subq_0 + on (true) where true limit 85; + ROLLBACK; diff --git a/sql/test/miscellaneous/Tests/groupby_error.sql b/sql/test/miscellaneous/Tests/groupby_error.sql --- a/sql/test/miscellaneous/Tests/groupby_error.sql +++ b/sql/test/miscellaneous/Tests/groupby_error.sql @@ -32,6 +32,12 @@ SELECT col0 FROM tab2 WHERE - - col2; -- 75 -- 46 +SELECT 1 FROM tab0 WHERE NOT (NOT NULL IN (1)); + --empty + +SELECT - col0 + + CAST ( NULL AS INTEGER ) AS col2 FROM tab0 AS cor0 WHERE NOT ( NOT + - CAST ( NULL AS INTEGER ) NOT IN ( col0 / CAST ( col2 AS INTEGER ) - + col1 ) ); + --empty + PLAN SELECT DISTINCT col0, col1, col2, col0 FROM tab0; SELECT DISTINCT col0, col1, col2, col0 FROM tab0; diff --git a/sql/test/subquery/Tests/subquery6.sql b/sql/test/subquery/Tests/subquery6.sql --- a/sql/test/subquery/Tests/subquery6.sql +++ b/sql/test/subquery/Tests/subquery6.sql @@ -36,6 +36,12 @@ WHERE ctr1.ctr_total_return > AND ctr1.ctr_customer_sk = TotalSales; --empty +SELECT i FROM integers i1 WHERE (SELECT CASE WHEN i1.i IS NULL THEN (SELECT FALSE FROM integers i2) ELSE TRUE END); + --error, more than one row returned by a subquery used as an expression + +SELECT (SELECT (SELECT SUM(col1)) IN (MAX(col2))) FROM another_t; + --False + DROP TABLE tbl_ProductSales; DROP TABLE another_T; DROP TABLE integers; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list