Sqler
Een krachtige en flexibele SQL-query builder voor Dart, gericht op MySQL & SQLite3 met een fluent interface.
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 JOINLeftJoin- LEFT JOINRightJoin- 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.