Changeset: 6caf9e872bc1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6caf9e872bc1
Modified Files:
sql/backends/monet5/sql_statement.c
sql/server/rel_select.c
sql/server/sql_mvc.h
Branch: Aug2018
Log Message:
fix problem with single value selects
diffs (54 lines):
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
@@ -1956,7 +1956,7 @@ stmt_project(backend *be, stmt *op1, stm
s->op2 = op2;
s->flag = cmp_project;
s->key = 0;
- s->nrcols = 2;
+ s->nrcols = MAX(op1->nrcols,op2->nrcols);
s->nr = getDestVar(q);
s->q = q;
return s;
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
@@ -4703,7 +4703,7 @@ rel_value_exp2(mvc *sql, sql_rel **rel,
e = _rel_lastexp(sql, r);
/* group by needed ? */
- if (e->card > CARD_ATOM && e->card > ek.card) {
+ if (e->card >= CARD_ATOM && e->card > ek.card) {
int processed = is_processed(r);
sql_subaggr *zero_or_one =
sql_bind_aggr(sql->sa, sql->session->schema, "zero_or_one", exp_subtype(e));
@@ -4874,8 +4874,11 @@ column_exp(mvc *sql, sql_rel **rel, symb
{
dlist *l = column_e->data.lval;
exp_kind ek = {type_value, card_column, FALSE};
- sql_exp *ve = rel_value_exp(sql, rel, l->h->data.sym, f, ek);
-
+ sql_exp *ve;
+
+ if (f == sql_sel && rel && *rel && (*rel)->card < CARD_AGGR)
+ ek.card = card_value;
+ ve = rel_value_exp(sql, rel, l->h->data.sym, f, ek);
if (!ve)
return NULL;
/* AS name */
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -29,11 +29,10 @@
#define type_value 0
#define type_predicate 1
-/* todo cleanup card_row and card_set, both seem to be not used */
/* cardinality expected by enclosing operator */
#define card_none -1 /* psm call doesn't return anything */
#define card_value 0
-#define card_row 1
+#define card_row 1 /* needed for subqueries on single value tables
(select (select 1))*/
#define card_column 2
#define card_set 3 /* some operators require only a set (IN/EXISTS) */
#define card_relation 4
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list