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:
438 case TExtArgumentType::GeoPoint:
440 case TExtArgumentType::GeoMultiPoint:
442 case TExtArgumentType::GeoLineString:
444 case TExtArgumentType::GeoMultiLineString:
446 case TExtArgumentType::Cursor:
448 case TExtArgumentType::GeoPolygon:
450 case TExtArgumentType::GeoMultiPolygon:
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:
544 return TExtArgumentType::Int8;
546 return TExtArgumentType::Int16;
548 return TExtArgumentType::Int32;
550 return TExtArgumentType::Int64;
552 return TExtArgumentType::Float;
556 return TExtArgumentType::Void;
558 return TExtArgumentType::PInt8;
560 return TExtArgumentType::PInt16;
562 return TExtArgumentType::PInt32;
564 return TExtArgumentType::PInt64;
566 return TExtArgumentType::PFloat;
568 return TExtArgumentType::PDouble;
570 return TExtArgumentType::PBool;
572 return TExtArgumentType::Bool;
574 return TExtArgumentType::ArrayInt8;
576 return TExtArgumentType::ArrayInt16;
578 return TExtArgumentType::ArrayInt32;
580 return TExtArgumentType::ArrayInt64;
582 return TExtArgumentType::ArrayFloat;
584 return TExtArgumentType::ArrayDouble;
586 return TExtArgumentType::ArrayBool;
588 return TExtArgumentType::ArrayTextEncodingNone;
590 return TExtArgumentType::ArrayTextEncodingDict;
592 return TExtArgumentType::GeoPoint;
594 return TExtArgumentType::GeoMultiPoint;
596 return TExtArgumentType::GeoLineString;
598 return TExtArgumentType::GeoMultiLineString;
600 return TExtArgumentType::Cursor;
602 return TExtArgumentType::GeoPolygon;
604 return TExtArgumentType::GeoMultiPolygon;
606 return TExtArgumentType::ColumnInt8;
608 return TExtArgumentType::ColumnInt16;
610 return TExtArgumentType::ColumnInt32;
612 return TExtArgumentType::ColumnInt64;
614 return TExtArgumentType::ColumnFloat;
616 return TExtArgumentType::ColumnDouble;
618 return TExtArgumentType::ColumnBool;
620 return TExtArgumentType::ColumnTextEncodingNone;
622 return TExtArgumentType::ColumnTextEncodingDict;
624 return TExtArgumentType::ColumnTimestamp;
626 return TExtArgumentType::TextEncodingNone;
628 return TExtArgumentType::TextEncodingDict;
630 return TExtArgumentType::Timestamp;
632 return TExtArgumentType::ColumnListInt8;
634 return TExtArgumentType::ColumnListInt16;
636 return TExtArgumentType::ColumnListInt32;
638 return TExtArgumentType::ColumnListInt64;
640 return TExtArgumentType::ColumnListFloat;
642 return TExtArgumentType::ColumnListDouble;
644 return TExtArgumentType::ColumnListBool;
646 return TExtArgumentType::ColumnListTextEncodingNone;
648 return TExtArgumentType::ColumnListTextEncodingDict;
650 return TExtArgumentType::ColumnArrayInt8;
652 return TExtArgumentType::ColumnArrayInt16;
654 return TExtArgumentType::ColumnArrayInt32;
656 return TExtArgumentType::ColumnArrayInt64;
658 return TExtArgumentType::ColumnArrayFloat;
660 return TExtArgumentType::ColumnArrayDouble;
662 return TExtArgumentType::ColumnArrayBool;
664 return TExtArgumentType::ColumnArrayTextEncodingNone;
666 return TExtArgumentType::ColumnArrayTextEncodingDict;
668 return TExtArgumentType::ColumnListArrayInt8;
670 return TExtArgumentType::ColumnListArrayInt16;
672 return TExtArgumentType::ColumnListArrayInt32;
674 return TExtArgumentType::ColumnListArrayInt64;
676 return TExtArgumentType::ColumnListArrayFloat;
678 return TExtArgumentType::ColumnListArrayDouble;
680 return TExtArgumentType::ColumnListArrayBool;
682 return TExtArgumentType::ColumnListArrayTextEncodingDict;
684 return TExtArgumentType::ColumnListArrayTextEncodingNone;
686 return TExtArgumentType::DayTimeInterval;
688 return TExtArgumentType::YearMonthTimeInterval;
695 const std::vector<TExtArgumentType::type>& v) {
696 std::vector<ExtArgumentType>
result;
700 std::back_inserter(result),
706 const std::vector<ExtArgumentType>& v) {
707 std::vector<TExtArgumentType::type>
result;
711 std::back_inserter(result),
719 case TOutputBufferSizeType::kConstant:
721 case TOutputBufferSizeType::kUserSpecifiedConstantParameter:
723 case TOutputBufferSizeType::kUserSpecifiedRowMultiplier:
725 case TOutputBufferSizeType::kTableFunctionSpecifiedParameter:
727 case TOutputBufferSizeType::kPreFlightParameter:
738 return TOutputBufferSizeType::kConstant;
740 return TOutputBufferSizeType::kUserSpecifiedConstantParameter;
742 return TOutputBufferSizeType::kUserSpecifiedRowMultiplier;
744 return TOutputBufferSizeType::kTableFunctionSpecifiedParameter;
746 return TOutputBufferSizeType::kPreFlightParameter;
753 TUserDefinedFunction tfunc;
754 tfunc.name = udf.
getName(
true);
762 TUserDefinedTableFunction tfunc;
773 inline std::vector<TUserDefinedTableFunction>
to_thrift(
774 const std::vector<table_functions::TableFunction>& v) {
775 std::vector<TUserDefinedTableFunction>
result;
778 std::back_inserter(result),
787 #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
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)
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
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)
#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 &)
TResultSetLayout::type layout_to_thrift(const QueryDescriptionType layout)
static ExpressionRange makeInvalidRange()
#define THRIFT_LAYOUT_CASE(layout)
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)