نمای کلی اجرایی و اهمیت معماری
نسخه Prisma v8.0.0-rc.20 یک نقطه عطف تکاملی مهم برای زنجیره ابزار Prisma ORM است که بهبودهای حیاتی معماری را در موتور CLI، زبان طرحواره پریزما (PSL) و زیرسیستمهای مهاجرت رابطهای معرفی میکند. در قلب این انتشار، پذیرش نسخه 0.9.0 از @prisma/cli-engine قرار دارد که خروجی ترمینال قابل خواندن برای انسان را به طور اساسی از جریانهای JSON قابل تجزیه ماشینی جدا میکند. با هدایت دقیق گزارشهای انسانی به stderr و رزرو کردن stdout برای خطوط دادههای تمیز و جدا شده با تب (مگر اینکه به صراحت از طریق پرچم --json لغو شود)، این نسخه یک قرارداد قابل پیشبینیتر و قویتر را برای خطوط لوله خودکار CI، اسکریپتهای پوسته و عوامل برنامهنویسی اعمال میکند.
فراتر از ارگونومی خط فرمان، این انتشار به نگرانیهای ساختاری عمیق در رابطه با پایداری قرارداد، تفکیک نوع و اجرای ایمنی نوع میپردازد. با جابجایی نمایش نامهای مستعار نوع به طور مستقیم در تعاریف ستونها در قرارداد و سازندگان SQL، پریزما تضمین میکند که هَشهای ذخیرهسازی و قراردادهای طرحواره، وفاداری مطلق را با ساختارهای پایگاه داده زیرین حفظ کنند. این تنظیمات سیستماتیک، خرابیهای پنهان زمان اجرا را با انتقال عدم تطابقهای احتمالی قرارداد و حذف ستونهای گمشده به طور مستقیم به خطاهای نوع زمان کامپایل، از بین میبرند. در نتیجه، معماریهای سازمانی که به تولید طرحواره خودکار، خطوط لوله مهاجرت پیچیده و افزونههای چند پایگاه داده متکی هستند، از تضمینهای قطعی افزایشیافته بهرهمند میشوند.
بهبودهای هسته و ارگونومی توسعهدهنده
ارگونومی توسعهدهنده از طریق بهبودهای در مدلسازی طرحواره و ایمنی تولید SQL، تقویت بزرگی دریافت میکند. در PSL، نامهای مستعار نوع اکنون میتوانند به طور یکپارچه هوکهای @default، @onCreate و @onUpdate را مدیریت کنند و نحوه اعلام خصوصیات ستونهای تخصصی را سادهتر سازند. به جای حفظ اشارهگرهای نام مستعار میانی در لایههای ذخیرهسازی، معماری قرارداد اکنون پارامترهای کدک زیرین را مستقیماً سریالسازی میکند. این امر نحو سازنده طرحواره TypeScript را ساده کرده و لغتنامههای دستوپا گیر types و کدهای اضافی field.namedType(...) را با انتسابهای ثابت مستقیم با استفاده از field.column(...) جایگزین میکند.
در بخش عملیات پایگاه داده، سازنده پرسوجو SQL با بررسیهای ایمنی سختگیرانه زمان کامپایل تقویت شده است. به طور مشخص، فراخوانی db.sql.<namespace>.<table>.insert(rows) اکنون به شدت اعتبارسنجی میکند که هر ستون غیرقابل تهی که فاقد مقدار پیشفرض است، به صراحت پر شود. پیش از این، حذف چنین ویژگی مۆثری با موفقیت کامپایل میشد تا تنها هنگام برخورد با درایور پایگاه داده به طور غیرقابل پیشبینی با شکست مواجه شود. با کشف این موارد حذفشده در طول بررسی نوع ایستا و ارائه نام دقیق ستونها، پریزما چرخههای اشکالزدایی را به شدت کاهش میدهد. سختگیری مشابهی اکنون برای اعضای شمارش (enum) و متمایزکنندههای MongoDB اعمال میشود و تضمین میکند که مقادیر بدون تبدیلهای نوع مبهم، به شدت از کدکهای داده بومی زیرین خود پیروی میکنند.
ماتریس مقایسه معماری
| بعد معماری | مبنای قبلی (v8.0.0-rc.19) | Prisma v8.0.0-rc.20 | تأثیر معماری |
|---|---|---|---|
| خروجی موتور CLI | JSON خودکار مخلوط با جریانهای stdout بسته به زمینه | جداسازی دقیق: دادههای ساده جدا شده با تب روی stdout، گزارشهای انسانی روی stderr | خطاهای تجزیه را در خطوط لوله CI/CD و اسکریپتهای پوسته برنامهنویسی از بین میبرد |
| تفکیک نوع قرارداد | نامهای مستعار ذخیرهشده از طریق ارجاعات storage.types و typeRef |
سریالسازی مستقیم پارامترهای کدک و انواع در هر ستون | عدم تطابق هَش قرارداد را از بین میبرد و تعاریف طرحواره ذخیرهشده را ساده میکند |
| اعتبارسنجی درج SQL | نقضهای محدودیت در سطح پایگاه داده معوق | بررسیهای زمان کامپایل که ستونهای غیرقابل تهی مورد نیاز را اعمال میکنند | بارهای مفقود را در زمان ساخت به جای اجرای زمان اجرا شناسایی میکند |
| تشخیصهای مهاجرت | اطلاعیههای خرابی عمومی در طول بازرسی طرحواره | به صراحت شیء پایگاه داده هدف را که باعث خرابی شده است نام میبرد | عیبیابی را در طول عملیات پیچیده چند فضانامی سرعت میبخشد |
تغییرات اساسی و هشدارهای مهاجرت
نسخه Prisma v8.0.0-rc.20 چندین تغییر اساسی را معرفی میکند که مستلزم جریانهای کاری مهاجرت عمدی برای برنامهها و افزونهها است. اولاً، تغییر وابستگی به @prisma/cli-engine 0.9.0 به این معنی است که هر اسکریپتی که به خروجی JSON ضمنی از دستوراتی مانند prisma migration status متکی است، باید بهروزرسانی شود تا به صراحت پرچم --json را شامل شود. ثانیاً، قراردادهای ذخیرهشده با استفاده از ارجاعات نام مستعار نوع قدیمی به دلیل هَشهای ذخیرهسازی تغییر یافته بارگذاری نخواهند شد. توسعهدهندگان باید اسکریپتهای ارتقاء خودکار را برای بازنویسی قراردادهای ذخیرهشده و اسنپشاتهای مهاجرت قبل از انتشار مجدد قراردادها و امضای پایگاههای داده از طریق prisma db sign اجرا کنند.
علاوه بر این، قوانین اعتبارسنجی سختگیرانه اکنون درجهای SQL و تعاریف طرحواره MongoDB را اداره میکنند. حذف ستونهای غیرقابل تهی بدون مقادیر پیشفرض منجر به خطاهای کامپایل میشود و نحو شمارش قدیمی MongoDB که از مقادیر کسری برای انواع عدد صحیح یا فیلدهای متنی بدون نقلقول استفاده میکند، با کدهای خطای صریح (PSL_VALUE_TYPE_INCOMPATIBLE یا PSL_VALUE_REFUSED) رد خواهد شد.
راهنمای ارتقاء گام به گام
- بهروزرسانی وابستگیها و اسکریپتهای CLI: وابستگیهای موتور CLI پروژه خود را به نسخه
0.9.0ارتقا دهید و--jsonرا به تمام دستورات برنامهنویسی که خروجی ساختاریافته را میخوانند، اضافه کنید.
# بهروزرسانی اسکریپتهای CI که انتظار خروجی JSON را دارند
prisma migration status --json | jq '.envelope.result'
- بازنویسی قراردادها و امضای مجدد پایگاههای داده: اسکریپت ارتقاء رسمی برنامه یا افزونه را برای پاکسازی ارجاعات نام مستعار نوع منسوخ از قراردادهای ذخیرهشده و اسنپشاتهای مهاجرت اجرا کنید، سپس مجدداً منتشر و امضا کنید.
# اجرای انتشار قرارداد و امضای پایگاه داده
prisma contract emit
prisma db sign --all
- بازسازی سازندگان طرحواره TypeScript: اشیاء لغتنامه
typesقدیمی و پوششهایfield.namedTypeرا با اعلانهای ثابت ستون مستقیم جایگزین کنید.
// پس از ارتقاء: تعریف مستقیم ستونها
const Embedding1536 = field.column(type.pgvector.Vector(1536));
const Post = model('Post', {
fields: { embedding: Embedding1536.optional() },
});
export default { models: { Post } };
