Changeset: 8be67e23a1da for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8be67e23a1da
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/SQL-dump.stable.out
        clients/Tests/SQL-dump.stable.out.int128
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.mal
        sql/include/sql_catalog.h
        sql/include/sql_relation.h
        sql/scripts/09_like.sql
        sql/scripts/10_math.sql
        sql/scripts/11_times.sql
        sql/scripts/13_date.sql
        sql/scripts/17_temporal.sql
        sql/scripts/23_skyserver.sql
        sql/scripts/24_zorder.sql
        sql/scripts/27_rejects.sql
        sql/scripts/41_md5sum.sql
        sql/server/rel_optimizer.c
        sql/server/rel_psm.c
        sql/server/rel_psm.h
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_semantic.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_privileges.h
        sql/storage/sql_catalog.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        
sql/test/BugDay_2005-11-09_2.9.3/Tests/schema_change_grant_crash.SF-963620.stable.err
        sql/test/BugTracker-2010/Tests/crashonschema.Bug-2547.stable.err
        
sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.err
        sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out
        sql/test/Users/Tests/dropManyUsers.Bug-3764.stable.out
        sql/test/Users/privs2.sql
        sql/test/json/Tests/parsing.sql
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5.stable.out.int128
        sql/test/pg_regress/Tests/drop.stable.err
Branch: default
Log Message:

Added support for Grant/Revoke EXECUTE on FUNCTION x (.. ) to ..

Added support for drop type.


diffs (truncated from 2729 to 300 lines):

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
@@ -40092,6 +40092,10 @@ pattern sql.clear_table(sname:str,tname:
 address mvc_clear_table_wrap;
 comment Clear table
 
+pattern sql.catalog(type:int,sname:str,tname:str,impl:str):void 
+address SQLcatalog;
+comment a create type catalog statement
+
 pattern 
sql.catalog(type:int,msname:str,mtname:str,psname:str,ptname:str,action:int):void
 
 address SQLcatalog;
 comment a alter table add/del table catalog statement
@@ -40104,6 +40108,10 @@ pattern sql.catalog(type:int,iname:str,i
 address SQLcatalog;
 comment a create index catalog statement
 
+pattern 
sql.catalog(type:int,sname:str,func:int,grantee:str,privs:int,grant:int,grantor:int):void
 
+address SQLcatalog;
+comment a grant/revoke function privileges statement
+
 pattern 
sql.catalog(type:int,sname:str,tname:str,grantee:str,privs:int,cname:str,grant:int,grantor:int):void
 
 address SQLcatalog;
 comment a grant/revoke privileges 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
@@ -50951,6 +50951,10 @@ pattern sql.clear_table(sname:str,tname:
 address mvc_clear_table_wrap;
 comment Clear table
 
+pattern sql.catalog(type:int,sname:str,tname:str,impl:str):void 
+address SQLcatalog;
+comment a create type catalog statement
+
 pattern 
sql.catalog(type:int,msname:str,mtname:str,psname:str,ptname:str,action:int):void
 
 address SQLcatalog;
 comment a alter table add/del table catalog statement
@@ -50963,6 +50967,10 @@ pattern sql.catalog(type:int,iname:str,i
 address SQLcatalog;
 comment a create index catalog statement
 
+pattern 
sql.catalog(type:int,sname:str,func:int,grantee:str,privs:int,grant:int,grantor:int):void
 
+address SQLcatalog;
+comment a grant/revoke function privileges statement
+
 pattern 
sql.catalog(type:int,sname:str,tname:str,grantee:str,privs:int,cname:str,grant:int,grantor:int):void
 
 address SQLcatalog;
 comment a grant/revoke privileges statement
diff --git a/clients/Tests/SQL-dump.stable.out 
b/clients/Tests/SQL-dump.stable.out
--- a/clients/Tests/SQL-dump.stable.out
+++ b/clients/Tests/SQL-dump.stable.out
@@ -7420,7 +7420,7 @@ CREATE TABLE "sys"."privileges" (
        "grantor"    INTEGER,
        "grantable"  INTEGER
 );
-COPY 19 RECORDS INTO "sys"."privileges" FROM stdin USING DELIMITERS 
'\t','\n','"';
+COPY 46 RECORDS INTO "sys"."privileges" FROM stdin USING DELIMITERS 
'\t','\n','"';
 2001   1       1       0       0
 2007   1       1       0       0
 2016   1       1       0       0
diff --git a/clients/Tests/SQL-dump.stable.out.int128 
b/clients/Tests/SQL-dump.stable.out.int128
--- a/clients/Tests/SQL-dump.stable.out.int128
+++ b/clients/Tests/SQL-dump.stable.out.int128
@@ -6261,13 +6261,42 @@ CREATE TABLE "sys"."dependencies" (
        "depend_id"   INTEGER,
        "depend_type" SMALLINT
 );
-COPY 238 RECORDS INTO "sys"."dependencies" FROM stdin USING DELIMITERS 
'\t','\n','"';
+COPY 328 RECORDS INTO "sys"."dependencies" FROM stdin USING DELIMITERS 
'\t','\n','"';
 432    5755    7
 431    5755    7
 1037   5755    7
 432    5759    7
 431    5759    7
 1037   5759    7
+5764   5766    15
+5764   5770    15
+5764   5774    15
+5764   5778    15
+5764   5782    15
+5764   5786    15
+5764   5790    15
+5764   5794    15
+5764   5798    15
+5764   5802    15
+5764   5806    15
+5764   5810    15
+5764   5814    15
+5764   5818    15
+5764   5822    15
+5764   5829    15
+5864   5866    15
+5864   5870    15
+5864   5874    15
+5864   5878    15
+5864   5883    15
+5864   5887    15
+5864   5891    15
+5864   5895    15
+5864   5899    15
+5864   5903    15
+5864   5908    15
+5864   5913    15
+5864   5918    15
 5923   5952    5
 5933   5963    5
 5923   5981    5
@@ -6422,6 +6451,67 @@ 6225     6233    5
 6235   6241    5
 6267   6285    5
 6305   6315    5
+6652   6656    15
+6654   6656    15
+6654   6660    15
+6652   6665    15
+6642   6670    15
+6644   6675    15
+6646   6680    15
+6647   6685    15
+6649   6690    15
+6651   6695    15
+6651   6700    15
+6646   6705    15
+6652   6710    15
+6652   6714    15
+6652   6718    15
+6642   6722    15
+6652   6727    15
+6652   6731    15
+6652   6735    15
+6652   6739    15
+6652   6743    15
+6652   6747    15
+6652   6751    15
+6652   6755    15
+6652   6760    15
+6652   6765    15
+6652   6770    15
+6652   6775    15
+6652   6780    15
+6652   6785    15
+6652   6790    15
+6652   6796    15
+6652   6801    15
+6652   6807    15
+6652   6811    15
+6652   6815    15
+6652   6820    15
+6652   6825    15
+6652   6829    15
+6652   6834    15
+6652   6839    15
+6652   6844    15
+6849   6851    15
+6849   6856    15
+6849   6861    15
+6849   6866    15
+6849   6871    15
+6849   6876    15
+6849   6880    15
+6849   6896    15
+6849   6900    15
+6849   6904    15
+6849   6908    15
+6849   6912    15
+6849   6916    15
+6849   6920    15
+6849   6932    15
+6849   6944    15
+6952   6954    15
+6952   6957    15
+6952   6961    15
 6985   6987    10
 6985   6986    4
 6990   6992    10
@@ -8151,7 +8241,7 @@ CREATE TABLE "sys"."privileges" (
        "grantor"    INTEGER,
        "grantable"  INTEGER
 );
-COPY 19 RECORDS INTO "sys"."privileges" FROM stdin USING DELIMITERS 
'\t','\n','"';
+COPY 46 RECORDS INTO "sys"."privileges" FROM stdin USING DELIMITERS 
'\t','\n','"';
 2001   1       1       0       0
 2007   1       1       0       0
 2016   1       1       0       0
@@ -8170,6 +8260,33 @@ 5697     1       1       0       0
 5723   1       1       0       0
 5726   1       1       0       0
 5730   1       1       0       0
+5737   1       16      3       0
+5742   1       16      3       0
+5747   1       16      3       0
+5751   1       16      3       0
+5755   1       16      3       0
+5759   1       16      3       0
+5763   1       16      3       0
+5835   1       16      3       0
+5840   1       16      3       0
+5845   1       16      3       0
+5850   1       16      3       0
+5855   1       16      3       0
+5860   1       16      3       0
+6022   1       16      3       0
+6026   1       16      3       0
+6030   1       16      3       0
+6034   1       16      3       0
+6172   1       16      3       0
+6179   1       16      3       0
+6184   1       16      3       0
+6190   1       16      3       0
+6196   1       16      3       0
+6201   1       16      3       0
+6206   1       16      3       0
+6210   1       16      3       0
+6305   1       16      3       0
+6949   1       16      3       0
 7413   1       1       3       0
 COMMIT;
 START TRANSACTION;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -855,11 +855,28 @@ create_func(mvc *sql, char *sname, sql_f
                if (r)
                        r = rel_optimizer(sql, r);
                if (r) {
+                       node *n;
                        stmt *sb = rel_bin(sql, r);
                        list *id_col_l = stmt_list_dependencies(sql->sa, sb, 
COLUMN_DEPENDENCY);
                        list *id_func_l = stmt_list_dependencies(sql->sa, sb, 
FUNC_DEPENDENCY);
                        list *view_id_l = stmt_list_dependencies(sql->sa, sb, 
VIEW_DEPENDENCY);
 
+                       if (!f->vararg && f->ops) {
+                               for (n = f->ops->h; n; n = n->next) {
+                                       sql_arg *a = n->data;
+
+                                       if (a->type.type->s) 
+                                               mvc_create_dependency(sql, 
a->type.type->base.id, nf->base.id, TYPE_DEPENDENCY);
+                               }
+                       }
+                       if (!f->varres && f->res) {
+                               for (n = f->res->h; n; n = n->next) {
+                                       sql_arg *a = n->data;
+
+                                       if (a->type.type->s) 
+                                               mvc_create_dependency(sql, 
a->type.type->base.id, nf->base.id, TYPE_DEPENDENCY);
+                               }
+                       }
                        mvc_create_dependencies(sql, id_col_l, nf->base.id, 
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY);
                        mvc_create_dependencies(sql, id_func_l, nf->base.id, 
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY);
                        mvc_create_dependencies(sql, view_id_l, nf->base.id, 
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY);
@@ -1246,13 +1263,30 @@ SQLcatalog(Client cntxt, MalBlkPtr mb, M
                break;
        }
        case DDL_CREATE_TYPE:{
-               char *impl = *getArgReference_str(stk, pci, 3);
-               if (!mvc_create_type(sql, sql->session->schema, sname, 0, 0, 0, 
impl))
+               char *name = *getArgReference_str(stk, pci, 3);
+               char *impl = *getArgReference_str(stk, pci, 4);
+               sql_schema *s = mvc_bind_schema(sql, sname);
+
+               if (!mvc_schema_privs(sql, sql->session->schema)) 
+                       msg = sql_message("0D000!CREATE TYPE: not enough 
privileges to create type '%s'", sname);
+               if (!mvc_create_type(sql, s, name, 0, 0, 0, impl))
                        msg = sql_message("0D000!CREATE TYPE: unknown external 
type '%s'", impl);
                break;
        }
        case DDL_DROP_TYPE:{
-               msg = sql_message("0A000!DROP TYPE: not implemented ('%s')", 
sname);
+               char *name = *getArgReference_str(stk, pci, 3);
+               int drop_action = *getArgReference_int(stk, pci, 4);
+               sql_schema *s = mvc_bind_schema(sql, sname);
+               sql_type *t = schema_bind_type( sql, s, name);
+
+               if (!t)
+                       msg = sql_message("0D000!DROP TYPE: type '%s' does not 
exist", sname);
+               else if (!mvc_schema_privs(sql, sql->session->schema)) 
+                       msg = sql_message("0D000!DROP TYPE: not enough 
privileges to drop type '%s'", sname);
+               else if (!drop_action && mvc_check_dependency(sql, t->base.id, 
TYPE_DEPENDENCY, NULL))
+                       return sql_message("42000!DROP TYPE: unable to drop 
type %s (there are database objects which depend on it)\n", sname);
+               else if (!mvc_drop_type(sql, sql->session->schema, t, 
drop_action))
+                       msg = sql_message("0D000!DROP TYPE: failed to drop type 
'%s'", sname);
                break;
        }
        case DDL_GRANT_ROLES:{
@@ -1297,6 +1331,24 @@ SQLcatalog(Client cntxt, MalBlkPtr mb, M
                        msg = sql_revoke_table_privs(sql, grantee, privs, 
sname, tname, cname, grant, grantor);
                break;
        }
+       case DDL_GRANT_FUNC:{
+               int func_id = *getArgReference_int(stk, pci, 3);
+               char *grantee = *getArgReference_str(stk, pci, 4);
+               int privs = *getArgReference_int(stk, pci, 5);
+               int grant = *getArgReference_int(stk, pci, 6);
+               int grantor = *getArgReference_int(stk, pci, 7);
+               msg = sql_grant_func_privs(sql, grantee, privs, sname, func_id, 
grant, grantor);
+               break;
+       }
+       case DDL_REVOKE_FUNC:{
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to