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

absurdfarce pushed a commit to branch 4.x
in repository https://gitbox.apache.org/repos/asf/cassandra-java-driver.git


The following commit(s) were added to refs/heads/4.x by this push:
     new 72c729b1b CASSANDRA-19932: Allow to define extensions while creating 
table patch by Lukasz Antoniak; reviewed by Bret McGuire and Chris Lohfink
72c729b1b is described below

commit 72c729b1ba95695fed467ca3734de7a39a2b3201
Author: Lukasz Antoniak <[email protected]>
AuthorDate: Thu Oct 3 09:32:17 2024 +0200

    CASSANDRA-19932: Allow to define extensions while creating table
    patch by Lukasz Antoniak; reviewed by Bret McGuire and Chris Lohfink
---
 .../schema/CreateTableWithOptions.java             | 11 ++++++++
 .../querybuilder/schema/RawOptionsWrapper.java}    | 32 ++++++++++++++++------
 .../api/querybuilder/schema/CreateTableTest.java   |  9 +++++-
 3 files changed, 43 insertions(+), 9 deletions(-)

diff --git 
a/query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
 
b/query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
index 4dd3193da..c7bddf575 100644
--- 
a/query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
+++ 
b/query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
@@ -18,7 +18,11 @@
 package com.datastax.oss.driver.api.querybuilder.schema;
 
 import com.datastax.oss.driver.api.querybuilder.BuildableQuery;
+import com.datastax.oss.driver.internal.querybuilder.schema.RawOptionsWrapper;
+import com.datastax.oss.driver.shaded.guava.common.collect.Maps;
+import edu.umd.cs.findbugs.annotations.CheckReturnValue;
 import edu.umd.cs.findbugs.annotations.NonNull;
+import java.util.Map;
 
 public interface CreateTableWithOptions
     extends BuildableQuery, RelationStructure<CreateTableWithOptions> {
@@ -26,4 +30,11 @@ public interface CreateTableWithOptions
   /** Enables COMPACT STORAGE in the CREATE TABLE statement. */
   @NonNull
   CreateTableWithOptions withCompactStorage();
+
+  /** Attaches custom metadata to CQL table definition. */
+  @NonNull
+  @CheckReturnValue
+  default CreateTableWithOptions withExtensions(@NonNull Map<String, byte[]> 
extensions) {
+    return withOption("extensions", Maps.transformValues(extensions, 
RawOptionsWrapper::of));
+  }
 }
diff --git 
a/query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
 
b/query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/schema/RawOptionsWrapper.java
similarity index 53%
copy from 
query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
copy to 
query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/schema/RawOptionsWrapper.java
index 4dd3193da..64cdb50f8 100644
--- 
a/query-builder/src/main/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableWithOptions.java
+++ 
b/query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/schema/RawOptionsWrapper.java
@@ -15,15 +15,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.datastax.oss.driver.api.querybuilder.schema;
+package com.datastax.oss.driver.internal.querybuilder.schema;
 
-import com.datastax.oss.driver.api.querybuilder.BuildableQuery;
-import edu.umd.cs.findbugs.annotations.NonNull;
+import com.datastax.oss.driver.api.core.data.ByteUtils;
 
-public interface CreateTableWithOptions
-    extends BuildableQuery, RelationStructure<CreateTableWithOptions> {
+/**
+ * Wrapper class to indicate that the contained String value should be 
understood to represent a CQL
+ * literal that can be included directly in a CQL statement (i.e. without 
escaping).
+ */
+public class RawOptionsWrapper {
+  private final String val;
+
+  private RawOptionsWrapper(String val) {
+    this.val = val;
+  }
+
+  public static RawOptionsWrapper of(String val) {
+    return new RawOptionsWrapper(val);
+  }
+
+  public static RawOptionsWrapper of(byte[] val) {
+    return new RawOptionsWrapper(ByteUtils.toHexString(val));
+  }
 
-  /** Enables COMPACT STORAGE in the CREATE TABLE statement. */
-  @NonNull
-  CreateTableWithOptions withCompactStorage();
+  @Override
+  public String toString() {
+    return this.val;
+  }
 }
diff --git 
a/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableTest.java
 
b/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableTest.java
index d32c66f62..7a5542c51 100644
--- 
a/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableTest.java
+++ 
b/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/schema/CreateTableTest.java
@@ -28,6 +28,7 @@ import 
com.datastax.oss.driver.api.querybuilder.SchemaBuilder.RowsPerPartition;
 import 
com.datastax.oss.driver.api.querybuilder.schema.compaction.TimeWindowCompactionStrategy.CompactionWindowUnit;
 import 
com.datastax.oss.driver.api.querybuilder.schema.compaction.TimeWindowCompactionStrategy.TimestampResolution;
 import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap;
+import java.nio.charset.StandardCharsets;
 import org.junit.Test;
 
 public class CreateTableTest {
@@ -169,6 +170,12 @@ public class CreateTableTest {
                 .withComment("Hello world")
                 .withDcLocalReadRepairChance(0.54)
                 .withDefaultTimeToLiveSeconds(86400)
+                .withExtensions(
+                    ImmutableMap.of(
+                        "key1",
+                        "apache".getBytes(StandardCharsets.UTF_8),
+                        "key2",
+                        "cassandra".getBytes(StandardCharsets.UTF_8)))
                 .withGcGraceSeconds(864000)
                 .withMemtableFlushPeriodInMs(10000)
                 .withMinIndexInterval(1024)
@@ -176,7 +183,7 @@ public class CreateTableTest {
                 .withReadRepairChance(0.55)
                 .withSpeculativeRetry("99percentile"))
         .hasCql(
-            "CREATE TABLE bar (k int PRIMARY KEY,v text) WITH 
bloom_filter_fp_chance=0.42 AND cdc=false AND comment='Hello world' AND 
dclocal_read_repair_chance=0.54 AND default_time_to_live=86400 AND 
gc_grace_seconds=864000 AND memtable_flush_period_in_ms=10000 AND 
min_index_interval=1024 AND max_index_interval=4096 AND read_repair_chance=0.55 
AND speculative_retry='99percentile'");
+            "CREATE TABLE bar (k int PRIMARY KEY,v text) WITH 
bloom_filter_fp_chance=0.42 AND cdc=false AND comment='Hello world' AND 
dclocal_read_repair_chance=0.54 AND default_time_to_live=86400 AND 
extensions={'key1':0x617061636865,'key2':0x63617373616e647261} AND 
gc_grace_seconds=864000 AND memtable_flush_period_in_ms=10000 AND 
min_index_interval=1024 AND max_index_interval=4096 AND read_repair_chance=0.55 
AND speculative_retry='99percentile'");
   }
 
   @Test


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

Reply via email to