From 4492e1a06abc7c8368099f9f7c7a43cdd5336446 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 7 Apr 2021 13:48:28 +0200 Subject: [PATCH] Polishing. Add author tags. Reformat code. Add overrides for methods that were introduced in the meantime. See #978. Original pull request: #1108. --- .../AnnotatedCassandraConstructorProperty.java | 5 +++++ .../core/convert/CassandraConstructorProperty.java | 5 +++++ .../data/cassandra/core/convert/SchemaFactory.java | 1 + .../core/cql/generator/CreateTableCqlGenerator.java | 7 ++++--- .../core/cql/keyspace/ColumnSpecification.java | 7 ++++--- .../cassandra/core/cql/keyspace/TableDescriptor.java | 3 +++ .../core/cql/keyspace/TableSpecification.java | 11 +++++------ .../mapping/BasicCassandraPersistentProperty.java | 2 ++ .../BasicCassandraPersistentTupleProperty.java | 1 + .../mapping/CachingCassandraPersistentProperty.java | 1 + .../core/mapping/CassandraPersistentProperty.java | 4 +++- .../data/cassandra/core/mapping/Column.java | 6 ++++-- .../core/convert/SchemaFactoryUnitTests.java | 5 +++-- .../generator/CreateTableCqlGeneratorUnitTests.java | 5 +++-- src/main/asciidoc/new-features.adoc | 1 + 15 files changed, 45 insertions(+), 19 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/AnnotatedCassandraConstructorProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/AnnotatedCassandraConstructorProperty.java index c8bc66954..17f1d1dbe 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/AnnotatedCassandraConstructorProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/AnnotatedCassandraConstructorProperty.java @@ -105,6 +105,11 @@ class AnnotatedCassandraConstructorProperty implements CassandraPersistentProper return delegate.isPrimaryKeyColumn(); } + @Override + public boolean isStaticColumn() { + return delegate.isStaticColumn(); + } + @Override @Nullable public AnnotatedType findAnnotatedType(Class annotationType) { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraConstructorProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraConstructorProperty.java index 5b4aad197..14db99560 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraConstructorProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraConstructorProperty.java @@ -98,6 +98,11 @@ class CassandraConstructorProperty implements CassandraPersistentProperty { return false; } + @Override + public boolean isStaticColumn() { + return false; + } + @Nullable @Override public AnnotatedType findAnnotatedType(Class annotationType) { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/SchemaFactory.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/SchemaFactory.java index 3c3c0f6ed..6d921a199 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/SchemaFactory.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/SchemaFactory.java @@ -46,6 +46,7 @@ import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry; * * @author Mark Paluch * @author Christoph Strobl + * @author Aleksei Zotov * @since 3.0 * @see CreateUserTypeSpecification * @see CreateTableSpecification diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGenerator.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGenerator.java index 483dc3086..e7b27ee23 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGenerator.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGenerator.java @@ -15,6 +15,8 @@ */ package org.springframework.data.cassandra.core.cql.generator; +import static org.springframework.data.cassandra.core.cql.PrimaryKeyType.*; + import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -25,14 +27,13 @@ import org.springframework.data.cassandra.core.cql.keyspace.Option; import org.springframework.data.cassandra.core.cql.keyspace.TableSpecification; import org.springframework.util.StringUtils; -import static org.springframework.data.cassandra.core.cql.PrimaryKeyType.*; - /** * CQL generator for generating a {@code CREATE TABLE} statement. * * @author Matthew T. Adams * @author Alex Shvid * @author Mark Paluch + * @author Aleksei Zotov */ public class CreateTableCqlGenerator extends TableOptionsCqlGenerator> { @@ -78,7 +79,7 @@ public class CreateTableCqlGenerator extends TableOptionsCqlGenerator clusterKeys = new ArrayList<>(); for (ColumnSpecification col : spec().getColumns()) { if (col.isStatic()) { - col.toCql(cql).append(" static, "); + col.toCql(cql).append(" STATIC, "); } else { col.toCql(cql).append(", "); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/ColumnSpecification.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/ColumnSpecification.java index d1bfe0476..6bd010a88 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/ColumnSpecification.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/ColumnSpecification.java @@ -29,14 +29,15 @@ import com.datastax.oss.driver.api.core.type.DataType; /** * Object to configure a CQL column specification. *

- * Use {@link #name(String)} and {@link #type(DataType)} to set the name and type of the column, respectively. To specify - * a clustered {@code PRIMARY KEY} column, use {@link #clustered()} or {@link #clustered(Ordering)}. To specify that the - * {@code PRIMARY KEY} column is or is part of the partition key, use {@link #partitioned()} instead of + * Use {@link #name(String)} and {@link #type(DataType)} to set the name and type of the column, respectively. To + * specify a clustered {@code PRIMARY KEY} column, use {@link #clustered()} or {@link #clustered(Ordering)}. To specify + * that the {@code PRIMARY KEY} column is or is part of the partition key, use {@link #partitioned()} instead of * {@link #clustered()} or {@link #clustered(Ordering)}. To specify {@code STATIC} column, use {@link #staticColumn()}. * * @author Matthew T. Adams * @author Alex Shvid * @author Mark Paluch + * @author Aleksei Zotov */ public class ColumnSpecification { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableDescriptor.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableDescriptor.java index 8c57d7a9c..b08169459 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableDescriptor.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableDescriptor.java @@ -25,6 +25,7 @@ import com.datastax.oss.driver.api.core.CqlIdentifier; * * @author Matthew T. Adams * @author Alex Shvid + * @author Aleksei Zotov */ public interface TableDescriptor { @@ -60,6 +61,8 @@ public interface TableDescriptor { /** * Returns an unmodifiable list of static columns. + * + * @since 3.2 */ List getStaticColumns(); diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableSpecification.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableSpecification.java index e196a5e16..79f2c0ea4 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableSpecification.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/keyspace/TableSpecification.java @@ -15,19 +15,19 @@ */ package org.springframework.data.cassandra.core.cql.keyspace; +import static org.springframework.data.cassandra.core.cql.PrimaryKeyType.*; + import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; -import com.datastax.oss.driver.api.core.CqlIdentifier; -import com.datastax.oss.driver.api.core.type.DataType; - import org.springframework.data.cassandra.core.cql.Ordering; import org.springframework.data.cassandra.core.cql.PrimaryKeyType; import org.springframework.util.Assert; -import static org.springframework.data.cassandra.core.cql.PrimaryKeyType.*; +import com.datastax.oss.driver.api.core.CqlIdentifier; +import com.datastax.oss.driver.api.core.type.DataType; /** * Object to support the configuration of table specifications that have columns. This class can also be used as a @@ -36,6 +36,7 @@ import static org.springframework.data.cassandra.core.cql.PrimaryKeyType.*; * @author Matthew T. Adams * @author Alex Shvid * @author Mark Paluch + * @author Aleksei Zotov */ public class TableSpecification extends TableOptionsSpecification> implements TableDescriptor { @@ -355,8 +356,6 @@ public class TableSpecification extends TableOptionsSpecification getStaticColumns() { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentProperty.java index 8ef4f3596..22b4f618d 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentProperty.java @@ -54,6 +54,7 @@ import com.datastax.oss.driver.api.core.CqlIdentifier; * @author Antoine Toulme * @author Mark Paluch * @author John Blum + * @author Aleksei Zotov */ public class BasicCassandraPersistentProperty extends AnnotationBasedPersistentProperty implements CassandraPersistentProperty, ApplicationContextAware { @@ -181,6 +182,7 @@ public class BasicCassandraPersistentProperty extends AnnotationBasedPersistentP */ @Override public boolean isStaticColumn() { + Column annotation = findAnnotation(Column.class); return annotation != null && annotation.isStatic(); diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentTupleProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentTupleProperty.java index fb4584810..0e72c19c9 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentTupleProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentTupleProperty.java @@ -29,6 +29,7 @@ import com.datastax.oss.driver.api.core.CqlIdentifier; * * @author Mark Paluch * @author Frank Spitulski + * @author Aleksei Zotov * @since 2.1 * @see Element */ diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CachingCassandraPersistentProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CachingCassandraPersistentProperty.java index a05432bfb..f3f481fc2 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CachingCassandraPersistentProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CachingCassandraPersistentProperty.java @@ -24,6 +24,7 @@ import org.springframework.lang.Nullable; * {@link BasicCassandraPersistentProperty} that pre-computes primary key and embedded flags. * * @author Mark Paluch + * @author Aleksei Zotov * @since 3.1.4 */ public class CachingCassandraPersistentProperty extends BasicCassandraPersistentProperty { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java index e9185b1f6..8e08bfd92 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java @@ -36,6 +36,7 @@ import com.datastax.oss.driver.api.core.CqlIdentifier; * @author John Blum * @author Christoph Strobl * @author Frank Spitulski + * @author Aleksei Zotov */ public interface CassandraPersistentProperty extends PersistentProperty, ApplicationContextAware { @@ -160,7 +161,8 @@ public interface CassandraPersistentProperty boolean isPrimaryKeyColumn(); /** - * Whether the property is a static column. + * Whether the property maps to a static column. + * * @since 3.2 */ boolean isStaticColumn(); diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/Column.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/Column.java index 753fed062..42fe7b4a7 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/Column.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/Column.java @@ -42,6 +42,7 @@ import java.lang.annotation.Target; * @author Alex Shvid * @author Matthew T. Adams * @author Mark Paluch + * @author Aleksei Zotov */ @Documented @Retention(RetentionPolicy.RUNTIME) @@ -54,8 +55,9 @@ public @interface Column { String value() default ""; /** - * Whether the column is static. - * Default is {@literal false}. + * Whether the column is {@code static}. Default is {@literal false}. Used primarily for schema creation. + * + * @since 3.2 */ boolean isStatic() default false; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/convert/SchemaFactoryUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/convert/SchemaFactoryUnitTests.java index a757a1db9..d33c193b1 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/convert/SchemaFactoryUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/convert/SchemaFactoryUnitTests.java @@ -67,6 +67,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Matthew T. Adams * @author Mark Paluch * @author Christoph Strobl + * @author Aleksei Zotov */ public class SchemaFactoryUnitTests { @@ -898,7 +899,7 @@ public class SchemaFactoryUnitTests { @Element(1) int number; } - @Test // DATACASS-812 + @Test // GH-978 void createdTableSpecificationShouldConsiderStaticColumns() { CassandraPersistentEntity persistentEntity = ctx @@ -911,7 +912,7 @@ public class SchemaFactoryUnitTests { assertThat(name.isStatic()).isTrue(); } - @Test // DATACASS-812 + @Test // GH-978 void createdTableSpecificationShouldConsiderStaticForTypedTupleColumns() { CassandraPersistentEntity persistentEntity = ctx diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGeneratorUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGeneratorUnitTests.java index 9180c51c3..f27112e4b 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGeneratorUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/generator/CreateTableCqlGeneratorUnitTests.java @@ -42,6 +42,7 @@ import com.datastax.oss.driver.api.core.type.DataTypes; * @author Matthew T. Adams * @author David Webb * @author Mark Paluch + * @author Aleksei Zotov */ class CreateTableCqlGeneratorUnitTests { @@ -188,7 +189,7 @@ class CreateTableCqlGeneratorUnitTests { + "WITH CLUSTERING ORDER BY (date_of_birth ASC) AND COMPACT STORAGE;"); } - @Test // DATACASS-812 + @Test // GH-978 void createTableWithStaticColumns() { CreateTableSpecification table = CreateTableSpecification.createTable("person") @@ -198,7 +199,7 @@ class CreateTableCqlGeneratorUnitTests { .staticColumn("country", DataTypes.ASCII); assertThat(toCql(table)).isEqualTo("CREATE TABLE person (" - + "id ascii, date_of_birth date, name ascii, country ascii static, " + + "id ascii, date_of_birth date, name ascii, country ascii STATIC, " + "PRIMARY KEY (id, date_of_birth)) " + "WITH CLUSTERING ORDER BY (date_of_birth ASC);"); } diff --git a/src/main/asciidoc/new-features.adoc b/src/main/asciidoc/new-features.adoc index 3bf74f51e..4f8136b85 100644 --- a/src/main/asciidoc/new-features.adoc +++ b/src/main/asciidoc/new-features.adoc @@ -8,6 +8,7 @@ This chapter summarizes changes and new features for each release. * <> using `CassandraTemplate` and repositories (enabled by default). * `@Column` and `@Element` can be used on constructor arguments. +* Schema support for static columns through `@Column(isStatic = …)`. [[new-features.3-1-0]] == What's new in Spring Data for Apache Cassandra 3.1