Changeset: 9c78aebbb5b9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9c78aebbb5b9 Modified Files: clients/mapiclient/mclient.c sql/backends/monet5/sql_upgrades.c sql/scripts/97_comments.sql Branch: Mar2018 Log Message:
Inline view describe_all_objects into mclient.c diffs (216 lines): diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -2192,7 +2192,6 @@ showCommands(void) mnstr_printf(toConsole, "\\q - terminate session\n"); } -/* These values must match those used in view sys.describe_all_objects */ #define MD_TABLE 1 #define MD_VIEW 2 #define MD_SEQ 4 @@ -2540,7 +2539,58 @@ doFile(Mapi mid, stream *fp, bool useins #endif } else { /* get all object names in current schema */ - size_t len = 500 + strlen(line); + char *with_clause = + "WITH describe_all_objects AS (\n" + " SELECT s.name AS sname,\n" + " t.name,\n" + " s.name || \'.\' || t.name AS fullname,\n" + " CAST(CASE t.type\n" + " WHEN 1 THEN 2 -- ntype for views\n" + " ELSE 1\t -- ntype for tables\n" + " END AS SMALLINT) AS ntype,\n" + " (CASE WHEN t.system THEN \'SYSTEM \' ELSE \'\' END) || tt.table_type_name AS type,\n" + " t.system,\n" + " c.remark AS remark\n" + " FROM sys._tables t\n" + " LEFT OUTER JOIN sys.comments c ON t.id = c.id\n" + " LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.id\n" + " LEFT OUTER JOIN sys.table_types tt ON t.type = tt.table_type_id\n" + " UNION ALL\n" + " SELECT s.name AS sname,\n" + " sq.name,\n" + " s.name || \'.\' || sq.name AS fullname,\n" + " CAST(4 AS SMALLINT) AS ntype,\n" + " \'SEQUENCE\' AS type,\n" + " false AS system,\n" + " c.remark AS remark\n" + " FROM sys.sequences sq\n" + " LEFT OUTER JOIN sys.comments c ON sq.id = c.id\n" + " LEFT OUTER JOIN sys.schemas s ON sq.schema_id = s.id\n" + " UNION ALL\n" + " SELECT DISTINCT s.name AS sname, -- DISTINCT is needed to filter out duplicate overloaded function/procedure names\n" + " f.name,\n" + " s.name || \'.\' || f.name AS fullname,\n" + " CAST(8 AS SMALLINT) AS ntype,\n" + " (CASE WHEN sf.function_id IS NOT NULL THEN \'SYSTEM \' ELSE \'\' END) || sys.function_type_keyword(f.type) AS type,\n" + " sf.function_id IS NOT NULL AS system,\n" + " c.remark AS remark\n" + " FROM sys.functions f\n" + " LEFT OUTER JOIN sys.comments c ON f.id = c.id\n" + " LEFT OUTER JOIN sys.schemas s ON f.schema_id = s.id\n" + " LEFT OUTER JOIN sys.systemfunctions sf ON f.id = sf.function_id\n" + " UNION ALL\n" + " SELECT NULL AS sname,\n" + " s.name,\n" + " s.name AS fullname,\n" + " CAST(16 AS SMALLINT) AS ntype,\n" + " (CASE WHEN s.system THEN \'SYSTEM SCHEMA\' ELSE \'SCHEMA\' END) AS type,\n" + " s.system,\n" + " c.remark AS remark\n" + " FROM sys.schemas s\n" + " LEFT OUTER JOIN sys.comments c ON s.id = c.id\n" + " ORDER BY system, name, sname, ntype)\n" + ; + size_t len = strlen(with_clause) + 500 + strlen(line); char *query = malloc(len); char *q = query, *endq = query + len; char *name_column = hasSchema ? "fullname" : "name"; @@ -2558,7 +2608,8 @@ doFile(Mapi mid, stream *fp, bool useins * | "data.my*" | no | fullname LIKE 'data.my%' | * | "*a.my*" | no | fullname LIKE '%a.my%' | */ - q += snprintf(q, endq - q, "SELECT type, fullname, remark FROM sys.describe_all_objects\n"); + q += snprintf(q, endq - q, "%s", with_clause); + q += snprintf(q, endq - q, "SELECT type, fullname, remark FROM describe_all_objects\n"); q += snprintf(q, endq - q, "WHERE (ntype & %u) > 0\n", x); if (!wantsSystem) { q += snprintf(q, endq - q, "AND NOT system\n"); 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 @@ -1328,57 +1328,7 @@ sql_update_mar2018(Client c, mvc *sql) " ELSE 'ROUTINE'\n" " END;\n" "END;\n" - "GRANT EXECUTE ON FUNCTION sys.function_type_keyword(INT) TO PUBLIC;\n" - "CREATE VIEW sys.describe_all_objects AS\n" - "SELECT s.name AS sname,\n" - " t.name,\n" - " s.name || '.' || t.name AS fullname,\n" - " CAST(CASE t.type\n" - " WHEN 1 THEN 2 -- ntype for views\n" - " ELSE 1 -- ntype for tables\n" - " END AS SMALLINT) AS ntype,\n" - " (CASE WHEN t.system THEN 'SYSTEM ' ELSE '' END) || tt.table_type_name AS type,\n" - " t.system,\n" - " c.remark AS remark\n" - " FROM sys._tables t\n" - " LEFT OUTER JOIN sys.comments c ON t.id = c.id\n" - " LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.id\n" - " LEFT OUTER JOIN sys.table_types tt ON t.type = tt.table_type_id\n" - "UNION ALL\n" - "SELECT s.name AS sname,\n" - " sq.name,\n" - " s.name || '.' || sq.name AS fullname,\n" - " CAST(4 AS SMALLINT) AS ntype,\n" - " 'SEQUENCE' AS type,\n" - " false AS system,\n" - " c.remark AS remark\n" - " FROM sys.sequences sq\n" - " LEFT OUTER JOIN sys.comments c ON sq.id = c.id\n" - " LEFT OUTER JOIN sys.schemas s ON sq.schema_id = s.id\n" - "UNION ALL\n" - "SELECT DISTINCT s.name AS sname, -- DISTINCT is needed to filter out duplicate overloaded function/procedure names\n" - " f.name,\n" - " s.name || '.' || f.name AS fullname,\n" - " CAST(8 AS SMALLINT) AS ntype,\n" - " (CASE WHEN sf.function_id IS NOT NULL THEN 'SYSTEM ' ELSE '' END) || sys.function_type_keyword(f.type) AS type,\n" - " sf.function_id IS NOT NULL AS system,\n" - " c.remark AS remark\n" - " FROM sys.functions f\n" - " LEFT OUTER JOIN sys.comments c ON f.id = c.id\n" - " LEFT OUTER JOIN sys.schemas s ON f.schema_id = s.id\n" - " LEFT OUTER JOIN sys.systemfunctions sf ON f.id = sf.function_id\n" - "UNION ALL\n" - "SELECT NULL AS sname,\n" - " s.name,\n" - " s.name AS fullname,\n" - " CAST(16 AS SMALLINT) AS ntype,\n" - " (CASE WHEN s.system THEN 'SYSTEM SCHEMA' ELSE 'SCHEMA' END) AS type,\n" - " s.system,\n" - " c.remark AS remark\n" - " FROM sys.schemas s\n" - " LEFT OUTER JOIN sys.comments c ON s.id = c.id\n" - " ORDER BY system, name, sname, ntype;\n" - "GRANT SELECT ON sys.describe_all_objects TO PUBLIC;\n" + "GRANT EXECUTE ON FUNCTION sys.function_type_keyword(INT) TO PUBLIC;\n" "CREATE VIEW sys.commented_function_signatures AS\n" "SELECT f.id AS fid,\n" " s.name AS schema,\n" @@ -1398,7 +1348,7 @@ sql_update_mar2018(Client c, mvc *sql) "GRANT SELECT ON sys.commented_function_signatures TO PUBLIC;\n" "UPDATE sys._tables\n" "SET system = true\n" - "WHERE name IN ('comments', 'describe_all_objects', 'commented_function_signatures')\n" + "WHERE name IN ('comments', 'commented_function_signatures')\n" "AND schema_id = (SELECT id FROM sys.schemas WHERE name = 'sys');\n" "DELETE FROM sys.systemfunctions WHERE function_id IS NULL;\n" "ALTER TABLE sys.systemfunctions ALTER COLUMN function_id SET NOT NULL;\n" diff --git a/sql/scripts/97_comments.sql b/sql/scripts/97_comments.sql --- a/sql/scripts/97_comments.sql +++ b/sql/scripts/97_comments.sql @@ -10,60 +10,6 @@ CREATE TABLE sys.systemfunctions (functi GRANT SELECT ON sys.systemfunctions TO PUBLIC; --- utility view to list all objects (except columns) which can have a comment/remark associated --- it is used in mclient and mdump code -CREATE VIEW sys.describe_all_objects AS -SELECT s.name AS sname, - t.name, - s.name || '.' || t.name AS fullname, - CAST(CASE t.type - WHEN 1 THEN 2 -- ntype for views - ELSE 1 -- ntype for tables - END AS SMALLINT) AS ntype, - (CASE WHEN t.system THEN 'SYSTEM ' ELSE '' END) || tt.table_type_name AS type, - t.system, - c.remark AS remark - FROM sys._tables t - LEFT OUTER JOIN sys.comments c ON t.id = c.id - LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.id - LEFT OUTER JOIN sys.table_types tt ON t.type = tt.table_type_id -UNION ALL -SELECT s.name AS sname, - sq.name, - s.name || '.' || sq.name AS fullname, - CAST(4 AS SMALLINT) AS ntype, - 'SEQUENCE' AS type, - false AS system, - c.remark AS remark - FROM sys.sequences sq - LEFT OUTER JOIN sys.comments c ON sq.id = c.id - LEFT OUTER JOIN sys.schemas s ON sq.schema_id = s.id -UNION ALL -SELECT DISTINCT s.name AS sname, -- DISTINCT is needed to filter out duplicate overloaded function/procedure names - f.name, - s.name || '.' || f.name AS fullname, - CAST(8 AS SMALLINT) AS ntype, - (CASE WHEN sf.function_id IS NOT NULL THEN 'SYSTEM ' ELSE '' END) || sys.function_type_keyword(f.type) AS type, - sf.function_id IS NOT NULL AS system, - c.remark AS remark - FROM sys.functions f - LEFT OUTER JOIN sys.comments c ON f.id = c.id - LEFT OUTER JOIN sys.schemas s ON f.schema_id = s.id - LEFT OUTER JOIN sys.systemfunctions sf ON f.id = sf.function_id -UNION ALL -SELECT NULL AS sname, - s.name, - s.name AS fullname, - CAST(16 AS SMALLINT) AS ntype, - (CASE WHEN s.system THEN 'SYSTEM SCHEMA' ELSE 'SCHEMA' END) AS type, - s.system, - c.remark AS remark - FROM sys.schemas s - LEFT OUTER JOIN sys.comments c ON s.id = c.id - ORDER BY system, name, sname, ntype; -GRANT SELECT ON sys.describe_all_objects TO PUBLIC; - - CREATE VIEW sys.commented_function_signatures AS SELECT f.id AS fid, s.name AS schema, _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list