This is an automated email from the ASF dual-hosted git repository.

frankgh pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 7c3dea92cf Avoid permission checks for masked columns when the table 
doesn't have any
7c3dea92cf is described below

commit 7c3dea92cf6e287e1a3b26d94636f3b9c955830b
Author: Francisco Guerrero <[email protected]>
AuthorDate: Fri Apr 10 16:28:44 2026 -0700

    Avoid permission checks for masked columns when the table doesn't have any
    
    patch by Francisco Guerrero; reviewed by Shailaja Koppu, Caleb Rackliffe, 
Dmitry Konstantinov for CASSANDRA-21299
---
 CHANGES.txt                                                |  1 +
 .../apache/cassandra/cql3/statements/SelectStatement.java  |  3 ++-
 src/java/org/apache/cassandra/schema/TableMetadata.java    | 14 ++++++++------
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 7b3c3c86be..3e965bf7b4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 6.0-alpha2
+ * Avoid permission checks for masked columns when the table doesn't have any 
(CASSANDRA-21299)
  * Reduce allocations and array copies due to buffer resizing in 
LocalDataResponse during row serialization (CASSANDRA-21285)
  * Implement a guardrail for client driver versions (CASSANDRA-21146)
  * Enable IAuthenticator to declare supported and alterable role options 
(CASSANDRA-20834)
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index 1752fe0bc4..91361ae91c 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -321,7 +321,8 @@ public class SelectStatement implements 
CQLStatement.SingleKeyspaceCqlStatement,
         for (Function function : getFunctions())
             state.ensurePermission(Permission.EXECUTE, function);
 
-        if (!state.hasTablePermission(table, Permission.UNMASK) &&
+        if (table.hasMaskedColumns() &&
+            !state.hasTablePermission(table, Permission.UNMASK) &&
             !state.hasTablePermission(table, Permission.SELECT_MASKED))
         {
             List<ColumnMetadata> queriedMaskedColumns = table.columns()
diff --git a/src/java/org/apache/cassandra/schema/TableMetadata.java 
b/src/java/org/apache/cassandra/schema/TableMetadata.java
index 9589062c8b..05c92115b9 100644
--- a/src/java/org/apache/cassandra/schema/TableMetadata.java
+++ b/src/java/org/apache/cassandra/schema/TableMetadata.java
@@ -223,6 +223,9 @@ public class TableMetadata implements SchemaElement
     public final List<ColumnMetadata> columnsWithConstraints;
     public final List<ColumnMetadata> notNullColumns;
 
+    // remember whether there are masked columns or not
+    private final boolean hasMaskedColumns;
+
     protected TableMetadata(Builder builder)
     {
         flags = Sets.immutableEnumSet(builder.flags);
@@ -285,6 +288,7 @@ public class TableMetadata implements SchemaElement
 
         List<ColumnMetadata> columnsWithConstraints = new ArrayList<>();
         List<ColumnMetadata> notNullColumns = new ArrayList<>();
+        boolean hasMaskedColumns = false;
 
         for (ColumnMetadata column : this.columns())
         {
@@ -295,7 +299,10 @@ public class TableMetadata implements SchemaElement
                     notNullColumns.add(column);
 
             }
+            if (column.isMasked())
+                hasMaskedColumns = true;
         }
+        this.hasMaskedColumns = hasMaskedColumns;
         this.columnsWithConstraints = columnsWithConstraints;
         this.notNullColumns = notNullColumns;
     }
@@ -584,12 +591,7 @@ public class TableMetadata implements SchemaElement
      */
     public boolean hasMaskedColumns()
     {
-        for (ColumnMetadata column : columns.values())
-        {
-            if (column.isMasked())
-                return true;
-        }
-        return false;
+        return hasMaskedColumns;
     }
 
     /**


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to