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