Sqler

Een krachtige en flexibele SQL-query builder voor Dart, gericht op MySQL & SQLite3 met een fluent interface.

Pub Version Dev Donate issues-closed issues-open Contributions

Functies

  • Fluent Interface: Bouw SQL-queries met method chaining voor betere leesbaarheid
  • Type-Safe: Constructies met compile-time veiligheid
  • Uitgebreide ondersteuning: SELECT, INSERT, UPDATE, DELETE
  • Geavanceerde clausules: WHERE, JOIN, GROUP BY, HAVING, ORDER BY, LIMIT
  • Geparametriseerde queries: Benaming van parameters ter voorkoming van SQL-injectie
  • Correct escapen: Automatische veld-quoting en value-escaping
  • Complexe operaties: Subqueries, CASE statements, aggregate functies
  • MySQL-optimised: Specifiek ontworpen voor MySQL syntaxis
  • SQLite-optimised: Specifiek ontworpen voor SQLite syntaxis

Installatie

Voeg het volgende toe aan je pubspec.yaml:

dependencies:
  sqler: 

Of

dart pub add sqler

Voer uit:

dart pub get

Quick Start

import 'package:sqler/sqler.dart';

void main() {
  // Create Table
  var books = MTable(
    name: 'books',
    fields: [
      MFieldInt(name: 'id', isPrimaryKey: true, isAutoIncrement: true),
      MFieldVarchar(name: 'name', length: 255),
      MFieldVarchar(name: 'author', length: 255),
      MFieldInt(name: 'publication_year'),
      MFieldDate(name: 'published_date'),
      MFieldText(name: 'content'),
    ],
  );

  // Simple SELECT query
  var query = Sqler()
    .addSelect(QSelect('name'))
    .addSelect(QSelect('published_date'))
    .from(QField('books'))
    .where(WhereOne(QField('publication_year'), QO.EQ, QVar(1980)))
    .orderBy(QOrder('name'))
    .limit(10);

  print(query.toSQL());

  /// Print for SQLite:
  print(query.toSQL<Sqlite>());
}

SQLite

Om SQL specifiek voor SQLite te genereren, geef Sqlite als type-parameter aan toSQL:

query.toSQL<Sqlite>()

Kernklassen

Sqler

De hoofdklasse voor querybouw, met fluent interface.

QField

Representeert databasevelden met correcte quoting:

QField('users.name')     // users.`name`
QField('table_name')     // `table_name`

QVar

Representeert waarden met escape:

QVar('string value')     // 'string value'
QVar(123)               // 123
QVar(true)              // true
QVar(null)              // NULL

QSelect

Select-velden met optionele alias:

QSelect('name')                    // `name`
QSelect('users.name', 'user_name') // users.`name` AS `user_name`

Gebruik Voorbeelden

Basale SELECT Query

var query = Sqler()
  .addSelect(QSelect('id'))
  .addSelect(QSelect('name'))
  .addSelect(QSelect('email'))
  .from(QField('users'));

print(query.toSQL());
// SELECT `id`, `name`, `email` FROM `users`

SELECT met WHERE

var query = Sqler()
  .addSelect(QSelect('*'))
  .from(QField('users'))
  .where(AndWhere([
    WhereOne(QField('active'), QO.EQ, QVar(true)),
    WhereOne(QField('age'), QO.GT, QVar(18))
  ]));

print(query.toSQL());
// SELECT * FROM `users` WHERE ( ( `active` = true ) ) AND ( ( `age` > 18 ) )

SELECT met JOINs

var query = Sqler()
  .addSelect(QSelect('users.name'))
  .addSelect(QSelect('profiles.bio'))
  .from(QField('users'))
  .join(LeftJoin('profiles', On([
    Condition(QField('users.id'), QO.EQ, QField('profiles.user_id'))
  ])))
  .where(WhereOne(QField('users.active'), QO.EQ, QVar(true)));

print(query.toSQL());
// SELECT `users`.`name`, `profiles`.`bio` FROM `users` 
// LEFT JOIN `profiles` ON ( ( `users`.`id` = `profiles`.`user_id` ) ) 
// WHERE ( `users`.`active` = true )

INSERT

// Single record insert
var query = Sqler()
  .insert(QField('users'), [
    {
      'name': QVar('John Doe'),
      'email': QVar('[email protected]'),
      'active': QVar(true),
      'age': QVar(30)
    }
  ]);

print(query.toSQL());

UPDATE

var query = Sqler()
  .update(QField('users'), {
    'name': QVar('Updated Name'),
    'email': QVar('[email protected]')
  })
  .where(WhereOne(QField('id'), QO.EQ, QVar(1)));

print(query.toSQL());

DELETE

var query = Sqler()
  .delete()
  .from(QField('users'))
  .where(WhereOne(QField('active'), QO.EQ, QVar(false)));

print(query.toSQL());

Complexe queries met GROUP BY en HAVING

var query = Sqler()
  .addSelect(QSelect('department'))
  .addSelect(QSelectFunc('COUNT', [QField('id')], 'employee_count'))
  .from(QField('employees'))
  .where(WhereOne(QField('active'), QO.EQ, QVar(true)))
  .groupBy(QField('department'))
  .having(HavingOne(QSelectFunc('COUNT', [QField('id')]), QO.GT, QVar(5)))
  .orderBy(QOrder('employee_count', OrderDirection.DESC));

print(query.toSQL());

Geparametriseerde queries

var query = Sqler()
  .addSelect(QSelect('*'))
  .from(QField('users'))
  .where(WhereOne(QField('name'), QO.EQ, QParam('user_name')))
  .param('user_name', QVar('John Doe'));

print(query.toSQL());
// SELECT * FROM `users` WHERE ( `name` = :user_name )

var params = query.getParams();
// {'user_name': QVar('John Doe')}

Operators

QO bevat de vergelijkingsoperatoren zoals EQ, NE, GT, GTE, LT, LTE, LIKE, NOT_LIKE, IN, NOT_IN, IS_NULL, IS_NOT_NULL.

WHERE-voorwaardes

Basic

WhereOne(QField('status'), QO.EQ, QVar('active'))

Gecombineerd

AndWhere([
  WhereOne(QField('active'), QO.EQ, QVar(true)),
  WhereOne(QField('age'), QO.GTE, QVar(18))
])

JOIN types

  • InnerJoin - INNER JOIN
  • LeftJoin - LEFT JOIN
  • RightJoin - RIGHT JOIN
.join(InnerJoin('table2', On([
  Condition(QField('table1.id'), QO.EQ, QField('table2.table1_id'))
])))

🚀 Beta Release - Jouw bijdrage telt!

Sqler is momenteel in beta! We zijn enthousiast over deze SQL query builder en willen graag feedback en bijdragen van de community.

Hoe kun jij helpen

  • 🐛 Bug reports: Vind je iets dat niet werkt? Open een issue.
  • 📝 Documentatie: Help ons documentatie en voorbeelden te verbeteren.
  • 💡 Feature requests: Heb je ideeën voor nieuwe features? Laat het ons weten.
  • 🔧 Code bijdragen: Stuur pull requests om de code te verbeteren.
  • 🧪 Testen: Gebruik Sqler in je projecten en deel je ervaringen.

Toon je steun

  • Star us on GitHub
  • 👍 Like de package
  • 📢 Deel het met anderen

Contributie

Bijdragen zijn welkom — stuur gerust een PR. Voor grotere wijzigingen, open eerst een issue.

Licentie

Dit project is gelicentieerd onder de MIT License — zie LICENSE voor details.

Repository

https://github.com/uproid/sqler