summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-03-06 14:48:07 +0100
committerTor Egge <Tor.Egge@online.no>2023-03-06 14:48:07 +0100
commit5e8f5687976d9547a084067c20cecb61e910c402 (patch)
treef9c88850defbd7de829fc8588bf24c4fa92699f9 /searchlib
parent2df0671d3ca160ea164b0c9069ec904538f0f8ec (diff)
Add get_raw() member function to search::attribute::IAttributeVector.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchcommon/attribute/iattributevector.h8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/floatbase.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/floatbase.h1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/integerbase.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/integerbase.h1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/stringbase.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/stringbase.h1
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;