summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej27959@users.noreply.github.com>2019-07-08 10:39:18 +0200
committerGitHub <noreply@github.com>2019-07-08 10:39:18 +0200
commit5cc3d139e621ddf947ecb5bb54fb99a95634c932 (patch)
treeb470461adfbb823a69547251571cff30f81d6a89
parent32bc35e1aaa884b9da3ce00154b127f6fb931939 (diff)
parent21eef41d88e61ff2ee87b7ba7534caf59fc216f3 (diff)
Merge pull request #9969 from vespa-engine/geirst/more-robust-ngram-expression
Ensure that NGramExpression can be executed multiple times, where spa…
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java4
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java16
2 files changed, 20 insertions, 0 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java
index 816d6a62fd0..d91338e3d3f 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java
@@ -48,6 +48,10 @@ public final class NGramExpression extends Expression {
@Override
protected void doExecute(ExecutionContext ctx) {
StringFieldValue input = (StringFieldValue)ctx.getValue();
+ if (input.getSpanTree(SpanTrees.LINGUISTICS) != null) {
+ // This expression is already executed for this input instance
+ return;
+ }
SpanList spanList = input.setSpanTree(new SpanTree(SpanTrees.LINGUISTICS)).spanList();
int lastPosition = 0;
for (Iterator<GramSplitter.Gram> it = linguistics.getGramSplitter().split(input.getString(), gramSize); it.hasNext();) {
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java
index bad1407c7c1..0b217d5ba9a 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java
@@ -77,6 +77,22 @@ public class NGramTestCase {
assertFalse(i.hasNext());
}
+ @Test
+ public void requireThatExecuteCanBeCalledMultipleTimes() {
+ ExecutionContext context = new ExecutionContext(new SimpleTestAdapter());
+ context.setValue(new StringFieldValue("some random text string"));
+ NGramExpression expression = new NGramExpression(new SimpleLinguistics(), 3);
+
+ expression.execute(context);
+ SpanTree firstTree = ((StringFieldValue)context.getValue()).getSpanTree(SpanTrees.LINGUISTICS);
+ assertNotNull(firstTree);
+
+ expression.execute(context);
+ SpanTree secondTree = ((StringFieldValue)context.getValue()).getSpanTree(SpanTrees.LINGUISTICS);
+ // The span tree instance should be the same.
+ assertEquals(firstTree, secondTree);
+ }
+
private void assertSpan(int from, int length, boolean gram, Iterator<SpanNode> i, SpanTree tree) {
assertSpan(from, length, gram, i, tree, null);
}