Skip to content

Commit

Permalink
eng: const query factories
Browse files Browse the repository at this point in the history
  • Loading branch information
tshedor committed Dec 27, 2024
1 parent aff6860 commit 1aa0021
Show file tree
Hide file tree
Showing 11 changed files with 121 additions and 118 deletions.
5 changes: 5 additions & 0 deletions packages/brick_core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
## Unreleased

## 1.3.1

- `const`antize `Where.exactly` and `OrderBy.{desc|asc}`
- Add deprecation annotation to `Query#copyWith#providerArgs`

## 1.3.0

- **DEPRECATION** `Query(providerArgs: {'limit':})` is now `Query(limit:)`
Expand Down
6 changes: 2 additions & 4 deletions packages/brick_core/lib/src/query/order_by.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,10 @@ class OrderBy {
});

/// Sort by [ascending] order (A-Z).
factory OrderBy.asc(String evaluatedField, {String? associationField}) =>
OrderBy(evaluatedField, associationField: associationField);
const OrderBy.asc(this.evaluatedField, {this.associationField}) : ascending = true;

/// Sort by descending order (Z-A).
factory OrderBy.desc(String evaluatedField, {String? associationField}) =>
OrderBy(evaluatedField, ascending: false, associationField: associationField);
const OrderBy.desc(this.evaluatedField, {this.associationField}) : ascending = false;

/// Construct an [OrderBy] from a JSON map.
factory OrderBy.fromJson(Map<String, dynamic> json) => OrderBy(
Expand Down
1 change: 1 addition & 0 deletions packages/brick_core/lib/src/query/query.dart
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ class Query {
List<LimitBy>? limitBy,
int? offset,
List<OrderBy>? orderBy,
@Deprecated('Use limit, offset, limitBy, orderBy, or forProviders instead.')
Map<String, dynamic>? providerArgs,
List<WhereCondition>? where,
}) =>
Expand Down
5 changes: 3 additions & 2 deletions packages/brick_core/lib/src/query/where.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,9 @@ class Where extends WhereCondition {
conditions = null;

/// A condition written with brevity. [isRequired] defaults `true`.
factory Where.exact(String evaluatedField, value, {bool isRequired = true}) =>
Where(evaluatedField, value: value, compare: Compare.exact, isRequired: isRequired);
const Where.exact(this.evaluatedField, this.value, {this.isRequired = true})
: compare = Compare.exact,
conditions = null;

/// Convenience function to create a [Where] with [Compare.exact].
Where isExactly(dynamic value) =>
Expand Down
2 changes: 1 addition & 1 deletion packages/brick_core/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ homepage: https://github.com/GetDutchie/brick/tree/main/packages/brick_core
issue_tracker: https://github.com/GetDutchie/brick/issues
repository: https://github.com/GetDutchie/brick

version: 1.3.0
version: 1.3.1

environment:
sdk: ">=3.0.0 <4.0.0"
Expand Down
8 changes: 4 additions & 4 deletions packages/brick_core/test/query/order_by_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,17 @@ void main() {
});

test('.asc', () {
expect(OrderBy.asc('name'), const OrderBy('name'));
expect(const OrderBy.asc('name'), const OrderBy('name'));
expect(
OrderBy.asc('name', associationField: 'assoc'),
const OrderBy.asc('name', associationField: 'assoc'),
const OrderBy('name', associationField: 'assoc'),
);
});

test('.desc', () {
expect(OrderBy.desc('name'), const OrderBy('name', ascending: false));
expect(const OrderBy.desc('name'), const OrderBy('name', ascending: false));
expect(
OrderBy.desc('name', associationField: 'assoc'),
const OrderBy.desc('name', associationField: 'assoc'),
const OrderBy('name', ascending: false, associationField: 'assoc'),
);
});
Expand Down
2 changes: 1 addition & 1 deletion packages/brick_core/test/query/where_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ void main() {

group('.firstByField', () {
test('single field', () {
final conditions = [Where.exact('id', 1), Where.exact('name', 'Thomas')];
final conditions = [const Where.exact('id', 1), const Where.exact('name', 'Thomas')];
final result = Where.firstByField('id', conditions);
expect(result, conditions.first);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ void main() async {
group('#queryToPostgresChangeFilter', () {
group('returns null', () {
test('for complex queries', () {
final query = Query.where('pizza', Where.exact('id', 2));
final query = Query.where('pizza', const Where.exact('id', 2));
expect(repository.queryToPostgresChangeFilter<Customer>(query), isNull);
});

Expand Down Expand Up @@ -243,7 +243,7 @@ void main() async {
});

test('.exact', () {
final query = Query(where: [Where.exact('firstName', 'Thomas')]);
const query = Query(where: [Where.exact('firstName', 'Thomas')]);
final filter = repository.queryToPostgresChangeFilter<Customer>(query);

expect(filter!.type, PostgresChangeFilterType.eq);
Expand Down
2 changes: 1 addition & 1 deletion packages/brick_sqlite/test/memory_cache_provider_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void main() {
final instance = Person()..primaryKey = 1;
provider.hydrate<Person>([instance]);
final results = provider.get<Person>(
query: Query(
query: const Query(
where: [Where.exact(InsertTable.PRIMARY_KEY_FIELD, 1)],
limit: 1,
),
Expand Down
42 changes: 21 additions & 21 deletions packages/brick_sqlite/test/query_sql_transformer_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -107,17 +107,17 @@ void main() {
query: Query(
where: [
WherePhrase([
Where.exact('id', 1),
const Where.exact('id', 1),
const Or('name').isExactly('Guy'),
]),
WherePhrase(
const WherePhrase(
[
Where.exact('id', 1),
Where.exact('name', 'Guy'),
],
isRequired: true,
),
WherePhrase([
const WherePhrase([
Where.exact('id', 1),
Where.exact('name', 'Guy'),
]),
Expand All @@ -137,7 +137,7 @@ void main() {
modelDictionary: dictionary,
query: Query(
where: [
Where.exact('id', 1),
const Where.exact('id', 1),
WherePhrase(
[
const Or('name').isExactly('Thomas'),
Expand Down Expand Up @@ -194,17 +194,17 @@ void main() {
query: Query(
where: [
WherePhrase([
Where.exact('id', 1),
const Where.exact('id', 1),
const Or('name').isExactly('Guy'),
]),
WherePhrase(
const WherePhrase(
[
Where.exact('id', 1),
Where.exact('name', 'Guy'),
],
isRequired: true,
),
WherePhrase([
const WherePhrase([
Where.exact('id', 1),
Where.exact('name', 'Guy'),
]),
Expand All @@ -223,7 +223,7 @@ void main() {
'SELECT COUNT(*) FROM `DemoModel` INNER JOIN `DemoModelAssoc` ON `DemoModel`.assoc_DemoModelAssoc_brick_id = `DemoModelAssoc`._brick_id WHERE `DemoModelAssoc`.id = ?';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
where: [
Where.exact('assoc', Where.exact('id', 1)),
],
Expand All @@ -241,7 +241,7 @@ void main() {
'SELECT COUNT(*) FROM `DemoModel` INNER JOIN `DemoModelAssoc` ON `DemoModel`.assoc_DemoModelAssoc_brick_id = `DemoModelAssoc`._brick_id WHERE `DemoModelAssoc`.id = ? AND `DemoModel`.id = ?';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
where: [
Where.exact('assoc', Where.exact('id', 1)),
Where.exact('id', 1),
Expand Down Expand Up @@ -279,7 +279,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` INNER JOIN `DemoModelAssoc` ON `DemoModel`.assoc_DemoModelAssoc_brick_id = `DemoModelAssoc`._brick_id WHERE `DemoModelAssoc`.id = ?';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
where: [
Where.exact('assoc', Where.exact('id', 1)),
],
Expand All @@ -296,7 +296,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` INNER JOIN `_brick_DemoModel_many_assoc` ON `DemoModel`._brick_id = `_brick_DemoModel_many_assoc`.l_DemoModel_brick_id INNER JOIN `DemoModelAssoc` ON `DemoModelAssoc`._brick_id = `_brick_DemoModel_many_assoc`.f_DemoModelAssoc_brick_id WHERE `DemoModelAssoc`.full_name = ?';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
where: [
Where.exact('manyAssoc', Where.exact('assoc', Where.exact('name', 1))),
],
Expand Down Expand Up @@ -336,7 +336,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` INNER JOIN `_brick_DemoModel_many_assoc` ON `DemoModel`._brick_id = `_brick_DemoModel_many_assoc`.l_DemoModel_brick_id INNER JOIN `DemoModelAssoc` ON `DemoModelAssoc`._brick_id = `_brick_DemoModel_many_assoc`.f_DemoModelAssoc_brick_id WHERE `DemoModelAssoc`.id = ?';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
where: [
Where.exact(
'manyAssoc',
Expand Down Expand Up @@ -613,7 +613,7 @@ void main() {
const statement = 'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY id DESC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(orderBy: [OrderBy.desc('id')]),
query: const Query(orderBy: [OrderBy.desc('id')]),
);
await db.rawQuery(sqliteQuery.statement, sqliteQuery.values);

Expand All @@ -626,7 +626,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY last_name DESC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(orderBy: [OrderBy.desc('lastName')]),
query: const Query(orderBy: [OrderBy.desc('lastName')]),
);
await db.rawQuery(sqliteQuery.statement, sqliteQuery.values);

Expand All @@ -639,7 +639,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY many_assoc DESC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(orderBy: [OrderBy.desc('manyAssoc')]),
query: const Query(orderBy: [OrderBy.desc('manyAssoc')]),
);
await db.rawQuery(sqliteQuery.statement, sqliteQuery.values);

Expand All @@ -652,7 +652,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY many_assoc DESC, complex_field_name ASC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
orderBy: [OrderBy.desc('manyAssoc'), OrderBy.asc('complexFieldName')],
),
);
Expand All @@ -668,10 +668,10 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY complex_field_name ASC GROUP BY complex_field_name HAVING complex_field_name > 1000';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(
query: const Query(
orderBy: [OrderBy.asc('complexFieldName')],
forProviders: [
const SqliteProviderQuery(
SqliteProviderQuery(
having: 'complexFieldName > 1000',
groupBy: 'complexFieldName',
),
Expand All @@ -690,7 +690,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY datetime(simple_time) DESC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(orderBy: [OrderBy.desc('simpleTime')]),
query: const Query(orderBy: [OrderBy.desc('simpleTime')]),
);
await db.rawQuery(sqliteQuery.statement, sqliteQuery.values);

Expand All @@ -707,7 +707,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY complex_field_name DESC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(orderBy: [OrderBy.desc('complex_field_name')]),
query: const Query(orderBy: [OrderBy.desc('complex_field_name')]),
);
await db.rawQuery(sqliteQuery.statement, sqliteQuery.values);

Expand All @@ -720,7 +720,7 @@ void main() {
'SELECT DISTINCT `DemoModel`.* FROM `DemoModel` ORDER BY `DemoModelAssoc`.full_name DESC';
final sqliteQuery = QuerySqlTransformer<DemoModel>(
modelDictionary: dictionary,
query: Query(orderBy: [OrderBy.desc('assoc', associationField: 'name')]),
query: const Query(orderBy: [OrderBy.desc('assoc', associationField: 'name')]),
);
await db.rawQuery(sqliteQuery.statement, sqliteQuery.values);

Expand Down
Loading

0 comments on commit 1aa0021

Please sign in to comment.