প্রকল্প সম্পর্কে

Scythe হলো একটি কমান্ড-লাইন টুল যা SQL-কে একজন প্রাইমারি ল্যাঙ্গুয়েজ হিসেবে গণ্য করে। এটি অ্যানোটেটেড `.sql` ফাইলগুলোকে স্ট্যাটিকভাবে বিশ্লেষণ করে এবং দশটি প্রোগ্রামিং ভাষার (Rust, Python, TypeScript, Go, Java, Kotlin, C#, Elixir, Ruby, PHP, প্লাস সাধারণ JavaScript) জন্য টাইপ-সেফ ডাটাবেস অ্যাক্সেস কোড—যেমন row types, query functions, এবং type mappings—তৈরি করে। এই কোড জেনারেশনটি দশটি ডাটাবেস ইঞ্জিন (PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, CockroachDB, MSSQL, Oracle, Redshift, Snowflake)-এর সাথে সামঞ্জস্যপূর্ণ। কোনো ডাটাবেস সংযোগ বা নেটওয়ার্ক ছাড়াই জেনারেশন সম্ভব, তাই এটি pre-commit hooks-এর জন্য উপযুক্ত। প্রধান বৈশিষ্ট্যগুলো: - **টাইপ অনুমান**: Nullability JOINs, CTEs, window functions, COALESCE, CASE WHEN, এবং aggregates-এর মাধ্যমে প্রচারিত হয়। Enums, composites, arrays, এবং JSON স্থানীয় ভাষার টাইপে ম্যাপ করা হয়। - **Linting এবং auditing**: 24টি lint নিয়ম (উদাহরণস্বরূপ, WHERE ছাড়া UPDATE, SELECT *) এবং নিরাপত্তা ও মাইগ্রেশন নিরাপত্তার জন্য 35টি audit নিয়ম (GRANT to PUBLIC, literal passwords, destructive DDL)। আউটপুট মানবিক, SARIF, বা JSON ফরম্যাটে পাওয়া যায়। - **Provenance checking**: `scythe check` নিশ্চিত করে যে কমিটেড জেনারেটেড কোড তার উৎস SQL-এর সাথে মেলে কিনা, এবং PostgreSQL-এর বিরুদ্ধে ঐচ্ছিক live schema-drift চেকও করে। - **ডাটাবেস পরিদর্শন**: `scythe inspect` PostgreSQL এবং MySQL/MariaDB-এর জন্য live health checks (foreign keys without covering indexes, RLS disabled) সম্পাদন করে। - **নমনীয় আউটপুট**: Row types Pydantic, msgspec, dataclasses, Zod schemas, বা plain interfaces হিসেবে তৈরি করা যায়; extension types যেমন ltree, citext, বা PostGIS-এর জন্য type overrides দেওয়া যায়। - **অ্যানোটেশন**: `:one`/`:many`-এর বাইরে, শর্তসাপেক্ষ filters-এর জন্য `@optional`, bulk operations-এর জন্য `:batch`, এবং nested results-এর জন্য `@returns :grouped` সাপোর্ট করে। - **sqlc থেকে মাইগ্রেশন**: `scythe migrate` বিদ্যমান `sqlc.yaml` কনফিগারেশন রূপান্তর করে। ইনস্টল করার অপশনগুলোর মধ্যে রয়েছে cargo, Homebrew, npm, pip, এবং একটি GitHub Action। Formatting, linting, auditing, inspecting, generating, এবং checking-এর জন্য pre-commit hooks সরবরাহ করা হয়েছে। টুলটি MIT-লাইসেন্সড এবং goldziher.github.io/scythe-তে ডকুমেন্টেশন পাওয়া যায়।