Changeset: 9c4d86d2983d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9c4d86d2983d
Modified Files:
clients/mapilib/mapi.c
configure.ag
sql/server/rel_dump.c
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/test/BugTracker-2016/Tests/concat_2_integers.Bug-4058.stable.out
Branch: default
Log Message:
Merge with Jun2016 branch.
diffs (135 lines):
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2175,6 +2175,8 @@ mapi_destroy(Mapi mid)
free(mid->password);
if (mid->language)
free(mid->language);
+ if (mid->motd)
+ free(mid->motd);
if (mid->database)
free(mid->database);
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
@@ -72,6 +72,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
(void)sql;
if (!e)
return;
+ //mnstr_printf(fout, " %p ", e);
switch(e->type) {
case e_psm: {
if (e->flag & PSM_SET) {
@@ -319,6 +320,8 @@ rel_print_(mvc *sql, stream *fout, sql_
mnstr_printf(fout, "\n%cREF %d (%d)", decorate?'=':' ', nr,
cnt);
}
+
+ //mnstr_printf(fout, " %p ", rel);
switch (rel->op) {
case op_basetable: {
sql_table *t = rel->l;
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
@@ -5545,6 +5545,8 @@ exps_used(list *l)
static void
rel_used(sql_rel *rel)
{
+ if (!rel)
+ return;
if (is_join(rel->op) || is_set(rel->op) || is_semi(rel->op)) {
if (rel->l)
rel_used(rel->l);
@@ -5556,7 +5558,7 @@ rel_used(sql_rel *rel)
} else if (rel->op == op_table && rel->r) {
exp_used(rel->r);
}
- if (rel->exps) {
+ if (rel && rel->exps) {
exps_used(rel->exps);
if (rel->r && (rel->op == op_project || rel->op == op_groupby))
exps_used(rel->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
@@ -2360,6 +2360,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
list *vals = NULL, *ll = sa_list(sql->sa);
int correlated = 0;
int l_is_value = 1, r_is_rel = 0;
+ list *pexps = NULL;
/* complex case */
if (dl->h->type == type_list) { /* (a,b..) in (.. ) */
@@ -2389,12 +2390,18 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
/* first remove the NULLs */
if (sc->token == SQL_NOT_IN &&
l->card != CARD_ATOM && has_nil(l)) {
+ sql_exp *ol;
+
+ rel = rel_project(sql->sa, rel,
rel_projections(sql, rel, NULL, 1, 1));
+ pexps = rel_projections(sql, rel, NULL, 1, 1);
+ l = exp_label(sql->sa, l, ++sql->label);
+ append(rel->exps, l);
+ ol = l;
+ l = exp_column(sql->sa, exp_relname(ol),
exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol), is_intern(ol));
e = rel_unop_(sql, l, NULL, "isnull",
card_value);
e = exp_compare(sql->sa, e,
exp_atom_bool(sql->sa, 0), cmp_equal);
- if (!is_select(rel->op) || rel_is_ref(rel))
- left = rel = rel_select(sql->sa, rel,
e);
- else
- rel_select_add_exp(sql->sa, rel, e);
+ left = rel = rel_select(sql->sa, rel, e);
+ l = exp_column(sql->sa, exp_relname(ol),
exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol), is_intern(ol));
}
append(ll, l);
@@ -2440,7 +2447,10 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
list_append(nvals, r);
}
e = exp_in(sql->sa, l, nvals,
sc->token==SQL_NOT_IN?cmp_notin:cmp_in);
- return rel_select(sql->sa, rel, e);
+ rel = rel_select(sql->sa, rel, e);
+ if (pexps)
+ rel = rel_project(sql->sa, rel, pexps);
+ return rel;
} else { /* complex case */
vals = new_exp_list(sql->sa);
n = dl->h->next;
@@ -2474,12 +2484,6 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
z = rel;
correlated = 1;
}
- /*
- if (!r || !(r=rel_check_type(sql, st,
r, type_equal))) {
- rel_destroy(right);
- return NULL;
- }
- */
if (!r) {
rel_destroy(right);
return NULL;
@@ -2564,7 +2568,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
rel = rel_select(sql->sa, rel, e);
}
if (!correlated && l_is_value && outer)
- rel = rel_crossproduct(sql->sa, outer, rel,
op_join);
+ rel = rel_crossproduct(sql->sa, rel_dup(outer),
rel, op_join);
rel = rel_project(sql->sa, rel, rel_projections(sql,
outer, NULL, 1, 1));
set_processed(rel);
return rel;
diff --git
a/sql/test/BugTracker-2016/Tests/concat_2_integers.Bug-4058.stable.out
b/sql/test/BugTracker-2016/Tests/concat_2_integers.Bug-4058.stable.out
--- a/sql/test/BugTracker-2016/Tests/concat_2_integers.Bug-4058.stable.out
+++ b/sql/test/BugTracker-2016/Tests/concat_2_integers.Bug-4058.stable.out
@@ -128,8 +128,8 @@ Ready.
[ 682, 1402, "V", true ]
[ 796, 1507, "V", true ]
[ 743, 1505, "V", true ]
-#sselect * from "sys"."test_bug4058" where f3='V' AND f4=true AND f1||f2 NOT
IN (select f1||f2 from "sys"."test_bug4058_tmp");
-% sys.tmp, sys.tmp, sys.tmp, sys.tmp # table_name
+#select * from "sys"."test_bug4058" where f3='V' AND f4=true AND f1||f2 NOT IN
(select f1||f2 from "sys"."test_bug4058_tmp");
+% sys.test_bug4058, sys.test_bug4058, sys.test_bug4058,
sys.test_bug4058 # table_name
% f1, f2, f3, f4 # name
% int, int, clob, boolean # type
% 3, 4, 1, 5 # length
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list