MonetDB: Dec2023 - fixing some more issues.

2024-01-20 Thread Niels Nes via checkin-list
Changeset: b10952fada1e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b10952fada1e
Modified Files:
monetdb5/modules/mal/txtsim.c
sql/server/rel_exp.c
sql/server/rel_optimize_exps.c
sql/server/rel_optimize_sel.c
Branch: Dec2023
Log Message:

fixing some more issues.
check size in dama. txtsim
add check for compares lower in the expression in exp_has_func, solving join 2 
semijoin optimizer
only use index hash on equality joins/selects
handle casewhen with null optimization properly


diffs (113 lines):

diff --git a/monetdb5/modules/mal/txtsim.c b/monetdb5/modules/mal/txtsim.c
--- a/monetdb5/modules/mal/txtsim.c
+++ b/monetdb5/modules/mal/txtsim.c
@@ -96,7 +96,9 @@ dameraulevenshtein(int *res, str *S, str
return MAL_SUCCEED;
}
sz = (n + 1) * (m + 1) * sizeof(int);
-   d = (int *) GDKmalloc(sz);
+   if (sz > (1<<30))
+   throw(MAL, "dameraulevenshtein", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+   d = (int *) GDKmalloc((size_t)sz);
if (d == NULL)
throw(MAL, "dameraulevenshtein", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
 
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2376,15 +2376,31 @@ exps_have_func(list *exps)
return 0;
 }
 
-int
-exp_has_func(sql_exp *e)
+static int exp_has_func_or_cmp(sql_exp *e, bool cmp);
+
+static int
+exps_have_func_or_cmp(list *exps, bool cmp)
+{
+   if (list_empty(exps))
+   return 0;
+   for(node *n=exps->h; n; n=n->next) {
+   sql_exp *e = n->data;
+
+   if (exp_has_func_or_cmp(e, cmp))
+   return 1;
+   }
+   return 0;
+}
+
+static int
+exp_has_func_or_cmp(sql_exp *e, bool cmp)
 {
if (!e)
return 0;
switch (e->type) {
case e_atom:
if (e->f)
-   return exps_have_func(e->f);
+   return exps_have_func_or_cmp(e->f, true);
return 0;
case e_convert:
return exp_has_func(e->l);
@@ -2392,16 +2408,18 @@ exp_has_func(sql_exp *e)
return 1;
case e_aggr:
if (e->l)
-   return exps_have_func(e->l);
+   return exps_have_func_or_cmp(e->l, true);
return 0;
case e_cmp:
+   if (cmp)
+   return 1;
if (e->flag == cmp_or || e->flag == cmp_filter) {
-   return (exps_have_func(e->l) || exps_have_func(e->r));
+   return (exps_have_func_or_cmp(e->l, true) || 
exps_have_func_or_cmp(e->r, true));
} else if (e->flag == cmp_in || e->flag == cmp_notin) {
-   return (exp_has_func(e->l) || exps_have_func(e->r));
+   return (exp_has_func_or_cmp(e->l, true) || 
exps_have_func_or_cmp(e->r, true));
} else {
-   return (exp_has_func(e->l) || exp_has_func(e->r) ||
-   (e->f && exp_has_func(e->f)));
+   return (exp_has_func_or_cmp(e->l, true) || 
exp_has_func_or_cmp(e->r, true) ||
+   (e->f && exp_has_func_or_cmp(e->f, 
true)));
}
case e_column:
case e_psm:
@@ -2410,6 +2428,12 @@ exp_has_func(sql_exp *e)
return 0;
 }
 
+int
+exp_has_func(sql_exp *e)
+{
+   return exp_has_func_or_cmp(e, false);
+}
+
 static int
 exps_has_sideeffect( list *exps)
 {
diff --git a/sql/server/rel_optimize_exps.c b/sql/server/rel_optimize_exps.c
--- a/sql/server/rel_optimize_exps.c
+++ b/sql/server/rel_optimize_exps.c
@@ -454,7 +454,7 @@ rel_simplify_predicates(visitor *v, sql_
sql_exp *le = n->data;
sql_exp *re = n->next->data;
 
-   if (exp_is_atom(le) && exp_is_atom(re) && le->type == e_atom && 
le->l && re->type == e_atom && re->l) {
+   if (exp_is_atom(le) && !exp_is_null(le) && exp_is_atom(re) && 
le->type == e_atom && le->l && re->type == e_atom && re->l) {
n = n->next->next;
if (exp_match_exp(le, re)) { /* x==y -> a */
sql_exp *res = n->data;
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -3586,6 +3586,8 @@ rel_use_index(visitor *v, sql_rel *rel)
for( n = exps->h; n && single_table; n = n->next) {
sql_exp *e = n->data, *nre = e->l;
 
+   if (!is_compare(e->type) || is_anti(e) || e->flag != 
cmp_equal)
+   return rel;
if (is_join(rel->op) && ((left && !rel_find_exp(rel->l, 
nre)) || (!left && rel_find_exp(rel->r, nre
nre = e->r;
single

MonetDB: Dec2023 - small fix for issue 7418, ie in window functi...

2024-01-20 Thread Niels Nes via checkin-list
Changeset: 279b78aa58aa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/279b78aa58aa
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2023/Tests/rel_order_by-assertion-7418.test
Branch: Dec2023
Log Message:

small fix for issue 7418, ie in window function handling don't pass that we are 
already in a order by.


diffs (27 lines):

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
@@ -5105,7 +5105,7 @@ rel_rankop(sql_query *query, sql_rel **r
 
/* Order By */
if (order_by_clause) {
-   obe = rel_order_by(query, &p, order_by_clause, 0, nf | 
sql_window);
+   obe = rel_order_by(query, &p, order_by_clause, 0, sql_window);
if (!obe)
return NULL;
}
diff --git a/sql/test/BugTracker-2023/Tests/rel_order_by-assertion-7418.test 
b/sql/test/BugTracker-2023/Tests/rel_order_by-assertion-7418.test
--- a/sql/test/BugTracker-2023/Tests/rel_order_by-assertion-7418.test
+++ b/sql/test/BugTracker-2023/Tests/rel_order_by-assertion-7418.test
@@ -14,8 +14,10 @@ statement error 42000!MAX: aggregate fun
 SELECT 0 IS NOT NULL FROM t7418 ORDER BY AVG ( max ( 331 ) ) NULLS LAST
 
 -- next causes: sql/server/rel_select.c:4766: rel_order_by: Assertion 
`is_project(rel->op)' failed.
-statement error 42000!MAX: aggregate functions cannot be nested
+query I
 SELECT 0 IS NOT NULL FROM t7418 ORDER BY AVG ( max ( 331 ) ) OVER ( ORDER BY 
634 NULLS FIRST ) NULLS LAST
+
+1
 
 query I
 SELECT * FROM t7418 ORDER BY v1
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org