ماژول SQLite در Node.js

ماژول node:sqlite یک رابط بومی برای کار با پایگاه‌داده‌های SQLite در Node.js فراهم می‌کند. این ماژول از APIهای همگام (synchronous) برای اتصال به پایگاه‌داده، اجرای کوئری‌ها، مدیریت prepared statements، نشست‌ها (sessions)، تغییرات (changesets)، و قابلیت‌های پیشرفته مانند توابع سفارشی، توابع تجمعی (aggregate)، و پرچم‌های امنیتی پشتیبانی می‌کند. هدف این ماژول، ساده‌سازی و ایمن‌سازی ادغام SQLite در برنامه‌های Node.js است.

DatabaseSyncStatementSyncSQLTagStore

~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴

1. معرفی


ماژول node:sqlite با require('node:sqlite') بارگذاری می‌شود. این ماژول به توسعه‌دهندگان اجازه می‌دهد پایگاه‌داده‌های SQLite را در حافظه یا فایل باز کنند، کوئری‌ها را اجرا کنند، و prepared statements را مدیریت کنند.


2. کلاس DatabaseSync


  • new DatabaseSync(path[, options]): باز کردن اتصال پایگاه‌داده.
  • گزینه‌ها شامل readOnly، timeout، enableForeignKeyConstraints، allowExtension، readBigInts و غیره هستند.
  • database.exec(sql): اجرای کوئری‌های SQL بدون بازگرداندن نتیجه.
  • database.close(): بستن اتصال پایگاه‌داده.

3. Prepared Statements (StatementSync)


  • database.prepare(sql): کامپایل کوئری SQL به یک prepared statement.
  • statement.run(): اجرای INSERT/UPDATE/DELETE با پارامترهای بایند شده.
  • statement.get(): دریافت یک ردیف.
  • statement.all(): دریافت همهٔ ردیف‌ها.
  • statement.iterate(): پیمایش ردیف‌ها به‌صورت کارآمد.
  • statement.columns(): ارائهٔ اطلاعات متادیتا دربارهٔ ستون‌ها.

4. SQLTagStore


یک کش LRU برای prepared statements است که با database.createTagStore() ساخته می‌شود. از template literal برای کوئری‌ها پشتیبانی می‌کند:


sql.run`INSERT INTO users VALUES (1, 'Alice')`;
sql.get`SELECT * FROM users WHERE id = ${id}`;

5. توابع سفارشی و تجمعی


  • database.function(name, options, fn): تعریف توابع سفارشی SQLite.
  • database.aggregate(name, options): تعریف توابع تجمعی یا window functions.

6. نشست‌ها و تغییرات


  • database.createSession(): ردیابی تغییرات جدول‌ها.
  • session.changeset(): تولید یک changeset باینری.
  • database.applyChangeset(): اعمال changeset روی پایگاه‌داده دیگر.

7. قابلیت‌های امنیتی


  • database.setAuthorizer(callback): محدودسازی یا بررسی عملیات SQL.
  • database.enableDefensive(true): فعال‌سازی حالت دفاعی برای جلوگیری از خرابکاری.

8. تبدیل نوع داده‌ها


انواع دادهٔ SQLite به جاوااسکریپت نگاشت می‌شوند:


  • NULL → null
  • INTEGER → number یا BigInt
  • REAL → number
  • TEXT → string
  • BLOB → TypedArray یا DataView

9. پشتیبان‌گیری


پایگاه‌داده‌ها را می‌توان با sqlite.backup(sourceDb, path[, options]) پشتیبان‌گیری کرد تا داده‌ها به‌صورت ایمن کپی شوند.


نتیجه‌گیری


ماژول node:sqlite ادغام SQLite را در Node.js ساده و ایمن می‌کند. با APIهای همگام، کش prepared statements، نشست‌ها، و قابلیت‌های امنیتی پیشرفته، این ماژول برای برنامه‌های سبک و ذخیره‌سازی محلی بسیار مناسب است.


نوشته و پژوهش شده توسط دکتر شاهین صیامی