يقدّم DuckDB v2.0 محلل SQL جديداً قائماً على PEG، ليحل محل المحلل المشتق من PostgreSQL الذي كان مستخدماً منذ أول التزام (commit) للمشروع عام 2018. أصبح المحلل السابق المولَّد بواسطة Bison والقائم على LALR(1) صعب التوسيع بشكل متزايد بسبب تعارضات الإزاحة/التقليص (shift/reduce) والتقليص/التقليص (reduce/reduce) مع تطور Duck SQL. المحلل الجديد، المبني باستخدام قواعد تعبير التحليل (Parsing Expression Grammars)، يزيل هذه التعارضات عن طريق ترتيب البدائل بشكل صريح ويتيح قابلية التوسع في وقت التشغيل.
يعالج المحلل استعلامات SQL عبر ثلاث مراحل: المُرمِّز (tokenizer)، والمحلل (parser)، والمحوِّل (transformer). يقوم المُرمِّز بتقسيم المدخلات إلى رموز مثل الكلمات المفتاحية والمعرِّفات. يتحقق المحلل من صحة الصياغة وفق قواعد Duck SQL النحوية، منتِجاً شجرة تحليل. يحوِّل المحوِّل هذه الشجرة إلى بنية AST الداخلية الخاصة بـ DuckDB لاستخدامها في الرابط (binder).
بدأ التطوير بنموذج أولي بحثي كان يتعامل مع مجموعة فرعية فقط من SQL. تم توسيعه تدريجياً وتقديمه كميزة تجريبية في DuckDB v1.5. تدعم القواعد الكاملة الآن جميع أنواع العبارات والتعبيرات، وأولوية العمليات الصحيحة، وتصنيفاً سليماً للكلمات المفتاحية، والتوافق مع هياكل AST الحالية.
بينما تتغير طريقة التنفيذ بشكل كبير، يبقى Duck SQL نفسه دون تغيير. كما يحسّن المحلل الجديد تقارير الأخطاء، موفراً سياقاً أفضل لأخطاء الصياغة. يتوافق هذا الانتقال مع خطوات مماثلة اتخذتها أنظمة أخرى مثل Python 3.9، التي تبنّت أيضاً التحليل القائم على PEG لمرونة أكبر.
المصدر: Hacker News · لخّصه HeadlinesBriefing