diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-03-06 14:48:07 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-03-06 14:48:07 +0100 |
commit | 5e8f5687976d9547a084067c20cecb61e910c402 (patch) | |
tree | f9c88850defbd7de829fc8588bf24c4fa92699f9 | |
parent | 2df0671d3ca160ea164b0c9069ec904538f0f8ec (diff) |
Add get_raw() member function to search::attribute::IAttributeVector.
11 files changed, 44 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchcommon/attribute/iattributevector.h b/searchlib/src/vespa/searchcommon/attribute/iattributevector.h index 837aead18fd..34bf6f49cba 100644 --- a/searchlib/src/vespa/searchcommon/attribute/iattributevector.h +++ b/searchlib/src/vespa/searchcommon/attribute/iattributevector.h @@ -140,6 +140,13 @@ public: virtual const char * getString(DocId doc, char * buffer, size_t sz) const = 0; /** + * Return raw value. + * + * TODO: Consider accessing via new IRawAttribute interface class. + */ + virtual vespalib::ConstArrayRef<char> get_raw(DocId doc) const = 0; + + /** * Returns the first value stored for the given document as an enum value. * * @param docId document identifier @@ -370,6 +377,7 @@ public: virtual bool isPredicateType() const { return getBasicType() == BasicType::PREDICATE; } virtual bool isTensorType() const { return getBasicType() == BasicType::TENSOR; } virtual bool isReferenceType() const { return getBasicType() == BasicType::REFERENCE; } + virtual bool is_raw_type() const noexcept { return getBasicType() == BasicType::RAW; } /** * Returns whether this is a multi value attribute. diff --git a/searchlib/src/vespa/searchlib/attribute/floatbase.cpp b/searchlib/src/vespa/searchlib/attribute/floatbase.cpp index b9d7fb7c81b..31930aae061 100644 --- a/searchlib/src/vespa/searchlib/attribute/floatbase.cpp +++ b/searchlib/src/vespa/searchlib/attribute/floatbase.cpp @@ -95,6 +95,12 @@ FloatingPointAttribute::getString(DocId doc, char * s, size_t sz) const { return s; } +vespalib::ConstArrayRef<char> +FloatingPointAttribute::get_raw(DocId) const +{ + return {}; +} + vespalib::MemoryUsage FloatingPointAttribute::getChangeVectorMemoryUsage() const { diff --git a/searchlib/src/vespa/searchlib/attribute/floatbase.h b/searchlib/src/vespa/searchlib/attribute/floatbase.h index 288b66195e4..4eb1cdc8e02 100644 --- a/searchlib/src/vespa/searchlib/attribute/floatbase.h +++ b/searchlib/src/vespa/searchlib/attribute/floatbase.h @@ -38,6 +38,7 @@ protected: vespalib::MemoryUsage getChangeVectorMemoryUsage() const override; private: + vespalib::ConstArrayRef<char> get_raw(DocId) const override; uint32_t get(DocId doc, vespalib::string * v, uint32_t sz) const override; uint32_t get(DocId doc, const char ** v, uint32_t sz) const override; uint32_t get(DocId doc, WeightedString * v, uint32_t sz) const override; diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp index 489b2fb5e6e..f1125f34026 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp @@ -55,6 +55,12 @@ const char *ImportedAttributeVectorReadGuard::getString(DocId doc, char *buffer, return _target_attribute.getString(getTargetLid(doc), buffer, sz); } +vespalib::ConstArrayRef<char> +ImportedAttributeVectorReadGuard::get_raw(DocId doc) const +{ + return _target_attribute.get_raw(getTargetLid(doc)); +} + IAttributeVector::EnumHandle ImportedAttributeVectorReadGuard::getEnum(DocId doc) const { return _target_attribute.getEnum(getTargetLid(doc)); } diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h index fd9856a032c..f370696276e 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h @@ -43,6 +43,7 @@ public: largeint_t getInt(DocId doc) const override; double getFloat(DocId doc) const override; const char *getString(DocId doc, char *buffer, size_t sz) const override; + vespalib::ConstArrayRef<char> get_raw(DocId doc) const override; EnumHandle getEnum(DocId doc) const override; uint32_t get(DocId docId, largeint_t *buffer, uint32_t sz) const override; uint32_t get(DocId docId, double *buffer, uint32_t sz) const override; diff --git a/searchlib/src/vespa/searchlib/attribute/integerbase.cpp b/searchlib/src/vespa/searchlib/attribute/integerbase.cpp index b9d33f0aa9e..f77028f9464 100644 --- a/searchlib/src/vespa/searchlib/attribute/integerbase.cpp +++ b/searchlib/src/vespa/searchlib/attribute/integerbase.cpp @@ -68,6 +68,13 @@ IntegerAttribute::getString(DocId doc, char * s, size_t sz) const { } return s; } + +vespalib::ConstArrayRef<char> +IntegerAttribute::get_raw(DocId) const +{ + return {}; +} + uint32_t IntegerAttribute::get(DocId doc, vespalib::string * s, uint32_t sz) const { largeint_t * v = new largeint_t[sz]; diff --git a/searchlib/src/vespa/searchlib/attribute/integerbase.h b/searchlib/src/vespa/searchlib/attribute/integerbase.h index 7cb791e204e..f7de9ba9de4 100644 --- a/searchlib/src/vespa/searchlib/attribute/integerbase.h +++ b/searchlib/src/vespa/searchlib/attribute/integerbase.h @@ -37,6 +37,7 @@ protected: ChangeVector _changes; private: const char * getString(DocId doc, char * s, size_t sz) const override; + vespalib::ConstArrayRef<char> get_raw(DocId) const override; uint32_t get(DocId doc, vespalib::string * v, uint32_t sz) const override; uint32_t get(DocId doc, const char ** v, uint32_t sz) const override; uint32_t get(DocId doc, WeightedString * v, uint32_t sz) const override; diff --git a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp index d8b01afe094..3cbec4acb8b 100644 --- a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp @@ -48,6 +48,12 @@ NotImplementedAttribute::getString(DocId, char *, size_t) const { notImplemented(); } +vespalib::ConstArrayRef<char> +NotImplementedAttribute::get_raw(DocId) const +{ + notImplemented(); +} + uint32_t NotImplementedAttribute::get(DocId, largeint_t *, uint32_t) const { notImplemented(); diff --git a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h index e824b0dd691..99fbdeab837 100644 --- a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h +++ b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h @@ -15,6 +15,7 @@ struct NotImplementedAttribute : AttributeVector { largeint_t getInt(DocId) const override; double getFloat(DocId) const override; const char * getString(DocId, char *, size_t) const override; + vespalib::ConstArrayRef<char> get_raw(DocId) const override; uint32_t get(DocId, largeint_t *, uint32_t) const override; uint32_t get(DocId, double *, uint32_t) const override; uint32_t get(DocId, vespalib::string *, uint32_t) const override; diff --git a/searchlib/src/vespa/searchlib/attribute/stringbase.cpp b/searchlib/src/vespa/searchlib/attribute/stringbase.cpp index 3a9f88babfe..22a2eab1111 100644 --- a/searchlib/src/vespa/searchlib/attribute/stringbase.cpp +++ b/searchlib/src/vespa/searchlib/attribute/stringbase.cpp @@ -85,6 +85,12 @@ StringAttribute::getFloat(DocId doc) const { return vespalib::locale::c::strtod(get(doc), nullptr); } +vespalib::ConstArrayRef<char> +StringAttribute::get_raw(DocId) const +{ + return {}; +} + uint32_t StringAttribute::get(DocId doc, double * v, uint32_t sz) const { diff --git a/searchlib/src/vespa/searchlib/attribute/stringbase.h b/searchlib/src/vespa/searchlib/attribute/stringbase.h index e20a40d2df3..f40a89f76b4 100644 --- a/searchlib/src/vespa/searchlib/attribute/stringbase.h +++ b/searchlib/src/vespa/searchlib/attribute/stringbase.h @@ -81,6 +81,7 @@ private: largeint_t getInt(DocId doc) const override { return strtoll(get(doc), nullptr, 0); } double getFloat(DocId doc) const override; + vespalib::ConstArrayRef<char> get_raw(DocId) const override; const char * getString(DocId doc, char * v, size_t sz) const override { (void) v; (void) sz; return get(doc); } long onSerializeForAscendingSort(DocId doc, void * serTo, long available, const common::BlobConverter * bc) const override; |