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 -- [email protected]
To unsubscribe send an email to [email protected]