sqlftw
v0.1.16
MySQL(目前)Lexer,解析器,语言模型和静态分析仪,用PHP编写
它是一个验证解析器,可为大约140个支持的SQL命令中的每一个中的每个实现对象实现对象。命令确实对SQL代码的句法方面进行建模,而不是域的方面(完全编写查询的模型),但是没有跟踪空白,目前忽略了一些注释
该解析器旨在作为其他两个项目的基础:
它本身可用于验证SQL代码的语法(例如迁移)
支持从MySQL 5.X到MySQL 8.0.34的所有SQL命令以及几乎所有语言功能
不支持的功能将无法解析:
shift-jis , gb18030或utf-16 (未能解析)"foo" "bar" ;这是在字符串上支持的,但在名称上不支持)接受但忽略了功能(没有模型和序列化):
SELECT ... PROCEDURE ANALYSE (...) - 在MySQL 8中删除WEIGHT_STRING(... LEVEL ...) - 在MySQL 8中删除除MySQL以外的方式实现了功能:
主层:
<?php
use ...
$platform = Platform::get(Platform::MYSQL, '8.0'); // version defaults to x.x.99 when no patch number is given
$config = new ParserConfig($platform);
$session = new Session($platform);
$parser = new Parser($config, $session);
// returns a Generator. will not parse anything if you don't iterate over it
$commands = $parser->parse('SELECT foo FROM ...');
foreach ($commands as $command) {
// Parser does not throw exceptions. this allows to parse partially invalid code and not fail on first error
if ($command instanceof InvalidCommand) {
$e = $command->getException();
...
}
...
}
我们现在在哪里:
我们都喜欢语义版本,不是吗? :]]
但是,这个图书馆是一项巨大的任务,仍在迅速的初始开发阶段。即使在此阶段,我也决定标记和发布版本,因为我认为它总比没有好,而且比发布数十个alpha版本更好。因此,在我们离开“ 0.1”之前,不要期望任何向后兼容性。在第一次尝试上设计巨大的系统是不可能的,许多概念必须安顿下来并单击其位置,因此仍在进行许多更改
使用作曲家时,请始终将您对此软件包的依赖性锁定到精确版本。例如sqlftw/sqlftw:0.1.14
vlasta neubauer,@paranoiq,https://github.com/paranoiq