Changeset: f10cf4b23480 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f10cf4b23480
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/server/rel_select.c
Branch: noce
Log Message:
Merge with default branch.
diffs (truncated from 2028 to 300 lines):
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -319,11 +319,6 @@ BATcalcnot(BAT *b, BAT *s, BAT *r)
bn->tnonil = nils == 0;
bn->tkey = b->tkey && nils <= 1;
- if (nils != 0 && !b->tnil) {
- b->tnil = true;
- b->batDirtydesc = true;
- }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -449,11 +444,6 @@ BATcalcnegate(BAT *b, BAT *s, BAT *r)
bn->tnonil = nils == 0;
bn->tkey = b->tkey && nils <= 1;
- if (nils != 0 && !b->tnil) {
- b->tnil = true;
- b->batDirtydesc = true;
- }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -589,11 +579,6 @@ BATcalcabsolute(BAT *b, BAT *s, BAT *r)
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
- if (nils && !b->tnil) {
- b->tnil = true;
- b->batDirtydesc = true;
- }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -728,11 +713,6 @@ BATcalciszero(BAT *b, BAT *s, BAT *r)
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
- if (nils != 0 && !b->tnil) {
- b->tnil = true;
- b->batDirtydesc = true;
- }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -871,11 +851,6 @@ BATcalcsign(BAT *b, BAT *s, BAT *r)
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
- if (nils != 0 && !b->tnil) {
- b->tnil = true;
- b->batDirtydesc = true;
- }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -3809,15 +3784,6 @@ BATcalcincrdecr(BAT *b, BAT *s, BAT *r,
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
- if (nils && !b->tnil) {
- b->tnil = true;
- b->batDirtydesc = true;
- }
- if (nils == 0 && !b->tnonil) {
- b->tnonil = true;
- b->batDirtydesc = true;
- }
-
TRC_DEBUG(ALGO, "%s: b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
func, ALGOBATPAR(b), ALGOOPTBATPAR(s),
diff --git a/monetdb5/modules/mal/sysmon.c b/monetdb5/modules/mal/sysmon.c
--- a/monetdb5/modules/mal/sysmon.c
+++ b/monetdb5/modules/mal/sysmon.c
@@ -31,13 +31,14 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb,
bat *w = getArgReference_bat(stk,pci,7);
bat *m = getArgReference_bat(stk,pci,8);
lng qtag;
- int wrk, mem, sz;
+ int wrk, mem;
+ BUN sz;
timestamp tsn;
str msg = MAL_SUCCEED;
(void) cntxt;
(void) mb;
- sz = qsize; // reserve space for all tuples in QRYqueue
+ sz = (BUN) qsize; // reserve space for all tuples in QRYqueue
tag = COLnew(0, TYPE_lng, sz, TRANSIENT);
sessionid = COLnew(0, TYPE_int, sz, TRANSIENT);
user = COLnew(0, TYPE_str, sz, TRANSIENT);
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
@@ -779,7 +779,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
}
assert(!e->r);
if (exps) {
- int nrcols = 0, single_value = (fe->card <= CARD_ATOM);
+ unsigned nrcols = 0;
+ int single_value = (fe->card <= CARD_ATOM);
int push_cond_exec = 0, coalesce = 0;
stmt *ncond = NULL;
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
@@ -2625,7 +2625,7 @@ stmt_catalog(backend *be, int type, stmt
void
stmt_set_nrcols(stmt *s)
{
- int nrcols = 0;
+ unsigned nrcols = 0;
int key = 1;
node *n;
list *l = s->op4.lval;
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -107,7 +107,7 @@ static int convert_matrix[EC_MAX][EC_MAX
/* EC_FLT */ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0 },
/* EC_TIME */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0,
0 },
/* EC_TIME_TZ */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
0 },
-/* EC_DATE */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0,
0 },
+/* EC_DATE */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0,
0 },
/* EC_TSTAMP */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 2, 0, 0 },
/* EC_TSTAMP_TZ */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
0 },
/* EC_GEOM */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0 },
diff --git a/sql/server/CMakeLists.txt b/sql/server/CMakeLists.txt
--- a/sql/server/CMakeLists.txt
+++ b/sql/server/CMakeLists.txt
@@ -9,7 +9,7 @@
BISON_TARGET(sqlparser
sql_parser.y
${CMAKE_CURRENT_BINARY_DIR}/sql_parser.tab.c
- COMPILE_FLAGS "-d -p sql -r all"
+ COMPILE_FLAGS "-d -p sql"
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/sql_parser.tab.h)
add_library(sqlserver STATIC)
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
@@ -924,10 +924,22 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
if (!(rexps = read_exps(sql, lrel, rrel, pexps, r, pos,
'(', 0)))
return NULL;
if (filter) {
- sql_subfunc *func = sql_find_func(sql->sa,
mvc_bind_schema(sql, "sys"), fname, 1+list_length(exps), F_FILT, NULL);
- if (!func)
+ sql_subfunc *func = NULL;
+ list *tl = sa_list(sql->sa);
+
+ for (node *n = lexps->h; n; n = n->next){
+ sql_exp *e = n->data;
+
+ list_append(tl, exp_subtype(e));
+ }
+ for (node *n = rexps->h; n; n = n->next){
+ sql_exp *e = n->data;
+
+ list_append(tl, exp_subtype(e));
+ }
+
+ if (!(func = sql_bind_func_(sql->sa,
mvc_bind_schema(sql, "sys"), fname, tl, F_FILT)))
return sql_error(sql, -1,
SQLSTATE(42000) "Filter: missing function '%s'\n", fname);
-
return exp_filter(sql->sa, lexps, rexps, func,
anti);
}
return exp_or(sql->sa, lexps, rexps, anti);
@@ -1028,20 +1040,33 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
if (tname && !s)
return sql_error(sql, -1, SQLSTATE(42000) "Schema %s
not found\n", tname);
if (grp) {
- if (exps && exps->h)
- a = sql_bind_func(sql->sa, s, cname,
exp_subtype(exps->h->data), NULL, F_AGGR);
- else
+ if (exps && exps->h) {
+ list *ops = sa_list(sql->sa);
+ for( n = exps->h; n; n = n->next)
+ append(ops, exp_subtype(n->data));
+ a = sql_bind_func_(sql->sa, s, cname, ops,
F_AGGR);
+ } else {
a = sql_bind_func(sql->sa, s, cname,
sql_bind_localtype("void"), NULL, F_AGGR); /* count(*) */
+ }
if (!a)
- return sql_error(sql, -1, SQLSTATE(42000)
"Aggregate %s%s%s not found\n", tname ? tname : "", tname ? "." : "", cname);
+ return sql_error(sql, -1, SQLSTATE(42000)
"Aggregate '%s%s%s %d' not found\n", tname ? tname : "", tname ? "." : "",
cname, list_length(exps));
exp = exp_aggr( sql->sa, exps, a, unique, no_nils,
CARD_ATOM, 1);
if (zero_if_empty)
set_zero_if_empty(exp);
} else {
+ int nops = list_length(exps);
list *ops = sa_list(sql->sa);
for( n = exps->h; n; n = n->next)
append(ops, exp_subtype(n->data));
+
f = sql_bind_func_(sql->sa, s, cname, ops, F_FUNC);
+ if (!f)
+ f = sql_bind_func_(sql->sa, s, cname, ops,
F_ANALYTIC);
+ if (!f && list_length(ops) > 1) {
+ list_remove_node(ops, ops->t);
+ list_remove_node(ops, ops->t); /* some window
functions require don't include the bounds on their definition, ugh */
+ f = sql_bind_func_(sql->sa, s, cname, ops,
F_ANALYTIC);
+ }
/* fix scale of mul function, other type casts are
explicit */
if (f && f->func->fix_scale == SCALE_MUL &&
list_length(exps) == 2) {
@@ -1072,7 +1097,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
if (f)
exp = exp_op( sql->sa, exps, f);
else
- return sql_error(sql, -1, SQLSTATE(42000)
"Function: missing '%s.%s %d'\n", tname, cname, list_length(ops));
+ return sql_error(sql, -1, SQLSTATE(42000)
"Function '%s%s%s %d' not found\n", tname ? tname : "", tname ? "." : "",
cname, nops);
}
}
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
@@ -1491,6 +1491,7 @@ rel_push_func_down(visitor *v, sql_rel *
sql_rel *nrel;
sql_rel *l = rel->l, *ol = l;
sql_rel *r = rel->r, *or = r;
+ visitor nv = { .sql = v->sql, .parent = v->parent };
/* we need a full projection, group by's and unions
cannot be extended
* with more expressions */
@@ -1510,13 +1511,9 @@ rel_push_func_down(visitor *v, sql_rel *
}
nrel = rel_project(v->sql->sa, rel,
rel_projections(v->sql, rel, NULL, 1, 1));
- int old_changes = v->changes;
- v->changes = 0;
- if (!(exps = exps_push_single_func_down(v, rel, l, r,
exps))) {
- v->changes = old_changes;
+ if (!(exps = exps_push_single_func_down(&nv, rel, l, r,
exps)))
return NULL;
- }
- if (v->changes) {
+ if (nv.changes) {
rel = nrel;
} else {
if (l != ol)
@@ -1524,7 +1521,7 @@ rel_push_func_down(visitor *v, sql_rel *
if (is_joinop(rel->op) && r != or)
rel->r = or;
}
- v->changes += old_changes;
+ v->changes += nv.changes;
}
}
if (rel->op == op_project && rel->l && rel->exps) {
@@ -1826,18 +1823,15 @@ rel_simplify_fk_joins(visitor *v, sql_re
static list *
sum_limit_offset(mvc *sql, sql_rel *rel)
{
- list *nexps = new_exp_list(sql->sa);
- sql_subtype *lng = sql_bind_localtype("lng");
- sql_subfunc *add;
-
/* for sample we always propagate */
if (is_sample(rel->op))
return exps_copy(sql, rel->exps);
/* if the expression list only consists of a limit expression, we copy
it */
if (list_length(rel->exps) == 1 && rel->exps->h->data)
- return append(nexps, rel->exps->h->data);
- add = sql_bind_func_result(sql->sa, sql->session->schema, "sql_add",
F_FUNC, lng, 2, lng, lng);
- return append(nexps, exp_op(sql->sa, rel->exps, add));
+ return list_append(sa_list(sql->sa), rel->exps->h->data);
+ sql_subtype *lng = sql_bind_localtype("lng");
+ sql_subfunc *add = sql_bind_func_result(sql->sa, sql->session->schema,
"sql_add", F_FUNC, lng, 2, lng, lng);
+ return list_append(sa_list(sql->sa), exp_op(sql->sa, rel->exps, add));
}
static int
@@ -1968,7 +1962,7 @@ rel_push_topn_and_sample_down(visitor *v
}
}
- if (r && need_distinct(r))
+ if (r && is_simple_project(r->op) && need_distinct(r))
return rel;
/* push topn/sample under projections */
@@ -1995,24 +1989,28 @@ rel_push_topn_and_sample_down(visitor *v
sql_rel *u = r, *x;
sql_rel *ul = u->l;
sql_rel *ur = u->r;
-
- /* only push topn once */
+ bool changed = false;
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list