کوالٹی ایشورنس

ٹیسٹنگ کا طریقۂ کار

موجودہ توثیق PostgreSQL اور SQLite پر معاون ریڈ کوئریز کا احاطہ کرتی ہے، اور Prisma v6، v7، v8، Drizzle اور تیار کردہ SQL کے لیے بینچ مارک رپورٹس موجود ہیں۔

E2E سوٹ
موجودہ
کوئری پیریٹی کی توثیق
پیریٹی کوریج
100%
بائٹ بہ بائٹ مطابقت
ڈیٹابیس انجنز
2
PostgreSQL اور SQLite
ORM بینچ مارکس
4
Prisma v6/v7/v8، Drizzle

ہم درستگی کی توثیق کیسے کرتے ہیں

ہر ٹیسٹ 5 مراحل پر مشتمل ایک سخت توثیقی عمل سے گزرتا ہے تاکہ یقینی ہو کہ تیار کردہ SQL بالکل وہی نتائج دے جو Prisma دیتا ہے

  1. Prisma کوئری سے SQL تیار کریں

    Prisma کوئری کے آرگیومنٹس پارس کریں اور انہی ماڈلز اور اسکیما کے ساتھ مساوی SQL تیار کریں۔ تیار کردہ SQL سیکیورٹی اور کارکردگی کے لیے پیرامیٹرائزڈ کوئریز استعمال کرتا ہے۔

  2. دونوں کوئریز متوازی چلائیں

    تیار کردہ SQL کو postgres.js یا better-sqlite3 کے ذریعے براہِ راست چلائیں، اور وہی کوئری Prisma کے ذریعے چلائیں۔ دونوں ڈیٹابیس کی ایک ہی حالت پر چلتی ہیں۔

  3. نتائج کو نارملائز کریں

    منصفانہ موازنے کے لیے ٹائپ کے فرق (BigInt بمقابلہ Number، Decimal کی پریسیژن، Date کی سیریلائزیشن) کو ہینڈل کریں اور آبجیکٹ کیز کی ترتیب نارملائز کریں۔

  4. گہری مساوات کی جانچ

    تصدیق کریں کہ نتائج بالکل میل کھاتے ہیں: قطاروں کی تعداد، فیلڈ ویلیوز، نیسٹڈ ریلیشنز اور ترتیب سب یکساں ہوں۔ کوئی بھی فرق ٹیسٹ کو فیل کر دیتا ہے۔

  5. کارکردگی کا بینچ مارک

    5 وارم اپ رنز کے ساتھ ایگزیکیوشن ٹائم ناپیں، پھر ہر ٹیسٹ کی 10-50 ایٹریشنز کا اوسط لیں۔ Prisma v6، Prisma v7، Prisma v8 اور Drizzle ORM سے موازنہ کریں۔

توثیق کی جدید تکنیکیں

ڈیٹا ٹائپ نارملائزیشن

BigInt کی تبدیلی
موازنے کے لیے JavaScript BigInt → Number
Decimal ہینڈلنگ
Prisma Decimal → 10 ہندسوں کی پریسیژن کے ساتھ Float
Date نارملائزیشن
تمام DateTime ویلیوز → null (توجہ ڈیٹا پر، ٹائم اسٹیمپس پر نہیں)
JSON پارسنگ
JSON اسٹرنگز کی خودکار شناخت اور پارسنگ
آبجیکٹ کیز کی ترتیب
یکساں موازنے کے لیے حروفِ تہجی کی ترتیب

کارکردگی کی بینچ مارکنگ

وارم اپ مرحلہ
کیشز اور JIT کو تیار کرنے کے لیے 5 ایٹریشنز
ایڈاپٹو ایٹریشنز
کوئری کی پیچیدگی کے مطابق 5-50 رنز
الگ تھلگ پیمائش
ہر کوئری ٹائپ الگ سے ناپی جاتی ہے
کئی ORMs کا موازنہ
Prisma v6، v7، v8، Drizzle، تیار کردہ SQL
SQL تیار کرنے کا وقت
کوئری تیار کرنے کے اوور ہیڈ کی الگ ٹائمنگ

جامع ٹیسٹ کوریج

ٹیسٹ پیچیدگی کی مختلف سطحوں پر Prisma کے ہر ریڈ آپریشن کا احاطہ کرتے ہیں

کوئری آپریشنز

  • پیچیدہ فلٹرز کے ساتھ findMany
  • skip اور پیجینیشن کے ساتھ findFirst
  • ID اور یونیک فیلڈز کے ذریعے findUnique
  • WHERE شرائط کے ساتھ count
  • aggregate (sum, avg, min, max)
  • HAVING کلازز کے ساتھ groupBy

پیچیدہ صورتیں

  • نیسٹڈ include (4 سطحوں تک)
  • ریلیشن فلٹرز (some/every/none)
  • ونڈو فنکشنز کے ساتھ Distinct
  • کرسر پیجینیشن
  • Select + include ایک ساتھ
  • ریلیشن کاؤنٹس (_count)

فلٹر کی اقسام

  • موازنہ (lt/lte/gt/gte)
  • منطقی (AND/OR/NOT)
  • اسٹرنگ آپریشنز (contains/startsWith)
  • NULL کی جانچ (is/isNot)
  • IN/NOT IN اریز
  • کیس سینسیٹیویٹی موڈز

PostgreSQL ٹیسٹنگ

  • ILIKE کے ذریعے کیس اِن سینسیٹو تلاش
  • JSON/JSONB آپریشنز
  • ارے فیلڈز کی ہینڈلنگ
  • کمپوزٹ ٹائپ سپورٹ
  • ونڈو فنکشنز کی توثیق
  • ٹرانزیکشن آئسولیشن ٹیسٹنگ

SQLite ٹیسٹنگ

  • LIKE پیٹرن میچنگ
  • JSON1 ایکسٹینشن کی توثیق
  • ونڈو فنکشنز کی ایمولیشن
  • DISTINCT آپٹیمائزیشن
  • سب کوئری کوریلیشن
  • Text affinity کی ہینڈلنگ

مثالی ٹیسٹ کیس

دیکھیں ہم ریلیشن فلٹرز کے ساتھ ایک پیچیدہ نیسٹڈ کوئری کی توثیق کیسے کرتے ہیں

tests/e2e/postgres.test.ts
it('nested relation filter', () =>
  runParityTest(
    db,
    benchmarkResults,
    'findMany nested relation',
    'Organization',
    {
      method: 'findMany',
      where: {
        projects: {
          some: {
            tasks: { some: { status: 'DONE' } }
          }
        }
      }
    },
    () => db.prisma.organization.findMany({
      where: {
        projects: {
          some: {
            tasks: { some: { status: 'DONE' } }
          }
        }
      },
      orderBy: { id: 'asc' }
    }),
  )
)

// runParityTest اندرونی طور پر:
// 1. آرگیومنٹس کے ساتھ generateSQL() کال کرتا ہے
// 2. تیار کردہ SQL براہِ راست چلاتا ہے
// 3. Prisma کوئری چلاتا ہے
// 4. دونوں نتائج نارملائز کرتا ہے
// 5. گہری مساوات کی جانچ - کوئی بھی فرق ہو تو فیل
// 6. ایگزیکیوشن ٹائم کا بینچ مارک کرتا ہے

ٹیسٹ ایگزیکیوشن کے دوران کیا ہوتا ہے

  1. 1کوئری کی تیاری (مائیکرو سیکنڈز)

    generateSQL() فنکشن Prisma آرگیومنٹس پارس کر کے پیرامیٹرائزڈ SQL بناتا ہے۔ کوئری کی تیاری کا اوور ہیڈ ناپنے کے لیے اس مرحلے کا الگ بینچ مارک کیا جاتا ہے۔

  2. 2متوازی ایگزیکیوشن (ملی سیکنڈز)

    دونوں کوئریز Promise.all() کے ذریعے بیک وقت ڈیٹابیس کی ایک ہی حالت پر چلتی ہیں، جس سے منصفانہ موازنہ اور یکساں ڈیٹا حالات یقینی ہوتے ہیں۔

  3. 3گہری نارملائزیشن

    نتائج کی ریکرسیو نارملائزیشن ہوتی ہے: BigInt→Number، Decimal→Float(10)، Date→null، JSON پارس، کیز کی ترتیب۔ اس سے بائٹ بہ بائٹ موازنے کی درستگی یقینی ہوتی ہے۔

  4. 4سخت مساوات

    صفر رواداری کے ساتھ JSON stringify موازنہ۔ قطاروں کی تعداد، فیلڈ ویلیوز، نیسٹڈ آبجیکٹس یا ترتیب میں کوئی بھی فرق تفصیلی diff آؤٹ پٹ کے ساتھ ٹیسٹ فیل کر دیتا ہے۔

  5. 5کارکردگی کی پیمائش

    توثیق کے بعد 5-50 ایٹریشنز اوسط ایگزیکیوشن ٹائم ناپتی ہیں۔ نتائج میں شامل ہیں: Prisma v6، Prisma v7، Prisma v8، Drizzle ORM، تیار کردہ SQL، اور SQL تیار کرنے کا اوور ہیڈ۔

کئی ورژنز پر توثیق

ہر بینچ مارک شدہ ٹیسٹ، جہاں سپورٹ ہو، Prisma v6، v7 اور v8 پر چلتا ہے:

Prisma v6 (6.19.3)

  • PrismaClient کا براہِ راست استعمال
  • پرانا انجن آرکیٹیکچر
  • بنیادی کارکردگی کے میٹرکس

Prisma v7 (7.10.0)

  • اڈاپٹر پر مبنی آرکیٹیکچر
  • @prisma/adapter-pg اور adapter-better-sqlite3
  • نئے انجن کی آپٹیمائزیشنز

Prisma v8 (8.1.0-dev.1)

  • Prisma v8 dev ریلیز کی کوریج
  • اڈاپٹر پر مبنی آرکیٹیکچر
  • PostgreSQL اور SQLite بینچ مارک پیریٹی

خودکار بینچ مارک رپورٹس

مکمل شفافیت کے لیے تمام بینچ مارک نتائج خودکار طور پر تیار ہو کر JSON فائلوں میں محفوظ کیے جاتے ہیں:

ہر فائل میں شامل ہیں: ٹیسٹ کا نام، Prisma ایگزیکیوشن ٹائم، تیار کردہ SQL کا وقت، Drizzle کا وقت، رفتار میں اضافے کے تناسب، اور ISO ٹائم اسٹیمپ۔

مکمل ٹیسٹ سوٹ دیکھیں

توثیقی سوٹ اور بینچ مارک رپورٹس اوپن سورس ہیں۔ ٹیسٹ کوڈ، بینچ مارک ڈیٹا اور پیریٹی چیکس کا جائزہ لیں۔