Changeset: f360933fa058 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f360933fa058
Added Files:
        sql/backends/monet5/UDF/capi/Tests/capi14.sql
        sql/backends/monet5/UDF/capi/Tests/capi14.stable.err
        sql/backends/monet5/UDF/capi/Tests/capi14.stable.out
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-complex-case-not-in.Bug-6594.sql
        sql/test/BugTracker-2018/Tests/temp-table-performance.Bug-6577.sql
Modified Files:
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        clients/mapiclient/msqldump.h
        clients/odbc/driver/SQLColumnPrivileges.c
        clients/odbc/driver/SQLTablePrivileges.c
        sql/backends/monet5/UDF/capi/Tests/All
        sql/backends/monet5/UDF/capi/capi.c
        sql/storage/bat/bat_logger.c
        sql/test/BugTracker-2018/Tests/All
Branch: default
Log Message:

Merge with Mar2018


diffs (truncated from 848 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -15,6 +15,16 @@
 #include <ctype.h>
 #include "msqldump.h"
 
+static const char *
+get_compat_clause(Mapi mid)
+{
+       static const char *compat_clause = NULL;
+       if (!compat_clause) {
+               compat_clause = get_with_comments_as_clause(mid);
+       }
+       return compat_clause;
+}
+
 static void
 quoted_print(stream *f, const char *s, bool singleq)
 {
@@ -790,15 +800,17 @@ describe_table(Mapi mid, const char *sch
 
        hashge = has_hugeint(mid);
 
-       maxquerylen = 512 + strlen(tname) + strlen(schema);
+       maxquerylen = 5120 + strlen(tname) + strlen(schema);
 
        query = malloc(maxquerylen);
        snprintf(query, maxquerylen,
+                "%s\n"
                 "SELECT t.name, t.query, t.type, c.remark "
-                "FROM sys.schemas s, sys._tables t LEFT OUTER JOIN 
sys.comments c ON t.id = c.id "
+                "FROM sys.schemas s, sys._tables t LEFT OUTER JOIN comments c 
ON t.id = c.id "
                 "WHERE s.name = '%s' AND "
                       "t.schema_id = s.id AND "
                       "t.name = '%s'",
+                get_compat_clause(mid),
                 schema, tname);
 
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
@@ -937,7 +949,10 @@ describe_table(Mapi mid, const char *sch
                if (cnt)
                        mnstr_printf(toConsole, ");\n");
                snprintf(query, maxquerylen,
-                        "SELECT i.name, c.remark FROM sys.idxs i, sys.comments 
c WHERE i.id = c.id AND i.table_id = (SELECT id FROM sys._tables WHERE 
schema_id = (select id FROM sys.schemas WHERE name = '%s') AND name = '%s') 
ORDER BY i.name", schema, tname);
+                       "%s\n"
+                        "SELECT i.name, c.remark FROM sys.idxs i, comments c 
WHERE i.id = c.id AND i.table_id = (SELECT id FROM sys._tables WHERE schema_id 
= (select id FROM sys.schemas WHERE name = '%s') AND name = '%s') ORDER BY 
i.name",
+                        get_compat_clause(mid),
+                        schema, tname);
                if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
                        goto bailout;
                while (mapi_fetch_row(hdl) != 0) {
@@ -950,13 +965,16 @@ describe_table(Mapi mid, const char *sch
        }
 
        snprintf(query, maxquerylen,
-                "SELECT col.name, com.remark FROM sys._columns col, 
sys.comments com WHERE col.id = com.id AND col.table_id = (SELECT id FROM 
sys._tables WHERE schema_id = (SELECT id FROM sys.schemas WHERE name = '%s') 
AND name = '%s') ORDER BY number", schema, tname);
+               "%s\n"
+                       "SELECT col.name, com.remark FROM sys._columns col, 
comments com WHERE col.id = com.id AND col.table_id = (SELECT id FROM 
sys._tables WHERE schema_id = (SELECT id FROM sys.schemas WHERE name = '%s') 
AND name = '%s') ORDER BY number",
+                       get_compat_clause(mid),
+                       schema, tname);
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
                goto bailout;
        while (mapi_fetch_row(hdl) != 0) {
                comment_on(toConsole, "COLUMN", schema, tname,
-                          mapi_fetch_field(hdl, 0),
-                          mapi_fetch_field(hdl, 1));
+                               mapi_fetch_field(hdl, 0),
+                               mapi_fetch_field(hdl, 1));
        }
        mapi_close_handle(hdl);
        hdl = NULL;
@@ -1015,10 +1033,11 @@ describe_sequence(Mapi mid, const char *
                schema = sname;
        }
 
-       maxquerylen = 512 + strlen(tname) + strlen(schema);
+       maxquerylen = 5120 + strlen(tname) + strlen(schema);
 
        query = malloc(maxquerylen);
        snprintf(query, maxquerylen,
+               "%s\n"
                "SELECT s.name, "
                     "seq.name, "
                     "get_value_for(s.name,seq.name), "
@@ -1027,12 +1046,13 @@ describe_sequence(Mapi mid, const char *
                     "seq.\"increment\", "
                     "seq.\"cycle\", "
                     "rem.\"remark\" "
-               "FROM sys.sequences seq LEFT OUTER JOIN sys.comments rem ON 
seq.id = rem.id, "
+               "FROM sys.sequences seq LEFT OUTER JOIN comments rem ON seq.id 
= rem.id, "
                     "sys.schemas s "
                "WHERE s.id = seq.schema_id AND "
                      "s.name = '%s' AND "
                      "seq.name = '%s' "
                "ORDER BY s.name,seq.name",
+               get_compat_clause(mid),
                schema, tname);
 
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
@@ -1095,15 +1115,17 @@ int
 describe_schema(Mapi mid, const char *sname, stream *toConsole)
 {
        MapiHdl hdl = NULL;
-       char schemas[256];
+       char schemas[5120];
 
-       snprintf(schemas, 256,
+       snprintf(schemas, 5120,
+               "%s\n"
                "SELECT s.name, a.name, c.remark "
                "FROM sys.auths a, "
-                    "sys.schemas s LEFT OUTER JOIN sys.comments c ON s.id = 
c.id "
+                    "sys.schemas s LEFT OUTER JOIN comments c ON s.id = c.id "
                "WHERE s.\"authorization\" = a.id AND "
                      "s.name = '%s' "
                "ORDER BY s.name",
+               get_compat_clause(mid),
                sname);
 
        if ((hdl = mapi_query(mid, schemas)) == NULL || mapi_error(mid)) {
@@ -1161,7 +1183,7 @@ dump_table_data(Mapi mid, const char *sc
                schema = sname;
        }
 
-       maxquerylen = 512 + strlen(tname) + strlen(schema);
+       maxquerylen = 5120 + strlen(tname) + strlen(schema);
        query = malloc(maxquerylen);
 
        snprintf(query, maxquerylen,
@@ -1308,7 +1330,7 @@ dump_table(Mapi mid, const char *schema,
 static int
 dump_function_comment(Mapi mid, stream *toConsole, const char *id)
 {
-       int len = 1000;
+       int len = 5120;
        char *query = malloc(len);
        MapiHdl hdl = NULL;
        int hashge;
@@ -1317,6 +1339,7 @@ dump_function_comment(Mapi mid, stream *
                return 1;
 
        snprintf(query, len,
+               "%s\n"
                "SELECT \n"
                "        coalesce(function_type_keyword, '') AS category,\n"
                "        s.name AS schema,\n"
@@ -1327,12 +1350,14 @@ dump_function_comment(Mapi mid, stream *
                "        CASE RANK() OVER (PARTITION BY f.id ORDER BY p.number 
DESC) WHEN 1 THEN c.remark ELSE NULL END AS remark,\n"
                "        ROW_NUMBER() OVER (ORDER BY f.id, p.number) AS line\n"
                "FROM sys.functions f\n"
-               "JOIN sys.comments c ON f.id = c.id\n"
+               "JOIN comments c ON f.id = c.id\n"
                "JOIN sys.schemas s ON f.schema_id = s.id\n"
                "LEFT OUTER JOIN sys.function_types ft ON f.type = 
ft.function_type_id\n"
                "LEFT OUTER JOIN sys.args p ON f.id = p.func_id AND p.inout = 
1\n"
                "WHERE f.id = %s\n"
-               "ORDER BY line;", id);
+               "ORDER BY line;",
+               get_compat_clause(mid),
+               id);
 
        hashge = has_hugeint(mid);
        hdl = mapi_query(mid, query);
@@ -1394,18 +1419,26 @@ static int
 dump_function(Mapi mid, stream *toConsole, const char *fid, int hashge)
 {
        MapiHdl hdl;
-       size_t qlen = 400 + strlen(fid);
+       size_t qlen = 5120 + strlen(fid);
        char *query = malloc(qlen);
+       char *q, *end_q;
        const char *sep;
-       char *ffunc, *flkey;
+       char *ffunc = NULL, *flkey = NULL;
        const char *sname, *fname, *ftkey;
        int flang, ftype;
 
        if (!query)
                return 1;
 
-       snprintf(query, qlen, "SELECT f.id, f.func, f.language, f.type, s.name, 
f.name, ft.function_type_keyword, fl.language_keyword FROM sys.functions f JOIN 
sys.schemas s ON f.schema_id = s.id JOIN sys.function_types ft ON f.type = 
ft.function_type_id LEFT OUTER JOIN sys.function_languages fl ON f.language = 
fl.language_id WHERE f.id = %s", fid);
-       hdl = mapi_query(mid, query);
+       q = query;
+       end_q = query + qlen;
+       q += snprintf(q, q - end_q, "%s\n", get_compat_clause(mid));
+       q += snprintf(q, q - end_q, "SELECT f.id, f.func, f.language, f.type, 
s.name, f.name, function_type_keyword, language_keyword FROM sys.functions f 
JOIN sys.schemas s ON f.schema_id = s.id JOIN function_types ft ON f.type = 
ft.function_type_id LEFT OUTER JOIN function_languages fl ON f.language = 
fl.language_id WHERE f.id = %s;", fid);
+       if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) {
+               free(query);
+               return 1;
+       }
+
        if (mapi_fetch_row(hdl) == 0) {
                free(query);
                mapi_close_handle(hdl);
@@ -1444,8 +1477,12 @@ dump_function(Mapi mid, stream *toConsol
        mnstr_printf(toConsole, "(");
        snprintf(query, qlen, "SELECT a.name, a.type, a.type_digits, 
a.type_scale, a.inout FROM sys.args a, sys.functions f WHERE a.func_id = f.id 
AND f.id = %s ORDER BY a.inout DESC, a.number", fid);
        mapi_close_handle(hdl);
-       hdl = mapi_query(mid, query);
-       free(query);
+       if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) {
+               free(query);
+               free(ffunc);
+               free(flkey);
+               return 1;
+       }
        sep = "";
        while (mapi_fetch_row(hdl) != 0) {
                const char *aname = mapi_fetch_field(hdl, 0);
@@ -1492,6 +1529,7 @@ dump_function(Mapi mid, stream *toConsol
        }
        mnstr_printf(toConsole, "\n%s\n", ffunc);
        free(ffunc);
+       free(query);
        return 0;
 }
 
@@ -1529,7 +1567,7 @@ dump_functions(Mapi mid, stream *toConso
                wantSystem = 0;
        }
 
-       len = 500 + (sname ? strlen(sname) : 0) + (fname ? strlen(fname) : 0);
+       len = 5120 + (sname ? strlen(sname) : 0) + (fname ? strlen(fname) : 0);
        query = malloc(len);
        if (query == NULL) {
                if (to_free)
@@ -1537,13 +1575,14 @@ dump_functions(Mapi mid, stream *toConso
                return 1;
        }
        q = query;
-       end_q = q + len;
+       end_q = query + len;
 
+       q += snprintf(q, end_q - q, "%s\n", get_compat_clause(mid));
        q += snprintf(q, end_q - q,
                "SELECT s.id, s.name, f.id, LENGTH(rem.remark) AS remark_len "
                "FROM sys.schemas s "
                "JOIN sys.functions f ON s.id = f.schema_id "
-               "LEFT OUTER JOIN sys.comments rem ON f.id = rem.id "
+               "LEFT OUTER JOIN comments rem ON f.id = rem.id "
                "WHERE f.language > 0 ");
        if (sname)
                q += snprintf(q, end_q - q, "AND s.name = '%s' ", sname);
@@ -1694,34 +1733,15 @@ dump_database(Mapi mid, stream *toConsol
                "ORDER BY s.name, f.name, a.name, g.name, p.grantable";
        const char *schemas =
                "SELECT s.name, a.name, rem.remark "
-               "FROM sys.schemas s LEFT OUTER JOIN sys.comments rem ON s.id = 
rem.id, "
+               "FROM sys.schemas s LEFT OUTER JOIN comments rem ON s.id = 
rem.id, "
                     "sys.auths a "
                "WHERE s.\"authorization\" = a.id AND "
                      "s.system = FALSE "
                "ORDER BY s.name";
-       /* alternative, but then need to handle NULL in second column:
-          SELECT "s"."name", "a"."name"
-          FROM "sys"."schemas" "s"
-               LEFT OUTER JOIN "sys"."auths" "a"
-                    ON "s"."authorization" = "a"."id" AND
-                       "s"."system" = FALSE
-          ORDER BY "s"."name"
-
-          This may be needed after a sequence:
-
-          CREATE USER "voc" WITH PASSWORD 'voc' NAME 'xxx' SCHEMA "sys";
-          CREATE SCHEMA "voc" AUTHORIZATION "voc";
-          ALTER USER "voc" SET SCHEMA "voc";
-          DROP USER "voc";
-
-          In this case, the authorization value for voc in the
-          schemas table has no corresponding value in the auths table
-          anymore.
-        */
        const char *sequences1 =
                "SELECT sch.name,seq.name, rem.remark "
                "FROM sys.schemas sch, "
-                    "sys.sequences seq LEFT OUTER JOIN sys.comments rem ON 
seq.id = rem.id "
+                    "sys.sequences seq LEFT OUTER JOIN comments rem ON seq.id 
= rem.id "
                "WHERE sch.id = seq.schema_id "
                "ORDER BY sch.name,seq.name";
        const char *sequences2 =
@@ -1751,14 +1771,14 @@ dump_database(Mapi mid, stream *toConsol
        /* we must dump views, functions and triggers in order of
         * creation since they can refer to each other */
        const char *views_functions_triggers =
-               "WITH vft (sname, name, id, query, remark) AS ("
+               ", vft (sname, name, id, query, remark) AS ("
                        "SELECT s.name AS sname, "
                               "t.name AS name, "
                               "t.id AS id, "
                               "t.query AS query, "
                               "rem.remark AS remark "
                        "FROM sys.schemas s, "
-                            "sys._tables t LEFT OUTER JOIN sys.comments rem ON 
t.id = rem.id "
+                            "sys._tables t LEFT OUTER JOIN comments rem ON 
t.id = rem.id "
                        "WHERE t.type = 1 AND "
                              "t.system = FALSE AND "
                              "s.id = t.schema_id AND "
@@ -1788,9 +1808,17 @@ dump_database(Mapi mid, stream *toConsol
                "SELECT id, sname, name, query, remark FROM vft ORDER BY id";
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to