Search in sources :

Example 41 with NodeValue

use of org.apache.jena.sparql.expr.NodeValue in project jena by apache.

the class TestScriptFunction method script_7.

// Narrow to integer
@Test
public void script_7() {
    NodeValue nv = eval("combine", "2.5", "3.5");
    NodeValue nvx = nv("6");
    assertDatatype(nv, XSDDatatype.XSDinteger);
    assertEquals(nvx, nv);
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) Test(org.junit.Test)

Example 42 with NodeValue

use of org.apache.jena.sparql.expr.NodeValue in project jena by apache.

the class TestFnFunctionsDateTimeDuration method testException.

private static void testException(String exprStr) {
    Expr expr = ExprUtils.parse(exprStr);
    try {
        NodeValue rExpected = expr.eval(null, LibTestExpr.createTest());
        fail("Expected exception: " + exprStr);
    } catch (ExprEvalException ex) {
    }
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) LibTestExpr(org.apache.jena.sparql.expr.LibTestExpr) Expr(org.apache.jena.sparql.expr.Expr) ExprEvalException(org.apache.jena.sparql.expr.ExprEvalException)

Example 43 with NodeValue

use of org.apache.jena.sparql.expr.NodeValue in project jena by apache.

the class QueryIterGroup method calc.

private static Iterator<Binding> calc(final QueryIterator iter, final VarExprList groupVarExpr, final List<ExprAggregator> aggregators, final ExecutionContext execCxt) {
    return new IteratorDelayedInitialization<Binding>() {

        @Override
        protected Iterator<Binding> initializeIterator() {
            boolean hasAggregators = (aggregators != null && !aggregators.isEmpty());
            boolean hasGroupBy = !groupVarExpr.isEmpty();
            boolean noInput = !iter.hasNext();
            // 2/ No GROUP BY, e.g. COUNT=0, the results is one row always and not handled here.
            if (noInput) {
                if (hasGroupBy)
                    // GROUP
                    return Iter.nullIterator();
                if (!hasAggregators) {
                    // No GROUP BY, no aggregators. One result row of no columns.
                    return Iter.singleton(BindingFactory.binding());
                }
                // No GROUP BY, has aggregators. Insert default values.
                BindingBuilder builder = Binding.builder();
                for (ExprAggregator agg : aggregators) {
                    Node value = agg.getAggregator().getValueEmpty();
                    if (value == null)
                        continue;
                    Var v = agg.getVar();
                    builder.add(v, value);
                }
                return Iter.singleton(builder.build());
            }
            // Case: there is input.
            // Phase 1 : Create keys and aggregators per key, and pump bindings through the aggregators.
            Multimap<Binding, Pair<Var, Accumulator>> accumulators = MultimapBuilder.hashKeys().arrayListValues().build();
            while (iter.hasNext()) {
                Binding b = iter.nextBinding();
                Binding key = genKey(groupVarExpr, b, execCxt);
                if (!hasAggregators) {
                    // Put in a dummy to remember the input.
                    accumulators.put(key, placeholder);
                    continue;
                }
                // Create if does not exist.
                if (!accumulators.containsKey(key)) {
                    for (ExprAggregator agg : aggregators) {
                        Accumulator x = agg.getAggregator().createAccumulator();
                        Var v = agg.getVar();
                        accumulators.put(key, Pair.create(v, x));
                    }
                }
                // Do the per-accumulator calculation.
                for (Pair<Var, Accumulator> pair : accumulators.get(key)) pair.getRight().accumulate(b, execCxt);
            }
            if (!hasAggregators)
                // We used placeholder so there are always the key.
                return accumulators.keySet().iterator();
            List<Binding> results = new ArrayList<>();
            for (Binding k : accumulators.keySet()) {
                BindingBuilder builder2 = Binding.builder(k);
                Collection<Pair<Var, Accumulator>> accs = accumulators.get(k);
                for (Pair<Var, Accumulator> pair : accs) {
                    NodeValue value = pair.getRight().getValue();
                    if (value == null)
                        continue;
                    Var v = pair.getLeft();
                    builder2.add(v, value.asNode());
                }
                results.add(builder2.build());
            }
            return results.iterator();
        }
    };
}
Also used : Binding(org.apache.jena.sparql.engine.binding.Binding) Accumulator(org.apache.jena.sparql.expr.aggregate.Accumulator) NodeValue(org.apache.jena.sparql.expr.NodeValue) BindingBuilder(org.apache.jena.sparql.engine.binding.BindingBuilder) Var(org.apache.jena.sparql.core.Var) Node(org.apache.jena.graph.Node) ArrayList(java.util.ArrayList) IteratorDelayedInitialization(org.apache.jena.atlas.iterator.IteratorDelayedInitialization) ExprAggregator(org.apache.jena.sparql.expr.ExprAggregator) Pair(org.apache.jena.atlas.lib.Pair)

Example 44 with NodeValue

use of org.apache.jena.sparql.expr.NodeValue in project jena by apache.

the class FunctionBase2 method exec.

@Override
public final NodeValue exec(List<NodeValue> args) {
    if (args == null)
        // The contract on the function interface is that this should not happen.
        throw new ARQInternalErrorException(Lib.className(this) + ": Null args list");
    if (args.size() != 2)
        throw new ExprEvalException(Lib.className(this) + ": Wrong number of arguments: Wanted 2, got " + args.size());
    NodeValue v1 = args.get(0);
    NodeValue v2 = args.get(1);
    return exec(v1, v2);
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) ARQInternalErrorException(org.apache.jena.sparql.ARQInternalErrorException) ExprEvalException(org.apache.jena.sparql.expr.ExprEvalException)

Example 45 with NodeValue

use of org.apache.jena.sparql.expr.NodeValue in project jena by apache.

the class FunctionBase4 method exec.

@Override
public final NodeValue exec(List<NodeValue> args) {
    if (args == null)
        // The contract on the function interface is that this should not happen.
        throw new ARQInternalErrorException(Lib.className(this) + ": Null args list");
    if (args.size() != 4)
        throw new ExprEvalException(Lib.className(this) + ": Wrong number of arguments: Wanted 4, got " + args.size());
    NodeValue v1 = args.get(0);
    NodeValue v2 = args.get(1);
    NodeValue v3 = args.get(2);
    NodeValue v4 = args.get(3);
    return exec(v1, v2, v3, v4);
}
Also used : NodeValue(org.apache.jena.sparql.expr.NodeValue) ARQInternalErrorException(org.apache.jena.sparql.ARQInternalErrorException) ExprEvalException(org.apache.jena.sparql.expr.ExprEvalException)

Aggregations

NodeValue (org.apache.jena.sparql.expr.NodeValue)255 Test (org.junit.Test)197 BaseTest (org.apache.jena.atlas.junit.BaseTest)42 Node (org.apache.jena.graph.Node)31 ExprEvalException (org.apache.jena.sparql.expr.ExprEvalException)26 GeometryWrapper (org.apache.jena.geosparql.implementation.GeometryWrapper)24 Expr (org.apache.jena.sparql.expr.Expr)12 NodeValueNode (org.apache.jena.sparql.expr.nodevalue.NodeValueNode)10 ARQInternalErrorException (org.apache.jena.sparql.ARQInternalErrorException)7 DatatypeFormatException (org.apache.jena.datatypes.DatatypeFormatException)6 ArrayList (java.util.ArrayList)5 SearchEnvelope (org.apache.jena.geosparql.spatial.SearchEnvelope)5 LibTestExpr (org.apache.jena.sparql.expr.LibTestExpr)5 Duration (javax.xml.datatype.Duration)4 SpatialArguments (org.apache.jena.geosparql.spatial.property_functions.SpatialArguments)4 BigDecimal (java.math.BigDecimal)3 AssemblerException (org.apache.jena.assembler.exceptions.AssemblerException)3 DatasetGraph (org.apache.jena.sparql.core.DatasetGraph)3 Var (org.apache.jena.sparql.core.Var)3 ValueSpaceClassification (org.apache.jena.sparql.expr.ValueSpaceClassification)3