diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2019-03-06 18:14:03 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2019-03-07 13:28:48 +0100 |
commit | 93c5cb44ba9f8fa36314b8a4d6d57b75422f8c29 (patch) | |
tree | 0aabf97b84256fe9c10d3d22de0b9ddcf73d9129 /searchlib | |
parent | 99bcfb517bd0b57c24f81478c3767f1b8d369fb3 (diff) |
Check for assignable tensor type when setting tensor in TensorFieldValue.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/index/doctypebuilder.cpp | 15 |
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()); } |