Add V4+ features: `DATE_TYPE` and `SMALLINT_AND_TINYINT_TYPES`
This commit adds two DefaultProtocolFeature enum elements, supported
from V4 onward:
* SMALLINT_AND_TINYINT_TYPES
* DATE_TYPE
diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolFeature.java b/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolFeature.java
index 8d26d1d..7e324f9 100644
--- a/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolFeature.java
+++ b/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolFeature.java
@@ -35,5 +35,19 @@
* @see <a href="https://issues.apache.org/jira/browse/CASSANDRA-10145">CASSANDRA-10145</a>
*/
PER_REQUEST_KEYSPACE,
+
+ /**
+ * Support for smallint and tinyint types.
+ *
+ * @see <a href="https://jira.apache.org/jira/browse/CASSANDRA-8951">CASSANDRA-8951</a>
+ */
+ SMALLINT_AND_TINYINT_TYPES,
+
+ /**
+ * Support for the date type.
+ *
+ * @see <a href="https://jira.apache.org/jira/browse/CASSANDRA-7523">CASSANDRA-7523</a>
+ */
+ DATE_TYPE,
;
}
diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistry.java b/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistry.java
index edf24ce..f5fff3e 100644
--- a/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistry.java
+++ b/core/src/main/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistry.java
@@ -230,7 +230,9 @@
@Override
public boolean supports(ProtocolVersion version, ProtocolFeature feature) {
int code = version.getCode();
- if (DefaultProtocolFeature.UNSET_BOUND_VALUES.equals(feature)) {
+ if (DefaultProtocolFeature.SMALLINT_AND_TINYINT_TYPES.equals(feature)
+ || DefaultProtocolFeature.DATE_TYPE.equals(feature)
+ || DefaultProtocolFeature.UNSET_BOUND_VALUES.equals(feature)) {
// All DSE versions and all OSS V4+
return DefaultProtocolVersion.V4.getCode() <= code;
} else if (DefaultProtocolFeature.PER_REQUEST_KEYSPACE.equals(feature)) {
diff --git a/core/src/test/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistryTest.java b/core/src/test/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistryTest.java
index 9e9fefb..c86d7c8 100644
--- a/core/src/test/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistryTest.java
+++ b/core/src/test/java/com/datastax/oss/driver/internal/core/DefaultProtocolVersionRegistryTest.java
@@ -15,8 +15,13 @@
*/
package com.datastax.oss.driver.internal.core;
+import static com.datastax.dse.driver.api.core.DseProtocolVersion.DSE_V1;
+import static com.datastax.dse.driver.api.core.DseProtocolVersion.DSE_V2;
import static com.datastax.oss.driver.api.core.ProtocolVersion.V3;
import static com.datastax.oss.driver.api.core.ProtocolVersion.V4;
+import static com.datastax.oss.driver.api.core.ProtocolVersion.V5;
+import static com.datastax.oss.driver.internal.core.DefaultProtocolFeature.DATE_TYPE;
+import static com.datastax.oss.driver.internal.core.DefaultProtocolFeature.SMALLINT_AND_TINYINT_TYPES;
import static org.assertj.core.api.Assertions.assertThat;
import com.datastax.dse.driver.api.core.DseProtocolVersion;
@@ -114,6 +119,24 @@
.isEqualTo(ProtocolVersion.V3);
}
+ @Test
+ public void should_support_date_type_on_oss_v4_and_later() {
+ assertThat(registry.supports(V3, DATE_TYPE)).isFalse();
+ assertThat(registry.supports(V4, DATE_TYPE)).isTrue();
+ assertThat(registry.supports(V5, DATE_TYPE)).isTrue();
+ assertThat(registry.supports(DSE_V1, DATE_TYPE)).isTrue();
+ assertThat(registry.supports(DSE_V2, DATE_TYPE)).isTrue();
+ }
+
+ @Test
+ public void should_support_smallint_and_tinyint_types_on_oss_v4_and_later() {
+ assertThat(registry.supports(V3, SMALLINT_AND_TINYINT_TYPES)).isFalse();
+ assertThat(registry.supports(V4, SMALLINT_AND_TINYINT_TYPES)).isTrue();
+ assertThat(registry.supports(V5, SMALLINT_AND_TINYINT_TYPES)).isTrue();
+ assertThat(registry.supports(DSE_V1, SMALLINT_AND_TINYINT_TYPES)).isTrue();
+ assertThat(registry.supports(DSE_V2, SMALLINT_AND_TINYINT_TYPES)).isTrue();
+ }
+
private Node mockCassandraNode(String rawVersion) {
Node node = Mockito.mock(Node.class);
if (rawVersion != null) {