代码编织梦想

public void unparse(SqlWriter sqlWriter, int i, int i1) {

sqlWriter.keyword(“jacky”);

sqlWriter.keyword(“job”);

sqlWriter.print(“\n”);

sqlWriter.keyword(“” + jackyString + “”);

}

@Override

public void validate(SqlValidator sqlValidator, SqlValidatorScope sqlValidatorScope) {

System.out.println(“validate”);

}

@Override

public R accept(SqlVisitor sqlVisitor) {

System.out.println(“accept”);

return null;

}

@Override

public boolean equalsDeep(SqlNode sqlNode, Litmus litmus) {

System.out.println(“equalsDeep”);

return false;

}

}

在这个解析类里面,其实我们并没有做很多工作,只是在构造器里面,将变量保存起来。

需要注意的是这个方法,unparse ,这里用于解析显示用的,我们将关键字输出出来。

修改config.fmpp文件

找到

package: “org.apache.calcite.sql.parser.impl”,

将下方的class,替换成一个你自己的类名,后面会用到。例如

class: “JackySqlParserImpl”,

修改Parser.jj文件

首先需要在import的地方引入上面的解析类

import org.apache.calcite.sql.SqlJacky;

然后再后处理代码中加入解析逻辑

SqlNode SqlJacky() :

{

SqlNode stringNode;

}

{

stringNode = StringLiteral()

{

return new SqlJacky(getPos(), token.image);

}

}

接下来找到声明语句的方法

SqlNode SqlStmt() :

|

stmt = SqlJacky()

加入到适当的位置。

最后在

<DEFAULT, DQID, BTID> TOKEN :

的地方将,jacky 和 job 关键字加入

| < JACKY: “JACKY”>

| < JOB: “JOB”>

由于这个文件比较大,这里就不能贴完整的代码了,下面的连接中,有参考案例。

编译

执行maven的编译命令

测试

在构建测试的时候,注意将自己的解析解析类设置好,即在fmpp里设置的类名

.setParserFactory(JackySqlParserImpl.FACTORY)

完整测试代码如下

package cn.flinkhub;

import org.apache.calcite.avatica.util.Casing;

import org.apache.calcite.avatica.util.Quoting;

import org.apache.calcite.schema.SchemaPlus;

import org.apache.calcite.sql.SqlNode;

import org.apache.calcite.sql.parser.SqlParser;

import org.apache.calcite.tools.FrameworkConfig;

import org.apache.calcite.tools.Frameworks;

import org.apache.calcite.sql.parser.impl.JackySqlParserImpl;

public class CustomParser {

public static void main(String[] args) {

SchemaPlus rootSchema = Frameworks.createRootSchema(true);

final FrameworkConfig config = Frameworks.newConfigBuilder()

.parserConfig(SqlParser.configBuilder()

//.setLex(Lex.ORACLE)

.setParserFactory(JackySqlParserImpl.FACTORY)

.setCaseSensitive(false)

.setQuoting(Quoting.BACK_TICK)

.setQuotedCasing(Casing.TO_UPPER)

.setUnquotedCasing(Casing.TO_UPPER)

//.setConformance(SqlConformanceEnum.ORACLE_12)

.build())

.build();

// “jacky ‘select ids, name from test where id < 5’”;

String sql = “jacky job ‘select ids, name from test where id < 5’”;

SqlParser parser = SqlParser.create(sql, config.getParserConfig());

try {

SqlNode sqlNode = parser.parseStmt();

System.out.println(sqlNode.toString());

} catch (Exception e) {

e.printStackTrace();

}

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!

[外链图片转存中…(img-YTR2z45z-1711934148046)]
[外链图片转存中…(img-HA1u32QC-1711934148046)]
[外链图片转存中…(img-JaUpdDpE-1711934148047)]
[外链图片转存中…(img-P8mf0N3k-1711934148048)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/efgtrrg/article/details/137218452

Apache Calcite教程-SQL解析-Calcite SQL解析-爱代码爱编程

Calcite SQL解析 代码目录 如图: config.fmpp calcite 模板配置 Parser.jj JavaCC解析器 parserImpls.ftl/compoundIdentifier.ftl 自定义JavaCC语法格式的解析SQL代码 生成解析器的流程 如图: Sql解析使用 解析示例代码 public class S

使用Calcite做Sql语法解析-爱代码爱编程

点击箭头处“蓝色字”,关注我们哦!! Flink SQL中使用Calcite作为sql语法解析、校验、优化工具,本篇是实操篇,介绍一下calcite做sql语法解析使用方式。 sql经过calcite解析之后,得到一棵抽象语法树,也就是我们说的AST,这棵语法树是由不同的节点组成,节点称之为SqlNode,根据不同类型的dml、ddl得到

sql 血缘解析 calcite-爱代码爱编程

package pers.machi; import com.google.common.base.Joiner; import org.apache.calcite.avatica.util.Casing; import org.apache.calcite.config.Lex; import org.apache.calcite.sql.*; im

深入浅出Calcite与SQL CBO(Cost-Based Optimizer)优化-爱代码爱编程

文章目录 Calcite简介与CBO介绍Calcite背景与介绍SQL优化与CBOCalcite优化器HepPlanner优化器与VolcanoPlanner优化器Calcite优化样例代码介绍 前阵子工作上需要用到Calcite做一些事情,然后发现这个东西也是蛮有意思的,就花了些时间研究了一下。本篇主要围绕SQL 优化这块来介绍Calcite,

mfc中报错未声明的标识符_Calcite中定制自已SQL解析器-爱代码爱编程

1. 什么Sql Parser 所谓Sql Parser, 就是根据某种特定的定义而生成的Sql 语法解析器。 打个比方: 在计算器中输入 1 + 2 = 之所以可以得到结果3是因为是计算器可以准确地根据上述字符解析出相应的输入参数与算法,进而计算到最终的结果。 如果输入的是1 +- 2 = 计算器可能就会提示错误, 这其实就是类似于SQL中提示语法

Calcite Sql解析-爱代码爱编程

Calcite自定义SQL解析(经常使用的方法和配置)(mvn版本:1.21.0) 1、config.fmpp(calcite模板配置) data: { parser: { # Generated parser implementation package and class name. # 生成解析器实现类包和名称 包名

calcite sql 解析、语法扩展、元数据验证原理与实战(上)-爱代码爱编程

引言 Apache Calcite 是一个动态数据管理框架,其中包含了许多组件,例如 SQL 解析器、SQL 验证器、SQL 优化器、SQL 生成器等。因为 Calcite 的体系结构并不支持数据的存储和处理,所以 Calcite 天然具备了在多种计算引擎和存储格式之间作为“中介者”的能力。前文《一条 SQL 的查询优化之旅》提到,SQL 的查询是从

apache calcite -爱代码爱编程

前言 Calcite提供了org.apache.calcite.sql.parser.SqlParser来解析sql,通过访问者模式,在解析过程中访问Sql中的不同元素,最终完成特定的功能。 使用举例 使用Calcit

apache calcite avatica 快速入门及实践指南-爱代码爱编程

Apache Calcite Avatica 快速入门及实践指南 calcite-avaticaApache Calcite Avatica项目地址:https://gitcode.com/gh_mirrors/ca/calcite-avatica 1. 项目介绍 Apache Calcite Avatica 是一个轻量级框架,它提供了一个HTT