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