Calcite Parser 使用 Demo

Calcite 解析

SQL Parser 使用 Demo

    SchemaPlus rootSchema = Frameworks.createRootSchema(true);
    final FrameworkConfig config = Frameworks.newConfigBuilder()
            .parserConfig(SqlParser.configBuilder()
                    .setParserFactory(SqlParserImpl.FACTORY)
                    .setCaseSensitive(false)
                    .setQuoting(Quoting.BACK_TICK)
                    .setQuotedCasing(Casing.TO_UPPER)
                    .setUnquotedCasing(Casing.TO_UPPER)
                    .setConformance(SqlConformanceEnum.ORACLE_12)
                    .build())
            .build();

    String sql = "select ids, name from test where id < 5 and name = 'zhang'";
    SqlParser parser = SqlParser.create(sql, config.getParserConfig());
    try {
        SqlNode sqlNode = parser.parseStmt();
        System.out.println(sqlNode.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
  • 语法参数设置

    • setCaseSensitive() 大小是写否敏感,比如说列名、表名、函数名
    • setQuoting() 设置引用一个标识符,比如说MySQL中的是``, Oracle中的""
    • setQuotedCasing Quoting策略,不变,变大写或变成小写,代码中的全部设置成变大写
    • setUnquotedCasing 当标识符没有被Quoting后的策略,值同上
      更多可以更以参考Calcite类Lex, 你也可以直接设置成MySQL、Oracle、MySQL_ANSI语法,如果需要定制化的话可以单独设置上面4个参数
  • ParserConfig中其它需要注意的参数

    • setIdentifierMaxLength() 设置标识符的最大长度,如果你的列名、表较长可以相应的加大这个值
    • setConformance() 特定语法支持,比如是否支持差集等

Sql Parser 功能

Calcite SqlParser 只会去检验 SQL 的语法是否正确,识别关键字(Keyword)与标识符(Identifier), 上面Sql关键字有select、from、where、<、=,其他为标识符,而不会去验证语义部分是否正确。比如表名、列名、列数据类型等信息的检验会在 Validate 阶段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值