当前位置: 首页 > news >正文

长春微建站是哪个平台的问答类网站怎么做啊

长春微建站是哪个平台的,问答类网站怎么做啊,武义县网站建设,用wordpress做网站教程根据sql解析获取到表到表, 字段到字段间的关系,即血缘关系。实际上这是从sql文本获取到数据流的过程。 大致步骤如下#xff1a; 1.sql文本进行词法分析 2.sql语法分析获取到AST抽象语法树 3.访问AST抽象语法树根据语法结构推测出数据的流向,例如create as select from 这种结…根据sql解析获取到表到表, 字段到字段间的关系,即血缘关系。实际上这是从sql文本获取到数据流的过程。 大致步骤如下 1.sql文本进行词法分析 2.sql语法分析获取到AST抽象语法树 3.访问AST抽象语法树根据语法结构推测出数据的流向,例如create as select from 这种结构,数据就是从from的表流向select出来的ResultSet中间结果集最后流程create的表中, 字段可以使用字段名进行匹配如果可以连接到元数据库是可以查询到表和字段的如果仅仅根据sql文本分析那么一般只能根据select中的字段名结合语法进行猜测。 一般来说,步骤1,2比较底层会有很多工具为我们完成, 像antlr(开源语法分析器),druid(基于antlr),使用这些工具可以直接从sql获取到AST语法树, 然后我们直接进入第3个步骤遍历语法树获取自己想要的信息即可。比如在解析create table A as select * from table B; 后判断出语句为create from句式从语法树中获取create的表A和from的表B,这样表级别的血缘关系就获取到了。 下面以antlr为例对这三个步骤进行详细的说明 sql文本进行Lexer词法分析 词法分析是将sql文本字符序列转换为单词Token序列的过程。 进行词法分析的程序或者函数叫作词法分析器Lexical analyzer简称Lexer也叫扫描器Scanner。 比如sql中的关键字select, from, table等,antlr根据一个规则g4文件去识别这些关键字。 g4文件是antlr生成词法解析规则和语法解析规则的基础。该文件是我们自定义的文件名后缀需要是.g4。g4文件描述了Token及Token间语法。antlr根据g4文件的描述先进行词法解析,将字符串解析为单词Token序列。 借个图做个示例: sql语法分析parse获取到AST抽象语法树 语法分析器根据g4文件描述的规则将收到的Tokens组织起来并转换成为目标语言语法定义所允许的序列,并组装为AST抽象语法树结构。 例如下面的sql可以被解析为下图中的ast语法树。 create table stu_tj row format delimited as SELECT b.id,b.name FROM (select oldId id ,name from stu WHERE id ‘2’) b ; 访问AST抽象语法树根据语法结构推测出数据的流向。 语法树中包含了sql的全部信息 可以从中获取到所需信息。但是访问代码并不好写因为语法树中封装的对象类型很多不同的类型需要不同的访问方式一般使用visitor访问者模式进行访问。大部分的业务代码就在这里访问sql解析后的AST语法树Abstract Syntax Tree然后获取源表和目标表之间的对应关系即所谓血缘关系。 例如create as select from 这种结构,数据就是从from的表流向select出来的ResultSet中间结果集最后流程create的表中, 字段可以使用字段名结合语法进行匹配推理。 druid提供了visitor接口访问AST语法树需要借用visitor设计模式调用accept方法即可访问AST语法树,注意accept方法是调用入参对象的接口方法。druid已实现的visitor功能不够全无法处理别名等一些需求需要自己实现visitor。可以直接继承 SQLASTVisitorAdapter 也可以根据不同数据库类型继承不同的visitor。 // 自定义访问者 继承SQLASTVisitorAdapter class SQLCustomedVisitor extends SQLASTVisitorAdapter { protected boolean hasLimit false; Override public boolean visit(SQLLimit x) { System.out.println(x.getRowCount()); hasLimit true; return false; } public boolean isHasLimit() { return hasLimit; } }不同数据库类型继承不同的visitor https://github.com/alibaba/druid/wiki/SQL_Parser_Demo_visitor public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlASTVisitor {public MySqlSchemaStatVisitor() {super (JdbcConstants.MYSQL);}public boolean visit(SQLSelectStatement x) {if (repository ! null x.getParent() null) {repository.resolve(x);}return true;} }参考 https://www.jianshu.com/p/21f2afca65e8 https://baike.baidu.com/item/antlr/9368750 https://zhuanlan.zhihu.com/p/121545985 https://github.com/alibaba/druid/wiki/SQL_Parser_Demo_visitor https://github.com/alibaba/druid/wiki/SQL-Parser https://blog.csdn.net/shy_snow/article/details/133373567
http://www.zqtcl.cn/news/505160/

相关文章:

  • 商务网站开发的工作任务湖南专业网站建设
  • 怎样搭建免费网站什么网站做网页好
  • flash工作室网站模板天津seo培训班在哪里
  • 怎么做游戏推广网站扬中商城官网
  • html5 公众号 网站开发顺德手机网站建设
  • 上海医疗网站备案表千库网是什么
  • 陕西省西安市制作网站二次元 wordpress主题
  • 十堰网站建设weitian帮人做logo网站
  • 网站怎么做商家定位长沙网站建设长沙建设银行
  • 山西省建设厅网站查询哈尔滨网站开发电话
  • 网站建设app律师网站素材
  • 安徽 网站建设丹阳杨文军
  • 燃烧学课程网站建设怎么做网站的登录界面
  • 邹城网站定制wordpress托管套餐
  • 沧州网站优化公司logo网站免费
  • 网站制作公司知道万维科技建设银行企业网站无法打印回单
  • 个人网站做贷款广告知乎关键词搜索
  • 常熟外贸网站建设网站突然显示 建设中
  • 宜昌市住房和城乡建设官方网站泗洪网页设计
  • 计算机软件网站建设北京加盟网站建设
  • 推广网站怎么建设和维护strange wordpress主题
  • 安徽省建设厅网站打不开湘潭做网站找磐石网络一流
  • 沈阳做网站哪好网站建设后续说明
  • 给个网站最新的2021在网站的标题上怎么做图标
  • h5做网站用什么框架seo推广计划
  • 亿企搜网站建设百度网盘怎么领取免费空间
  • 天津网站排名提升如何用h5做网站
  • 外贸公司有必要建设网站吗赣州做网站哪家好
  • 功能型网站设计深圳网站优化效果
  • 郑州定制网站开发规模以上工业企业总产值