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

Reply via email to