Changeset: 670f75c4f015 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/670f75c4f015
Branch: pax-log
Log Message:

Merge with default.


diffs (240 lines):

diff --git a/clients/Tests/All b/clients/Tests/All
--- a/clients/Tests/All
+++ b/clients/Tests/All
@@ -1,6 +1,6 @@
 exports
 
HAVE_HGE&HAVE_FITS&HAVE_GEOM&HAVE_LIBR&HAVE_LIBPY3&HAVE_NETCDF&HAVE_SHP&NOT_WIN32?MAL-signatures-hge
 
!HAVE_HGE&HAVE_FITS&HAVE_GEOM&HAVE_LIBR&HAVE_LIBPY3&HAVE_NETCDF&HAVE_SHP&NOT_WIN32?MAL-signatures
-NOT_WIN32&MERCURIAL?melcheck
+NOT_WIN32&melcheck
 mclient-uri
 testcondvar
diff --git a/clients/Tests/melcheck.sh b/clients/Tests/melcheck.sh
--- a/clients/Tests/melcheck.sh
+++ b/clients/Tests/melcheck.sh
@@ -1,3 +1,12 @@
 #!/bin/sh
 cd $TSTSRCBASE
-hg -q files -I '{monetdb5,sql,geom}/**.[ch]' -X '**/Tests/**' | python3 -c 
'import MonetDBtesting.melcheck'
+
+hg_root="$(hg root 2>/dev/null)"
+git_root="$(git rev-parse --show-toplevel 2>/dev/null)"
+
+if [ "$hg_root" = "$TSTSRCBASE" ]; then
+       hg -q files -I '{monetdb5,sql,geom}/**.[ch]' -X '**/Tests/**'
+elif [ "$git_root" = "$TSTSRCBASE" ]; then
+       git ls-files -- 'monetdb5/**.[ch]' 'sql/**.[ch]' 'geom/**.[ch]' 
':!:**/Tests/*'
+fi \
+| python3 -c 'import MonetDBtesting.melcheck'
diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -316,7 +316,7 @@ macro(monetdb_configure_misc)
 
   if(NOT DEFINED PYTHON3_LIBDIR)
     # Used for installing testing python module (don't pass a location, else 
we need to strip this again)
-    execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "import sysconfig; 
print(sysconfig.get_path('purelib', vars={'base': ''})[1:])"
+    execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "import sysconfig; 
print((sysconfig.get_path('purelib', vars={'base':''}, scheme='rpm_prefix') if 
'rpm_prefix' in sysconfig.get_scheme_names() else sysconfig.get_path('purelib', 
vars={'base':''}))[1:])"
       RESULT_VARIABLE PY3_LIBDIR_CODE
       OUTPUT_VARIABLE PYTHON3_SITEDIR
       OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2306,17 +2306,18 @@ gdk_export BAT *BATsample_with_seed(BAT 
 #define CHECK_QRY_TIMEOUT_MASK (CHECK_QRY_TIMEOUT_STEP - 1)
 
 #define TIMEOUT_MSG "Timeout was reached!"
+#define EXITING_MSG "Server is exiting!"
 
-#define TIMEOUT_HANDLER(rtpe)                  \
-       do {                                    \
-               GDKerror(TIMEOUT_MSG);          \
-               return rtpe;                    \
+#define TIMEOUT_HANDLER(rtpe)                                          \
+       do {                                                            \
+               GDKerror("%s\n", GDKexiting() ? EXITING_MSG : TIMEOUT_MSG); \
+               return rtpe;                                            \
        } while(0)
 
-#define GOTO_LABEL_TIMEOUT_HANDLER(label)      \
-       do {                                    \
-               GDKerror(TIMEOUT_MSG);          \
-               goto label;                     \
+#define GOTO_LABEL_TIMEOUT_HANDLER(label)                              \
+       do {                                                            \
+               GDKerror("%s\n", GDKexiting() ? EXITING_MSG : TIMEOUT_MSG); \
+               goto label;                                             \
        } while(0)
 
 #define GDK_CHECK_TIMEOUT_BODY(timeoffset, callback)           \
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1420,6 +1420,12 @@ void
 }
 
 void
+_exp_print(mvc *sql, sql_exp *e) {
+       exp_print(sql, GDKstdout, e, 0, NULL, 1, 0);
+       mnstr_printf(GDKstdout, "\n");
+}
+
+void
 rel_print(mvc *sql, sql_rel *rel, int depth)
 {
        list *refs = sa_list(sql->sa);
diff --git a/sql/backends/monet5/sql_gencode.h 
b/sql/backends/monet5/sql_gencode.h
--- a/sql/backends/monet5/sql_gencode.h
+++ b/sql/backends/monet5/sql_gencode.h
@@ -30,6 +30,8 @@ extern int monet5_create_relational_func
 extern void rel_print(mvc *sql, sql_rel *rel, int depth);
 extern void _rel_print(mvc *sql, sql_rel *rel);
 
+extern void _exp_print(mvc *sql, sql_exp *e);
+
 extern int constantAtom(backend *be, MalBlkPtr mb, atom *a);
 extern InstrPtr table_func_create_result(MalBlkPtr mb, InstrPtr q, sql_func 
*f, list *restypes);
 extern InstrPtr relational_func_create_result(mvc *sql, MalBlkPtr mb, InstrPtr 
q, sql_rel *f);
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
@@ -113,7 +113,7 @@ static void exps_print(mvc *sql, stream 
 
 static void rel_print_rel(mvc *sql, stream  *fout, sql_rel *rel, int depth, 
list *refs, int decorate);
 
-static void
+void
 exp_print(mvc *sql, stream *fout, sql_exp *e, int depth, list *refs, int 
comma, int alias)
 {
        (void)sql;
diff --git a/sql/server/rel_dump.h b/sql/server/rel_dump.h
--- a/sql/server/rel_dump.h
+++ b/sql/server/rel_dump.h
@@ -16,5 +16,6 @@ extern void rel_print_(mvc *sql, stream 
 extern void rel_print_refs(mvc *sql, stream* fout, sql_rel *rel, int depth, 
list *refs, int decorate);
 
 extern sql_rel *rel_read(mvc *sql, char *ra, int *pos, list *refs);
+extern void exp_print(mvc *sql, stream *fout, sql_exp *e, int depth, list 
*refs, int comma, int alias);
 
 #endif /*_REL_DUMP_H_*/
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
@@ -286,6 +286,40 @@ exp_in_func(mvc *sql, sql_exp *le, sql_e
 }
 
 sql_exp *
+exp_in_aggr(mvc *sql, sql_exp *le, sql_exp *vals, int anyequal, int is_tuple)
+{
+       sql_subfunc *a_func = NULL;
+       sql_exp *e = le;
+
+       if (is_tuple) {
+               list *l = exp_get_values(e);
+               e = l->h->data;
+       }
+       if (!(a_func = sql_bind_func(sql, "sys", anyequal ? "anyequal" : 
"allnotequal", exp_subtype(e), exp_subtype(e), F_AGGR, true)))
+               return sql_error(sql, 02, SQLSTATE(42000) "(NOT) IN operator on 
type %s missing", exp_subtype(e) ? exp_subtype(e)->type->base.name : "unknown");
+       e = exp_aggr2(sql->sa, le, vals, a_func, need_distinct(e), 
need_no_nil(e), e->card, has_nil(e));
+       if (e) {
+               unsigned int exps_card = CARD_ATOM;
+
+               /* ignore the cardinalites of sub-relations */
+               if (vals->type == e_atom && vals->f) {
+                       for (node *n = ((list*)vals->f)->h ; n ; n = n->next) {
+                               sql_exp *next = n->data;
+
+                               if (!exp_is_rel(next) && exps_card < next->card)
+                                       exps_card = next->card;
+                       }
+               } else if (!exp_is_rel(vals))
+                       exps_card = vals->card;
+
+               e->card = MAX(le->card, exps_card);
+               if (!has_nil(le) && !has_nil(vals))
+                       set_has_no_nil(e);
+       }
+       return e;
+}
+
+sql_exp *
 exp_compare_func(mvc *sql, sql_exp *le, sql_exp *re, const char *compareop, 
int quantifier)
 {
        sql_subfunc *cmp_func = sql_bind_func(sql, "sys", compareop, 
exp_subtype(le), exp_subtype(le), F_FUNC, true);
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -41,6 +41,7 @@ extern sql_exp *exp_filter(sql_allocator
 extern sql_exp *exp_or(sql_allocator *sa, list *l, list *r, int anti);
 extern sql_exp *exp_in(sql_allocator *sa, sql_exp *l, list *r, int cmptype);
 extern sql_exp *exp_in_func(mvc *sql, sql_exp *le, sql_exp *vals, int 
anyequal, int is_tuple);
+extern sql_exp *exp_in_aggr(mvc *sql, sql_exp *le, sql_exp *vals, int 
anyequal, int is_tuple);
 extern sql_exp *exp_compare_func(mvc *sql, sql_exp *le, sql_exp *re, const 
char *compareop, int quantifier);
 
 #define exp_fromtype(e)        ((list*)e->r)->h->data
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
@@ -2062,7 +2062,10 @@ rel_in_value_exp(sql_query *query, sql_r
                if (!e) {
                        if (add_select && rel && *rel && 
!is_project((*rel)->op) && !is_select((*rel)->op) && !is_base((*rel)->op))
                                *rel = rel_select(sql->sa, *rel, NULL);
-                       e = exp_in_func(sql, le, values, (sc->token == SQL_IN), 
is_tuple);
+                       if ((rel && *rel) || exp_has_rel(le) || 
exp_has_rel(values))
+                               e = exp_in_func(sql, le, values, (sc->token == 
SQL_IN), is_tuple);
+                       else
+                               e = exp_in_aggr(sql, le, values, (sc->token == 
SQL_IN), is_tuple);
                }
        }
        return e;
diff --git a/sql/test/BugTracker-2016/Tests/storagemodel.test 
b/sql/test/BugTracker-2016/Tests/storagemodel.test
--- a/sql/test/BugTracker-2016/Tests/storagemodel.test
+++ b/sql/test/BugTracker-2016/Tests/storagemodel.test
@@ -86,10 +86,10 @@ bug3923
 i
 int
 10000
-10000
-8312
+40000
 0
-2000
+0
+8000
 0
 1
 NULL
@@ -192,10 +192,10 @@ bug3923
 i
 int
 10000
-10000
-8312
+40000
 0
-2000
+0
+8000
 0
 1
 NULL
diff --git a/sql/test/BugTracker-2022/Tests/create_func_with_case_and_in.test 
b/sql/test/BugTracker-2022/Tests/create_func_with_case_and_in.test
--- a/sql/test/BugTracker-2022/Tests/create_func_with_case_and_in.test
+++ b/sql/test/BugTracker-2022/Tests/create_func_with_case_and_in.test
@@ -6,4 +6,14 @@ END;
 query T rowsort
 select foo(10);
 ----
-'YES'
+YES
+
+statement ok
+CREATE FUNCTION nfoo(t INT) RETURNS STRING BEGIN
+RETURN  CASE WHEN t NOT IN (10, 20, 30) THEN 'YES' ELSE 'NO' END;
+END;
+
+query T rowsort
+select nfoo(10);
+----
+NO
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to