3个版本

0.1.2 2020年10月20日
0.1.1 2020年9月8日
0.1.0 2020年9月3日

#2366数据库接口

MIT 许可证

60KB
1.5K SLoC

一个不完整的Clickhouse SQL语法的Rust解析器。

nom-sql 启发,使用 nom 编写。

状态:对CREATE TABLE语句提供基本支持。解析引擎选项作为String。解析列作为包含所有选项(类型、编解码器、ttl、注释等)的结构体。

# cargo b --example parse
 ...
     Running `target/debug/examples/parse`

SQL statement: CREATE TABLE `default`.access (
  `remote_addr` String CODEC(ZSTD(1)),
  `remote_addr_long` Int32
) ENGINE = DISTRIBUTED( 'cluster', '', 'access', rand());

[examples/parse.rs:20] &schema = CreateTable(
    CreateTableStatement {
        table: Table {
            name: "access",
            alias: None,
            schema: Some(
                "default",
            ),
        },
        fields: [
            ColumnSpecification {
                column: Column {
                    name: "remote_addr",
                    alias: None,
                    table: Some(
                        "access",
                    ),
                },
                sql_type: String,
                codec: Some(
                    CodecList(
                        [
                            ZSTD(
                                Some(
                                    1,
                                ),
                            ),
                        ],
                    ),
                ),
                ttl: None,
                nullable: false,
                option: None,
                comment: None,
                lowcardinality: false,
            },
            ColumnSpecification {
                column: Column {
                    name: "remote_addr_long",
                    alias: None,
                    table: Some(
                        "access",
                    ),
                },
                sql_type: Int(
                    B32,
                ),
                codec: None,
                ttl: None,
                nullable: false,
                option: None,
                comment: None,
                lowcardinality: false,
            },
        ],
        engine: Distributed(
            EngineDistributed {
                cluster_name: "\'cluster\'",
                schema: "\'\'",
                table: "\'access\'",
                sharding_key: Some(
                    "rand()",
                ),
                policy_name: None,
            },
        ),
    },
)

依赖项

~1MB
~18K SLoC