github-actions[bot] commented on code in PR #43255: URL: https://github.com/apache/doris/pull/43255#discussion_r1829192571
########## be/src/vec/exec/format/orc/vorc_reader.cpp: ########## @@ -558,190 +560,268 @@ std::tuple<bool, orc::Literal> convert_to_orc_literal(const orc::Type* type, con } } -template <PrimitiveType primitive_type> -std::vector<OrcPredicate> value_range_to_predicate( - const ColumnValueRange<primitive_type>& col_val_range, const orc::Type* type, - std::vector<orc::TypeKind>* unsupported_pushdown_types) { - std::vector<OrcPredicate> predicates; - - PrimitiveType src_type = OrcReader::convert_to_doris_type(type).type; - if (src_type != primitive_type) { - if (!(is_string_type(src_type) && is_string_type(primitive_type))) { - // not support schema change - return predicates; - } +std::tuple<bool, orc::Literal, orc::PredicateDataType> OrcReader::_make_orc_leteral( + const VSlotRef* slot_ref, const VLiteral* literal) { + const auto* value = literal->get_column_ptr()->get_data_at(0).data; + auto* slot = _tuple_descriptor->slots()[slot_ref->column_id()]; + auto slot_type = slot->type(); + const auto* orc_type = _type_map[_col_name_to_file_col_name[slot->col_name()]]; + const auto predicate_type = TYPEKIND_TO_PREDICATE_TYPE[orc_type->getKind()]; + switch (slot_type.type) { +#define M(NAME) \ + case TYPE_##NAME: { \ + auto [valid, orc_literal] = convert_to_orc_literal<TYPE_##NAME>( \ + orc_type, value, slot_type.precision, slot_type.scale); \ + return std::make_tuple(valid, orc_literal, predicate_type); \ + } +#define APPLY_FOR_PRIMITIVE_TYPE(M) \ + M(TINYINT) \ + M(SMALLINT) \ + M(INT) \ + M(BIGINT) \ + M(LARGEINT) \ + M(CHAR) \ + M(DATE) \ + M(DATETIME) \ + M(DATEV2) \ + M(DATETIMEV2) \ + M(VARCHAR) \ + M(STRING) \ + M(HLL) \ + M(DECIMAL32) \ + M(DECIMAL64) \ + M(DECIMAL128I) \ + M(DECIMAL256) \ + M(DECIMALV2) \ + M(BOOLEAN) \ + M(IPV4) \ + M(IPV6) + APPLY_FOR_PRIMITIVE_TYPE(M) +#undef M + default: { + VLOG_CRITICAL << "Unsupported Convert Orc Literal [ColName=" << slot->col_name() << "]"; + return std::make_tuple(false, orc::Literal(false), predicate_type); } - - if (unsupported_pushdown_types != nullptr) { - for (vector<orc::TypeKind>::iterator it = unsupported_pushdown_types->begin(); - it != unsupported_pushdown_types->end(); ++it) { - if (*it == type->getKind()) { - // Unsupported type - return predicates; - } - } } +} - orc::PredicateDataType predicate_data_type; - auto type_it = TYPEKIND_TO_PREDICATE_TYPE.find(type->getKind()); - if (type_it == TYPEKIND_TO_PREDICATE_TYPE.end()) { - // Unsupported type - return predicates; - } else { - predicate_data_type = type_it->second; +// convert expr to sargs recursively +bool OrcReader::_build_search_argument(const VExprSPtr& expr, Review Comment: warning: function '_build_search_argument' exceeds recommended size/complexity thresholds [readability-function-size] ```cpp bool OrcReader::_build_search_argument(const VExprSPtr& expr, ^ ``` <details> <summary>Additional context</summary> **be/src/vec/exec/format/orc/vorc_reader.cpp:608:** 193 lines including whitespace and comments (threshold 80) ```cpp bool OrcReader::_build_search_argument(const VExprSPtr& expr, ^ ``` </details> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org