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