52 if (!(uoper->
get_optype() ==
kCAST && uoper_ti.is_dict_encoded_string())) {
55 const bool outputs_target_sdp = uoper_ti.get_comp_param() ==
sdp_->
getDictId();
61 if (uoper_ti.is_dict_intersection()) {
71 if (!parent_feeds_sdp_already_set) {
75 if (operand_ti.is_dict_encoded_string() &&
76 uoper_ti.get_comp_param() != operand_ti.get_comp_param()) {
78 operand_ti.get_comp_param(),
79 uoper_ti.get_comp_param(),
90 const auto str_operand = string_oper->
getArg(0);
92 const auto& str_operand_ti = str_operand->get_type_info();
93 const auto string_oper_kind = string_oper->
get_kind();
94 if (!string_oper_ti.is_string() || !str_operand_ti.is_string()) {
98 const bool outputs_target_sdp = string_oper_ti.get_comp_param() ==
sdp_->
getDictId();
99 if (string_oper_ti.is_dict_encoded_string() &&
100 str_operand_ti.is_dict_encoded_string() &&
104 if (!parent_feeds_sdp_already_set) {
111 std::vector<StringOps_Namespace::StringOpInfo> string_op_infos;
113 for (
const auto& chained_string_op_expr : chained_string_op_exprs) {
114 auto chained_string_op =
116 CHECK(chained_string_op);
118 chained_string_op->get_kind(), chained_string_op->getLiteralArgs());
119 string_op_infos.emplace_back(string_op_info);
123 str_operand_ti.get_comp_param(),
124 string_oper_ti.get_comp_param(),
138 const auto str_result_and_null_status =
140 if (!str_result_and_null_status.second &&
141 !str_result_and_null_status.first
172 if (expr_ti.is_string() && expr_ti.get_compression() ==
kENCODING_DICT) {
180 if (expr_ti.is_string() && expr_ti.get_compression() ==
kENCODING_DICT) {
StringDictionaryProxy * sdp_
const std::shared_ptr< RowSetMemoryOwner > getRowSetMemoryOwner() const
void * visitStringOper(const Analyzer::StringOper *string_oper) const override
void * visitUOper(const Analyzer::UOper *uoper) const override
int visitCaseExpr(const Analyzer::CaseExpr *case_expr) const override
int defaultResult() const override
int visitUOper(const Analyzer::UOper *uoper) const override
void * visitConstant(const Analyzer::Constant *constant) const override
void * visit(const Analyzer::Expr *expr) const
size_t getLiteralsArity() const
const StringDictionaryProxy::IdMap * getStringProxyTranslationMap(const int source_dict_id, const int dest_dict_id, const RowSetMemoryOwner::StringTranslationType translation_type, const std::vector< StringOps_Namespace::StringOpInfo > &string_op_infos, std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const bool with_generation) const
LiteralArgMap getLiteralArgs() const
TransientStringLiteralsVisitor(StringDictionaryProxy *sdp, Executor *executor)
std::pair< std::string, bool > apply_string_op_to_literals(const StringOpInfo &string_op_info)
const SQLTypeInfo & get_type_info() const
Expression class for string functions The "arg" constructor parameter must be an expression that reso...
SqlStringOpKind get_kind() const
const Expr * get_operand() const
Datum get_constval() const
int visitStringOper(const Analyzer::StringOper *string_oper) const override
HOST DEVICE int get_comp_param() const
int32_t getDictId() const noexcept
int32_t getOrAddTransient(const std::string &str)
void * defaultResult() const override
std::vector< std::shared_ptr< Analyzer::Expr > > getChainedStringOpExprs() const
const Expr * getArg(const size_t i) const
SQLOps get_optype() const