summaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-09-15 11:30:12 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2023-09-15 11:36:08 +0200
commit4875240fd78357fafa8ea25a14a67298333506ca (patch)
treec743ac2d8e744e539533081775219d670c8fcfcf /indexinglanguage
parent15a597984592cef5fab77c9a72a3b04a356a4943 (diff)
- Add utility to do substring extraction by codepoints, instead of java char index.
- Test and use it in SubstringExpression in indeing language.
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java12
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringTestCase.java6
2 files changed, 6 insertions, 12 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java
index 6f96a215edb..1f9a341519e 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.text.Text;
/**
* @author Simon Thoresen Hult
@@ -32,15 +33,8 @@ public final class SubstringExpression extends Expression {
@Override
protected void doExecute(ExecutionContext context) {
String input = String.valueOf(context.getValue());
- int len = input.length();
- if (from >= len) {
- input = "";
- } else if (to >= len) {
- input = input.substring(from);
- } else {
- input = input.substring(from, to);
- }
- context.setValue(new StringFieldValue(input));
+ String substring = Text.substringByCodepoints(input, from, to);
+ context.setValue(new StringFieldValue(substring));
}
@Override
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringTestCase.java
index f6c5de398a0..f6bed7831ae 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringTestCase.java
@@ -26,9 +26,9 @@ public class SubstringTestCase {
@Test
public void requireThatHashCodeAndEqualsAreImplemented() {
Expression exp = new SubstringExpression(6, 9);
- assertFalse(exp.equals(new Object()));
- assertFalse(exp.equals(new SubstringExpression(66, 99)));
- assertFalse(exp.equals(new SubstringExpression(6, 99)));
+ assertNotEquals(exp, new Object());
+ assertNotEquals(exp, new SubstringExpression(66, 99));
+ assertNotEquals(exp, new SubstringExpression(6, 99));
assertEquals(exp, new SubstringExpression(6, 9));
assertEquals(exp.hashCode(), new SubstringExpression(6, 9).hashCode());
}