Sqler — Query Builder

Sqler یک query builder روان برای MySQL و SQLite است. از همان API برای هر دو backend استفاده می‌کند.

چرا Sqler؟

  • از SQL injection جلوگیری می‌کند (پارامترهای bind‌شده)
  • کوئری‌های قابل ترکیب و قابل استفاده مجدد
  • IDE-friendly با تکمیل خودکار
  • API یکسان برای MySQL و SQLite

کلاس‌های اصلی

کلاس توضیح
Sqler Query builder اصلی
QField ارجاع به ستون (برای JOIN‌ها)
QVar مقدار literal (برای مقایسه‌های ستون با ستون)
QSelect subquery برای SELECT‌های تو در تو

SELECT

var sqler = Sqler(table: usersTable);

var users = await sqler
    .select(['id', 'name', 'email'])
    .where('is_active', '=', true)
    .orderBy('name')
    .limit(10)
    .offset(20)
    .get();

چند شرط WHERE

var results = await sqler
    .where('age', '>', 18)
    .where('role', '=', 'admin')
    .orWhere('is_superuser', '=', true)
    .get();

JOIN

var results = await sqler
    .join(
      table: rolesTable,
      on: QField('users.role_id', '=', QField('roles.id')),
    )
    .select(['users.name', 'roles.title'])
    .get();

INSERT

// درج یک ردیف — ID درج‌شده برمی‌گرداند
var id = await sqler.insert({
  'name': 'علی',
  'email': '[email protected]',
  'is_active': true,
});

// درج دسته‌ای
await sqler.insertMany([
  {'name': 'علی',  'email': '[email protected]'},
  {'name': 'سارا', 'email': '[email protected]'},
]);

UPDATE

var affected = await sqler
    .where('id', '=', userId)
    .update({'name': 'علی احمدی', 'updated_at': DateTime.now()});

DELETE

var deleted = await sqler
    .where('id', '=', userId)
    .delete();

GROUP BY و HAVING

var stats = await sqler
    .select(['department', 'COUNT(*) as total', 'AVG(salary) as avg_salary'])
    .groupBy('department')
    .having('total', '>', 5)
    .orderBy('avg_salary', desc: true)
    .get();

متدهای کمکی

// تعداد ردیف‌ها
int count = await sqler.where('is_active', '=', true).count();

// بررسی وجود
bool exists = await sqler.where('email', '=', email).exists();

// دریافت یک ردیف
Map<String, dynamic>? row = await sqler.where('id', '=', id).first();

// دریافت ستون‌های تکی
var emails = await sqler.pluck('email');