summaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-03-06 18:14:03 +0100
committerTor Egge <Tor.Egge@broadpark.no>2019-03-07 13:28:48 +0100
commit93c5cb44ba9f8fa36314b8a4d6d57b75422f8c29 (patch)
tree0aabf97b84256fe9c10d3d22de0b9ddcf73d9129 /searchlib/src
parent99bcfb517bd0b57c24f81478c3767f1b8d369fb3 (diff)
Check for assignable tensor type when setting tensor in TensorFieldValue.
Diffstat (limited to 'searchlib/src')
-rw-r--r--searchlib/src/vespa/searchlib/index/doctypebuilder.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/index/doctypebuilder.cpp b/searchlib/src/vespa/searchlib/index/doctypebuilder.cpp
index 70d1f3de504..fb02ee32b98 100644
--- a/searchlib/src/vespa/searchlib/index/doctypebuilder.cpp
+++ b/searchlib/src/vespa/searchlib/index/doctypebuilder.cpp
@@ -10,7 +10,7 @@ using namespace document;
namespace search::index {
namespace {
-TensorDataType tensorDataType;
+TensorDataType tensorDataType(vespalib::eval::ValueType::from_spec("tensor(x{}, y{})"));
const DataType *convert(Schema::DataType type) {
switch (type) {
@@ -254,6 +254,7 @@ struct TypeCache {
return types.find(key)->second;
}
};
+
} // namespace
document::DocumenttypesConfig DocTypeBuilder::makeConfig() const {
@@ -296,8 +297,12 @@ document::DocumenttypesConfig DocTypeBuilder::makeConfig() const {
continue; // taken as index field
const DataType *primitiveType = convert(field.getDataType());
- header_struct.addField(field.getName(), type_cache.getType(
+ if (primitiveType->getId() == DataType::T_TENSOR) {
+ header_struct.addTensorField(field.getName(), dynamic_cast<const TensorDataType &>(*primitiveType).getTensorType().to_spec());
+ } else {
+ header_struct.addField(field.getName(), type_cache.getType(
primitiveType->getId(), field.getCollectionType()));
+ }
usedFields.insert(field.getName());
}
@@ -307,8 +312,12 @@ document::DocumenttypesConfig DocTypeBuilder::makeConfig() const {
if (usf != usedFields.end())
continue; // taken as index field or attribute field
const DataType *primitiveType(convert(field.getDataType()));
- header_struct.addField(field.getName(), type_cache.getType(
+ if (primitiveType->getId() == DataType::T_TENSOR) {
+ header_struct.addTensorField(field.getName(), dynamic_cast<const TensorDataType &>(*primitiveType).getTensorType().to_spec());
+ } else {
+ header_struct.addField(field.getName(), type_cache.getType(
primitiveType->getId(), field.getCollectionType()));
+ }
usedFields.insert(field.getName());
}