Changeset: da5a0edf3394 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=da5a0edf3394
Modified Files:
        NT/monetdb_config.h.in
        common/utils/mutils.c
        configure.ag
        gdk/gdk_posix.c
        gdk/gdk_system.c
        gdk/gdk_system.h
        gdk/gdk_utils.c
        monetdb5/mal/mal_module.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_gencode.c
        sql/scripts/Makefile.ag
        sql/server/rel_psm.c
        sql/server/rel_schema.c
        sql/server/sql_parser.y
        sql/test/miscellaneous/Tests/select_groupby.sql
        sql/test/miscellaneous/Tests/select_groupby.stable.err
        tools/merovingian/daemon/merovingian.c
Branch: Nov2019
Log Message:

Merge with Apr2019


diffs (truncated from 314 to 300 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -508,9 +508,6 @@
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #define HAVE_SYS_STAT_H 1
 
-/* Define to 1 if you have the <sys/sysctl.h> header file. */
-/* #undef HAVE_SYS_SYSCTL_H */
-
 /* Define to 1 if you have the <sys/times.h> header file. */
 /* #undef HAVE_SYS_TIMES_H */
 
diff --git a/common/utils/mutils.c b/common/utils/mutils.c
--- a/common/utils/mutils.c
+++ b/common/utils/mutils.c
@@ -25,10 +25,10 @@
 #include <limits.h>            /* PATH_MAX on Solaris */
 
 #ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>  /* realpath on OSX, prerequisite of sys/sysctl on 
OpenBSD */
+# include <sys/param.h>  /* realpath on OSX */
 #endif
 
-#ifdef HAVE_SYS_SYSCTL_H
+#ifdef BSD /* BSD macro is defined in sys/param.h */
 # include <sys/sysctl.h>  /* KERN_PROC_PATHNAME on BSD */
 #endif
 
@@ -454,7 +454,7 @@ get_bin_path(void)
        if (_NSGetExecutablePath(buf, &size) == 0 &&
                        realpath(buf, _bin_path) != NULL)
        return _bin_path;
-#elif defined(HAVE_SYS_SYSCTL_H) && defined(KERN_PROC_PATHNAME)  /* BSD */
+#elif defined(BSD) && defined(KERN_PROC_PATHNAME)  /* BSD */
        int mib[4];
        size_t cb = sizeof(_bin_path);
        mib[0] = CTL_KERN;
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -34,7 +34,7 @@
 #ifdef HAVE_MACH_MACH_INIT_H
 # include <mach/mach_init.h>
 #endif
-#if defined(HAVE_KVM_H) && defined(HAVE_SYS_SYSCTL_H)
+#if defined(HAVE_KVM_H)
 # include <kvm.h>
 # include <sys/param.h>
 # include <sys/sysctl.h>
@@ -297,7 +297,7 @@ MT_getrss(void)
 
        if (task_info(task, TASK_BASIC_INFO_64, (task_info_t)&t_info, 
&t_info_count) != KERN_INVALID_POLICY)
                return t_info.resident_size;  /* bytes */
-#elif defined(HAVE_KVM_H) && defined(HAVE_SYS_SYSCTL_H)
+#elif defined(HAVE_KVM_H)
        /* get RSS on FreeBSD and NetBSD */
        struct kinfo_proc *ki;
        int ski = 1;
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -847,7 +847,7 @@ MT_check_nr_cores(void)
 #if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
        /* this works on Linux, Solaris and AIX */
        ncpus = sysconf(_SC_NPROCESSORS_ONLN);
-#elif defined(HAVE_SYS_SYSCTL_H) && defined(HW_NCPU)   /* BSD */
+#elif defined(HW_NCPU)   /* BSD */
        size_t len = sizeof(int);
        int mib[3];
 
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -98,7 +98,7 @@
 #ifdef HAVE_SYS_PARAM_H
 # include <sys/param.h>           /* prerequisite of sys/sysctl on OpenBSD */
 #endif
-#ifdef HAVE_SYS_SYSCTL_H
+#ifdef BSD /* BSD macro is defined in sys/param.h */
 # include <sys/sysctl.h>
 #endif
 
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -39,7 +39,7 @@ int GDKverbose = 0;
 #ifdef HAVE_SYS_PARAM_H
 # include <sys/param.h>  /* prerequisite of sys/sysctl on OpenBSD */
 #endif
-#ifdef HAVE_SYS_SYSCTL_H
+#ifdef BSD /* BSD macro is defined in sys/param.h */
 # include <sys/sysctl.h>
 #endif
 #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT)
@@ -317,7 +317,7 @@ MT_init(void)
                GetSystemInfo(&sysInfo);
                _MT_pagesize = sysInfo.dwPageSize;
        }
-#elif defined(HAVE_SYS_SYSCTL_H) && defined(HW_PAGESIZE)
+#elif defined(BSD) && defined(HW_PAGESIZE)
        {
                int size;
                size_t len = sizeof(int);
@@ -344,7 +344,7 @@ MT_init(void)
                if (GlobalMemoryStatusEx(&memStatEx))
                        _MT_npages = (size_t) (memStatEx.ullTotalPhys / 
_MT_pagesize);
        }
-#elif defined(HAVE_SYS_SYSCTL_H) && defined(HW_MEMSIZE) && SIZEOF_SIZE_T == 
SIZEOF_LNG
+#elif defined(BSD) && defined(HW_MEMSIZE) && SIZEOF_SIZE_T == SIZEOF_LNG
        /* Darwin, 64-bits */
        {
                uint64_t size = 0;
@@ -358,7 +358,7 @@ MT_init(void)
                sysctl(mib, 2, &size, &len, NULL, 0);
                _MT_npages = size / _MT_pagesize;
        }
-#elif defined(HAVE_SYS_SYSCTL_H) && defined (HW_PHYSMEM64) && SIZEOF_SIZE_T == 
SIZEOF_LNG
+#elif defined(BSD) && defined (HW_PHYSMEM64) && SIZEOF_SIZE_T == SIZEOF_LNG
        /* OpenBSD, 64-bits */
        {
                int64_t size = 0;
@@ -372,7 +372,7 @@ MT_init(void)
                sysctl(mib, 2, &size, &len, NULL, 0);
                _MT_npages = size / _MT_pagesize;
        }
-#elif defined(HAVE_SYS_SYSCTL_H) && defined(HW_PHYSMEM)
+#elif defined(BSD) && defined(HW_PHYSMEM)
        /* NetBSD, OpenBSD, Darwin, 32-bits; FreeBSD 32 & 64-bits */
        {
 # ifdef __FreeBSD__
diff --git a/monetdb5/mal/mal_module.c b/monetdb5/mal/mal_module.c
--- a/monetdb5/mal/mal_module.c
+++ b/monetdb5/mal/mal_module.c
@@ -113,15 +113,12 @@ static void addModuleToIndex(Module cur)
        moduleIndex[index] = cur;
 }
 
-
 Module getModule(str name) {
        int index = getModuleIndex(name);
        Module m = moduleIndex[index];
        while(m) {
-               //if (strcmp(name, m->name) == 0) {
-               if (name == m->name) {
+               if (strcmp(name, m->name) == 0)
                        return m;
-               }
                m = m->link;
        }
        return NULL;
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -781,11 +781,16 @@ create_func(mvc *sql, char *sname, char 
        if (!s)
                s = cur_schema(sql);
        nf = mvc_create_func(sql, NULL, s, f->base.name, f->ops, f->res, 
f->type, f->lang, f->mod, f->imp, f->query, f->varres, f->vararg, f->system);
-       if (nf && nf->query && !LANG_EXT(nf->lang)) {
+       assert(nf);
+       if (nf->lang == FUNC_LANG_INT || nf->lang == FUNC_LANG_MAL) { /* 
FUNC_LANG_INT shouldn't be reachable, but leave it here */
+               if (!backend_resolve_function(sql, nf))
+                       throw(SQL,"sql.create_func", SQLSTATE(3F000) "CREATE 
%s%s: external name %s.%s not bound", KF, F, nf->mod, nf->base.name);
+       } else if (nf->lang == FUNC_LANG_SQL) {
                char *buf;
                sql_rel *r = NULL;
                sql_allocator *sa = sql->sa;
 
+               assert(nf->query);
                if (!(sql->sa = sa_create()))
                        throw(SQL, "sql.catalog", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                if (!(buf = sa_strdup(sql->sa, nf->query)))
@@ -819,9 +824,6 @@ create_func(mvc *sql, char *sname, char 
                }
                sa_destroy(sql->sa);
                sql->sa = sa;
-       } else if (nf->lang == FUNC_LANG_MAL) {
-               if (!backend_resolve_function(sql, nf))
-                       throw(SQL,"sql.create_func", SQLSTATE(3F000) "CREATE 
%s%s: external name %s.%s not bound", KF, F, nf->mod, nf->base.name);
        }
        return MAL_SUCCEED;
 }
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
@@ -855,17 +855,9 @@ backend_call(backend *be, Client c, cq *
 int
 monet5_resolve_function(ptr M, sql_func *f)
 {
-       mvc *sql = (mvc *) M;
-       Client c = MCgetClient(sql->clientid);
-       Module m;
+       (void) M;
 
-       /*
-          fails to search outer modules!
-          if (!findSymbol(c->usermodule, f->mod, f->imp))
-          return 0;
-        */
-
-       for (m = findModule(c->usermodule, f->mod); m; m = m->link) {
+       for (Module m = getModule(f->mod); m; m = m->link) {
                if (strcmp(m->name, f->mod) == 0) {
                        Symbol s = m->space[(int) (getSymbolIndex(f->imp))];
                        for (; s; s = s->peer) {
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -946,7 +946,7 @@ rel_create_func(sql_query *query, dlist 
                        /* in execute mode we instantiate the function */
                        if (instantiate || deps)
                                return rel_psm_block(sql->sa, b);
-               } else {
+               } else { /* MAL implementation */
                        char *fmod = qname_module(ext_name);
                        char *fnme = qname_fname(ext_name);
 
@@ -965,7 +965,7 @@ rel_create_func(sql_query *query, dlist 
                                        f->mod = _STRDUP(fmod);
                                if (!f->imp || strcmp(f->imp, fnme)) 
                                        f->imp = (f->sa)?sa_strdup(f->sa, 
fnme):_STRDUP(fnme);
-                               if(!f->mod || !f->imp) {
+                               if (!f->mod || !f->imp) {
                                        _DELETE(f->mod);
                                        _DELETE(f->imp);
                                        return sql_error(sql, 02, 
SQLSTATE(HY001) "CREATE %s%s: could not allocate space", KF, F);
@@ -973,6 +973,11 @@ rel_create_func(sql_query *query, dlist 
                                f->sql = 0; /* native */
                                f->lang = FUNC_LANG_INT;
                        }
+                       if (!f)
+                               f = sf->func;
+                       assert(f);
+                       if (!backend_resolve_function(sql, f))
+                               return sql_error(sql, 01, SQLSTATE(3F000) 
"CREATE %s%s: external name %s.%s not bound (%s.%s)", KF, F, fmod, fnme, 
s->base.name, fname );
                }
        }
        return rel_create_function(sql->sa, s->base.name, f);
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -939,7 +939,7 @@ table_element(sql_query *query, symbol *
                                }
                        }
                }
-               if(mvc_drop_column(sql, t, col, drop_action)) {
+               if (mvc_drop_column(sql, t, col, drop_action)) {
                        sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: %s\n", 
MAL_MALLOC_FAIL);
                        return SQL_ERR;
                }
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -2066,13 +2066,11 @@ external_function_name:
        ident '.' ident { $$ = append_string(append_string(L(), $1), $3); }
  ;
 
-
 function_body:
        X_BODY
 |      string
 ;
 
-
 func_def:
     create_or_replace FUNCTION qname
        '(' opt_paramlist ')'
diff --git a/sql/test/miscellaneous/Tests/select_groupby.sql 
b/sql/test/miscellaneous/Tests/select_groupby.sql
--- a/sql/test/miscellaneous/Tests/select_groupby.sql
+++ b/sql/test/miscellaneous/Tests/select_groupby.sql
@@ -1,4 +1,3 @@
-start transaction;
 create schema "myschema";
 create sequence "myschema"."myseq";
 create table myschema.mytable
@@ -108,4 +107,7 @@ WHERE ("first" = ? AND "eleventh" = ? AN
 GROUP BY "first-projection", "twentieth", "twentieth-seventh", 
"twentieth-third", "twentieth-second" LIMIT ?;
 exec ** ('a', 'b', 923, 51, 942, 544);
 
-rollback;
+create function "sys"."dummy"("col1" blob, "col2" blob, "col3" integer) 
returns boolean external name "unknown"."idontexist"; --error, MAL 
implementation of sys.dummy doesn't exist.
+SELECT "sys"."dummy"("fortieth-second", blob '', '0') AS "alias1", 
"fortieth-third" FROM "myschema"."mytable"; --error, function doesn't exist
+
+drop schema "myschema" cascade;
diff --git a/sql/test/miscellaneous/Tests/select_groupby.stable.err 
b/sql/test/miscellaneous/Tests/select_groupby.stable.err
--- a/sql/test/miscellaneous/Tests/select_groupby.stable.err
+++ b/sql/test/miscellaneous/Tests/select_groupby.stable.err
@@ -26,6 +26,14 @@ stderr of test 'select_groupby` in direc
 # 13:54:02 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-18773" "--port=35668"
 # 13:54:02 >  
 
+MAPI  = (monetdb) /var/tmp/mtest-155076/.s.monetdb.39205
+QUERY = create function "sys"."dummy"("col1" blob, "col2" blob, "col3" 
integer) returns boolean external name "unknown"."idontexist"; --error, MAL 
implementation of sys.dummy doesn't exist.
+ERROR = !CREATE FUNCTION: external name unknown.idontexist not bound 
(sys.dummy)
+CODE  = 3F000
+MAPI  = (monetdb) /var/tmp/mtest-155076/.s.monetdb.39205
+QUERY = SELECT "sys"."dummy"("fortieth-second", blob '', '0') AS "alias1", 
"fortieth-third" FROM "myschema"."mytable"; --error, function doesn't exist
+ERROR = !SELECT: no such operator 'dummy'
+CODE  = 42000
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to