Search in sources :

Example 1 with DataMapper

use of io.nosqlbench.virtdata.core.bindings.DataMapper in project nosqlbench by nosqlbench.

the class ParsedTemplateMap method applyTemplateFields.

// For now, we only allow bind points to reference bindings, not other op template
// fields. This seems like the saner and less confusing approach, so implementing
// op field references should be left until it is requested if at all
private void applyTemplateFields(Map<String, Object> map, Map<String, String> bindings) {
    this.specmap = map;
    this.bindings = bindings;
    map.forEach((k, v) -> {
        if (v instanceof CharSequence) {
            ParsedTemplate pt = ParsedTemplate.of(((CharSequence) v).toString(), bindings);
            this.captures.add(pt.getCaptures());
            switch(pt.getType()) {
                case literal:
                    statics.put(k, ((CharSequence) v).toString());
                    protomap.put(k, ((CharSequence) v).toString());
                    break;
                case bindref:
                    String spec = pt.asBinding().orElseThrow().getBindspec();
                    if (spec == null) {
                        throw new OpConfigError("Empty binding spec for '" + k + "'");
                    }
                    Optional<DataMapper<Object>> mapper = VirtData.getOptionalMapper(spec);
                    dynamics.put(k, mapper.orElseThrow());
                    protomap.put(k, null);
                    break;
                case concat:
                    StringBindings sb = new StringBindings(pt);
                    dynamics.put(k, sb);
                    protomap.put(k, null);
                    break;
            }
        } else if (v instanceof Map) {
            ((Map) v).keySet().forEach(smk -> {
                if (!CharSequence.class.isAssignableFrom(smk.getClass())) {
                    throw new OpConfigError("Only string keys are allowed in submaps.");
                }
            });
            Map<String, Object> submap = (Map<String, Object>) v;
            ParsedTemplateMap subtpl = new ParsedTemplateMap(submap, bindings, cfgsources);
            if (subtpl.isStatic()) {
                statics.put(k, submap);
                protomap.put(k, submap);
            } else {
                dynamics.put(k, subtpl);
                protomap.put(k, null);
            }
        } else if (v instanceof List) {
            List<Object> sublist = (List<Object>) v;
            ParsedTemplateList subtpl = new ParsedTemplateList(sublist, bindings, cfgsources);
            if (subtpl.isStatic()) {
                statics.put(k, sublist);
                protomap.put(k, sublist);
            } else {
                dynamics.put(k, subtpl);
                protomap.put(k, null);
            }
        } else {
            // Eventually, nested and mixed static dynamic structure could be supported, but
            // it would be complex to implement and also not that efficient, so let's just copy
            // structure for now
            statics.put(k, v);
            protomap.put(k, v);
        }
    });
}
Also used : ListBinder(io.nosqlbench.engine.api.templating.binders.ListBinder) StringBindings(io.nosqlbench.virtdata.core.templates.StringBindings) java.util(java.util) ParsedTemplate(io.nosqlbench.virtdata.core.templates.ParsedTemplate) LongFunction(java.util.function.LongFunction) ArrayBinder(io.nosqlbench.engine.api.templating.binders.ArrayBinder) CapturePoint(io.nosqlbench.virtdata.core.templates.CapturePoint) BindPoint(io.nosqlbench.virtdata.core.templates.BindPoint) Function(java.util.function.Function) BasicError(io.nosqlbench.nb.api.errors.BasicError) NBConfigError(io.nosqlbench.nb.api.config.standard.NBConfigError) NBTypeConverter(io.nosqlbench.nb.api.config.standard.NBTypeConverter) DynamicFieldReader(io.nosqlbench.nb.api.config.fieldreaders.DynamicFieldReader) OpConfigError(io.nosqlbench.nb.api.errors.OpConfigError) OrderedMapBinder(io.nosqlbench.engine.api.templating.binders.OrderedMapBinder) Logger(org.apache.logging.log4j.Logger) StaticFieldReader(io.nosqlbench.nb.api.config.fieldreaders.StaticFieldReader) VirtData(io.nosqlbench.virtdata.core.bindings.VirtData) DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) LogManager(org.apache.logging.log4j.LogManager) OpConfigError(io.nosqlbench.nb.api.errors.OpConfigError) DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) StringBindings(io.nosqlbench.virtdata.core.templates.StringBindings) ParsedTemplate(io.nosqlbench.virtdata.core.templates.ParsedTemplate)

Example 2 with DataMapper

use of io.nosqlbench.virtdata.core.bindings.DataMapper in project nosqlbench by nosqlbench.

the class Templatizer method make.

public static Result make(Map<String, String> bindings, Object v, String name, List<Map<String, Object>> cfgsources) {
    Result result = new Result();
    result.setName(name);
    if (v instanceof CharSequence) {
        ParsedTemplate pt = ParsedTemplate.of(((CharSequence) v).toString(), bindings);
        result.addCaptures(pt.getCaptures());
        result.setType(pt.getType());
        switch(pt.getType()) {
            case literal:
                result.setValue(((CharSequence) v).toString());
                break;
            case bindref:
                String spec = pt.asBinding().orElseThrow().getBindspec();
                if (spec == null) {
                    throw new OpConfigError("Empty binding spec for '" + (name != null ? name : "anonymous binding") + "'");
                }
                Optional<DataMapper<Object>> mapper = VirtData.getOptionalMapper(spec);
                result.setFunction(mapper.orElseThrow());
                break;
            case concat:
                StringBindings sb = new StringBindings(pt);
                result.setFunction(sb);
                break;
        }
    } else if (v instanceof Map) {
        ((Map) v).keySet().forEach(smk -> {
            if (!CharSequence.class.isAssignableFrom(smk.getClass())) {
                throw new OpConfigError("Only string keys are allowed in submaps.");
            }
        });
        Map<String, Object> submap = (Map<String, Object>) v;
        ParsedTemplateMap subtpl = new ParsedTemplateMap(submap, bindings, cfgsources);
        if (subtpl.isStatic()) {
            result.setValue(submap);
        } else {
            result.setFunction(subtpl);
        }
    } else if (v instanceof List) {
        List<Object> sublist = (List<Object>) v;
        ParsedTemplateList subtpl = new ParsedTemplateList(sublist, bindings, cfgsources);
        if (subtpl.isStatic()) {
            result.setValue(sublist);
        } else {
            result.setFunction(subtpl);
        }
    } else {
        result.setValue(v);
    // Eventually, nested and mixed static dynamic structure could be supported, but
    // it would be complex to implement and also not that efficient, so let's just copy
    // structure for now
    }
    return result;
}
Also used : OpConfigError(io.nosqlbench.nb.api.errors.OpConfigError) StringBindings(io.nosqlbench.virtdata.core.templates.StringBindings) List(java.util.List) ParsedTemplate(io.nosqlbench.virtdata.core.templates.ParsedTemplate) LongFunction(java.util.function.LongFunction) Map(java.util.Map) CapturePoint(io.nosqlbench.virtdata.core.templates.CapturePoint) Optional(java.util.Optional) VirtData(io.nosqlbench.virtdata.core.bindings.VirtData) DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) ArrayList(java.util.ArrayList) OpConfigError(io.nosqlbench.nb.api.errors.OpConfigError) DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) StringBindings(io.nosqlbench.virtdata.core.templates.StringBindings) List(java.util.List) ArrayList(java.util.ArrayList) ParsedTemplate(io.nosqlbench.virtdata.core.templates.ParsedTemplate) Map(java.util.Map)

Example 3 with DataMapper

use of io.nosqlbench.virtdata.core.bindings.DataMapper in project nosqlbench by nosqlbench.

the class IntegratedComposerLogicTest method testAPILevelQualifier.

@Test
public void testAPILevelQualifier() {
    DataMapper mapper1 = VirtData.getMapper("Uniform(0,100)");
    Object o1 = mapper1.get(5L);
    assertThat(o1).isOfAnyClassIn(Long.class);
    DataMapper mapper2 = VirtData.getMapper("Uniform(0,100)", double.class);
    Object o2 = mapper2.get(5L);
    assertThat(o2).isOfAnyClassIn(Double.class);
}
Also used : DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) Test(org.junit.jupiter.api.Test)

Example 4 with DataMapper

use of io.nosqlbench.virtdata.core.bindings.DataMapper in project nosqlbench by nosqlbench.

the class IntegratedComposerLogicTest method testConversionMatchingManual.

@Test
public void testConversionMatchingManual() {
    Optional<DataMapper<String>> tm = VirtData.getOptionalMapper("ToEpochTimeUUID(); java.lang.Object -> ToString() -> String");
    assertThat(tm).isPresent();
    String s = tm.get().get(55L);
    assertThat(s).isEqualTo("1389a470-1dd2-11b2-8000-000000000000");
}
Also used : NumberNameToString(io.nosqlbench.virtdata.library.basics.shared.from_long.to_string.NumberNameToString) DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) Test(org.junit.jupiter.api.Test)

Example 5 with DataMapper

use of io.nosqlbench.virtdata.core.bindings.DataMapper in project nosqlbench by nosqlbench.

the class IntegratedComposerLogicTest method testConversionMatchingAuto.

@Test
public void testConversionMatchingAuto() {
    Optional<DataMapper<String>> tm = VirtData.getOptionalMapper("ToEpochTimeUUID(); ToString()");
    assertThat(tm).isPresent();
    String s = tm.get().get(55L);
    assertThat(s).isEqualTo("1389a470-1dd2-11b2-8000-000000000000");
}
Also used : NumberNameToString(io.nosqlbench.virtdata.library.basics.shared.from_long.to_string.NumberNameToString) DataMapper(io.nosqlbench.virtdata.core.bindings.DataMapper) Test(org.junit.jupiter.api.Test)

Aggregations

DataMapper (io.nosqlbench.virtdata.core.bindings.DataMapper)11 Test (org.junit.jupiter.api.Test)9 Date (java.util.Date)4 NumberNameToString (io.nosqlbench.virtdata.library.basics.shared.from_long.to_string.NumberNameToString)3 OpConfigError (io.nosqlbench.nb.api.errors.OpConfigError)2 VirtData (io.nosqlbench.virtdata.core.bindings.VirtData)2 CapturePoint (io.nosqlbench.virtdata.core.templates.CapturePoint)2 ParsedTemplate (io.nosqlbench.virtdata.core.templates.ParsedTemplate)2 StringBindings (io.nosqlbench.virtdata.core.templates.StringBindings)2 ArrayList (java.util.ArrayList)2 LongFunction (java.util.function.LongFunction)2 ArrayBinder (io.nosqlbench.engine.api.templating.binders.ArrayBinder)1 ListBinder (io.nosqlbench.engine.api.templating.binders.ListBinder)1 OrderedMapBinder (io.nosqlbench.engine.api.templating.binders.OrderedMapBinder)1 DynamicFieldReader (io.nosqlbench.nb.api.config.fieldreaders.DynamicFieldReader)1 StaticFieldReader (io.nosqlbench.nb.api.config.fieldreaders.StaticFieldReader)1 NBConfigError (io.nosqlbench.nb.api.config.standard.NBConfigError)1 NBTypeConverter (io.nosqlbench.nb.api.config.standard.NBTypeConverter)1 BasicError (io.nosqlbench.nb.api.errors.BasicError)1 FunctionType (io.nosqlbench.virtdata.core.bindings.FunctionType)1