aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej27959@users.noreply.github.com>2021-07-16 14:16:30 +0200
committerGitHub <noreply@github.com>2021-07-16 14:16:30 +0200
commitd82075621c0474e2dc1e0d3c03bdc605cd685348 (patch)
treeefc2b49590e0717f4b10f445fcd2b4c01c2d98f8
parente9628167e5083f2330206decbfeba6c9c85d4220 (diff)
parent1e095915e7513a43fc7fae14260ce580b9a9cf4e (diff)
Merge pull request #18628 from vespa-engine/arnej/workaround-libyell-bug
don't call accentDrop at all for empty input
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java3
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java27
2 files changed, 28 insertions, 2 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java
index 78a7a858aba..fa68d45d110 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java
@@ -43,6 +43,9 @@ public final class NormalizeExpression extends Expression {
protected void doExecute(ExecutionContext context) {
Transformer transformer = linguistics.getTransformer();
var orig = String.valueOf(context.getValue());
+ if (orig.isEmpty()) {
+ return; // must be a no-op for all linguistics/language combinations
+ }
var lang = context.resolveLanguage(linguistics);
var transformed = transformer.accentDrop(orig, lang);
try {
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java
index 3ad1b129b4d..9f6ba4a1554 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java
@@ -60,18 +60,24 @@ public class NormalizeTestCase {
}
class MyMockTransformer implements Transformer {
- boolean first = true;
+ public boolean first = true;
@Override
public String accentDrop(String input, Language language) {
if (first) {
first = false;
- return input.replace(' ', '\u0008');
+ return "\u0008";
} else {
return input.replace(' ', '/');
}
}
}
+ boolean getFirst(Transformer t) {
+ assertTrue(t instanceof MyMockTransformer);
+ var mmt = (MyMockTransformer)t;
+ return mmt.first;
+ }
+
class MyMockLinguistics extends SimpleLinguistics {
private Transformer transformer = new MyMockTransformer();
@Override
@@ -86,9 +92,26 @@ public class NormalizeTestCase {
ctx.setLanguage(Language.ENGLISH);
ctx.setValue(new StringFieldValue("bad norm"));
var linguistics = new MyMockLinguistics();
+ assertTrue(getFirst(linguistics.getTransformer()));
new NormalizeExpression(linguistics).execute(ctx);
FieldValue val = ctx.getValue();
assertTrue(val instanceof StringFieldValue);
assertEquals("bad/norm", ((StringFieldValue)val).getString());
+ assertFalse(getFirst(linguistics.getTransformer()));
}
+
+ @Test
+ public void requireThatEmptyIsNop() {
+ ExecutionContext ctx = new ExecutionContext(new SimpleTestAdapter());
+ ctx.setLanguage(Language.ENGLISH);
+ var orig = new StringFieldValue("");
+ ctx.setValue(orig);
+ var linguistics = new MyMockLinguistics();
+ assertTrue(getFirst(linguistics.getTransformer()));
+ new NormalizeExpression(linguistics).execute(ctx);
+ FieldValue val = ctx.getValue();
+ assertTrue(val == orig);
+ assertTrue(getFirst(linguistics.getTransformer()));
+ }
+
}