Skip to content

Commit 0c7a853

Browse files
authored
Merge pull request #158 from eclipse/cassandra_updates
Cassandra updates
2 parents 961bb63 + 6454b03 commit 0c7a853

22 files changed

+501
-591
lines changed

cassandra-driver/README.adoc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ image::https://jnosql.github.io/img/logos/cassandra.png[Cassandra Project,align=
66

77
=== How To install
88

9-
On Cassandra, the integration test is made with cassandra-unit, so just run the tests and install with maven command:
109
1. Execute the test `mvn clean install`
1110

1211
=== Install without testing

cassandra-driver/pom.xml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
<artifactId>cassandra-driver</artifactId>
2828
<description>The Eclipse JNoSQL communication layer, Diana, to Cassandra</description>
2929

30+
<properties>
31+
<casandra.driver.version>4.6.1</casandra.driver.version>
32+
</properties>
3033
<dependencies>
3134
<dependency>
3235
<groupId>${project.groupId}</groupId>
@@ -39,9 +42,14 @@
3942
<version>${project.version}</version>
4043
</dependency>
4144
<dependency>
42-
<groupId>com.datastax.cassandra</groupId>
43-
<artifactId>cassandra-driver-core</artifactId>
44-
<version>3.8.0</version>
45+
<groupId>com.datastax.oss</groupId>
46+
<artifactId>java-driver-core</artifactId>
47+
<version>${casandra.driver.version}</version>
48+
</dependency>
49+
<dependency>
50+
<groupId>com.datastax.oss</groupId>
51+
<artifactId>java-driver-query-builder</artifactId>
52+
<version>${casandra.driver.version}</version>
4553
</dependency>
4654
</dependencies>
4755
</project>

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/CassandraColumnFamilyManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
package org.eclipse.jnosql.diana.cassandra.column;
1717

1818

19-
import com.datastax.driver.core.ConsistencyLevel;
20-
import com.datastax.driver.core.Statement;
19+
import com.datastax.oss.driver.api.core.ConsistencyLevel;
20+
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
2121
import jakarta.nosql.column.ColumnDeleteQuery;
2222
import jakarta.nosql.column.ColumnEntity;
2323
import jakarta.nosql.column.ColumnFamilyManager;
@@ -129,7 +129,7 @@ public interface CassandraColumnFamilyManager extends ColumnFamilyManager {
129129
* @return the result of this query
130130
* @throws NullPointerException when statement is null
131131
*/
132-
Stream<ColumnEntity> execute(Statement statement) throws NullPointerException;
132+
Stream<ColumnEntity> execute(SimpleStatement statement) throws NullPointerException;
133133

134134
/**
135135
* Executes an query and uses as {@link CassandraPreparedStatement}

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/CassandraColumnFamilyManagerFactory.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
package org.eclipse.jnosql.diana.cassandra.column;
1717

1818

19-
import com.datastax.driver.core.Cluster;
20-
import com.datastax.driver.core.Session;
19+
import com.datastax.oss.driver.api.core.CqlSession;
20+
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
2121
import jakarta.nosql.column.ColumnFamilyManagerFactory;
2222

2323
import java.util.List;
@@ -28,40 +28,35 @@
2828
*/
2929
public class CassandraColumnFamilyManagerFactory implements ColumnFamilyManagerFactory {
3030

31-
private final Cluster cluster;
31+
private final CqlSessionBuilder sessionBuilder;
3232

3333
private final Executor executor;
3434

35-
CassandraColumnFamilyManagerFactory(final Cluster cluster, List<String> queries, Executor executor) {
36-
this.cluster = cluster;
35+
CassandraColumnFamilyManagerFactory(final CqlSessionBuilder sessionBuilder, List<String> queries, Executor executor) {
36+
this.sessionBuilder = sessionBuilder;
3737
this.executor = executor;
38-
runIniticialQuery(queries);
38+
load(queries);
3939
}
4040

41-
public void runIniticialQuery(List<String> queries) {
42-
Session session = cluster.connect();
41+
void load(List<String> queries) {
42+
final CqlSession session = sessionBuilder.build();
4343
queries.forEach(session::execute);
4444
session.close();
4545
}
4646

4747
@Override
4848
public CassandraColumnFamilyManager get(String database) {
49-
return new DefaultCassandraColumnFamilyManager(cluster.connect(database), executor, database);
49+
return new DefaultCassandraColumnFamilyManager(sessionBuilder.build(), executor, database);
5050
}
5151

5252
@Override
5353
public void close() {
54-
cluster.close();
55-
}
56-
57-
Cluster getCluster() {
58-
return cluster;
5954
}
6055

6156
@Override
6257
public String toString() {
6358
final StringBuilder sb = new StringBuilder("CassandraColumnFamilyManagerFactory{");
64-
sb.append("cluster=").append(cluster);
59+
sb.append("cluster=").append(sessionBuilder);
6560
sb.append(", executor=").append(executor);
6661
sb.append('}');
6762
return sb.toString();

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/CassandraConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package org.eclipse.jnosql.diana.cassandra.column;
1717

1818

19-
import com.datastax.driver.core.Cluster;
19+
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
2020
import jakarta.nosql.Settings;
2121
import jakarta.nosql.column.ColumnConfiguration;
2222
import org.eclipse.jnosql.diana.driver.ConfigurationReader;
@@ -55,13 +55,13 @@ private CassandraColumnFamilyManagerFactory getManagerFactory(Map<String, String
5555
return new CassandraColumnFamilyManagerFactory(properties.createCluster(), properties.getQueries(), executorService);
5656
}
5757

58-
public CassandraColumnFamilyManagerFactory getEntityManagerFactory(Cluster cluster) {
59-
requireNonNull(cluster, "Cluster is required");
58+
public CassandraColumnFamilyManagerFactory getEntityManagerFactory(CqlSessionBuilder sessionBuilder) {
59+
requireNonNull(sessionBuilder, "sessionBuilder is required");
6060

6161
Map<String, String> configuration = ConfigurationReader.from(CASSANDRA_FILE_CONFIGURATION);
6262
CassandraProperties properties = CassandraProperties.of(configuration);
6363
ExecutorService executorService = properties.createExecutorService();
64-
return new CassandraColumnFamilyManagerFactory(cluster, properties.getQueries(), executorService);
64+
return new CassandraColumnFamilyManagerFactory(sessionBuilder, properties.getQueries(), executorService);
6565
}
6666

6767
@Override

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/CassandraConfigurations.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ public enum CassandraConfigurations implements Supplier<String> {
2222
NAME("cassandra.name"),
2323
PORT("cassandra.port"),
2424
QUERY("cassandra.query"),
25-
SSL("cassandra.ssl"),
26-
METRICS("cassandra.metrics"),
27-
JMX("cassandra.jmx");
25+
DATA_CENTER("cassandra.data.center");
2826

2927
private final String configuration;
3028

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/CassandraConverter.java

Lines changed: 57 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
package org.eclipse.jnosql.diana.cassandra.column;
1717

1818

19-
import com.datastax.driver.core.CodecRegistry;
20-
import com.datastax.driver.core.ColumnDefinitions;
21-
import com.datastax.driver.core.DataType;
22-
import com.datastax.driver.core.Row;
23-
import com.datastax.driver.core.TypeCodec;
24-
import com.datastax.driver.core.UDTValue;
25-
import com.datastax.driver.core.UserType;
26-
import com.google.common.reflect.TypeToken;
19+
import com.datastax.oss.driver.api.core.CqlIdentifier;
20+
import com.datastax.oss.driver.api.core.cql.ColumnDefinition;
21+
import com.datastax.oss.driver.api.core.cql.Row;
22+
import com.datastax.oss.driver.api.core.data.UdtValue;
23+
import com.datastax.oss.driver.api.core.type.DataType;
24+
import com.datastax.oss.driver.api.core.type.UserDefinedType;
25+
import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
26+
import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry;
27+
import com.datastax.oss.protocol.internal.ProtocolConstants;
2728
import jakarta.nosql.Value;
2829
import jakarta.nosql.column.Column;
2930
import jakarta.nosql.column.ColumnEntity;
@@ -35,19 +36,16 @@
3536

3637
import static java.util.stream.Collectors.toList;
3738

38-
3939
final class CassandraConverter {
4040

41-
private static final CodecRegistry CODE_REGISTRY = CodecRegistry.DEFAULT_INSTANCE;
42-
4341
private CassandraConverter() {
4442
}
4543

4644
public static ColumnEntity toDocumentEntity(Row row) {
4745
List<Column> columns = new ArrayList<>();
4846
String columnFamily = "";
49-
for (ColumnDefinitions.Definition definition : row.getColumnDefinitions().asList()) {
50-
columnFamily = definition.getTable();
47+
for (ColumnDefinition definition : row.getColumnDefinitions()) {
48+
columnFamily = definition.getTable().asInternal();
5149
Object result = CassandraConverter.get(definition, row);
5250
if (Objects.nonNull(result)) {
5351
columns.add(getColumn(definition, result));
@@ -56,79 +54,70 @@ public static ColumnEntity toDocumentEntity(Row row) {
5654
return ColumnEntity.of(columnFamily, columns);
5755
}
5856

59-
private static Column getColumn(ColumnDefinitions.Definition definition, Object result) {
60-
switch (definition.getType().getName()) {
61-
case UDT:
57+
58+
private static Column getColumn(ColumnDefinition definition, Object result) {
59+
60+
final DataType type = definition.getType();
61+
switch (type.getProtocolCode()) {
62+
case ProtocolConstants.DataType.UDT:
6263
return Column.class.cast(result);
63-
case LIST:
64-
case SET:
64+
case ProtocolConstants.DataType.LIST:
65+
case ProtocolConstants.DataType.SET:
6566
if (isUDTIterable(result)) {
66-
return UDT.builder(getUserType(definition, result)).withName(definition.getName())
67+
return UDT.builder(getUserType(result)).withName(definition.getName().asInternal())
6768
.addUDTs(getColumns(definition, result)).build();
68-
6969
}
70-
return Column.of(definition.getName(), Value.of(result));
70+
return Column.of(definition.getName().asInternal(), Value.of(result));
7171
default:
72-
return Column.of(definition.getName(), Value.of(result));
72+
return Column.of(definition.getName().asInternal(), Value.of(result));
7373
}
7474
}
7575

76-
private static Iterable<Iterable<Column>> getColumns(ColumnDefinitions.Definition definition, Object result) {
77-
return (Iterable<Iterable<Column>>)
78-
StreamSupport.stream(Iterable.class.cast(result).spliterator(), false)
79-
.map(c -> getUDT(definition.getName(), (UDTValue) c).get())
80-
.collect(toList());
76+
static Object get(ColumnDefinition definition, Row row) {
77+
78+
String name = definition.getName().asInternal();
79+
final DataType type = definition.getType();
80+
if (type instanceof UserDefinedType) {
81+
return getUDT(definition, row.getUdtValue(name));
82+
}
83+
final TypeCodec<Object> codec = row.codecRegistry().codecFor(type);
84+
return row.get(name, codec);
8185
}
8286

83-
private static String getUserType(ColumnDefinitions.Definition definition, Object result) {
87+
private static UDT getUDT(ColumnDefinition definition, UdtValue udtValue) {
88+
String name = definition.getName().asInternal();
89+
final UserDefinedType type = udtValue.getType();
90+
List<Column> columns = new ArrayList<>();
91+
List<String> names = type.getFieldNames().stream().map(CqlIdentifier::asInternal).collect(toList());
92+
for (CqlIdentifier fieldName : type.getFieldNames()) {
93+
final int index = names.indexOf(fieldName.asInternal());
94+
DataType fieldType = type.getFieldTypes().get(index);
95+
Object elementValue = udtValue.get(fieldName, CodecRegistry.DEFAULT.codecFor(fieldType));
96+
if (elementValue != null) {
97+
columns.add(Column.of(fieldName.asInternal(), elementValue));
98+
}
99+
}
100+
return UDT.builder(type.getName().asInternal()).withName(name).addUDT(columns).build();
101+
}
102+
103+
private static String getUserType(Object result) {
84104
return StreamSupport.stream(Iterable.class.cast(result).spliterator(), false)
85105
.limit(1L)
86-
.map(c -> getUDT(definition.getName(), (UDTValue) c).getUserType())
106+
.map(c -> UdtValue.class.cast(c).getType().getName().asInternal())
87107
.findFirst()
88108
.get().toString();
89109
}
90110

111+
private static Iterable<Iterable<Column>> getColumns(ColumnDefinition definition, Object result) {
91112

92-
public static Object get(ColumnDefinitions.Definition definition, Row row) {
93-
94-
String name = definition.getName();
95-
switch (definition.getType().getName()) {
96-
case LIST:
97-
DataType typeList = definition.getType().getTypeArguments().get(0);
98-
TypeToken<Object> javaTypeList = CODE_REGISTRY.codecFor(typeList).getJavaType();
99-
return row.getList(name, javaTypeList);
100-
case SET:
101-
DataType typeSet = definition.getType().getTypeArguments().get(0);
102-
TypeToken<Object> javaTypeSet = CODE_REGISTRY.codecFor(typeSet).getJavaType();
103-
return row.getSet(name, javaTypeSet);
104-
case MAP:
105-
DataType typeKey = definition.getType().getTypeArguments().get(0);
106-
DataType typeValue = definition.getType().getTypeArguments().get(1);
107-
TypeToken<Object> javaTypeKey = CODE_REGISTRY.codecFor(typeKey).getJavaType();
108-
TypeToken<Object> javaTypeValue = CODE_REGISTRY.codecFor(typeValue).getJavaType();
109-
return row.getMap(name, javaTypeKey, javaTypeValue);
110-
case UDT:
111-
UDTValue udtValue = row.getUDTValue(name);
112-
return getUDT(name, udtValue);
113-
default:
114-
TypeCodec<Object> objectTypeCodec = CODE_REGISTRY.codecFor(definition.getType());
115-
return row.get(name, objectTypeCodec);
113+
List<Iterable<Column>> columns = new ArrayList<>();
114+
for (Object value : Iterable.class.cast(result)) {
115+
final UdtValue udtValue = UdtValue.class.cast(value);
116+
final UDT udt = getUDT(definition, udtValue);
117+
columns.add((Iterable<Column>) udt.get());
116118
}
117119

118-
119-
}
120-
121-
private static UDT getUDT(String name, UDTValue udtValue) {
122-
List<Column> columns = new ArrayList<>();
123-
UserType type = udtValue.getType();
124-
for (String fieldName : type.getFieldNames()) {
125-
DataType fieldType = type.getFieldType(fieldName);
126-
Object elementValue = udtValue.get(fieldName, CODE_REGISTRY.codecFor(fieldType));
127-
if (elementValue != null) {
128-
columns.add(Column.of(fieldName, elementValue));
129-
}
130-
}
131-
return UDT.builder(type.getTypeName()).withName(name).addUDT(columns).build();
120+
return columns;
132121
}
133122

134123
private static boolean isUDTIterable(Object result) {
@@ -137,7 +126,7 @@ private static boolean isUDTIterable(Object result) {
137126
return false;
138127
}
139128
return StreamSupport.stream(iterable.spliterator(), false)
140-
.allMatch(UDTValue.class::isInstance);
129+
.allMatch(UdtValue.class::isInstance);
141130
}
142131

143132

0 commit comments

Comments
 (0)