This is an automated email from the ASF dual-hosted git repository.
smiklosovic 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 4734dfc503 Extend implicit allow-filtering for virtual tables to
clustering columns
4734dfc503 is described below
commit 4734dfc503e6b4307b63dd61f36da9f9c89d86f9
Author: Stefan Miklosovic <[email protected]>
AuthorDate: Mon Mar 13 12:51:34 2023 +0100
Extend implicit allow-filtering for virtual tables to clustering columns
patch by Stefan Miklosovic; reviewed by Aleksey Yeschenko for
CASSANDRA-18331
---
CHANGES.txt | 1 +
.../cql3/restrictions/StatementRestrictions.java | 2 +-
.../cassandra/cql3/statements/SelectStatement.java | 3 ++-
.../cql3/validation/entities/VirtualTableTest.java | 24 ++++++++++++++++++++--
4 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 93b9125da8..f2b23b1f02 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
5.0
+ * Extend implicit allow-filtering for virtual tables to clustering columns
(CASSANDRA-18331)
* Upgrade maven-shade-plugin to 3.4.1 to fix shaded dtest JAR build
(CASSANDRA-18136)
* Upgrade to Opcodes.ASM9 (CASSANDRA-17971)
* Add MaxSSTableSize and MaxSSTableDuration metrics and propagate them
together with local read/write ratio to tablestats (CASSANDRA-18283)
diff --git
a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
index a7ebc2650b..d522f46d2f 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
@@ -286,7 +286,7 @@ public final class StatementRestrictions
validateSecondaryIndexSelections();
}
- private boolean requiresAllowFilteringIfNotSpecified()
+ public boolean requiresAllowFilteringIfNotSpecified()
{
if (!table.isVirtual())
return true;
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index 4d14ffa410..39e887cffd 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -1458,7 +1458,8 @@ public class SelectStatement implements
CQLStatement.SingleKeyspaceCqlStatement
// We will potentially filter data if either:
// - Have more than one IndexExpression
// - Have no index expression and the row filter is not the
identity
- checkFalse(restrictions.needFiltering(),
StatementRestrictions.REQUIRES_ALLOW_FILTERING_MESSAGE);
+ if (restrictions.requiresAllowFilteringIfNotSpecified())
+ checkFalse(restrictions.needFiltering(),
StatementRestrictions.REQUIRES_ALLOW_FILTERING_MESSAGE);
}
}
diff --git
a/test/unit/org/apache/cassandra/cql3/validation/entities/VirtualTableTest.java
b/test/unit/org/apache/cassandra/cql3/validation/entities/VirtualTableTest.java
index d27a894d61..a17f74cec2 100644
---
a/test/unit/org/apache/cassandra/cql3/validation/entities/VirtualTableTest.java
+++
b/test/unit/org/apache/cassandra/cql3/validation/entities/VirtualTableTest.java
@@ -1050,7 +1050,7 @@ public class VirtualTableTest extends CQLTester
}
@Test
- public void testDisallowedFilteringOnTable() throws Throwable
+ public void testDisallowedFilteringOnRegularColumn() throws Throwable
{
try
{
@@ -1064,11 +1064,31 @@ public class VirtualTableTest extends CQLTester
}
@Test
- public void testAllowedFilteringOnTable() throws Throwable
+ public void testDisallowedFilteringOnClusteringColumn() throws Throwable
+ {
+ try
+ {
+ executeNet(format("SELECT * FROM %s.%s WHERE c = 'abc'", KS_NAME,
VT5_NAME));
+ fail(format("should fail as %s.%s is not allowed to be filtered on
implicitly.", KS_NAME, VT5_NAME));
+ }
+ catch (InvalidQueryException ex)
+ {
+ assertTrue(ex.getMessage().contains("Cannot execute this query as
it might involve data filtering and thus may have unpredictable performance"));
+ }
+ }
+
+ @Test
+ public void testAllowedFilteringOnRegularColumn() throws Throwable
{
executeNet(format("SELECT * FROM %s.%s WHERE v2 = 5", KS_NAME,
VT1_NAME));
}
+ @Test
+ public void testAllowedFilteringOnClusteringColumn() throws Throwable
+ {
+ executeNet(format("SELECT * FROM %s.%s WHERE c = 'abc'", KS_NAME,
VT1_NAME));
+ }
+
@FunctionalInterface
private static interface ThrowingRunnable
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]