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