ekaterinadimitrova2 commented on code in PR #2398:
URL: https://github.com/apache/cassandra/pull/2398#discussion_r1229763593


##########
test/unit/org/apache/cassandra/schema/CreateTableValidationTest.java:
##########
@@ -48,4 +51,60 @@ public void testInvalidBloomFilterFPRatio() throws Throwable
         // sanity check
         createTable("CREATE TABLE %s (a int PRIMARY KEY, b int) WITH 
bloom_filter_fp_chance = 0.1");
     }
+
+    @Test
+    public void testCreateTableOnSelectedClusterColumn()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC);");
+    }
+
+    @Test
+    public void testCreateTableOnAllClusterColumns()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC);");
+    }
+    @Test
+    public void testCreateTableErrorOnNonClusterKey()
+    {
+        String expectedMessage = "Only clustering key columns can be defined 
in CLUSTERING ORDER directive";
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC, v 
ASC);",
+                        expectedMessage+": [v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (v ASC);",
+                        expectedMessage+": [v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk ASC);",
+                        expectedMessage+": [pk]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk ASC, ck1 DESC);",
+                        expectedMessage+": [pk]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC, pk 
DESC);",
+                        expectedMessage+": [pk]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk DESC, v DESC);",
+                        expectedMessage+": [pk, v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk DESC, v DESC, ck1 
DESC);",
+                        expectedMessage+": [pk, v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, v ASC);",
+                        expectedMessage+": [v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (v ASC, ck1 DESC);",
+                        expectedMessage+": [v]");
+    }
+
+    @Test
+    public void testCreateTableInWrongOrdering()
+    {
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck2 ASC, ck1 DESC);",
+                        "The order of columns in the CLUSTERING ORDER 
directive must be the one of the clustering key");
+    }
+
+    @Test
+    public void testCreateTableWithMissingClusterColumn()

Review Comment:
   ```suggestion
       public void testCreateTableWithMissingClusteringColumn()
   ```
   to be fixed on commit



##########
test/unit/org/apache/cassandra/schema/CreateTableValidationTest.java:
##########
@@ -48,4 +51,60 @@ public void testInvalidBloomFilterFPRatio() throws Throwable
         // sanity check
         createTable("CREATE TABLE %s (a int PRIMARY KEY, b int) WITH 
bloom_filter_fp_chance = 0.1");
     }
+
+    @Test
+    public void testCreateTableOnSelectedClusterColumn()

Review Comment:
   ```suggestion
       public void testCreateTableOnSelectedClusteringColumn()
   ```
   to be corrected on commit



##########
test/unit/org/apache/cassandra/schema/CreateTableValidationTest.java:
##########
@@ -48,4 +51,60 @@ public void testInvalidBloomFilterFPRatio() throws Throwable
         // sanity check
         createTable("CREATE TABLE %s (a int PRIMARY KEY, b int) WITH 
bloom_filter_fp_chance = 0.1");
     }
+
+    @Test
+    public void testCreateTableOnSelectedClusterColumn()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC);");
+    }
+
+    @Test
+    public void testCreateTableOnAllClusterColumns()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC);");
+    }
+    @Test
+    public void testCreateTableErrorOnNonClusterKey()
+    {
+        String expectedMessage = "Only clustering key columns can be defined 
in CLUSTERING ORDER directive";
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC, v 
ASC);",
+                        expectedMessage+": [v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (v ASC);",
+                        expectedMessage+": [v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk ASC);",
+                        expectedMessage+": [pk]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk ASC, ck1 DESC);",
+                        expectedMessage+": [pk]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC, pk 
DESC);",
+                        expectedMessage+": [pk]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk DESC, v DESC);",
+                        expectedMessage+": [pk, v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (pk DESC, v DESC, ck1 
DESC);",
+                        expectedMessage+": [pk, v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, v ASC);",
+                        expectedMessage+": [v]");
+        expectedFailure("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, 
PRIMARY KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (v ASC, ck1 DESC);",
+                        expectedMessage+": [v]");
+    }
+
+    @Test
+    public void testCreateTableInWrongOrdering()

Review Comment:
   ```suggestion
       public void testCreateTableInWrongOrder()
   ```
   to be corrected on commit



##########
test/unit/org/apache/cassandra/schema/CreateTableValidationTest.java:
##########
@@ -48,4 +51,60 @@ public void testInvalidBloomFilterFPRatio() throws Throwable
         // sanity check
         createTable("CREATE TABLE %s (a int PRIMARY KEY, b int) WITH 
bloom_filter_fp_chance = 0.1");
     }
+
+    @Test
+    public void testCreateTableOnSelectedClusterColumn()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC);");
+    }
+
+    @Test
+    public void testCreateTableOnAllClusterColumns()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC, ck2 DESC);");
+    }
+    @Test
+    public void testCreateTableErrorOnNonClusterKey()

Review Comment:
   ```suggestion
       public void testCreateTableErrorOnNonClusteringKey()
   ```
   to be corrected on commit



##########
test/unit/org/apache/cassandra/schema/CreateTableValidationTest.java:
##########
@@ -48,4 +51,60 @@ public void testInvalidBloomFilterFPRatio() throws Throwable
         // sanity check
         createTable("CREATE TABLE %s (a int PRIMARY KEY, b int) WITH 
bloom_filter_fp_chance = 0.1");
     }
+
+    @Test
+    public void testCreateTableOnSelectedClusterColumn()
+    {
+        createTable("CREATE TABLE %s (pk int, ck1 int, ck2 int, v int, PRIMARY 
KEY ((pk),ck1, ck2)) WITH CLUSTERING ORDER BY (ck1 ASC);");
+    }
+
+    @Test
+    public void testCreateTableOnAllClusterColumns()

Review Comment:
   ```suggestion
       public void testCreateTableOnAllClusterColumns()
   ```
   to be corrected on commit



##########
src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java:
##########
@@ -342,8 +344,14 @@ public ParsedStatement.Prepared prepare(Types udts) throws 
RequestValidationExce
             // If we give a clustering order, we must explicitly do so for all 
aliases and in the order of the PK
             if (!properties.definedOrdering.isEmpty())
             {
-                if (properties.definedOrdering.size() > columnAliases.size())
-                    throw new InvalidRequestException("Only clustering key 
columns can be defined in CLUSTERING ORDER directive");
+                List<ColumnIdentifier> nonClusterColumn = 
properties.definedOrdering.keySet().stream()
+                                                                               
     .filter((id) -> !columnAliases.contains(id))
+                                                                               
     .collect(Collectors.toList());
+
+                if (!nonClusterColumn.isEmpty())
+                {
+                    throw new InvalidRequestException("Only clustering key 
columns can be defined in CLUSTERING ORDER directive: " + nonClusterColumn + " 
are not clustering column");

Review Comment:
   ```suggestion
                       throw new InvalidRequestException("Only clustering key 
columns can be defined in CLUSTERING ORDER directive: " + nonClusterColumn + " 
are not clustering columns");
   ```
   to be corrected on commit



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to