diff --git a/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedOp.java b/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedOp.java index 77fa6b7cf..1f4b0a2a0 100644 --- a/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedOp.java +++ b/adapters-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedOp.java @@ -446,6 +446,13 @@ public class ParsedOp implements LongFunction>, StaticFieldReader public T getStaticConfigOr(String name, T defaultValue) { return tmap.getStaticConfigOr(name, defaultValue); } + public T takeStaticConfigOr(String name, T defaultValue) { + return tmap.takeStaticConfigOr(name, defaultValue); + } + public String getStaticConfig(String name, Class clazz) { + return tmap.getStaticConfig(name, clazz); + } + public Optional getOptionalStaticConfig(String name, Class type) { return tmap.getOptionalStaticConfig(name, type); @@ -476,6 +483,11 @@ public class ParsedOp implements LongFunction>, StaticFieldReader return Optional.ofNullable(tmap.getStaticValue(field, classOfT)); } + + public Optional takeOptionalStaticValue(String field, Class classOfT) { + return Optional.ofNullable(tmap.takeStaticValue(field, classOfT)); + } + /** * Get the named field value for a given long input. This uses parameter type inference -- The casting * to the return type will be based on the type of any assignment or casting on the caller's side. diff --git a/virtdata-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedTemplateMap.java b/virtdata-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedTemplateMap.java index aaeb3b800..05afc43a7 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedTemplateMap.java +++ b/virtdata-api/src/main/java/io/nosqlbench/engine/api/templating/ParsedTemplateMap.java @@ -227,6 +227,10 @@ public class ParsedTemplateMap implements LongFunction>, StaticFi return (T) statics.get(field); } + public T takeStaticValue(String field, Class classOfT) { + return (T) statics.remove(field); + } + /** * Get the static value for the provided name, cast to the required type, where the type is inferred * from the calling context. @@ -294,6 +298,41 @@ public class ParsedTemplateMap implements LongFunction>, StaticFi } } + public String getStaticConfig(String name, Class clazz) { + if (statics.containsKey(name)) { + return NBTypeConverter.convert(statics.get(name),clazz); + } + for (Map cfgsource : cfgsources) { + if (cfgsource.containsKey(name)) { + return NBTypeConverter.convert(cfgsource.get(name),clazz); + } + } + if (dynamics.containsKey(name)) { + throw new OpConfigError("static config field '" + name + "' was defined dynamically. This may be supportable if the driver developer" + + "updates the op mapper to support this field as a dynamic field, but it is not yet supported."); + } + throw new OpConfigError("static config field '" + name + "' was requested, but it does not exist"); + } + + public T takeStaticConfigOr(String name, T defaultValue) { + if (statics.containsKey(name)) { + Object value = statics.remove(name); + return NBTypeConverter.convertOr(value, defaultValue); + } + for (Map cfgsource : cfgsources) { + if (cfgsource.containsKey(name)) { + return NBTypeConverter.convertOr(cfgsource.get(name), defaultValue); + } + } + if (dynamics.containsKey(name)) { + throw new OpConfigError("static config field '" + name + "' was defined dynamically. This may be supportable if the driver developer" + + "updates the op mapper to support this field as a dynamic field, but it is not yet supported."); + } else { + return defaultValue; + } + } + + public Optional getOptionalStaticConfig(String name, Class type) { if (statics.containsKey(name)) { return Optional.of(NBTypeConverter.convert(statics.get(name), type));