mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2026-10-13 09:52:01 -05:00
split legacyGetSortFromOp/getSortFromOp and reinstate legacy sort for legacy ops
This commit is contained in:
1 parent
aca86cdd7d
commit
8a3b2d60b1
16 files changed
+120
-57
No files matched your search
+3
-3
@@ -55,9 +55,9 @@ public class DataApiCollectionDeleteOneOpDispenser extends DataApiOpDispenser {
|
||||
|
||||
private CollectionDeleteOneOptions getCollectionDeleteOneOptions(ParsedOp op, long l) {
|
||||
CollectionDeleteOneOptions options = new CollectionDeleteOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
+3
-3
@@ -56,9 +56,9 @@ public class DataApiCollectionFindOneAndDeleteOpDispenser extends DataApiOpDispe
|
||||
|
||||
private CollectionFindOneAndDeleteOptions getCollectionFindOneAndDeleteOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneAndDeleteOptions options = new CollectionFindOneAndDeleteOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -60,9 +60,9 @@ public class DataApiCollectionFindOneAndReplaceOpDispenser extends DataApiOpDisp
|
||||
|
||||
private CollectionFindOneAndReplaceOptions getCollectionFindOneAndReplaceOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneAndReplaceOptions options = new CollectionFindOneAndReplaceOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -59,10 +59,10 @@ public class DataApiCollectionFindOneAndUpdateOpDispenser extends DataApiOpDispe
|
||||
|
||||
private CollectionFindOneAndUpdateOptions getCollectionFindOneAndUpdateOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneAndUpdateOptions options = new CollectionFindOneAndUpdateOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
Boolean upsert = getUpsertFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
if ( upsert != null ){
|
||||
options = options.upsert(upsert);
|
||||
|
||||
+3
-3
@@ -55,9 +55,9 @@ public class DataApiCollectionFindOneOpDispenser extends DataApiOpDispenser {
|
||||
|
||||
private CollectionFindOneOptions getCollectionFindOneOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneOptions options = new CollectionFindOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -55,9 +55,9 @@ public class DataApiCollectionFindOpDispenser extends DataApiOpDispenser {
|
||||
|
||||
private CollectionFindOptions getCollectionFindOptions(ParsedOp op, long l) {
|
||||
CollectionFindOptions options = new CollectionFindOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -55,9 +55,9 @@ public class DataApiCollectionLegacyDeleteOneOpDispenser extends DataApiOpDispen
|
||||
|
||||
private CollectionDeleteOneOptions getCollectionDeleteOneOptions(ParsedOp op, long l) {
|
||||
CollectionDeleteOneOptions options = new CollectionDeleteOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
+3
-3
@@ -56,9 +56,9 @@ public class DataApiCollectionLegacyFindOneAndDeleteOpDispenser extends DataApiO
|
||||
|
||||
private CollectionFindOneAndDeleteOptions getCollectionFindOneAndDeleteOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneAndDeleteOptions options = new CollectionFindOneAndDeleteOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -63,9 +63,9 @@ public class DataApiCollectionLegacyFindOneAndReplaceOpDispenser extends DataApi
|
||||
|
||||
private CollectionFindOneAndReplaceOptions getCollectionFindOneAndReplaceOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneAndReplaceOptions options = new CollectionFindOneAndReplaceOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -58,10 +58,10 @@ public class DataApiCollectionLegacyFindOneAndUpdateOpDispenser extends DataApiO
|
||||
|
||||
private CollectionFindOneAndUpdateOptions getCollectionLegacyFindOneAndUpdateOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneAndUpdateOptions options = new CollectionFindOneAndUpdateOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
Boolean upsert = getUpsertFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
if ( upsert != null ){
|
||||
options = options.upsert(upsert);
|
||||
|
||||
+3
-3
@@ -55,9 +55,9 @@ public class DataApiCollectionLegacyFindOneOpDispenser extends DataApiOpDispense
|
||||
|
||||
private CollectionFindOneOptions getCollectionFindOneOptions(ParsedOp op, long l) {
|
||||
CollectionFindOneOptions options = new CollectionFindOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -55,9 +55,9 @@ public class DataApiCollectionLegacyFindOpDispenser extends DataApiOpDispenser {
|
||||
|
||||
private CollectionFindOptions getCollectionFindOptions(ParsedOp op, long l) {
|
||||
CollectionFindOptions options = new CollectionFindOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-3
@@ -63,9 +63,9 @@ public class DataApiCollectionLegacyReplaceOneOpDispenser extends DataApiOpDispe
|
||||
|
||||
private CollectionReplaceOneOptions getCollectionReplaceOneOptions(ParsedOp op, long l) {
|
||||
CollectionReplaceOneOptions options = new CollectionReplaceOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
Projection[] projection = getProjectionFromOp(op, l);
|
||||
if (projection != null) {
|
||||
|
||||
+3
-4
@@ -60,11 +60,10 @@ public class DataApiCollectionLegacyUpdateOneOpDispenser extends DataApiOpDispen
|
||||
|
||||
private CollectionUpdateOneOptions getCollectionUpdateOneOptions(ParsedOp op, long l) {
|
||||
CollectionUpdateOneOptions options = new CollectionUpdateOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
Sort[] sorts = legacyGetSortFromOp(op, l);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
|
||||
Optional<LongFunction<Boolean>> upsertFunction = op.getAsOptionalFunction("upsert", Boolean.class);
|
||||
if (upsertFunction.isPresent()) {
|
||||
options = options.upsert(upsertFunction.get().apply(l));
|
||||
|
||||
+3
-3
@@ -60,10 +60,10 @@ public class DataApiCollectionUpdateOneOpDispenser extends DataApiOpDispenser {
|
||||
|
||||
private CollectionUpdateOneOptions getCollectionUpdateOneOptions(ParsedOp op, long l) {
|
||||
CollectionUpdateOneOptions options = new CollectionUpdateOneOptions();
|
||||
Sort sort = getSortFromOp(op, l);
|
||||
Sort[] sorts = getSortFromOp(op, l);
|
||||
Boolean upsert = getUpsertFromOp(op, l);
|
||||
if (sort != null) {
|
||||
options = options.sort(sort);
|
||||
if (sorts != null) {
|
||||
options = options.sort(sorts);
|
||||
}
|
||||
if ( upsert != null ){
|
||||
options = options.upsert(upsert);
|
||||
|
||||
+75
-11
@@ -39,6 +39,7 @@ import io.nosqlbench.adapters.api.templating.ParsedOp;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.LongFunction;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp, DataApiSpace> {
|
||||
@@ -52,8 +53,8 @@ public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp,
|
||||
this.spaceFunction = adapter.getSpaceFunc(op);
|
||||
}
|
||||
|
||||
protected Sort getSortFromOp(ParsedOp op, long l) {
|
||||
Sort sort = null;
|
||||
protected Sort[] getSortFromOp(ParsedOp op, long l) {
|
||||
List<Sort> sorts = null;
|
||||
|
||||
long sortKeyCount = Stream.of("sort", "vector", "vectorize").filter(op::isDefined).count();
|
||||
if (sortKeyCount > 1) {
|
||||
@@ -66,19 +67,30 @@ public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp,
|
||||
if (sortFunction.isPresent()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
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 = Sort.ascending(sortField);
|
||||
case "desc" -> sort = Sort.descending(sortField);
|
||||
}
|
||||
|
||||
sorts = sortFields.entrySet().stream()
|
||||
.map(e -> {
|
||||
String field = e.getKey();
|
||||
String sortOrder = String.valueOf(e.getValue()).trim();
|
||||
if (sortOrder.equalsIgnoreCase("asc") || sortOrder.equalsIgnoreCase("ascending")) {
|
||||
return Sort.ascending(field);
|
||||
} else if (sortOrder.equalsIgnoreCase("desc") || sortOrder.equalsIgnoreCase("descending")) {
|
||||
return Sort.descending(field);
|
||||
} else {
|
||||
throw new OpConfigError(
|
||||
"Invalid sort order '" + sortOrder + "' for field '" + field +
|
||||
"'; expected 'asc' or 'desc' (case-insensitive)."
|
||||
);
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
if (op.isDefined("vector")) {
|
||||
float[] vector = getVectorValues(op, l);
|
||||
if (vector != null) {
|
||||
// TODO use DataAPIVector as soon as the client allows here:
|
||||
sort = Sort.vector(vector);
|
||||
sorts = List.of(Sort.vector(vector));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,11 +98,14 @@ public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp,
|
||||
Optional<LongFunction<String>> vzeFunction = op.getAsOptionalFunction("vectorize", String.class);
|
||||
if (vzeFunction.isPresent()){
|
||||
String vectorize = vzeFunction.get().apply(l);
|
||||
sort = Sort.vectorize(vectorize);
|
||||
sorts = List.of(Sort.vectorize(vectorize));
|
||||
}
|
||||
}
|
||||
|
||||
return sort;
|
||||
if (sorts != null) {
|
||||
return sorts.toArray(new Sort[0]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected Filter getFilterFromOp(ParsedOp op, long l) {
|
||||
@@ -534,6 +549,55 @@ public abstract class DataApiOpDispenser extends BaseOpDispenser<DataApiBaseOp,
|
||||
return filter;
|
||||
}
|
||||
|
||||
/*
|
||||
sort:
|
||||
field: the_field
|
||||
type: desc
|
||||
*/
|
||||
protected Sort[] legacyGetSortFromOp(ParsedOp op, long l) {
|
||||
List<Sort> sorts = null;
|
||||
|
||||
long sortKeyCount = Stream.of("sort", "vector", "vectorize").filter(op::isDefined).count();
|
||||
if (sortKeyCount > 1) {
|
||||
throw new OpConfigError(
|
||||
"Can sort by only one of: 'sort' (regular asc/desc), 'vector', 'vectorize' in an op."
|
||||
);
|
||||
}
|
||||
|
||||
Optional<LongFunction<Map>> sortFunction = op.getAsOptionalFunction("sort", Map.class);
|
||||
if (sortFunction.isPresent()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String,Object> sortFields = sortFunction.get().apply(l);
|
||||
String sortOrder = sortFields.get("type").toString();
|
||||
String sortField = sortFields.get("field").toString();
|
||||
switch(sortOrder) {
|
||||
case "asc" -> sorts = List.of(Sort.ascending(sortField));
|
||||
case "desc" -> sorts = List.of(Sort.descending(sortField));
|
||||
}
|
||||
}
|
||||
|
||||
if (op.isDefined("vector")) {
|
||||
float[] vector = getVectorValues(op, l);
|
||||
if (vector != null) {
|
||||
// TODO use DataAPIVector as soon as the client allows here:
|
||||
sorts = List.of(Sort.vector(vector));
|
||||
}
|
||||
}
|
||||
|
||||
if (op.isDefined("vectorize")) {
|
||||
Optional<LongFunction<String>> vzeFunction = op.getAsOptionalFunction("vectorize", String.class);
|
||||
if (vzeFunction.isPresent()){
|
||||
String vectorize = vzeFunction.get().apply(l);
|
||||
sorts = List.of(Sort.vectorize(vectorize));
|
||||
}
|
||||
}
|
||||
|
||||
if (sorts != null) {
|
||||
return sorts.toArray(new Sort[0]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected CollectionDefinition legacyGetCollectionDefinitionFromOp(ParsedOp op, long l) {
|
||||
CollectionDefinition optionsBldr = new CollectionDefinition();
|
||||
|
||||
Reference in new issue
Block a user