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
This commit is contained in:
Francisco Guerrero 2026-04-10 16:28:44 -07:00
parent 4134d72a5a
commit 7c3dea92cf
3 changed files with 11 additions and 7 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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;
}
/**