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 "common/lang/string.h"
18#include "common/lang/vector.h"
19#include "common/lang/memory.h"
20#include "common/value.h"
21#include "common/lang/utility.h"
22
23class Expression;
24
37{
40};
41
47{
54 NO_OP
55};
56
66{
76};
77
90{
91 vector<unique_ptr<Expression>> expressions;
92 vector<string> relations;
93 vector<ConditionSqlNode> conditions;
94 vector<unique_ptr<Expression>> group_by;
95};
96
102{
103 vector<unique_ptr<Expression>> expressions;
104};
105
112{
114 vector<Value> values;
115};
116
122{
124 vector<ConditionSqlNode> conditions;
125};
126
132{
136 vector<ConditionSqlNode> conditions;
137};
138
145{
146 AttrType type;
147 string name;
148 size_t length;
149};
150
157{
159 vector<AttrInfoSqlNode> attr_infos;
160 vector<string> primary_keys;
161 // TODO: integrate to CreateTableOptions
164};
165
171{
173};
174
180{
182};
183
191{
192 string index_name;
195};
196
202{
203 string index_name;
205};
206
213{
214 string relation_name;
215};
216
223{
224 string relation_name;
225 string file_name;
226};
227
234{
235 string name;
236 Value value;
237};
238
239class ParsedSqlNode;
240
249{
250 unique_ptr<ParsedSqlNode> sql_node;
251};
252
259{
260 string error_msg;
261 int line;
262 int column;
263};
264
270{
271 SCF_ERROR = 0,
272 SCF_CALC,
273 SCF_SELECT,
274 SCF_INSERT,
275 SCF_UPDATE,
276 SCF_DELETE,
277 SCF_CREATE_TABLE,
278 SCF_DROP_TABLE,
279 SCF_ANALYZE_TABLE,
280 SCF_CREATE_INDEX,
281 SCF_DROP_INDEX,
282 SCF_SYNC,
283 SCF_SHOW_TABLES,
284 SCF_DESC_TABLE,
286 SCF_COMMIT,
287 SCF_CLOG_SYNC,
288 SCF_ROLLBACK,
289 SCF_LOAD_DATA,
290 SCF_HELP,
291 SCF_EXIT,
292 SCF_EXPLAIN,
294};
300{
301public:
302 enum SqlCommandFlag flag;
303 ErrorSqlNode error;
304 CalcSqlNode calc;
305 SelectSqlNode selection;
306 InsertSqlNode insertion;
307 DeleteSqlNode deletion;
308 UpdateSqlNode update;
309 CreateTableSqlNode create_table;
310 DropTableSqlNode drop_table;
311 AnalyzeTableSqlNode analyze_table;
312 CreateIndexSqlNode create_index;
313 DropIndexSqlNode drop_index;
314 DescTableSqlNode desc_table;
315 LoadDataSqlNode load_data;
316 ExplainSqlNode explain;
317 SetVariableSqlNode set_variable;
318
319public:
321 explicit ParsedSqlNode(SqlCommandFlag flag);
322};
323
329{
330public:
331 void add_sql_node(unique_ptr<ParsedSqlNode> sql_node);
332
333 vector<unique_ptr<ParsedSqlNode>> &sql_nodes() { return sql_nodes_; }
334
335private:
336 vector<unique_ptr<ParsedSqlNode>> sql_nodes_;
337};
表达式的抽象描述
Definition: expression.h:66
表示一个SQL语句
Definition: parse_defs.h:300
表示语法解析后的数据
Definition: parse_defs.h:329
vector< unique_ptr< ParsedSqlNode > > sql_nodes_
这里记录SQL命令。虽然看起来支持多个,但是当前仅处理一个
Definition: parse_defs.h:336
属性的值
Definition: value.h:30
SqlCommandFlag
表示一个SQL语句的类型
Definition: parse_defs.h:270
CompOp
描述比较运算符
Definition: parse_defs.h:47
@ SCF_SET_VARIABLE
设置变量
Definition: parse_defs.h:293
@ SCF_BEGIN
事务开始语句,可以在这里扩展只读事务
Definition: parse_defs.h:285
@ GREAT_EQUAL
">="
Definition: parse_defs.h:52
@ LESS_THAN
"<"
Definition: parse_defs.h:51
@ EQUAL_TO
"="
Definition: parse_defs.h:48
@ LESS_EQUAL
"<="
Definition: parse_defs.h:49
@ GREAT_THAN
">"
Definition: parse_defs.h:53
@ NOT_EQUAL
"<>"
Definition: parse_defs.h:50
描述一个analyze table语句
Definition: parse_defs.h:180
string relation_name
要分析的表名
Definition: parse_defs.h:181
描述一个属性
Definition: parse_defs.h:145
string name
Attribute name
Definition: parse_defs.h:147
AttrType type
Type of attribute
Definition: parse_defs.h:146
size_t length
Length of attribute
Definition: parse_defs.h:148
算术表达式计算的语法树
Definition: parse_defs.h:102
vector< unique_ptr< Expression > > expressions
calc clause
Definition: parse_defs.h:103
表示一个条件比较
Definition: parse_defs.h:66
RelAttrSqlNode right_attr
right-hand side attribute if right_is_attr = TRUE 右边的属性
Definition: parse_defs.h:74
int right_is_attr
TRUE if right-hand side is an attribute 1时,操作符右边是属性名,0时,是属性值
Definition: parse_defs.h:72
CompOp comp
comparison operator
Definition: parse_defs.h:71
Value right_value
right-hand side value if right_is_attr = FALSE
Definition: parse_defs.h:75
int left_is_attr
TRUE if left-hand side is an attribute 1时,操作符左边是属性名,0时,是属性值
Definition: parse_defs.h:67
RelAttrSqlNode left_attr
left-hand side attribute
Definition: parse_defs.h:70
Value left_value
left-hand side value if left_is_attr = FALSE
Definition: parse_defs.h:69
描述一个create index语句
Definition: parse_defs.h:191
string index_name
Index name
Definition: parse_defs.h:192
string attribute_name
Attribute name
Definition: parse_defs.h:194
string relation_name
Relation name
Definition: parse_defs.h:193
描述一个create table语句
Definition: parse_defs.h:157
string storage_engine
storage engine
Definition: parse_defs.h:163
string relation_name
Relation name
Definition: parse_defs.h:158
string storage_format
storage format
Definition: parse_defs.h:162
vector< string > primary_keys
primary keys
Definition: parse_defs.h:160
vector< AttrInfoSqlNode > attr_infos
attributes
Definition: parse_defs.h:159
描述一个delete语句
Definition: parse_defs.h:122
string relation_name
Relation to delete from
Definition: parse_defs.h:123
描述一个desc table语句
Definition: parse_defs.h:213
描述一个drop index语句
Definition: parse_defs.h:202
string relation_name
Relation name
Definition: parse_defs.h:204
string index_name
Index name
Definition: parse_defs.h:203
描述一个drop table语句
Definition: parse_defs.h:171
string relation_name
要删除的表名
Definition: parse_defs.h:172
解析SQL语句出现了错误
Definition: parse_defs.h:259
描述一个explain语句
Definition: parse_defs.h:249
描述一个insert语句
Definition: parse_defs.h:112
string relation_name
Relation to insert into
Definition: parse_defs.h:113
vector< Value > values
要插入的值
Definition: parse_defs.h:114
描述一个load data语句
Definition: parse_defs.h:223
描述一个属性
Definition: parse_defs.h:37
string relation_name
relation name (may be NULL) 表名
Definition: parse_defs.h:38
string attribute_name
attribute name 属性名
Definition: parse_defs.h:39
描述一个select语句
Definition: parse_defs.h:90
vector< ConditionSqlNode > conditions
查询条件,使用AND串联起来多个条件
Definition: parse_defs.h:93
vector< string > relations
查询的表
Definition: parse_defs.h:92
vector< unique_ptr< Expression > > expressions
查询的表达式
Definition: parse_defs.h:91
vector< unique_ptr< Expression > > group_by
group by clause
Definition: parse_defs.h:94
设置变量的值
Definition: parse_defs.h:234
描述一个update语句
Definition: parse_defs.h:132
string attribute_name
更新的字段,仅支持一个字段
Definition: parse_defs.h:134
string relation_name
Relation to update
Definition: parse_defs.h:133
Value value
更新的值,仅支持一个字段
Definition: parse_defs.h:135