summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2021-09-19 23:21:13 +0200
committerGitHub <noreply@github.com>2021-09-19 23:21:13 +0200
commit820b7403e2781407c0e158ba6def9fcd07129767 (patch)
treec86512d51a3eebe510b8dd5768bef26a58010ae8
parent31d2cb6dd5fee11115ec11f0771f9c500df8426d (diff)
parent45fd51437b052cf05dc9fd8c7bfef5143a8c2164 (diff)
Merge pull request #19198 from vespa-engine/bratseth/il-encode
Bratseth/il encode
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexingOperation.java9
-rw-r--r--config-model/src/main/javacc/SDParser.jj7
-rw-r--r--container-core/src/main/java/com/yahoo/language/provider/DefaultEncoderProvider.java19
-rw-r--r--docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java7
-rw-r--r--docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java11
-rw-r--r--docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java4
-rw-r--r--docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java9
-rw-r--r--document/src/main/java/com/yahoo/document/TensorDataType.java3
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/StringFieldValue.java1
-rw-r--r--document/src/main/java/com/yahoo/document/fieldpathupdate/AddFieldPathUpdate.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/AdapterFactory.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionSearcher.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateHelper.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/IdentityFieldPathUpdateAdapter.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java14
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParserContext.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/StringFieldConverter.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/TypedExpressionConverter.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java14
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java18
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java64
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java24
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldTypeAdapter.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java28
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java31
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LiteralBoolExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java14
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java21
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java17
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java24
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java17
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToBoolExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/UnresolvedDataType.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java16
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java10
-rw-r--r--indexinglanguage/src/main/javacc/IndexingParser.jj16
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptParserTestCase.java3
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptTestCase.java57
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java10
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/CatTestCase.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java6
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java6
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateTestCase.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OutputAssert.java4
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputTestCase.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarTestCase.java6
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java6
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContextTestCase.java8
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/DefaultFieldNameTestCase.java5
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/ExpressionTestCase.java5
-rw-r--r--linguistics/abi-spec.json19
-rw-r--r--linguistics/src/main/java/com/yahoo/language/process/Encoder.java17
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/TensorType.java2
107 files changed, 563 insertions, 336 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
index ac92207820c..9c89517f72d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
@@ -9,6 +9,7 @@ import com.yahoo.document.MapDataType;
import com.yahoo.document.StructDataType;
import com.yahoo.document.TensorDataType;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.searchdefinition.Index;
import com.yahoo.searchdefinition.Search;
@@ -425,12 +426,12 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
/** Parse an indexing expression which will use the simple linguistics implementatino suitable for testing */
public void parseIndexingScript(String script) {
- parseIndexingScript(script, new SimpleLinguistics());
+ parseIndexingScript(script, new SimpleLinguistics(), Encoder.throwsOnUse);
}
- public void parseIndexingScript(String script, Linguistics linguistics) {
+ public void parseIndexingScript(String script, Linguistics linguistics, Encoder encoder) {
try {
- ScriptParserContext config = new ScriptParserContext(linguistics);
+ ScriptParserContext config = new ScriptParserContext(linguistics, encoder);
config.setInputStream(new IndexingInput(script));
setIndexingScript(ScriptExpression.newInstance(config));
} catch (ParseException e) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexingOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexingOperation.java
index dece0064fcc..4332d8baea8 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexingOperation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexingOperation.java
@@ -2,6 +2,7 @@
package com.yahoo.searchdefinition.fieldoperation;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.searchdefinition.parser.ParseException;
@@ -27,14 +28,14 @@ public class IndexingOperation implements FieldOperation {
}
/** Creates an indexing operation which will use the simple linguistics implementation suitable for testing */
- @SuppressWarnings("deprecation")
public static IndexingOperation fromStream(SimpleCharStream input, boolean multiLine) throws ParseException {
- return fromStream(input, multiLine, new SimpleLinguistics());
+ return fromStream(input, multiLine, new SimpleLinguistics(), Encoder.throwsOnUse);
}
- public static IndexingOperation fromStream(SimpleCharStream input, boolean multiLine, Linguistics linguistics)
+ public static IndexingOperation fromStream(SimpleCharStream input, boolean multiLine,
+ Linguistics linguistics, Encoder encoder)
throws ParseException {
- ScriptParserContext config = new ScriptParserContext(linguistics);
+ ScriptParserContext config = new ScriptParserContext(linguistics, encoder);
config.setAnnotatorConfig(new AnnotatorConfig());
config.setInputStream(input);
ScriptExpression exp;
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 4d7b31e6e50..7df77588fe8 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -58,6 +58,7 @@ import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.application.api.FileRegistry;
import com.yahoo.config.model.api.ModelContext;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.search.query.ranking.Diversity;
import java.util.Map;
@@ -111,7 +112,7 @@ public class SDParser {
*/
@SuppressWarnings("deprecation")
private IndexingOperation newIndexingOperation(boolean multiline) throws ParseException {
- return newIndexingOperation(multiline, new SimpleLinguistics());
+ return newIndexingOperation(multiline, new SimpleLinguistics(), Encoder.throwsOnUse);
}
/**
@@ -120,13 +121,13 @@ public class SDParser {
* @param multiline Whether or not to allow multi-line expressions.
* @param linguistics What to use for tokenizing.
*/
- private IndexingOperation newIndexingOperation(boolean multiline, Linguistics linguistics) throws ParseException {
+ private IndexingOperation newIndexingOperation(boolean multiline, Linguistics linguistics, Encoder encoder) throws ParseException {
SimpleCharStream input = (SimpleCharStream)token_source.input_stream;
if (token.next != null) {
input.backup(token.next.image.length());
}
try {
- return IndexingOperation.fromStream(input, multiline, linguistics);
+ return IndexingOperation.fromStream(input, multiline, linguistics, encoder);
} finally {
token.next = null;
jj_ntk = -1;
diff --git a/container-core/src/main/java/com/yahoo/language/provider/DefaultEncoderProvider.java b/container-core/src/main/java/com/yahoo/language/provider/DefaultEncoderProvider.java
index 9b07ee55bd8..f8550d04d1c 100644
--- a/container-core/src/main/java/com/yahoo/language/provider/DefaultEncoderProvider.java
+++ b/container-core/src/main/java/com/yahoo/language/provider/DefaultEncoderProvider.java
@@ -19,30 +19,13 @@ import java.util.List;
@SuppressWarnings("unused") // Injected
public class DefaultEncoderProvider implements Provider<Encoder> {
- // Use lazy initialization to avoid expensive (memory-wise) instantiation
- private static final Encoder failingEncoder = new FailingEncoder();
-
@Inject
public DefaultEncoderProvider() { }
@Override
- public Encoder get() { return failingEncoder; }
+ public Encoder get() { return Encoder.throwsOnUse; }
@Override
public void deconstruct() {}
- public static class FailingEncoder implements Encoder {
-
- @Override
- public List<Integer> encode(String text, Language language) {
- throw new IllegalStateException("No encoder has been configured");
- }
-
- @Override
- public Tensor encode(String text, Language language, TensorType tensorType) {
- throw new IllegalStateException("No encoder has been configured");
- }
-
- }
-
}
diff --git a/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java b/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java
index 285f3e83602..53709c4ff87 100644
--- a/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java
+++ b/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java
@@ -20,6 +20,8 @@ import com.yahoo.document.DocumentUpdate;
import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.language.Linguistics;
import java.util.logging.Level;
+
+import com.yahoo.language.process.Encoder;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.indexinglanguage.AdapterFactory;
import com.yahoo.vespa.indexinglanguage.SimpleAdapterFactory;
@@ -52,9 +54,10 @@ public class IndexingProcessor extends DocumentProcessor {
@Inject
public IndexingProcessor(DocumentmanagerConfig documentmanagerConfig,
IlscriptsConfig ilscriptsConfig,
- Linguistics linguistics) {
+ Linguistics linguistics,
+ Encoder encoder) {
docTypeMgr = DocumentTypeManagerConfigurer.configureNewManager(documentmanagerConfig);
- scriptMgr = new ScriptManager(docTypeMgr, ilscriptsConfig, linguistics);
+ scriptMgr = new ScriptManager(docTypeMgr, ilscriptsConfig, linguistics, encoder);
adapterFactory = new SimpleAdapterFactory(new ExpressionSelector());
}
diff --git a/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java b/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java
index a148966c250..8f3f75af795 100644
--- a/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java
+++ b/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java
@@ -5,6 +5,8 @@ import com.yahoo.document.DocumentType;
import com.yahoo.document.DocumentTypeManager;
import com.yahoo.language.Linguistics;
import java.util.logging.Level;
+
+import com.yahoo.language.process.Encoder;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.indexinglanguage.ScriptParserContext;
import com.yahoo.vespa.indexinglanguage.expressions.InputExpression;
@@ -26,9 +28,9 @@ public class ScriptManager {
private final Map<String, Map<String, DocumentScript>> documentFieldScripts;
private final DocumentTypeManager docTypeMgr;
- public ScriptManager(DocumentTypeManager docTypeMgr, IlscriptsConfig config, Linguistics linguistics) {
+ public ScriptManager(DocumentTypeManager docTypeMgr, IlscriptsConfig config, Linguistics linguistics, Encoder encoder) {
this.docTypeMgr = docTypeMgr;
- documentFieldScripts = createScriptsMap(docTypeMgr, config, linguistics);
+ documentFieldScripts = createScriptsMap(docTypeMgr, config, linguistics, encoder);
}
@@ -72,9 +74,10 @@ public class ScriptManager {
private static Map<String, Map<String, DocumentScript>> createScriptsMap(DocumentTypeManager docTypeMgr,
IlscriptsConfig config,
- Linguistics linguistics) {
+ Linguistics linguistics,
+ Encoder encoder) {
Map<String, Map<String, DocumentScript>> documentFieldScripts = new HashMap<>(config.ilscript().size());
- ScriptParserContext parserContext = new ScriptParserContext(linguistics);
+ ScriptParserContext parserContext = new ScriptParserContext(linguistics, encoder);
parserContext.getAnnotatorConfig().setMaxTermOccurrences(config.maxtermoccurrences());
parserContext.getAnnotatorConfig().setMaxTokenLength(config.fieldmatchmaxlength());
diff --git a/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java b/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java
index 8ad2ff0aaad..dc9b1ffba73 100644
--- a/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java
+++ b/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java
@@ -13,6 +13,7 @@ import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.update.AssignValueUpdate;
import com.yahoo.document.update.FieldUpdate;
import com.yahoo.document.update.ValueUpdate;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import org.junit.Test;
@@ -125,6 +126,7 @@ public class IndexingProcessorTestCase {
private static IndexingProcessor newProcessor(String configId) {
return new IndexingProcessor(ConfigGetter.getConfig(DocumentmanagerConfig.class, configId),
ConfigGetter.getConfig(IlscriptsConfig.class, configId),
- new SimpleLinguistics());
+ new SimpleLinguistics(),
+ Encoder.throwsOnUse);
}
}
diff --git a/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java b/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java
index 23df8c0eb25..607fee4f10d 100644
--- a/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java
+++ b/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java
@@ -3,6 +3,7 @@ package com.yahoo.docprocs.indexing;
import com.yahoo.document.DocumentType;
import com.yahoo.document.DocumentTypeManager;
+import com.yahoo.language.process.Encoder;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.indexinglanguage.parser.ParseException;
import org.junit.Test;
@@ -28,7 +29,7 @@ public class ScriptManagerTestCase {
IlscriptsConfig.Builder config = new IlscriptsConfig.Builder();
config.ilscript(new IlscriptsConfig.Ilscript.Builder().doctype("newssummary")
.content("index"));
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null, Encoder.throwsOnUse);
assertNotNull(scriptMgr.getScript(typeMgr.getDocumentType("newsarticle")));
assertNull(scriptMgr.getScript(new DocumentType("unknown")));
}
@@ -43,7 +44,7 @@ public class ScriptManagerTestCase {
IlscriptsConfig.Builder config = new IlscriptsConfig.Builder();
config.ilscript(new IlscriptsConfig.Ilscript.Builder().doctype("newsarticle")
.content("index"));
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null, Encoder.throwsOnUse);
assertNotNull(scriptMgr.getScript(typeMgr.getDocumentType("newssummary")));
assertNull(scriptMgr.getScript(new DocumentType("unknown")));
}
@@ -52,7 +53,7 @@ public class ScriptManagerTestCase {
public void requireThatEmptyConfigurationDoesNotThrow() {
DocumentTypeManager typeMgr = new DocumentTypeManager();
typeMgr.configure("file:src/test/cfg/documentmanager_inherit.cfg");
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null, Encoder.throwsOnUse);
assertNull(scriptMgr.getScript(new DocumentType("unknown")));
}
@@ -60,7 +61,7 @@ public class ScriptManagerTestCase {
public void requireThatUnknownDocumentTypeReturnsNull() {
DocumentTypeManager typeMgr = new DocumentTypeManager();
typeMgr.configure("file:src/test/cfg/documentmanager_inherit.cfg");
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null, Encoder.throwsOnUse);
for (Iterator<DocumentType> it = typeMgr.documentTypeIterator(); it.hasNext(); ) {
assertNull(scriptMgr.getScript(it.next()));
}
diff --git a/document/src/main/java/com/yahoo/document/TensorDataType.java b/document/src/main/java/com/yahoo/document/TensorDataType.java
index c4fdff30f8b..ad4a856d964 100644
--- a/document/src/main/java/com/yahoo/document/TensorDataType.java
+++ b/document/src/main/java/com/yahoo/document/TensorDataType.java
@@ -21,7 +21,7 @@ public class TensorDataType extends DataType {
public static int classId = registerClass(Ids.document + 59, TensorDataType.class);
public TensorDataType(TensorType tensorType) {
- super(tensorType.toString(), DataType.tensorDataTypeCode);
+ super(tensorType == null ? "tensor" : tensorType.toString(), DataType.tensorDataTypeCode);
this.tensorType = tensorType;
}
@@ -64,4 +64,5 @@ public class TensorDataType extends DataType {
public int hashCode() {
return Objects.hash(super.hashCode(), tensorType);
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/StringFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/StringFieldValue.java
index 156fd853241..acdd9f2b27b 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/StringFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/StringFieldValue.java
@@ -74,7 +74,6 @@ public class StringFieldValue extends FieldValue {
* Returns {@link com.yahoo.document.DataType}.STRING.
*
* @return DataType.STRING, always
- * @see com.yahoo.document.DataType
*/
@Override
public DataType getDataType() {
diff --git a/document/src/main/java/com/yahoo/document/fieldpathupdate/AddFieldPathUpdate.java b/document/src/main/java/com/yahoo/document/fieldpathupdate/AddFieldPathUpdate.java
index 74b94b8135e..fc48a0a80ee 100644
--- a/document/src/main/java/com/yahoo/document/fieldpathupdate/AddFieldPathUpdate.java
+++ b/document/src/main/java/com/yahoo/document/fieldpathupdate/AddFieldPathUpdate.java
@@ -11,9 +11,10 @@ import com.yahoo.document.serialization.DocumentUpdateReader;
import com.yahoo.document.serialization.VespaDocumentSerializer6;
/**
- * @author <a href="mailto:thomasg@yahoo-inc.com">Thomas Gundersen</a>
+ * @author Thomas Gundersen
*/
public class AddFieldPathUpdate extends FieldPathUpdate {
+
class IteratorHandler extends FieldPathIteratorHandler {
Array newValues;
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/AdapterFactory.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/AdapterFactory.java
index c172e50daeb..55374ea1ca2 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/AdapterFactory.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/AdapterFactory.java
@@ -11,7 +11,8 @@ import java.util.List;
*/
public interface AdapterFactory {
- public DocumentAdapter newDocumentAdapter(Document doc);
+ DocumentAdapter newDocumentAdapter(Document doc);
+
+ List<UpdateAdapter> newUpdateAdapterList(DocumentUpdate upd);
- public List<UpdateAdapter> newUpdateAdapterList(DocumentUpdate upd);
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java
index 6becfffaa8c..ec7ce6eb06c 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java
@@ -9,7 +9,8 @@ import com.yahoo.vespa.indexinglanguage.expressions.FieldValueAdapter;
*/
public interface DocumentAdapter extends FieldValueAdapter {
- public Document getFullOutput();
+ Document getFullOutput();
+
+ Document getUpdatableOutput();
- public Document getUpdatableOutput();
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
index 264c54ce5cb..60ca16533fd 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
@@ -121,7 +121,6 @@ public abstract class ExpressionConverter implements Cloneable {
}
@Override
- @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
public ExpressionConverter clone() {
try {
return (ExpressionConverter)super.clone();
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java
index 2a87bbc2ec0..748035ed1fc 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java
@@ -12,6 +12,7 @@ import java.util.List;
* generates a new execution value without regard for the existing one.
*/
public class ExpressionOptimizer extends ExpressionConverter {
+
@Override
protected boolean shouldConvert(Expression exp) {
return exp instanceof StatementExpression;
@@ -111,4 +112,5 @@ public class ExpressionOptimizer extends ExpressionConverter {
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionSearcher.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionSearcher.java
index f1d338371f3..7f8698b53d3 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionSearcher.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionSearcher.java
@@ -42,4 +42,5 @@ public class ExpressionSearcher<T extends Expression> {
return exp;
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java
index 84245d789fd..9ab2f8d49de 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java
@@ -123,4 +123,5 @@ public class FieldPathUpdateAdapter implements UpdateAdapter {
update.getOriginalWhereClause()));
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateHelper.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateHelper.java
index 916b442fb74..c239b240985 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateHelper.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateHelper.java
@@ -63,4 +63,5 @@ public abstract class FieldPathUpdateHelper {
return true;
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java
index bb89ce736f7..c819587bedd 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java
@@ -255,4 +255,5 @@ public class FieldUpdateAdapter implements UpdateAdapter {
return super.createValueUpdates(val, nullAssign);
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
index e51f7984d65..586f2b020ec 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
@@ -126,4 +126,5 @@ public abstract class FieldUpdateHelper {
}
throw new UnsupportedOperationException("Value update type " + upd.getClass().getName() + " not supported.");
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java
index 96c740df7bf..799327c01b3 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java
@@ -127,6 +127,7 @@ public abstract class FieldValueConverter {
}
WeightedSet ret = DataType.getWeightedSet(nextType, val.getDataType().createIfNonExistent(),
val.getDataType().removeIfZero()).createFieldValue();
+
for (Map.Entry<FieldValue, Integer> entry : next.entrySet()) {
ret.put(entry.getKey(), entry.getValue());
}
@@ -151,8 +152,8 @@ public abstract class FieldValueConverter {
* Returns whether or not the given {@link FieldValue} should be converted. If this method returns <em>false</em>,
* the converter will proceed to traverse the value itself to see if its internal can be converted.
*
- * @param value The value to check.
- * @return True to convert, false to traverse.
+ * @param value the value to check
+ * @return true to convert, false to traverse
*/
protected abstract boolean shouldConvert(FieldValue value);
@@ -160,8 +161,9 @@ public abstract class FieldValueConverter {
* Converts the given value. It is IMPERATIVE that the implementation of this method DOES NOT mutate the given
* {@link FieldValue} in place, as that can cause SERIOUS inconsistencies in the parent structures.
*
- * @param value The value to convert.
- * @return The value to replace the old.
+ * @param value the value to convert
+ * @return the value to replace the old
*/
protected abstract FieldValue doConvert(FieldValue value);
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/IdentityFieldPathUpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/IdentityFieldPathUpdateAdapter.java
index 42c9bd8c10c..a7c5e87b09b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/IdentityFieldPathUpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/IdentityFieldPathUpdateAdapter.java
@@ -65,4 +65,5 @@ public class IdentityFieldPathUpdateAdapter implements UpdateAdapter {
public void tryOutputType(Expression exp, String fieldName, DataType valueType) {
fwdAdapter.tryOutputType(exp, fieldName, valueType);
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java
index 0bc82535ad8..34da5b47655 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java
@@ -50,18 +50,19 @@ public final class ScriptParser {
});
}
- private static interface ParserMethod<T extends Expression> {
+ private interface ParserMethod<T extends Expression> {
T call(IndexingParser parser) throws ParseException;
}
- private static <T extends Expression> T parse(ScriptParserContext config, ParserMethod<T> method)
+ private static <T extends Expression> T parse(ScriptParserContext context, ParserMethod<T> method)
throws ParseException {
- CharStream input = config.getInputStream();
+ CharStream input = context.getInputStream();
IndexingParser parser = new IndexingParser(input);
- parser.setAnnotatorConfig(config.getAnnotatorConfig());
- parser.setDefaultFieldName(config.getDefaultFieldName());
- parser.setLinguistics(config.getLinguistcs());
+ parser.setAnnotatorConfig(context.getAnnotatorConfig());
+ parser.setDefaultFieldName(context.getDefaultFieldName());
+ parser.setLinguistics(context.getLinguistcs());
+ parser.setEncoder(context.getEncoder());
try {
return method.call(parser);
} catch (ParseException e) {
@@ -75,4 +76,5 @@ public final class ScriptParser {
}
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParserContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParserContext.java
index 77bd3e0306f..06be91703fa 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParserContext.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParserContext.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.indexinglanguage;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.linguistics.AnnotatorConfig;
import com.yahoo.vespa.indexinglanguage.parser.CharStream;
@@ -13,11 +14,13 @@ public class ScriptParserContext {
private AnnotatorConfig annotatorConfig = new AnnotatorConfig();
private Linguistics linguistics;
+ private final Encoder encoder;
private String defaultFieldName = null;
private CharStream inputStream = null;
- public ScriptParserContext(Linguistics linguistics) {
+ public ScriptParserContext(Linguistics linguistics, Encoder encoder) {
this.linguistics = linguistics;
+ this.encoder = encoder;
}
public AnnotatorConfig getAnnotatorConfig() {
@@ -38,6 +41,10 @@ public class ScriptParserContext {
return this;
}
+ public Encoder getEncoder() {
+ return encoder;
+ }
+
public String getDefaultFieldName() {
return defaultFieldName;
}
@@ -55,4 +62,5 @@ public class ScriptParserContext {
inputStream = stream;
return this;
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java
index 35bb70c2a88..801afa546c6 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java
@@ -15,11 +15,13 @@ import java.util.List;
*/
@SuppressWarnings("rawtypes")
public class SimpleAdapterFactory implements AdapterFactory {
+
public static class SelectExpression {
public Expression selectExpression(DocumentType documentType, String fieldName) {
return null;
}
}
+
private final SelectExpression expressionSelector;
public SimpleAdapterFactory() {
@@ -79,4 +81,5 @@ public class SimpleAdapterFactory implements AdapterFactory {
ret.add(FieldUpdateAdapter.fromCompleteUpdate(newDocumentAdapter(complete, true)));
return ret;
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java
index 16afa08cf45..d2444ff25c5 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java
@@ -76,7 +76,6 @@ public class SimpleDocumentAdapter implements DocumentAdapter {
}
}
- @SuppressWarnings({ "unchecked" })
@Override
public SimpleDocumentAdapter setOutputValue(Expression exp, String fieldName, FieldValue fieldValue) {
Field field = output.getField(fieldName);
@@ -87,4 +86,5 @@ public class SimpleDocumentAdapter implements DocumentAdapter {
output.setFieldValue(field, fieldValue);
return this;
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/StringFieldConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/StringFieldConverter.java
index f66f1d00f93..1e0fd235e1f 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/StringFieldConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/StringFieldConverter.java
@@ -21,4 +21,5 @@ public abstract class StringFieldConverter extends FieldValueConverter {
}
protected abstract FieldValue doConvert(StringFieldValue value);
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/TypedExpressionConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/TypedExpressionConverter.java
index b4085e65505..be9e212ae26 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/TypedExpressionConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/TypedExpressionConverter.java
@@ -25,4 +25,5 @@ public abstract class TypedExpressionConverter<T extends Expression> extends Exp
}
protected abstract Expression typedConvert(T exp);
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java
index f1cf9a4ae4b..7b29a297a81 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java
@@ -10,6 +10,7 @@ import com.yahoo.vespa.indexinglanguage.expressions.FieldValueAdapter;
*/
public interface UpdateAdapter extends FieldValueAdapter {
- public DocumentUpdate getOutput();
- public Expression getExpression(Expression expression);
+ DocumentUpdate getOutput();
+ Expression getExpression(Expression expression);
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java
index e9bb3dd418d..599e07493bb 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java
@@ -60,4 +60,5 @@ public abstract class ValueTransformProvider extends ExpressionConverter {
protected abstract boolean requiresTransform(Expression exp);
protected abstract Expression newTransform();
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
index 68b9e79e092..ee2d4e17a74 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
@@ -68,17 +68,17 @@ public final class ArithmeticExpression extends CompositeExpression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
- ctx.setValue(evaluate(ctx.setValue(input).execute(lhs).getValue(),
- ctx.setValue(input).execute(rhs).getValue()));
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
+ context.setValue(evaluate(context.setValue(input).execute(lhs).getValue(),
+ context.setValue(input).execute(rhs).getValue()));
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
- context.setValue(evaluate(context.setValue(input).execute(lhs).getValue(),
- context.setValue(input).execute(rhs).getValue()));
+ DataType input = context.getValueType();
+ context.setValueType(evaluate(context.setValueType(input).execute(lhs).getValueType(),
+ context.setValueType(input).execute(rhs).getValueType()));
}
private static DataType requiredInputType(Expression lhs, Expression rhs) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java
index 463c009e0a3..c056c11a4c0 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java
@@ -16,10 +16,10 @@ public final class Base64DecodeExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- String input = String.valueOf(ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ String input = String.valueOf(context.getValue());
if (input.isEmpty()) {
- ctx.setValue(new LongFieldValue(Long.MIN_VALUE));
+ context.setValue(new LongFieldValue(Long.MIN_VALUE));
return;
}
if (input.length() > 12) {
@@ -33,12 +33,12 @@ public final class Base64DecodeExpression extends Expression {
for (int i = decoded.length; --i >= 0;) {
output = (output << 8) + (((int)decoded[i]) & 0xff);
}
- ctx.setValue(new LongFieldValue(output));
+ context.setValue(new LongFieldValue(output));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java
index e61ac7051c1..940b75b4c99 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java
@@ -16,20 +16,20 @@ public final class Base64EncodeExpression extends Expression {
super(DataType.LONG);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- long input = ((LongFieldValue)ctx.getValue()).getLong();
+ protected void doExecute(ExecutionContext context) {
+ long input = ((LongFieldValue) context.getValue()).getLong();
byte[] output = new byte[8];
for (int i = 0; i < output.length; ++i) {
output[i] = (byte)(input & 0xffL);
input >>>= 8;
}
String encoded = Base64.getEncoder().encodeToString(output);
- ctx.setValue(new StringFieldValue(encoded));
+ context.setValue(new StringFieldValue(encoded));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java
index f395446cb10..9f8a012770b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java
@@ -26,40 +26,40 @@ public final class CatExpression extends ExpressionList<Expression> {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
DataType inputType = input != null ? input.getDataType() : null;
- VerificationContext ver = new VerificationContext(ctx);
+ VerificationContext ver = new VerificationContext(context);
List<FieldValue> values = new LinkedList<>();
List<DataType> types = new LinkedList<>();
for (Expression exp : this) {
- FieldValue val = ctx.setValue(input).execute(exp).getValue();
+ FieldValue val = context.setValue(input).execute(exp).getValue();
values.add(val);
DataType type;
if (val != null) {
type = val.getDataType();
} else {
- type = ver.setValue(inputType).execute(this).getValue();
+ type = ver.setValueType(inputType).execute(this).getValueType();
}
types.add(type);
}
DataType type = resolveOutputType(types);
- ctx.setValue(type == DataType.STRING ? asString(values) : asCollection(type, values));
+ context.setValue(type == DataType.STRING ? asString(values) : asCollection(type, values));
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
List<DataType> types = new LinkedList<>();
for (Expression exp : this) {
- DataType val = context.setValue(input).execute(exp).getValue();
+ DataType val = context.setValueType(input).execute(exp).getValueType();
types.add(val);
if (val == null) {
throw new VerificationException(this, "Attempting to concatenate a null value (" + exp + ").");
}
}
- context.setValue(resolveOutputType(types));
+ context.setValueType(resolveOutputType(types));
}
private static DataType resolveInputType(Collection<? extends Expression> list) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java
index 68aff396c54..dbf50dbf9a7 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
@@ -13,8 +12,8 @@ public final class ClearStateExpression extends Expression {
super(null);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.clear();
+ protected void doExecute(ExecutionContext context) {
+ context.clear();
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java
index 4da12bd0361..82e77192618 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java
@@ -20,4 +20,5 @@ public abstract class CompositeExpression extends Expression {
}
return new ScriptExpression(new StatementExpression(exp)).toString();
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java
index 8d5504b2b1c..b0c2a52b027 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java
@@ -26,8 +26,8 @@ public final class EchoExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- out.println(String.valueOf(ctx.getValue()));
+ protected void doExecute(ExecutionContext context) {
+ out.println(String.valueOf(context.getValue()));
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java
new file mode 100644
index 00000000000..09034659ad0
--- /dev/null
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java
@@ -0,0 +1,64 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.indexinglanguage.expressions;
+
+import com.yahoo.document.DataType;
+import com.yahoo.document.TensorDataType;
+import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.document.datatypes.TensorFieldValue;
+import com.yahoo.language.process.Encoder;
+import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorType;
+
+/**
+ * Encodes a string as a tensor using the configured Encoder component
+ *
+ * @author bratseth
+ */
+public class EncodeExpression extends Expression {
+
+ private final Encoder encoder;
+
+ /** The target type we are encoding to. Set during verification. */
+ private TensorType targetType;
+
+ public EncodeExpression(Encoder encoder) {
+ super(DataType.STRING);
+ this.encoder = encoder;
+ }
+
+ @Override
+ protected void doExecute(ExecutionContext context) {
+ StringFieldValue input = (StringFieldValue) context.getValue();
+ Tensor tensor = encoder.encode(input.getString(), context.getLanguage(), targetType);
+ context.setValue(new TensorFieldValue(tensor));
+ }
+
+ @Override
+ protected void doVerify(VerificationContext context) {
+ String outputField = context.getOutputField();
+ if (outputField == null)
+ throw new VerificationException(this, "No output field in this statement: " +
+ "Don't know what tensor type to encode to.");
+ DataType outputFieldType = context.getInputType(this, outputField);
+ if ( ! (outputFieldType instanceof TensorDataType) )
+ throw new VerificationException(this, "The type of the output field " + outputField +
+ " is not a tensor but " + outputField);
+ targetType = ((TensorDataType) outputFieldType).getTensorType();
+ context.setValueType(createdOutputType());
+ }
+
+ @Override
+ public DataType createdOutputType() {
+ return new TensorDataType(targetType);
+ }
+
+ @Override
+ public String toString() { return "encode"; }
+
+ @Override
+ public int hashCode() { return 1; }
+
+ @Override
+ public boolean equals(Object o) { return o instanceof EncodeExpression; }
+
+}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java
index 31633cdc88b..06f2d66f3fb 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java
@@ -25,12 +25,12 @@ public final class ExactExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- StringFieldValue input = (StringFieldValue)ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ StringFieldValue input = (StringFieldValue) context.getValue();
if (input.getString().isEmpty()) return;
StringFieldValue output = input.clone();
- ctx.setValue(output);
+ context.setValue(output);
String prev = output.getString();
String next = toLowerCase(prev);
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
index a4f1e3a5ca4..e2820dd5578 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
@@ -127,4 +127,5 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
value = null;
return this;
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java
index b23fe4d0ebd..a121df8e5a8 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java
@@ -6,6 +6,7 @@ import com.yahoo.document.Document;
import com.yahoo.document.DocumentUpdate;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.*;
import com.yahoo.vespa.indexinglanguage.parser.IndexingInput;
@@ -19,6 +20,13 @@ public abstract class Expression extends Selectable {
private final DataType inputType;
+ /**
+ * Creates an expression
+ *
+ * @param inputType the type of the input this expression can work with.
+ * UnresolvedDataType.INSTANCE if it works with any type,
+ * and null if it does not consume any input.
+ */
protected Expression(DataType inputType) {
this.inputType = inputType;
}
@@ -87,14 +95,14 @@ public abstract class Expression extends Selectable {
return context.getValue();
}
- protected abstract void doExecute(ExecutionContext ctx);
+ protected abstract void doExecute(ExecutionContext context);
public final DataType verify() {
return verify(new VerificationContext());
}
public final DataType verify(DataType val) {
- return verify(new VerificationContext().setValue(val));
+ return verify(new VerificationContext().setValueType(val));
}
public final Document verify(Document doc) {
@@ -140,7 +148,7 @@ public abstract class Expression extends Selectable {
public final DataType verify(VerificationContext context) {
if (inputType != null) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
if (input == null) {
throw new VerificationException(this, "Expected " + inputType.getName() + " input, got null.");
}
@@ -155,7 +163,7 @@ public abstract class Expression extends Selectable {
doVerify(context);
DataType outputType = createdOutputType();
if (outputType != null) {
- DataType output = context.getValue();
+ DataType output = context.getValueType();
if (output == null) {
throw new VerificationException(this, "Expected " + outputType.getName() + " output, got null.");
}
@@ -167,7 +175,7 @@ public abstract class Expression extends Selectable {
output.getName() + ".");
}
}
- return context.getValue();
+ return context.getValueType();
}
protected abstract void doVerify(VerificationContext context);
@@ -178,11 +186,11 @@ public abstract class Expression extends Selectable {
/** Creates an expression with simple lingustics for testing */
public static Expression fromString(String expression) throws ParseException {
- return fromString(expression, new SimpleLinguistics());
+ return fromString(expression, new SimpleLinguistics(), Encoder.throwsOnUse);
}
- public static Expression fromString(String expression, Linguistics linguistics) throws ParseException {
- return newInstance(new ScriptParserContext(linguistics).setInputStream(new IndexingInput(expression)));
+ public static Expression fromString(String expression, Linguistics linguistics, Encoder encoder) throws ParseException {
+ return newInstance(new ScriptParserContext(linguistics, encoder).setInputStream(new IndexingInput(expression)));
}
public static Expression newInstance(ScriptParserContext context) throws ParseException {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java
index ca929773a4c..0ac195efb5d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.vespa.objects.ObjectOperation;
import com.yahoo.vespa.objects.ObjectPredicate;
@@ -70,4 +69,5 @@ public abstract class ExpressionList<T extends Expression> extends CompositeExpr
exp.select(predicate, operation);
}
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldTypeAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldTypeAdapter.java
index 1e8c9e430ab..a24501823af 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldTypeAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldTypeAdapter.java
@@ -8,7 +8,8 @@ import com.yahoo.document.DataType;
*/
public interface FieldTypeAdapter {
- public DataType getInputType(Expression exp, String fieldName);
+ DataType getInputType(Expression exp, String fieldName);
+
+ void tryOutputType(Expression exp, String fieldName, DataType valueType);
- public void tryOutputType(Expression exp, String fieldName, DataType valueType);
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java
index db3cabf8b4c..036e421e6d7 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java
@@ -9,8 +9,9 @@ import com.yahoo.document.datatypes.FieldValue;
*/
public interface FieldValueAdapter extends FieldTypeAdapter {
- public FieldValue getInputValue(String fieldName);
- public FieldValue getInputValue(FieldPath fieldPath);
+ FieldValue getInputValue(String fieldName);
+ FieldValue getInputValue(FieldPath fieldPath);
+
+ FieldValueAdapter setOutputValue(Expression exp, String fieldName, FieldValue fieldValue);
- public FieldValueAdapter setOutputValue(Expression exp, String fieldName, FieldValue fieldValue);
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java
index 91f46381def..34fa42dcbca 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java
@@ -26,8 +26,8 @@ public final class FlattenExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- StringFieldValue input = (StringFieldValue)ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ StringFieldValue input = (StringFieldValue) context.getValue();
SpanTree tree = input.getSpanTree(SpanTrees.LINGUISTICS);
Map<Integer, List<String>> map = new HashMap<>();
for (Annotation anno : tree) {
@@ -65,12 +65,12 @@ public final class FlattenExpression extends Expression {
output.append(inputVal.charAt(i));
}
}
- ctx.setValue(new StringFieldValue(output.toString()));
+ context.setValue(new StringFieldValue(output.toString()));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java
index 4dc2fdd0343..84dbe07d418 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java
@@ -27,18 +27,18 @@ public final class ForEachExpression extends CompositeExpression {
}
@Override
- protected void doExecute(final ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(final ExecutionContext context) {
+ FieldValue input = context.getValue();
if (input instanceof Array || input instanceof WeightedSet) {
- FieldValue next = new MyConverter(ctx, exp).convert(input);
+ FieldValue next = new MyConverter(context, exp).convert(input);
if (next == null) {
- VerificationContext vctx = new VerificationContext(ctx);
- vctx.setValue(input.getDataType()).execute(this);
- next = vctx.getValue().createFieldValue();
+ VerificationContext vctx = new VerificationContext(context);
+ vctx.setValueType(input.getDataType()).execute(this);
+ next = vctx.getValueType().createFieldValue();
}
- ctx.setValue(next);
+ context.setValue(next);
} else if (input instanceof Struct) {
- ctx.setValue(new MyConverter(ctx, exp).convert(input));
+ context.setValue(new MyConverter(context, exp).convert(input));
} else {
throw new IllegalArgumentException("Expected Array, Struct or WeightedSet input, got " +
input.getDataType().getName() + ".");
@@ -47,25 +47,25 @@ public final class ForEachExpression extends CompositeExpression {
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
if (input instanceof ArrayDataType || input instanceof WeightedSetDataType) {
- context.setValue(((CollectionDataType)input).getNestedType()).execute(exp);
+ context.setValueType(((CollectionDataType)input).getNestedType()).execute(exp);
if (input instanceof ArrayDataType) {
- context.setValue(DataType.getArray(context.getValue()));
+ context.setValueType(DataType.getArray(context.getValueType()));
} else {
WeightedSetDataType wset = (WeightedSetDataType)input;
- context.setValue(DataType.getWeightedSet(context.getValue(), wset.createIfNonExistent(), wset.removeIfZero()));
+ context.setValueType(DataType.getWeightedSet(context.getValueType(), wset.createIfNonExistent(), wset.removeIfZero()));
}
} else if (input instanceof StructDataType) {
for (Field field : ((StructDataType)input).getFields()) {
DataType fieldType = field.getDataType();
- DataType valueType = context.setValue(fieldType).execute(exp).getValue();
+ DataType valueType = context.setValueType(fieldType).execute(exp).getValueType();
if (!fieldType.isAssignableFrom(valueType)) {
throw new VerificationException(this, "Expected " + fieldType.getName() + " output, got " +
valueType.getName() + ".");
}
}
- context.setValue(input);
+ context.setValueType(input);
} else {
throw new VerificationException(this, "Expected Array, Struct or WeightedSet input, got " +
input.getName() + ".");
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
index 35bdbce1fd2..470284d128b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
@@ -24,8 +24,8 @@ public final class GetFieldExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
if (!(input instanceof StructuredFieldValue)) {
throw new IllegalArgumentException("Expected structured input, got " + input.getDataType().getName() + ".");
}
@@ -35,12 +35,12 @@ public final class GetFieldExpression extends Expression {
throw new IllegalArgumentException("Field '" + fieldName + "' not found in struct type '" +
struct.getDataType().getName() + "'");
}
- ctx.setValue(struct.getFieldValue(field));
+ context.setValue(struct.getFieldValue(field));
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
if (!(input instanceof StructuredDataType)) {
throw new VerificationException(this, "Expected structured input, got " + input.getName() + ".");
}
@@ -49,7 +49,7 @@ public final class GetFieldExpression extends Expression {
throw new VerificationException(this, "Field '" + fieldName + "' not found in struct type '" +
input.getName() + "'");
}
- context.setValue(field.getDataType());
+ context.setValueType(field.getDataType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
index 50b502049dc..980cb4ff869 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
@@ -20,8 +20,8 @@ public final class GetVarExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(ctx.getVariable(varName));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(context.getVariable(varName));
}
@Override
@@ -30,7 +30,7 @@ public final class GetVarExpression extends Expression {
if (input == null) {
throw new VerificationException(this, "Variable '" + varName + "' not found.");
}
- context.setValue(input);
+ context.setValueType(input);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java
index 3973dd8b317..179f202788c 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java
@@ -27,11 +27,11 @@ public final class GuardExpression extends CompositeExpression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- if (!shouldExecute && ctx.getAdapter() instanceof UpdateAdapter) {
- ctx.setValue(null);
+ protected void doExecute(ExecutionContext context) {
+ if (!shouldExecute && context.getAdapter() instanceof UpdateAdapter) {
+ context.setValue(null);
} else {
- exp.execute(ctx);
+ exp.execute(context);
}
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java
index c97771943b7..f3bcef6fa3c 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java
@@ -17,10 +17,10 @@ public final class HexDecodeExpression extends Expression {
super(DataType.STRING);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- String input = String.valueOf(ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ String input = String.valueOf(context.getValue());
if (input.isEmpty()) {
- ctx.setValue(new LongFieldValue(Long.MIN_VALUE));
+ context.setValue(new LongFieldValue(Long.MIN_VALUE));
return;
}
BigInteger output;
@@ -35,12 +35,12 @@ public final class HexDecodeExpression extends Expression {
if (output.compareTo(BigInteger.ZERO) == 1 && output.bitLength() == 64) {
output = output.subtract(ULONG_MAX); // flip to negative
}
- ctx.setValue(new LongFieldValue(output.longValue()));
+ context.setValue(new LongFieldValue(output.longValue()));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java
index cf91115caad..ebc9deb2b88 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java
@@ -14,14 +14,14 @@ public final class HexEncodeExpression extends Expression {
super(DataType.LONG);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- long input = ((LongFieldValue)ctx.getValue()).getLong();
- ctx.setValue(new StringFieldValue(Long.toHexString(input)));
+ protected void doExecute(ExecutionContext context) {
+ long input = ((LongFieldValue) context.getValue()).getLong();
+ context.setValue(new StringFieldValue(Long.toHexString(input)));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java
index 0c614c7368d..bb0c28580f0 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.StringFieldValue;
import static com.yahoo.vespa.defaults.Defaults.getDefaults;
@@ -16,13 +15,13 @@ public final class HostNameExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new StringFieldValue(normalizeHostName(getDefaults().vespaHostname())));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new StringFieldValue(normalizeHostName(getDefaults().vespaHostname())));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java
index 9e7f60aa3e3..a6dfa4dd13e 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.NumericFieldValue;
import com.yahoo.vespa.objects.ObjectOperation;
@@ -75,34 +74,34 @@ public final class IfThenExpression extends CompositeExpression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
- FieldValue lhsVal = ctx.setValue(input).execute(lhs).getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
+ FieldValue lhsVal = context.setValue(input).execute(lhs).getValue();
if (lhsVal == null) {
- ctx.setValue(null);
+ context.setValue(null);
return;
}
- FieldValue rhsVal = ctx.setValue(input).execute(rhs).getValue();
+ FieldValue rhsVal = context.setValue(input).execute(rhs).getValue();
if (rhsVal == null) {
- ctx.setValue(null);
+ context.setValue(null);
return;
}
- ctx.setValue(input);
+ context.setValue(input);
if (isTrue(lhsVal, cmp, rhsVal)) {
- ifTrue.execute(ctx);
+ ifTrue.execute(context);
} else if (ifFalse != null) {
- ifFalse.execute(ctx);
+ ifFalse.execute(context);
}
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
- context.setValue(input).execute(lhs);
- context.setValue(input).execute(rhs);
- context.setValue(input).execute(ifTrue);
- context.setValue(input).execute(ifFalse);
- context.setValue(input);
+ DataType input = context.getValueType();
+ context.setValueType(input).execute(lhs);
+ context.setValueType(input).execute(rhs);
+ context.setValueType(input).execute(ifTrue);
+ context.setValueType(input).execute(ifFalse);
+ context.setValueType(input);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
index d707a50fbd8..2ae43f8c12a 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
@@ -9,7 +9,6 @@ import com.yahoo.vespa.objects.ObjectPredicate;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
/**
* @author Simon Thoresen Hult
@@ -29,11 +28,11 @@ public final class InputExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
+ protected void doExecute(ExecutionContext context) {
if (fieldPath != null) {
- ctx.setValue(ctx.getInputValue(fieldPath));
+ context.setValue(context.getInputValue(fieldPath));
} else {
- ctx.setValue(ctx.getInputValue(fieldName));
+ context.setValue(context.getInputValue(fieldName));
}
}
@@ -43,7 +42,7 @@ public final class InputExpression extends Expression {
if (val == null) {
throw new VerificationException(this, "Field '" + fieldName + "' not found.");
}
- context.setValue(val);
+ context.setValueType(val);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java
index 5cff622f033..0f7e8122c9d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java
@@ -28,8 +28,8 @@ public final class JoinExpression extends Expression {
@SuppressWarnings({ "unchecked" })
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
if (!(input instanceof Array)) {
throw new IllegalArgumentException("Expected Array input, got " + input.getDataType().getName() + ".");
}
@@ -40,16 +40,16 @@ public final class JoinExpression extends Expression {
output.append(delimiter);
}
}
- ctx.setValue(new StringFieldValue(output.toString()));
+ context.setValue(new StringFieldValue(output.toString()));
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
if (!(input instanceof ArrayDataType)) {
throw new VerificationException(this, "Expected Array input, got " + input.getName() + ".");
}
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LiteralBoolExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LiteralBoolExpression.java
index a989f1a57d2..f92bb9f9b7d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LiteralBoolExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LiteralBoolExpression.java
@@ -25,7 +25,7 @@ public class LiteralBoolExpression extends Expression {
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java
index 106045591e2..47d790e0b07 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java
@@ -15,13 +15,13 @@ public final class LowerCaseExpression extends Expression {
super(DataType.STRING);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new StringFieldValue(toLowerCase(String.valueOf(ctx.getValue()))));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new StringFieldValue(toLowerCase(String.valueOf(context.getValue()))));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
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 0aa4e4eb772..3ff218f1fc4 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
@@ -16,7 +16,7 @@ import com.yahoo.vespa.indexinglanguage.linguistics.LinguisticsAnnotator;
import java.util.Iterator;
/**
- * A filter which splits incoming text into n-grams
+ * A filter which splits incoming text into n-grams.
*
* @author bratseth
*/
@@ -28,7 +28,7 @@ public final class NGramExpression extends Expression {
/**
* Creates an executable ngram expression
*
- * @param linguistics the gram splitter to use, or null if this is used for representation and will not be executed
+ * @param linguistics the gram splitter to use, or null if this is used for representation and will not be executed
* @param gramSize the gram size
*/
public NGramExpression(Linguistics linguistics, int gramSize) {
@@ -46,14 +46,14 @@ public final class NGramExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- StringFieldValue input = (StringFieldValue)ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ StringFieldValue input = (StringFieldValue) context.getValue();
if (input.getSpanTree(SpanTrees.LINGUISTICS) != null) {
// This expression is already executed for this input instance
return;
}
StringFieldValue output = input.clone();
- ctx.setValue(output);
+ context.setValue(output);
SpanList spanList = output.setSpanTree(new SpanTree(SpanTrees.LINGUISTICS)).spanList();
int lastPosition = 0;
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 1a3037761c6..d1ca03f99ba 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
@@ -64,7 +64,7 @@ public final class NormalizeExpression extends Expression {
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java
index c8df0c0d667..2c59adb5e1d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java
@@ -25,13 +25,13 @@ public final class NowExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new LongFieldValue(timer.currentTimeSeconds()));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new LongFieldValue(timer.currentTimeSeconds()));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java
index 8ba129b92c1..d4e913bb25b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java
@@ -30,16 +30,16 @@ public final class OptimizePredicateExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- PredicateFieldValue predicate = ((PredicateFieldValue)ctx.getValue()).clone();
- IntegerFieldValue arity = (IntegerFieldValue)ctx.getVariable("arity");
- LongFieldValue lower_bound = (LongFieldValue)ctx.getVariable("lower_bound");
- LongFieldValue upper_bound = (LongFieldValue)ctx.getVariable("upper_bound");
+ protected void doExecute(ExecutionContext context) {
+ PredicateFieldValue predicate = ((PredicateFieldValue) context.getValue()).clone();
+ IntegerFieldValue arity = (IntegerFieldValue) context.getVariable("arity");
+ LongFieldValue lower_bound = (LongFieldValue) context.getVariable("lower_bound");
+ LongFieldValue upper_bound = (LongFieldValue) context.getVariable("upper_bound");
Long lower = lower_bound != null? lower_bound.getLong() : null;
Long upper = upper_bound != null? upper_bound.getLong() : null;
PredicateOptions options = new PredicateOptions(arity.getInteger(), lower, upper);
predicate.setPredicate(optimizer.process(predicate.getPredicate(), options));
- ctx.setValue(predicate);
+ context.setValue(predicate);
}
@Override
@@ -47,7 +47,7 @@ public final class OptimizePredicateExpression extends Expression {
checkVariable(context, "arity", DataType.INT, true);
checkVariable(context, "lower_bound", DataType.LONG, false);
checkVariable(context, "upper_bound", DataType.LONG, false);
- context.setValue(DataType.PREDICATE);
+ context.setValueType(DataType.PREDICATE);
}
private void checkVariable(VerificationContext ctx, String var, DataType type, boolean required) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java
index 2e39c45203d..398c2751bd8 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
@@ -23,13 +22,13 @@ public abstract class OutputExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setOutputValue(this, fieldName, ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ context.setOutputValue(this, fieldName, context.getValue());
}
@Override
protected void doVerify(VerificationContext context) {
- context.tryOutputType(this, fieldName, context.getValue());
+ context.tryOutputType(this, fieldName, context.getValueType());
}
@Override
@@ -58,4 +57,5 @@ public abstract class OutputExpression extends Expression {
public int hashCode() {
return getClass().hashCode() + (fieldName != null ? fieldName.hashCode() : 0);
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java
index 70c9463eb85..8f7e6bc7040 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java
@@ -23,8 +23,8 @@ public class ParenthesisExpression extends CompositeExpression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- innerExp.execute(ctx);
+ protected void doExecute(ExecutionContext context) {
+ innerExp.execute(context);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java
index a00714798cf..f97f5ca9ebc 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java
@@ -27,19 +27,19 @@ public final class RandomExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
+ protected void doExecute(ExecutionContext context) {
int max;
if (this.max != null) {
max = this.max;
} else {
- max = Integer.parseInt(String.valueOf(ctx.getValue()));
+ max = Integer.parseInt(String.valueOf(context.getValue()));
}
- ctx.setValue(new IntegerFieldValue(ThreadLocalRandom.current().nextInt(max)));
+ context.setValue(new IntegerFieldValue(ThreadLocalRandom.current().nextInt(max)));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
index 320c47103aa..7317cb2216f 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.ScriptParser;
import com.yahoo.vespa.indexinglanguage.ScriptParserContext;
@@ -33,21 +34,21 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
for (Expression exp : this) {
- ctx.setValue(input).execute(exp);
+ context.setValue(input).execute(exp);
}
- ctx.setValue(input);
+ context.setValue(input);
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
for (Expression exp : this) {
- context.setValue(input).execute(exp);
+ context.setValueType(input).execute(exp);
}
- context.setValue(input);
+ context.setValueType(input);
}
private static DataType resolveInputType(Collection<? extends StatementExpression> list) {
@@ -91,11 +92,11 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
/** Creates an expression with simple lingustics for testing */
@SuppressWarnings("deprecation")
public static ScriptExpression fromString(String expression) throws ParseException {
- return fromString(expression, new SimpleLinguistics());
+ return fromString(expression, new SimpleLinguistics(), Encoder.throwsOnUse);
}
- public static ScriptExpression fromString(String expression, Linguistics linguistics) throws ParseException {
- return newInstance(new ScriptParserContext(linguistics).setInputStream(new IndexingInput(expression)));
+ public static ScriptExpression fromString(String expression, Linguistics linguistics, Encoder encoder) throws ParseException {
+ return newInstance(new ScriptParserContext(linguistics, encoder).setInputStream(new IndexingInput(expression)));
}
public static ScriptExpression newInstance(ScriptParserContext config) throws ParseException {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java
index b511410dd10..c711b92c7c1 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.collections.Pair;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.vespa.objects.ObjectOperation;
import com.yahoo.vespa.objects.ObjectPredicate;
@@ -30,29 +29,29 @@ public final class SelectInputExpression extends CompositeExpression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
for (Pair<String, Expression> entry : cases) {
- FieldValue val = ctx.getInputValue(entry.getFirst());
+ FieldValue val = context.getInputValue(entry.getFirst());
if (val != null) {
- ctx.setValue(val).execute(entry.getSecond());
+ context.setValue(val).execute(entry.getSecond());
break;
}
}
- ctx.setValue(input);
+ context.setValue(input);
}
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
for (Pair<String, Expression> entry : cases) {
DataType val = context.getInputType(this, entry.getFirst());
if (val == null) {
throw new VerificationException(this, "Field '" + entry.getFirst() + "' not found.");
}
- context.setValue(val).execute(entry.getSecond());
+ context.setValueType(val).execute(entry.getSecond());
}
- context.setValue(input);
+ context.setValueType(input);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java
index 8ec766cd1e1..f8e2462b41d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java
@@ -15,8 +15,8 @@ public final class SetLanguageExpression extends Expression {
super(DataType.STRING);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setLanguage(Language.fromLanguageTag(String.valueOf(ctx.getValue())));
+ protected void doExecute(ExecutionContext context) {
+ context.setLanguage(Language.fromLanguageTag(String.valueOf(context.getValue())));
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
index f013e22ebc3..8fc3aa48f6d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
@@ -25,13 +25,13 @@ public final class SetValueExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(value);
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(value);
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(value.getDataType());
+ context.setValueType(value.getDataType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java
index f15982796ce..184325c3c7e 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java
@@ -20,13 +20,13 @@ public final class SetVarExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setVariable(varName, ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ context.setVariable(varName, context.getValue());
}
@Override
protected void doVerify(VerificationContext context) {
- DataType next = context.getValue();
+ DataType next = context.getValueType();
DataType prev = context.getVariable(varName);
if (prev != null && !prev.equals(next)) {
throw new VerificationException(this, "Attempting to assign conflicting types to variable '" + varName +
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java
index b436775b151..092f07f8514 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java
@@ -25,8 +25,8 @@ public final class SplitExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- String input = String.valueOf(ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ String input = String.valueOf(context.getValue());
Array<StringFieldValue> output = new Array<>(DataType.getArray(DataType.STRING));
if (!input.isEmpty()) {
String[] splits = splitPattern.split(input);
@@ -34,12 +34,12 @@ public final class SplitExpression extends Expression {
output.add(new StringFieldValue(split));
}
}
- ctx.setValue(output);
+ context.setValue(output);
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java
index cf1e808946d..145133e210d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java
@@ -2,7 +2,9 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
+import com.yahoo.document.TensorDataType;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.ScriptParser;
import com.yahoo.vespa.indexinglanguage.ScriptParserContext;
@@ -20,6 +22,9 @@ import java.util.List;
*/
public final class StatementExpression extends ExpressionList<Expression> {
+ /** The name of the (last) output field tthis statement will write to, or null if none */
+ private String outputField;
+
public StatementExpression(Expression... lst) {
this(Arrays.asList(lst));
}
@@ -33,17 +38,21 @@ public final class StatementExpression extends ExpressionList<Expression> {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
+ protected void doExecute(ExecutionContext context) {
for (Expression exp : this) {
- ctx.execute(exp);
+ context.execute(exp);
}
}
@Override
protected void doVerify(VerificationContext context) {
- for (Expression exp : this) {
- context.execute(exp);
+ for (Expression expression : this) {
+ if (expression instanceof OutputExpression)
+ outputField = ((OutputExpression)expression).getFieldName();
}
+ context.setOutputField(outputField);
+ for (Expression expression : this)
+ context.execute(expression);
}
private static DataType resolveInputType(Iterable<Expression> lst) {
@@ -90,13 +99,12 @@ public final class StatementExpression extends ExpressionList<Expression> {
}
/** Creates an expression with simple lingustics for testing */
- @SuppressWarnings("deprecation")
public static StatementExpression fromString(String expression) throws ParseException {
- return fromString(expression, new SimpleLinguistics());
+ return fromString(expression, new SimpleLinguistics(), Encoder.throwsOnUse);
}
- public static StatementExpression fromString(String expression, Linguistics linguistics) throws ParseException {
- return newInstance(new ScriptParserContext(linguistics).setInputStream(new IndexingInput(expression)));
+ public static StatementExpression fromString(String expression, Linguistics linguistics, Encoder encoder) throws ParseException {
+ return newInstance(new ScriptParserContext(linguistics, encoder).setInputStream(new IndexingInput(expression)));
}
public static StatementExpression newInstance(ScriptParserContext config) throws ParseException {
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 4b30d646d53..ce31c6f6408 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
@@ -30,8 +30,8 @@ public final class SubstringExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- String input = String.valueOf(ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ String input = String.valueOf(context.getValue());
int len = input.length();
if (from >= len) {
input = "";
@@ -40,12 +40,12 @@ public final class SubstringExpression extends Expression {
} else {
input = input.substring(from, to);
}
- ctx.setValue(new StringFieldValue(input));
+ context.setValue(new StringFieldValue(input));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java
index 72dec19ef4e..9a8e8719461 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.text.StringUtilities;
@@ -46,8 +45,8 @@ public final class SwitchExpression extends CompositeExpression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
Expression exp = null;
if (input != null) {
if (!(input instanceof StringFieldValue)) {
@@ -60,9 +59,9 @@ public final class SwitchExpression extends CompositeExpression {
exp = defaultExp;
}
if (exp != null) {
- exp.execute(ctx);
+ exp.execute(context);
}
- ctx.setValue(input);
+ context.setValue(input);
}
@Override
@@ -75,7 +74,7 @@ public final class SwitchExpression extends CompositeExpression {
@Override
protected void doVerify(VerificationContext context) {
- DataType input = context.getValue();
+ DataType input = context.getValueType();
if (input == null) {
throw new VerificationException(this, "Expected " + DataType.STRING.getName() + " input, got null.");
}
@@ -84,10 +83,10 @@ public final class SwitchExpression extends CompositeExpression {
input.getName() + ".");
}
for (Expression exp : cases.values()) {
- context.setValue(input).execute(exp);
+ context.setValueType(input).execute(exp);
}
- context.setValue(input).execute(defaultExp);
- context.setValue(input);
+ context.setValueType(input).execute(defaultExp);
+ context.setValueType(input);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java
index 04ce7d2be39..7c467b1e08d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
@@ -13,7 +12,7 @@ public final class ThisExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
+ protected void doExecute(ExecutionContext context) {
// empty
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java
index cad3f1f9c04..3069fc5906a 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java
@@ -16,20 +16,20 @@ public final class ToArrayExpression extends Expression {
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
DataType inputType = input.getDataType();
ArrayDataType outputType = DataType.getArray(inputType);
Array output = outputType.createFieldValue();
output.add(input);
- ctx.setValue(output);
+ context.setValue(output);
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(DataType.getArray(context.getValue()));
+ context.setValueType(DataType.getArray(context.getValueType()));
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToBoolExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToBoolExpression.java
index d6d8ed54d26..da59df1fdd6 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToBoolExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToBoolExpression.java
@@ -2,10 +2,8 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.NumericDataType;
import com.yahoo.document.datatypes.BoolFieldValue;
import com.yahoo.document.datatypes.FieldValue;
-import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.NumericFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
@@ -33,7 +31,7 @@ public final class ToBoolExpression extends Expression {
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java
index 5348493a8fd..b43371a5dba 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java
@@ -13,13 +13,13 @@ public final class ToByteExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new ByteFieldValue(Byte.valueOf(String.valueOf(ctx.getValue()))));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new ByteFieldValue(Byte.valueOf(String.valueOf(context.getValue()))));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java
index c9a04693a25..7d55de7b265 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java
@@ -13,13 +13,13 @@ public final class ToDoubleExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new DoubleFieldValue(Double.valueOf(String.valueOf(ctx.getValue()))));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new DoubleFieldValue(Double.valueOf(String.valueOf(context.getValue()))));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java
index b255702ada3..b1d6a00a668 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java
@@ -13,13 +13,13 @@ public final class ToFloatExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new FloatFieldValue(Float.valueOf(String.valueOf(ctx.getValue()))));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new FloatFieldValue(Float.valueOf(String.valueOf(context.getValue()))));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java
index 7efc25d8400..a63833e0882 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java
@@ -13,13 +13,13 @@ public final class ToIntegerExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new IntegerFieldValue(Integer.valueOf(String.valueOf(ctx.getValue()))));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new IntegerFieldValue(Integer.valueOf(String.valueOf(context.getValue()))));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java
index 74d43fc1693..0ef775614e5 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java
@@ -13,13 +13,13 @@ public final class ToLongExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new LongFieldValue(Long.valueOf(String.valueOf(ctx.getValue()))));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new LongFieldValue(Long.valueOf(String.valueOf(context.getValue()))));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java
index 4c7cd348fbb..a16feec981f 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.PositionDataType;
/**
@@ -14,13 +13,13 @@ public final class ToPositionExpression extends Expression {
super(DataType.STRING);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(PositionDataType.fromString(String.valueOf(ctx.getValue())));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(PositionDataType.fromString(String.valueOf(context.getValue())));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java
index 36f896a0b7f..64ed14618d7 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java
@@ -13,13 +13,13 @@ public final class ToStringExpression extends Expression {
super(UnresolvedDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new StringFieldValue(String.valueOf(ctx.getValue())));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new StringFieldValue(String.valueOf(context.getValue())));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java
index 8d511d442df..dcc14e715e9 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java
@@ -30,20 +30,20 @@ public final class ToWsetExpression extends Expression {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
- protected void doExecute(ExecutionContext ctx) {
- FieldValue input = ctx.getValue();
+ protected void doExecute(ExecutionContext context) {
+ FieldValue input = context.getValue();
DataType inputType = input.getDataType();
WeightedSetDataType outputType = DataType.getWeightedSet(inputType, createIfNonExistent, removeIfZero);
WeightedSet output = outputType.createFieldValue();
output.add(input);
- ctx.setValue(output);
+ context.setValue(output);
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(DataType.getWeightedSet(context.getValue(), createIfNonExistent, removeIfZero));
+ context.setValueType(DataType.getWeightedSet(context.getValueType(), createIfNonExistent, removeIfZero));
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java
index 8dcf360a6ee..7db04a2e595 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.StringFieldValue;
/**
@@ -15,13 +14,13 @@ public final class TrimExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- ctx.setValue(new StringFieldValue(String.valueOf(ctx.getValue()).trim()));
+ protected void doExecute(ExecutionContext context) {
+ context.setValue(new StringFieldValue(String.valueOf(context.getValue()).trim()));
}
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/UnresolvedDataType.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/UnresolvedDataType.java
index ef08c01633a..1847db0f29e 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/UnresolvedDataType.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/UnresolvedDataType.java
@@ -19,4 +19,5 @@ final class UnresolvedDataType extends PrimitiveDataType {
public boolean isValueCompatible(FieldValue value) {
return value != null;
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java
index 38b8b82f9e9..61d796e5356 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java
@@ -14,6 +14,7 @@ public class VerificationContext implements FieldTypeAdapter, Cloneable {
private final Map<String, DataType> variables = new HashMap<String, DataType>();
private final FieldTypeAdapter adapter;
private DataType value;
+ private String outputField;
public VerificationContext() {
this.adapter = null;
@@ -49,19 +50,30 @@ public class VerificationContext implements FieldTypeAdapter, Cloneable {
return this;
}
- public DataType getValue() {
+ public DataType getValueType() {
return value;
}
- public VerificationContext setValue(DataType value) {
+ /** Sets the output value type */
+ public VerificationContext setValueType(DataType value) {
this.value = value;
return this;
}
+ /** Sets the name of the (last) output field of the statement this is executed as a part of */
+ public void setOutputField(String outputField) { this.outputField = outputField; }
+
+ /**
+ * Returns the name of the (last) output field of the statement this is executed as a part of,
+ * or null if none or not yet verified
+ */
+ public String getOutputField() { return outputField; }
+
public VerificationContext clear() {
variables.clear();
value = null;
return this;
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java
index ed56cdfb604..955131e63b0 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java
@@ -17,14 +17,14 @@ public final class ZCurveExpression extends Expression {
super(PositionDataType.INSTANCE);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- Struct input = ((Struct)ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ Struct input = ((Struct) context.getValue());
Integer x = getFieldValue(input, PositionDataType.FIELD_X);
Integer y = getFieldValue(input, PositionDataType.FIELD_Y);
if (x != null && y != null) {
- ctx.setValue(new LongFieldValue(ZCurve.encode(x, y)));
+ context.setValue(new LongFieldValue(ZCurve.encode(x, y)));
} else {
- ctx.setValue(DataType.LONG.createFieldValue());
+ context.setValue(DataType.LONG.createFieldValue());
}
}
@@ -35,7 +35,7 @@ public final class ZCurveExpression extends Expression {
@Override
protected void doVerify(VerificationContext context) {
- context.setValue(createdOutputType());
+ context.setValueType(createdOutputType());
}
@Override
diff --git a/indexinglanguage/src/main/javacc/IndexingParser.jj b/indexinglanguage/src/main/javacc/IndexingParser.jj
index 632a19a2c6c..4533a17954c 100644
--- a/indexinglanguage/src/main/javacc/IndexingParser.jj
+++ b/indexinglanguage/src/main/javacc/IndexingParser.jj
@@ -34,6 +34,7 @@ import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.indexinglanguage.expressions.*;
import com.yahoo.vespa.indexinglanguage.linguistics.AnnotatorConfig;
import com.yahoo.language.process.StemMode;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.Linguistics;
/**
@@ -44,6 +45,7 @@ public class IndexingParser {
private String defaultFieldName;
private Linguistics linguistics;
+ private Encoder encoder;
private AnnotatorConfig annotatorCfg;
public IndexingParser(String str) {
@@ -60,6 +62,11 @@ public class IndexingParser {
return this;
}
+ public IndexingParser setEncoder(Encoder encoder) {
+ this.encoder = encoder;
+ return this;
+ }
+
public IndexingParser setAnnotatorConfig(AnnotatorConfig cfg) {
annotatorCfg = cfg;
return this;
@@ -150,6 +157,7 @@ TOKEN :
<CREATE_IF_NON_EXISTENT: "create_if_non_existent"> |
<ECHO: "echo"> |
<ELSE: "else"> |
+ <ENCODE: "encode"> |
<EXACT: "exact"> |
<FLATTEN: "flatten"> |
<FOR_EACH: "for_each"> |
@@ -275,6 +283,7 @@ Expression value() :
val = base64EncodeExp() |
val = clearStateExp() |
val = echoExp() |
+ val = encodeExp() |
val = exactExp() |
val = flattenExp() |
val = forEachExp() |
@@ -356,6 +365,12 @@ Expression echoExp() : { }
{ return new EchoExpression(); }
}
+Expression encodeExp() : { }
+{
+ ( <ENCODE> )
+ { return new EncodeExpression(encoder); }
+}
+
Expression exactExp() : { }
{
( <EXACT> )
@@ -729,6 +744,7 @@ String identifier() :
<ECHO> |
<EXACT> |
<ELSE> |
+ <ENCODE> |
<FLATTEN> |
<FOR_EACH> |
<GET_FIELD> |
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java
index 5c86d0fe836..644da80191d 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java
@@ -260,7 +260,7 @@ public class ExpressionConverterTestCase {
super(null);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
+ protected void doExecute(ExecutionContext context) {
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptParserTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptParserTestCase.java
index 0df3073cd25..32e38dbee6f 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptParserTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptParserTestCase.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.indexinglanguage;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.expressions.EchoExpression;
import com.yahoo.vespa.indexinglanguage.expressions.InputExpression;
@@ -95,7 +96,7 @@ public class ScriptParserTestCase {
}
private static ScriptParserContext newContext(String input) {
- return new ScriptParserContext(new SimpleLinguistics()).setInputStream(new IndexingInput(input));
+ return new ScriptParserContext(new SimpleLinguistics(), Encoder.throwsOnUse).setInputStream(new IndexingInput(input));
}
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptTestCase.java
index 14a8f40c46c..9d3d0abb256 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ScriptTestCase.java
@@ -4,12 +4,28 @@ package com.yahoo.vespa.indexinglanguage;
import com.yahoo.document.DataType;
import com.yahoo.document.Document;
import com.yahoo.document.DocumentType;
+import com.yahoo.document.Field;
+import com.yahoo.document.FieldPath;
+import com.yahoo.document.TensorDataType;
import com.yahoo.document.datatypes.BoolFieldValue;
+import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.document.datatypes.TensorFieldValue;
+import com.yahoo.language.Language;
+import com.yahoo.language.process.Encoder;
+import com.yahoo.language.simple.SimpleLinguistics;
+import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorAddress;
+import com.yahoo.tensor.TensorType;
import com.yahoo.vespa.indexinglanguage.expressions.*;
import com.yahoo.vespa.indexinglanguage.parser.ParseException;
import org.junit.Test;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import static org.junit.Assert.*;
/**
@@ -84,10 +100,49 @@ public class ScriptTestCase {
Document input = new Document(type, "id:scheme:mytype::");
input.setFieldValue("in-1", new StringFieldValue("foo"));
var expression = Expression.fromString("if (input 'in-1' == \"foo\") { true | summary 'mybool' | attribute 'mybool' }");
- System.out.println(expression);
Document output = Expression.execute(expression, input);
assertNotNull(output);
assertEquals(new BoolFieldValue(true), output.getFieldValue("mybool"));
}
+ @Test
+ public void testEncode() throws ParseException {
+ TensorType tensorType = TensorType.fromSpec("tensor(d[4])");
+ var expression = Expression.fromString("input myText | encode | attribute 'myTensor'",
+ new SimpleLinguistics(),
+ new MockEncoder());
+
+ SimpleTestAdapter adapter = new SimpleTestAdapter();
+ adapter.createField(new Field("myText", DataType.STRING));
+ adapter.createField(new Field("myTensor", new TensorDataType(tensorType)));
+ adapter.setValue("myText", new StringFieldValue("input text"));
+
+ // Necessary to resolve output type
+ VerificationContext verificationContext = new VerificationContext(adapter);
+ assertEquals(TensorDataType.class, expression.verify(verificationContext).getClass());
+
+ ExecutionContext context = new ExecutionContext(adapter);
+ context.setValue(new StringFieldValue("input text"));
+ expression.execute(context);
+ assertNotNull(context);
+ //assertTrue(context.getOutputType() instanceof TensorDataType);
+ assertTrue(adapter.values.containsKey("myTensor"));
+ assertEquals(Tensor.from(tensorType, "[7,3,0,0]"),
+ ((TensorFieldValue)adapter.values.get("myTensor")).getTensor().get());
+ }
+
+ private static class MockEncoder implements Encoder {
+
+ @Override
+ public List<Integer> encode(String text, Language language) {
+ return null;
+ }
+
+ @Override
+ public Tensor encode(String text, Language language, TensorType tensorType) {
+ return Tensor.from(tensorType, "[7,3,0,0]");
+ }
+
+ }
+
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java
index 5d1cc514d35..892b4ebecb2 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java
@@ -17,8 +17,8 @@ import java.util.Map;
*/
public class SimpleTestAdapter implements FieldValueAdapter {
- private final Map<String, DataType> types = new HashMap<String, DataType>();
- private final Map<String, FieldValue> values = new HashMap<String, FieldValue>();
+ final Map<String, DataType> types = new HashMap<>();
+ final Map<String, FieldValue> values = new HashMap<>();
public SimpleTestAdapter(Field... fields) {
for (Field field : fields) {
@@ -58,9 +58,15 @@ public class SimpleTestAdapter implements FieldValueAdapter {
}
}
+ public SimpleTestAdapter setValue(String fieldName, FieldValue fieldValue) {
+ values.put(fieldName, fieldValue);
+ return this;
+ }
+
@Override
public SimpleTestAdapter setOutputValue(Expression exp, String fieldName, FieldValue fieldValue) {
values.put(fieldName, fieldValue);
return this;
}
+
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/CatTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/CatTestCase.java
index 1b9c546fa19..84b2a7ec856 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/CatTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/CatTestCase.java
@@ -243,6 +243,6 @@ public class CatTestCase {
SimpleTestAdapter adapter = new SimpleTestAdapter(new Field("a", typeA), new Field("b", typeB));
VerificationContext ctx = new VerificationContext(adapter);
new CatExpression(new InputExpression("a"), new InputExpression("b")).verify(ctx);
- return ctx.getValue();
+ return ctx.getValueType();
}
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java
index e837b30707d..818827fc53a 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java
@@ -18,18 +18,18 @@ class ExpressionAssert {
}
public static void assertVerify(DataType valueBefore, Expression exp, DataType expectedValueAfter) {
- assertVerifyCtx(new VerificationContext().setValue(valueBefore), exp, expectedValueAfter);
+ assertVerifyCtx(new VerificationContext().setValueType(valueBefore), exp, expectedValueAfter);
}
public static void assertVerifyThrows(DataType valueBefore, Expression exp, String expectedException) {
- assertVerifyCtxThrows(new VerificationContext().setValue(valueBefore), exp, expectedException);
+ assertVerifyCtxThrows(new VerificationContext().setValueType(valueBefore), exp, expectedException);
}
interface CreateExpression {
Expression create();
}
public static void assertVerifyThrows(DataType valueBefore, CreateExpression createExp, String expectedException) {
- assertVerifyCtxThrows(new VerificationContext().setValue(valueBefore), createExp, expectedException);
+ assertVerifyCtxThrows(new VerificationContext().setValueType(valueBefore), createExp, expectedException);
}
public static void assertVerifyCtxThrows(VerificationContext ctx, CreateExpression createExp, String expectedException) {
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java
index b7b4a5cce1a..e2af6b19704 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java
@@ -209,7 +209,7 @@ public class ForEachTestCase {
type.addField(new Field("my_int", DataType.INT));
VerificationContext ctx = new VerificationContext(new SimpleTestAdapter());
- ctx.setValue(type);
+ ctx.setValueType(type);
try {
new ForEachExpression(new ToArrayExpression()).verify(ctx);
@@ -246,8 +246,8 @@ public class ForEachTestCase {
super(null);
}
@Override
- protected void doExecute(ExecutionContext ctx) {
- lst.add(ctx.getValue());
+ protected void doExecute(ExecutionContext context) {
+ lst.add(context.getValue());
}
@Override
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateTestCase.java
index 06d74a49ed6..b6ef12dba83 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateTestCase.java
@@ -80,7 +80,7 @@ public class OptimizePredicateTestCase {
assertVerifyThrows(DataType.INT, exp, "Expected predicate input, got int.");
assertVerifyThrows(DataType.PREDICATE, exp, "Variable 'arity' must be set.");
- VerificationContext context = new VerificationContext().setValue(DataType.PREDICATE);
+ VerificationContext context = new VerificationContext().setValueType(DataType.PREDICATE);
context.setVariable("arity", DataType.STRING);
assertVerifyCtxThrows(context, exp, "Variable 'arity' must have type int.");
context.setVariable("arity", DataType.INT);
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OutputAssert.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OutputAssert.java
index 810863478ec..56da13bb530 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OutputAssert.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/OutputAssert.java
@@ -32,14 +32,14 @@ class OutputAssert {
}
public static void assertVerify(FieldTypeAdapter adapter, DataType value, Expression exp) {
- assertEquals(value, new VerificationContext(adapter).setValue(value).execute(exp).getValue());
+ assertEquals(value, new VerificationContext(adapter).setValueType(value).execute(exp).getValueType());
}
public static void assertVerifyThrows(FieldTypeAdapter adapter, DataType value, Expression exp,
String expectedException)
{
try {
- new VerificationContext(adapter).setValue(value).execute(exp);
+ new VerificationContext(adapter).setValueType(value).execute(exp);
fail();
} catch (VerificationException e) {
assertEquals(expectedException, e.getMessage());
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputTestCase.java
index 02644db25f0..2dc271769b6 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputTestCase.java
@@ -74,7 +74,7 @@ public class SelectInputTestCase {
}
private static void assertVerify(FieldTypeAdapter adapter, DataType value, Expression exp) {
- assertEquals(value, exp.verify(new VerificationContext(adapter).setValue(value)));
+ assertEquals(value, exp.verify(new VerificationContext(adapter).setValueType(value)));
}
private static void assertVerifyThrows(FieldTypeAdapter adapter, Expression exp, String expectedException) {
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarTestCase.java
index 85039260cb0..495cdd7d383 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarTestCase.java
@@ -39,7 +39,7 @@ public class SetVarTestCase {
assertVerifyThrows(null, exp, "Expected any input, got null.");
try {
- new VerificationContext().setVariable("foo", DataType.INT).setValue(DataType.STRING).execute(exp);
+ new VerificationContext().setVariable("foo", DataType.INT).setValueType(DataType.STRING).execute(exp);
fail();
} catch (VerificationException e) {
assertEquals("Attempting to assign conflicting types to variable 'foo', int vs string.", e.getMessage());
@@ -60,11 +60,11 @@ public class SetVarTestCase {
@Test
public void requireThatVariableTypeCanNotChange() {
VerificationContext ctx = new VerificationContext(new SimpleTestAdapter());
- ctx.setValue(DataType.INT);
+ ctx.setValueType(DataType.INT);
new SetVarExpression("out").verify(ctx);
try {
- ctx.setValue(DataType.STRING);
+ ctx.setValueType(DataType.STRING);
new SetVarExpression("out").verify(ctx);
fail();
} catch (VerificationException e) {
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java
index 462189384c6..3ac4594854b 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java
@@ -40,16 +40,16 @@ final class SimpleExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx) {
+ protected void doExecute(ExecutionContext context) {
if (hasExecuteValue) {
- ctx.setValue(executeValue);
+ context.setValue(executeValue);
}
}
@Override
protected void doVerify(VerificationContext context) {
if (hasVerifyValue) {
- context.setValue(verifyValue);
+ context.setValueType(verifyValue);
}
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContextTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContextTestCase.java
index eb4aec37770..21580698787 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContextTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContextTestCase.java
@@ -16,8 +16,8 @@ public class VerificationContextTestCase {
public void requireThatValueCanBeSet() {
VerificationContext ctx = new VerificationContext();
DataType val = DataType.STRING;
- ctx.setValue(val);
- assertSame(val, ctx.getValue());
+ ctx.setValueType(val);
+ assertSame(val, ctx.getValueType());
}
@Test
@@ -31,9 +31,9 @@ public class VerificationContextTestCase {
@Test
public void requireThatClearRemovesValue() {
VerificationContext ctx = new VerificationContext();
- ctx.setValue(DataType.STRING);
+ ctx.setValueType(DataType.STRING);
ctx.clear();
- assertNull(ctx.getValue());
+ assertNull(ctx.getValueType());
}
@Test
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/DefaultFieldNameTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/DefaultFieldNameTestCase.java
index 77998a9ac05..2a71aeb564c 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/DefaultFieldNameTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/DefaultFieldNameTestCase.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.indexinglanguage.parser;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.ScriptParserContext;
import com.yahoo.vespa.indexinglanguage.expressions.Expression;
@@ -17,9 +18,11 @@ public class DefaultFieldNameTestCase {
@Test
public void requireThatDefaultFieldNameIsAppliedWhenArgumentIsMissing() throws ParseException {
IndexingInput input = new IndexingInput("input");
- InputExpression exp = (InputExpression)Expression.newInstance(new ScriptParserContext(new SimpleLinguistics())
+ InputExpression exp = (InputExpression)Expression.newInstance(new ScriptParserContext(new SimpleLinguistics(),
+ Encoder.throwsOnUse)
.setInputStream(input)
.setDefaultFieldName("foo"));
assertEquals("foo", exp.getFieldName());
}
+
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/ExpressionTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/ExpressionTestCase.java
index 223c8191186..d7c5ae5c15a 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/ExpressionTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/parser/ExpressionTestCase.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.indexinglanguage.parser;
import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Encoder;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.expressions.*;
import org.junit.Test;
@@ -84,9 +85,9 @@ public class ExpressionTestCase {
private static void assertExpression(Class expectedClass, String str) throws ParseException {
Linguistics linguistics = new SimpleLinguistics();
- Expression foo = Expression.fromString(str, linguistics);
+ Expression foo = Expression.fromString(str, linguistics, Encoder.throwsOnUse);
assertEquals(expectedClass, foo.getClass());
- Expression bar = Expression.fromString(foo.toString(), linguistics);
+ Expression bar = Expression.fromString(foo.toString(), linguistics, Encoder.throwsOnUse);
assertEquals(foo.hashCode(), bar.hashCode());
assertEquals(foo, bar);
}
diff --git a/linguistics/abi-spec.json b/linguistics/abi-spec.json
index e8687b5c9f4..dc7450678c5 100644
--- a/linguistics/abi-spec.json
+++ b/linguistics/abi-spec.json
@@ -328,6 +328,21 @@
],
"fields": []
},
+ "com.yahoo.language.process.Encoder$FailingEncoder": {
+ "superClass": "java.lang.Object",
+ "interfaces": [
+ "com.yahoo.language.process.Encoder"
+ ],
+ "attributes": [
+ "public"
+ ],
+ "methods": [
+ "public void <init>()",
+ "public java.util.List encode(java.lang.String, com.yahoo.language.Language)",
+ "public com.yahoo.tensor.Tensor encode(java.lang.String, com.yahoo.language.Language, com.yahoo.tensor.TensorType)"
+ ],
+ "fields": []
+ },
"com.yahoo.language.process.Encoder": {
"superClass": "java.lang.Object",
"interfaces": [],
@@ -340,7 +355,9 @@
"public abstract java.util.List encode(java.lang.String, com.yahoo.language.Language)",
"public abstract com.yahoo.tensor.Tensor encode(java.lang.String, com.yahoo.language.Language, com.yahoo.tensor.TensorType)"
],
- "fields": []
+ "fields": [
+ "public static final com.yahoo.language.process.Encoder throwsOnUse"
+ ]
},
"com.yahoo.language.process.GramSplitter$Gram": {
"superClass": "java.lang.Object",
diff --git a/linguistics/src/main/java/com/yahoo/language/process/Encoder.java b/linguistics/src/main/java/com/yahoo/language/process/Encoder.java
index 91de16f669b..27f73d15e54 100644
--- a/linguistics/src/main/java/com/yahoo/language/process/Encoder.java
+++ b/linguistics/src/main/java/com/yahoo/language/process/Encoder.java
@@ -14,6 +14,9 @@ import java.util.List;
*/
public interface Encoder {
+ /** An instance of this which throws IllegalStateException if attempted used */
+ Encoder throwsOnUse = new FailingEncoder();
+
/**
* Encodes text into tokens in a list of ids.
*
@@ -36,4 +39,18 @@ public interface Encoder {
*/
Tensor encode(String text, Language language, TensorType tensorType);
+ class FailingEncoder implements Encoder {
+
+ @Override
+ public List<Integer> encode(String text, Language language) {
+ throw new IllegalStateException("No encoder has been configured");
+ }
+
+ @Override
+ public Tensor encode(String text, Language language, TensorType tensorType) {
+ throw new IllegalStateException("No encoder has been configured");
+ }
+
+ }
+
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java b/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java
index 7867a53b8da..4a714925397 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java
@@ -187,7 +187,7 @@ public class TensorType {
}
/**
- * Returns whether or not this type can simply be renamed to
+ * Returns whether this type can simply be renamed to
* the given type. This is the same as being assignable, but disregarding
* dimension names.
*/