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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list