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;
92 CHECK(
false) <<
static_cast<int>(agg);
97 #undef THRIFT_AGGKIND_CASE
99 #define UNTHRIFT_AGGKIND_CASE(kind) \
100 case TAggKind::kind: \
114 CHECK(
false) <<
static_cast<int>(agg);
119 #undef UNTHRIFT_AGGKIND_CASE
122 const std::vector<TColumnRange>& thrift_column_ranges) {
124 for (
const auto& thrift_column_range : thrift_column_ranges) {
126 switch (thrift_column_range.type) {
127 case TExpressionRangeType::INTEGER:
131 thrift_column_range.int_max,
132 thrift_column_range.bucket,
133 thrift_column_range.has_nulls));
135 case TExpressionRangeType::FLOAT:
139 thrift_column_range.fp_max,
140 thrift_column_range.has_nulls));
142 case TExpressionRangeType::DOUBLE:
146 thrift_column_range.fp_max,
147 thrift_column_range.has_nulls));
156 return column_ranges;
160 const std::vector<TDictionaryGeneration>& thrift_string_dictionary_generations) {
162 for (
const auto& thrift_string_dictionary_generation :
163 thrift_string_dictionary_generations) {
165 thrift_string_dictionary_generation.dict_id,
166 thrift_string_dictionary_generation.entry_count);
168 return string_dictionary_generations;
181 thrift_ti.precision =
190 return target_info.
is_agg &&
195 const TRowDescriptor& row_desc) {
196 std::vector<TargetMetaInfo> target_meta_infos;
197 for (
const auto& col : row_desc) {
200 return target_meta_infos;
205 const int output_srid) {
206 col_type.col_type.precision =
static_cast<int>(subtype);
207 col_type.col_type.scale = output_srid;
212 TColumnType proj_info;
214 if (proj_info.col_name.empty()) {
220 proj_info.col_type.nullable = !target_ti.get_notnull();
221 proj_info.col_type.is_array = target_ti.get_type() ==
kARRAY;
222 if (
IS_GEO(target_ti.get_type())) {
224 proj_info, target_ti.get_subtype(), target_ti.get_output_srid());
226 proj_info.col_type.precision = target_ti.get_precision();
227 proj_info.col_type.scale = target_ti.get_scale();
229 if (target_ti.get_type() ==
kDATE) {
230 proj_info.col_type.size = target_ti.get_size();
232 proj_info.col_type.comp_param =
233 (target_ti.is_date_in_days() && target_ti.get_comp_param() == 0)
235 : target_ti.get_comp_param();
240 const std::vector<TargetMetaInfo>& targets) {
241 TRowDescriptor row_desc;
243 for (
const auto& target : targets) {
251 TTargetInfo thrift_target_info;
252 thrift_target_info.is_agg = target_info.
is_agg;
255 thrift_target_info.arg_type =
takes_arg(target_info)
257 : thrift_target_info.type;
259 thrift_target_info.is_distinct = target_info.
is_distinct;
260 return thrift_target_info;
265 target_info.
is_agg = thrift_target_info.is_agg;
268 target_info.
is_distinct = thrift_target_info.is_distinct;
277 const std::vector<TargetInfo>& targets) {
278 std::vector<TTargetInfo> thrift_targets;
279 for (
const auto& target_info : targets) {
282 return thrift_targets;
286 const std::vector<TTargetInfo>& thrift_targets) {
287 std::vector<TargetInfo> targets;
288 for (
const auto& thrift_target_info : thrift_targets) {
294 #define THRIFT_COUNTDESCRIPTORIMPL_CASE(kind) \
295 case CountDistinctImplType::kind: \
296 return TCountDistinctImplType::kind;
310 #undef THRIFT_COUNTDESCRIPTORIMPL_CASE
314 TCountDistinctDescriptor thrift_count_distinct_descriptor;
315 thrift_count_distinct_descriptor.impl_type =
317 thrift_count_distinct_descriptor.min_val = count_distinct_descriptor.
min_val;
318 thrift_count_distinct_descriptor.bitmap_sz_bits =
320 thrift_count_distinct_descriptor.approximate = count_distinct_descriptor.
approximate;
321 thrift_count_distinct_descriptor.device_type =
324 thrift_count_distinct_descriptor.sub_bitmap_count =
326 return thrift_count_distinct_descriptor;
329 #define UNTHRIFT_COUNTDESCRIPTORIMPL_CASE(kind) \
330 case TCountDistinctImplType::kind: \
331 return CountDistinctImplType::kind;
345 #undef UNTHRIFT_COUNTDESCRIPTORIMPL_CASE
348 const TCountDistinctDescriptor& thrift_count_distinct_descriptor) {
352 count_distinct_descriptor.
min_val = thrift_count_distinct_descriptor.min_val;
354 thrift_count_distinct_descriptor.bitmap_sz_bits;
355 count_distinct_descriptor.
approximate = thrift_count_distinct_descriptor.approximate;
357 thrift_count_distinct_descriptor.device_type == TDeviceType::GPU
361 thrift_count_distinct_descriptor.sub_bitmap_count;
362 return count_distinct_descriptor;
367 case TExtArgumentType::Int8:
369 case TExtArgumentType::Int16:
371 case TExtArgumentType::Int32:
373 case TExtArgumentType::Int64:
375 case TExtArgumentType::Float:
379 case TExtArgumentType::Void:
381 case TExtArgumentType::PInt8:
383 case TExtArgumentType::PInt16:
385 case TExtArgumentType::PInt32:
387 case TExtArgumentType::PInt64:
389 case TExtArgumentType::PFloat:
391 case TExtArgumentType::PDouble:
393 case TExtArgumentType::PBool:
395 case TExtArgumentType::Bool:
397 case TExtArgumentType::ArrayInt8:
399 case TExtArgumentType::ArrayInt16:
401 case TExtArgumentType::ArrayInt32:
403 case TExtArgumentType::ArrayInt64:
405 case TExtArgumentType::ArrayFloat:
407 case TExtArgumentType::ArrayDouble:
409 case TExtArgumentType::ArrayBool:
411 case TExtArgumentType::ArrayTextEncodingNone:
413 case TExtArgumentType::ArrayTextEncodingDict:
415 case TExtArgumentType::GeoPoint:
417 case TExtArgumentType::GeoMultiPoint:
419 case TExtArgumentType::GeoLineString:
421 case TExtArgumentType::GeoMultiLineString:
423 case TExtArgumentType::Cursor:
425 case TExtArgumentType::GeoPolygon:
427 case TExtArgumentType::GeoMultiPolygon:
429 case TExtArgumentType::ColumnInt8:
431 case TExtArgumentType::ColumnInt16:
433 case TExtArgumentType::ColumnInt32:
435 case TExtArgumentType::ColumnInt64:
437 case TExtArgumentType::ColumnFloat:
439 case TExtArgumentType::ColumnDouble:
441 case TExtArgumentType::ColumnBool:
443 case TExtArgumentType::ColumnTextEncodingNone:
445 case TExtArgumentType::ColumnTextEncodingDict:
447 case TExtArgumentType::ColumnTimestamp:
449 case TExtArgumentType::TextEncodingNone:
451 case TExtArgumentType::TextEncodingDict:
453 case TExtArgumentType::Timestamp:
455 case TExtArgumentType::ColumnListInt8:
457 case TExtArgumentType::ColumnListInt16:
459 case TExtArgumentType::ColumnListInt32:
461 case TExtArgumentType::ColumnListInt64:
463 case TExtArgumentType::ColumnListFloat:
465 case TExtArgumentType::ColumnListDouble:
467 case TExtArgumentType::ColumnListBool:
469 case TExtArgumentType::ColumnListTextEncodingNone:
471 case TExtArgumentType::ColumnListTextEncodingDict:
473 case TExtArgumentType::ColumnArrayInt8:
475 case TExtArgumentType::ColumnArrayInt16:
477 case TExtArgumentType::ColumnArrayInt32:
479 case TExtArgumentType::ColumnArrayInt64:
481 case TExtArgumentType::ColumnArrayFloat:
483 case TExtArgumentType::ColumnArrayDouble:
485 case TExtArgumentType::ColumnArrayBool:
487 case TExtArgumentType::ColumnArrayTextEncodingNone:
489 case TExtArgumentType::ColumnArrayTextEncodingDict:
491 case TExtArgumentType::ColumnListArrayInt8:
493 case TExtArgumentType::ColumnListArrayInt16:
495 case TExtArgumentType::ColumnListArrayInt32:
497 case TExtArgumentType::ColumnListArrayInt64:
499 case TExtArgumentType::ColumnListArrayFloat:
501 case TExtArgumentType::ColumnListArrayDouble:
503 case TExtArgumentType::ColumnListArrayBool:
505 case TExtArgumentType::ColumnListArrayTextEncodingNone:
507 case TExtArgumentType::ColumnListArrayTextEncodingDict:
517 return TExtArgumentType::Int8;
519 return TExtArgumentType::Int16;
521 return TExtArgumentType::Int32;
523 return TExtArgumentType::Int64;
525 return TExtArgumentType::Float;
529 return TExtArgumentType::Void;
531 return TExtArgumentType::PInt8;
533 return TExtArgumentType::PInt16;
535 return TExtArgumentType::PInt32;
537 return TExtArgumentType::PInt64;
539 return TExtArgumentType::PFloat;
541 return TExtArgumentType::PDouble;
543 return TExtArgumentType::PBool;
545 return TExtArgumentType::Bool;
547 return TExtArgumentType::ArrayInt8;
549 return TExtArgumentType::ArrayInt16;
551 return TExtArgumentType::ArrayInt32;
553 return TExtArgumentType::ArrayInt64;
555 return TExtArgumentType::ArrayFloat;
557 return TExtArgumentType::ArrayDouble;
559 return TExtArgumentType::ArrayBool;
561 return TExtArgumentType::ArrayTextEncodingNone;
563 return TExtArgumentType::ArrayTextEncodingDict;
565 return TExtArgumentType::GeoPoint;
567 return TExtArgumentType::GeoMultiPoint;
569 return TExtArgumentType::GeoLineString;
571 return TExtArgumentType::GeoMultiLineString;
573 return TExtArgumentType::Cursor;
575 return TExtArgumentType::GeoPolygon;
577 return TExtArgumentType::GeoMultiPolygon;
579 return TExtArgumentType::ColumnInt8;
581 return TExtArgumentType::ColumnInt16;
583 return TExtArgumentType::ColumnInt32;
585 return TExtArgumentType::ColumnInt64;
587 return TExtArgumentType::ColumnFloat;
589 return TExtArgumentType::ColumnDouble;
591 return TExtArgumentType::ColumnBool;
593 return TExtArgumentType::ColumnTextEncodingNone;
595 return TExtArgumentType::ColumnTextEncodingDict;
597 return TExtArgumentType::ColumnTimestamp;
599 return TExtArgumentType::TextEncodingNone;
601 return TExtArgumentType::TextEncodingDict;
603 return TExtArgumentType::Timestamp;
605 return TExtArgumentType::ColumnListInt8;
607 return TExtArgumentType::ColumnListInt16;
609 return TExtArgumentType::ColumnListInt32;
611 return TExtArgumentType::ColumnListInt64;
613 return TExtArgumentType::ColumnListFloat;
615 return TExtArgumentType::ColumnListDouble;
617 return TExtArgumentType::ColumnListBool;
619 return TExtArgumentType::ColumnListTextEncodingNone;
621 return TExtArgumentType::ColumnListTextEncodingDict;
623 return TExtArgumentType::ColumnArrayInt8;
625 return TExtArgumentType::ColumnArrayInt16;
627 return TExtArgumentType::ColumnArrayInt32;
629 return TExtArgumentType::ColumnArrayInt64;
631 return TExtArgumentType::ColumnArrayFloat;
633 return TExtArgumentType::ColumnArrayDouble;
635 return TExtArgumentType::ColumnArrayBool;
637 return TExtArgumentType::ColumnArrayTextEncodingNone;
639 return TExtArgumentType::ColumnArrayTextEncodingDict;
641 return TExtArgumentType::ColumnListArrayInt8;
643 return TExtArgumentType::ColumnListArrayInt16;
645 return TExtArgumentType::ColumnListArrayInt32;
647 return TExtArgumentType::ColumnListArrayInt64;
649 return TExtArgumentType::ColumnListArrayFloat;
651 return TExtArgumentType::ColumnListArrayDouble;
653 return TExtArgumentType::ColumnListArrayBool;
655 return TExtArgumentType::ColumnListArrayTextEncodingDict;
657 return TExtArgumentType::ColumnListArrayTextEncodingNone;
664 const std::vector<TExtArgumentType::type>& v) {
665 std::vector<ExtArgumentType>
result;
669 std::back_inserter(result),
675 const std::vector<ExtArgumentType>& v) {
676 std::vector<TExtArgumentType::type>
result;
680 std::back_inserter(result),
688 case TOutputBufferSizeType::kConstant:
690 case TOutputBufferSizeType::kUserSpecifiedConstantParameter:
692 case TOutputBufferSizeType::kUserSpecifiedRowMultiplier:
694 case TOutputBufferSizeType::kTableFunctionSpecifiedParameter:
696 case TOutputBufferSizeType::kPreFlightParameter:
707 return TOutputBufferSizeType::kConstant;
709 return TOutputBufferSizeType::kUserSpecifiedConstantParameter;
711 return TOutputBufferSizeType::kUserSpecifiedRowMultiplier;
713 return TOutputBufferSizeType::kTableFunctionSpecifiedParameter;
715 return TOutputBufferSizeType::kPreFlightParameter;
722 TUserDefinedFunction tfunc;
723 tfunc.name = udf.
getName(
true);
730 TUserDefinedTableFunction tfunc;
741 inline std::vector<TUserDefinedTableFunction>
to_thrift(
742 const std::vector<table_functions::TableFunction>& v) {
743 std::vector<TUserDefinedTableFunction>
result;
746 std::back_inserter(result),
755 #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)
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.
void setGeneration(const uint32_t id, const uint64_t generation)
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)
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
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)
TEncodingType::type encoding_to_thrift(const SQLTypeInfo &type_info)