17 #ifndef TARGET_VALUE_CONVERTERS_IMPL_H_
18 #define TARGET_VALUE_CONVERTERS_IMPL_H_
33 if (std::is_floating_point<T>::value) {
34 return static_cast<T>(inline_fp_null_array_value<T>());
36 return static_cast<T>(inline_int_null_array_value<T>());
40 template <
typename SOURCE_TYPE,
typename RETURN_TYPE,
typename CHECKED_CAST_TYPE>
41 RETURN_TYPE
checked_cast(SOURCE_TYPE val,
bool check_null, RETURN_TYPE null_value) {
42 if (!std::is_same<SOURCE_TYPE, CHECKED_CAST_TYPE>::value) {
45 CHECKED_CAST_TYPE castedVal = boost::numeric_cast<CHECKED_CAST_TYPE>(val);
46 if (check_null && castedVal == null_value) {
47 throw std::runtime_error(
"Overflow or underflow");
50 throw std::runtime_error(
"Overflow or underflow");
54 return static_cast<RETURN_TYPE
>(val);
57 template <
typename SOURCE_TYPE,
typename TARGET_TYPE>
59 using ColumnDataPtr = std::unique_ptr<TARGET_TYPE, CheckedMallocDeleter<TARGET_TYPE>>;
61 using CasterFunc = std::function<TARGET_TYPE(SOURCE_TYPE, bool, TARGET_TYPE)>;
74 TARGET_TYPE nullValue,
75 SOURCE_TYPE nullCheckValue,
100 reinterpret_cast<TARGET_TYPE*>(
checked_malloc(num_rows *
sizeof(TARGET_TYPE))));
106 reinterpret_cast<TARGET_TYPE*>(
checked_malloc(num_rows *
sizeof(TARGET_TYPE))));
111 typename ElementsBufferColumnPtr::pointer columnData,
122 columnData[row] =
static_cast<TARGET_TYPE
>(val);
138 std::unique_ptr<std::vector<std::pair<size_t, ElementsBufferColumnPtr>>>&
140 std::unique_ptr<std::vector<ArrayDatum>>::pointer arrayData) {
141 for (
size_t row = 0; row < array_buffer->size(); row++) {
142 auto& element = (array_buffer->at(row));
144 if (element.second) {
146 int8_t* arrayDataPtr =
reinterpret_cast<int8_t*
>(data.release());
148 ArrayDatum(element.first *
sizeof(TARGET_TYPE), arrayDataPtr, is_null);
156 insertData.
data.push_back(dataBlock);
161 template <
typename TARGET_TYPE>
186 TARGET_TYPE nullValue,
187 int64_t nullCheckValue,
206 const auto source_cat =
210 source_cat->getMetadataForDict(std::abs(source_dict_key.
dict_id),
true);
215 for (
unsigned index = 0; index < transient_vecmap.size(); ++index) {
217 std::string
const& str = *transient_vecmap[index];
218 auto const new_id = target_dict_desc_->stringDict->getOrAdd(str);
226 CHECK(target_dict_desc_);
237 return std::make_unique<std::vector<int32_t>>(num_rows);
242 typename ElementsBufferColumnPtr::pointer columnBuffer,
250 (*columnBuffer)[row] = (int32_t)val;
270 throw std::runtime_error(
"Unexpected negative source ID");
278 reinterpret_cast<TARGET_TYPE*>(
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());
285 for (
size_t i = 0; i < bufferPtr->size(); i++) {
290 columnDataPtr[i] =
static_cast<TARGET_TYPE
>(id);
297 for (
size_t i = 0; i < bufferPtr->size(); i++) {
298 auto src_id = (*bufferPtr)[i];
301 }
else if (src_id < 0) {
304 columnDataPtr[i] =
static_cast<TARGET_TYPE
>(src_id);
309 std::vector<int32_t> dest_ids;
310 dest_ids.resize(bufferPtr->size());
326 for (
size_t i = 0; i < dest_ids.size(); i++) {
327 auto id = dest_ids[i];
331 if (std::is_signed<TARGET_TYPE>::value) {
333 throw std::runtime_error(
334 "Maximum number of unique strings (" +
336 ") reached in target dictionary");
339 if (
id >= std::numeric_limits<TARGET_TYPE>::max()) {
340 throw std::runtime_error(
341 "Maximum number of unique strings (" +
343 ") reached in target column's dict encoding");
346 columnDataPtr[i] =
static_cast<TARGET_TYPE
>(id);
356 std::unique_ptr<std::vector<std::pair<size_t, ElementsBufferColumnPtr>>>&
358 std::unique_ptr<std::vector<ArrayDatum>>::pointer arrayData) {
360 for (
size_t row = 0; row < array_buffer->size(); row++) {
361 auto& element = (array_buffer->at(row));
363 if (element.second) {
366 int8_t* arrayDataPtr =
reinterpret_cast<int8_t*
>(data.release());
368 ArrayDatum(element.first *
sizeof(TARGET_TYPE), arrayDataPtr, is_null);
372 std::vector<std::vector<int32_t>> srcArrayIds(array_buffer->size());
373 std::vector<std::vector<int32_t>> destArrayIds(0);
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());
387 for (
size_t row = 0; row < array_buffer->size(); row++) {
388 auto& element = (array_buffer->at(row));
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),
413 insertData.
data.push_back(dataBlock);
437 if (0 != source_dict_key.
dict_id) {
438 const auto source_cat =
441 const auto source_dict_desc =
442 source_cat->getMetadataForDict(std::abs(source_dict_key.
dict_id),
true);
443 CHECK(source_dict_desc);
459 column_data_ = std::make_unique<std::vector<std::string>>(num_rows);
468 if (std::numeric_limits<int32_t>::min() == val) {
469 (*column_data_)[row] = std::string(
"");
473 (*column_data_)[row] = strVal;
476 (*column_data_)[row] = strVal;
478 CHECK_EQ(val, inline_int_null_value<int32_t>());
479 std::string nullStr =
"";
480 (*column_data_)[row] = nullStr;
489 const auto db_str_p = checked_get<std::string>(row, db_p,
STRING_ACCESSOR);
491 if (
nullptr != db_str_p) {
492 (*column_data_)[row] = *db_str_p;
494 (*column_data_)[row] = std::string(
"");
509 insertData.
data.push_back(dataBlock);
514 template <
typename ELEMENT_CONVERTER>
517 std::vector<std::pair<size_t, typename ELEMENT_CONVERTER::ElementsBufferColumnPtr>>>
532 std::unique_ptr<ELEMENT_CONVERTER> element_converter,
560 column_data_ = std::make_unique<std::vector<ArrayDatum>>(num_rows);
562 std::pair<size_t, typename ELEMENT_CONVERTER::ElementsBufferColumnPtr>>>(
567 const auto arrayValue =
570 if (arrayValue->is_initialized()) {
571 const auto& vec = arrayValue->get();
576 throw std::runtime_error(
577 "Incorrect number of array elements for fixed length array column");
582 typename ELEMENT_CONVERTER::ElementsBufferColumnPtr elementBuffer =
585 int elementIndex = 0;
586 for (
const auto& scalarValue : vec) {
588 elementIndex++, elementBuffer.get(), &scalarValue);
599 throw std::runtime_error(
"NULL assignment of non null column not allowed");
605 (*column_data_)[row].is_null =
is_null;
620 insertData.
data.push_back(dataBlock);
648 column_data_ = std::make_unique<std::vector<std::string>>(num_rows);
656 const std::shared_ptr<std::vector<double>>& coords) {
657 const auto compressed_coords_vector =
660 uint8_t* compressed_coords_array =
reinterpret_cast<uint8_t*
>(
661 checked_malloc(
sizeof(uint8_t) * compressed_coords_vector.size()));
662 memcpy(compressed_coords_array,
663 &compressed_coords_vector[0],
664 compressed_coords_vector.size());
666 return ArrayDatum((
int)compressed_coords_vector.size(),
667 reinterpret_cast<int8_t*
>(compressed_coords_array),
674 if (geoValue->is_initialized()) {
675 const auto geo = geoValue->get();
676 const auto geoPoint =
679 (*column_data_)[row] =
"";
683 (*column_data_)[row] =
"";
684 auto coords = std::make_shared<std::vector<double>>();
688 coords_datum.is_null =
true;
689 (*signed_compressed_coords_data_)[row] = coords_datum;
699 insertData.
data.emplace_back(logical);
702 insertData.
data.emplace_back(coords);
708 const std::shared_ptr<std::vector<double>>& coords) {
709 std::vector<double> bounds(4);
710 constexpr
auto DOUBLE_MAX = std::numeric_limits<double>::max();
711 constexpr
auto DOUBLE_MIN = std::numeric_limits<double>::lowest();
716 auto size_coords = coords->size();
718 for (
size_t i = 0; i < size_coords; i += 2) {
719 double x = (*coords)[i];
720 double y = (*coords)[i + 1];
722 bounds[0] = std::min(bounds[0], x);
723 bounds[1] = std::min(bounds[1], y);
724 bounds[2] = std::max(bounds[2], x);
725 bounds[3] = std::max(bounds[3], y);
730 template <
typename ELEM_TYPE>
733 reinterpret_cast<ELEM_TYPE*
>(
checked_malloc(
sizeof(ELEM_TYPE) * vector.size()));
734 memcpy(array, vector.data(), vector.size() *
sizeof(ELEM_TYPE));
737 (
int)(vector.size() *
sizeof(ELEM_TYPE)),
reinterpret_cast<int8_t*
>(array),
false);
740 template <
typename ELEM_TYPE>
768 bounds_data_ = std::make_unique<std::vector<ArrayDatum>>(num_rows);
774 const auto geoValue =
777 if (geoValue->is_initialized()) {
778 const auto geo = geoValue->get();
779 const auto geoMultiPoint =
782 (*column_data_)[row] =
"";
788 (*column_data_)[row] =
"";
789 (*signed_compressed_coords_data_)[row] =
ArrayDatum(0,
nullptr,
true);
790 std::vector<double> bounds = {
793 bounds_datum.is_null =
true;
794 (*bounds_data_)[row] = bounds_datum;
805 insertData.
data.emplace_back(bounds);
833 bounds_data_ = std::make_unique<std::vector<ArrayDatum>>(num_rows);
839 const auto geoValue =
842 if (geoValue->is_initialized()) {
843 const auto geo = geoValue->get();
844 const auto geoLinestring =
847 (*column_data_)[row] =
"";
853 (*column_data_)[row] =
"";
854 (*signed_compressed_coords_data_)[row] =
ArrayDatum(0,
nullptr,
true);
855 std::vector<double> bounds = {
858 bounds_datum.is_null =
true;
859 (*bounds_data_)[row] = bounds_datum;
870 insertData.
data.emplace_back(bounds);
904 bounds_data_ = std::make_unique<std::vector<ArrayDatum>>(num_rows);
911 const auto geoValue =
914 if (geoValue->is_initialized()) {
915 const auto geo = geoValue->get();
916 const auto geoMultiLinestring = checked_get<GeoMultiLineStringTargetValue>(
919 (*column_data_)[row] =
"";
920 (*signed_compressed_coords_data_)[row] =
922 (*linestring_sizes_data_)[row] =
928 (*column_data_)[row] =
"";
929 (*signed_compressed_coords_data_)[row] =
ArrayDatum(0,
nullptr,
true);
930 (*linestring_sizes_data_)[row] =
ArrayDatum(0,
nullptr,
true);
931 std::vector<double> bounds = {
934 bounds_datum.is_null =
true;
935 (*bounds_data_)[row] = bounds_datum;
947 insertData.
data.emplace_back(linestringSizes);
950 insertData.
data.emplace_back(bounds);
960 if (render_group_analyzer_map) {
962 auto itr = render_group_analyzer_map->try_emplace(column_id).first;
986 logicalColumnDescriptor->columnId) {
1007 bounds_data_ = std::make_unique<std::vector<ArrayDatum>>(num_rows);
1014 const auto geoValue =
1017 if (geoValue->is_initialized()) {
1018 const auto geo = geoValue->get();
1019 const auto geoPoly =
1022 (*column_data_)[row] =
"";
1035 (*column_data_)[row] =
"";
1036 (*signed_compressed_coords_data_)[row] =
ArrayDatum(0,
nullptr,
true);
1037 (*ring_sizes_data_)[row] =
ArrayDatum(0,
nullptr,
true);
1038 std::vector<double> bounds = {
1041 bounds_datum.is_null =
true;
1042 (*bounds_data_)[row] = bounds_datum;
1056 insertData.
data.emplace_back(ringSizes);
1059 insertData.
data.emplace_back(bounds);
1062 insertData.
data.emplace_back(renderGroup);
1085 logicalColumnDescriptor->columnId) {
1110 bounds_data_ = std::make_unique<std::vector<ArrayDatum>>(num_rows);
1117 const auto geoValue =
1120 if (geoValue->is_initialized()) {
1121 const auto geo = geoValue->get();
1122 const auto geoMultiPoly =
1125 (*column_data_)[row] =
"";
1127 (*ring_sizes_data_)[row] =
to_array_datum(geoMultiPoly->ring_sizes);
1128 (*poly_rings_data_)[row] =
to_array_datum(geoMultiPoly->poly_rings);
1139 (*column_data_)[row] =
"";
1140 (*signed_compressed_coords_data_)[row] =
ArrayDatum(0,
nullptr,
true);
1141 (*ring_sizes_data_)[row] =
ArrayDatum(0,
nullptr,
true);
1142 (*poly_rings_data_)[row] =
ArrayDatum(0,
nullptr,
true);
1143 std::vector<double> bounds = {
1146 bounds_datum.is_null =
true;
1147 (*bounds_data_)[row] = bounds_datum;
1155 DataBlockPtr ringSizes, polyRings, bounds, renderGroup;
1162 insertData.
data.emplace_back(ringSizes);
1165 insertData.
data.emplace_back(polyRings);
1168 insertData.
data.emplace_back(bounds);
1171 insertData.
data.emplace_back(renderGroup);
std::unique_ptr< std::vector< ArrayDatum > > ring_sizes_data_
TARGET_TYPE fixed_array_null_value_
ArrayDatum to_array_datum(const std::vector< ELEM_TYPE > &vector)
std::unique_ptr< std::vector< ArrayDatum > > bounds_data_
std::unique_ptr< TARGET_TYPE, CheckedMallocDeleter< TARGET_TYPE >> ColumnDataPtr
std::unique_ptr< std::vector< int32_t >> ElementsBufferColumnPtr
StringDictionaryProxy * literals_source_dict_
void convertToColumnarFormatFromDict(size_t row, const TargetValue *value)
void allocateColumnarData(size_t num_rows) override
std::unique_ptr< std::vector< ArrayDatum > > bounds_data_
HOST DEVICE int get_size() const
~StringValueConverter() override
const std::vector< std::string const * > & getTransientVector() const
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
class for a per-database catalog. also includes metadata for the current database and the current use...
std::vector< std::string > * stringsPtr
const ColumnDescriptor * ring_sizes_solumn_descriptor_
import_export::RenderGroupAnalyzer * render_group_analyzer_
std::vector< ArrayDatum > * arraysPtr
size_t fixed_array_elements_count_
std::unique_ptr< int32_t[]> render_group_data_
constexpr auto DOUBLE_MAX
void allocateColumnarData(size_t num_rows) override
~GeoPolygonValueConverter() override
void processArrayBuffer(std::unique_ptr< std::vector< std::pair< size_t, ElementsBufferColumnPtr >>> &array_buffer, std::unique_ptr< std::vector< ArrayDatum >>::pointer arrayData)
boost_variant_accessor< int64_t > SOURCE_TYPE_ACCESSOR
const ColumnDescriptor * bounds_column_descriptor_
ArrayValueConverter(const ColumnDescriptor *cd, size_t num_rows, std::unique_ptr< ELEMENT_CONVERTER > element_converter, bool do_check_null)
~NumericValueConverter() override
void populateFixedArrayNullSentinel(size_t num_rows)
const DictDescriptor * source_dict_desc_
const ColumnDescriptor * bounds_column_descriptor_
SQLTypeInfo element_type_info_
const ColumnDescriptor * linestring_sizes_column_descriptor_
void convertToColumnarFormat(size_t row, const TargetValue *value) override
void convertToColumnarFormat(size_t row, const ScalarTargetValue *scalarValue)
void convertToColumnarFormat(size_t row, const TargetValue *value) override
std::unique_ptr< std::vector< ArrayDatum > > bounds_data_
void allocateColumnarData(size_t num_rows) override
const ColumnDescriptor * column_descriptor_
CasterFunc checked_caster_
~DictionaryValueConverter() override
std::string getString(int32_t string_id) const
ArrayDatum toCompressedCoords(const std::shared_ptr< std::vector< double >> &coords)
ElementsBufferColumnPtr column_buffer_
std::vector< double > compute_bounds_of_coords(const std::shared_ptr< std::vector< double >> &coords)
std::unique_ptr< std::vector< ArrayDatum > > poly_rings_data_
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.
void processArrayBuffer(std::unique_ptr< std::vector< std::pair< size_t, ElementsBufferColumnPtr >>> &array_buffer, std::unique_ptr< std::vector< ArrayDatum >>::pointer arrayData)
std::function< TARGET_TYPE(int64_t, bool, TARGET_TYPE)> CasterFunc
const ColumnDescriptor * bounds_column_descriptor_
ElementsBufferColumnPtr allocateColumnarBuffer(size_t num_rows)
~ArrayValueConverter() override
void convertElementToColumnarFormat(size_t row, typename ElementsBufferColumnPtr::pointer columnData, const ScalarTargetValue *scalarValue)
const DictDescriptor * target_dict_desc_
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
const StringDictionaryProxy * literals_dict_
void convertToColumnarFormat(size_t row, const ScalarTargetValue *scalarValue)
void allocateColumnarData(size_t num_rows) override
std::shared_ptr< StringDictionary > stringDict
boost_variant_accessor< GeoMultiPointTargetValue > GEO_MULTIPOINT_VALUE_ACCESSOR
boost_variant_accessor< ScalarTargetValue > SCALAR_TARGET_VALUE_ACCESSOR
boost_variant_accessor< GeoLineStringTargetValue > GEO_LINESTRING_VALUE_ACCESSOR
std::conditional_t< is_cuda_compiler(), DeviceArrayDatum, HostArrayDatum > ArrayDatum
GeoPointValueConverter(const Catalog_Namespace::Catalog &cat, size_t num_rows, const ColumnDescriptor *logicalColumnDescriptor)
~GeoMultiLinestringValueConverter() override
std::vector< uint8_t > compress_coords(const std::vector< double > &coords, const SQLTypeInfo &ti)
boost_variant_accessor< NullableString > NULLABLE_STRING_ACCESSOR
static SysCatalog & instance()
std::unique_ptr< std::vector< std::string > > column_data_
CONSTEXPR DEVICE bool is_null(const T &value)
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
void convertToColumnarFormatFromString(size_t row, const TargetValue *value)
void * checked_malloc(const size_t size)
boost_variant_accessor< GeoMultiPolyTargetValue > GEO_MULTI_POLY_VALUE_ACCESSOR
const ColumnDescriptor * bounds_column_descriptor_
boost_variant_accessor< GeoPolyTargetValue > GEO_POLY_VALUE_ACCESSOR
boost_variant_accessor< std::string > STRING_ACCESSOR
const ColumnDescriptor * ring_sizes_column_descriptor_
std::unique_ptr< std::vector< ArrayDatum > > ring_sizes_data_
void finalizeDataBlocksForInsertData() override
GeoLinestringValueConverter(const Catalog_Namespace::Catalog &cat, size_t num_rows, const ColumnDescriptor *logicalColumnDescriptor)
const ColumnDescriptor * getMetadataForColumn(int tableId, const std::string &colName) const
int getDatabaseId() const
static int32_t transientIndexToId(unsigned const index)
std::unique_ptr< std::vector< ArrayDatum > > linestring_sizes_data_
GeoMultiPointValueConverter(const Catalog_Namespace::Catalog &cat, size_t num_rows, const ColumnDescriptor *logicalColumnDescriptor)
const DictDescriptor * getMetadataForDict(int dict_ref, bool loadDict=true) const
specifies the content in-memory of a row in the column metadata table
GeoPolygonRenderGroupManager(RenderGroupAnalyzerMap *render_group_analyzer_map, const int column_id)
StringValueConverter(const ColumnDescriptor *cd, size_t num_rows, bool dictEncoded, const shared::StringDictKey &source_dict_key, StringDictionaryProxy *literals_dict)
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
const int32_t buffer_null_sentinal_
void convertToColumnarFormat(size_t row, const TargetValue *value) override
Global bool for controlling render group assignment, remove along with legacy poly rendering...
std::unique_ptr< ELEMENT_CONVERTER > element_converter_
T get_fixed_array_null_value()
void convertToColumnarFormat(size_t row, const TargetValue *value) override
std::unique_ptr< int32_t[]> render_group_data_
std::shared_ptr< Catalog > getCatalog(const std::string &dbName)
void finalizeDataBlocksForInsertData() override
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
void setValueCaster(CasterFunc caster)
std::vector< DataBlockPtr > data
the number of rows being inserted
int32_t getOrAdd(const std::string &str) noexcept
boost_variant_accessor< GeoMultiLineStringTargetValue > GEO_MULTILINESTRING_VALUE_ACCESSOR
void allocateColumnarData(size_t num_rows) override
int32_t convertTransientStringIdToPermanentId(int32_t &transient_string_id)
void convertToColumnarFormat(size_t row, const TargetValue *value) override
~GeoLinestringValueConverter() override
std::unique_ptr< std::vector< std::string > > column_data_
const ColumnDescriptor * render_group_column_descriptor_
typename NumericValueConverter< int64_t, TARGET_TYPE >::ColumnDataPtr ElementsDataColumnPtr
ColumnDataPtr ElementsBufferColumnPtr
std::unordered_map< int32_t, int32_t > literals_lookup_
RETURN_TYPE checked_cast(SOURCE_TYPE val, bool check_null, RETURN_TYPE null_value)
const ColumnDescriptor * coords_column_descriptor_
void allocateColumnarData(size_t num_rows) override
std::string getString(int32_t string_id) const
GeoMultiPolygonValueConverter(const Catalog_Namespace::Catalog &cat, size_t num_rows, const ColumnDescriptor *logicalColumnDescriptor, RenderGroupAnalyzerMap *render_group_analyzer_map)
constexpr auto DOUBLE_MIN
std::unique_ptr< std::vector< ArrayDatum > > bounds_data_
void allocateColumnarData(size_t num_rows) override
boost_variant_accessor< GeoTargetValue > GEO_VALUE_ACCESSOR
ColumnDataPtr column_data_
#define NULL_ARRAY_DOUBLE
const ColumnDescriptor * render_group_column_descriptor_
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
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)
std::unique_ptr< std::vector< std::pair< size_t, typename ELEMENT_CONVERTER::ElementsBufferColumnPtr > > > column_buffer_
boost_variant_accessor< GeoTargetValue > GEO_TARGET_VALUE_ACCESSOR
GeoMultiLinestringValueConverter(const Catalog_Namespace::Catalog &cat, size_t num_rows, const ColumnDescriptor *logicalColumnDescriptor)
Descriptor for a dictionary for a string columne.
const ColumnDescriptor * bounds_column_descriptor_
void convertToColumnarFormat(size_t row, const TargetValue *value) override
~GeoMultiPolygonValueConverter() override
void convertToColumnarFormat(size_t row, const TargetValue *value) override
The data to be inserted using the fragment manager.
std::map< int, import_export::RenderGroupAnalyzer > RenderGroupAnalyzerMap
boost::variant< ScalarTargetValue, ArrayTargetValue, GeoTargetValue, GeoTargetValuePtr > TargetValue
std::unique_ptr< std::vector< ArrayDatum > > column_data_
SOURCE_TYPE null_check_value_
void convertElementToColumnarFormat(size_t row, typename ElementsBufferColumnPtr::pointer columnBuffer, const ScalarTargetValue *scalarValue)
void allocateColumnarData(size_t num_rows) override
void allocateColumnarData(size_t num_rows) override
void convertToColumnarFormat(size_t row, const TargetValue *value) override
ElementsBufferColumnPtr allocateColumnarBuffer(size_t num_rows)
void convertToColumnarFormat(size_t row, const TargetValue *value) override
int8_t * fixed_array_null_sentinel_
std::unique_ptr< std::vector< ArrayDatum > > bounds_data_
boost_variant_accessor< ArrayTargetValue > ARRAY_VALUE_ACCESSOR
void convertToColumnarFormat(size_t row, const TargetValue *value) override
boost_variant_accessor< GeoPointTargetValue > GEO_POINT_VALUE_ACCESSOR
const ColumnDescriptor * ring_sizes_column_descriptor_
boost_variant_accessor< SOURCE_TYPE > SOURCE_TYPE_ACCESSOR
std::vector< int > columnIds
identifies the table into which the data is being inserted
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
GeoPolygonValueConverter(const Catalog_Namespace::Catalog &cat, size_t num_rows, const ColumnDescriptor *logicalColumnDescriptor, RenderGroupAnalyzerMap *render_group_analyzer_map)
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
~GeoPointValueConverter() override
~GeoMultiPointValueConverter() override
int insertBoundsAndReturnRenderGroup(const std::vector< double > &bounds)
StringDictionary * source_dict_
std::unique_ptr< std::vector< ArrayDatum > > signed_compressed_coords_data_
void addDataBlocksToInsertData(Fragmenter_Namespace::InsertData &insertData) override
StringDictionaryProxy * source_dict_proxy_
NumericValueConverter(const ColumnDescriptor *cd, size_t num_rows, TARGET_TYPE nullValue, SOURCE_TYPE nullCheckValue, bool doNullCheck)
const shared::StringDictKey & getStringDictKey() const
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)
boost::variant< int64_t, double, float, NullableString > ScalarTargetValue