Kuzu C++ API
Loading...
Searching...
No Matches
auxiliary_buffer.h
Go to the documentation of this file.
1#pragma once
2
3#include "api.h"
5#include "types.h"
6
7namespace kuzu {
8namespace common {
9
10class ValueVector;
11
12// AuxiliaryBuffer holds data which is only used by the targeting dataType.
14public:
15 virtual ~AuxiliaryBuffer() = default;
16
17 template<class TARGET>
18 TARGET& cast() {
20 }
21
22 template<class TARGET>
23 const TARGET& constCast() const {
25 }
26};
27
29public:
30 explicit StringAuxiliaryBuffer(storage::MemoryManager* memoryManager) {
31 inMemOverflowBuffer = std::make_unique<InMemOverflowBuffer>(memoryManager);
32 }
33
34 InMemOverflowBuffer* getOverflowBuffer() const { return inMemOverflowBuffer.get(); }
35 uint8_t* allocateOverflow(uint64_t size) { return inMemOverflowBuffer->allocateSpace(size); }
36 void resetOverflowBuffer() const { inMemOverflowBuffer->resetBuffer(); }
37
38private:
39 std::unique_ptr<InMemOverflowBuffer> inMemOverflowBuffer;
40};
41
43public:
44 StructAuxiliaryBuffer(const LogicalType& type, storage::MemoryManager* memoryManager);
45
46 void referenceChildVector(idx_t idx, std::shared_ptr<ValueVector> vectorToReference) {
47 childrenVectors[idx] = std::move(vectorToReference);
48 }
49 const std::vector<std::shared_ptr<ValueVector>>& getFieldVectors() const {
50 return childrenVectors;
51 }
52 std::shared_ptr<ValueVector> getFieldVectorShared(idx_t idx) const {
53 return childrenVectors[idx];
54 }
55 ValueVector* getFieldVectorPtr(idx_t idx) const { return childrenVectors[idx].get(); }
56
57private:
58 std::vector<std::shared_ptr<ValueVector>> childrenVectors;
59};
60
61// ListVector layout:
62// To store a list value in the valueVector, we could use two separate vectors.
63// 1. A vector(called offset vector) for the list offsets and length(called list_entry_t): This
64// vector contains the starting indices and length for each list within the data vector.
65// 2. A data vector(called dataVector) to store the actual list elements: This vector holds the
66// actual elements of the lists in a flat, continuous storage. Each list would be represented as a
67// contiguous subsequence of elements in this vector.
69 friend class ListVector;
70
71public:
72 ListAuxiliaryBuffer(const LogicalType& dataVectorType, storage::MemoryManager* memoryManager);
73
74 void setDataVector(std::shared_ptr<ValueVector> vector) { dataVector = std::move(vector); }
75 ValueVector* getDataVector() const { return dataVector.get(); }
76 std::shared_ptr<ValueVector> getSharedDataVector() const { return dataVector; }
77
79
80 uint64_t getSize() const { return size; }
81
82 void resetSize() { size = 0; }
83
84 void resize(uint64_t numValues);
85
86private:
87 void resizeDataVector(ValueVector* dataVector);
88
89 void resizeStructDataVector(ValueVector* dataVector);
90
91private:
92 uint64_t capacity;
93 uint64_t size;
94
95 std::shared_ptr<ValueVector> dataVector;
96};
97
99public:
100 static std::unique_ptr<AuxiliaryBuffer> getAuxiliaryBuffer(LogicalType& type,
101 storage::MemoryManager* memoryManager);
102};
103
104} // namespace common
105} // namespace kuzu
#define KUZU_API
Definition api.h:25
Definition auxiliary_buffer.h:98
static std::unique_ptr< AuxiliaryBuffer > getAuxiliaryBuffer(LogicalType &type, storage::MemoryManager *memoryManager)
Definition auxiliary_buffer.h:13
virtual ~AuxiliaryBuffer()=default
TARGET & cast()
Definition auxiliary_buffer.h:18
const TARGET & constCast() const
Definition auxiliary_buffer.h:23
Definition in_mem_overflow_buffer.h:33
uint64_t getSize() const
Definition auxiliary_buffer.h:80
void resize(uint64_t numValues)
ValueVector * getDataVector() const
Definition auxiliary_buffer.h:75
std::shared_ptr< ValueVector > getSharedDataVector() const
Definition auxiliary_buffer.h:76
list_entry_t addList(list_size_t listSize)
ListAuxiliaryBuffer(const LogicalType &dataVectorType, storage::MemoryManager *memoryManager)
friend class ListVector
Definition auxiliary_buffer.h:69
void resetSize()
Definition auxiliary_buffer.h:82
void setDataVector(std::shared_ptr< ValueVector > vector)
Definition auxiliary_buffer.h:74
Definition types.h:256
StringAuxiliaryBuffer(storage::MemoryManager *memoryManager)
Definition auxiliary_buffer.h:30
void resetOverflowBuffer() const
Definition auxiliary_buffer.h:36
InMemOverflowBuffer * getOverflowBuffer() const
Definition auxiliary_buffer.h:34
uint8_t * allocateOverflow(uint64_t size)
Definition auxiliary_buffer.h:35
void referenceChildVector(idx_t idx, std::shared_ptr< ValueVector > vectorToReference)
Definition auxiliary_buffer.h:46
std::shared_ptr< ValueVector > getFieldVectorShared(idx_t idx) const
Definition auxiliary_buffer.h:52
StructAuxiliaryBuffer(const LogicalType &type, storage::MemoryManager *memoryManager)
const std::vector< std::shared_ptr< ValueVector > > & getFieldVectors() const
Definition auxiliary_buffer.h:49
ValueVector * getFieldVectorPtr(idx_t idx) const
Definition auxiliary_buffer.h:55
Definition value_vector.h:21
Definition array_utils.h:7
uint32_t idx_t
Definition types.h:45
uint32_t list_size_t
Definition types.h:61
TO ku_dynamic_cast(FROM *old)
Definition cast.h:11
Definition array_utils.h:7
Definition types.h:114