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

Download history 232/week @ 2024-05-02 217/week @ 2024-05-09 223/week @ 2024-05-16 69/week @ 2024-05-23 191/week @ 2024-05-30 68/week @ 2024-06-06 166/week @ 2024-06-13 49/week @ 2024-06-20 44/week @ 2024-06-27 145/week @ 2024-07-04 91/week @ 2024-07-11 334/week @ 2024-07-18 290/week @ 2024-07-25 151/week @ 2024-08-01 21/week @ 2024-08-08 223/week @ 2024-08-15

每月下载量691
shotover 中使用

Apache-2.0

230KB
5K SLoC

CQL3解析器

dependency status Crates.io Released API docs

这是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