MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
parse_defs.h
1/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11//
12// Created by Meiyi
13//
14
15#pragma once
16
17#include <stddef.h>
18#include <memory>
19#include <vector>
20#include <string>
21
22#include "sql/parser/value.h"
23
24class Expression;
25
38{
39 std::string relation_name;
40 std::string attribute_name;
41};
42
47enum CompOp
48{
55 NO_OP
56};
57
67{
77};
78
91{
92 std::vector<RelAttrSqlNode> attributes;
93 std::vector<std::string> relations;
94 std::vector<ConditionSqlNode> conditions;
95};
96
102{
103 std::vector<Expression *> expressions;
104
105 ~CalcSqlNode();
106};
107
114{
115 std::string relation_name;
116 std::vector<Value> values;
117};
118
124{
125 std::string relation_name;
126 std::vector<ConditionSqlNode> conditions;
127};
128
134{
135 std::string relation_name;
136 std::string attribute_name;
138 std::vector<ConditionSqlNode> conditions;
139};
140
149{
150 AttrType type;
151 std::string name;
152 size_t length;
153};
154
161{
162 std::string relation_name;
163 std::vector<AttrInfoSqlNode> attr_infos;
164};
165
171{
172 std::string relation_name;
173};
174
182{
183 std::string index_name;
184 std::string relation_name;
185 std::string attribute_name;
186};
187
193{
194 std::string index_name;
195 std::string relation_name;
196};
197
204{
205 std::string relation_name;
206};
207
214{
215 std::string relation_name;
216 std::string file_name;
217};
218
225{
226 std::string name;
227 Value value;
228};
229
230class ParsedSqlNode;
231
240{
241 std::unique_ptr<ParsedSqlNode> sql_node;
242};
243
250{
251 std::string error_msg;
252 int line;
253 int column;
254};
255
261{
262 SCF_ERROR = 0,
263 SCF_CALC,
264 SCF_SELECT,
265 SCF_INSERT,
266 SCF_UPDATE,
267 SCF_DELETE,
268 SCF_CREATE_TABLE,
269 SCF_DROP_TABLE,
270 SCF_CREATE_INDEX,
271 SCF_DROP_INDEX,
272 SCF_SYNC,
273 SCF_SHOW_TABLES,
274 SCF_DESC_TABLE,
276 SCF_COMMIT,
277 SCF_CLOG_SYNC,
278 SCF_ROLLBACK,
279 SCF_LOAD_DATA,
280 SCF_HELP,
281 SCF_EXIT,
282 SCF_EXPLAIN,
284};
290{
291public:
292 enum SqlCommandFlag flag;
293 ErrorSqlNode error;
294 CalcSqlNode calc;
295 SelectSqlNode selection;
296 InsertSqlNode insertion;
297 DeleteSqlNode deletion;
298 UpdateSqlNode update;
299 CreateTableSqlNode create_table;
300 DropTableSqlNode drop_table;
301 CreateIndexSqlNode create_index;
302 DropIndexSqlNode drop_index;
303 DescTableSqlNode desc_table;
304 LoadDataSqlNode load_data;
305 ExplainSqlNode explain;
306 SetVariableSqlNode set_variable;
307
308public:
310 explicit ParsedSqlNode(SqlCommandFlag flag);
311};
312
318{
319public:
320 void add_sql_node(std::unique_ptr<ParsedSqlNode> sql_node);
321 std::vector<std::unique_ptr<ParsedSqlNode>> &sql_nodes()
322 {
323 return sql_nodes_;
324 }
325
326private:
327 std::vector<std::unique_ptr<ParsedSqlNode>> sql_nodes_;
328};
表达式的抽象描述
Definition: expression.h:60
表示一个SQL语句
Definition: parse_defs.h:290
表示语法解析后的数据
Definition: parse_defs.h:318
std::vector< std::unique_ptr< ParsedSqlNode > > sql_nodes_
这里记录SQL命令。虽然看起来支持多个,但是当前仅处理一个
Definition: parse_defs.h:327
属性的值
Definition: value.h:40
SqlCommandFlag
表示一个SQL语句的类型
Definition: parse_defs.h:261
CompOp
描述比较运算符
Definition: parse_defs.h:48
@ SCF_SET_VARIABLE
设置变量
Definition: parse_defs.h:283
@ SCF_BEGIN
事务开始语句,可以在这里扩展只读事务
Definition: parse_defs.h:275
@ GREAT_EQUAL
">="
Definition: parse_defs.h:53
@ LESS_THAN
"<"
Definition: parse_defs.h:52
@ EQUAL_TO
"="
Definition: parse_defs.h:49
@ LESS_EQUAL
"<="
Definition: parse_defs.h:50
@ GREAT_THAN
">"
Definition: parse_defs.h:54
@ NOT_EQUAL
"<>"
Definition: parse_defs.h:51
描述一个属性
Definition: parse_defs.h:149
std::string name
Attribute name
Definition: parse_defs.h:151
AttrType type
Type of attribute
Definition: parse_defs.h:150
size_t length
Length of attribute
Definition: parse_defs.h:152
算术表达式计算的语法树
Definition: parse_defs.h:102
std::vector< Expression * > expressions
calc clause
Definition: parse_defs.h:103
表示一个条件比较
Definition: parse_defs.h:67
RelAttrSqlNode right_attr
right-hand side attribute if right_is_attr = TRUE 右边的属性
Definition: parse_defs.h:75
int right_is_attr
TRUE if right-hand side is an attribute 1时,操作符右边是属性名,0时,是属性值
Definition: parse_defs.h:73
CompOp comp
comparison operator
Definition: parse_defs.h:72
Value right_value
right-hand side value if right_is_attr = FALSE
Definition: parse_defs.h:76
int left_is_attr
TRUE if left-hand side is an attribute 1时,操作符左边是属性名,0时,是属性值
Definition: parse_defs.h:68
RelAttrSqlNode left_attr
left-hand side attribute
Definition: parse_defs.h:71
Value left_value
left-hand side value if left_is_attr = FALSE
Definition: parse_defs.h:70
描述一个create index语句
Definition: parse_defs.h:182
std::string index_name
Index name
Definition: parse_defs.h:183
std::string relation_name
Relation name
Definition: parse_defs.h:184
std::string attribute_name
Attribute name
Definition: parse_defs.h:185
描述一个create table语句
Definition: parse_defs.h:161
std::string relation_name
Relation name
Definition: parse_defs.h:162
std::vector< AttrInfoSqlNode > attr_infos
attributes
Definition: parse_defs.h:163
描述一个delete语句
Definition: parse_defs.h:124
std::string relation_name
Relation to delete from
Definition: parse_defs.h:125
描述一个desc table语句
Definition: parse_defs.h:204
描述一个drop index语句
Definition: parse_defs.h:193
std::string relation_name
Relation name
Definition: parse_defs.h:195
std::string index_name
Index name
Definition: parse_defs.h:194
描述一个drop table语句
Definition: parse_defs.h:171
std::string relation_name
要删除的表名
Definition: parse_defs.h:172
解析SQL语句出现了错误
Definition: parse_defs.h:250
描述一个explain语句
Definition: parse_defs.h:240
描述一个insert语句
Definition: parse_defs.h:114
std::string relation_name
Relation to insert into
Definition: parse_defs.h:115
std::vector< Value > values
要插入的值
Definition: parse_defs.h:116
描述一个load data语句
Definition: parse_defs.h:214
描述一个属性
Definition: parse_defs.h:38
std::string attribute_name
attribute name 属性名
Definition: parse_defs.h:40
std::string relation_name
relation name (may be NULL) 表名
Definition: parse_defs.h:39
描述一个select语句
Definition: parse_defs.h:91
std::vector< ConditionSqlNode > conditions
查询条件,使用AND串联起来多个条件
Definition: parse_defs.h:94
std::vector< std::string > relations
查询的表
Definition: parse_defs.h:93
std::vector< RelAttrSqlNode > attributes
attributes in select clause
Definition: parse_defs.h:92
设置变量的值
Definition: parse_defs.h:225
描述一个update语句
Definition: parse_defs.h:134
std::string relation_name
Relation to update
Definition: parse_defs.h:135
std::string attribute_name
更新的字段,仅支持一个字段
Definition: parse_defs.h:136
Value value
更新的值,仅支持一个字段
Definition: parse_defs.h:137