Changeset: dd3363bd8503 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd3363bd8503
Modified Files:
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        monetdb5/modules/mal/pcre.c
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/51_sys_schema_extension.sql
        sql/server/sql_parser.y
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
        sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
        sql/test/emptydb/Tests/check.SQL.py
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: default
Log Message:

Merge with Mar2018 branch.


diffs (truncated from 2433 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
@@ -817,8 +817,17 @@ describe_table(Mapi mid, const char *sch
                remark = NULL;
                goto bailout;
        }
-       if (view)
+       if (view) {
+               /* skip initial comments and empty lines */
+               while ((view[0] == '-' && view[1] == '-') || view[0] == '\n') {
+                       view = strchr(view, '\n');
+                       if (view == NULL)
+                               view = "";
+                       else
+                               view++;
+               }
                view = strdup(view);
+       }
        if (remark)
                remark = strdup(remark);
        mapi_close_handle(hdl);
@@ -1384,17 +1393,17 @@ static int
 dump_function(Mapi mid, stream *toConsole, const char *fid, int hashge)
 {
        MapiHdl hdl;
-       size_t qlen = 200 + strlen(fid);
+       size_t qlen = 400 + strlen(fid);
        char *query = malloc(qlen);
        const char *sep;
-       char *ffunc;
-       const char *sname, *fname;
+       char *ffunc, *flkey;
+       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 FROM sys.functions f, sys.schemas s WHERE f.schema_id = s.id AND f.id = 
%s", fid);
+       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);
        if (mapi_fetch_row(hdl) == 0) {
                free(query);
@@ -1406,40 +1415,28 @@ dump_function(Mapi mid, stream *toConsol
        ftype = atoi(mapi_fetch_field(hdl, 3));
        sname = mapi_fetch_field(hdl, 4);
        fname = mapi_fetch_field(hdl, 5);
+       ftkey = mapi_fetch_field(hdl, 6);
+       flkey = mapi_fetch_field(hdl, 7);
        if (flang == 1 || flang == 2) {
-               /* all information is stored in the func column */
+               /* all information is stored in the func column
+                * first skip initial comments and empty lines */
+               while ((ffunc[0] == '-' && ffunc[1] == '-') || ffunc[0] == 
'\n') {
+                       ffunc = strchr(ffunc, '\n');
+                       if (ffunc == NULL)
+                               ffunc = "";
+                       else
+                               ffunc++;
+               }
                mnstr_printf(toConsole, "%s\n", ffunc);
                mapi_close_handle(hdl);
                free(query);
                return 0;
        }
-       mnstr_printf(toConsole, "CREATE ");
-       switch (ftype) {
-       case 1:                 /* scalar function */
-       case 5:                 /* table returning function */
-               mnstr_printf(toConsole, "FUNCTION");
-               break;
-       case 2:
-               mnstr_printf(toConsole, "PROCEDURE");
-               break;
-       case 3:
-               mnstr_printf(toConsole, "AGGREGATE");
-               break;
-       case 4:
-               mnstr_printf(toConsole, "FILTER FUNCTION");
-               break;
-       case 7:
-               mnstr_printf(toConsole, "LOADER");
-               break;
-       default:
-               /* shouldn't happen (6 is F_ANALYTIC, but no syntax to
-                * create, or values are not defined) */
-               free(query);
-               mapi_close_handle(hdl);
-               return -1;
-       }
+       /* strdup these two because they are needed after another query */
        ffunc = strdup(ffunc);
-       mnstr_printf(toConsole, " ");
+       if (flkey)
+               flkey = strdup(flkey);
+       mnstr_printf(toConsole, "CREATE %s ", ftkey);
        quoted_print(toConsole, sname, false);
        mnstr_printf(toConsole, ".");
        quoted_print(toConsole, fname, false);
@@ -1488,38 +1485,9 @@ dump_function(Mapi mid, stream *toConsol
                } while (mapi_fetch_row(hdl) != 0);
        }
        mapi_close_handle(hdl);
-       mnstr_printf(toConsole, " LANGUAGE ");
-       switch (flang) {
-       case 3:
-               mnstr_printf(toConsole, "R");
-               break;
-       case 4:
-               mnstr_printf(toConsole, "C");
-               break;
-       case 5:
-               mnstr_printf(toConsole, "J");
-               break;
-       case 6:
-               mnstr_printf(toConsole, "PYTHON");
-               break;
-       case 7:
-               mnstr_printf(toConsole, "PYTHON_MAP");
-               break;
-       case 8:
-               mnstr_printf(toConsole, "PYTHON2");
-               break;
-       case 9:
-               mnstr_printf(toConsole, "PYTHON2_MAP");
-               break;
-       case 10:
-               mnstr_printf(toConsole, "PYTHON3");
-               break;
-       case 11:
-               mnstr_printf(toConsole, "PYTHON3_MAP");
-               break;
-       default:                /* unknown language */
-               free(ffunc);
-               return -1;
+       if (flkey) {
+               mnstr_printf(toConsole, " LANGUAGE %s", flkey);
+               free(flkey);
        }
        mnstr_printf(toConsole, "\n%s\n", ffunc);
        free(ffunc);
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2543,12 +2543,12 @@ doFile(Mapi mid, stream *fp, bool useins
                                                        "WITH 
describe_all_objects AS (\n"
                                                        "  SELECT s.name AS 
sname,\n"
                                                        "      t.name,\n"
-                                                       "      s.name || \'.\' 
|| t.name AS fullname,\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"
+                                                       "      (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"
@@ -2558,9 +2558,9 @@ doFile(Mapi mid, stream *fp, bool useins
                                                        "  UNION ALL\n"
                                                        "  SELECT s.name AS 
sname,\n"
                                                        "      sq.name,\n"
-                                                       "      s.name || \'.\' 
|| sq.name AS fullname,\n"
+                                                       "      s.name || '.' || 
sq.name AS fullname,\n"
                                                        "      CAST(4 AS 
SMALLINT) AS ntype,\n"
-                                                       "      \'SEQUENCE\' AS 
type,\n"
+                                                       "      'SEQUENCE' AS 
type,\n"
                                                        "      false AS 
system,\n"
                                                        "      c.remark AS 
remark\n"
                                                        "    FROM sys.sequences 
sq\n"
@@ -2569,9 +2569,9 @@ doFile(Mapi mid, stream *fp, bool useins
                                                        "  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"
+                                                       "      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) || 
function_type_keyword AS type,\n"
+                                                       "      (CASE WHEN 
sf.function_id IS NOT NULL THEN 'SYSTEM ' ELSE '' END) || function_type_keyword 
AS type,\n"
                                                        "      sf.function_id 
IS NOT NULL AS system,\n"
                                                        "      c.remark AS 
remark\n"
                                                        "    FROM sys.functions 
f\n"
@@ -2584,7 +2584,7 @@ doFile(Mapi mid, stream *fp, bool useins
                                                        "      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"
+                                                       "      (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"
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -630,7 +630,7 @@ single_replace(pcre *pcre_code, pcre_ext
                                        len = 0;
                                } else {
                                        off = ovector[backrefs[i].idx * 2];
-                                       len = ovector[backrefs[i].idx * 2 + 1] 
- ovector[backrefs[i].idx * 2];
+                                       len = ovector[backrefs[i].idx * 2 + 1] 
- off;
                                }
                                addlen = backrefs[i].start - prevend + len;
                                if (len_result + addlen >= *max_result) {
@@ -649,7 +649,7 @@ single_replace(pcre *pcre_code, pcre_ext
                                }
                                if (len > 0) {
                                        strncpy(result + len_result, origin_str 
+ off, len);
-                                       len_result += off;
+                                       len_result += len;
                                }
                                prevend = backrefs[i].end;
                        }
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
@@ -277,6 +277,7 @@ sql_update_hugeint(Client c, mvc *sql)
 
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
        assert(pos < bufsize);
 
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -326,6 +327,7 @@ sql_update_geom(Client c, mvc *sql, int 
 
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
 
        assert(pos < bufsize);
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -543,6 +545,7 @@ sql_update_dec2016(Client c, mvc *sql)
 
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
 
        assert(pos < bufsize);
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -591,6 +594,7 @@ sql_update_dec2016_sp2(Client c, mvc *sq
 
                        if (schema)
                                pos += snprintf(buf + pos, bufsize - pos, "set 
schema \"%s\";\n", schema);
+                       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
 
                        assert(pos < bufsize);
                        printf("Running database upgrade commands:\n%s\n", buf);
@@ -624,6 +628,7 @@ sql_update_dec2016_sp3(Client c, mvc *sq
                        "delete from systemfunctions where function_id not in 
(select id from functions);\n");
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
        assert(pos < bufsize);
 
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -742,6 +747,7 @@ sql_update_jul2017(Client c, mvc *sql)
 
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
 
        assert(pos < bufsize);
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -786,6 +792,7 @@ sql_update_jul2017_sp2(Client c)
                                "GRANT EXECUTE ON FUNCTION sys.environment() TO 
PUBLIC;\n"
                                "GRANT SELECT ON sys.environment TO PUBLIC;\n"
                                );
+                       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
                        assert(pos < bufsize);
                        printf("Running database upgrade commands:\n%s\n", buf);
                        err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL);
@@ -838,6 +845,7 @@ sql_update_jul2017_sp3(Client c, mvc *sq
                        "create trigger system_update_tables after update on 
sys._tables for each statement call sys_update_tables();\n");
                if (schema)
                        pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+               pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
                assert(pos < bufsize);
                printf("Running database upgrade commands:\n%s\n", buf);
                err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL);
@@ -879,6 +887,7 @@ sql_update_mar2018_geom(Client c, mvc *s
 
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
 
        assert(pos < bufsize);
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -1271,6 +1280,34 @@ sql_update_mar2018(Client c, mvc *sql)
                        "SET system = TRUE "
                        "WHERE name = 'privilege_codes' "
                        "AND schema_id = (SELECT id FROM sys.schemas WHERE name 
= 'sys');\n"
+                       "ALTER TABLE sys.keywords SET READ WRITE;\n"
+                       "INSERT INTO sys.keywords VALUES ('COMMENT'), 
('CONTINUE'), ('START'), ('TRUNCATE');\n"
+                       "ALTER TABLE sys.function_types SET READ WRITE;\n"
+                       "ALTER TABLE function_types ADD COLUMN 
function_type_keyword VARCHAR(30);\n"
+                       "UPDATE sys.function_types SET function_type_keyword 
=\n"
+                       "    (SELECT kw FROM (VALUES\n"
+                       "        (1, 'FUNCTION'),\n"
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to