aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java b/container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java
index 1993871aa4c..397cb056ba2 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/ParameterListParser.java
@@ -1,6 +1,8 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.yql;
+import com.yahoo.prelude.query.NumericInItem;
+import com.yahoo.prelude.query.StringInItem;
import com.yahoo.prelude.query.WeightedSetItem;
import java.util.Arrays;
@@ -61,6 +63,41 @@ class ParameterListParser {
s.pass('}');
}
+ public static void addStringTokensFromString(String string, StringInItem out) {
+ if (string == null) {
+ return;
+ }
+ var s = new ParsableString(string);
+ while (!s.atEnd()) {
+ String token;
+ if (s.passOptional('\'')) {
+ token = s.stringTo(s.position('\''));
+ s.pass('\'');
+ }
+ else if (s.passOptional('"')) {
+ token = s.stringTo(s.position('"'));
+ s.pass('"');
+ }
+ else {
+ token = s.stringTo(s.positionOrEnd(',')).trim();
+ }
+ out.addToken(token);
+ s.passOptional(',');
+ }
+ }
+
+ public static void addNumericTokensFromString(String string, NumericInItem out) {
+ if (string == null) {
+ return;
+ }
+ var s = new ParsableString(string);
+ while (!s.atEnd()) {
+ long token = s.longTo(s.positionOrEnd(','));
+ out.addToken(token);
+ s.passOptional(',');
+ }
+ }
+
private static class ParsableString {
int position = 0;
@@ -142,6 +179,17 @@ class ParameterListParser {
throw new IllegalArgumentException("Expected one of " + Arrays.toString(characters) + " after " + position);
}
+ int positionOrEnd(char ... characters) {
+ int localPosition = position;
+ while (localPosition < s.length()) {
+ char nextChar = s.charAt(localPosition);
+ for (char character : characters)
+ if (nextChar == character) return localPosition;
+ localPosition++;
+ }
+ return localPosition;
+ }
+
boolean atEnd() {
return position >= s.length();
}