refactor common code

This commit is contained in:
MarkWolters 2024-05-08 18:45:02 -04:00
parent f7ea27ae5e
commit 8fb7b80c26
5 changed files with 63 additions and 58 deletions

View File

@ -17,10 +17,7 @@
package io.nosqlbench.adapter.dataapi.opdispensers;
import com.datastax.astra.client.Database;
import com.datastax.astra.client.model.DeleteOneOptions;
import com.datastax.astra.client.model.Filter;
import com.datastax.astra.client.model.Filters;
import com.datastax.astra.client.model.Sorts;
import com.datastax.astra.client.model.*;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapter.dataapi.ops.DataApiDeleteOneOp;
@ -45,17 +42,8 @@ public class DataApiDeleteOneOpDispenser extends DataApiOpDispenser {
return (l) -> {
Database db = spaceFunction.apply(l).getDatabase();
Filter filter = getFilterFromOp(op, l);
DeleteOneOptions options = new DeleteOneOptions();
Optional<LongFunction<Map>> sortFunction = op.getAsOptionalFunction("sort", Map.class);
if (sortFunction.isPresent()) {
Map<String,Object> sortFields = sortFunction.get().apply(l);
String sortOrder = sortFields.get("type").toString();
String sortField = sortFields.get("field").toString();
switch(sortOrder) {
case "asc" -> options = options.sort(Sorts.ascending(sortField));
case "desc" -> options = options.sort(Sorts.descending(sortField));
}
}
DeleteOneOptions options = getDeleteOneOptions(op, l);
return new DataApiDeleteOneOp(
db,
db.getCollection(targetFunction.apply(l)),
@ -65,6 +53,15 @@ public class DataApiDeleteOneOpDispenser extends DataApiOpDispenser {
};
}
private DeleteOneOptions getDeleteOneOptions(ParsedOp op, long l) {
DeleteOneOptions options = new DeleteOneOptions();
Sort sort = getSortFromOp(op, l);
if (sort != null) {
options = options.sort(sort);
}
return options;
}
@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);

View File

@ -18,9 +18,8 @@ package io.nosqlbench.adapter.dataapi.opdispensers;
import com.datastax.astra.client.Database;
import com.datastax.astra.client.model.Filter;
import com.datastax.astra.client.model.Filters;
import com.datastax.astra.client.model.FindOneAndDeleteOptions;
import com.datastax.astra.client.model.Sorts;
import com.datastax.astra.client.model.Sort;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapter.dataapi.ops.DataApiFindOneAndDeleteOp;
@ -28,8 +27,6 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Map;
import java.util.Optional;
import java.util.function.LongFunction;
public class DataApiFindOneAndDeleteOpDispenser extends DataApiOpDispenser {
@ -45,17 +42,8 @@ public class DataApiFindOneAndDeleteOpDispenser extends DataApiOpDispenser {
return (l) -> {
Database db = spaceFunction.apply(l).getDatabase();
Filter filter = getFilterFromOp(op, l);
FindOneAndDeleteOptions options = new FindOneAndDeleteOptions();
Optional<LongFunction<Map>> sortFunction = op.getAsOptionalFunction("sort", Map.class);
if (sortFunction.isPresent()) {
Map<String,Object> sortFields = sortFunction.get().apply(l);
String sortOrder = sortFields.get("type").toString();
String sortField = sortFields.get("field").toString();
switch(sortOrder) {
case "asc" -> options = options.sort(Sorts.ascending(sortField));
case "desc" -> options = options.sort(Sorts.descending(sortField));
}
}
FindOneAndDeleteOptions options = getFindOneAndDeleteOptions(op, l);
return new DataApiFindOneAndDeleteOp(
db,
db.getCollection(targetFunction.apply(l)),
@ -65,6 +53,15 @@ public class DataApiFindOneAndDeleteOpDispenser extends DataApiOpDispenser {
};
}
private FindOneAndDeleteOptions getFindOneAndDeleteOptions(ParsedOp op, long l) {
FindOneAndDeleteOptions options = new FindOneAndDeleteOptions();
Sort sort = getSortFromOp(op, l);
if (sort != null) {
options = options.sort(sort);
}
return options;
}
@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);

View File

@ -19,7 +19,7 @@ package io.nosqlbench.adapter.dataapi.opdispensers;
import com.datastax.astra.client.Database;
import com.datastax.astra.client.model.Filter;
import com.datastax.astra.client.model.FindOneOptions;
import com.datastax.astra.client.model.Sorts;
import com.datastax.astra.client.model.Sort;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapter.dataapi.ops.DataApiFindOneOp;
@ -27,8 +27,6 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Map;
import java.util.Optional;
import java.util.function.LongFunction;
public class DataApiFindOneOpDispenser extends DataApiOpDispenser {
@ -43,17 +41,7 @@ public class DataApiFindOneOpDispenser extends DataApiOpDispenser {
return (l) -> {
Database db = spaceFunction.apply(l).getDatabase();
Filter filter = getFilterFromOp(op, l);
FindOneOptions options = new FindOneOptions();
Optional<LongFunction<Map>> sortFunction = op.getAsOptionalFunction("sort", Map.class);
if (sortFunction.isPresent()) {
Map<String,Object> sortFields = sortFunction.get().apply(l);
String sortOrder = sortFields.get("type").toString();
String sortField = sortFields.get("field").toString();
switch(sortOrder) {
case "asc" -> options = options.sort(Sorts.ascending(sortField));
case "desc" -> options = options.sort(Sorts.descending(sortField));
}
}
FindOneOptions options = getFindOneOptions(op, l);
return new DataApiFindOneOp(
db,
db.getCollection(targetFunction.apply(l)),
@ -63,6 +51,15 @@ public class DataApiFindOneOpDispenser extends DataApiOpDispenser {
};
}
private FindOneOptions getFindOneOptions(ParsedOp op, long l) {
FindOneOptions options = new FindOneOptions();
Sort sort = getSortFromOp(op, l);
if (sort != null) {
options = options.sort(sort);
}
return options;
}
@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);

View File

@ -19,7 +19,7 @@ package io.nosqlbench.adapter.dataapi.opdispensers;
import com.datastax.astra.client.Database;
import com.datastax.astra.client.model.Filter;
import com.datastax.astra.client.model.FindOptions;
import com.datastax.astra.client.model.Sorts;
import com.datastax.astra.client.model.Sort;
import io.nosqlbench.adapter.dataapi.DataApiDriverAdapter;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapter.dataapi.ops.DataApiFindOp;
@ -27,8 +27,6 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Map;
import java.util.Optional;
import java.util.function.LongFunction;
public class DataApiFindOpDispenser extends DataApiOpDispenser {
@ -43,17 +41,7 @@ public class DataApiFindOpDispenser extends DataApiOpDispenser {
return (l) -> {
Database db = spaceFunction.apply(l).getDatabase();
Filter filter = getFilterFromOp(op, l);
FindOptions options = new FindOptions();
Optional<LongFunction<Map>> sortFunction = op.getAsOptionalFunction("sort", Map.class);
if (sortFunction.isPresent()) {
Map<String,Object> sortFields = sortFunction.get().apply(l);
String sortOrder = sortFields.get("type").toString();
String sortField = sortFields.get("field").toString();
switch(sortOrder) {
case "asc" -> options = options.sort(Sorts.ascending(sortField));
case "desc" -> options = options.sort(Sorts.descending(sortField));
}
}
FindOptions options = getFindOptions(op, l);
return new DataApiFindOp(
db,
db.getCollection(targetFunction.apply(l)),
@ -63,6 +51,15 @@ public class DataApiFindOpDispenser extends DataApiOpDispenser {
};
}
private FindOptions getFindOptions(ParsedOp op, long l) {
FindOptions options = new FindOptions();
Sort sort = getSortFromOp(op, l);
if (sort != null) {
options = options.sort(sort);
}
return options;
}
@Override
public DataApiBaseOp getOp(long value) {
return opFunction.apply(value);

View File

@ -18,6 +18,8 @@ package io.nosqlbench.adapter.dataapi.opdispensers;
import com.datastax.astra.client.model.Filter;
import com.datastax.astra.client.model.Filters;
import com.datastax.astra.client.model.Sort;
import com.datastax.astra.client.model.Sorts;
import io.nosqlbench.adapter.dataapi.DataApiSpace;
import io.nosqlbench.adapter.dataapi.ops.DataApiBaseOp;
import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
@ -41,6 +43,21 @@ public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp,
this.spaceFunction = adapter.getSpaceFunc(op);
}
protected Sort getSortFromOp(ParsedOp op, long l) {
Sort sort = null;
Optional<LongFunction<Map>> sortFunction = op.getAsOptionalFunction("sort", Map.class);
if (sortFunction.isPresent()) {
Map<String,Object> sortFields = sortFunction.get().apply(l);
String sortOrder = sortFields.get("type").toString();
String sortField = sortFields.get("field").toString();
switch(sortOrder) {
case "asc" -> sort = Sorts.ascending(sortField);
case "desc" -> sort = Sorts.descending(sortField);
}
}
return sort;
}
protected Filter getFilterFromOp(ParsedOp op, long l) {
Filter filter = null;
Optional<LongFunction<Map>> filterFunction = op.getAsOptionalFunction("filters", Map.class);