इस प्रोजेक्ट के बारे में

Scythe एक कमांड-लाइन टूल है जो SQL को प्रथम श्रेणी की भाषा मानता है। यह एनोटेटेड `.sql` फ़ाइलों का स्थैतिक विश्लेषण करता है और दस प्रोग्रामिंग भाषाओं (Rust, Python, TypeScript, Go, Java, Kotlin, C#, Elixir, Ruby, PHP, साथ ही सादा JavaScript) के लिए टाइप-सुरक्षित डेटाबेस एक्सेस कोड—पंक्ति प्रकार, क्वेरी फ़ंक्शन, और टाइप मैपिंग—उत्पन्न करता है, जो दस डेटाबेस इंजनों (PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, CockroachDB, MSSQL, Oracle, Redshift, Snowflake) पर काम करता है। जनरेशन के लिए किसी डेटाबेस कनेक्शन या नेटवर्क की आवश्यकता नहीं होती, जिससे यह प्री-कमिट हुक के लिए उपयुक्त है। मुख्य विशेषताएं शामिल हैं: - **टाइप अनुमान**: JOINs, CTEs, विंडो फ़ंक्शन, COALESCE, CASE WHEN, और एग्रीगेट्स के माध्यम से नलता (nullability) प्रसारित होती है। एनम, कंपोजिट, ऐरे, और JSON मूल भाषा प्रकारों में मैप होते हैं। - **लिंटिंग और ऑडिटिंग**: 24 लिंट नियम (जैसे, WHERE के बिना UPDATE, SELECT *) और सुरक्षा और माइग्रेशन सुरक्षा के लिए 35 ऑडिट नियम (जैसे, PUBLIC को GRANT, शाब्दिक पासवर्ड, विनाशकारी DDL)। आउटपुट मानव, SARIF, या JSON प्रारूपों में। - **प्रोवेनेंस जांच**: `scythe check` सत्यापित करता है कि प्रतिबद्ध जनरेटेड कोड उस SQL से मेल खाता है जिससे वह आया है, PostgreSQL के खिलाफ वैकल्पिक लाइव स्कीमा-ड्रिफ्ट जांच के साथ। - **डेटाबेस निरीक्षण**: `scythe inspect` PostgreSQL और MySQL/MariaDB के लिए लाइव स्वास्थ्य जांच (जैसे, कवरिंग इंडेक्स के बिना विदेशी कुंजी, RLS अक्षम) करता है। - **लचीला आउटपुट**: पंक्ति प्रकार Pydantic, msgspec, dataclasses, Zod स्कीमा, या सादे इंटरफेस के रूप में; ltree, citext, या PostGIS जैसे एक्सटेंशन प्रकारों के लिए टाइप ओवरराइड। - **एनोटेशन**: `:one`/`:many` के अलावा, सशर्त फ़िल्टर के लिए `@optional`, बल्क ऑपरेशन के लिए `:batch`, और नेस्टेड परिणामों के लिए `@returns :grouped` का समर्थन करता है। - **sqlc से माइग्रेशन**: `scythe migrate` मौजूदा `sqlc.yaml` कॉन्फ़िगरेशन को परिवर्तित करता है। स्थापना विकल्पों में cargo, Homebrew, npm, pip, और एक GitHub Action शामिल हैं। फ़ॉर्मेटिंग, लिंटिंग, ऑडिटिंग, निरीक्षण, जनरेशन, और जांच के लिए प्री-कमिट हुक प्रदान किए गए हैं। यह टूल MIT-लाइसेंस प्राप्त है और goldziher.github.io/scythe पर प्रलेखित है।