MySQL (في الوقت الحالي) Lexer ، محلل ، نموذج اللغة والمحلل الثابت المكتوب في PHP
إنه محلل التحقق من صحة ينتج كائنًا يقوم بتنفيذ واجهة أمر SQLFTW SQL لكل من أوامر SQL المدعومة تقريبًا. تقوم الأوامر بنمذجة الجانب النحوي من رمز SQL ، وليس جانب المجال (النماذج بالضبط كيفية كتابة الاستعلامات) ، ومع ذلك لا تتبع المساحة البيضاء وتتجاهل حاليًا بعض التعليقات
يهدف هذا المحلل إلى أساس مشروعين آخرين:
من تلقاء نفسه يمكن استخدامه للتحقق من بناء جملة رمز SQL (مثل الترحيل)
يدعم جميع أوامر SQL من MySQL 5.x إلى MySQL 8.0.34 وجميع ميزات اللغة تقريبًا
غير مدعوم ، ستفشل في التحليل:
shift-jis ، gb18030 أو utf-16 (فشل في التحليل)"foo" "bar" ؛ هذا مدعوم على الأوتار ، ولكن ليس على الأسماء)مقبولة ، ولكن تجاهل الميزات (لا يوجد نموذج وتسلسل):
SELECT ... PROCEDURE ANALYSE (...) - تمت إزالته في MySQL 8WEIGHT_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" . من المستحيل تصميم نظام ضخم في المحاولة الأولى ، ويجب أن يستقر الكثير من المفاهيم والنقر على مكانه وبالتالي لا يزال الكثير من التغييرات قادمة
عند استخدام الملحن ، قم دائمًا بإغلاق اعتمادك على هذه الحزمة إلى إصدار دقيق. مثل sqlftw/sqlftw:0.1.14
Vlasta Neubauer ، paranoiq ، https://github.com/paranoiq