2个版本
使用旧的Rust 2015
0.1.0 |
|
---|---|
0.0.2 | 2024年4月16日 |
0.0.1 | 2024年4月15日 |
在 数据库接口 中排名第254
每月下载量133次
435KB
11K SLoC
sqlparser-mysql
基于nom的MySQL SQL解析器。用Rust编写。
项目状态
请注意,此仓库目前正在积极开发中。因此,它可能会在没有预先通知的情况下发生潜在的破坏性更改。我们正在努力改进项目并使其更加健壮。然而,在此阶段,我们可能会对代码库、功能和功能进行重大修改。
我们鼓励用户和贡献者在使用、分支或为此项目做出贡献时牢记这一点。我们对您的理解和耐心表示衷心的感谢,因为我们继续使此项目不断进化。
请关注更新,欢迎联系或为开发过程做出贡献!
免责声明
此项目处于预发布状态。它可能包含不完整的功能、错误和意外的行为。请自行承担风险使用。
快速入门
示例解析SQL
use sqlparser_mysql::parser::Parser;
use sqlparser_mysql::parser::ParseConfig;
let config = ParseConfig::default();
let sql = "SELECT a, b, 123, myfunc(b) \
FROM table_1 \
WHERE a > b AND b < 100 \
ORDER BY a DESC, b";
// parse to a Statement
let ast = Parser::parse(&config, sql).unwrap();
println!("AST: {:#?}", ast);
输出应为
AST: Select(
SelectStatement {
tables: [
Table {
name: "table_1",
alias: None,
schema: None,
},
],
distinct: false,
fields: [
Col(
Column {
name: "a",
alias: None,
table: None,
function: None,
},
),
Col(
Column {
name: "b",
alias: None,
table: None,
function: None,
},
),
Value(
Literal(
LiteralExpression {
value: Integer(
123,
),
alias: None,
},
),
),
Col(
Column {
name: "myfunc(b)",
alias: None,
table: None,
function: Some(
Generic(
"myfunc",
FunctionArguments {
arguments: [
Column(
Column {
name: "b",
alias: None,
table: None,
function: None,
},
),
],
},
),
),
},
),
],
join: [],
where_clause: Some(
LogicalOp(
ConditionTree {
operator: And,
left: ComparisonOp(
ConditionTree {
operator: Greater,
left: Base(
Field(
Column {
name: "a",
alias: None,
table: None,
function: None,
},
),
),
right: Base(
Field(
Column {
name: "b",
alias: None,
table: None,
function: None,
},
),
),
},
),
right: ComparisonOp(
ConditionTree {
operator: Less,
left: Base(
Field(
Column {
name: "b",
alias: None,
table: None,
function: None,
},
),
),
right: Base(
Literal(
Integer(
100,
),
),
),
},
),
},
),
),
group_by: None,
order: Some(
OrderClause {
columns: [
(
Column {
name: "a",
alias: None,
table: None,
function: None,
},
Desc,
),
(
Column {
name: "b",
alias: None,
table: None,
function: None,
},
Asc,
),
],
},
),
limit: None,
},
)
从AST创建SQL文本
use sqlparser_mysql::parser::Parser;
use sqlparser_mysql::parser::ParseConfig;
let sql = "SELECT a FROM table_1";
let config = ParseConfig::default();
// parse to a Statement
let ast = Parser::parse(&config, sql).unwrap();
// The original SQL text can be generated from the AST
assert_eq!(ast.to_string(), sql);
支持语句
数据定义语句
- 原子数据定义语句支持
- ALTER DATABASE语句
- ALTER EVENT语句
- ALTER FUNCTION语句
- ALTER INSTANCE语句
- ALTER LOGFILE GROUP语句
- ALTER PROCEDURE语句
- ALTER SERVER语句
- ALTER TABLE语句
- ALTER TABLESPACE语句
- ALTER VIEW语句
- CREATE DATABASE语句
- CREATE EVENT语句
- CREATE FUNCTION语句
- CREATE INDEX语句
- CREATE LOGFILE GROUP语句
- CREATE PROCEDURE和CREATE FUNCTION语句
- CREATE SERVER语句
- CREATE SPATIAL REFERENCE SYSTEM语句
- CREATE TABLE语句
- CREATE TABLESPACE语句
- CREATE TRIGGER语句
- CREATE VIEW语句
- DROP DATABASE语句
- DROP EVENT语句
- DROP FUNCTION语句 --> "DROP PROCEDURE和DROP FUNCTION语句" && "可加载函数的DROP FUNCTION语句"
- DROP INDEX语句
- DROP LOGFILE GROUP语句
- DROP PROCEDURE和DROP FUNCTION语句
- DROP SERVER语句
- DROP SPATIAL REFERENCE SYSTEM语句
- 删除表语句
- 删除表空间语句
- 删除触发器语句
- 删除视图语句
- 重命名表语句
- 截断表语句
数据库管理语句
- SET语句
依赖
~1.2–2MB
~43K SLoC