OmniSciDB  d2f719934e
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
spatial_type::NRings Class Reference

#include <NRings.h>

+ Inheritance diagram for spatial_type::NRings:
+ Collaboration diagram for spatial_type::NRings:

Public Member Functions

 NRings (const Analyzer::GeoOperator *geo_operator, const Catalog_Namespace::Catalog *catalog)
 
size_t size () const final
 
SQLTypeInfo getNullType () const final
 
const Analyzer::ExprgetOperand (const size_t index) final
 
std::tuple< std::vector
< llvm::Value * >, llvm::Value * > 
codegenLoads (const std::vector< llvm::Value * > &arg_lvs, const std::vector< llvm::Value * > &pos_lvs, CgenState *cgen_state) final
 
std::vector< llvm::Value * > codegen (const std::vector< llvm::Value * > &args, CodeGenerator::NullCheckCodegen *nullcheck_codegen, CgenState *cgen_state, const CompilationOptions &co) final
 
- Public Member Functions inherited from spatial_type::Codegen
 Codegen (const Analyzer::GeoOperator *geo_operator, const Catalog_Namespace::Catalog *catalog)
 
auto isNullable () const
 
auto getTypeInfo () const
 
std::string getName () const
 
virtual std::unique_ptr
< CodeGenerator::NullCheckCodegen
getNullCheckCodegen (llvm::Value *null_lv, CgenState *cgen_state, Executor *executor)
 
virtual ~Codegen ()
 

Protected Attributes

std::unique_ptr
< Analyzer::ColumnVar
operand_owned_
 
- Protected Attributes inherited from spatial_type::Codegen
const Analyzer::GeoOperatoroperator_
 
const Catalog_Namespace::Catalogcat_
 
bool is_nullable_ {true}
 

Additional Inherited Members

- Static Public Member Functions inherited from spatial_type::Codegen
static std::unique_ptr< Codegeninit (const Analyzer::GeoOperator *geo_operator, const Catalog_Namespace::Catalog *catalog)
 

Detailed Description

Definition at line 23 of file NRings.h.

Constructor & Destructor Documentation

spatial_type::NRings::NRings ( const Analyzer::GeoOperator geo_operator,
const Catalog_Namespace::Catalog catalog 
)
inline

Definition at line 25 of file NRings.h.

27  : Codegen(geo_operator, catalog) {}
Codegen(const Analyzer::GeoOperator *geo_operator, const Catalog_Namespace::Catalog *catalog)
Definition: Codegen.h:28

Member Function Documentation

std::vector<llvm::Value*> spatial_type::NRings::codegen ( const std::vector< llvm::Value * > &  args,
CodeGenerator::NullCheckCodegen nullcheck_codegen,
CgenState cgen_state,
const CompilationOptions co 
)
inlinefinalvirtual

Implements spatial_type::Codegen.

Definition at line 88 of file NRings.h.

References run_benchmark_import::args, CHECK, CHECK_EQ, spatial_type::Codegen::getTypeInfo(), and spatial_type::Codegen::isNullable().

91  {
92  CHECK_EQ(args.size(), size_t(1));
93  if (isNullable()) {
94  CHECK(nullcheck_codegen);
95  return {nullcheck_codegen->finalize(cgen_state->inlineIntNull(getTypeInfo()),
96  args.front())};
97  }
98  return {args.front()};
99  }
#define CHECK_EQ(x, y)
Definition: Logger.h:219
auto getTypeInfo() const
Definition: Codegen.h:37
llvm::ConstantInt * inlineIntNull(const SQLTypeInfo &)
Definition: CgenState.cpp:29
auto isNullable() const
Definition: Codegen.h:35
llvm::Value * finalize(llvm::Value *null_lv, llvm::Value *notnull_lv)
Definition: IRCodegen.cpp:1447
#define CHECK(condition)
Definition: Logger.h:211

+ Here is the call graph for this function:

std::tuple<std::vector<llvm::Value*>, llvm::Value*> spatial_type::NRings::codegenLoads ( const std::vector< llvm::Value * > &  arg_lvs,
const std::vector< llvm::Value * > &  pos_lvs,
CgenState cgen_state 
)
inlinefinalvirtual

Implements spatial_type::Codegen.

Definition at line 61 of file NRings.h.

References CHECK_EQ, SQLTypeInfo::get_elem_type(), get_int_type(), Analyzer::Expr::get_type_info(), getOperand(), spatial_type::Codegen::getTypeInfo(), spatial_type::Codegen::isNullable(), log2_bytes(), and size().

64  {
65  CHECK_EQ(pos_lvs.size(), size());
66  CHECK_EQ(arg_lvs.size(), size_t(1));
67  auto& argument_lv = arg_lvs.front();
68  std::string fn_name("array_size");
69 
70  const auto& elem_ti = getOperand(0)->get_type_info().get_elem_type();
71  std::vector<llvm::Value*> array_size_args{
72  argument_lv,
73  pos_lvs.front(),
74  cgen_state->llInt(log2_bytes(elem_ti.get_logical_size()))};
75 
76  const bool is_nullable = isNullable();
77 
78  if (is_nullable) {
79  fn_name += "_nullable";
80  array_size_args.push_back(cgen_state->inlineIntNull(getTypeInfo()));
81  }
82  const auto total_num_rings_lv = cgen_state->emitExternalCall(
83  fn_name, get_int_type(32, cgen_state->context_), array_size_args);
84  return std::make_tuple(std::vector<llvm::Value*>{total_num_rings_lv},
85  total_num_rings_lv);
86  }
#define CHECK_EQ(x, y)
Definition: Logger.h:219
llvm::Value * emitExternalCall(const std::string &fname, llvm::Type *ret_type, const std::vector< llvm::Value * > args, const std::vector< llvm::Attribute::AttrKind > &fnattrs={}, const bool has_struct_return=false)
Definition: CgenState.h:228
llvm::Type * get_int_type(const int width, llvm::LLVMContext &context)
auto getTypeInfo() const
Definition: Codegen.h:37
llvm::LLVMContext & context_
Definition: CgenState.h:338
llvm::ConstantInt * inlineIntNull(const SQLTypeInfo &)
Definition: CgenState.cpp:29
size_t size() const final
Definition: NRings.h:29
auto isNullable() const
Definition: Codegen.h:35
const SQLTypeInfo & get_type_info() const
Definition: Analyzer.h:77
llvm::ConstantInt * llInt(const T v) const
Definition: CgenState.h:307
const Analyzer::Expr * getOperand(const size_t index) final
Definition: NRings.h:33
uint32_t log2_bytes(const uint32_t bytes)
Definition: Execute.h:176
SQLTypeInfo get_elem_type() const
Definition: sqltypes.h:861

+ Here is the call graph for this function:

SQLTypeInfo spatial_type::NRings::getNullType ( ) const
inlinefinalvirtual

Implements spatial_type::Codegen.

Definition at line 31 of file NRings.h.

References kINT.

31 { return SQLTypeInfo(kINT); }
Definition: sqltypes.h:45
const Analyzer::Expr* spatial_type::NRings::getOperand ( const size_t  index)
inlinefinalvirtual

Reimplemented from spatial_type::Codegen.

Definition at line 33 of file NRings.h.

References spatial_type::Codegen::cat_, CHECK, CHECK_EQ, get_column_descriptor(), Analyzer::GeoOperator::getOperand(), spatial_type::Codegen::is_nullable_, operand_owned_, and spatial_type::Codegen::operator_.

Referenced by codegenLoads().

33  {
34  CHECK_EQ(index, size_t(0));
35  if (operand_owned_) {
36  return operand_owned_.get();
37  }
38 
39  const auto operand = operator_->getOperand(0);
40  auto col_var = dynamic_cast<const Analyzer::ColumnVar*>(operand);
41  CHECK(col_var);
42 
43  const auto& geo_ti = col_var->get_type_info();
44  CHECK(geo_ti.is_geometry());
45  is_nullable_ = !geo_ti.get_notnull();
46 
47  // create a new operand which is just the ring sizes and codegen it
48  const auto ring_sizes_column_id = col_var->get_column_id() + 2; // + 2 for ring sizes
49  auto ring_sizes_cd =
50  get_column_descriptor(ring_sizes_column_id, col_var->get_table_id(), *cat_);
51  CHECK(ring_sizes_cd);
52 
53  operand_owned_ = std::make_unique<Analyzer::ColumnVar>(ring_sizes_cd->columnType,
54  col_var->get_table_id(),
55  ring_sizes_column_id,
56  col_var->get_rte_idx());
57  return operand_owned_.get();
58  }
#define CHECK_EQ(x, y)
Definition: Logger.h:219
const Catalog_Namespace::Catalog * cat_
Definition: Codegen.h:71
const Analyzer::GeoOperator * operator_
Definition: Codegen.h:70
#define CHECK(condition)
Definition: Logger.h:211
Analyzer::Expr * getOperand(const size_t index) const
Definition: Analyzer.cpp:3648
const ColumnDescriptor * get_column_descriptor(const int col_id, const int table_id, const Catalog_Namespace::Catalog &cat)
Definition: Execute.h:191
std::unique_ptr< Analyzer::ColumnVar > operand_owned_
Definition: NRings.h:102

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

size_t spatial_type::NRings::size ( ) const
inlinefinalvirtual

Implements spatial_type::Codegen.

Definition at line 29 of file NRings.h.

Referenced by codegenLoads().

29 { return 1; }

+ Here is the caller graph for this function:

Member Data Documentation

std::unique_ptr<Analyzer::ColumnVar> spatial_type::NRings::operand_owned_
protected

Definition at line 102 of file NRings.h.

Referenced by getOperand().


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