Skip to content

Commit 929e54a

Browse files
committed
feat: add count method for SelectQuery support
Implemented a new count method that accepts a SelectQuery object, allowing for more flexible counting of query results in the DefaultOracleNoSQLDocumentManager. Signed-off-by: Maximillian Arruda <[email protected]>
1 parent 4f8f861 commit 929e54a

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

jnosql-oracle-nosql/src/main/java/org/eclipse/jnosql/databases/oracle/communication/DefaultOracleNoSQLDocumentManager.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,11 @@ public Stream<CommunicationEntity> select(SelectQuery query) {
178178
return entities.stream();
179179
}
180180

181-
182-
183181
@Override
184182
public long count(String documentCollection) {
185183
Objects.requireNonNull(documentCollection, "documentCollection is required");
186184

187-
var prepReq = new PrepareRequest().setStatement("select count(*) as count from " + name() + " where " +
185+
var prepReq = new PrepareRequest().setStatement("select count(*) as count from " + name() + " where " +
188186
ENTITY +" = ?");
189187
var prepRes = serviceHandle.prepare(prepReq);
190188
var preparedStatement = prepRes.getPreparedStatement();
@@ -198,6 +196,26 @@ public long count(String documentCollection) {
198196
return 0;
199197
}
200198

199+
@Override
200+
public long count(SelectQuery query) {
201+
Objects.requireNonNull(query, "query is required");
202+
var countBuilder = new SelectCountBuilder(query, table);
203+
var oracleQuery = countBuilder.get();
204+
205+
var prepReq = new PrepareRequest().setStatement(oracleQuery.query());
206+
var prepRes = serviceHandle.prepare(prepReq);
207+
var preparedStatement = prepRes.getPreparedStatement();
208+
for (int index = 0; index < oracleQuery.params().size(); index++) {
209+
preparedStatement.setVariable((index + 1), oracleQuery.params().get(index));
210+
}
211+
QueryResult queryResult = serviceHandle.query(new QueryRequest().setPreparedStatement(prepRes));
212+
List<MapValue> results = queryResult.getResults();
213+
if(results.size() == 1) {
214+
return results.get(0).get(SelectCountBuilder.COUNT).asLong().getValue();
215+
}
216+
return 0;
217+
}
218+
201219
private static boolean isNotOracleField(Map.Entry<String, FieldValue> entry) {
202220
return !entry.getKey().equals(ENTITY) && !entry.getKey().equals(JSON_FIELD) && !entry.getKey().equals(ORACLE_ID);
203221
}

0 commit comments

Comments
 (0)