7个版本
0.4.1 | 2024年7月22日 |
---|---|
0.4.0 | 2023年8月29日 |
0.3.2 | 2023年2月23日 |
0.3.1 | 2022年9月28日 |
0.1.1 | 2022年4月29日 |
在 数据库接口 中排名第291
每月下载量691次
在 shotover 中使用
230KB
5K SLoC
CQL3解析器
这是Apache Cassandra CQL3查询语言解析器的完整实现。本包的目标是将CQL3语句解析为可在多线程环境中使用的结构。它使用tree-sitter-cql3解析器解析原始查询,然后构建一个可编辑的线程安全查询表示。
常见用法
use crate::cassandra_ast::CassandraAST;
use crate::cassandra_statement::CassandraStatement;
use crate::select::{Named, SelectElement};
let ast = CassandraAST::new("select foo from myTable" );
// verify that there was no error
assert!( !ast.has_error() );
// get the parsed statement
let stmt : CassandraStatement = ast.statement;
match stmt {
CassandraStatement::Select(select) => {
select.columns.push( SelectElement::Column( Named {
name : "bar".as_string(),
alias : Some( "baz".as_string() ),
}));
select.order_clause = Some( OrderClause { name : "baz".as_string() } );
},
_ => {}
}
let edited_stmt = stmt.to_string();
上述代码将 SELECT foo FROM myTable
转换为 Select foo, bar AS baz FROM myTable ORDER BY baz ASC
。
注意:可能创建无效的语句。如果有疑问,重新解析新语句以验证其语法正确性。
包结构
- 解析器位于
cassandra_ast
模块。 - 语句位于
cassandra_statements
模块。 - 语句的数据分布在以语句命名的各个模块中(例如,
create_table
模块包含创建表的特定结构)。 - 多个包共有的结构位于
common
模块。 - 许多
Drop
语句具有相同的结构,它们位于common_drop
。 - 处理角色(例如,
Create Role
)的语句使用role_common
模块。
关于错误的说明
当语句完全无法解析时,解析器将返回一个 CassandraStatement::Unknown
对象。例如,CassandraAST::new("This is an invalid statement");
将返回 CassandraStatement::Unknown("This is an invalid statement")
。然而,如果一个语句可以部分解析,则会返回多个结果。例如,CassandraAST::new("SELECT * FROM foo WHERE some invalid part");
将返回 CassandraStatement::Select( select )
,其中 select 是解析 "SELECT * FROM foo
的结果,随后是 CassandraStatement::Unknown("SELECT * FROM foo WHERE some invalid part")
。
依赖关系
~8MB
~166K SLoC