Changeset: c13a71261676 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c13a71261676
Added Files:
        
sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
        
sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.out
        sql/test/BugTracker-2015/Tests/quantile_function_resolution.Bug-3773.sql
        
sql/test/BugTracker-2015/Tests/quantile_function_resolution.Bug-3773.stable.err
        
sql/test/BugTracker-2015/Tests/quantile_function_resolution.Bug-3773.stable.out
        sql/test/Users/Tests/util.py
Modified Files:
        Makefile.ag
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        clients/mapiclient/msqldump.h
        clients/odbc/driver/SQLTables.c
        monetdb5/modules/kernel/mmath.c
        monetdb5/modules/mal/tablet.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.mal
        sql/common/sql_types.c
        sql/common/sql_types.h
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_privileges.h
        sql/test/BugTracker-2015/Tests/All
        
sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.sql
        
sql/test/BugTracker-2015/Tests/create-temp-table-using-like.Bug-3767.stable.err
        
sql/test/BugTracker-2015/Tests/create-temp-table-using-like.Bug-3767.stable.out
        sql/test/BugTracker-2015/Tests/schema_view2.Bug-3766.stable.err
        sql/test/BugTracker-2015/Tests/schema_view2.Bug-3766.stable.out
        sql/test/UserDump/Tests/create.stable.out
        sql/test/Users/Tests/changePasswordUser.SQL.py
        sql/test/Users/Tests/changeSchemaUser.SQL.py
        sql/test/Users/Tests/dropManyUsers.Bug-3764.SQL.py
        sql/test/Users/Tests/grantMonetdbToRegularUser.Bug-3771.SQL.py
        sql/test/Users/Tests/grantMonetdbToSchemaOwner.Bug-3771.SQL.py
        sql/test/Users/Tests/grantRevokeAndGrantAgain.Bug-3765.SQL.py
        sql/test/Users/Tests/grantRole.Bug-3772.SQL.py
        sql/test/Users/Tests/renameUser.SQL.py
        sql/test/Users/Tests/role.SQL.py
        sql/test/quantiles/Tests/quantiles.stable.err
        sql/test/quantiles/Tests/quantiles.stable.out
        sql/test/testdb-upgrade-chain/Tests/dump.stable.out
        sql/test/testdb-upgrade-chain/Tests/dump.stable.out.Windows
        sql/test/testdb-upgrade/Tests/dump.stable.out
        sql/test/testdb-upgrade/Tests/dump.stable.out.Windows
        sql/test/testdb/Tests/testdb-dump.stable.out
        sql/test/testdb/Tests/testdb-dump.stable.out.Windows
        sql/test/testdb/Tests/testdb-load.sql
        sql/test/testdb/Tests/testdb-load.stable.out
Branch: leftmart
Log Message:

merge with default


diffs (truncated from 2919 to 300 lines):

diff --git a/Makefile.ag b/Makefile.ag
--- a/Makefile.ag
+++ b/Makefile.ag
@@ -16,7 +16,7 @@ SUBDIRS = buildtools common clients \
 EXTRA_DIST = bootstrap configure configure.ac configure.ag libversions \
                         MonetDB.spec rpm.mk.in COPYING README license.txt 
HowToStart.rst
 
-EXTRA_DIST_DIR = NT debian
+EXTRA_DIST_DIR = NT debian MacOSX
 
 headers_config = {
        DIR = includedir/monetdb
diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -40543,10 +40543,14 @@ pattern sql.catalog(type:int,user:str,pa
 address SQLcatalog;
 comment a user catalog statement
 
-pattern sql.catalog(type:int,grantee:str,role:str):void 
+pattern sql.catalog(type:int,grantee:str,role:str,grantor:int,admin:int):void 
 address SQLcatalog;
 comment a grant/revoke role statement
 
+pattern sql.catalog(type:int,sname:str,tname:str):void 
+address SQLcatalog;
+comment a catalog trigger statement
+
 pattern sql.catalog(type:int,sname:str,t:ptr,restart:lng):void 
 address SQLcatalog;
 comment a catalog statement
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -51478,10 +51478,14 @@ pattern sql.catalog(type:int,user:str,pa
 address SQLcatalog;
 comment a user catalog statement
 
-pattern sql.catalog(type:int,grantee:str,role:str):void 
+pattern sql.catalog(type:int,grantee:str,role:str,grantor:int,admin:int):void 
 address SQLcatalog;
 comment a grant/revoke role statement
 
+pattern sql.catalog(type:int,sname:str,tname:str):void 
+address SQLcatalog;
+comment a catalog trigger statement
+
 pattern sql.catalog(type:int,sname:str,t:ptr,restart:lng):void 
 address SQLcatalog;
 comment a catalog statement
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -758,6 +758,7 @@ describe_table(Mapi mid, char *schema, c
        MapiHdl hdl = NULL;
        char *query;
        char *view = NULL;
+       int type = 0;
        size_t maxquerylen;
        char *sname = NULL;
 
@@ -779,7 +780,7 @@ describe_table(Mapi mid, char *schema, c
 
        query = malloc(maxquerylen);
        snprintf(query, maxquerylen,
-                "SELECT t.name, t.query "
+                "SELECT t.name, t.query, t.type "
                 "FROM sys._tables t, sys.schemas s "
                 "WHERE s.name = '%s' AND "
                       "t.schema_id = s.id AND "
@@ -791,6 +792,9 @@ describe_table(Mapi mid, char *schema, c
        cnt = 0;
        while ((mapi_fetch_row(hdl)) != 0) {
                cnt++;
+               view = mapi_fetch_field(hdl, 2);
+               if (view)
+                       type = atoi(view);
                view = mapi_fetch_field(hdl, 1);
        }
        if (mapi_error(mid)) {
@@ -811,15 +815,23 @@ describe_table(Mapi mid, char *schema, c
                goto bailout;
        }
 
-       if (view) {
+       if (type == 1) {
                /* the table is actually a view */
                mnstr_printf(toConsole, "%s\n", view);
        } else {
                /* the table is a real table */
-               mnstr_printf(toConsole, "CREATE TABLE \"%s\".\"%s\" ", schema, 
tname);
+               mnstr_printf(toConsole, "CREATE %sTABLE \"%s\".\"%s\" ",
+                            type == 3 ? "MERGE " :
+                            type == 4 ? "STREAM " :
+                            type == 5 ? "REMOTE " :
+                            type == 6 ? "REPLICA " :
+                            "",
+                            schema, tname);
 
                if (dump_column_definition(mid, toConsole, schema, tname, NULL, 
foreign))
                        goto bailout;
+               if (type == 5)
+                       mnstr_printf(toConsole, " ON '%s'", view);
                mnstr_printf(toConsole, ";\n");
 
                snprintf(query, maxquerylen,
@@ -1043,7 +1055,7 @@ describe_schema(Mapi mid, char *sname, s
        return 0;
 }
 
-int
+static int
 dump_table_data(Mapi mid, char *schema, char *tname, stream *toConsole,
                const char useInserts)
 {
@@ -1072,7 +1084,7 @@ dump_table_data(Mapi mid, char *schema, 
        query = malloc(maxquerylen);
 
        snprintf(query, maxquerylen,
-                "SELECT t.name, t.query "
+                "SELECT t.name, t.query, t.type "
                 "FROM sys._tables t, sys.schemas s "
                 "WHERE s.name = '%s' AND "
                       "t.schema_id = s.id AND "
@@ -1089,7 +1101,7 @@ dump_table_data(Mapi mid, char *schema, 
                goto bailout;
        }
        while ((mapi_fetch_row(hdl)) != 0) {
-               if (mapi_fetch_field(hdl, 1)) {
+               if (strcmp(mapi_fetch_field(hdl, 2), "1") == 0) {
                        /* the table is actually a view */
                        goto doreturn;
                }
@@ -1113,9 +1125,9 @@ dump_table_data(Mapi mid, char *schema, 
                        }
 
                        mnstr_printf(toConsole,
-                                        "COPY %s RECORDS INTO \"%s\".\"%s\" "
-                                        "FROM stdin USING DELIMITERS 
'\\t','\\n','\"';\n",
-                                        cntfld, schema, tname);
+                                    "COPY %s RECORDS INTO \"%s\".\"%s\" "
+                                    "FROM stdin USING DELIMITERS 
'\\t','\\n','\"';\n",
+                                    cntfld, schema, tname);
                }
                mapi_close_handle(hdl);
                hdl = NULL;
@@ -1141,7 +1153,7 @@ dump_table_data(Mapi mid, char *schema, 
 
                if (useInserts)
                        mnstr_printf(toConsole, "INSERT INTO \"%s\".\"%s\" 
VALUES (",
-                                       schema, tname);
+                                    schema, tname);
 
                for (i = 0; i < cnt; i++) {
                        s = mapi_fetch_field(hdl, i);
@@ -1408,40 +1420,51 @@ dump_database(Mapi mid, stream *toConsol
                     "sys.schemas s "
                "WHERE s.id = seq.schema_id "
                "ORDER BY s.name,seq.name";
-       const char *tables_and_functions =
-               "WITH tf AS ("
+       const char *tables =
+               "SELECT s.name AS sname, "
+                      "t.name AS name, "
+                      "t.type AS type "
+               "FROM sys.schemas s, "
+                    "sys._tables t "
+               "WHERE t.type IN (0, 3, 4, 5, 6) AND "
+                     "t.system = FALSE AND "
+                     "s.id = t.schema_id AND "
+                     "s.name <> 'tmp' "
+               "ORDER BY t.id";
+       const char *mergetables = "SELECT s1.name, t1.name, s2.name, t2.name 
FROM sys.schemas s1, sys._tables t1, sys.dependencies d, sys.schemas s2, 
sys._tables t2 WHERE t1.type = 3 AND t1.schema_id = s1.id AND s1.name <> 'tmp' 
AND t1.system = FALSE AND t1.id = d.depend_id AND d.id = t2.id AND t2.schema_id 
= s2.id ORDER BY t1.id, t2.id";
+       /* 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 AS ("
                        "SELECT s.name AS sname, "
-                              "f.name AS name, "
-                              "f.id AS id, "
-                              "f.func AS func "
-                       "FROM sys.schemas s, "
-                            "sys.functions f "
-                       "WHERE f.language < 3 AND "
-                             "s.id = f.schema_id "
-                             "%s"  /* and f.id not in systemfunctions */
-                       "UNION "
-                       "SELECT s.name AS sname, "
-                              "t.name AS name, "
                               "t.id AS id, "
-                              "CAST(NULL AS VARCHAR(8196)) AS func "
+                              "t.query AS query "
                        "FROM sys.schemas s, "
                             "sys._tables t "
-                       "WHERE t.type BETWEEN 0 AND 1 AND "
+                       "WHERE t.type = 1 AND "
                              "t.system = FALSE AND "
                              "s.id = t.schema_id AND "
                              "s.name <> 'tmp' "
                        "UNION "
                        "SELECT s.name AS sname, "
-                              "tr.name AS name, "
+                              "f.id AS id, "
+                              "f.func AS query "
+                       "FROM sys.schemas s, "
+                            "sys.functions f "
+                       "WHERE f.language < 3 AND "
+                             "s.id = f.schema_id "
+                       "%s"            /* and f.id not in systemfunctions */
+                       "UNION "
+                       "SELECT s.name AS sname, "
                               "tr.id AS id, "
-                              "tr.\"statement\" AS func "
+                              "tr.\"statement\" AS query "
                        "FROM sys.triggers tr, "
                             "sys.schemas s, "
                             "sys._tables t "
                        "WHERE s.id = t.schema_id AND "
                              "t.id = tr.table_id"
                ") "
-               "SELECT * FROM tf ORDER BY tf.id";
+               "SELECT sname, query FROM vft ORDER BY id";
        char *sname;
        char *curschema = NULL;
        MapiHdl hdl;
@@ -1616,10 +1639,10 @@ dump_database(Mapi mid, stream *toConsol
        mapi_close_handle(hdl);
        hdl = NULL;
 
-       /* dump tables and functions */
-       snprintf(query, sizeof(query), tables_and_functions,
-                has_systemfunctions(mid) ? "AND f.id NOT IN (SELECT 
function_id FROM sys.systemfunctions) " : "");
-       if ((hdl = mapi_query(mid, query)) == NULL ||
+       /* dump tables, note that merge tables refer to other tables,
+        * so we make sure the contents of merge tables are added
+        * (ALTERed) after all table definitions */
+       if ((hdl = mapi_query(mid, tables)) == NULL ||
            mapi_error(mid))
                goto bailout;
 
@@ -1628,7 +1651,7 @@ dump_database(Mapi mid, stream *toConsol
               mapi_fetch_row(hdl) != 0) {
                char *schema = mapi_fetch_field(hdl, 0);
                char *tname = mapi_fetch_field(hdl, 1);
-               char *func = mapi_fetch_field(hdl, 3);
+               int type = atoi(mapi_fetch_field(hdl, 2));
 
                if (mapi_error(mid))
                        goto bailout;
@@ -1645,15 +1668,81 @@ dump_database(Mapi mid, stream *toConsol
                        mnstr_printf(toConsole, "SET SCHEMA \"%s\";\n",
                                     curschema);
                }
-               if (func == NULL) {
-                       schema = strdup(schema);
-                       tname = strdup(tname);
-                       rc = dump_table(mid, schema, tname, toConsole, 
describe, describe, useInserts);
-                       free(schema);
-                       free(tname);
-               } else
-                       mnstr_printf(toConsole, "%s\n", func);
+               schema = strdup(schema);
+               tname = strdup(tname);
+               rc = dump_table(mid, schema, tname, toConsole, type == 3 || 
type == 5 ? 1 : describe, describe, useInserts);
+               free(schema);
+               free(tname);
        }
+       mapi_close_handle(hdl);
+       hdl = NULL;
+
+       if ((hdl = mapi_query(mid, mergetables)) == NULL ||
+           mapi_error(mid))
+               goto bailout;
+
+       while (rc == 0 &&
+              !mnstr_errnr(toConsole) &&
+              mapi_fetch_row(hdl) != 0) {
+               char *schema1 = mapi_fetch_field(hdl, 0);
+               char *tname1 = mapi_fetch_field(hdl, 1);
+               char *schema2 = mapi_fetch_field(hdl, 2);
+               char *tname2 = mapi_fetch_field(hdl, 3);
+
+               if (mapi_error(mid))
+                       goto bailout;
+               if (schema1 == NULL || schema2 == NULL) {
+                       /* cannot happen, but make analysis tools happy */
+                       continue;
+               }
+               if (sname != NULL && strcmp(schema1, sname) != 0)
+                       continue;
+               if (curschema == NULL || strcmp(schema2, curschema) != 0) {
+                       if (curschema)
+                               free(curschema);
+                       curschema = strdup(schema2);
+                       mnstr_printf(toConsole, "SET SCHEMA \"%s\";\n",
+                                    curschema);
+               }
+               mnstr_printf(toConsole, "ALTER TABLE \"%s\".\"%s\" ADD TABLE 
\"%s\";\n",
+                                    schema1, tname1, tname2);
+       }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to