Changeset: ede18d770ce6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ede18d770ce6
Branch: Aug2024
Log Message:

merged with dec2023


diffs (109 lines):

diff --git a/sql/backends/monet5/sql_statistics.c 
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -128,22 +128,20 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
 
                        if (tbl && strcmp(t->base.name, tbl))
                                continue;
-                       tfnd = 1;
                        if (tbl && !isTable(t))
                                throw(SQL, "sql.analyze", SQLSTATE(42S02) "%s 
'%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
-                       if (!table_privs(m, t, PRIV_SELECT))
-                               throw(SQL, "sql.analyze", SQLSTATE(42000) 
"ANALYZE: access denied for %s to table '%s.%s'",
-                                         get_string_global_var(m, 
"current_user"), t->s->base.name, t->base.name);
                        if (isTable(t) && ol_first_node(t->columns)) {
+                               bool allowed = table_privs(m, t, PRIV_SELECT);
+                               tfnd |= allowed;
                                for (node *ncol = ol_first_node((t)->columns); 
ncol; ncol = ncol->next) {
                                        sql_column *c = (sql_column *) 
ncol->data;
 
                                        if (col && strcmp(c->base.name, col))
                                                continue;
+                                       if (!allowed && !column_privs(m, c, 
PRIV_SELECT))
+                                               continue;
                                        cfnd = 1;
-                                       if (!column_privs(m, c, PRIV_SELECT))
-                                               throw(SQL, "sql.analyze", 
SQLSTATE(42000) "ANALYZE: access denied for %s to column '%s' on table '%s.%s'",
-                                                         
get_string_global_var(m, "current_user"), c->base.name, t->s->base.name, 
t->base.name);
+                                       tfnd |= cfnd;
                                }
                        }
                }
@@ -172,8 +170,11 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                        if (tbl && strcmp(b->name, tbl))
                                continue;
                        if (isTable(t) && ol_first_node(t->columns)) {
+                               bool allowed = table_privs(m, t, PRIV_SELECT);
                                for (node *ncol = ol_first_node((t)->columns); 
ncol; ncol = ncol->next) {
                                        sql_column *c = (sql_column *) 
ncol->data;
+                                       if (!allowed && !column_privs(m, c, 
PRIV_SELECT))
+                                               continue;
                                        BAT *b, *unq;
                                        ptr mn, mx;
 
@@ -285,23 +286,21 @@ sql_statistics(Client cntxt, MalBlkPtr m
 
                        if (tname && strcmp(t->base.name, tname))
                                continue;
-                       tfnd = 1;
                        if (tname && !isTable(t))
                                throw(SQL, "sql.statistics", SQLSTATE(42S02) 
"%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
-                       if (!table_privs(m, t, PRIV_SELECT))
-                               throw(SQL, "sql.statistics", SQLSTATE(42000) 
"STATISTICS: access denied for %s to table '%s.%s'",
-                                         get_string_global_var(m, 
"current_user"), t->s->base.name, t->base.name);
                        if (isTable(t) && ol_first_node(t->columns)) {
+                               bool allowed = table_privs(m, t, PRIV_SELECT);
+                               tfnd |= allowed;
                                for (node *ncol = ol_first_node((t)->columns); 
ncol; ncol = ncol->next) {
                                        sql_column *c = (sql_column *) 
ncol->data;
 
                                        if (cname && strcmp(c->base.name, 
cname))
                                                continue;
+                                       nrows++;
+                                       if (!allowed && !column_privs(m, c, 
PRIV_SELECT))
+                                               continue;
                                        cfnd = 1;
-                                       nrows++;
-                                       if (!column_privs(m, c, PRIV_SELECT))
-                                               throw(SQL, "sql.statistics", 
SQLSTATE(42000) "STATISTICS: access denied for %s to column '%s' on table 
'%s.%s'",
-                                                         
get_string_global_var(m, "current_user"), c->base.name, t->s->base.name, 
t->base.name);
+                                       tfnd |= cfnd;
                                }
                        }
                }
@@ -347,8 +346,11 @@ sql_statistics(Client cntxt, MalBlkPtr m
                                if (tname && strcmp(bt->name, tname))
                                        continue;
                                if (isTable(t) && ol_first_node(t->columns)) {
+                                       bool allowed = table_privs(m, t, 
PRIV_SELECT);
                                        for (node *ncol = 
ol_first_node((t)->columns); ncol; ncol = ncol->next) {
                                                sql_column *c = (sql_column *) 
ncol->data;
+                                               if (!allowed && 
!column_privs(m, c, PRIV_SELECT))
+                                                       continue;
                                                int w;
                                                lng cnt;
                                                bit un, hnils, issorted, 
isrevsorted, dict;
diff --git a/sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.test 
b/sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.test
--- a/sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.test
+++ b/sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.test
@@ -59,14 +59,18 @@ TRUNCATE TABLE sys.storagemodelinput
 statement error
 SELECT (COUNT(*) > 0) AS has_rows FROM sys.storagemodelinput
 
-statement error
+query I
 SELECT (COUNT(*) > 0) AS has_rows FROM sys.statistics
+----
+0
 
 statement error
 TRUNCATE TABLE sys.statistics
 
-statement error
+query I
 SELECT (COUNT(*) > 0) AS has_rows FROM sys.statistics
+----
+0
 
 query I rowsort
 SELECT (COUNT(*) > 0) AS has_rows FROM sys.sequences
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to