عن المشروع
Scythe هي أداة سطر أوامر تعامل مع SQL كلغة من الدرجة الأولى. تقوم بتحليل ثابت لملفات `.sql` المشروحة وتولد كود وصول آمن للنوع لقواعد البيانات (أنواع الصفوف، ودوال الاستعلام، وخريطة الأنواع) لعشر لغات برمجة (Rust، Python، TypeScript، Go، Java، Kotlin، C#، Elixir، Ruby، PHP، بالإضافة إلى JavaScript العادي) عبر عشر محركات قواعد بيانات (PostgreSQL، MySQL، MariaDB، SQLite، DuckDB، CockroachDB، MSSQL، Oracle، Redshift، Snowflake). لا يتطلب التوليد اتصالاً بقاعدة البيانات أو شبكة، مما يجعله مناسبًا لاستخدامه في خطافات ما قبل الإرسال (pre-commit hooks).
تشمل الميزات الرئيسية:
- **استنتاج النوع**: يتم نشر القابلية للقيمة الفارغة (Nullability) عبر عمليات JOIN، والعبارات المشتركة (CTEs)، ودوال النافذة (window functions)، وCOALESCE، وCASE WHEN، والتجميعات. يتم تعيين أنواع Enum والمركبة والمصفوفات وJSON لأنواع اللغة الأصلية.
- **التنقيح والتدقيق**: 24 قاعدة تنقيح (مثل UPDATE بدون WHERE، SELECT *) و35 قاعدة تدقيق للأمان وسلامة الهجرات (مثل GRANT to PUBLIC، كلمات المرور الحرفية، DDL مدمر). يمكن إخراج النتائج بصيغ بشرية، أو SARIF، أو JSON.
- **فحص المصدر**: يتحقق `scythe check` من أن الكود المُولَّد المرسل يطابق الـ SQL الذي نشأ منه، مع فحوصات اختيارية لانحراف المخطط الحي مقابل PostgreSQL.
- **فحص قاعدة البيانات**: يقوم `scythe inspect` بإجراء فحوصات صحة حية (مثل المفاتيح الأجنبية بدون فهرس تغطية، أو تعطيل RLS) لـ PostgreSQL وMySQL/MariaDB.
- **مخرجات مرنة**: أنواع صفوف كـ Pydantic، msgspec، dataclasses، مخططات Zod، أو واجهات عادية؛ تجاوزات الأنواع لأنواع الامتداد مثل ltree، citext، أو PostGIS.
- **الشروح**: بخلاف `:one`/`:many`، يدعم `@optional` للمرشحات الشرطية، و`:batch` للعمليات المجمعة، و`@returns :grouped` للنتائج المتداخلة.
- **الترحيل من sqlc**: يحول `scythe migrate` إعدادات `sqlc.yaml` الموجودة.
تشمل خيارات التثبيت cargo، Homebrew، npm، pip، وإجراء GitHub. تتوفر خطافات ما قبل الإرسال للتنسيق، والتنقيح، والتدقيق، والفحص، والتوليد، والتحقق. الأداة مرخصة برخصة MIT وموثقة على goldziher.github.io/scythe.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.