手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >mixer:sql词法分析器设计
mixer:sql词法分析器设计
摘要:介绍mixer希望在proxy这层就提供自定义路由,sql黑名单,防止sql注入攻击等功能,而这些的基石就在于将用户发上来的sql语句进行解...

介绍

mixer希望在proxy这层就提供自定义路由,sql黑名单,防止sql注入攻击等功能,而这些的基石就在于将用户发上来的sql语句进行解析。也就是我最头大的词法分析和语法分析。

到现在为止,我只是实现了一个比较简单的词法分析器,用以将sql语句分解成多个token。而对于从token在进行语法分析,构建sql的AST,我现在还真没啥经验(编译原理太差了),急需牛人帮忙。

所以,这里只是简单介绍一下mixer的词法分析。

tokenize

在很多地方,我们都需要进行词法分析,通常会有几种方式:

使用一个强大的工具,譬如lex,mysql-proxy就用的这种方式

使用正则表达式

state machine

对于使用工具,我觉得有一个不怎么好的地方在于学习成本,譬如我用lex的时候就需要学习它的语法,同时通过工具生成的代码可读性都不怎么好,代码量大,更严重的是可能会比较慢。所以mysql自身也是自己实现一个词法分析模块。

而对于正则表达式,性能问题可能是一个很需要考虑的,而且复杂度并不比使用类似lex这样的工具低。

状态机可能是我觉得自己动手实现词法解析一个很好的方式,对于sql的词法解析,我觉得使用state machine的方式来自己写一个难度并不大,所以mixer自己实现了一个。

state machine

通常,一个状态机的实现采用的是state + action + switch的做法,可能如下:

?

1

【mixer:sql词法分析器设计】相关文章:

sql 刷新视图

SQLServer 设置单词首字母大写

mssql自动备份及自动清除日志文件服务器设置

SQL Server储过程加密和解密原理深入分析

海量数据库的查询优化及分页算法方案

mssql 两种数据插入方式

在程序中压缩sql server2000的数据库备份文件的代码

解决SQL2005备份数据库.dat或bak还原时的结构错误的解决方法

sqlSERVER常用函数及语法笔记

关于数据库和SQL Server的若干见解

精品推荐
分类导航