MySQL(今のところ)PHPで書かれたLexer、Parser、Language Model、および静的アナライザー
これは、約140のサポートされているSQLコマンドのそれぞれに対してSQLFTW sql コマンドインターフェイスを実装するオブジェクトを生成する検証パーサーです。コマンドは、ドメインアスペクトではなく、SQLコードの構文的な側面をモデル化します(クエリの書き込み方法を正確にモデル化します)。ただし、空白を追跡せず、現在いくつかのコメントを無視しています
このパーサーは、他の2つのプロジェクトの基礎として意図されています。
単独では、SQLコードの構文を検証するために使用できます(例:移行)
MySQL 5.xからMySQL 8.0.34へのすべてのSQLコマンドをサポートし、ほぼすべての言語機能をサポートしています
サポートされていない機能ではありません。
shift-jis 、 gb18030 、 utf-16などのASCII-Incapatible Multibyteエンコーディングのサポート(解析に失敗)"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();
...
}
...
}
私たちが今いるところ:
私たちは皆、セマンティックバージョンを愛していますよね? :]
しかし、このライブラリは巨大な取り組みであり、まだ迅速な初期開発段階を経ています。この段階でもバージョンとリリースをリリースすることにしました。なぜなら、それは何もないよりも優れており、数十のアルファバージョンをリリースするよりも良いと思うからです。したがって、 「0.1」を離れるまで、後方互換性を期待しないでください。最初の試みで巨大なシステムを設計することは不可能であり、多くの概念が落ち着いてその場所をクリックする必要があります。したがって、多くの変更がまだ来ています
Composerを使用する場合、このパッケージへの依存関係を正確なバージョンに常にロックしてください。たとえば、 sqlftw/sqlftw:0.1.14
Vlasta neubauer、@paranoiq、https://github.com/paranoiq