23 #ifndef QUERYENGINE_THRIFTSERIALIZERS_H
24 #define QUERYENGINE_THRIFTSERIALIZERS_H
26 #include "gen-cpp/serialized_result_set_types.h"
39 namespace ThriftSerializers {
41 #define THRIFT_LAYOUT_CASE(layout) \
42 case QueryDescriptionType::layout: \
43 return TResultSetLayout::layout;
52 CHECK(
false) <<
static_cast<int>(layout);
57 #undef THRIFT_LAYOUT_CASE
59 #define UNTHRIFT_LAYOUT_CASE(layout) \
60 case TResultSetLayout::layout: \
61 return QueryDescriptionType::layout;
70 CHECK(
false) <<
static_cast<int>(layout);
75 #undef UNTHRIFT_LAYOUT_CASE
77 #define THRIFT_AGGKIND_CASE(kind) \
79 return TAggKind::kind;
94 CHECK(
false) <<
static_cast<int>(agg);
99 #undef THRIFT_AGGKIND_CASE
101 #define UNTHRIFT_AGGKIND_CASE(kind) \
102 case TAggKind::kind: \
118 CHECK(
false) <<
static_cast<int>(agg);
123 #undef UNTHRIFT_AGGKIND_CASE
126 const std::vector<TColumnRange>& thrift_column_ranges) {
128 for (
const auto& thrift_column_range : thrift_column_ranges) {
130 thrift_column_range.table_id,
131 thrift_column_range.db_id};
132 switch (thrift_column_range.type) {
133 case TExpressionRangeType::INTEGER:
137 thrift_column_range.int_max,
138 thrift_column_range.bucket,
139 thrift_column_range.has_nulls));
141 case TExpressionRangeType::FLOAT:
145 thrift_column_range.fp_max,
146 thrift_column_range.has_nulls));
148 case TExpressionRangeType::DOUBLE:
152 thrift_column_range.fp_max,
153 thrift_column_range.has_nulls));
162 return column_ranges;
166 const std::vector<TDictionaryGeneration>& thrift_string_dictionary_generations) {
168 for (
const auto& thrift_string_dictionary_generation :
169 thrift_string_dictionary_generations) {
171 {thrift_string_dictionary_generation.db_id,
172 thrift_string_dictionary_generation.dict_id},
173 thrift_string_dictionary_generation.entry_count);
175 return string_dictionary_generations;
188 thrift_ti.precision =
196 TStringDictKey t_dict_key;
197 t_dict_key.
db_id = dict_key.db_id;
198 t_dict_key.dict_id = dict_key.dict_id;
199 thrift_ti.__set_dict_key(t_dict_key);
205 return target_info.
is_agg &&
210 const TRowDescriptor& row_desc) {
211 std::vector<TargetMetaInfo> target_meta_infos;
212 for (
const auto& col : row_desc) {
215 return target_meta_infos;
220 const int output_srid) {
221 col_type.col_type.precision =
static_cast<int>(subtype);
222 col_type.col_type.scale = output_srid;
227 TColumnType proj_info;
229 if (proj_info.col_name.empty()) {
235 proj_info.col_type.nullable = !target_ti.get_notnull();
236 proj_info.col_type.is_array = target_ti.get_type() ==
kARRAY;
237 if (
IS_GEO(target_ti.get_type())) {
239 proj_info, target_ti.get_subtype(), target_ti.get_output_srid());
241 proj_info.col_type.precision = target_ti.get_precision();
242 proj_info.col_type.scale = target_ti.get_scale();
244 if (target_ti.get_type() ==
kDATE) {
245 proj_info.col_type.size = target_ti.get_size();
247 proj_info.col_type.comp_param =
248 (target_ti.is_date_in_days() && target_ti.get_comp_param() == 0)
250 : target_ti.get_comp_param();
253 const auto& dict_key = target_ti.getStringDictKey();
254 TStringDictKey t_dict_key;
255 t_dict_key.db_id = dict_key.db_id;
256 t_dict_key.dict_id = dict_key.dict_id;
257 proj_info.col_type.__set_dict_key(t_dict_key);
263 const std::vector<TargetMetaInfo>& targets) {
264 TRowDescriptor row_desc;
266 for (
const auto& target : targets) {
274 TTargetInfo thrift_target_info;
275 thrift_target_info.is_agg = target_info.
is_agg;
278 thrift_target_info.arg_type =
takes_arg(target_info)
280 : thrift_target_info.type;
282 thrift_target_info.is_distinct = target_info.
is_distinct;
283 return thrift_target_info;
288 target_info.
is_agg = thrift_target_info.is_agg;
291 target_info.
is_distinct = thrift_target_info.is_distinct;
300 const std::vector<TargetInfo>& targets) {
301 std::vector<TTargetInfo> thrift_targets;
302 for (
const auto& target_info : targets) {
305 return thrift_targets;
309 const std::vector<TTargetInfo>& thrift_targets) {
310 std::vector<TargetInfo> targets;
311 for (
const auto& thrift_target_info : thrift_targets) {
317 #define THRIFT_COUNTDESCRIPTORIMPL_CASE(kind) \
318 case CountDistinctImplType::kind: \
319 return TCountDistinctImplType::kind;
333 #undef THRIFT_COUNTDESCRIPTORIMPL_CASE
337 TCountDistinctDescriptor thrift_count_distinct_descriptor;
338 thrift_count_distinct_descriptor.impl_type =
340 thrift_count_distinct_descriptor.min_val = count_distinct_descriptor.
min_val;
341 thrift_count_distinct_descriptor.bitmap_sz_bits =
343 thrift_count_distinct_descriptor.approximate = count_distinct_descriptor.
approximate;
344 thrift_count_distinct_descriptor.device_type =
347 thrift_count_distinct_descriptor.sub_bitmap_count =
349 return thrift_count_distinct_descriptor;
352 #define UNTHRIFT_COUNTDESCRIPTORIMPL_CASE(kind) \
353 case TCountDistinctImplType::kind: \
354 return CountDistinctImplType::kind;
368 #undef UNTHRIFT_COUNTDESCRIPTORIMPL_CASE
371 const TCountDistinctDescriptor& thrift_count_distinct_descriptor) {
375 count_distinct_descriptor.
min_val = thrift_count_distinct_descriptor.min_val;
377 thrift_count_distinct_descriptor.bitmap_sz_bits;
378 count_distinct_descriptor.
approximate = thrift_count_distinct_descriptor.approximate;
380 thrift_count_distinct_descriptor.device_type == TDeviceType::GPU
384 thrift_count_distinct_descriptor.sub_bitmap_count;
385 return count_distinct_descriptor;
390 case TExtArgumentType::Int8:
392 case TExtArgumentType::Int16:
394 case TExtArgumentType::Int32:
396 case TExtArgumentType::Int64:
398 case TExtArgumentType::Float:
402 case TExtArgumentType::Void:
404 case TExtArgumentType::PInt8:
406 case TExtArgumentType::PInt16:
408 case TExtArgumentType::PInt32:
410 case TExtArgumentType::PInt64:
412 case TExtArgumentType::PFloat:
414 case TExtArgumentType::PDouble:
416 case TExtArgumentType::PBool:
418 case TExtArgumentType::Bool:
420 case TExtArgumentType::ArrayInt8:
422 case TExtArgumentType::ArrayInt16:
424 case TExtArgumentType::ArrayInt32:
426 case TExtArgumentType::ArrayInt64:
428 case TExtArgumentType::ArrayFloat:
430 case TExtArgumentType::ArrayDouble:
432 case TExtArgumentType::ArrayBool:
434 case TExtArgumentType::ArrayTextEncodingNone:
436 case TExtArgumentType::ArrayTextEncodingDict:
446 case TExtArgumentType::Cursor:
452 case TExtArgumentType::ColumnInt8:
454 case TExtArgumentType::ColumnInt16:
456 case TExtArgumentType::ColumnInt32:
458 case TExtArgumentType::ColumnInt64:
460 case TExtArgumentType::ColumnFloat:
462 case TExtArgumentType::ColumnDouble:
464 case TExtArgumentType::ColumnBool:
466 case TExtArgumentType::ColumnTextEncodingNone:
468 case TExtArgumentType::ColumnTextEncodingDict:
470 case TExtArgumentType::ColumnTimestamp:
472 case TExtArgumentType::TextEncodingNone:
474 case TExtArgumentType::TextEncodingDict:
476 case TExtArgumentType::Timestamp:
478 case TExtArgumentType::ColumnListInt8:
480 case TExtArgumentType::ColumnListInt16:
482 case TExtArgumentType::ColumnListInt32:
484 case TExtArgumentType::ColumnListInt64:
486 case TExtArgumentType::ColumnListFloat:
488 case TExtArgumentType::ColumnListDouble:
490 case TExtArgumentType::ColumnListBool:
492 case TExtArgumentType::ColumnListTextEncodingNone:
494 case TExtArgumentType::ColumnListTextEncodingDict:
496 case TExtArgumentType::ColumnArrayInt8:
498 case TExtArgumentType::ColumnArrayInt16:
500 case TExtArgumentType::ColumnArrayInt32:
502 case TExtArgumentType::ColumnArrayInt64:
504 case TExtArgumentType::ColumnArrayFloat:
506 case TExtArgumentType::ColumnArrayDouble:
508 case TExtArgumentType::ColumnArrayBool:
510 case TExtArgumentType::ColumnArrayTextEncodingNone:
512 case TExtArgumentType::ColumnArrayTextEncodingDict:
514 case TExtArgumentType::ColumnListArrayInt8:
516 case TExtArgumentType::ColumnListArrayInt16:
518 case TExtArgumentType::ColumnListArrayInt32:
520 case TExtArgumentType::ColumnListArrayInt64:
522 case TExtArgumentType::ColumnListArrayFloat:
524 case TExtArgumentType::ColumnListArrayDouble:
526 case TExtArgumentType::ColumnListArrayBool:
528 case TExtArgumentType::ColumnListArrayTextEncodingNone:
530 case TExtArgumentType::ColumnListArrayTextEncodingDict:
532 case TExtArgumentType::DayTimeInterval:
534 case TExtArgumentType::YearMonthTimeInterval:
536 case TExtArgumentType::ColumnGeoPoint:
538 case TExtArgumentType::ColumnGeoLineString:
540 case TExtArgumentType::ColumnGeoPolygon:
542 case TExtArgumentType::ColumnGeoMultiPoint:
544 case TExtArgumentType::ColumnGeoMultiLineString:
546 case TExtArgumentType::ColumnGeoMultiPolygon:
548 case TExtArgumentType::ColumnListGeoPoint:
550 case TExtArgumentType::ColumnListGeoLineString:
552 case TExtArgumentType::ColumnListGeoPolygon:
554 case TExtArgumentType::ColumnListGeoMultiPoint:
556 case TExtArgumentType::ColumnListGeoMultiLineString:
558 case TExtArgumentType::ColumnListGeoMultiPolygon:
568 return TExtArgumentType::Int8;
570 return TExtArgumentType::Int16;
572 return TExtArgumentType::Int32;
574 return TExtArgumentType::Int64;
576 return TExtArgumentType::Float;
580 return TExtArgumentType::Void;
582 return TExtArgumentType::PInt8;
584 return TExtArgumentType::PInt16;
586 return TExtArgumentType::PInt32;
588 return TExtArgumentType::PInt64;
590 return TExtArgumentType::PFloat;
592 return TExtArgumentType::PDouble;
594 return TExtArgumentType::PBool;
596 return TExtArgumentType::Bool;
598 return TExtArgumentType::ArrayInt8;
600 return TExtArgumentType::ArrayInt16;
602 return TExtArgumentType::ArrayInt32;
604 return TExtArgumentType::ArrayInt64;
606 return TExtArgumentType::ArrayFloat;
608 return TExtArgumentType::ArrayDouble;
610 return TExtArgumentType::ArrayBool;
612 return TExtArgumentType::ArrayTextEncodingNone;
614 return TExtArgumentType::ArrayTextEncodingDict;
624 return TExtArgumentType::Cursor;
630 return TExtArgumentType::ColumnInt8;
632 return TExtArgumentType::ColumnInt16;
634 return TExtArgumentType::ColumnInt32;
636 return TExtArgumentType::ColumnInt64;
638 return TExtArgumentType::ColumnFloat;
640 return TExtArgumentType::ColumnDouble;
642 return TExtArgumentType::ColumnBool;
644 return TExtArgumentType::ColumnTextEncodingNone;
646 return TExtArgumentType::ColumnTextEncodingDict;
648 return TExtArgumentType::ColumnTimestamp;
650 return TExtArgumentType::TextEncodingNone;
652 return TExtArgumentType::TextEncodingDict;
654 return TExtArgumentType::Timestamp;
656 return TExtArgumentType::ColumnListInt8;
658 return TExtArgumentType::ColumnListInt16;
660 return TExtArgumentType::ColumnListInt32;
662 return TExtArgumentType::ColumnListInt64;
664 return TExtArgumentType::ColumnListFloat;
666 return TExtArgumentType::ColumnListDouble;
668 return TExtArgumentType::ColumnListBool;
670 return TExtArgumentType::ColumnListTextEncodingNone;
672 return TExtArgumentType::ColumnListTextEncodingDict;
674 return TExtArgumentType::ColumnArrayInt8;
676 return TExtArgumentType::ColumnArrayInt16;
678 return TExtArgumentType::ColumnArrayInt32;
680 return TExtArgumentType::ColumnArrayInt64;
682 return TExtArgumentType::ColumnArrayFloat;
684 return TExtArgumentType::ColumnArrayDouble;
686 return TExtArgumentType::ColumnArrayBool;
688 return TExtArgumentType::ColumnArrayTextEncodingNone;
690 return TExtArgumentType::ColumnArrayTextEncodingDict;
692 return TExtArgumentType::ColumnListArrayInt8;
694 return TExtArgumentType::ColumnListArrayInt16;
696 return TExtArgumentType::ColumnListArrayInt32;
698 return TExtArgumentType::ColumnListArrayInt64;
700 return TExtArgumentType::ColumnListArrayFloat;
702 return TExtArgumentType::ColumnListArrayDouble;
704 return TExtArgumentType::ColumnListArrayBool;
706 return TExtArgumentType::ColumnListArrayTextEncodingDict;
708 return TExtArgumentType::ColumnListArrayTextEncodingNone;
710 return TExtArgumentType::DayTimeInterval;
712 return TExtArgumentType::YearMonthTimeInterval;
714 return TExtArgumentType::ColumnGeoPoint;
716 return TExtArgumentType::ColumnGeoLineString;
718 return TExtArgumentType::ColumnGeoPolygon;
720 return TExtArgumentType::ColumnGeoMultiPoint;
722 return TExtArgumentType::ColumnGeoMultiLineString;
724 return TExtArgumentType::ColumnGeoMultiPolygon;
726 return TExtArgumentType::ColumnListGeoPoint;
728 return TExtArgumentType::ColumnListGeoLineString;
730 return TExtArgumentType::ColumnListGeoPolygon;
732 return TExtArgumentType::ColumnListGeoMultiPoint;
734 return TExtArgumentType::ColumnListGeoMultiLineString;
736 return TExtArgumentType::ColumnListGeoMultiPolygon;
743 const std::vector<TExtArgumentType::type>& v) {
744 std::vector<ExtArgumentType>
result;
748 std::back_inserter(result),
754 const std::vector<ExtArgumentType>& v) {
755 std::vector<TExtArgumentType::type>
result;
759 std::back_inserter(result),
767 case TOutputBufferSizeType::kConstant:
769 case TOutputBufferSizeType::kUserSpecifiedConstantParameter:
771 case TOutputBufferSizeType::kUserSpecifiedRowMultiplier:
773 case TOutputBufferSizeType::kTableFunctionSpecifiedParameter:
775 case TOutputBufferSizeType::kPreFlightParameter:
786 return TOutputBufferSizeType::kConstant;
788 return TOutputBufferSizeType::kUserSpecifiedConstantParameter;
790 return TOutputBufferSizeType::kUserSpecifiedRowMultiplier;
792 return TOutputBufferSizeType::kTableFunctionSpecifiedParameter;
794 return TOutputBufferSizeType::kPreFlightParameter;
801 TUserDefinedFunction tfunc;
802 tfunc.name = udf.
getName(
true);
810 TUserDefinedTableFunction tfunc;
821 inline std::vector<TUserDefinedTableFunction>
to_thrift(
822 const std::vector<table_functions::TableFunction>& v) {
823 std::vector<TUserDefinedTableFunction>
result;
826 std::back_inserter(result),
835 #endif // QUERYENGINE_THRIFTSERIALIZERS_H
TCountDistinctImplType::type count_distinct_impl_type_to_thrift(const CountDistinctImplType impl_type)
AggregatedColRange column_ranges_from_thrift(const std::vector< TColumnRange > &thrift_column_ranges)
std::vector< TTargetInfo > target_infos_to_thrift(const std::vector< TargetInfo > &targets)
HOST DEVICE SQLTypes get_subtype() const
ExecutorDeviceType device_type
StringDictionaryGenerations string_dictionary_generations_from_thrift(const std::vector< TDictionaryGeneration > &thrift_string_dictionary_generations)
HOST DEVICE int get_size() const
struct GeoLineStringStruct GeoLineString
Descriptor for the storage layout use for (approximate) count distinct operations.
TDatumType::type type_to_thrift(const SQLTypeInfo &type_info)
#define UNTHRIFT_AGGKIND_CASE(kind)
TCountDistinctDescriptor count_distinct_descriptor_to_thrift(const CountDistinctDescriptor &count_distinct_descriptor)
TRowDescriptor target_meta_infos_to_thrift(const std::vector< TargetMetaInfo > &targets)
QueryDescriptionType layout_from_thrift(const TResultSetLayout::type layout)
void setGeneration(const shared::StringDictKey &dict_key, const uint64_t generation)
struct GeoPointStruct GeoPoint
const ExtArgumentType getRet() const
TargetInfo target_info_from_thrift(const TTargetInfo &thrift_target_info)
HOST DEVICE int get_scale() const
Cache for physical column ranges. Set by the aggregator on the leaves.
CountDistinctDescriptor count_distinct_descriptor_from_thrift(const TCountDistinctDescriptor &thrift_count_distinct_descriptor)
ExtArgumentType from_thrift(const TExtArgumentType::type &t)
const std::string getName(bool keep_suffix=true) const
HOST DEVICE SQLTypes get_type() const
CountDistinctImplType impl_type_
static ExpressionRange makeFloatRange(const float fp_min, const float fp_max, const bool has_nulls)
size_t getOutputRowSizeParameter() const
std::vector< TargetInfo > target_infos_from_thrift(const std::vector< TTargetInfo > &thrift_targets)
Supported runtime functions management and retrieval.
bool is_distinct_target(const TargetInfo &target_info)
const std::vector< ExtArgumentType > & getOutputArgs() const
OUTPUT transform(INPUT const &input, FUNC const &func)
SQLTypeInfo type_info_from_thrift(const TTypeInfo &thrift_ti, const bool strip_geo_encoding=false)
SQLAgg agg_kind_from_thrift(const TAggKind::type agg)
std::string getName(const bool drop_suffix=false, const bool lower=false) const
struct GeoMultiPointStruct GeoMultiPoint
int get_precision() const
static ExpressionRange makeIntRange(const int64_t int_min, const int64_t int_max, const int64_t bucket, const bool has_nulls)
void fixup_geo_column_descriptor(TColumnType &col_type, const SQLTypes subtype, const int output_srid)
#define THRIFT_COUNTDESCRIPTORIMPL_CASE(kind)
static ExpressionRange makeDoubleRange(const double fp_min, const double fp_max, const bool has_nulls)
TExtArgumentType::type to_thrift(const ExtArgumentType &t)
CountDistinctImplType count_distinct_impl_type_from_thrift(const TCountDistinctImplType::type impl_type)
struct GeoMultiLineStringStruct GeoMultiLineString
#define UNTHRIFT_COUNTDESCRIPTORIMPL_CASE(kind)
HOST DEVICE EncodingType get_compression() const
const std::vector< ExtArgumentType > & getInputArgs() const
const std::vector< ExtArgumentType > & getInputArgs() const
bool takes_arg(const TargetInfo &target_info)
TColumnType target_meta_info_to_thrift(const TargetMetaInfo &target, const size_t idx)
HOST DEVICE int get_comp_param() const
const std::vector< ExtArgumentType > & getSqlArgs() const
std::vector< TargetMetaInfo > target_meta_infos_from_thrift(const TRowDescriptor &row_desc)
TAggKind::type agg_kind_to_thrift(const SQLAgg agg)
void setColRange(const PhysicalInput &, const ExpressionRange &)
struct GeoMultiPolygonStruct GeoMultiPolygon
TResultSetLayout::type layout_to_thrift(const QueryDescriptionType layout)
static ExpressionRange makeInvalidRange()
#define THRIFT_LAYOUT_CASE(layout)
struct GeoPolygonStruct GeoPolygon
HOST DEVICE bool get_notnull() const
const std::vector< std::map< std::string, std::string > > & getAnnotations() const
TTypeInfo type_info_to_thrift(const SQLTypeInfo &ti)
SQLTypeInfo get_elem_type() const
OutputBufferSizeType getOutputRowSizeType() const
#define UNTHRIFT_LAYOUT_CASE(layout)
#define THRIFT_AGGKIND_CASE(kind)
const std::vector< std::map< std::string, std::string > > & getAnnotations() const
TTargetInfo target_info_to_thrift(const TargetInfo &target_info)
const shared::StringDictKey & getStringDictKey() const
TEncodingType::type encoding_to_thrift(const SQLTypeInfo &type_info)