Sqler — Query Builder
Sqler is een vloeiende query builder voor MySQL en SQLite. Het gebruikt dezelfde API voor beide backends.
Waarom Sqler?
- Voorkomt SQL-injectie (gebonden parameters)
- Samentelbare en herbruikbare queries
- IDE-vriendelijk met automatisch aanvullen
- Uniforme API voor MySQL en SQLite
Kernklassen
| Klasse | Beschrijving |
|---|---|
Sqler |
Hoofd query builder |
QField |
Kolomreferentie (voor JOINs) |
QVar |
Letterlijke waarde (voor kolom-naar-kolom-vergelijkingen) |
QSelect |
Subquery voor geneste SELECTs |
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();
Meerdere WHERE-voorwaarden
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
// Eén rij invoegen — geeft het ingevoegde ID terug
var id = await sqler.insert({
'name': 'Ali',
'email': '[email protected]',
'is_active': true,
});
// Batch-invoeging
await sqler.insertMany([
{'name': 'Ali', 'email': '[email protected]'},
{'name': 'Sara', 'email': '[email protected]'},
]);
UPDATE
var affected = await sqler
.where('id', '=', userId)
.update({'name': 'Ali Ahmadi', 'updated_at': DateTime.now()});
DELETE
var deleted = await sqler
.where('id', '=', userId)
.delete();
GROUP BY en 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();
Hulpmethoden
// Rijen tellen
int count = await sqler.where('is_active', '=', true).count();
// Bestaan controleren
bool exists = await sqler.where('email', '=', email).exists();
// Eén rij ophalen
Map<String, dynamic>? row = await sqler.where('id', '=', id).first();
// Enkele kolommen ophalen
var emails = await sqler.pluck('email');