You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by sa...@apache.org on 2014/05/16 21:08:54 UTC
svn commit: r1595311 -
/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/pfunction/library/strSplit.java
Author: sallen
Date: Fri May 16 19:08:54 2014
New Revision: 1595311
URL: http://svn.apache.org/r1595311
Log:
JENA-697 Better implementation for apf:strSplit
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/pfunction/library/strSplit.java
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/pfunction/library/strSplit.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/pfunction/library/strSplit.java?rev=1595311&r1=1595310&r2=1595311&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/pfunction/library/strSplit.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/pfunction/library/strSplit.java Fri May 16 19:08:54 2014
@@ -18,6 +18,11 @@
package com.hp.hpl.jena.sparql.pfunction.library ;
+import java.util.Arrays ;
+import java.util.Iterator ;
+
+import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.iterator.Transform ;
import org.apache.jena.atlas.lib.StrUtils ;
import com.hp.hpl.jena.graph.Node ;
@@ -26,11 +31,11 @@ import com.hp.hpl.jena.sparql.core.Var ;
import com.hp.hpl.jena.sparql.engine.ExecutionContext ;
import com.hp.hpl.jena.sparql.engine.QueryIterator ;
import com.hp.hpl.jena.sparql.engine.binding.Binding ;
-import com.hp.hpl.jena.sparql.engine.iterator.QueryIterConcat ;
+import com.hp.hpl.jena.sparql.engine.binding.BindingFactory ;
+import com.hp.hpl.jena.sparql.engine.iterator.QueryIterPlainWrapper ;
import com.hp.hpl.jena.sparql.expr.ExprEvalException ;
import com.hp.hpl.jena.sparql.pfunction.PFuncSimpleAndList ;
import com.hp.hpl.jena.sparql.pfunction.PropFuncArg ;
-import com.hp.hpl.jena.sparql.util.IterLib ;
/**
* Property function that requires the subject to be unbound, and the object to
@@ -42,7 +47,7 @@ import com.hp.hpl.jena.sparql.util.IterL
public class strSplit extends PFuncSimpleAndList
{
@Override
- public QueryIterator execEvaluated(Binding binding, Node subject, Node predicate, PropFuncArg object, ExecutionContext execCxt)
+ public QueryIterator execEvaluated(final Binding binding, final Node subject, final Node predicate, final PropFuncArg object, final ExecutionContext execCxt)
{
if (!Var.isVar(subject))
throw new ExprEvalException("Subject is not a variable (" + subject + ")") ;
@@ -52,15 +57,19 @@ public class strSplit extends PFuncSimpl
String s = object.getArg(0).getLiteralLexicalForm() ;
String regex = object.getArg(1).getLiteralLexicalForm() ;
-
- QueryIterConcat cIter = new QueryIterConcat(execCxt) ;
+
+ final Var subjectVar = Var.alloc(subject);
+
// StrUtils will also trim whitespace
- for (String token : StrUtils.split(s, regex))
- {
- cIter.add(IterLib.oneResult(binding, Var.alloc(subject), NodeFactory.createLiteral(token), execCxt)) ;
- }
-
- return cIter ;
+ String[] tokens = StrUtils.split(s, regex);
+ Iterator<Binding> it = Iter.map(Arrays.asList(tokens).iterator(), new Transform<String,Binding>() {
+ @Override
+ public Binding convert(String item)
+ {
+ return BindingFactory.binding(binding, subjectVar, NodeFactory.createLiteral(item)) ;
+ }
+ });
+ return new QueryIterPlainWrapper(it, execCxt);
}
}