Changeset: b4c1102176a4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b4c1102176a4
Modified Files:
        clients/mapiclient/dump.c
        sql/test/testdb/Tests/dump.stable.out
        sql/test/testdb/Tests/load.test
Branch: Jan2022
Log Message:

Implemented dumping of global grants (i.e. COPY INTO and COPY FROM).


diffs (71 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -2614,6 +2614,19 @@ dump_database(Mapi mid, stream *toConsol
                  "AND NOT f.system "
                  "AND p.grantable = go.id "
                "ORDER BY s.name, f.name, a.name, g.name, p.grantable";
+       const char *global_grants =
+               "SELECT a.name, pc.grnt, g.name, go.opt "
+               "FROM sys.privileges p, "
+                    "sys.auths a, "
+                    "sys.auths g, "
+                    "(VALUES (0, 'COPY INTO'), (1, 'COPY FROM')) AS pc (id, 
grnt), "
+                    "(VALUES (0, ''), (1, ' WITH GRANT OPTION')) AS go (id, 
opt) "
+               "WHERE p.obj_id = 0 "
+                 "AND p.auth_id = a.id "
+                 "AND p.grantor = g.id "
+                 "AND p.privileges = pc.id "
+                 "AND p.grantable = go.id "
+               "ORDER BY a.name, g.name, go.opt";
        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, "
@@ -2856,6 +2869,23 @@ dump_database(Mapi mid, stream *toConsol
                if (mapi_error(mid))
                        goto bailout;
                mapi_close_handle(hdl);
+
+               /* grant global privileges */
+               if ((hdl = mapi_query(mid, global_grants)) == NULL || 
mapi_error(mid))
+                       goto bailout;
+
+               while (mapi_fetch_row(hdl) != 0) {
+                       const char *uname = mapi_fetch_field(hdl, 0);
+                       const char *grant = mapi_fetch_field(hdl, 1);
+                       //const char *gname = mapi_fetch_field(hdl, 2);
+                       const char *grantable = mapi_fetch_field(hdl, 3);
+                       mnstr_printf(toConsole, "GRANT %s TO ", grant);
+                       dquoted_print(toConsole, uname, grantable);
+                       mnstr_printf(toConsole, ";\n");
+               }
+               if (mapi_error(mid))
+                       goto bailout;
+               mapi_close_handle(hdl);
        } else {
                mnstr_printf(toConsole, "SET SCHEMA ");
                dquoted_print(toConsole, sname, ";\n");
diff --git a/sql/test/testdb/Tests/dump.stable.out 
b/sql/test/testdb/Tests/dump.stable.out
--- a/sql/test/testdb/Tests/dump.stable.out
+++ b/sql/test/testdb/Tests/dump.stable.out
@@ -3,6 +3,7 @@ CREATE USER "testuser" WITH ENCRYPTED PA
 CREATE SCHEMA "testschema" AUTHORIZATION "testuser";
 COMMENT ON SCHEMA "testschema" IS 'a schema used for testing';
 ALTER USER "testuser" SET SCHEMA "testschema";
+GRANT COPY FROM TO "testuser";
 CREATE SEQUENCE "testschema"."selfref_seq" AS INTEGER;
 COMMENT ON SEQUENCE "testschema"."selfref_seq" IS 'sequence number for selfref 
table';
 CREATE SEQUENCE "testschema"."test_seq" AS INTEGER;
diff --git a/sql/test/testdb/Tests/load.test b/sql/test/testdb/Tests/load.test
--- a/sql/test/testdb/Tests/load.test
+++ b/sql/test/testdb/Tests/load.test
@@ -14,6 +14,9 @@ statement ok
 ALTER USER "testuser" SET SCHEMA "testschema"
 
 statement ok
+GRANT COPY FROM TO testuser
+
+statement ok
 SET SCHEMA "testschema"
 
 statement ok
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to