Changeset: 35ed79069994 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=35ed79069994 Modified Files: monetdb5/mal/mal_authorize.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/server/rel_optimizer.c Branch: default Log Message:
fixed merge issue (not sure from when..) diffs (164 lines): diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c --- a/monetdb5/mal/mal_authorize.c +++ b/monetdb5/mal/mal_authorize.c @@ -394,7 +394,10 @@ AUTHinitTables(const char *passwd) { passwd = "monetdb"; /* default password */ pw = mcrypt_BackendSum(passwd, strlen(passwd)); if(!pw) { - throw(MAL, "initTables", SQLSTATE(42000) "Crypt backend hash not found"); + if (!GDKembedded()) + throw(MAL, "initTables", SQLSTATE(42000) "Crypt backend hash not found"); + else + pw = strdup(passwd); } msg = AUTHaddUser(&uid, NULL, "monetdb", pw); free(pw); @@ -531,8 +534,11 @@ AUTHaddUser(oid *uid, Client cntxt, cons throw(MAL, "addUser", "user '%s' already exists", username); /* we assume the BATs are still aligned */ - rethrow("addUser", tmp, AUTHcypherValue(&hash, passwd)); - + if (!GDKembedded()) { + rethrow("addUser", tmp, AUTHcypherValue(&hash, passwd)); + } else { + hash = GDKstrdup("hash"); + } /* needs force, as SQL makes a view over user */ if (BUNappend(user, username, true) != GDK_SUCCEED || BUNappend(pass, hash, true) != GDK_SUCCEED) { @@ -544,7 +550,8 @@ AUTHaddUser(oid *uid, Client cntxt, cons p = AUTHfindUser(username); /* make the stuff persistent */ - AUTHcommit(); + if (!GDKembedded()) + AUTHcommit(); *uid = p; return(MAL_SUCCEED); @@ -999,6 +1006,8 @@ AUTHverifyPassword(const char *passwd) return(MAL_SUCCEED); #else + if (GDKembedded()) + return(MAL_SUCCEED); (void) passwd; throw(MAL, "verifyPassword", "Unknown backend hash algorithm: %s", MONETDB5_PASSWDHASH); 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 @@ -2411,14 +2411,21 @@ rel2bin_join(backend *be, sql_rel *rel, node *en = NULL, *n; stmt *left = NULL, *right = NULL, *join = NULL, *jl, *jr; stmt *ld = NULL, *rd = NULL; + stmt *lcand = NULL, *rcand = NULL; int need_left = (rel->flag == LEFT_JOIN); if (rel->l) /* first construct the left sub relation */ left = subrel_bin(be, rel->l, refs); if (rel->r) /* first construct the right sub relation */ right = subrel_bin(be, rel->r, refs); - left = subrel_project(be, left, refs, rel->l); - right = subrel_project(be, right, refs, rel->r); + + if (list_length(rel->exps) > 1) { + left = subrel_project(be, left, refs, rel->l); + right = subrel_project(be, right, refs, rel->r); + } else { + lcand = left->cand; + rcand = right->cand; + } if (!left || !right) return NULL; left = row2cols(be, left); @@ -2436,7 +2443,7 @@ rel2bin_join(backend *be, sql_rel *rel, if (list_empty(jexps)) { /* cross product and continue after project */ stmt *l = bin_first_column(be, left); stmt *r = bin_first_column(be, right); - join = stmt_join(be, l, r, 0, cmp_all, 0, 0, false); + join = stmt_join_cand(be, l, r, lcand, rcand, 0, cmp_all, 0, 0, false); } if (join) { @@ -2472,6 +2479,11 @@ rel2bin_join(backend *be, sql_rel *rel, } } + if ((lcand || rcand) && e->flag != cmp_equal) { + left = subrel_project(be, left, refs, rel->l); + right = subrel_project(be, right, refs, rel->r); + lcand = rcand = NULL; + } s = exp_bin(be, e, left, right, NULL, NULL, NULL, NULL, 0, 1, 0); if (!s) { assert(sql->session->status == -10); /* Stack overflow errors shouldn't terminate the server */ @@ -2492,15 +2504,16 @@ rel2bin_join(backend *be, sql_rel *rel, } if (list_length(lje) > 1) { join = releqjoin(be, lje, rje, exps, used_hash, need_left, 0); - } else if (!join || need_left) { + } else if (!join || need_left || lcand || rcand) { sql_exp *e = exps->h->data; - join = stmt_join(be, lje->h->data, rje->h->data, 0, cmp_equal, need_left, is_semantics(e), false); + join = stmt_join_cand(be, lje->h->data, rje->h->data, lcand, rcand, 0, cmp_equal, need_left, is_semantics(e), false); + lcand = rcand = NULL; } } } else { stmt *l = bin_first_column(be, left); stmt *r = bin_first_column(be, right); - join = stmt_join(be, l, r, 0, cmp_all, 0, 0, rel->single); + join = stmt_join_cand(be, l, r, lcand, rcand, 0, cmp_all, 0, 0, rel->single); } jl = stmt_result(be, join, 0); jr = stmt_result(be, join, 1); diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -1136,8 +1136,10 @@ SQLparser(Client c) setVarType(c->curprg->def, 0, 0); if (backend_dumpstmt(be, c->curprg->def, r, 1, 0, c->query) < 0) err = 1; + /* else - opt = 1; + opt = (r->card > CARD_ATOM); + */ } else { char *q_copy = sa_strdup(m->sa, c->query); diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -2076,8 +2076,15 @@ stmt_join_cand(backend *be, stmt *op1, s q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); q = pushArgument(mb, q, op1->nr); q = pushArgument(mb, q, op2->nr); + if (!lcand) + q = pushNil(mb, q, TYPE_bat); + else + q = pushArgument(mb, q, lcand->nr); + if (!rcand) + q = pushNil(mb, q, TYPE_bat); + else + q = pushArgument(mb, q, rcand->nr); q = pushBit(mb, q, single?TRUE:FALSE); /* max_one */ - assert(!lcand && !rcand); if (q == NULL) return NULL; break; 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 @@ -9804,6 +9804,9 @@ rel_optimizer(mvc *sql, sql_rel *rel, in { int level = 0, changes = 1; + if (rel->card <= CARD_ATOM) + return rel; + rel = rel_keep_renames(sql, rel); for( ;rel && level < 20 && changes; level++) rel = optimize_rel(sql, rel, &changes, level, value_based_opt, storage_based_opt); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list