This repository was archived by the owner on Sep 27, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 618
/
Copy pathbind_node_visitor.h
94 lines (78 loc) · 2.91 KB
/
bind_node_visitor.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//===----------------------------------------------------------------------===//
//
// Peloton
//
// bind_node_visitor.h
//
// Identification: src/include/binder/binder_node_visitor.h
//
// Copyright (c) 2015-16, Carnegie Mellon University Database Group
//
//===----------------------------------------------------------------------===//
#pragma once
#include "binder/binder_context.h"
#include "common/sql_node_visitor.h"
#include "parser/statements.h"
#include "common/internal_types.h"
namespace peloton {
namespace expression {
class CaseExpression;
class ConstantExpression;
class TupleValueExpression;
class SubqueryExpression;
class StarExpression;
class OperatorExpression;
class AggregateExpression;
} // namespace expression
namespace parser {
class SQLStatement;
} // namespace parser
namespace catalog {
class Catalog;
}
namespace binder {
/**
* @brief Interface to be notified of the composition of a bind node.
*/
class BindNodeVisitor : public SqlNodeVisitor {
public:
BindNodeVisitor(concurrency::TransactionContext *txn,
std::string default_database_name);
void BindNameToNode(parser::SQLStatement *tree);
void Visit(parser::SelectStatement *) override;
// Some sub query nodes inside SelectStatement
void Visit(parser::JoinDefinition *) override;
void Visit(parser::TableRef *) override;
void Visit(parser::GroupByDescription *) override;
void Visit(parser::OrderDescription *) override;
void Visit(parser::LimitDescription *) override;
void Visit(parser::CreateStatement *) override;
void Visit(parser::CreateFunctionStatement *) override;
void Visit(parser::InsertStatement *) override;
void Visit(parser::DeleteStatement *) override;
void Visit(parser::DropStatement *) override;
void Visit(parser::PrepareStatement *) override;
void Visit(parser::ExecuteStatement *) override;
void Visit(parser::TransactionStatement *) override;
void Visit(parser::UpdateStatement *) override;
void Visit(parser::CopyStatement *) override;
void Visit(parser::AnalyzeStatement *) override;
void Visit(parser::ExplainStatement *) override;
void Visit(expression::CaseExpression *expr) override;
void Visit(expression::SubqueryExpression *expr) override;
// void Visit(const expression::ConstantValueExpression *expr) override;
void Visit(expression::TupleValueExpression *expr) override;
void Visit(expression::StarExpression *expr) override;
void Visit(expression::FunctionExpression *expr) override;
// Deduce value type for these expressions
void Visit(expression::OperatorExpression *expr) override;
void Visit(expression::AggregateExpression *expr) override;
void SetTxn(concurrency::TransactionContext *txn) { this->txn_ = txn; }
private:
std::shared_ptr<BinderContext> context_;
concurrency::TransactionContext *txn_;
std::string default_database_name_;
catalog::Catalog *catalog_;
};
} // namespace binder
} // namespace peloton