move cql capture to dispenser

This commit is contained in:
Jonathan Shook
2025-01-03 15:09:07 -06:00
parent 1a61846ea0
commit de2e609ff4
2 changed files with 47 additions and 30 deletions

View File

@@ -18,12 +18,26 @@ package io.nosqlbench.adapter.cqld4.opdispensers;
*/ */
import com.datastax.oss.driver.api.core.cql.ColumnDefinition;
import com.datastax.oss.driver.api.core.cql.ColumnDefinitions;
import com.datastax.oss.driver.api.core.cql.Row;
import io.nosqlbench.adapter.cqld4.Cqld4DriverAdapter; import io.nosqlbench.adapter.cqld4.Cqld4DriverAdapter;
import io.nosqlbench.adapter.cqld4.optypes.Cqld4BaseOp; import io.nosqlbench.adapter.cqld4.optypes.Cqld4BaseOp;
import io.nosqlbench.adapter.cqld4.optypes.Cqld4CqlOp; import io.nosqlbench.adapter.cqld4.optypes.Cqld4CqlOp;
import io.nosqlbench.adapters.api.templating.ParsedOp; import io.nosqlbench.adapters.api.templating.ParsedOp;
import io.nosqlbench.virtdata.core.templates.CapturePoint;
import io.nosqlbench.virtdata.core.templates.CapturePointException;
import io.nosqlbench.virtdata.core.templates.CapturePoints;
import io.nosqlbench.virtdata.core.templates.UniformVariableCapture;
public abstract class Cqld4CqlBaseOpDispenser<T extends Cqld4CqlOp> extends Cqld4BaseOpDispenser<T> { import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
public abstract class Cqld4CqlBaseOpDispenser<T extends Cqld4CqlOp> extends Cqld4BaseOpDispenser<T>
implements UniformVariableCapture<List<Row>>
{
public Cqld4CqlBaseOpDispenser(Cqld4DriverAdapter adapter, ParsedOp op) { public Cqld4CqlBaseOpDispenser(Cqld4DriverAdapter adapter, ParsedOp op) {
super(adapter, op); super(adapter, op);
@@ -31,4 +45,35 @@ public abstract class Cqld4CqlBaseOpDispenser<T extends Cqld4CqlOp> extends Cqld
@Override @Override
public abstract T getOp(long cycle); public abstract T getOp(long cycle);
@Override
public Function<List<Row>, Map<String, ?>> captureF(CapturePoints<List<Row>> points) {
Function<List<Row>, Map<String, ?>> f = (List<Row> result) -> {
if (result.size() != 1) {
throw new CapturePointException(
"result contained " + result.size() + " rows, required exactly 1");
}
Row row = result.get(0);
ColumnDefinitions coldefs = row.getColumnDefinitions();
Map<String, Object> values = new HashMap<>(coldefs.size());
if (points.isGlob()) {
for (ColumnDefinition coldef : coldefs) {
String colname = coldef.getName().toString();
values.put(colname, row.getObject(colname));
}
} else {
for (CapturePoint<List<Row>> point : points) {
String sourceName = point.getSourceName();
Object value = row.getObject(point.getSourceName());
Object recast = point.getAsCast().cast(value);
values.put(point.getAsName(), recast);
}
}
return values;
};
return f;
}
} }

View File

@@ -50,7 +50,7 @@ import java.util.function.Function;
public abstract class Cqld4CqlOp public abstract class Cqld4CqlOp
implements Cqld4BaseOp<List<Row>>, UniformVariableCapture<List<Row>>, OpGenerator, OpResultSize { implements Cqld4BaseOp<List<Row>>, OpGenerator, OpResultSize {
private final static Logger logger = LogManager.getLogger(Cqld4CqlOp.class); private final static Logger logger = LogManager.getLogger(Cqld4CqlOp.class);
@@ -168,34 +168,6 @@ public abstract class Cqld4CqlOp
return next; return next;
} }
@Override
public Function<List<Row>, Map<String, ?>> captureF(CapturePoints<List<Row>> points) {
Function<List<Row>,Map<String,?>> f = (List<Row> result) -> {
if (result.size()!=1) {
throw new CapturePointException("result contained " + result.size() + " rows, required exactly 1");
}
Row row = result.get(0);
ColumnDefinitions coldefs = row.getColumnDefinitions();
Map<String,Object> values = new HashMap<>(coldefs.size());
if (points.isGlob()) {
for (ColumnDefinition coldef : coldefs) {
String colname = coldef.getName().toString();
values.put(colname,row.getObject(colname));
}
} else {
for (CapturePoint<List<Row>> point : points) {
String sourceName = point.getSourceName();
Object value = row.getObject(point.getSourceName());
Object recast = point.getAsCast().cast(value);
values.put(point.getAsName(), recast);
}
}
return values;
};
return f;
}
public abstract Statement<?> getStmt(); public abstract Statement<?> getStmt();