Changeset: 14211c2d07ea for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=14211c2d07ea
Modified Files:
clients/mapiclient/mnc.c
monetdb5/modules/mal/mal_mapi.c
sql/ChangeLog.Mar2018
sql/backends/monet5/sql.c
sql/backends/monet5/sql_upgrades.c
sql/scripts/21_dependency_views.sql
sql/server/rel_select.c
sql/test/BugTracker-2016/Tests/storagemodel.sql
sql/test/BugTracker-2016/Tests/storagemodel.stable.out
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out.int128
sql/test/Dependencies/Tests/dependency_loop.stable.out
sql/test/Dependencies/Tests/dependency_loop.stable.out.int128
tools/merovingian/daemon/connections.c
Branch: default
Log Message:
merged with Mar2018
diffs (truncated from 753 to 300 lines):
diff --git a/clients/mapiclient/mnc.c b/clients/mapiclient/mnc.c
--- a/clients/mapiclient/mnc.c
+++ b/clients/mapiclient/mnc.c
@@ -213,6 +213,7 @@ main(int argc, char **argv)
#endif
if (connect(s, serv, sizeof(server)) == SOCKET_ERROR) {
+ closesocket(s);
fprintf(stderr,
"initiating connection on socket failed: %s\n",
strerror(errno));
@@ -253,13 +254,20 @@ main(int argc, char **argv)
server.sin_port = htons((unsigned short) ((port) & 0xFFFF));
if (bind(sock, (SOCKPTR) &server, length) == SOCKET_ERROR) {
+ closesocket(sock);
fprintf(stderr, "bind to port %d failed: %s\n",
port, strerror(errno));
exit(1);
}
- listen(sock, 1);
+ if(listen(sock, 1) == -1) {
+ closesocket(sock);
+ fprintf(stderr, "failed to set socket to listen: %s\n",
+ strerror(errno));
+ exit(1);
+ }
if ((s = accept4(sock, (SOCKPTR)0, (socklen_t *)0,
SOCK_CLOEXEC)) == INVALID_SOCKET) {
+ closesocket(sock);
fprintf(stderr, "failed to accept connection: %s\n",
strerror(errno));
exit(1);
@@ -288,8 +296,11 @@ main(int argc, char **argv)
/* on Windows: unsigned int,
* elsewhere: size_t, but then
* unsigned int shouldn't harm */
- if (!write(1, buf, (unsigned int) len))
+ if (!write(1, buf, (unsigned int) len)) {
+ mnstr_destroy(in);
+ mnstr_destroy(out);
exit(2);
+ }
seenflush = 0;
} else {
/* flush or error */
diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c
--- a/monetdb5/modules/mal/mal_mapi.c
+++ b/monetdb5/modules/mal/mal_mapi.c
@@ -158,6 +158,7 @@ doChallenge(void *data)
generateChallenge(challenge, 8, 12);
algos = mcrypt_getHashAlgorithms();
if(!algos) {
+ mnstr_printf(fdout, "!allocation failure in the server\n");
GDKsyserror("SERVERlisten:"MAL_MALLOC_FAIL);
close_stream(fdin);
close_stream(fdout);
@@ -278,6 +279,7 @@ doChallenge(void *data)
bs = bstream_create(fdin, 128 * BLOCK);
if (bs == NULL){
+ mnstr_printf(fdout, "!allocation failure in the server\n");
close_stream(fdin);
close_stream(fdout);
GDKfree(buf);
@@ -436,7 +438,7 @@ SERVERlistenThread(SOCKET *Sock)
{ int *c_d;
/* filedescriptor, put it in place of
msgsock */
cmsg = CMSG_FIRSTHDR(&msgh);
- shutdown(msgsock, SHUT_WR);
+ (void) shutdown(msgsock, SHUT_WR);
closesocket(msgsock);
if (!cmsg || cmsg->cmsg_type !=
SCM_RIGHTS) {
fprintf(stderr,
"!mal_mapi.listen: "
@@ -714,7 +716,20 @@ SERVERlisten(int *Port, str *Usockfile,
#endif
);
}
- listen(sock, maxusers);
+ if(listen(sock, maxusers) == SOCKET_ERROR) {
+ closesocket(sock);
+ GDKfree(psock);
+ if (usockfile)
+ GDKfree(usockfile);
+ throw(IO, "mal_mapi.listen",
+ OPERATION_FAILED ": failed to set socket to
listen %s",
+#ifdef _MSC_VER
+ wsaerror(WSAGetLastError())
+#else
+ strerror(errno)
+#endif
+ );
+ }
}
#ifdef HAVE_SYS_UN_H
if (usockfile) {
@@ -757,11 +772,16 @@ SERVERlisten(int *Port, str *Usockfile,
userver.sun_path[sizeof(userver.sun_path) - 1] = 0;
length = (SOCKLEN) sizeof(userver);
- remove(usockfile);
+ if(remove(usockfile) == -1 && errno != ENOENT) {
+ char *e = createException(IO, "mal_mapi.listen",
OPERATION_FAILED ": remove UNIX socket file");
+ closesocket(usock);
+ GDKfree(psock);
+ return e;
+ }
if (bind(usock, (SOCKPTR) &userver, length) == SOCKET_ERROR) {
char *e;
closesocket(usock);
- remove(usockfile);
+ (void) remove(usockfile);
GDKfree(psock);
e = createException(IO, "mal_mapi.listen",
OPERATION_FAILED
@@ -776,7 +796,24 @@ SERVERlisten(int *Port, str *Usockfile,
GDKfree(usockfile);
return e;
}
- listen(usock, maxusers);
+ if(listen(usock, maxusers) == SOCKET_ERROR) {
+ char *e;
+ closesocket(usock);
+ (void) remove(usockfile);
+ GDKfree(psock);
+ e = createException(IO, "mal_mapi.listen",
+ OPERATION_FAILED
+ ": setting UNIX
socket file %s to listen failed: %s",
+ usockfile,
+#ifdef _MSC_VER
+
wsaerror(WSAGetLastError())
+#else
+ strerror(errno)
+#endif
+ );
+ GDKfree(usockfile);
+ return e;
+ }
}
#endif
@@ -914,7 +951,7 @@ SERVERclient(void *res, const Stream *In
if (MT_create_thread(&tid, doChallenge, data, MT_THR_DETACHED)) {
mnstr_destroy(data->in);
mnstr_destroy(data->out);
- free(data);
+ GDKfree(data);
throw(MAL, "mapi.SERVERclient", "cannot fork new client
thread");
}
return MAL_SUCCEED;
@@ -1203,7 +1240,7 @@ SERVERlookup(int *ret, str *dbalias)
str
SERVERtrace(void *ret, int *key, int *flag){
(void )ret;
- mapi_trace(SERVERsessions[*key].mid,*flag);
+ (void) mapi_trace(SERVERsessions[*key].mid,*flag);
return MAL_SUCCEED;
}
diff --git a/sql/ChangeLog.Mar2018 b/sql/ChangeLog.Mar2018
--- a/sql/ChangeLog.Mar2018
+++ b/sql/ChangeLog.Mar2018
@@ -6,11 +6,11 @@
ids which can be used in sys.dependencies table.
- Added new system view: sys.dependencies_vw which shows all data of
sys.dependencies including names on objects, object types and dependency
types.
-- Added new system views for finding out dependencies between database objects.
- These new dependency views improve, extend and replace the
+- Added 25 new system views for finding out dependencies between database
objects.
+ These new dependency views improve, extend and replace the 17
sys.dependencies_X_on_Y() functions as previously defined in
- 21_dependency_functions.sql.
- The sys.dependencies_X_on_Y() functions are now marked as deprecated.
+ 21_dependency_functions.sql. Those sys.dependencies_X_on_Y() functions
+ are now marked as deprecated.
- Added new system view: sys.roles which contains all defined roles.
- Added new system view: sys.var_values which shows the values for
system variables.
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1107,7 +1107,7 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
}
if (sname)
throw(SQL, "sql.idxbind", SQLSTATE(HY005) "Cannot access column
descriptor %s for %s.%s", iname, sname, tname);
- throw(SQL, "sql.idxbind", SQLSTATE(HY005) "Connot access column
descriptor %s for %s", iname, tname);
+ throw(SQL, "sql.idxbind", SQLSTATE(HY005) "Cannot access column
descriptor %s for %s", iname, tname);
}
str mvc_append_column(sql_trans *t, sql_column *c, BAT *ins) {
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -1178,41 +1178,42 @@ sql_update_mar2018(Client c, mvc *sql)
"\n"
"GRANT SELECT ON sys.dependency_keys_on_foreignkeys TO PUBLIC;\n"
"\n"
-"CREATE VIEW sys.dependency_tables_on_procdures AS\n"
-"SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS
table_name, p.name, p.type AS proc_type, dep.depend_type AS depend_type\n"
+"CREATE VIEW sys.dependency_tables_on_procedures AS\n"
+"SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS
table_name, p.id AS procedure_id, p.name AS procedure_name, p.type AS
procedure_type, dep.depend_type AS depend_type\n"
" FROM sys.functions AS p, sys.tables AS t, sys.dependencies AS dep\n"
" WHERE t.id = dep.id AND p.id = dep.depend_id\n"
" AND dep.depend_type = 13 AND p.type = 2 AND t.type NOT IN (1, 11)\n"
" ORDER BY t.name, t.schema_id, p.name, p.id;\n"
"\n"
-"GRANT SELECT ON sys.dependency_tables_on_procdures TO PUBLIC;\n"
+"GRANT SELECT ON sys.dependency_tables_on_procedures TO PUBLIC;\n"
"\n"
-"CREATE VIEW sys.dependency_views_on_procdures AS\n"
-"SELECT v.name AS view_name, p.name AS proc_name, p.type AS proc_type,
dep.depend_type AS depend_type\n"
+"CREATE VIEW sys.dependency_views_on_procedures AS\n"
+"SELECT v.schema_id AS view_schema_id, v.id AS view_id, v.name AS view_name,
p.id AS procedure_id, p.name AS procedure_name, p.type AS procedure_type,
dep.depend_type AS depend_type\n"
" FROM sys.functions AS p, sys.tables AS v, sys.dependencies AS dep\n"
" WHERE v.id = dep.id AND p.id = dep.depend_id\n"
" AND dep.depend_type = 13 AND p.type = 2 AND v.type IN (1, 11)\n"
" ORDER BY v.name, v.schema_id, p.name, p.id;\n"
"\n"
-"GRANT SELECT ON sys.dependency_views_on_procdures TO PUBLIC;\n"
+"GRANT SELECT ON sys.dependency_views_on_procedures TO PUBLIC;\n"
"\n"
-"CREATE VIEW sys.dependency_columns_on_procdures AS\n"
-"SELECT c.name AS column_name, p.name AS proc_name, p.type AS proc_type,
dep.depend_type AS depend_type\n"
+"CREATE VIEW sys.dependency_columns_on_procedures AS\n"
+"SELECT c.table_id, c.id AS column_id, c.name AS column_name, p.id AS
procedure_id, p.name AS procedure_name, p.type AS procedure_type,
dep.depend_type AS depend_type\n"
" FROM sys.functions AS p, sys.columns AS c, sys.dependencies AS dep\n"
" WHERE c.id = dep.id AND p.id = dep.depend_id\n"
" AND dep.depend_type = 13 AND p.type = 2\n"
" ORDER BY c.name, c.table_id, p.name, p.id;\n"
"\n"
-"GRANT SELECT ON sys.dependency_columns_on_procdures TO PUBLIC;\n"
+"GRANT SELECT ON sys.dependency_columns_on_procedures TO PUBLIC;\n"
"\n"
-"CREATE VIEW sys.dependency_functions_on_procdures AS\n"
-"SELECT p.name AS proc_name, p.type AS proc_type, f2.name AS func_name,
f2.type AS func_type, dep.depend_type AS depend_type\n"
-" FROM sys.functions AS p, sys.functions AS f2, sys.dependencies AS dep\n"
-" WHERE f2.id = dep.id AND p.id = dep.depend_id\n"
+"CREATE VIEW sys.dependency_functions_on_procedures AS\n"
+"SELECT f.schema_id AS function_schema_id, f.id AS function_id, f.name AS
function_name, f.type AS function_type,\n"
+" p.schema_id AS procedure_schema_id, p.id AS procedure_id, p.name AS
procedure_name, p.type AS procedure_type, dep.depend_type AS depend_type\n"
+" FROM sys.functions AS p, sys.functions AS f, sys.dependencies AS dep\n"
+" WHERE f.id = dep.id AND p.id = dep.depend_id\n"
" AND dep.depend_type = 13 AND p.type = 2\n"
-" ORDER BY p.name, p.id, f2.name, f2.id;\n"
+" ORDER BY p.name, p.id, f.name, f.id;\n"
"\n"
-"GRANT SELECT ON sys.dependency_functions_on_procdures TO PUBLIC;\n"
+"GRANT SELECT ON sys.dependency_functions_on_procedures TO PUBLIC;\n"
"\n"
"CREATE VIEW sys.dependency_columns_on_types AS\n"
"SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS
table_name, dt.id AS type_id, dt.sqlname AS type_name, c.id AS column_id,
c.name AS column_name, dep.depend_type AS depend_type\n"
@@ -1249,7 +1250,7 @@ sql_update_mar2018(Client c, mvc *sql)
" 'dependency_tables_on_triggers', 'dependency_columns_on_triggers',
'dependency_functions_on_triggers',\n"
" 'dependency_tables_on_indexes', 'dependency_columns_on_indexes',\n"
" 'dependency_tables_on_foreignkeys', 'dependency_keys_on_foreignkeys',\n"
-" 'dependency_tables_on_procdures', 'dependency_views_on_procdures',
'dependency_columns_on_procdures', 'dependency_functions_on_procdures',\n"
+" 'dependency_tables_on_procedures', 'dependency_views_on_procedures',
'dependency_columns_on_procedures', 'dependency_functions_on_procedures',\n"
" 'dependency_columns_on_types', 'dependency_functions_on_types',
'dependency_args_on_types')\n"
" AND schema_id IN (SELECT id FROM sys.schemas WHERE name = 'sys');\n"
);
diff --git a/sql/scripts/21_dependency_views.sql
b/sql/scripts/21_dependency_views.sql
--- a/sql/scripts/21_dependency_views.sql
+++ b/sql/scripts/21_dependency_views.sql
@@ -302,44 +302,45 @@ GRANT SELECT ON sys.dependency_keys_on_f
-- **** dependency_type 13 = PROCEDURE ***
-- SELECT * FROM sys.dependencies_vw WHERE depend_type = 13 ORDER BY obj_type,
id;
-- Table t has a dependency on procedure p.
-CREATE VIEW sys.dependency_tables_on_procdures AS
-SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS table_name,
p.name, p.type AS proc_type, dep.depend_type AS depend_type
+CREATE VIEW sys.dependency_tables_on_procedures AS
+SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS table_name,
p.id AS procedure_id, p.name AS procedure_name, p.type AS procedure_type,
dep.depend_type AS depend_type
FROM sys.functions AS p, sys.tables AS t, sys.dependencies AS dep
WHERE t.id = dep.id AND p.id = dep.depend_id
AND dep.depend_type = 13 AND p.type = 2 AND t.type NOT IN (1, 11)
ORDER BY t.name, t.schema_id, p.name, p.id;
-GRANT SELECT ON sys.dependency_tables_on_procdures TO PUBLIC;
+GRANT SELECT ON sys.dependency_tables_on_procedures TO PUBLIC;
-- View v has a dependency on procedure p.
-CREATE VIEW sys.dependency_views_on_procdures AS
-SELECT v.name AS view_name, p.name AS proc_name, p.type AS proc_type,
dep.depend_type AS depend_type
+CREATE VIEW sys.dependency_views_on_procedures AS
+SELECT v.schema_id AS view_schema_id, v.id AS view_id, v.name AS view_name,
p.id AS procedure_id, p.name AS procedure_name, p.type AS procedure_type,
dep.depend_type AS depend_type
FROM sys.functions AS p, sys.tables AS v, sys.dependencies AS dep
WHERE v.id = dep.id AND p.id = dep.depend_id
AND dep.depend_type = 13 AND p.type = 2 AND v.type IN (1, 11)
ORDER BY v.name, v.schema_id, p.name, p.id;
-GRANT SELECT ON sys.dependency_views_on_procdures TO PUBLIC;
+GRANT SELECT ON sys.dependency_views_on_procedures TO PUBLIC;
-- Column c has a dependency on procedure p.
-CREATE VIEW sys.dependency_columns_on_procdures AS
-SELECT c.name AS column_name, p.name AS proc_name, p.type AS proc_type,
dep.depend_type AS depend_type
+CREATE VIEW sys.dependency_columns_on_procedures AS
+SELECT c.table_id, c.id AS column_id, c.name AS column_name, p.id AS
procedure_id, p.name AS procedure_name, p.type AS procedure_type,
dep.depend_type AS depend_type
FROM sys.functions AS p, sys.columns AS c, sys.dependencies AS dep
WHERE c.id = dep.id AND p.id = dep.depend_id
AND dep.depend_type = 13 AND p.type = 2
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list