Skip to content

Commit 598ac79

Browse files
committed
implements cassandra methods
1 parent 59168ee commit 598ac79

File tree

5 files changed

+104
-67
lines changed

5 files changed

+104
-67
lines changed

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

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.datastax.oss.driver.api.core.cql.ResultSet;
2121
import jakarta.nosql.column.ColumnEntity;
2222

23-
import java.util.concurrent.Executor;
2423
import java.util.stream.Stream;
2524

2625
/**
@@ -30,22 +29,19 @@ public class CassandraPreparedStatement {
3029

3130
private final com.datastax.oss.driver.api.core.cql.PreparedStatement prepare;
3231

33-
private final Executor executor;
34-
3532
private final CqlSession session;
3633

3734
private BoundStatement boundStatement;
3835

39-
CassandraPreparedStatement(com.datastax.oss.driver.api.core.cql.PreparedStatement prepare, Executor executor, CqlSession session) {
36+
CassandraPreparedStatement(com.datastax.oss.driver.api.core.cql.PreparedStatement prepare, CqlSession session) {
4037
this.prepare = prepare;
41-
this.executor = executor;
4238
this.session = session;
4339
}
4440

4541
public Stream<ColumnEntity> executeQuery() {
46-
loadBoundStatment();
42+
load();
4743
ResultSet resultSet = session.execute(boundStatement);
48-
return null;
44+
return resultSet.all().stream().map(CassandraConverter::toDocumentEntity);
4945
}
5046

5147

@@ -60,24 +56,19 @@ public CassandraPreparedStatement bind(Object... values) {
6056
return this;
6157
}
6258

63-
private void loadBoundStatment() {
59+
private void load() {
6460
if (boundStatement == null) {
6561
boundStatement = prepare.bind();
6662
}
6763
}
6864

69-
public void close() {
70-
71-
}
7265

7366
@Override
7467
public String toString() {
75-
final StringBuilder sb = new StringBuilder("CassandraPrepareStatment{");
76-
sb.append("prepare=").append(prepare);
77-
sb.append(", executor=").append(executor);
78-
sb.append(", session=").append(session);
79-
sb.append(", boundStatement=").append(boundStatement);
80-
sb.append('}');
81-
return sb.toString();
68+
return "CassandraPreparedStatement{" +
69+
"prepare=" + prepare +
70+
", session=" + session +
71+
", boundStatement=" + boundStatement +
72+
'}';
8273
}
8374
}

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

Lines changed: 83 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,21 @@
1717

1818
import com.datastax.oss.driver.api.core.ConsistencyLevel;
1919
import com.datastax.oss.driver.api.core.CqlSession;
20+
import com.datastax.oss.driver.api.core.cql.BoundStatement;
21+
import com.datastax.oss.driver.api.core.cql.PreparedStatement;
2022
import com.datastax.oss.driver.api.core.cql.ResultSet;
2123
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
24+
import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
25+
import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry;
2226
import com.datastax.oss.driver.api.querybuilder.QueryBuilder;
23-
import com.datastax.oss.driver.api.querybuilder.insert.RegularInsert;
27+
import com.datastax.oss.driver.api.querybuilder.insert.Insert;
2428
import jakarta.nosql.column.ColumnDeleteQuery;
2529
import jakarta.nosql.column.ColumnEntity;
2630
import jakarta.nosql.column.ColumnQuery;
2731

2832
import java.time.Duration;
2933
import java.util.Map;
34+
import java.util.Objects;
3035
import java.util.concurrent.Executor;
3136
import java.util.stream.Collectors;
3237
import java.util.stream.Stream;
@@ -52,7 +57,7 @@ class DefaultCassandraColumnFamilyManager implements CassandraColumnFamilyManage
5257
@Override
5358
public ColumnEntity insert(ColumnEntity entity) {
5459
requireNonNull(entity, "entity is required");
55-
final RegularInsert insert = QueryUtils.insert(entity, keyspace, session, null);
60+
final Insert insert = QueryUtils.insert(entity, keyspace, session, null);
5661
session.execute(insert.build());
5762
return entity;
5863
}
@@ -61,7 +66,7 @@ public ColumnEntity insert(ColumnEntity entity) {
6166
public ColumnEntity insert(ColumnEntity entity, Duration duration) {
6267
requireNonNull(entity, "entity is required");
6368
requireNonNull(duration, "duration is required");
64-
final RegularInsert insert = QueryUtils.insert(entity, keyspace, session, duration);
69+
final Insert insert = QueryUtils.insert(entity, keyspace, session, duration);
6570
session.execute(insert.build());
6671
return entity;
6772
}
@@ -95,8 +100,41 @@ public Iterable<ColumnEntity> insert(Iterable<ColumnEntity> entities, Duration d
95100
}
96101

97102
@Override
98-
public void delete(ColumnDeleteQuery columnDeleteQuery) {
103+
public ColumnEntity save(ColumnEntity entity, ConsistencyLevel level) {
104+
requireNonNull(entity, "entities is required");
105+
requireNonNull(level, "level is required");
106+
107+
final Insert insert = QueryUtils.insert(entity, keyspace, session, null);
108+
session.execute(insert.build().setConsistencyLevel(level));
109+
return entity;
110+
}
111+
112+
@Override
113+
public ColumnEntity save(ColumnEntity entity, Duration ttl, ConsistencyLevel level) {
114+
requireNonNull(entity, "entity is required");
115+
requireNonNull(level, "level is required");
116+
requireNonNull(ttl, "ttl is required");
99117

118+
final Insert insert = QueryUtils.insert(entity, keyspace, session, ttl);
119+
session.execute(insert.build().setConsistencyLevel(level));
120+
return entity;
121+
}
122+
123+
@Override
124+
public Iterable<ColumnEntity> save(Iterable<ColumnEntity> entities, ConsistencyLevel level) {
125+
requireNonNull(entities, "entities is required");
126+
requireNonNull(level, "level is required");
127+
return StreamSupport.stream(entities.spliterator(), false).map(c -> this.save(c, level))
128+
.collect(Collectors.toList());
129+
}
130+
131+
@Override
132+
public Iterable<ColumnEntity> save(Iterable<ColumnEntity> entities, Duration ttl, ConsistencyLevel level) {
133+
requireNonNull(entities, "entities is required");
134+
requireNonNull(level, "level is required");
135+
requireNonNull(ttl, "ttl is required");
136+
return StreamSupport.stream(entities.spliterator(), false).map(c -> this.save(c, ttl, level))
137+
.collect(Collectors.toList());
100138
}
101139

102140
@Override
@@ -106,6 +144,13 @@ public Stream<ColumnEntity> select(ColumnQuery query) {
106144
return executor.execute(keyspace, query, this);
107145
}
108146

147+
@Override
148+
public Stream<ColumnEntity> select(ColumnQuery query, ConsistencyLevel level) throws NullPointerException {
149+
requireNonNull(query, "query is required");
150+
QueryExecutor executor = QueryExecutor.of(query);
151+
return executor.execute(keyspace, query, level, this);
152+
}
153+
109154
@Override
110155
public long count(String columnFamily) {
111156
requireNonNull(columnFamily, "columnFamily is required");
@@ -119,66 +164,64 @@ public void close() {
119164
session.close();
120165
}
121166

122-
CqlSession getSession() {
123-
return session;
124-
}
125-
126167
@Override
127-
public String toString() {
128-
final StringBuilder sb = new StringBuilder("CassandraColumnFamilyManager{");
129-
sb.append("session=").append(session);
130-
sb.append('}');
131-
return sb.toString();
132-
}
168+
public void delete(ColumnDeleteQuery query, ConsistencyLevel level) throws NullPointerException {
133169

134-
@Override
135-
public ColumnEntity save(ColumnEntity entity, ConsistencyLevel level) throws NullPointerException {
136-
return null;
137170
}
138171

139172
@Override
140-
public ColumnEntity save(ColumnEntity entity, Duration ttl, ConsistencyLevel level) throws NullPointerException {
141-
return null;
142-
}
173+
public void delete(ColumnDeleteQuery columnDeleteQuery) {
143174

144-
@Override
145-
public Iterable<ColumnEntity> save(Iterable<ColumnEntity> entities, ConsistencyLevel level) throws NullPointerException {
146-
return null;
147175
}
148176

149-
@Override
150-
public Iterable<ColumnEntity> save(Iterable<ColumnEntity> entities, Duration ttl, ConsistencyLevel level) throws NullPointerException {
151-
return null;
152-
}
153177

154178
@Override
155-
public void delete(ColumnDeleteQuery query, ConsistencyLevel level) throws NullPointerException {
156-
179+
public Stream<ColumnEntity> cql(String query) {
180+
Objects.requireNonNull(query, "query is required");
181+
final ResultSet resultSet = session.execute(query);
182+
return resultSet.all().stream().map(CassandraConverter::toDocumentEntity);
157183
}
158184

159185
@Override
160-
public Stream<ColumnEntity> select(ColumnQuery query, ConsistencyLevel level) throws NullPointerException {
161-
return null;
186+
public Stream<ColumnEntity> cql(String query, Map<String, Object> values) {
187+
Objects.requireNonNull(query, "query is required");
188+
Objects.requireNonNull(values, "values is required");
189+
final PreparedStatement prepare = session.prepare(query);
190+
BoundStatement statement = prepare.bind();
191+
for (Map.Entry<String, Object> entry : values.entrySet()) {
192+
final TypeCodec<Object> codec = CodecRegistry.DEFAULT.codecFor((Class<Object>) entry.getValue().getClass());
193+
statement = statement.set(entry.getKey(), entry.getValue(), codec);
194+
}
195+
final ResultSet resultSet = session.execute(statement);
196+
return resultSet.all().stream().map(CassandraConverter::toDocumentEntity);
162197
}
163198

164199
@Override
165-
public Stream<ColumnEntity> cql(String query) throws NullPointerException {
166-
return null;
200+
public Stream<ColumnEntity> execute(SimpleStatement statement) {
201+
Objects.requireNonNull(statement, "statement is required");
202+
final ResultSet resultSet = session.execute(statement);
203+
return resultSet.all().stream().map(CassandraConverter::toDocumentEntity);
167204
}
168205

169206
@Override
170-
public Stream<ColumnEntity> cql(String query, Map<String, Object> values) throws NullPointerException {
171-
return null;
207+
public CassandraPreparedStatement nativeQueryPrepare(String query) {
208+
Objects.requireNonNull(query, "query is required");
209+
final PreparedStatement prepare = session.prepare(query);
210+
return new CassandraPreparedStatement(prepare, session);
172211
}
173212

174-
@Override
175-
public Stream<ColumnEntity> execute(SimpleStatement statement) throws NullPointerException {
176-
return null;
213+
214+
CqlSession getSession() {
215+
return session;
177216
}
178217

218+
179219
@Override
180-
public CassandraPreparedStatement nativeQueryPrepare(String query) throws NullPointerException {
181-
return null;
220+
public String toString() {
221+
final StringBuilder sb = new StringBuilder("CassandraColumnFamilyManager{");
222+
sb.append("session=").append(session);
223+
sb.append('}');
224+
return sb.toString();
182225
}
183226
}
184227

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@
2626
import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
2727
import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry;
2828
import com.datastax.oss.driver.api.querybuilder.QueryBuilder;
29+
import com.datastax.oss.driver.api.querybuilder.insert.Insert;
2930
import com.datastax.oss.driver.api.querybuilder.insert.InsertInto;
3031
import com.datastax.oss.driver.api.querybuilder.insert.RegularInsert;
31-
import com.datastax.oss.driver.api.querybuilder.relation.Relation;
3232
import com.datastax.oss.driver.api.querybuilder.select.Select;
33-
import com.datastax.oss.driver.api.querybuilder.select.SelectFrom;
3433
import com.datastax.oss.driver.api.querybuilder.term.Term;
3534
import jakarta.nosql.Sort;
3635
import jakarta.nosql.SortType;
@@ -45,7 +44,6 @@
4544
import java.util.HashMap;
4645
import java.util.List;
4746
import java.util.Map;
48-
import java.util.Objects;
4947
import java.util.function.Function;
5048
import java.util.stream.Collectors;
5149

@@ -56,7 +54,7 @@ private QueryUtils() {
5654
}
5755

5856

59-
public static RegularInsert insert(ColumnEntity entity, String keyspace, CqlSession session, Duration duration) {
57+
static Insert insert(ColumnEntity entity, String keyspace, CqlSession session, Duration duration) {
6058

6159
Map<String, Term> values = new HashMap<>();
6260
InsertInto insert = QueryBuilder.insertInto(keyspace, entity.getName());
@@ -68,9 +66,10 @@ public static RegularInsert insert(ColumnEntity entity, String keyspace, CqlSess
6866
insertSingleField(c, values);
6967
}
7068
});
71-
final RegularInsert regularInsert = insert.values(values);
69+
70+
RegularInsert regularInsert = insert.values(values);
7271
if (duration != null) {
73-
regularInsert.usingTtl((int) duration.getSeconds());
72+
return regularInsert.usingTtl((int) duration.getSeconds());
7473
}
7574
return regularInsert;
7675
}

cassandra-driver/src/test/java/org/eclipse/jnosql/diana/cassandra/column/CassandraColumnFamilyManagerTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
import org.junit.jupiter.api.Test;
3131

3232
import java.time.Duration;
33+
import java.time.Instant;
34+
import java.time.LocalDate;
35+
import java.time.LocalDateTime;
3336
import java.time.Month;
3437
import java.time.ZoneId;
3538
import java.util.ArrayList;
@@ -433,9 +436,9 @@ public void shouldSupportDate() {
433436
ColumnEntity entity = ColumnEntity.of("history");
434437
entity.add(Column.of("name", "World war II"));
435438
ZoneId defaultZoneId = ZoneId.systemDefault();
436-
Date dateEnd = Date.from(java.time.LocalDate.of(1945, Month.SEPTEMBER, 2).atStartOfDay(defaultZoneId).toInstant());
437-
Calendar dataStart = Calendar.getInstance();
438-
//entity.add(Column.of("dataStart", LocalDate.fromYearMonthDay(1939, 9, 1)));
439+
Instant dateEnd = LocalDate.of(1945, Month.SEPTEMBER, 2).atStartOfDay(defaultZoneId).toInstant();
440+
LocalDateTime dataStart = LocalDateTime.now();
441+
entity.add(Column.of("dataStart", LocalDate.of(1939, 9, 1)));
439442
entity.add(Column.of("dateEnd", dateEnd));
440443
entityManager.insert(entity);
441444
ColumnQuery query = select().from("history")

cassandra-driver/src/test/java/org/eclipse/jnosql/diana/cassandra/column/ManagerFactorySupplier.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public enum ManagerFactorySupplier implements Supplier<CassandraColumnFamilyMana
3333
private final GenericContainer cassandra =
3434
new GenericContainer("cassandra:latest")
3535
.withExposedPorts(9042)
36+
.withEnv("JVM_OPTS","-Xms256m -Xmx1G")
3637
.waitingFor(Wait.defaultWaitStrategy());
3738

3839
{

0 commit comments

Comments
 (0)