OmniSciDB  d2f719934e
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Parser::InsertStmt Class Referenceabstract

#include <ParserNode.h>

+ Inheritance diagram for Parser::InsertStmt:
+ Collaboration diagram for Parser::InsertStmt:

Public Member Functions

 InsertStmt (std::string *t, std::list< std::string * > *c)
 
const std::string * get_table () const
 
const std::list
< std::unique_ptr< std::string > > & 
get_column_list () const
 
void analyze (const Catalog_Namespace::Catalog &catalog, Analyzer::Query &query) const override=0
 
- Public Member Functions inherited from Parser::Node
virtual ~Node ()
 

Protected Attributes

std::unique_ptr< std::string > table_
 
std::list< std::unique_ptr
< std::string > > 
column_list_
 

Detailed Description

Definition at line 2029 of file ParserNode.h.

Constructor & Destructor Documentation

Parser::InsertStmt::InsertStmt ( std::string *  t,
std::list< std::string * > *  c 
)
inline

Definition at line 2031 of file ParserNode.h.

References column_list_.

2031  : table_(t) {
2032  if (c) {
2033  for (const auto e : *c) {
2034  column_list_.emplace_back(e);
2035  }
2036  delete c;
2037  }
2038  }
std::unique_ptr< std::string > table_
Definition: ParserNode.h:2047
std::list< std::unique_ptr< std::string > > column_list_
Definition: ParserNode.h:2048
char * t

Member Function Documentation

void Parser::InsertStmt::analyze ( const Catalog_Namespace::Catalog catalog,
Analyzer::Query query 
) const
overridepure virtual

Implements Parser::DMLStmt.

Implemented in Parser::InsertValuesStmt.

Definition at line 1645 of file ParserNode.cpp.

References CHECK, ColumnDescriptor::columnId, ColumnDescriptor::columnType, Catalog_Namespace::Catalog::getAllColumnMetadataForTable(), Catalog_Namespace::Catalog::getMetadataForColumn(), Catalog_Namespace::Catalog::getMetadataForTable(), i, SQLTypeInfo::is_geometry(), TableDescriptor::isView, kINSERT, Analyzer::Query::set_result_col_list(), Analyzer::Query::set_result_table_id(), Analyzer::Query::set_stmt_type(), TableDescriptor::tableId, and foreign_storage::validate_non_foreign_table_write().

1646  {
1647  query.set_stmt_type(kINSERT);
1648  const TableDescriptor* td = catalog.getMetadataForTable(*table_);
1649  if (td == nullptr) {
1650  throw std::runtime_error("Table " + *table_ + " does not exist.");
1651  }
1652  if (td->isView) {
1653  throw std::runtime_error("Insert to views is not supported yet.");
1654  }
1656  query.set_result_table_id(td->tableId);
1657  std::list<int> result_col_list;
1658  if (column_list_.empty()) {
1659  const std::list<const ColumnDescriptor*> all_cols =
1660  catalog.getAllColumnMetadataForTable(td->tableId, false, false, true);
1661  for (auto cd : all_cols) {
1662  result_col_list.push_back(cd->columnId);
1663  }
1664  } else {
1665  for (auto& c : column_list_) {
1666  const ColumnDescriptor* cd = catalog.getMetadataForColumn(td->tableId, *c);
1667  if (cd == nullptr) {
1668  throw std::runtime_error("Column " + *c + " does not exist.");
1669  }
1670  result_col_list.push_back(cd->columnId);
1671  const auto& col_ti = cd->columnType;
1672  if (col_ti.get_physical_cols() > 0) {
1673  CHECK(cd->columnType.is_geometry());
1674  for (auto i = 1; i <= col_ti.get_physical_cols(); i++) {
1675  const ColumnDescriptor* pcd =
1676  catalog.getMetadataForColumn(td->tableId, cd->columnId + i);
1677  if (pcd == nullptr) {
1678  throw std::runtime_error("Column " + *c + "'s metadata is incomplete.");
1679  }
1680  result_col_list.push_back(pcd->columnId);
1681  }
1682  }
1683  }
1684  }
1685  query.set_result_col_list(result_col_list);
1686 }
void validate_non_foreign_table_write(const TableDescriptor *table_descriptor)
Definition: FsiUtils.h:22
void set_result_col_list(const std::list< int > &col_list)
Definition: Analyzer.h:1794
std::unique_ptr< std::string > table_
Definition: ParserNode.h:2047
const ColumnDescriptor * getMetadataForColumn(int tableId, const std::string &colName) const
specifies the content in-memory of a row in the column metadata table
void set_result_table_id(int id)
Definition: Analyzer.h:1795
std::list< const ColumnDescriptor * > getAllColumnMetadataForTable(const int tableId, const bool fetchSystemColumns, const bool fetchVirtualColumns, const bool fetchPhysicalColumns) const
Returns a list of pointers to constant ColumnDescriptor structs for all the columns from a particular...
Definition: Catalog.cpp:1811
std::list< std::unique_ptr< std::string > > column_list_
Definition: ParserNode.h:2048
void set_stmt_type(SQLStmtType t)
Definition: Analyzer.h:1803
#define CHECK(condition)
Definition: Logger.h:211
bool is_geometry() const
Definition: sqltypes.h:531
SQLTypeInfo columnType
const TableDescriptor * getMetadataForTable(const std::string &tableName, const bool populateFragmenter=true) const
Returns a pointer to a const TableDescriptor struct matching the provided tableName.

+ Here is the call graph for this function:

const std::list<std::unique_ptr<std::string> >& Parser::InsertStmt::get_column_list ( ) const
inline

Definition at line 2040 of file ParserNode.h.

References column_list_.

2040  {
2041  return column_list_;
2042  }
std::list< std::unique_ptr< std::string > > column_list_
Definition: ParserNode.h:2048
const std::string* Parser::InsertStmt::get_table ( ) const
inline

Definition at line 2039 of file ParserNode.h.

References table_.

2039 { return table_.get(); }
std::unique_ptr< std::string > table_
Definition: ParserNode.h:2047

Member Data Documentation

std::list<std::unique_ptr<std::string> > Parser::InsertStmt::column_list_
protected

Definition at line 2048 of file ParserNode.h.

Referenced by get_column_list(), and InsertStmt().

std::unique_ptr<std::string> Parser::InsertStmt::table_
protected

Definition at line 2047 of file ParserNode.h.

Referenced by get_table().


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