OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DictionaryValueConverter< TARGET_TYPE > Struct Template Reference

#include <TargetValueConvertersImpl.h>

+ Inheritance diagram for DictionaryValueConverter< TARGET_TYPE >:
+ Collaboration diagram for DictionaryValueConverter< TARGET_TYPE >:

Public Types

using ElementsDataColumnPtr = typename NumericValueConverter< int64_t, TARGET_TYPE >::ColumnDataPtr
 
using ElementsBufferColumnPtr = std::unique_ptr< std::vector< int32_t >>
 
- Public Types inherited from NumericValueConverter< int64_t, TARGET_TYPE >
using ColumnDataPtr = std::unique_ptr< TARGET_TYPE, CheckedMallocDeleter< TARGET_TYPE >>
 
using ElementsBufferColumnPtr = ColumnDataPtr
 
using CasterFunc = std::function< TARGET_TYPE(int64_t, bool, TARGET_TYPE)>
 

Public Member Functions

 DictionaryValueConverter (const shared::StringDictKey &source_dict_key, const ColumnDescriptor *targetDescriptor, const Catalog_Namespace::Catalog &target_cat, size_t num_rows, TARGET_TYPE nullValue, int64_t nullCheckValue, bool doNullCheck, StringDictionaryProxy *literals_dict, StringDictionaryProxy *source_dict_proxy)
 
 ~DictionaryValueConverter () override
 
ElementsBufferColumnPtr allocateColumnarBuffer (size_t num_rows)
 
void convertElementToColumnarFormat (size_t row, typename ElementsBufferColumnPtr::pointer columnBuffer, const ScalarTargetValue *scalarValue)
 
void convertToColumnarFormat (size_t row, const ScalarTargetValue *scalarValue)
 
void convertToColumnarFormat (size_t row, const TargetValue *value) override
 
int32_t convertTransientStringIdToPermanentId (int32_t &transient_string_id)
 
NumericValueConverter< int64_t,
TARGET_TYPE >::ColumnDataPtr 
processBuffer (ElementsBufferColumnPtr buffer)
 
void processArrayBuffer (std::unique_ptr< std::vector< std::pair< size_t, ElementsBufferColumnPtr >>> &array_buffer, std::unique_ptr< std::vector< ArrayDatum >>::pointer arrayData)
 
void finalizeDataBlocksForInsertData () override
 
void addDataBlocksToInsertData (Fragmenter_Namespace::InsertData &insertData) override
 
- Public Member Functions inherited from NumericValueConverter< int64_t, TARGET_TYPE >
 NumericValueConverter (const ColumnDescriptor *cd, size_t num_rows, TARGET_TYPE nullValue, int64_tnullCheckValue, bool doNullCheck)
 
 ~NumericValueConverter () override
 
void setValueCaster (CasterFunc caster)
 
void populateFixedArrayNullSentinel (size_t num_rows)
 
void allocateColumnarData (size_t num_rows) override
 
ElementsBufferColumnPtr allocateColumnarBuffer (size_t num_rows)
 
void convertElementToColumnarFormat (size_t row, typename ElementsBufferColumnPtr::pointer columnData, const ScalarTargetValue *scalarValue)
 
void convertToColumnarFormat (size_t row, const ScalarTargetValue *scalarValue)
 
void convertToColumnarFormat (size_t row, const TargetValue *value) override
 
void processArrayBuffer (std::unique_ptr< std::vector< std::pair< size_t, ElementsBufferColumnPtr >>> &array_buffer, std::unique_ptr< std::vector< ArrayDatum >>::pointer arrayData)
 
void addDataBlocksToInsertData (Fragmenter_Namespace::InsertData &insertData) override
 
- Public Member Functions inherited from TargetValueConverter
 TargetValueConverter (const ColumnDescriptor *cd)
 
virtual ~TargetValueConverter ()
 

Public Attributes

ElementsBufferColumnPtr column_buffer_
 
const DictDescriptortarget_dict_desc_
 
const DictDescriptorsource_dict_desc_
 
StringDictionaryProxysource_dict_proxy_
 
const int32_t buffer_null_sentinal_ = std::numeric_limits<int32_t>::min()
 
const StringDictionaryProxyliterals_dict_
 
std::unordered_map< int32_t,
int32_t > 
literals_lookup_
 
bool use_literals_
 
- Public Attributes inherited from NumericValueConverter< int64_t, TARGET_TYPE >
ColumnDataPtr column_data_
 
TARGET_TYPE null_value_
 
int64_t null_check_value_
 
bool do_null_check_
 
TARGET_TYPE fixed_array_null_value_
 
CasterFunc checked_caster_
 
boost_variant_accessor< int64_t > SOURCE_TYPE_ACCESSOR
 
- Public Attributes inherited from TargetValueConverter
const ColumnDescriptorcolumn_descriptor_
 
boost_variant_accessor
< ScalarTargetValue
SCALAR_TARGET_VALUE_ACCESSOR
 
boost_variant_accessor
< ArrayTargetValue
ARRAY_TARGET_VALUE_ACCESSOR
 
boost_variant_accessor
< GeoTargetValue
GEO_TARGET_VALUE_ACCESSOR
 
boost_variant_accessor
< NullableString
NULLABLE_STRING_ACCESSOR
 
boost_variant_accessor
< std::string > 
STRING_ACCESSOR
 

Detailed Description

template<typename TARGET_TYPE>
struct DictionaryValueConverter< TARGET_TYPE >

Definition at line 162 of file TargetValueConvertersImpl.h.

Member Typedef Documentation

template<typename TARGET_TYPE >
using DictionaryValueConverter< TARGET_TYPE >::ElementsBufferColumnPtr = std::unique_ptr<std::vector<int32_t>>

Definition at line 166 of file TargetValueConvertersImpl.h.

template<typename TARGET_TYPE >
using DictionaryValueConverter< TARGET_TYPE >::ElementsDataColumnPtr = typename NumericValueConverter<int64_t, TARGET_TYPE>::ColumnDataPtr

Definition at line 164 of file TargetValueConvertersImpl.h.

Constructor & Destructor Documentation

template<typename TARGET_TYPE >
DictionaryValueConverter< TARGET_TYPE >::DictionaryValueConverter ( const shared::StringDictKey source_dict_key,
const ColumnDescriptor targetDescriptor,
const Catalog_Namespace::Catalog target_cat,
size_t  num_rows,
TARGET_TYPE  nullValue,
int64_t  nullCheckValue,
bool  doNullCheck,
StringDictionaryProxy literals_dict,
StringDictionaryProxy source_dict_proxy 
)
inline

Definition at line 182 of file TargetValueConvertersImpl.h.

References DictionaryValueConverter< TARGET_TYPE >::allocateColumnarBuffer(), DictionaryValueConverter< TARGET_TYPE >::buffer_null_sentinal_, CHECK, CHECK_EQ, DictionaryValueConverter< TARGET_TYPE >::column_buffer_, ColumnDescriptor::columnType, shared::StringDictKey::db_id, shared::StringDictKey::dict_id, Catalog_Namespace::SysCatalog::getCatalog(), Catalog_Namespace::Catalog::getDatabaseId(), Catalog_Namespace::Catalog::getMetadataForDict(), SQLTypeInfo::getStringDictKey(), StringDictionaryProxy::getTransientVector(), Catalog_Namespace::SysCatalog::instance(), DictionaryValueConverter< TARGET_TYPE >::literals_dict_, DictionaryValueConverter< TARGET_TYPE >::literals_lookup_, DictionaryValueConverter< TARGET_TYPE >::source_dict_desc_, DictionaryValueConverter< TARGET_TYPE >::source_dict_proxy_, DictionaryValueConverter< TARGET_TYPE >::target_dict_desc_, StringDictionaryProxy::transientIndexToId(), and DictionaryValueConverter< TARGET_TYPE >::use_literals_.

192  num_rows,
193  nullValue,
194  nullCheckValue,
195  doNullCheck) {
196  literals_dict_ = literals_dict;
197  const auto& target_dict_key = targetDescriptor->columnType.getStringDictKey();
198  CHECK_EQ(target_dict_key.db_id, target_cat.getDatabaseId());
199  target_dict_desc_ = target_cat.getMetadataForDict(target_dict_key.dict_id, true);
200 
201  source_dict_desc_ = nullptr;
202  source_dict_proxy_ = source_dict_proxy;
203 
204  use_literals_ = 0 == source_dict_key.dict_id;
205  if (!use_literals_) {
206  const auto source_cat =
208  CHECK(source_cat);
210  source_cat->getMetadataForDict(std::abs(source_dict_key.dict_id), true);
212  } else {
213  if (literals_dict) {
214  auto const& transient_vecmap = literals_dict->getTransientVector();
215  for (unsigned index = 0; index < transient_vecmap.size(); ++index) {
216  auto const old_id = StringDictionaryProxy::transientIndexToId(index);
217  std::string const& str = *transient_vecmap[index];
218  auto const new_id = target_dict_desc_->stringDict->getOrAdd(str);
219  literals_lookup_[old_id] = new_id;
220  }
221  }
222 
224  }
225 
226  CHECK(target_dict_desc_);
227 
228  if (num_rows) {
230  }
231  }
#define CHECK_EQ(x, y)
Definition: Logger.h:301
const std::vector< std::string const * > & getTransientVector() const
const DictDescriptor * source_dict_desc_
ElementsBufferColumnPtr column_buffer_
ElementsBufferColumnPtr allocateColumnarBuffer(size_t num_rows)
const DictDescriptor * target_dict_desc_
const StringDictionaryProxy * literals_dict_
static SysCatalog & instance()
Definition: SysCatalog.h:343
int getDatabaseId() const
Definition: Catalog.h:304
static int32_t transientIndexToId(unsigned const index)
const DictDescriptor * getMetadataForDict(int dict_ref, bool loadDict=true) const
Definition: Catalog.cpp:1999
std::shared_ptr< Catalog > getCatalog(const std::string &dbName)
std::unordered_map< int32_t, int32_t > literals_lookup_
#define CHECK(condition)
Definition: Logger.h:291
StringDictionaryProxy * source_dict_proxy_

+ Here is the call graph for this function:

template<typename TARGET_TYPE >
DictionaryValueConverter< TARGET_TYPE >::~DictionaryValueConverter ( )
inlineoverride

Definition at line 233 of file TargetValueConvertersImpl.h.

233 {}

Member Function Documentation

template<typename TARGET_TYPE >
void DictionaryValueConverter< TARGET_TYPE >::addDataBlocksToInsertData ( Fragmenter_Namespace::InsertData insertData)
inlineoverridevirtual

Implements TargetValueConverter.

Definition at line 409 of file TargetValueConvertersImpl.h.

References NumericValueConverter< int64_t, TARGET_TYPE >::column_data_, TargetValueConverter::column_descriptor_, ColumnDescriptor::columnId, Fragmenter_Namespace::InsertData::columnIds, Fragmenter_Namespace::InsertData::data, DictionaryValueConverter< TARGET_TYPE >::finalizeDataBlocksForInsertData(), and DataBlockPtr::numbersPtr.

409  {
411  DataBlockPtr dataBlock;
412  dataBlock.numbersPtr = reinterpret_cast<int8_t*>(this->column_data_.get());
413  insertData.data.push_back(dataBlock);
414  insertData.columnIds.push_back(this->column_descriptor_->columnId);
415  }
const ColumnDescriptor * column_descriptor_
void finalizeDataBlocksForInsertData() override
std::vector< DataBlockPtr > data
the number of rows being inserted
Definition: Fragmenter.h:73
int8_t * numbersPtr
Definition: sqltypes.h:223
std::vector< int > columnIds
identifies the table into which the data is being inserted
Definition: Fragmenter.h:71

+ Here is the call graph for this function:

template<typename TARGET_TYPE >
ElementsBufferColumnPtr DictionaryValueConverter< TARGET_TYPE >::allocateColumnarBuffer ( size_t  num_rows)
inline

Definition at line 235 of file TargetValueConvertersImpl.h.

References CHECK.

Referenced by DictionaryValueConverter< TARGET_TYPE >::DictionaryValueConverter().

235  {
236  CHECK(num_rows > 0);
237  return std::make_unique<std::vector<int32_t>>(num_rows);
238  }
#define CHECK(condition)
Definition: Logger.h:291

+ Here is the caller graph for this function:

template<typename TARGET_TYPE >
void DictionaryValueConverter< TARGET_TYPE >::convertElementToColumnarFormat ( size_t  row,
typename ElementsBufferColumnPtr::pointer  columnBuffer,
const ScalarTargetValue scalarValue 
)
inline

Definition at line 240 of file TargetValueConvertersImpl.h.

References DictionaryValueConverter< TARGET_TYPE >::buffer_null_sentinal_, NumericValueConverter< int64_t, TARGET_TYPE >::do_null_check_, NumericValueConverter< int64_t, TARGET_TYPE >::null_check_value_, and NumericValueConverter< int64_t, TARGET_TYPE >::SOURCE_TYPE_ACCESSOR.

Referenced by DictionaryValueConverter< TARGET_TYPE >::convertToColumnarFormat().

243  {
244  auto db_p = checked_get<int64_t>(row, scalarValue, this->SOURCE_TYPE_ACCESSOR);
245  auto val = *db_p;
246 
247  if (this->do_null_check_ && this->null_check_value_ == val) {
248  (*columnBuffer)[row] = this->buffer_null_sentinal_;
249  } else {
250  (*columnBuffer)[row] = (int32_t)val;
251  }
252  }
boost_variant_accessor< int64_t > SOURCE_TYPE_ACCESSOR

+ Here is the caller graph for this function:

template<typename TARGET_TYPE >
void DictionaryValueConverter< TARGET_TYPE >::convertToColumnarFormat ( size_t  row,
const ScalarTargetValue scalarValue 
)
inline

Definition at line 254 of file TargetValueConvertersImpl.h.

References DictionaryValueConverter< TARGET_TYPE >::column_buffer_, and DictionaryValueConverter< TARGET_TYPE >::convertElementToColumnarFormat().

Referenced by DictionaryValueConverter< TARGET_TYPE >::convertToColumnarFormat().

254  {
255  convertElementToColumnarFormat(row, this->column_buffer_.get(), scalarValue);
256  }
ElementsBufferColumnPtr column_buffer_
void convertElementToColumnarFormat(size_t row, typename ElementsBufferColumnPtr::pointer columnBuffer, const ScalarTargetValue *scalarValue)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename TARGET_TYPE >
void DictionaryValueConverter< TARGET_TYPE >::convertToColumnarFormat ( size_t  row,
const TargetValue value 
)
inlineoverridevirtual

Implements TargetValueConverter.

Definition at line 258 of file TargetValueConvertersImpl.h.

References DictionaryValueConverter< TARGET_TYPE >::convertToColumnarFormat(), and TargetValueConverter::SCALAR_TARGET_VALUE_ACCESSOR.

258  {
259  auto scalarValue =
260  checked_get<ScalarTargetValue>(row, value, this->SCALAR_TARGET_VALUE_ACCESSOR);
261 
262  convertToColumnarFormat(row, scalarValue);
263  }
void convertToColumnarFormat(size_t row, const ScalarTargetValue *scalarValue)
boost_variant_accessor< ScalarTargetValue > SCALAR_TARGET_VALUE_ACCESSOR

+ Here is the call graph for this function:

template<typename TARGET_TYPE >
int32_t DictionaryValueConverter< TARGET_TYPE >::convertTransientStringIdToPermanentId ( int32_t &  transient_string_id)
inline

Definition at line 265 of file TargetValueConvertersImpl.h.

References StringDictionaryProxy::getOrAdd(), StringDictionaryProxy::getString(), and DictionaryValueConverter< TARGET_TYPE >::source_dict_proxy_.

Referenced by DictionaryValueConverter< TARGET_TYPE >::processBuffer().

265  {
266  if (source_dict_proxy_) {
267  auto str = source_dict_proxy_->getString(transient_string_id);
268  return source_dict_proxy_->getOrAdd(str);
269  } else {
270  throw std::runtime_error("Unexpected negative source ID");
271  }
272  }
std::string getString(int32_t string_id) const
int32_t getOrAdd(const std::string &str) noexcept
StringDictionaryProxy * source_dict_proxy_

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename TARGET_TYPE >
void DictionaryValueConverter< TARGET_TYPE >::finalizeDataBlocksForInsertData ( )
inlineoverridevirtual

Reimplemented from TargetValueConverter.

Definition at line 402 of file TargetValueConvertersImpl.h.

References DictionaryValueConverter< TARGET_TYPE >::column_buffer_, NumericValueConverter< int64_t, TARGET_TYPE >::column_data_, and DictionaryValueConverter< TARGET_TYPE >::processBuffer().

Referenced by DictionaryValueConverter< TARGET_TYPE >::addDataBlocksToInsertData().

402  {
403  if (column_buffer_) {
404  this->column_data_ = processBuffer(std::move(column_buffer_));
405  column_buffer_ = nullptr;
406  }
407  }
ElementsBufferColumnPtr column_buffer_
NumericValueConverter< int64_t, TARGET_TYPE >::ColumnDataPtr processBuffer(ElementsBufferColumnPtr buffer)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename TARGET_TYPE >
void DictionaryValueConverter< TARGET_TYPE >::processArrayBuffer ( std::unique_ptr< std::vector< std::pair< size_t, ElementsBufferColumnPtr >>> &  array_buffer,
std::unique_ptr< std::vector< ArrayDatum >>::pointer  arrayData 
)
inline

Definition at line 355 of file TargetValueConvertersImpl.h.

References is_null(), StringDictionary::populate_string_array_ids(), DictionaryValueConverter< TARGET_TYPE >::processBuffer(), DictionaryValueConverter< TARGET_TYPE >::source_dict_desc_, DictDescriptor::stringDict, DictionaryValueConverter< TARGET_TYPE >::target_dict_desc_, and DictionaryValueConverter< TARGET_TYPE >::use_literals_.

358  {
359  if (use_literals_) {
360  for (size_t row = 0; row < array_buffer->size(); row++) {
361  auto& element = (array_buffer->at(row));
362  bool is_null = false;
363  if (element.second) {
365  processBuffer(std::move(element.second));
366  int8_t* arrayDataPtr = reinterpret_cast<int8_t*>(data.release());
367  (*arrayData)[row] =
368  ArrayDatum(element.first * sizeof(TARGET_TYPE), arrayDataPtr, is_null);
369  }
370  }
371  } else {
372  std::vector<std::vector<int32_t>> srcArrayIds(array_buffer->size());
373  std::vector<std::vector<int32_t>> destArrayIds(0);
374 
375  for (size_t row = 0; row < array_buffer->size(); row++) {
376  auto& element = (array_buffer->at(row));
377  if (element.second) {
378  srcArrayIds[row] = *(element.second.get());
379  }
380  }
381 
384  srcArrayIds,
386 
387  for (size_t row = 0; row < array_buffer->size(); row++) {
388  auto& element = (array_buffer->at(row));
389  bool is_null = false;
390  if (element.second) {
391  *(element.second.get()) = destArrayIds[row];
392  int8_t* arrayDataPtr = reinterpret_cast<int8_t*>(&(element.second->at(0)));
393  (*arrayData)[row] = ArrayDatum(element.first * sizeof(TARGET_TYPE),
394  arrayDataPtr,
395  is_null,
396  DoNothingDeleter());
397  }
398  }
399  }
400  }
const DictDescriptor * source_dict_desc_
const DictDescriptor * target_dict_desc_
std::shared_ptr< StringDictionary > stringDict
std::conditional_t< is_cuda_compiler(), DeviceArrayDatum, HostArrayDatum > ArrayDatum
Definition: sqltypes.h:219
CONSTEXPR DEVICE bool is_null(const T &value)
static void populate_string_array_ids(std::vector< std::vector< int32_t >> &dest_array_ids, StringDictionary *dest_dict, const std::vector< std::vector< int32_t >> &source_array_ids, const StringDictionary *source_dict)
NumericValueConverter< int64_t, TARGET_TYPE >::ColumnDataPtr processBuffer(ElementsBufferColumnPtr buffer)

+ Here is the call graph for this function:

template<typename TARGET_TYPE >
NumericValueConverter<int64_t, TARGET_TYPE>::ColumnDataPtr DictionaryValueConverter< TARGET_TYPE >::processBuffer ( ElementsBufferColumnPtr  buffer)
inline

Definition at line 274 of file TargetValueConvertersImpl.h.

References DictionaryValueConverter< TARGET_TYPE >::buffer_null_sentinal_, checked_malloc(), DictionaryValueConverter< TARGET_TYPE >::convertTransientStringIdToPermanentId(), DictDescriptor::dictRef, StringDictionaryProxy::getTransientVector(), DictionaryValueConverter< TARGET_TYPE >::literals_lookup_, NumericValueConverter< int64_t, TARGET_TYPE >::null_value_, StringDictionary::populate_string_ids(), DictionaryValueConverter< TARGET_TYPE >::source_dict_desc_, DictionaryValueConverter< TARGET_TYPE >::source_dict_proxy_, DictDescriptor::stringDict, DictionaryValueConverter< TARGET_TYPE >::target_dict_desc_, to_string(), and DictionaryValueConverter< TARGET_TYPE >::use_literals_.

Referenced by DictionaryValueConverter< TARGET_TYPE >::finalizeDataBlocksForInsertData(), and DictionaryValueConverter< TARGET_TYPE >::processArrayBuffer().

275  {
278  reinterpret_cast<TARGET_TYPE*>(
279  checked_malloc(buffer->size() * sizeof(TARGET_TYPE))));
280 
281  std::vector<int32_t>* bufferPtr =
282  reinterpret_cast<std::vector<int32_t>*>(buffer.get());
283  TARGET_TYPE* columnDataPtr = reinterpret_cast<TARGET_TYPE*>(data.get());
284  if (use_literals_) {
285  for (size_t i = 0; i < bufferPtr->size(); i++) {
286  auto id = literals_lookup_[(*bufferPtr)[i]];
287  if (id == buffer_null_sentinal_) {
288  columnDataPtr[i] = this->null_value_;
289  } else {
290  columnDataPtr[i] = static_cast<TARGET_TYPE>(id);
291  }
292  }
293  } else {
295  // special case, where source and target dict are the same
296  // mostly in update
297  for (size_t i = 0; i < bufferPtr->size(); i++) {
298  auto src_id = (*bufferPtr)[i];
299  if (src_id == buffer_null_sentinal_) {
300  columnDataPtr[i] = this->null_value_;
301  } else if (src_id < 0) {
302  columnDataPtr[i] = convertTransientStringIdToPermanentId(src_id);
303  } else {
304  columnDataPtr[i] = static_cast<TARGET_TYPE>(src_id);
305  }
306  }
307 
308  } else {
309  std::vector<int32_t> dest_ids;
310  dest_ids.resize(bufferPtr->size());
311 
312  if (source_dict_proxy_) {
315  *bufferPtr,
318  } else {
321  *bufferPtr,
323  }
324 
325  // fixup NULL sentinel
326  for (size_t i = 0; i < dest_ids.size(); i++) {
327  auto id = dest_ids[i];
328  if (id == buffer_null_sentinal_) {
329  columnDataPtr[i] = this->null_value_;
330  } else {
331  if (std::is_signed<TARGET_TYPE>::value) {
332  if (id < 0) {
333  throw std::runtime_error(
334  "Maximum number of unique strings (" +
335  std::to_string(std::numeric_limits<TARGET_TYPE>::max()) +
336  ") reached in target dictionary");
337  }
338  } else {
339  if (id >= std::numeric_limits<TARGET_TYPE>::max()) {
340  throw std::runtime_error(
341  "Maximum number of unique strings (" +
342  std::to_string(std::numeric_limits<TARGET_TYPE>::max()) +
343  ") reached in target column's dict encoding");
344  }
345  }
346  columnDataPtr[i] = static_cast<TARGET_TYPE>(id);
347  }
348  }
349  }
350  }
351 
352  return data;
353  }
std::unique_ptr< TARGET_TYPE, CheckedMallocDeleter< TARGET_TYPE >> ColumnDataPtr
const std::vector< std::string const * > & getTransientVector() const
const DictDescriptor * source_dict_desc_
static void populate_string_ids(std::vector< int32_t > &dest_ids, StringDictionary *dest_dict, const std::vector< int32_t > &source_ids, const StringDictionary *source_dict, const std::vector< std::string const * > &transient_string_vec={})
Populates provided dest_ids vector with string ids corresponding to given source strings.
std::string to_string(char const *&&v)
const DictDescriptor * target_dict_desc_
std::shared_ptr< StringDictionary > stringDict
void * checked_malloc(const size_t size)
Definition: checked_alloc.h:45
int32_t convertTransientStringIdToPermanentId(int32_t &transient_string_id)
std::unordered_map< int32_t, int32_t > literals_lookup_
StringDictionaryProxy * source_dict_proxy_

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Member Data Documentation

template<typename TARGET_TYPE >
const int32_t DictionaryValueConverter< TARGET_TYPE >::buffer_null_sentinal_ = std::numeric_limits<int32_t>::min()
template<typename TARGET_TYPE >
const StringDictionaryProxy* DictionaryValueConverter< TARGET_TYPE >::literals_dict_
template<typename TARGET_TYPE >
std::unordered_map<int32_t, int32_t> DictionaryValueConverter< TARGET_TYPE >::literals_lookup_

The documentation for this struct was generated from the following file: