Changeset: aad47eed5d12 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/aad47eed5d12
Branch: groupjoin
Log Message:
merged with default
diffs (283 lines):
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -673,9 +673,9 @@ SQLhelp sqlhelp2[] = {
NULL},
{"generated_column",
NULL,
- "AUTO_INCREMENT | GENERATED ALWAYS AS IDENTITY [ '(' [ AS data_type] [
START [WITH start]] [INCREMENT BY increment]\n"
- "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE]
[CACHE cachevalue] [[NO] CYCLE] ')' ] ",
- "data_type",
+ "AUTO_INCREMENT | GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ '('
[ AS seq_int_datatype] [ START [WITH start]]\n"
+ " [INCREMENT BY increment] [MINVALUE minvalue | NO MINVALUE] [MAXVALUE
maxvalue | NO MAXVALUE] [CACHE cachevalue] [[NO] CYCLE] ')' ]",
+ "seq_int_datatype",
"See also
https://www.monetdb.org/documentation/user-guide/sql-manual/data-types/serial-types/"},
{"global_privileges",
NULL,
diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -16,6 +16,12 @@
Note: MonetDB does NOT support catalog qualifiers in object names, so all the
_CATALOG columns in these information_schema views will allways contain NULL.
+* Mon Aug 21 2023 Niels Nes <[email protected]>
+- Added support for generated column syntax:
+ GENERATED BY DEFAULT AS IDENTITY ...
+ This allows the user to override the default generated sequence value
+ during inserts.
+
* Fri Jul 7 2023 Niels Nes <[email protected]>
- Added SQL support for: <result offset clause> and <fetch first clause>
in <query expression> ::=
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1540,7 +1540,7 @@ sqltypeinit( sql_allocator *sa)
f->varres = 1;
/* file_loader */
- f = sql_create_union(sa, "file_loader", "", "", FALSE, SCALE_FIX, 0,
TABLE, 1, STR);
+ f = sql_create_union(sa, "file_loader", "files", "", FALSE, SCALE_FIX,
0, TABLE, 1, STR);
f->varres = 1;
/* sys_update_schemas, sys_update_tables */
diff --git a/sql/server/rel_file_loader.c b/sql/server/rel_file_loader.c
--- a/sql/server/rel_file_loader.c
+++ b/sql/server/rel_file_loader.c
@@ -1,3 +1,12 @@
+/*
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2023 MonetDB B.V.
+ */
#include "monetdb_config.h"
#include "rel_file_loader.h"
@@ -8,7 +17,7 @@ static file_loader_t file_loaders[NR_FIL
void
fl_exit(void)
{
- for (int i = 0; i<NR_FILE_LOADERS; i++) {
+ for (int i = 0; i < NR_FILE_LOADERS; i++) {
if (file_loaders[i].name)
GDKfree(file_loaders[i].name);
}
@@ -18,10 +27,9 @@ void
fl_unregister(char *name)
{
file_loader_t *fl = fl_find(name);
-
if (fl) {
- GDKfree(fl->name);
- fl->name = NULL;
+ GDKfree(fl->name);
+ fl->name = NULL;
}
}
@@ -29,13 +37,13 @@ int
fl_register(char *name, fl_add_types_fptr add_types, fl_load_fptr load)
{
file_loader_t *fl = fl_find(name);
-
if (fl) {
printf("re-registering %s\n", name);
GDKfree(fl->name);
fl->name = NULL;
}
- for (int i = 0; i<NR_FILE_LOADERS; i++) {
+
+ for (int i = 0; i < NR_FILE_LOADERS; i++) {
if (file_loaders[i].name == NULL) {
file_loaders[i].name = GDKstrdup(name);
file_loaders[i].add_types = add_types;
@@ -43,7 +51,9 @@ fl_register(char *name, fl_add_types_fpt
return 0;
}
}
- return -1;
+
+ /* all file_loaders array locations are occupied */
+ return -1; /* could not register file_loader */
}
file_loader_t*
@@ -51,7 +61,7 @@ fl_find(char *name)
{
if (!name)
return NULL;
- for (int i = 0; i<NR_FILE_LOADERS; i++) {
+ for (int i = 0; i < NR_FILE_LOADERS; i++) {
if (file_loaders[i].name && strcmp(file_loaders[i].name, name)
== 0)
return file_loaders+i;
}
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
@@ -529,12 +529,16 @@ file_loader_add_table_column_types(mvc *
sql_exp *file = exps->h->data;
if (!exp_is_atom(file))
return "Filename missing";
+
atom *a = file->l;
if (a->data.vtype != TYPE_str || !a->data.val.sval)
return "Filename missing";
+
char *filename = a->data.val.sval;
+ if (strcmp(filename, "") == 0)
+ return "Filename missing";
+
char *ext = strrchr(filename, '.'), *ep = ext;
-
if (ext) {
ext=ext+1;
ext = mkLower(sa_strdup(sql->sa, ext));
@@ -563,7 +567,7 @@ file_loader_add_table_column_types(mvc *
sql_subtype *st = sql_bind_localtype("str");
sql_exp *ext_exp = exp_atom(sql->sa, atom_string(sql->sa, st, ext));
if (!ext_exp)
- return sql_error(sql, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
append(exps, ext_exp);
return NULL;
}
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
@@ -1906,6 +1906,7 @@ column_def:
}
| column serial_or_bigserial
{ /* SERIAL = INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY
*/
+ /* BIGSERIAL = BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY
KEY */
/* handle multi-statements by wrapping them in a list */
sql_subtype it;
dlist* stmts;
diff --git a/sql/test/emptydb/Tests/check.stable.out
b/sql/test/emptydb/Tests/check.stable.out
--- a/sql/test/emptydb/Tests/check.stable.out
+++ b/sql/test/emptydb/Tests/check.stable.out
@@ -1754,7 +1754,7 @@ select 'null in fkeys.delete_action', de
[ "sys.functions", "sys", "evalalgebra", "SYSTEM", "create
procedure sys.evalalgebra(ra_stmt string, opt bool) external name
sql.\"evalAlgebra\";", "sql", "MAL", "Procedure", true, false,
false, true, NULL, "ra_stmt", "clob", 0, 0, "in", "opt",
"boolean", 1, 0, "in", NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "exp", "SYSTEM", "exp", "mmath",
"Internal C", "Scalar function", false, false, false, false, NULL,
"res_0", "double", 53, 0, "out", "arg_1",
"double", 53, 0, "in", NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "exp", "SYSTEM", "exp", "mmath",
"Internal C", "Scalar function", false, false, false, false, NULL,
"res_0", "real", 24, 0, "out", "arg_1", "real", 24,
0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL ]
-[ "sys.functions", "sys", "file_loader", "SYSTEM", "", "",
"Internal C", "Function returning a table", false, true, false, true,
NULL, "res_0", "table", 0, 0, "out", "arg_1",
"clob", 0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL ]
+[ "sys.functions", "sys", "file_loader", "SYSTEM", "",
"files", "Internal C", "Function returning a table", false, true,
false, true, NULL, "res_0", "table", 0, 0, "out",
"arg_1", "clob", 0, 0, "in", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "first_value", "SYSTEM", "first_value",
"sql", "Internal C", "Analytic function", false, false, false, true,
NULL, "res_0", "any", 0, 0, "out", "arg_1", "any",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL ]
[ "sys.functions", "sys", "fitsattach", "SYSTEM", "create
procedure fitsattach(fname string) external name fits.attach;", "fits", "MAL",
"Procedure", true, false, false, true, NULL, "fname", "clob",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "fitsload", "SYSTEM", "create
procedure fitsload(tname string) external name fits.load;", "fits", "MAL",
"Procedure", true, false, false, true, NULL, "tname", "clob",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ]
diff --git a/sql/test/emptydb/Tests/check.stable.out.32bit
b/sql/test/emptydb/Tests/check.stable.out.32bit
--- a/sql/test/emptydb/Tests/check.stable.out.32bit
+++ b/sql/test/emptydb/Tests/check.stable.out.32bit
@@ -1739,7 +1739,7 @@ select 'null in fkeys.delete_action', de
[ "sys.functions", "sys", "evalalgebra", "SYSTEM", "create
procedure sys.evalalgebra(ra_stmt string, opt bool) external name
sql.\"evalAlgebra\";", "sql", "MAL", "Procedure", true, false,
false, true, NULL, "ra_stmt", "clob", 0, 0, "in", "opt",
"boolean", 1, 0, "in", NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "exp", "SYSTEM", "exp", "mmath",
"Internal C", "Scalar function", false, false, false, false, NULL,
"res_0", "double", 53, 0, "out", "arg_1",
"double", 53, 0, "in", NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "exp", "SYSTEM", "exp", "mmath",
"Internal C", "Scalar function", false, false, false, false, NULL,
"res_0", "real", 24, 0, "out", "arg_1", "real", 24,
0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL ]
-[ "sys.functions", "sys", "file_loader", "SYSTEM", "", "",
"Internal C", "Function returning a table", false, true, false, true,
NULL, "res_0", "table", 0, 0, "out", "arg_1",
"clob", 0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL ]
+[ "sys.functions", "sys", "file_loader", "SYSTEM", "",
"files", "Internal C", "Function returning a table", false, true,
false, true, NULL, "res_0", "table", 0, 0, "out",
"arg_1", "clob", 0, 0, "in", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "first_value", "SYSTEM", "first_value",
"sql", "Internal C", "Analytic function", false, false, false, true,
NULL, "res_0", "any", 0, 0, "out", "arg_1", "any",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL ]
[ "sys.functions", "sys", "fitsattach", "SYSTEM", "create
procedure fitsattach(fname string) external name fits.attach;", "fits", "MAL",
"Procedure", true, false, false, true, NULL, "fname", "clob",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "fitsload", "SYSTEM", "create
procedure fitsload(tname string) external name fits.load;", "fits", "MAL",
"Procedure", true, false, false, true, NULL, "tname", "clob",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ]
diff --git a/sql/test/emptydb/Tests/check.stable.out.int128
b/sql/test/emptydb/Tests/check.stable.out.int128
--- a/sql/test/emptydb/Tests/check.stable.out.int128
+++ b/sql/test/emptydb/Tests/check.stable.out.int128
@@ -1771,7 +1771,7 @@ select 'null in fkeys.delete_action', de
[ "sys.functions", "sys", "evalalgebra", "SYSTEM", "create
procedure sys.evalalgebra(ra_stmt string, opt bool) external name
sql.\"evalAlgebra\";", "sql", "MAL", "Procedure", true, false,
false, true, NULL, "ra_stmt", "clob", 0, 0, "in", "opt",
"boolean", 1, 0, "in", NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "exp", "SYSTEM", "exp", "mmath",
"Internal C", "Scalar function", false, false, false, false, NULL,
"res_0", "double", 53, 0, "out", "arg_1",
"double", 53, 0, "in", NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "exp", "SYSTEM", "exp", "mmath",
"Internal C", "Scalar function", false, false, false, false, NULL,
"res_0", "real", 24, 0, "out", "arg_1", "real", 24,
0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL ]
-[ "sys.functions", "sys", "file_loader", "SYSTEM", "", "",
"Internal C", "Function returning a table", false, true, false, true,
NULL, "res_0", "table", 0, 0, "out", "arg_1",
"clob", 0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL ]
+[ "sys.functions", "sys", "file_loader", "SYSTEM", "",
"files", "Internal C", "Function returning a table", false, true,
false, true, NULL, "res_0", "table", 0, 0, "out",
"arg_1", "clob", 0, 0, "in", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "first_value", "SYSTEM", "first_value",
"sql", "Internal C", "Analytic function", false, false, false, true,
NULL, "res_0", "any", 0, 0, "out", "arg_1", "any",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL ]
[ "sys.functions", "sys", "fitsattach", "SYSTEM", "create
procedure fitsattach(fname string) external name fits.attach;", "fits", "MAL",
"Procedure", true, false, false, true, NULL, "fname", "clob",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ]
[ "sys.functions", "sys", "fitsload", "SYSTEM", "create
procedure fitsload(tname string) external name fits.load;", "fits", "MAL",
"Procedure", true, false, false, true, NULL, "tname", "clob",
0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ]
diff --git a/sql/test/file_loader/Tests/All b/sql/test/file_loader/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/file_loader/Tests/All
@@ -0,0 +1,1 @@
+file_loader_function
diff --git a/sql/test/file_loader/Tests/file_loader_function.test
b/sql/test/file_loader/Tests/file_loader_function.test
new file mode 100644
--- /dev/null
+++ b/sql/test/file_loader/Tests/file_loader_function.test
@@ -0,0 +1,16 @@
+query TT rowsort
+select name, mod from sys.functions where mod is null or mod = '';
+----
+
+statement error 42000!Table expression without table name
+select * from file_loader('');
+
+statement error 42000!Table expression without table name
+select * from file_loader('filenotfound');
+
+statement error server crash
+select * from sys.file_loader('');
+
+statement error server crash
+select * from sys.file_loader('filenotfound');
+
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -219,6 +219,7 @@ validate_database_handle_noerror(monetdb
{
if (!monetdbe_embedded_initialized || !MCvalid(mdbe->c))
return 0;
+ assert(mdbe->c);
MT_thread_set_qry_ctx(&mdbe->c->qryctx);
clear_error(mdbe);
return 1;
@@ -953,7 +954,8 @@ monetdbe_close(monetdbe_database dbhdl)
int err = 0;
int registered_thread = mdbe->registered_thread;
- MT_thread_set_qry_ctx(&mdbe->c->qryctx);
+ if (mdbe->c)
+ MT_thread_set_qry_ctx(&mdbe->c->qryctx);
MT_lock_set(&embedded_lock);
if (mdbe->mid)
err = monetdbe_close_remote(mdbe);
@@ -1561,6 +1563,7 @@ monetdbe_query(monetdbe_database dbhdl,
return NULL;
monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
+ assert(mdbe->c);
MT_thread_set_qry_ctx(&mdbe->c->qryctx);
if (mdbe->mid) {
mdbe->msg = monetdbe_query_remote(mdbe, query, result,
affected_rows, NULL);
@@ -1581,6 +1584,7 @@ monetdbe_prepare(monetdbe_database dbhdl
int prepare_id = 0;
+ assert(mdbe->c);
MT_thread_set_qry_ctx(&mdbe->c->qryctx);
if (!stmt) {
set_error(mdbe, createException(MAL,
"monetdbe.monetdbe_prepare", "Parameter stmt is NULL"));
@@ -1709,6 +1713,7 @@ monetdbe_execute(monetdbe_statement *stm
cq *q = stmt_internal->q;
Symbol s = NULL;
+ assert(mdbe->c);
MT_thread_set_qry_ctx(&mdbe->c->qryctx);
if ((mdbe->msg = SQLtrans(m)) != MAL_SUCCEED)
return mdbe->msg;
@@ -1752,6 +1757,7 @@ monetdbe_cleanup_statement(monetdbe_data
assert(!stmt_internal->mdbe || mdbe == stmt_internal->mdbe);
+ assert(mdbe->c);
MT_thread_set_qry_ctx(&mdbe->c->qryctx);
for (size_t i = 0; i < stmt_internal->res.nparam + 1; i++) {
ValPtr data = &stmt_internal->data[i];
@@ -1774,6 +1780,7 @@ monetdbe_cleanup_result(monetdbe_databas
monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
monetdbe_result_internal* res = (monetdbe_result_internal *) result;
+ assert(mdbe->c);
MT_thread_set_qry_ctx(&mdbe->c->qryctx);
if (!result) {
set_error(mdbe, createException(MAL,
"monetdbe.monetdbe_cleanup_result_internal", "Parameter result is NULL"));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]