Changeset: f5c2afae23d2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f5c2afae23d2
Modified Files:
        sql/server/rel_unnest.c
Branch: privfuncs
Log Message:

Merged with default


diffs (276 lines):

diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -46,7 +46,10 @@ function(monetdb_configure_defines)
   check_include_file("sys/un.h" HAVE_SYS_UN_H)
   check_include_file("sys/wait.h" HAVE_SYS_WAIT_H)
   check_include_file("unistd.h" HAVE_UNISTD_H)
-  check_include_file("uuid/uuid.h" HAVE_UUID_UUID_H)
+  cmake_push_check_state()
+    set(CMAKE_REQUIRED_INCLUDES 
"${CMAKE_REQUIRED_INCLUDES};${UUID_INCLUDE_DIR}")
+    check_include_file("uuid/uuid.h" HAVE_UUID_UUID_H)
+  cmake_pop_check_state()
   check_include_file("winsock2.h" HAVE_WINSOCK_H)
 
   find_library(GETOPT_LIB "getopt.lib")
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -89,6 +89,7 @@ target_sources(bat
 
 target_include_directories(bat
   PUBLIC
+  
$<$<BOOL:${UUID_FOUND}>:$<TARGET_PROPERTY:UUID::UUID,INTERFACE_INCLUDE_DIRECTORIES>>
   $<TARGET_PROPERTY:stream,INTERFACE_INCLUDE_DIRECTORIES>
   $<TARGET_PROPERTY:matomic,INTERFACE_INCLUDE_DIRECTORIES>
   $<TARGET_PROPERTY:mstring,INTERFACE_INCLUDE_DIRECTORIES>
@@ -105,6 +106,7 @@ target_link_libraries(bat
   mutils
   $<$<NOT:$<PLATFORM_ID:Windows>>:m>
   $<$<PLATFORM_ID:Windows>:ws2_32>
+  $<$<BOOL:${UUID_FOUND}>:UUID::UUID>
   $<$<BOOL:${KVM_FOUND}>:KVM::KVM>
   ${CMAKE_DL_LIBS}
   Threads::Threads)
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -487,12 +487,12 @@ renderProfilerEvent(Client cntxt, MalBlk
  * We should use an OS define to react to the maximal cores
  */
 
-#define MAXCPU         256
-#define LASTCPU                (MAXCPU - 1)
+#define MAXCORES               256
+#define LASTCPU                (MAXCORES - 1)
 static struct{
        lng user, nice, system, idle, iowait;
        double load;
-} corestat[MAXCPU];
+} corestat[MAXCORES];
 
 static int
 getCPULoad(char cpuload[BUFSIZ]){
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -1559,6 +1559,13 @@ rel_unnest_dependent(mvc *sql, sql_rel *
                                        rel->r = l;
                                        rel->op = op_left;
                                        return rel_unnest_dependent(sql, rel);
+                               } else if (rel->op == op_left && 
!rel_has_freevar(sql, rel->r) && rel_dependent_var(sql, rel->r, rel->l)) {
+                                       sql_rel *l = rel->l;
+
+                                       rel->l = rel->r;
+                                       rel->r = l;
+                                       rel->op = op_right;
+                                       return rel_unnest_dependent(sql, rel);
                                }
                        }
                }
@@ -1744,7 +1751,13 @@ rewrite_inner(mvc *sql, sql_rel *rel, sq
                op = op_left;
 
        if (is_join(rel->op)){
-               if (is_right(rel->op))
+               if (rel_has_freevar(sql, inner)) {
+                       list *rv = rel_dependent_var(sql, rel->r, inner);
+                       if (!list_empty(rv))
+                               d = rel->r = rel_crossproduct(sql->sa, rel->r, 
inner, op);
+                       else
+                               d = rel->l = rel_crossproduct(sql->sa, rel->l, 
inner, op);
+               } else if (is_right(rel->op))
                        d = rel->l = rel_crossproduct(sql->sa, rel->l, inner, 
op);
                else
                        d = rel->r = rel_crossproduct(sql->sa, rel->r, inner, 
op);
@@ -2246,24 +2259,6 @@ rewrite_aggregates(visitor *v, sql_rel *
        return rel;
 }
 
-static sql_exp*
-has_or(visitor *v, sql_rel *rel, sql_exp *e, int depth)
-{
-       (void)rel;
-       (void)depth;
-       if(!v->data && e && is_compare(e->type) && e->flag == cmp_or)
-               v->data = e;
-       return e;
-}
-
-static bool
-exps_have_or_exp(mvc *sql, list *exps)
-{
-       visitor v = { .sql = sql, .data = NULL };
-       exps_exp_visitor_topdown(&v, NULL, exps, 0, &has_or, true);
-       return v.data != NULL;
-}
-
 static inline sql_rel *
 rewrite_split_select_exps(visitor *v, sql_rel *rel)
 {
@@ -2740,10 +2735,8 @@ rewrite_anyequal(visitor *v, sql_rel *re
                                        join = 
(is_full(rel->op)||is_left(rel->op))?rel->r:rel->l;
                                }
                                if (rsq) {
-                                       sql_rel *rewrite = NULL;
-                                       (void)rewrite_inner(sql, rel, rsq, 
op_left, &rewrite);
-                                       exp_reset_props(rewrite, re, 
is_left(rewrite->op));
-                                       join = 
(is_full(rel->op)||is_left(rel->op))?rel->r:rel->l;
+                                       (void)rewrite_inner(sql, rel, rsq, 
op_left, &join);
+                                       exp_reset_props(join, re, 
is_left(join->op));
                                }
                                assert(join && is_join(join->op));
                                if (join && !join->exps)
@@ -3177,16 +3170,18 @@ rewrite_exists(visitor *v, sql_rel *rel,
                        if (!is_project(sq->op) || (is_set(sq->op) && 
list_length(sq->exps) > 1) || (is_simple_project(sq->op) && !list_empty(sq->r)))
                                sq = rel_project(v->sql->sa, sq, 
rel_projections(v->sql, sq, NULL, 1, 1));
                        le = rel_reduce2one_exp(v->sql, sq);
-                       le = exp_ref(v->sql, le);
-                       if (is_project(rel->op) && is_freevar(le)) {
+                       if (is_project(sq->op) && is_freevar(le)) {
                                sql_exp *re, *jc, *null;
 
                                re = rel_bound_exp(v->sql, sq);
+                               sq->exps = sa_list(v->sql->sa);
                                re = rel_project_add_exp(v->sql, sq, re);
                                jc = rel_unop_(v->sql, NULL, re, "sys", 
"isnull", card_value);
                                set_has_no_nil(jc);
                                null = exp_null(v->sql->sa, exp_subtype(le));
                                le = rel_nop_(v->sql, NULL, jc, null, le, NULL, 
"sys", "ifthenelse", card_value);
+                       } else {
+                               le = exp_ref(v->sql, le);
                        }
 
                        if (is_project(rel->op) || depth > 0 || 
is_outerjoin(rel->op)) {
@@ -3740,10 +3735,6 @@ rewrite_outer2inner_union_(visitor *v, s
 static sql_rel *
 rewrite_outer2inner_union(visitor *v, sql_rel *rel)
 {
-       if (is_outerjoin(rel->op) && !list_empty(rel->exps) &&
-                       (exps_have_freevar(v->sql, rel->exps) && 
exps_have_rel_exp(rel->exps) &&
-                               (exps_have_anyequal(rel->exps, 
ANYEQUAL|NOT_ANYEQUAL) || exps_have_or_exp(v->sql, rel->exps))))
-               return rewrite_outer2inner_union_(v, rel);
        if (is_full(rel->op) && rel_has_freevar(v->sql, rel->r)) { /* swap */
                sql_rel *s = rel->r;
                rel->r = rel->l;
diff --git a/sql/test/SQLancer/Tests/sqlancer22.test 
b/sql/test/SQLancer/Tests/sqlancer22.test
--- a/sql/test/SQLancer/Tests/sqlancer22.test
+++ b/sql/test/SQLancer/Tests/sqlancer22.test
@@ -682,9 +682,91 @@ on 4 > all(select x.x) and (x.x > 0 or x
 ----
 2
 
+query I nosort
+SELECT 1 FROM t0 LEFT JOIN (SELECT 2) AS x(x) ON (VALUES (t0.c0), (x.x))
+----
+
+query I nosort
+SELECT 1 FROM t0 LEFT JOIN (SELECT 2) AS x(x) ON (SELECT t0.c0 UNION ALL 
SELECT x.x) > 0
+----
+
+query I nosort
+SELECT min((SELECT t0.c0 + t0.c0)) FROM t0
+----
+NULL
+
+query I nosort
+SELECT min((SELECT CASE t0.c0 WHEN t0.c0 THEN t0.c0 END)) FROM t0
+----
+NULL
+
 statement ok
 ROLLBACK
 
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y BETWEEN 1 AND max(x.x) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y BETWEEN max(x.x) AND 1 FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT 1 BETWEEN y.y AND max(x.x) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y BETWEEN 1 AND max(x.x) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y LIKE max(x.x) FROM (SELECT '1') x(x), (SELECT '1') y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'x.x' in query 
results without an aggregate function
+SELECT max(y.y) LIKE x.x FROM (SELECT '1') x(x), (SELECT '1') y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT [y.y] "like" [max(x.x), '', false] FROM (SELECT '1') x(x), (SELECT '1') 
y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'x.x' in query 
results without an aggregate function
+SELECT [max(y.y)] "like" [x.x, '', false] FROM (SELECT '1') x(x), (SELECT '1') 
y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y IN (max(x.x)) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y AND max(x.x) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y OR max(x.x) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y + max(x.x) FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT case y.y when max(x.x) then 1 end FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'x.x' in query 
results without an aggregate function
+SELECT case 2 when x.x then min(y.y) end FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'x.x' in query 
results without an aggregate function
+SELECT case x.x when 2 then min(y.y) end FROM (SELECT 1) x(x), (SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'x.x' in query 
results without an aggregate function
+SELECT case 1 when 2 then x.x when max(y.y) then 3 end FROM (SELECT 1) x(x), 
(SELECT 1) y(y)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT y.y FROM (SELECT 1) x(x), (SELECT 1) y(y) order by min(x.x)
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'y.y' in query 
results without an aggregate function
+SELECT ntile(y.y) over () FROM (SELECT 1) x(x), (SELECT 1) y(y) order by 
min(x.x)
+
+query I nosort
+SELECT ['1'] "like" [max(x.x), '', false] FROM (SELECT '1') x(x), (SELECT '1') 
y(y)
+----
+1
+
+query I nosort
+SELECT [max(y.y)] "like" ['1', '', false] FROM (SELECT '1') x(x), (SELECT '1') 
y(y)
+----
+1
+
 statement error Subquery has too many columns
 select 1 where (2,3) in (select x,y,2 from (values (2, 3), (4, 5)) x(x,y))
 
diff --git a/tools/merovingian/client/Tests/monetdb_snapshot.py 
b/tools/merovingian/client/Tests/monetdb_snapshot.py
--- a/tools/merovingian/client/Tests/monetdb_snapshot.py
+++ b/tools/merovingian/client/Tests/monetdb_snapshot.py
@@ -30,8 +30,9 @@ with Runner(False) as run:
 
         header('CHECK SNAPDIR NOT SET')
         output = m.run_monetdbd('get', 'snapshotdir', output=True)
-        assert '<unknown>' in output
-        note("""'<unknown>' in output""")
+        run.print(' -->', repr(output))
+        assert '<unset>' in output
+        note("""'<unset>' in output as expected""")
 
         header('TRY TO CREATE')
         try:
diff --git a/tools/mserver/CMakeLists.txt b/tools/mserver/CMakeLists.txt
--- a/tools/mserver/CMakeLists.txt
+++ b/tools/mserver/CMakeLists.txt
@@ -80,6 +80,7 @@ target_link_libraries(shutdowntest
   bat
   stream
   monetdb5
+  $<$<NOT:$<PLATFORM_ID:Windows>>:m>
   $<$<PLATFORM_ID:Windows>:${GETOPT_LIB}>
   Threads::Threads)
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to