OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Analyzer::ConcatStringOper Class Reference

#include <Analyzer.h>

+ Inheritance diagram for Analyzer::ConcatStringOper:
+ Collaboration diagram for Analyzer::ConcatStringOper:

Public Member Functions

 ConcatStringOper (const std::shared_ptr< Analyzer::Expr > &left_operand, const std::shared_ptr< Analyzer::Expr > &right_operand)
 
 ConcatStringOper::normalize_operands ({left_operand, right_operand})
 
 getMinArgs ()
 
 getExpectedTypeFamilies ()
 
 getArgNames ())
 
 ConcatStringOper (const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
 
 ConcatStringOper (const std::shared_ptr< Analyzer::StringOper > &string_oper)
 
std::shared_ptr< Analyzer::Exprdeep_copy () const override
 
size_t getMinArgs () const override
 
std::vector< OperandTypeFamilygetExpectedTypeFamilies () const override
 
std::vector< std::string > getArgNames () const override
 
- Public Member Functions inherited from Analyzer::StringOper
 StringOper (const SqlStringOpKind kind, const std::vector< std::shared_ptr< Analyzer::Expr >> &args)
 
 StringOper (const SqlStringOpKind kind, const SQLTypeInfo &return_ti, const std::vector< std::shared_ptr< Analyzer::Expr >> &args)
 
 StringOper (const SqlStringOpKind kind, const std::vector< std::shared_ptr< Analyzer::Expr >> &args, const size_t min_args, const std::vector< OperandTypeFamily > &expected_type_families, const std::vector< std::string > &arg_names)
 
 StringOper (const SqlStringOpKind kind, const SQLTypeInfo &return_ti, const std::vector< std::shared_ptr< Analyzer::Expr >> &args, const size_t min_args, const std::vector< OperandTypeFamily > &expected_type_families, const std::vector< std::string > &arg_names)
 
 StringOper (const SqlStringOpKind kind, const SQLTypeInfo &return_ti, const std::vector< std::shared_ptr< Analyzer::Expr >> &args, const std::vector< std::shared_ptr< Analyzer::Expr >> &chained_string_op_exprs)
 
 StringOper (const StringOper &other_string_oper)
 
 StringOper (const std::shared_ptr< StringOper > &other_string_oper)
 
SqlStringOpKind get_kind () const
 
size_t getArity () const
 
size_t getLiteralsArity () const
 
size_t getNonLiteralsArity () const
 
const ExprgetArg (const size_t i) const
 
std::shared_ptr< Analyzer::ExprgetOwnArg (const size_t i) const
 
std::vector< std::shared_ptr
< Analyzer::Expr > > 
getOwnArgs () const
 
std::vector< std::shared_ptr
< Analyzer::Expr > > 
getChainedStringOpExprs () const
 
bool requiresPerRowTranslation () const
 
void collect_rte_idx (std::set< int > &rte_idx_set) const override
 
void collect_column_var (std::set< const ColumnVar *, bool(*)(const ColumnVar *, const ColumnVar *)> &colvar_set, bool include_agg) const override
 
bool hasNoneEncodedTextArg () const
 
bool hasSingleDictEncodedColInput () const
 returns whether we have one and only one column involved in this StringOper and all its descendents, and that that column is a dictionary-encoded text type More...
 
std::vector< size_t > getLiteralArgIndexes () const
 
LiteralArgMap getLiteralArgs () const
 
std::shared_ptr< Analyzer::Exprrewrite_with_targetlist (const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
 
std::shared_ptr< Analyzer::Exprrewrite_with_child_targetlist (const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
 
std::shared_ptr< Analyzer::Exprrewrite_agg_to_var (const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
 
void group_predicates (std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
 
bool operator== (const Expr &rhs) const override
 
std::string toString () const override
 
void find_expr (std::function< bool(const Expr *)> f, std::list< const Expr * > &expr_list) const override
 
- Public Member Functions inherited from Analyzer::Expr
 Expr (SQLTypes t, bool notnull)
 
 Expr (SQLTypes t, int d, bool notnull)
 
 Expr (SQLTypes t, int d, int s, bool notnull)
 
 Expr (const SQLTypeInfo &ti, bool has_agg=false)
 
virtual ~Expr ()
 
std::shared_ptr< Analyzer::Exprget_shared_ptr ()
 
const SQLTypeInfoget_type_info () const
 
void set_type_info (const SQLTypeInfo &ti)
 
bool get_contains_agg () const
 
void set_contains_agg (bool a)
 
virtual std::shared_ptr
< Analyzer::Expr
add_cast (const SQLTypeInfo &new_type_info)
 
virtual void check_group_by (const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const
 
virtual std::shared_ptr
< Analyzer::Expr
normalize_simple_predicate (int &rte_idx) const
 
virtual size_t get_num_column_vars (const bool include_agg) const
 
virtual void print () const
 
virtual void add_unique (std::list< const Expr * > &expr_list) const
 
std::shared_ptr< Analyzer::Exprdecompress ()
 
virtual void get_domain (DomainSet &domain_set) const
 

Static Private Member Functions

static SqlStringOpKind get_concat_ordered_kind (const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
 
static std::vector
< std::shared_ptr
< Analyzer::Expr > > 
normalize_operands (const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
 

Additional Inherited Members

- Public Types inherited from Analyzer::StringOper
enum  OperandTypeFamily { OperandTypeFamily::STRING_FAMILY, OperandTypeFamily::INT_FAMILY }
 
using LiteralArgMap = std::map< size_t, std::pair< SQLTypes, Datum >>
 
- Protected Attributes inherited from Analyzer::Expr
SQLTypeInfo type_info
 
bool contains_agg
 

Detailed Description

Definition at line 1847 of file Analyzer.h.

Constructor & Destructor Documentation

Analyzer::ConcatStringOper::ConcatStringOper ( const std::shared_ptr< Analyzer::Expr > &  left_operand,
const std::shared_ptr< Analyzer::Expr > &  right_operand 
)
inline

Definition at line 1849 of file Analyzer.h.

1851  : StringOper(
1852  ConcatStringOper::get_concat_ordered_kind({left_operand, right_operand}),
StringOper(const SqlStringOpKind kind, const std::vector< std::shared_ptr< Analyzer::Expr >> &args)
Definition: Analyzer.h:1485
static SqlStringOpKind get_concat_ordered_kind(const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
Definition: Analyzer.cpp:4219
Analyzer::ConcatStringOper::ConcatStringOper ( const std::vector< std::shared_ptr< Analyzer::Expr >> &  operands)
inline

Definition at line 1858 of file Analyzer.h.

1861  getMinArgs(),
1863  getArgNames()) {}
static std::vector< std::shared_ptr< Analyzer::Expr > > normalize_operands(const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
Definition: Analyzer.cpp:4237
StringOper(const SqlStringOpKind kind, const std::vector< std::shared_ptr< Analyzer::Expr >> &args)
Definition: Analyzer.h:1485
static SqlStringOpKind get_concat_ordered_kind(const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
Definition: Analyzer.cpp:4219
Analyzer::ConcatStringOper::ConcatStringOper ( const std::shared_ptr< Analyzer::StringOper > &  string_oper)
inline

Definition at line 1865 of file Analyzer.h.

1866  : StringOper(string_oper) {}
StringOper(const SqlStringOpKind kind, const std::vector< std::shared_ptr< Analyzer::Expr >> &args)
Definition: Analyzer.h:1485

Member Function Documentation

Analyzer::ConcatStringOper::ConcatStringOper::normalize_operands ( {left_operand, right_operand}  )
std::shared_ptr< Analyzer::Expr > Analyzer::ConcatStringOper::deep_copy ( ) const
overridevirtual

Reimplemented from Analyzer::StringOper.

Definition at line 3595 of file Analyzer.cpp.

References Analyzer::StringOper::deep_copy().

3595  {
3596  return makeExpr<Analyzer::ConcatStringOper>(
3597  std::dynamic_pointer_cast<Analyzer::StringOper>(StringOper::deep_copy()));
3598 }
std::shared_ptr< Analyzer::Expr > deep_copy() const override
Definition: Analyzer.cpp:3530
Expression class for string functions The &quot;arg&quot; constructor parameter must be an expression that reso...
Definition: Analyzer.h:1479

+ Here is the call graph for this function:

SqlStringOpKind Analyzer::ConcatStringOper::get_concat_ordered_kind ( const std::vector< std::shared_ptr< Analyzer::Expr >> &  operands)
staticprivate

Definition at line 4219 of file Analyzer.cpp.

References CONCAT, and RCONCAT.

Referenced by normalize_operands().

4220  {
4221  if (operands.size() != 2UL) {
4222  std::ostringstream oss;
4223  oss << "Concat operator expects two arguments, but was provided " << operands.size()
4224  << ".";
4225  throw std::runtime_error(oss.str());
4226  }
4227  const auto operand0_is_literal =
4228  dynamic_cast<const Analyzer::Constant*>(operands[0].get());
4229  const auto operand1_is_literal =
4230  dynamic_cast<const Analyzer::Constant*>(operands[1].get());
4231  if (operand0_is_literal && !operand1_is_literal) {
4232  return SqlStringOpKind::RCONCAT;
4233  }
4234  return SqlStringOpKind::CONCAT;
4235 }

+ Here is the caller graph for this function:

Analyzer::ConcatStringOper::getArgNames ( )
inline

Definition at line 1856 of file Analyzer.h.

1856 {}
std::vector<std::string> Analyzer::ConcatStringOper::getArgNames ( ) const
inlineoverridevirtual

Reimplemented from Analyzer::StringOper.

Definition at line 1875 of file Analyzer.h.

1875  {
1876  return {"left operand", "right operand"};
1877  }
Analyzer::ConcatStringOper::getExpectedTypeFamilies ( )
std::vector<OperandTypeFamily> Analyzer::ConcatStringOper::getExpectedTypeFamilies ( ) const
inlineoverridevirtual
Analyzer::ConcatStringOper::getMinArgs ( )
size_t Analyzer::ConcatStringOper::getMinArgs ( ) const
inlineoverridevirtual

Reimplemented from Analyzer::StringOper.

Definition at line 1870 of file Analyzer.h.

1870 { return 2UL; }
std::vector< std::shared_ptr< Analyzer::Expr > > Analyzer::ConcatStringOper::normalize_operands ( const std::vector< std::shared_ptr< Analyzer::Expr >> &  operands)
staticprivate

Definition at line 4237 of file Analyzer.cpp.

References CHECK_EQ, get_concat_ordered_kind(), and RCONCAT.

4238  {
4240  CHECK_EQ(operands.size(), 2UL); // Size should be 2 per get_concat_ordered_kind
4241  return {operands[1], operands[0]};
4242  }
4243  return operands;
4244 }
#define CHECK_EQ(x, y)
Definition: Logger.h:301
static SqlStringOpKind get_concat_ordered_kind(const std::vector< std::shared_ptr< Analyzer::Expr >> &operands)
Definition: Analyzer.cpp:4219

+ Here is the call graph for this function:


The documentation for this class was generated from the following files: