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');