diff --git a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java index 8c22191cc..884b858ff 100644 --- a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java +++ b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java @@ -155,6 +155,7 @@ public class CqlActivity extends SimpleActivity implements Activity, ActivityDef ParsedStmt parsed = stmtDef.getParsed().orError(); boolean prepared = Boolean.valueOf(stmtDef.getParams().getOrDefault("prepared", "true")); + boolean parametrized = Boolean.valueOf(stmtDef.getParams().getOrDefault("parametrized", "false")); long ratio = Long.valueOf(stmtDef.getParams().getOrDefault("ratio", "1")); Optional cl = Optional.ofNullable( @@ -218,7 +219,7 @@ public class CqlActivity extends SimpleActivity implements Activity, ActivityDef psummary.append(" idempotent=>").append(i); simpleStatement.setIdempotent(i); }); - template = new ReadyCQLStatementTemplate(getSession(), simpleStatement, ratio, parsed.getName()); + template = new ReadyCQLStatementTemplate(getSession(), simpleStatement, ratio, parsed.getName(), parametrized); } Optional.ofNullable(stmtDef.getParams().getOrDefault("save", null)) diff --git a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/SimpleStatementValuesBinder.java b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/SimpleStatementValuesBinder.java index 3b89e254c..bc7b5c353 100644 --- a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/SimpleStatementValuesBinder.java +++ b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/binders/SimpleStatementValuesBinder.java @@ -1,19 +1,55 @@ package io.nosqlbench.activitytype.cql.statements.binders; +import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.SimpleStatement; import com.datastax.driver.core.Statement; import io.nosqlbench.virtdata.core.bindings.ValuesArrayBinder; /** * This binder is not meant to be used with anything but DDL or statements - * which should not be trying to parameterize values in general. If this changes, - * support will be added for parameterized values here. + * which should not be trying to parameterize values in general. + * Parametrized values are still possible through parametrized constructor parameter. + * This binder should be avoided in favor of binders returning PreparedStatement */ public class SimpleStatementValuesBinder implements ValuesArrayBinder { + private final boolean parametrized; + + public SimpleStatementValuesBinder(boolean parametrized){ + this.parametrized = parametrized; + } + @Override public Statement bindValues(SimpleStatement context, Object[] values) { - return new SimpleStatement(context.getQueryString(), values); + String query = context.getQueryString(); + if(parametrized) { + String[] splits = query.split("\\?"); + assert splits.length == values.length+1; + StringBuilder sb = new StringBuilder(); + sb.append(splits[0]); + for(int i = 1; i < splits.length; i++) { + sb.append(values[i - 1]); + sb.append(splits[i]); + } + query = sb.toString(); + System.out.println(query); + + } + SimpleStatement simpleStatement = new SimpleStatement(query); + ConsistencyLevel cl = context.getConsistencyLevel(); + if(cl != null){ + simpleStatement.setConsistencyLevel(context.getConsistencyLevel()); + } + //Does it really makes senses? + ConsistencyLevel serial_cl = context.getSerialConsistencyLevel(); + if(serial_cl != null){ + simpleStatement.setSerialConsistencyLevel(context.getSerialConsistencyLevel()); + } + Boolean idempotent = context.isIdempotent(); + if(idempotent != null){ + simpleStatement.setIdempotent(idempotent); + } + return simpleStatement; } } diff --git a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java index c529e7d24..5dba10f70 100644 --- a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java +++ b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/statements/core/ReadyCQLStatementTemplate.java @@ -50,13 +50,13 @@ public class ReadyCQLStatementTemplate { this.ratio = ratio; } - public ReadyCQLStatementTemplate(Session session, SimpleStatement simpleStatement, long ratio, String name) { + public ReadyCQLStatementTemplate(Session session, SimpleStatement simpleStatement, long ratio, String name, boolean parametrized) { this.session = session; this.name = name; template = new ContextualBindingsArrayTemplate<>( simpleStatement, new BindingsTemplate(), - new SimpleStatementValuesBinder() + new SimpleStatementValuesBinder(parametrized) ); this.ratio = ratio; }