Skip to content

Commit 047d9ec

Browse files
committed
adds arangodb implementation
1 parent c3ee098 commit 047d9ec

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

arangodb-driver/src/main/java/org/jnosql/diana/arangodb/document/DefaultArangoDBDocumentCollectionManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@
2828
import org.jnosql.diana.api.writer.ValueWriterDecorator;
2929

3030
import java.time.Duration;
31+
import java.util.Collections;
3132
import java.util.List;
3233
import java.util.Map;
34+
import java.util.Objects;
3335
import java.util.Optional;
3436
import java.util.stream.StreamSupport;
3537

@@ -103,6 +105,14 @@ public List<DocumentEntity> select(DocumentQuery query) throws NullPointerExcept
103105
.collect(toList());
104106
}
105107

108+
@Override
109+
public long count(String documentCollection) {
110+
Objects.requireNonNull(documentCollection, "document collection is required");
111+
String aql = "RETURN LENGTH(" + documentCollection + ")";
112+
ArangoCursor<Object> query = arangoDB.db(database).query(aql, Collections.emptyMap(), null, Object.class);
113+
return StreamSupport.stream(query.spliterator(), false).findFirst().map(Long.class::cast).orElse(0L);
114+
}
115+
106116

107117
@Override
108118
public List<DocumentEntity> aql(String query, Map<String, Object> values) throws NullPointerException {

arangodb-driver/src/main/java/org/jnosql/diana/arangodb/document/DefaultArangoDBDocumentCollectionManagerAsync.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515
package org.jnosql.diana.arangodb.document;
1616

17+
import com.arangodb.ArangoCursor;
1718
import com.arangodb.ArangoCursorAsync;
1819
import com.arangodb.ArangoDB;
1920
import com.arangodb.ArangoDBAsync;
@@ -27,8 +28,10 @@
2728
import org.jnosql.diana.api.document.DocumentQuery;
2829

2930
import java.time.Duration;
31+
import java.util.Collections;
3032
import java.util.List;
3133
import java.util.Map;
34+
import java.util.Objects;
3235
import java.util.concurrent.CompletableFuture;
3336
import java.util.function.Consumer;
3437
import java.util.stream.StreamSupport;
@@ -144,6 +147,20 @@ public void select(DocumentQuery query, Consumer<List<DocumentEntity>> callBack)
144147

145148
}
146149

150+
@Override
151+
public void count(String documentCollection, Consumer<Long> callback) {
152+
Objects.requireNonNull(documentCollection, "document collection is required");
153+
Objects.requireNonNull(callback, "callback is required");
154+
String aql = "RETURN LENGTH(" + documentCollection + ")";
155+
CompletableFuture<ArangoCursorAsync<Object>> query = arangoDBAsync.db(database).query(aql, Collections.emptyMap(),
156+
null, Object.class);
157+
query.thenAccept(r -> {
158+
long count = StreamSupport.stream(r.spliterator(), false).findFirst().map(Long.class::cast).orElse(0L);
159+
callback.accept(count);
160+
});
161+
162+
}
163+
147164

148165
@Override
149166
public void aql(String query, Map<String, Object> values, Consumer<List<DocumentEntity>> callBack)
@@ -186,5 +203,4 @@ private void createConsumer(DocumentEntity entity, Consumer<DocumentEntity> call
186203
}
187204

188205

189-
190206
}

arangodb-driver/src/test/java/org/jnosql/diana/arangodb/document/ArangoDBDocumentCollectionManagerAsyncTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@
2828
import java.util.Map;
2929
import java.util.Random;
3030
import java.util.concurrent.atomic.AtomicBoolean;
31+
import java.util.concurrent.atomic.AtomicLong;
3132
import java.util.concurrent.atomic.AtomicReference;
33+
import java.util.function.Consumer;
3234

3335
import static org.awaitility.Awaitility.await;
3436
import static org.jnosql.diana.api.document.query.DocumentQueryBuilder.delete;
3537
import static org.jnosql.diana.api.document.query.DocumentQueryBuilder.select;
3638
import static org.jnosql.diana.arangodb.document.DocumentConfigurationUtils.getConfiguration;
39+
import static org.junit.jupiter.api.Assertions.assertEquals;
3740
import static org.junit.jupiter.api.Assertions.assertFalse;
41+
import static org.junit.jupiter.api.Assertions.assertTrue;
3842

3943

4044
public class ArangoDBDocumentCollectionManagerAsyncTest {
@@ -147,6 +151,24 @@ public void shouldRunAQL() {
147151
assertFalse(entities.isEmpty());
148152
}
149153

154+
@Test
155+
public void shouldCount() {
156+
DocumentEntity entity = getEntity();
157+
AtomicBoolean condition = new AtomicBoolean();
158+
AtomicLong value = new AtomicLong(0L);
159+
entityManagerAsync.insert(entity, d -> condition.set(true));
160+
161+
await().untilTrue(condition);
162+
condition.set(false);
163+
Consumer<Long> callback = l -> {
164+
condition.set(true);
165+
value.set(l);
166+
};
167+
entityManagerAsync.count(COLLECTION_NAME, callback);
168+
await().untilTrue(condition);
169+
assertTrue(value.get() > 0);
170+
171+
}
150172

151173
private DocumentEntity getEntity() {
152174
DocumentEntity entity = DocumentEntity.of(COLLECTION_NAME);

arangodb-driver/src/test/java/org/jnosql/diana/arangodb/document/ArangoDBDocumentCollectionManagerTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,14 @@ private DocumentEntity createSubdocumentList() {
188188
return entity;
189189
}
190190

191+
@Test
192+
public void shouldCount() {
193+
DocumentEntity entity = getEntity();
194+
DocumentEntity entitySaved = entityManager.insert(entity);
195+
196+
assertTrue(entityManager.count(COLLECTION_NAME) > 0);
197+
}
198+
191199

192200
private DocumentEntity getEntity() {
193201
DocumentEntity entity = DocumentEntity.of(COLLECTION_NAME);

0 commit comments

Comments
 (0)