Merge pull request #84 from dukefirehawk/bug-fix/82

Fixed issue #82
This commit is contained in:
Thomas Hii 2022-10-02 22:24:39 +08:00 committed by GitHub
commit 681e91d024
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 2836 additions and 1258 deletions

View file

@ -1,5 +1,9 @@
# Change Log # Change Log
## 7.0.1
* Fixed issue #82: Fixed issue #82: Removed casting for numeric fields
## 7.0.0 ## 7.0.0
* Require Dart >= 2.17 * Require Dart >= 2.17

View file

@ -16,8 +16,7 @@ class EmployeeMigration extends Migration {
table.varChar('unique_id', length: 255).unique(); table.varChar('unique_id', length: 255).unique();
table.varChar('first_name', length: 255); table.varChar('first_name', length: 255);
table.varChar('last_name', length: 255); table.varChar('last_name', length: 255);
table.declareColumn( table.double('salary');
'salary', Column(type: ColumnType('decimal'), length: 255));
}); });
} }
@ -93,8 +92,12 @@ class EmployeeQuery extends Query<Employee, EmployeeQueryWhere> {
} }
var model = Employee( var model = Employee(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null, createdAt: fields.contains('created_at')
updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null, ? mapToNullableDateTime(row[1])
: null,
updatedAt: fields.contains('updated_at')
? mapToNullableDateTime(row[2])
: null,
uniqueId: fields.contains('unique_id') ? (row[3] as String?) : null, uniqueId: fields.contains('unique_id') ? (row[3] as String?) : null,
firstName: fields.contains('first_name') ? (row[4] as String?) : null, firstName: fields.contains('first_name') ? (row[4] as String?) : null,
lastName: fields.contains('last_name') ? (row[5] as String?) : null, lastName: fields.contains('last_name') ? (row[5] as String?) : null,
@ -141,7 +144,7 @@ class EmployeeQueryWhere extends QueryWhere {
class EmployeeQueryValues extends MapQueryValues { class EmployeeQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'salary': 'decimal'}; return {'salary': 'double precision'};
} }
String? get id { String? get id {
@ -175,10 +178,10 @@ class EmployeeQueryValues extends MapQueryValues {
set lastName(String? value) => values['last_name'] = value; set lastName(String? value) => values['last_name'] = value;
double? get salary { double? get salary {
return double.tryParse((values['salary'] as String)); return (values['salary'] as double?) ?? 0.0;
} }
set salary(double? value) => values['salary'] = value.toString(); set salary(double? value) => values['salary'] = value;
void copyFrom(Employee model) { void copyFrom(Employee model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;

View file

@ -103,17 +103,19 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
..types.add(refer('String'))) ..types.add(refer('String')))
..type = MethodType.getter ..type = MethodType.getter
..body = Block((b) { ..body = Block((b) {
var args = <String?, Expression>{}; var args = <String, Expression>{};
/* Remove casts no numeric values
for (var field in ctx.effectiveFields) { for (var field in ctx.effectiveFields) {
var name = ctx.buildContext.resolveFieldName(field.name); var name = ctx.buildContext.resolveFieldName(field.name);
var type = ctx.columns[field.name]?.type; var type = ctx.columns[field.name]?.type;
if (type == null) continue; if (type == null) continue;
if (floatTypes.contains(type)) { if (floatTypes.contains(type)) {
//args[name] = literalString('text'); //args[name] = literalString('text');
args[name] = literalString('char'); args[name!] = literalString('char');
} }
} }
*/
b.addExpression(literalMap(args).returned); b.addExpression(literalMap(args).returned);
}); });
@ -857,9 +859,11 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
if (const TypeChecker.fromRuntime(List) if (const TypeChecker.fromRuntime(List)
.isAssignableFromType(fType)) { .isAssignableFromType(fType)) {
args[name] = literalString(type.name); args[name] = literalString(type.name);
} else if (floatTypes.contains(type)) {
args[name] = literalString(type.name);
} }
/* else if (floatTypes.contains(type)) {
args[name] = literalString(type.name);
} */
} }
b.addExpression(literalMap(args).returned); b.addExpression(literalMap(args).returned);
@ -887,10 +891,14 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
.property('cast') .property('cast')
.call([]); .call([]);
} else if (floatTypes.contains(ctx.columns[field.name]?.type)) { } else if (floatTypes.contains(ctx.columns[field.name]?.type)) {
value = refer('double') // Skip using casts on double
.property('tryParse') value = value
.call([value.asA(refer('String'))]).ifNullThen( .asA(refer('double?'))
CodeExpression(Code('0.0'))); .ifNullThen(CodeExpression(Code('0.0')));
//value = refer('double')
// .property('tryParse')
// .call([value.asA(refer('String'))]).ifNullThen(
// CodeExpression(Code('0.0')));
} else { } else {
value = value.asA(type); value = value.asA(type);
} }
@ -910,10 +918,12 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
} else if (const TypeChecker.fromRuntime(List) } else if (const TypeChecker.fromRuntime(List)
.isAssignableFromType(fType)) { .isAssignableFromType(fType)) {
value = refer('json').property('encode').call([value]); value = refer('json').property('encode').call([value]);
} else if (floatTypes.contains(ctx.columns[field.name]?.type)) {
value = value.property('toString').call([]);
} }
/* else if (floatTypes.contains(ctx.columns[field.name]?.type)) {
value = value.property('toString').call([]);
} */
b b
..name = field.name ..name = field.name
..type = MethodType.setter ..type = MethodType.setter

View file

@ -1,5 +1,5 @@
name: angel3_orm_generator name: angel3_orm_generator
version: 7.0.0 version: 7.0.1
description: Code generators for Angel3 ORM. Generates query builder classes. description: Code generators for Angel3 ORM. Generates query builder classes.
homepage: https://angel3-framework.web.app/ homepage: https://angel3-framework.web.app/
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator

View file

@ -1,7 +1,7 @@
CREATE TABLE IF NOT EXISTS feet ( CREATE TABLE IF NOT EXISTS feet (
id serial PRIMARY KEY, id serial PRIMARY KEY,
leg_id int NOT NULL, leg_id int NOT NULL,
n_toes int NOT NULL, n_toes double precision NOT NULL,
created_at datetime, created_at datetime,
updated_at datetime updated_at datetime
); );

View file

@ -16,13 +16,13 @@ dev_dependencies:
angel3_orm_test: ^7.0.0 angel3_orm_test: ^7.0.0
test: ^1.21.0 test: ^1.21.0
lints: ^2.0.0 lints: ^2.0.0
# dependency_overrides: dependency_overrides:
# angel3_serialize: # angel3_serialize:
# path: ../../serialize/angel_serialize # path: ../../serialize/angel_serialize
# angel3_model: # angel3_model:
# path: ../../model # path: ../../model
# angel3_orm_test: angel3_orm_test:
# path: ../angel_orm_test path: ../angel_orm_test
# angel3_orm: # angel3_orm:
# path: ../angel_orm # path: ../angel_orm
# angel3_migration: # angel3_migration:

View file

@ -3,6 +3,7 @@ CREATE TEMPORARY TABLE "cars" (
make varchar(255) NOT NULL, make varchar(255) NOT NULL,
description TEXT NOT NULL, description TEXT NOT NULL,
family_friendly BOOLEAN NOT NULL, family_friendly BOOLEAN NOT NULL,
price double precision,
recalled_at timestamp, recalled_at timestamp,
created_at timestamp, created_at timestamp,
updated_at timestamp updated_at timestamp

View file

@ -1,7 +1,7 @@
CREATE TEMPORARY TABLE "feet" ( CREATE TEMPORARY TABLE "feet" (
id serial PRIMARY KEY, id serial PRIMARY KEY,
leg_id int NOT NULL, leg_id int NOT NULL,
n_toes int NOT NULL, n_toes double precision NOT NULL,
created_at timestamp, created_at timestamp,
updated_at timestamp updated_at timestamp
); );

View file

@ -1,5 +1,9 @@
# Change Log # Change Log
## 7.0.1
* Fixed issue #82: Removed casting for numeric fields
## 7.0.0 ## 7.0.0
* Require Dart >= 2.17 * Require Dart >= 2.17

View file

@ -9,12 +9,18 @@ part of 'asset.dart';
class ItemMigration extends Migration { class ItemMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('items', (table) { schema.create(
'items',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('description', length: 255); table.varChar(
}); 'description',
length: 255,
);
},
);
} }
@override @override
@ -26,19 +32,31 @@ class ItemMigration extends Migration {
class AssetMigration extends Migration { class AssetMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('assets', (table) { schema.create(
'assets',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('description', length: 255); table.varChar(
table.varChar('name', length: 255); 'description',
length: 255,
);
table.varChar(
'name',
length: 255,
);
table.double('price'); table.double('price');
}); },
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('assets', cascade: true); schema.drop(
'assets',
cascade: true,
);
} }
} }
@ -47,7 +65,10 @@ class AssetMigration extends Migration {
// ************************************************************************** // **************************************************************************
class ItemQuery extends Query<Item, ItemQueryWhere> { class ItemQuery extends Query<Item, ItemQueryWhere> {
ItemQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { ItemQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = ItemQueryWhere(this); _where = ItemQueryWhere(this);
@ -72,7 +93,12 @@ class ItemQuery extends Query<Item, ItemQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'description']; const _fields = [
'id',
'created_at',
'updated_at',
'description',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -99,13 +125,12 @@ class ItemQuery extends Query<Item, ItemQueryWhere> {
} }
var model = Item( var model = Item(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) description: fields.contains('description') ? (row[3] as String) : '',
: null, );
description: fields.contains('description') ? (row[3] as String) : '');
return Optional.of(model); return Optional.of(model);
} }
@ -117,10 +142,22 @@ class ItemQuery extends Query<Item, ItemQueryWhere> {
class ItemQueryWhere extends QueryWhere { class ItemQueryWhere extends QueryWhere {
ItemQueryWhere(ItemQuery query) ItemQueryWhere(ItemQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
description = StringSqlExpressionBuilder(query, 'description'); ),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
description = StringSqlExpressionBuilder(
query,
'description',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -132,7 +169,12 @@ class ItemQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, description]; return [
id,
createdAt,
updatedAt,
description,
];
} }
} }
@ -170,19 +212,28 @@ class ItemQueryValues extends MapQueryValues {
} }
class AssetQuery extends Query<Asset, AssetQueryWhere> { class AssetQuery extends Query<Asset, AssetQueryWhere> {
AssetQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { AssetQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = AssetQueryWhere(this); _where = AssetQueryWhere(this);
leftJoin(_items = ItemQuery(trampoline: trampoline, parent: this), 'id', leftJoin(
_items = ItemQuery(
trampoline: trampoline,
parent: this,
),
'id',
'asset_id', 'asset_id',
additionalFields: const [ additionalFields: const [
'id', 'id',
'created_at', 'created_at',
'updated_at', 'updated_at',
'description' 'description',
], ],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -196,7 +247,7 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'char'}; return {};
} }
@override @override
@ -212,7 +263,7 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
'updated_at', 'updated_at',
'description', 'description',
'name', 'name',
'price' 'price',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -240,15 +291,14 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
} }
var model = Asset( var model = Asset(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
description: fields.contains('description') ? (row[3] as String) : '', description: fields.contains('description') ? (row[3] as String) : '',
name: fields.contains('name') ? (row[4] as String) : '', name: fields.contains('name') ? (row[4] as String) : '',
price: fields.contains('price') ? mapToDouble(row[5]) : 0.0); price: fields.contains('price') ? mapToDouble(row[5]) : 0.0,
);
if (row.length > 6) { if (row.length > 6) {
var modelOpt = ItemQuery().parseRow(row.skip(6).take(4).toList()); var modelOpt = ItemQuery().parseRow(row.skip(6).take(4).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -324,12 +374,30 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
class AssetQueryWhere extends QueryWhere { class AssetQueryWhere extends QueryWhere {
AssetQueryWhere(AssetQuery query) AssetQueryWhere(AssetQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
description = StringSqlExpressionBuilder(query, 'description'), ),
name = StringSqlExpressionBuilder(query, 'name'), createdAt = DateTimeSqlExpressionBuilder(
price = NumericSqlExpressionBuilder<double>(query, 'price'); query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
description = StringSqlExpressionBuilder(
query,
'description',
),
name = StringSqlExpressionBuilder(
query,
'name',
),
price = NumericSqlExpressionBuilder<double>(
query,
'price',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -345,14 +413,21 @@ class AssetQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, description, name, price]; return [
id,
createdAt,
updatedAt,
description,
name,
price,
];
} }
} }
class AssetQueryValues extends MapQueryValues { class AssetQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'double precision'}; return {};
} }
String? get id { String? get id {
@ -381,10 +456,10 @@ class AssetQueryValues extends MapQueryValues {
set name(String value) => values['name'] = value; set name(String value) => values['name'] = value;
double get price { double get price {
return double.tryParse((values['price'] as String)) ?? 0.0; return (values['price'] as double?) ?? 0.0;
} }
set price(double value) => values['price'] = value.toString(); set price(double value) => values['price'] = value;
void copyFrom(Asset model) { void copyFrom(Asset model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -400,7 +475,12 @@ class AssetQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Item extends _Item { class Item extends _Item {
Item({this.id, this.createdAt, this.updatedAt, required this.description}); Item({
this.id,
this.createdAt,
this.updatedAt,
required this.description,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -417,11 +497,12 @@ class Item extends _Item {
@override @override
String description; String description;
Item copyWith( Item copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? description}) { String? description,
}) {
return Item( return Item(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -440,7 +521,12 @@ class Item extends _Item {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, description]); return hashObjects([
id,
createdAt,
updatedAt,
description,
]);
} }
@override @override
@ -455,15 +541,15 @@ class Item extends _Item {
@generatedSerializable @generatedSerializable
class Asset extends _Asset { class Asset extends _Asset {
Asset( Asset({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
required this.description, required this.description,
required this.name, required this.name,
required this.price, required this.price,
List<_Item> items = const []}) List<_Item> items = const [],
: items = List.unmodifiable(items); }) : items = List.unmodifiable(items);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -489,14 +575,15 @@ class Asset extends _Asset {
@override @override
List<_Item> items; List<_Item> items;
Asset copyWith( Asset copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? description, String? description,
String? name, String? name,
double? price, double? price,
List<_Item>? items}) { List<_Item>? items,
}) {
return Asset( return Asset(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -522,8 +609,15 @@ class Asset extends _Asset {
@override @override
int get hashCode { int get hashCode {
return hashObjects( return hashObjects([
[id, createdAt, updatedAt, description, name, price, items]); id,
createdAt,
updatedAt,
description,
name,
price,
items,
]);
} }
@override @override
@ -597,7 +691,7 @@ abstract class ItemFields {
id, id,
createdAt, createdAt,
updatedAt, updatedAt,
description description,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -678,7 +772,7 @@ abstract class AssetFields {
description, description,
name, name,
price, price,
items items,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,17 +9,26 @@ part of 'bike.dart';
class BikeMigration extends Migration { class BikeMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('bikes', (table) { schema.create(
'bikes',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('make', length: 255); table.varChar(
table.varChar('description', length: 255); 'make',
length: 255,
);
table.varChar(
'description',
length: 255,
);
table.boolean('family_friendly'); table.boolean('family_friendly');
table.timeStamp('recalled_at'); table.timeStamp('recalled_at');
table.double('price'); table.double('price');
table.integer('width'); table.integer('width');
}); },
);
} }
@override @override
@ -33,7 +42,10 @@ class BikeMigration extends Migration {
// ************************************************************************** // **************************************************************************
class BikeQuery extends Query<Bike, BikeQueryWhere> { class BikeQuery extends Query<Bike, BikeQueryWhere> {
BikeQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { BikeQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = BikeQueryWhere(this); _where = BikeQueryWhere(this);
@ -48,7 +60,7 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'char'}; return {};
} }
@override @override
@ -67,7 +79,7 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
'family_friendly', 'family_friendly',
'recalled_at', 'recalled_at',
'price', 'price',
'width' 'width',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -95,12 +107,10 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
} }
var model = Bike( var model = Bike(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
make: fields.contains('make') ? (row[3] as String) : '', make: fields.contains('make') ? (row[3] as String) : '',
description: fields.contains('description') ? (row[4] as String) : '', description: fields.contains('description') ? (row[4] as String) : '',
familyFriendly: familyFriendly:
@ -109,7 +119,8 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
? mapToDateTime(row[6]) ? mapToDateTime(row[6])
: DateTime.parse("1970-01-01 00:00:00"), : DateTime.parse("1970-01-01 00:00:00"),
price: fields.contains('price') ? mapToDouble(row[7]) : 0.0, price: fields.contains('price') ? mapToDouble(row[7]) : 0.0,
width: fields.contains('width') ? (row[8] as int) : 0); width: fields.contains('width') ? (row[8] as int) : 0,
);
return Optional.of(model); return Optional.of(model);
} }
@ -121,15 +132,42 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
class BikeQueryWhere extends QueryWhere { class BikeQueryWhere extends QueryWhere {
BikeQueryWhere(BikeQuery query) BikeQueryWhere(BikeQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
make = StringSqlExpressionBuilder(query, 'make'), ),
description = StringSqlExpressionBuilder(query, 'description'), createdAt = DateTimeSqlExpressionBuilder(
familyFriendly = BooleanSqlExpressionBuilder(query, 'family_friendly'), query,
recalledAt = DateTimeSqlExpressionBuilder(query, 'recalled_at'), 'created_at',
price = NumericSqlExpressionBuilder<double>(query, 'price'), ),
width = NumericSqlExpressionBuilder<int>(query, 'width'); updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
make = StringSqlExpressionBuilder(
query,
'make',
),
description = StringSqlExpressionBuilder(
query,
'description',
),
familyFriendly = BooleanSqlExpressionBuilder(
query,
'family_friendly',
),
recalledAt = DateTimeSqlExpressionBuilder(
query,
'recalled_at',
),
price = NumericSqlExpressionBuilder<double>(
query,
'price',
),
width = NumericSqlExpressionBuilder<int>(
query,
'width',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -160,7 +198,7 @@ class BikeQueryWhere extends QueryWhere {
familyFriendly, familyFriendly,
recalledAt, recalledAt,
price, price,
width width,
]; ];
} }
} }
@ -168,7 +206,7 @@ class BikeQueryWhere extends QueryWhere {
class BikeQueryValues extends MapQueryValues { class BikeQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'double precision'}; return {};
} }
String? get id { String? get id {
@ -207,10 +245,10 @@ class BikeQueryValues extends MapQueryValues {
set recalledAt(DateTime value) => values['recalled_at'] = value; set recalledAt(DateTime value) => values['recalled_at'] = value;
double get price { double get price {
return double.tryParse((values['price'] as String)) ?? 0.0; return (values['price'] as double?) ?? 0.0;
} }
set price(double value) => values['price'] = value.toString(); set price(double value) => values['price'] = value;
int get width { int get width {
return (values['width'] as int); return (values['width'] as int);
} }
@ -234,8 +272,8 @@ class BikeQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Bike extends _Bike { class Bike extends _Bike {
Bike( Bike({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
required this.make, required this.make,
@ -243,7 +281,8 @@ class Bike extends _Bike {
required this.familyFriendly, required this.familyFriendly,
required this.recalledAt, required this.recalledAt,
required this.price, required this.price,
required this.width}); required this.width,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -275,8 +314,8 @@ class Bike extends _Bike {
@override @override
int width; int width;
Bike copyWith( Bike copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? make, String? make,
@ -284,7 +323,8 @@ class Bike extends _Bike {
bool? familyFriendly, bool? familyFriendly,
DateTime? recalledAt, DateTime? recalledAt,
double? price, double? price,
int? width}) { int? width,
}) {
return Bike( return Bike(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -322,7 +362,7 @@ class Bike extends _Bike {
familyFriendly, familyFriendly,
recalledAt, recalledAt,
price, price,
width width,
]); ]);
} }
@ -416,7 +456,7 @@ abstract class BikeFields {
familyFriendly, familyFriendly,
recalledAt, recalledAt,
price, price,
width width,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,17 +9,30 @@ part of 'boat.dart';
class BoatMigration extends Migration { class BoatMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('boats', (table) { schema.create(
'boats',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('make', length: 255).defaultsTo(''); table
table.varChar('description', length: 255).defaultsTo('none'); .varChar(
'make',
length: 255,
)
.defaultsTo('');
table
.varChar(
'description',
length: 255,
)
.defaultsTo('none');
table.boolean('family_friendly').defaultsTo(false); table.boolean('family_friendly').defaultsTo(false);
table.timeStamp('recalled_at'); table.timeStamp('recalled_at');
table.double('price').defaultsTo(0.0); table.double('price').defaultsTo(0.0);
table.integer('width').defaultsTo(0); table.integer('width').defaultsTo(0);
}); },
);
} }
@override @override
@ -33,7 +46,10 @@ class BoatMigration extends Migration {
// ************************************************************************** // **************************************************************************
class BoatQuery extends Query<Boat, BoatQueryWhere> { class BoatQuery extends Query<Boat, BoatQueryWhere> {
BoatQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { BoatQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = BoatQueryWhere(this); _where = BoatQueryWhere(this);
@ -48,7 +64,7 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'char'}; return {};
} }
@override @override
@ -67,7 +83,7 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
'family_friendly', 'family_friendly',
'recalled_at', 'recalled_at',
'price', 'price',
'width' 'width',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -95,12 +111,10 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
} }
var model = Boat( var model = Boat(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
make: fields.contains('make') ? (row[3] as String) : '', make: fields.contains('make') ? (row[3] as String) : '',
description: fields.contains('description') ? (row[4] as String) : '', description: fields.contains('description') ? (row[4] as String) : '',
familyFriendly: familyFriendly:
@ -109,7 +123,8 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
? mapToDateTime(row[6]) ? mapToDateTime(row[6])
: DateTime.parse("1970-01-01 00:00:00"), : DateTime.parse("1970-01-01 00:00:00"),
price: fields.contains('price') ? mapToDouble(row[7]) : 0.0, price: fields.contains('price') ? mapToDouble(row[7]) : 0.0,
width: fields.contains('width') ? (row[8] as int) : 0); width: fields.contains('width') ? (row[8] as int) : 0,
);
return Optional.of(model); return Optional.of(model);
} }
@ -121,15 +136,42 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
class BoatQueryWhere extends QueryWhere { class BoatQueryWhere extends QueryWhere {
BoatQueryWhere(BoatQuery query) BoatQueryWhere(BoatQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
make = StringSqlExpressionBuilder(query, 'make'), ),
description = StringSqlExpressionBuilder(query, 'description'), createdAt = DateTimeSqlExpressionBuilder(
familyFriendly = BooleanSqlExpressionBuilder(query, 'family_friendly'), query,
recalledAt = DateTimeSqlExpressionBuilder(query, 'recalled_at'), 'created_at',
price = NumericSqlExpressionBuilder<double>(query, 'price'), ),
width = NumericSqlExpressionBuilder<int>(query, 'width'); updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
make = StringSqlExpressionBuilder(
query,
'make',
),
description = StringSqlExpressionBuilder(
query,
'description',
),
familyFriendly = BooleanSqlExpressionBuilder(
query,
'family_friendly',
),
recalledAt = DateTimeSqlExpressionBuilder(
query,
'recalled_at',
),
price = NumericSqlExpressionBuilder<double>(
query,
'price',
),
width = NumericSqlExpressionBuilder<int>(
query,
'width',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -160,7 +202,7 @@ class BoatQueryWhere extends QueryWhere {
familyFriendly, familyFriendly,
recalledAt, recalledAt,
price, price,
width width,
]; ];
} }
} }
@ -168,7 +210,7 @@ class BoatQueryWhere extends QueryWhere {
class BoatQueryValues extends MapQueryValues { class BoatQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'double precision'}; return {};
} }
String? get id { String? get id {
@ -207,10 +249,10 @@ class BoatQueryValues extends MapQueryValues {
set recalledAt(DateTime value) => values['recalled_at'] = value; set recalledAt(DateTime value) => values['recalled_at'] = value;
double get price { double get price {
return double.tryParse((values['price'] as String)) ?? 0.0; return (values['price'] as double?) ?? 0.0;
} }
set price(double value) => values['price'] = value.toString(); set price(double value) => values['price'] = value;
int get width { int get width {
return (values['width'] as int); return (values['width'] as int);
} }
@ -234,8 +276,8 @@ class BoatQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Boat extends _Boat { class Boat extends _Boat {
Boat( Boat({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
required this.make, required this.make,
@ -243,7 +285,8 @@ class Boat extends _Boat {
required this.familyFriendly, required this.familyFriendly,
required this.recalledAt, required this.recalledAt,
required this.price, required this.price,
required this.width}); required this.width,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -275,8 +318,8 @@ class Boat extends _Boat {
@override @override
int width; int width;
Boat copyWith( Boat copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? make, String? make,
@ -284,7 +327,8 @@ class Boat extends _Boat {
bool? familyFriendly, bool? familyFriendly,
DateTime? recalledAt, DateTime? recalledAt,
double? price, double? price,
int? width}) { int? width,
}) {
return Boat( return Boat(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -322,7 +366,7 @@ class Boat extends _Boat {
familyFriendly, familyFriendly,
recalledAt, recalledAt,
price, price,
width width,
]); ]);
} }
@ -416,7 +460,7 @@ abstract class BoatFields {
familyFriendly, familyFriendly,
recalledAt, recalledAt,
price, price,
width width,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,16 +9,36 @@ part of angel_orm3.generator.models.book;
class BookMigration extends Migration { class BookMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('books', (table) { schema.create(
'books',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('name', length: 255); table.varChar(
table.declare('author_id', ColumnType('int')).references('authors', 'id'); 'name',
length: 255,
);
table table
.declare('partner_author_id', ColumnType('int')) .declare(
.references('authors', 'id'); 'author_id',
}); ColumnType('int'),
)
.references(
'authors',
'id',
);
table
.declare(
'partner_author_id',
ColumnType('int'),
)
.references(
'authors',
'id',
);
},
);
} }
@override @override
@ -30,14 +50,20 @@ class BookMigration extends Migration {
class AuthorMigration extends Migration { class AuthorMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('authors', (table) { schema.create(
'authors',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('name', length: 255) table.varChar(
'name',
length: 255,
)
..defaultsTo('Tobe Osakwe') ..defaultsTo('Tobe Osakwe')
..unique(); ..unique();
}); },
);
} }
@override @override
@ -51,18 +77,43 @@ class AuthorMigration extends Migration {
// ************************************************************************** // **************************************************************************
class BookQuery extends Query<Book, BookQueryWhere> { class BookQuery extends Query<Book, BookQueryWhere> {
BookQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { BookQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = BookQueryWhere(this); _where = BookQueryWhere(this);
join(_author = AuthorQuery(trampoline: trampoline, parent: this), join(
'author_id', 'id', _author = AuthorQuery(
additionalFields: const ['id', 'created_at', 'updated_at', 'name'], trampoline: trampoline,
trampoline: trampoline); parent: this,
join(_partnerAuthor = AuthorQuery(trampoline: trampoline, parent: this), ),
'partner_author_id', 'id', 'author_id',
additionalFields: const ['id', 'created_at', 'updated_at', 'name'], 'id',
trampoline: trampoline); additionalFields: const [
'id',
'created_at',
'updated_at',
'name',
],
trampoline: trampoline,
);
join(
_partnerAuthor = AuthorQuery(
trampoline: trampoline,
parent: this,
),
'partner_author_id',
'id',
additionalFields: const [
'id',
'created_at',
'updated_at',
'name',
],
trampoline: trampoline,
);
} }
@override @override
@ -94,7 +145,7 @@ class BookQuery extends Query<Book, BookQueryWhere> {
'updated_at', 'updated_at',
'author_id', 'author_id',
'partner_author_id', 'partner_author_id',
'name' 'name',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -122,13 +173,12 @@ class BookQuery extends Query<Book, BookQueryWhere> {
} }
var model = Book( var model = Book(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) name: fields.contains('name') ? (row[5] as String?) : null,
: null, );
name: fields.contains('name') ? (row[5] as String?) : null);
if (row.length > 6) { if (row.length > 6) {
var modelOpt = AuthorQuery().parseRow(row.skip(6).take(4).toList()); var modelOpt = AuthorQuery().parseRow(row.skip(6).take(4).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -160,13 +210,30 @@ class BookQuery extends Query<Book, BookQueryWhere> {
class BookQueryWhere extends QueryWhere { class BookQueryWhere extends QueryWhere {
BookQueryWhere(BookQuery query) BookQueryWhere(BookQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
authorId = NumericSqlExpressionBuilder<int>(query, 'author_id'), ),
partnerAuthorId = createdAt = DateTimeSqlExpressionBuilder(
NumericSqlExpressionBuilder<int>(query, 'partner_author_id'), query,
name = StringSqlExpressionBuilder(query, 'name'); 'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
authorId = NumericSqlExpressionBuilder<int>(
query,
'author_id',
),
partnerAuthorId = NumericSqlExpressionBuilder<int>(
query,
'partner_author_id',
),
name = StringSqlExpressionBuilder(
query,
'name',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -182,7 +249,14 @@ class BookQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, authorId, partnerAuthorId, name]; return [
id,
createdAt,
updatedAt,
authorId,
partnerAuthorId,
name,
];
} }
} }
@ -236,8 +310,10 @@ class BookQueryValues extends MapQueryValues {
} }
class AuthorQuery extends Query<Author, AuthorQueryWhere> { class AuthorQuery extends Query<Author, AuthorQueryWhere> {
AuthorQuery({Query? parent, Set<String>? trampoline}) AuthorQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = AuthorQueryWhere(this); _where = AuthorQueryWhere(this);
@ -262,7 +338,12 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'name']; const _fields = [
'id',
'created_at',
'updated_at',
'name',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -289,13 +370,12 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
} }
var model = Author( var model = Author(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) name: fields.contains('name') ? (row[3] as String?) : null,
: null, );
name: fields.contains('name') ? (row[3] as String?) : null);
return Optional.of(model); return Optional.of(model);
} }
@ -307,10 +387,22 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
class AuthorQueryWhere extends QueryWhere { class AuthorQueryWhere extends QueryWhere {
AuthorQueryWhere(AuthorQuery query) AuthorQueryWhere(AuthorQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
name = StringSqlExpressionBuilder(query, 'name'); ),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
name = StringSqlExpressionBuilder(
query,
'name',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -322,7 +414,12 @@ class AuthorQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, name]; return [
id,
createdAt,
updatedAt,
name,
];
} }
} }
@ -365,13 +462,14 @@ class AuthorQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Book extends _Book { class Book extends _Book {
Book( Book({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.author, this.author,
this.partnerAuthor, this.partnerAuthor,
this.name}); this.name,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -394,13 +492,14 @@ class Book extends _Book {
@override @override
String? name; String? name;
Book copyWith( Book copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
_Author? author, _Author? author,
_Author? partnerAuthor, _Author? partnerAuthor,
String? name}) { String? name,
}) {
return Book( return Book(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -423,7 +522,14 @@ class Book extends _Book {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, author, partnerAuthor, name]); return hashObjects([
id,
createdAt,
updatedAt,
author,
partnerAuthor,
name,
]);
} }
@override @override
@ -438,7 +544,12 @@ class Book extends _Book {
@generatedSerializable @generatedSerializable
class Author extends _Author { class Author extends _Author {
Author({this.id, this.createdAt, this.updatedAt, this.name = 'Tobe Osakwe'}); Author({
this.id,
this.createdAt,
this.updatedAt,
this.name = 'Tobe Osakwe',
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -455,8 +566,12 @@ class Author extends _Author {
@override @override
String? name; String? name;
Author copyWith( Author copyWith({
{String? id, DateTime? createdAt, DateTime? updatedAt, String? name}) { String? id,
DateTime? createdAt,
DateTime? updatedAt,
String? name,
}) {
return Author( return Author(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -475,7 +590,12 @@ class Author extends _Author {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, name]); return hashObjects([
id,
createdAt,
updatedAt,
name,
]);
} }
@override @override
@ -559,7 +679,7 @@ abstract class BookFields {
updatedAt, updatedAt,
author, author,
partnerAuthor, partnerAuthor,
name name,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -632,7 +752,7 @@ abstract class AuthorFields {
id, id,
createdAt, createdAt,
updatedAt, updatedAt,
name name,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -13,4 +13,5 @@ class _Car extends Model {
String? description; String? description;
bool? familyFriendly; bool? familyFriendly;
DateTime? recalledAt; DateTime? recalledAt;
double? price;
} }

View file

@ -9,15 +9,25 @@ part of angel_orm3.generator.models.car;
class CarMigration extends Migration { class CarMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('cars', (table) { schema.create(
'cars',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('make', length: 255); table.varChar(
table.varChar('description', length: 255); 'make',
length: 255,
);
table.varChar(
'description',
length: 255,
);
table.boolean('family_friendly'); table.boolean('family_friendly');
table.timeStamp('recalled_at'); table.timeStamp('recalled_at');
}); table.double('price');
},
);
} }
@override @override
@ -31,7 +41,10 @@ class CarMigration extends Migration {
// ************************************************************************** // **************************************************************************
class CarQuery extends Query<Car, CarQueryWhere> { class CarQuery extends Query<Car, CarQueryWhere> {
CarQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { CarQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = CarQueryWhere(this); _where = CarQueryWhere(this);
@ -63,7 +76,8 @@ class CarQuery extends Query<Car, CarQueryWhere> {
'make', 'make',
'description', 'description',
'family_friendly', 'family_friendly',
'recalled_at' 'recalled_at',
'price',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -91,20 +105,18 @@ class CarQuery extends Query<Car, CarQueryWhere> {
} }
var model = Car( var model = Car(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
make: fields.contains('make') ? (row[3] as String?) : null, make: fields.contains('make') ? (row[3] as String?) : null,
description: description: fields.contains('description') ? (row[4] as String?) : null,
fields.contains('description') ? (row[4] as String?) : null,
familyFriendly: familyFriendly:
fields.contains('family_friendly') ? mapToBool(row[5]) : null, fields.contains('family_friendly') ? mapToBool(row[5]) : null,
recalledAt: fields.contains('recalled_at') recalledAt:
? mapToNullableDateTime(row[6]) fields.contains('recalled_at') ? mapToNullableDateTime(row[6]) : null,
: null); price: fields.contains('price') ? mapToDouble(row[7]) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -116,13 +128,38 @@ class CarQuery extends Query<Car, CarQueryWhere> {
class CarQueryWhere extends QueryWhere { class CarQueryWhere extends QueryWhere {
CarQueryWhere(CarQuery query) CarQueryWhere(CarQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
make = StringSqlExpressionBuilder(query, 'make'), ),
description = StringSqlExpressionBuilder(query, 'description'), createdAt = DateTimeSqlExpressionBuilder(
familyFriendly = BooleanSqlExpressionBuilder(query, 'family_friendly'), query,
recalledAt = DateTimeSqlExpressionBuilder(query, 'recalled_at'); 'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
make = StringSqlExpressionBuilder(
query,
'make',
),
description = StringSqlExpressionBuilder(
query,
'description',
),
familyFriendly = BooleanSqlExpressionBuilder(
query,
'family_friendly',
),
recalledAt = DateTimeSqlExpressionBuilder(
query,
'recalled_at',
),
price = NumericSqlExpressionBuilder<double>(
query,
'price',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -138,6 +175,8 @@ class CarQueryWhere extends QueryWhere {
final DateTimeSqlExpressionBuilder recalledAt; final DateTimeSqlExpressionBuilder recalledAt;
final NumericSqlExpressionBuilder<double> price;
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [ return [
@ -147,7 +186,8 @@ class CarQueryWhere extends QueryWhere {
make, make,
description, description,
familyFriendly, familyFriendly,
recalledAt recalledAt,
price,
]; ];
} }
} }
@ -193,6 +233,11 @@ class CarQueryValues extends MapQueryValues {
} }
set recalledAt(DateTime? value) => values['recalled_at'] = value; set recalledAt(DateTime? value) => values['recalled_at'] = value;
double? get price {
return (values['price'] as double?) ?? 0.0;
}
set price(double? value) => values['price'] = value;
void copyFrom(Car model) { void copyFrom(Car model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -200,6 +245,7 @@ class CarQueryValues extends MapQueryValues {
description = model.description; description = model.description;
familyFriendly = model.familyFriendly; familyFriendly = model.familyFriendly;
recalledAt = model.recalledAt; recalledAt = model.recalledAt;
price = model.price;
} }
} }
@ -209,14 +255,16 @@ class CarQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Car extends _Car { class Car extends _Car {
Car( Car({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.make, this.make,
this.description, this.description,
this.familyFriendly, this.familyFriendly,
this.recalledAt}); this.recalledAt,
this.price,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -242,14 +290,19 @@ class Car extends _Car {
@override @override
DateTime? recalledAt; DateTime? recalledAt;
Car copyWith( @override
{String? id, double? price;
Car copyWith({
String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? make, String? make,
String? description, String? description,
bool? familyFriendly, bool? familyFriendly,
DateTime? recalledAt}) { DateTime? recalledAt,
double? price,
}) {
return Car( return Car(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -257,7 +310,8 @@ class Car extends _Car {
make: make ?? this.make, make: make ?? this.make,
description: description ?? this.description, description: description ?? this.description,
familyFriendly: familyFriendly ?? this.familyFriendly, familyFriendly: familyFriendly ?? this.familyFriendly,
recalledAt: recalledAt ?? this.recalledAt); recalledAt: recalledAt ?? this.recalledAt,
price: price ?? this.price);
} }
@override @override
@ -269,7 +323,8 @@ class Car extends _Car {
other.make == make && other.make == make &&
other.description == description && other.description == description &&
other.familyFriendly == familyFriendly && other.familyFriendly == familyFriendly &&
other.recalledAt == recalledAt; other.recalledAt == recalledAt &&
other.price == price;
} }
@override @override
@ -281,13 +336,14 @@ class Car extends _Car {
make, make,
description, description,
familyFriendly, familyFriendly,
recalledAt recalledAt,
price,
]); ]);
} }
@override @override
String toString() { String toString() {
return 'Car(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, make=$make, description=$description, familyFriendly=$familyFriendly, recalledAt=$recalledAt)'; return 'Car(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, make=$make, description=$description, familyFriendly=$familyFriendly, recalledAt=$recalledAt, price=$price)';
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -342,7 +398,8 @@ class CarSerializer extends Codec<Car, Map> {
? (map['recalled_at'] is DateTime ? (map['recalled_at'] is DateTime
? (map['recalled_at'] as DateTime) ? (map['recalled_at'] as DateTime)
: DateTime.parse(map['recalled_at'].toString())) : DateTime.parse(map['recalled_at'].toString()))
: null); : null,
price: map['price'] as double?);
} }
static Map<String, dynamic> toMap(_Car? model) { static Map<String, dynamic> toMap(_Car? model) {
@ -356,7 +413,8 @@ class CarSerializer extends Codec<Car, Map> {
'make': model.make, 'make': model.make,
'description': model.description, 'description': model.description,
'family_friendly': model.familyFriendly, 'family_friendly': model.familyFriendly,
'recalled_at': model.recalledAt?.toIso8601String() 'recalled_at': model.recalledAt?.toIso8601String(),
'price': model.price
}; };
} }
} }
@ -369,7 +427,8 @@ abstract class CarFields {
make, make,
description, description,
familyFriendly, familyFriendly,
recalledAt recalledAt,
price,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -385,4 +444,6 @@ abstract class CarFields {
static const String familyFriendly = 'family_friendly'; static const String familyFriendly = 'family_friendly';
static const String recalledAt = 'recalled_at'; static const String recalledAt = 'recalled_at';
static const String price = 'price';
} }

View file

@ -9,11 +9,14 @@ part of 'custom_expr.dart';
class NumbersMigration extends Migration { class NumbersMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('numbers', (table) { schema.create(
'numbers',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
}); },
);
} }
@override @override
@ -25,15 +28,27 @@ class NumbersMigration extends Migration {
class AlphabetMigration extends Migration { class AlphabetMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('alphabets', (table) { schema.create(
'alphabets',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('value', length: 255); table.varChar(
'value',
length: 255,
);
table table
.declare('numbers_id', ColumnType('int')) .declare(
.references('numbers', 'id'); 'numbers_id',
}); ColumnType('int'),
)
.references(
'numbers',
'id',
);
},
);
} }
@override @override
@ -47,8 +62,10 @@ class AlphabetMigration extends Migration {
// ************************************************************************** // **************************************************************************
class NumbersQuery extends Query<Numbers, NumbersQueryWhere> { class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
NumbersQuery({Query? parent, Set<String>? trampoline}) NumbersQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
expressions['two'] = 'SELECT 2'; expressions['two'] = 'SELECT 2';
@ -74,7 +91,12 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'two']; const _fields = [
'id',
'created_at',
'updated_at',
'two',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -101,13 +123,12 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
} }
var model = Numbers( var model = Numbers(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) two: fields.contains('two') ? (row[3] as int?) : null,
: null, );
two: fields.contains('two') ? (row[3] as int?) : null);
return Optional.of(model); return Optional.of(model);
} }
@ -119,9 +140,18 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
class NumbersQueryWhere extends QueryWhere { class NumbersQueryWhere extends QueryWhere {
NumbersQueryWhere(NumbersQuery query) NumbersQueryWhere(NumbersQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'); 'id',
),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -131,7 +161,11 @@ class NumbersQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt]; return [
id,
createdAt,
updatedAt,
];
} }
} }
@ -163,15 +197,28 @@ class NumbersQueryValues extends MapQueryValues {
} }
class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> { class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
AlphabetQuery({Query? parent, Set<String>? trampoline}) AlphabetQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = AlphabetQueryWhere(this); _where = AlphabetQueryWhere(this);
leftJoin(_numbers = NumbersQuery(trampoline: trampoline, parent: this), leftJoin(
'numbers_id', 'id', _numbers = NumbersQuery(
additionalFields: const ['id', 'created_at', 'updated_at', 'two'], trampoline: trampoline,
trampoline: trampoline); parent: this,
),
'numbers_id',
'id',
additionalFields: const [
'id',
'created_at',
'updated_at',
'two',
],
trampoline: trampoline,
);
} }
@override @override
@ -195,7 +242,13 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'value', 'numbers_id']; const _fields = [
'id',
'created_at',
'updated_at',
'value',
'numbers_id',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -222,13 +275,12 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
} }
var model = Alphabet( var model = Alphabet(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) value: fields.contains('value') ? (row[3] as String?) : null,
: null, );
value: fields.contains('value') ? (row[3] as String?) : null);
if (row.length > 5) { if (row.length > 5) {
var modelOpt = NumbersQuery().parseRow(row.skip(5).take(4).toList()); var modelOpt = NumbersQuery().parseRow(row.skip(5).take(4).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -250,11 +302,26 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
class AlphabetQueryWhere extends QueryWhere { class AlphabetQueryWhere extends QueryWhere {
AlphabetQueryWhere(AlphabetQuery query) AlphabetQueryWhere(AlphabetQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
value = StringSqlExpressionBuilder(query, 'value'), ),
numbersId = NumericSqlExpressionBuilder<int>(query, 'numbers_id'); createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
value = StringSqlExpressionBuilder(
query,
'value',
),
numbersId = NumericSqlExpressionBuilder<int>(
query,
'numbers_id',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -268,7 +335,13 @@ class AlphabetQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, value, numbersId]; return [
id,
createdAt,
updatedAt,
value,
numbersId,
];
} }
} }
@ -319,7 +392,12 @@ class AlphabetQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Numbers extends _Numbers { class Numbers extends _Numbers {
Numbers({this.id, this.createdAt, this.updatedAt, this.two}); Numbers({
this.id,
this.createdAt,
this.updatedAt,
this.two,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -336,8 +414,12 @@ class Numbers extends _Numbers {
@override @override
int? two; int? two;
Numbers copyWith( Numbers copyWith({
{String? id, DateTime? createdAt, DateTime? updatedAt, int? two}) { String? id,
DateTime? createdAt,
DateTime? updatedAt,
int? two,
}) {
return Numbers( return Numbers(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -356,7 +438,12 @@ class Numbers extends _Numbers {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, two]); return hashObjects([
id,
createdAt,
updatedAt,
two,
]);
} }
@override @override
@ -371,7 +458,13 @@ class Numbers extends _Numbers {
@generatedSerializable @generatedSerializable
class Alphabet extends _Alphabet { class Alphabet extends _Alphabet {
Alphabet({this.id, this.createdAt, this.updatedAt, this.value, this.numbers}); Alphabet({
this.id,
this.createdAt,
this.updatedAt,
this.value,
this.numbers,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -391,12 +484,13 @@ class Alphabet extends _Alphabet {
@override @override
_Numbers? numbers; _Numbers? numbers;
Alphabet copyWith( Alphabet copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? value, String? value,
_Numbers? numbers}) { _Numbers? numbers,
}) {
return Alphabet( return Alphabet(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -417,7 +511,13 @@ class Alphabet extends _Alphabet {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, value, numbers]); return hashObjects([
id,
createdAt,
updatedAt,
value,
numbers,
]);
} }
@override @override
@ -487,7 +587,12 @@ class NumbersSerializer extends Codec<Numbers, Map> {
} }
abstract class NumbersFields { abstract class NumbersFields {
static const List<String> allFields = <String>[id, createdAt, updatedAt, two]; static const List<String> allFields = <String>[
id,
createdAt,
updatedAt,
two,
];
static const String id = 'id'; static const String id = 'id';
@ -560,7 +665,7 @@ abstract class AlphabetFields {
createdAt, createdAt,
updatedAt, updatedAt,
value, value,
numbers numbers,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,28 +9,54 @@ part of 'email_indexed.dart';
class RoleMigration extends Migration { class RoleMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('roles', (table) { schema.create(
table.varChar('role', length: 255).primaryKey(); 'roles',
}); (table) {
table
.varChar(
'role',
length: 255,
)
.primaryKey();
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('roles', cascade: true); schema.drop(
'roles',
cascade: true,
);
} }
} }
class RoleUserMigration extends Migration { class RoleUserMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('role_users', (table) { schema.create(
'role_users',
(table) {
table table
.declare('role_role', ColumnType('varchar')) .declare(
.references('roles', 'role'); 'role_role',
ColumnType('varchar'),
)
.references(
'roles',
'role',
);
table table
.declare('user_email', ColumnType('varchar')) .declare(
.references('users', 'email'); 'user_email',
}); ColumnType('varchar'),
)
.references(
'users',
'email',
);
},
);
} }
@override @override
@ -42,16 +68,33 @@ class RoleUserMigration extends Migration {
class UserMigration extends Migration { class UserMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('users', (table) { schema.create(
table.varChar('email', length: 255).primaryKey(); 'users',
table.varChar('name', length: 255); (table) {
table.varChar('password', length: 255); table
}); .varChar(
'email',
length: 255,
)
.primaryKey();
table.varChar(
'name',
length: 255,
);
table.varChar(
'password',
length: 255,
);
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('users', cascade: true); schema.drop(
'users',
cascade: true,
);
} }
} }
@ -60,7 +103,10 @@ class UserMigration extends Migration {
// ************************************************************************** // **************************************************************************
class RoleQuery extends Query<Role, RoleQueryWhere> { class RoleQuery extends Query<Role, RoleQueryWhere> {
RoleQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { RoleQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = RoleQueryWhere(this); _where = RoleQueryWhere(this);
@ -68,8 +114,13 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
'(SELECT role_users.role_role, users.email, users.name, users.password FROM users LEFT JOIN role_users ON role_users.user_email=users.email)', '(SELECT role_users.role_role, users.email, users.name, users.password FROM users LEFT JOIN role_users ON role_users.user_email=users.email)',
'role', 'role',
'role_role', 'role_role',
additionalFields: const ['email', 'name', 'password'], additionalFields: const [
trampoline: trampoline); 'email',
'name',
'password',
],
trampoline: trampoline,
);
} }
@override @override
@ -195,7 +246,10 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
class RoleQueryWhere extends QueryWhere { class RoleQueryWhere extends QueryWhere {
RoleQueryWhere(RoleQuery query) RoleQueryWhere(RoleQuery query)
: role = StringSqlExpressionBuilder(query, 'role'); : role = StringSqlExpressionBuilder(
query,
'role',
);
final StringSqlExpressionBuilder role; final StringSqlExpressionBuilder role;
@ -222,18 +276,37 @@ class RoleQueryValues extends MapQueryValues {
} }
class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> { class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
RoleUserQuery({Query? parent, Set<String>? trampoline}) RoleUserQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = RoleUserQueryWhere(this); _where = RoleUserQueryWhere(this);
leftJoin(_role = RoleQuery(trampoline: trampoline, parent: this), leftJoin(
'role_role', 'role', _role = RoleQuery(
additionalFields: const ['role'], trampoline: trampoline); trampoline: trampoline,
leftJoin(_user = UserQuery(trampoline: trampoline, parent: this), parent: this,
'user_email', 'email', ),
additionalFields: const ['email', 'name', 'password'], 'role_role',
trampoline: trampoline); 'role',
additionalFields: const ['role'],
trampoline: trampoline,
);
leftJoin(
_user = UserQuery(
trampoline: trampoline,
parent: this,
),
'user_email',
'email',
additionalFields: const [
'email',
'name',
'password',
],
trampoline: trampoline,
);
} }
@override @override
@ -259,7 +332,10 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['role_role', 'user_email']; const _fields = [
'role_role',
'user_email',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -316,8 +392,14 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
class RoleUserQueryWhere extends QueryWhere { class RoleUserQueryWhere extends QueryWhere {
RoleUserQueryWhere(RoleUserQuery query) RoleUserQueryWhere(RoleUserQuery query)
: roleRole = StringSqlExpressionBuilder(query, 'role_role'), : roleRole = StringSqlExpressionBuilder(
userEmail = StringSqlExpressionBuilder(query, 'user_email'); query,
'role_role',
),
userEmail = StringSqlExpressionBuilder(
query,
'user_email',
);
final StringSqlExpressionBuilder roleRole; final StringSqlExpressionBuilder roleRole;
@ -325,7 +407,10 @@ class RoleUserQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [roleRole, userEmail]; return [
roleRole,
userEmail,
];
} }
} }
@ -356,7 +441,10 @@ class RoleUserQueryValues extends MapQueryValues {
} }
class UserQuery extends Query<User, UserQueryWhere> { class UserQuery extends Query<User, UserQueryWhere> {
UserQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { UserQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = UserQueryWhere(this); _where = UserQueryWhere(this);
@ -365,7 +453,8 @@ class UserQuery extends Query<User, UserQueryWhere> {
'email', 'email',
'user_email', 'user_email',
additionalFields: const ['role'], additionalFields: const ['role'],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -387,7 +476,11 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['email', 'name', 'password']; const _fields = [
'email',
'name',
'password',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -415,7 +508,8 @@ class UserQuery extends Query<User, UserQueryWhere> {
var model = User( var model = User(
email: fields.contains('email') ? (row[0] as String?) : null, email: fields.contains('email') ? (row[0] as String?) : null,
name: fields.contains('name') ? (row[1] as String?) : null, name: fields.contains('name') ? (row[1] as String?) : null,
password: fields.contains('password') ? (row[2] as String?) : null); password: fields.contains('password') ? (row[2] as String?) : null,
);
if (row.length > 3) { if (row.length > 3) {
var modelOpt = RoleQuery().parseRow(row.skip(3).take(1).toList()); var modelOpt = RoleQuery().parseRow(row.skip(3).take(1).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -493,9 +587,18 @@ class UserQuery extends Query<User, UserQueryWhere> {
class UserQueryWhere extends QueryWhere { class UserQueryWhere extends QueryWhere {
UserQueryWhere(UserQuery query) UserQueryWhere(UserQuery query)
: email = StringSqlExpressionBuilder(query, 'email'), : email = StringSqlExpressionBuilder(
name = StringSqlExpressionBuilder(query, 'name'), query,
password = StringSqlExpressionBuilder(query, 'password'); 'email',
),
name = StringSqlExpressionBuilder(
query,
'name',
),
password = StringSqlExpressionBuilder(
query,
'password',
);
final StringSqlExpressionBuilder email; final StringSqlExpressionBuilder email;
@ -505,7 +608,11 @@ class UserQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [email, name, password]; return [
email,
name,
password,
];
} }
} }
@ -543,7 +650,10 @@ class UserQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Role implements _Role { class Role implements _Role {
Role({this.role, this.users = const []}); Role({
this.role,
this.users = const [],
});
@override @override
String? role; String? role;
@ -551,7 +661,10 @@ class Role implements _Role {
@override @override
List<_User> users; List<_User> users;
Role copyWith({String? role, List<_User>? users}) { Role copyWith({
String? role,
List<_User>? users,
}) {
return Role(role: role ?? this.role, users: users ?? this.users); return Role(role: role ?? this.role, users: users ?? this.users);
} }
@ -565,7 +678,10 @@ class Role implements _Role {
@override @override
int get hashCode { int get hashCode {
return hashObjects([role, users]); return hashObjects([
role,
users,
]);
} }
@override @override
@ -580,7 +696,10 @@ class Role implements _Role {
@generatedSerializable @generatedSerializable
class RoleUser implements _RoleUser { class RoleUser implements _RoleUser {
RoleUser({this.role, this.user}); RoleUser({
this.role,
this.user,
});
@override @override
_Role? role; _Role? role;
@ -588,7 +707,10 @@ class RoleUser implements _RoleUser {
@override @override
_User? user; _User? user;
RoleUser copyWith({_Role? role, _User? user}) { RoleUser copyWith({
_Role? role,
_User? user,
}) {
return RoleUser(role: role ?? this.role, user: user ?? this.user); return RoleUser(role: role ?? this.role, user: user ?? this.user);
} }
@ -599,7 +721,10 @@ class RoleUser implements _RoleUser {
@override @override
int get hashCode { int get hashCode {
return hashObjects([role, user]); return hashObjects([
role,
user,
]);
} }
@override @override
@ -614,7 +739,12 @@ class RoleUser implements _RoleUser {
@generatedSerializable @generatedSerializable
class User implements _User { class User implements _User {
User({this.email, this.name, this.password, this.roles = const []}); User({
this.email,
this.name,
this.password,
this.roles = const [],
});
@override @override
String? email; String? email;
@ -628,8 +758,12 @@ class User implements _User {
@override @override
List<_Role> roles; List<_Role> roles;
User copyWith( User copyWith({
{String? email, String? name, String? password, List<_Role>? roles}) { String? email,
String? name,
String? password,
List<_Role>? roles,
}) {
return User( return User(
email: email ?? this.email, email: email ?? this.email,
name: name ?? this.name, name: name ?? this.name,
@ -649,7 +783,12 @@ class User implements _User {
@override @override
int get hashCode { int get hashCode {
return hashObjects([email, name, password, roles]); return hashObjects([
email,
name,
password,
roles,
]);
} }
@override @override
@ -710,7 +849,10 @@ class RoleSerializer extends Codec<Role, Map> {
} }
abstract class RoleFields { abstract class RoleFields {
static const List<String> allFields = <String>[role, users]; static const List<String> allFields = <String>[
role,
users,
];
static const String role = 'role'; static const String role = 'role';
@ -762,7 +904,10 @@ class RoleUserSerializer extends Codec<RoleUser, Map> {
} }
abstract class RoleUserFields { abstract class RoleUserFields {
static const List<String> allFields = <String>[role, user]; static const List<String> allFields = <String>[
role,
user,
];
static const String role = 'role'; static const String role = 'role';
@ -817,7 +962,12 @@ class UserSerializer extends Codec<User, Map> {
} }
abstract class UserFields { abstract class UserFields {
static const List<String> allFields = <String>[email, name, password, roles]; static const List<String> allFields = <String>[
email,
name,
password,
roles,
];
static const String email = 'email'; static const String email = 'email';

View file

@ -9,10 +9,16 @@ part of 'fortune.dart';
class FortuneMigration extends Migration { class FortuneMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('fortune', (table) { schema.create(
'fortune',
(table) {
table.integer('id').primaryKey(); table.integer('id').primaryKey();
table.varChar('message', length: 2048); table.varChar(
}); 'message',
length: 2048,
);
},
);
} }
@override @override
@ -26,8 +32,10 @@ class FortuneMigration extends Migration {
// ************************************************************************** // **************************************************************************
class FortuneQuery extends Query<Fortune, FortuneQueryWhere> { class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
FortuneQuery({Query? parent, Set<String>? trampoline}) FortuneQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = FortuneQueryWhere(this); _where = FortuneQueryWhere(this);
@ -52,7 +60,10 @@ class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'message']; const _fields = [
'id',
'message',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -79,7 +90,8 @@ class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
} }
var model = Fortune( var model = Fortune(
id: fields.contains('id') ? (row[0] as int?) : null, id: fields.contains('id') ? (row[0] as int?) : null,
message: fields.contains('message') ? (row[1] as String?) : null); message: fields.contains('message') ? (row[1] as String?) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -91,8 +103,14 @@ class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
class FortuneQueryWhere extends QueryWhere { class FortuneQueryWhere extends QueryWhere {
FortuneQueryWhere(FortuneQuery query) FortuneQueryWhere(FortuneQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
message = StringSqlExpressionBuilder(query, 'message'); query,
'id',
),
message = StringSqlExpressionBuilder(
query,
'message',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -100,7 +118,10 @@ class FortuneQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, message]; return [
id,
message,
];
} }
} }
@ -132,7 +153,10 @@ class FortuneQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Fortune extends _Fortune { class Fortune extends _Fortune {
Fortune({this.id, this.message}); Fortune({
this.id,
this.message,
});
@override @override
int? id; int? id;
@ -140,7 +164,10 @@ class Fortune extends _Fortune {
@override @override
String? message; String? message;
Fortune copyWith({int? id, String? message}) { Fortune copyWith({
int? id,
String? message,
}) {
return Fortune(id: id ?? this.id, message: message ?? this.message); return Fortune(id: id ?? this.id, message: message ?? this.message);
} }
@ -151,7 +178,10 @@ class Fortune extends _Fortune {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, message]); return hashObjects([
id,
message,
]);
} }
@override @override
@ -204,7 +234,10 @@ class FortuneSerializer extends Codec<Fortune, Map> {
} }
abstract class FortuneFields { abstract class FortuneFields {
static const List<String> allFields = <String>[id, message]; static const List<String> allFields = <String>[
id,
message,
];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,12 +9,15 @@ part of 'has_car.dart';
class HasCarMigration extends Migration { class HasCarMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('has_cars', (table) { schema.create(
'has_cars',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.integer('type').defaultsTo(0); table.integer('type').defaultsTo(0);
}); },
);
} }
@override @override
@ -28,8 +31,10 @@ class HasCarMigration extends Migration {
// ************************************************************************** // **************************************************************************
class HasCarQuery extends Query<HasCar, HasCarQueryWhere> { class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
HasCarQuery({Query? parent, Set<String>? trampoline}) HasCarQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = HasCarQueryWhere(this); _where = HasCarQueryWhere(this);
@ -54,7 +59,12 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'type']; const _fields = [
'id',
'created_at',
'updated_at',
'type',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -81,17 +91,16 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
} }
var model = HasCar( var model = HasCar(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
type: fields.contains('type') type: fields.contains('type')
? row[3] == null ? row[3] == null
? null ? null
: CarType.values[(row[3] as int)] : CarType?.values[(row[3] as int)]
: null); : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -103,11 +112,23 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
class HasCarQueryWhere extends QueryWhere { class HasCarQueryWhere extends QueryWhere {
HasCarQueryWhere(HasCarQuery query) HasCarQueryWhere(HasCarQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
type = EnumSqlExpressionBuilder<CarType?>( type = EnumSqlExpressionBuilder<CarType?>(
query, 'type', (v) => v?.index as int); query,
'type',
(v) => v?.index as int,
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -119,7 +140,12 @@ class HasCarQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, type]; return [
id,
createdAt,
updatedAt,
type,
];
} }
} }
@ -145,7 +171,7 @@ class HasCarQueryValues extends MapQueryValues {
set updatedAt(DateTime? value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
CarType? get type { CarType? get type {
return CarType.values[(values['type'] as int)]; return CarType?.values[(values['type'] as int)];
} }
set type(CarType? value) => values['type'] = value?.index; set type(CarType? value) => values['type'] = value?.index;
@ -162,7 +188,12 @@ class HasCarQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class HasCar extends _HasCar { class HasCar extends _HasCar {
HasCar({this.id, this.createdAt, this.updatedAt, this.type = CarType.sedan}); HasCar({
this.id,
this.createdAt,
this.updatedAt,
this.type = CarType.sedan,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -179,8 +210,12 @@ class HasCar extends _HasCar {
@override @override
CarType? type; CarType? type;
HasCar copyWith( HasCar copyWith({
{String? id, DateTime? createdAt, DateTime? updatedAt, CarType? type}) { String? id,
DateTime? createdAt,
DateTime? updatedAt,
CarType? type,
}) {
return HasCar( return HasCar(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -199,7 +234,12 @@ class HasCar extends _HasCar {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, type]); return hashObjects([
id,
createdAt,
updatedAt,
type,
]);
} }
@override @override
@ -256,11 +296,7 @@ class HasCarSerializer extends Codec<HasCar, Map> {
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
type: map['type'] is CarType? type: map['type'] as CarType? ?? CarType.sedan);
? (map['type'] as CarType?) ?? CarType.sedan
: (map['type'] is int
? CarType.values[map['type'] as int]
: CarType.sedan));
} }
static Map<String, dynamic> toMap(_HasCar? model) { static Map<String, dynamic> toMap(_HasCar? model) {
@ -271,7 +307,7 @@ class HasCarSerializer extends Codec<HasCar, Map> {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
'updated_at': model.updatedAt?.toIso8601String(), 'updated_at': model.updatedAt?.toIso8601String(),
'type': model.type != null ? CarType.values.indexOf(model.type!) : null 'type': model.type
}; };
} }
} }
@ -281,7 +317,7 @@ abstract class HasCarFields {
id, id,
createdAt, createdAt,
updatedAt, updatedAt,
type type,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,12 +9,25 @@ part of 'has_map.dart';
class HasMapMigration extends Migration { class HasMapMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('has_maps', (table) { schema.create(
'has_maps',
(table) {
table.declareColumn( table.declareColumn(
'value', Column(type: ColumnType('jsonb'), length: 255)); 'value',
Column(
type: ColumnType('jsonb'),
length: 255,
),
);
table.declareColumn( table.declareColumn(
'list', Column(type: ColumnType('jsonb'), length: 255)); 'list',
}); Column(
type: ColumnType('jsonb'),
length: 255,
),
);
},
);
} }
@override @override
@ -28,8 +41,10 @@ class HasMapMigration extends Migration {
// ************************************************************************** // **************************************************************************
class HasMapQuery extends Query<HasMap, HasMapQueryWhere> { class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
HasMapQuery({Query? parent, Set<String>? trampoline}) HasMapQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = HasMapQueryWhere(this); _where = HasMapQueryWhere(this);
@ -54,7 +69,10 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['value', 'list']; const _fields = [
'value',
'list',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -80,10 +98,10 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
return Optional.empty(); return Optional.empty();
} }
var model = HasMap( var model = HasMap(
value: fields.contains('value') value:
? (row[0] as Map<dynamic, dynamic>?) fields.contains('value') ? (row[0] as Map<dynamic, dynamic>?) : null,
: null, list: fields.contains('list') ? (row[1] as List<dynamic>?) : null,
list: fields.contains('list') ? (row[1] as List<dynamic>?) : null); );
return Optional.of(model); return Optional.of(model);
} }
@ -95,8 +113,14 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
class HasMapQueryWhere extends QueryWhere { class HasMapQueryWhere extends QueryWhere {
HasMapQueryWhere(HasMapQuery query) HasMapQueryWhere(HasMapQuery query)
: value = MapSqlExpressionBuilder(query, 'value'), : value = MapSqlExpressionBuilder(
list = ListSqlExpressionBuilder(query, 'list'); query,
'value',
),
list = ListSqlExpressionBuilder(
query,
'list',
);
final MapSqlExpressionBuilder value; final MapSqlExpressionBuilder value;
@ -104,7 +128,10 @@ class HasMapQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [value, list]; return [
value,
list,
];
} }
} }
@ -120,7 +147,7 @@ class HasMapQueryValues extends MapQueryValues {
set value(Map<dynamic, dynamic>? value) => values['value'] = value; set value(Map<dynamic, dynamic>? value) => values['value'] = value;
List<dynamic>? get list { List<dynamic>? get list {
return (json.decode((values['list'] as String)) as List); return json.decode((values['list'] as String)).cast();
} }
set list(List<dynamic>? value) => values['list'] = json.encode(value); set list(List<dynamic>? value) => values['list'] = json.encode(value);
@ -136,7 +163,10 @@ class HasMapQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class HasMap implements _HasMap { class HasMap implements _HasMap {
HasMap({this.value, this.list = const []}); HasMap({
this.value,
this.list = const [],
});
@override @override
Map<dynamic, dynamic>? value; Map<dynamic, dynamic>? value;
@ -144,7 +174,10 @@ class HasMap implements _HasMap {
@override @override
List<dynamic>? list; List<dynamic>? list;
HasMap copyWith({Map<dynamic, dynamic>? value, List<dynamic>? list}) { HasMap copyWith({
Map<dynamic, dynamic>? value,
List<dynamic>? list,
}) {
return HasMap(value: value ?? this.value, list: list ?? this.list); return HasMap(value: value ?? this.value, list: list ?? this.list);
} }
@ -159,7 +192,10 @@ class HasMap implements _HasMap {
@override @override
int get hashCode { int get hashCode {
return hashObjects([value, list]); return hashObjects([
value,
list,
]);
} }
@override @override
@ -218,7 +254,10 @@ class HasMapSerializer extends Codec<HasMap, Map> {
} }
abstract class HasMapFields { abstract class HasMapFields {
static const List<String> allFields = <String>[value, list]; static const List<String> allFields = <String>[
value,
list,
];
static const String value = 'value'; static const String value = 'value';

View file

@ -9,30 +9,42 @@ part of angel3_orm_generator.test.models.leg;
class LegMigration extends Migration { class LegMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('legs', (table) { schema.create(
'legs',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('name', length: 255); table.varChar(
}); 'name',
length: 255,
);
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('legs', cascade: true); schema.drop(
'legs',
cascade: true,
);
} }
} }
class FootMigration extends Migration { class FootMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('feet', (table) { schema.create(
'feet',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.integer('leg_id'); table.integer('leg_id');
table.double('n_toes'); table.double('n_toes');
}); },
);
} }
@override @override
@ -46,20 +58,29 @@ class FootMigration extends Migration {
// ************************************************************************** // **************************************************************************
class LegQuery extends Query<Leg, LegQueryWhere> { class LegQuery extends Query<Leg, LegQueryWhere> {
LegQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { LegQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = LegQueryWhere(this); _where = LegQueryWhere(this);
leftJoin( leftJoin(
_foot = FootQuery(trampoline: trampoline, parent: this), 'id', 'leg_id', _foot = FootQuery(
trampoline: trampoline,
parent: this,
),
'id',
'leg_id',
additionalFields: const [ additionalFields: const [
'id', 'id',
'created_at', 'created_at',
'updated_at', 'updated_at',
'leg_id', 'leg_id',
'n_toes' 'n_toes',
], ],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -83,7 +104,12 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'name']; const _fields = [
'id',
'created_at',
'updated_at',
'name',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -110,13 +136,12 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
} }
var model = Leg( var model = Leg(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) name: fields.contains('name') ? (row[3] as String?) : null,
: null, );
name: fields.contains('name') ? (row[3] as String?) : null);
if (row.length > 4) { if (row.length > 4) {
var modelOpt = FootQuery().parseRow(row.skip(4).take(5).toList()); var modelOpt = FootQuery().parseRow(row.skip(4).take(5).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -138,10 +163,22 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
class LegQueryWhere extends QueryWhere { class LegQueryWhere extends QueryWhere {
LegQueryWhere(LegQuery query) LegQueryWhere(LegQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
name = StringSqlExpressionBuilder(query, 'name'); ),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
name = StringSqlExpressionBuilder(
query,
'name',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -153,7 +190,12 @@ class LegQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, name]; return [
id,
createdAt,
updatedAt,
name,
];
} }
} }
@ -191,7 +233,10 @@ class LegQueryValues extends MapQueryValues {
} }
class FootQuery extends Query<Foot, FootQueryWhere> { class FootQuery extends Query<Foot, FootQueryWhere> {
FootQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { FootQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = FootQueryWhere(this); _where = FootQueryWhere(this);
@ -206,7 +251,7 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'n_toes': 'char'}; return {};
} }
@override @override
@ -216,7 +261,13 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'leg_id', 'n_toes']; const _fields = [
'id',
'created_at',
'updated_at',
'leg_id',
'n_toes',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -243,14 +294,13 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
} }
var model = Foot( var model = Foot(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
legId: fields.contains('leg_id') ? (row[3] as int?) : null, legId: fields.contains('leg_id') ? (row[3] as int?) : null,
nToes: fields.contains('n_toes') ? mapToDouble(row[4]) : null); nToes: fields.contains('n_toes') ? mapToDouble(row[4]) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -262,11 +312,26 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
class FootQueryWhere extends QueryWhere { class FootQueryWhere extends QueryWhere {
FootQueryWhere(FootQuery query) FootQueryWhere(FootQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
legId = NumericSqlExpressionBuilder<int>(query, 'leg_id'), ),
nToes = NumericSqlExpressionBuilder<double>(query, 'n_toes'); createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
legId = NumericSqlExpressionBuilder<int>(
query,
'leg_id',
),
nToes = NumericSqlExpressionBuilder<double>(
query,
'n_toes',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -280,14 +345,20 @@ class FootQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, legId, nToes]; return [
id,
createdAt,
updatedAt,
legId,
nToes,
];
} }
} }
class FootQueryValues extends MapQueryValues { class FootQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'n_toes': 'double precision'}; return {};
} }
String? get id { String? get id {
@ -311,10 +382,10 @@ class FootQueryValues extends MapQueryValues {
set legId(int? value) => values['leg_id'] = value; set legId(int? value) => values['leg_id'] = value;
double? get nToes { double? get nToes {
return double.tryParse((values['n_toes'] as String)) ?? 0.0; return (values['n_toes'] as double?) ?? 0.0;
} }
set nToes(double? value) => values['n_toes'] = value.toString(); set nToes(double? value) => values['n_toes'] = value;
void copyFrom(Foot model) { void copyFrom(Foot model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -329,7 +400,13 @@ class FootQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Leg extends _Leg { class Leg extends _Leg {
Leg({this.id, this.createdAt, this.updatedAt, this.foot, this.name}); Leg({
this.id,
this.createdAt,
this.updatedAt,
this.foot,
this.name,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -349,12 +426,13 @@ class Leg extends _Leg {
@override @override
String? name; String? name;
Leg copyWith( Leg copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
_Foot? foot, _Foot? foot,
String? name}) { String? name,
}) {
return Leg( return Leg(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -375,7 +453,13 @@ class Leg extends _Leg {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, foot, name]); return hashObjects([
id,
createdAt,
updatedAt,
foot,
name,
]);
} }
@override @override
@ -390,7 +474,13 @@ class Leg extends _Leg {
@generatedSerializable @generatedSerializable
class Foot extends _Foot { class Foot extends _Foot {
Foot({this.id, this.createdAt, this.updatedAt, this.legId, this.nToes}); Foot({
this.id,
this.createdAt,
this.updatedAt,
this.legId,
this.nToes,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -410,12 +500,13 @@ class Foot extends _Foot {
@override @override
double? nToes; double? nToes;
Foot copyWith( Foot copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
int? legId, int? legId,
double? nToes}) { double? nToes,
}) {
return Foot( return Foot(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -436,7 +527,13 @@ class Foot extends _Foot {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, legId, nToes]); return hashObjects([
id,
createdAt,
updatedAt,
legId,
nToes,
]);
} }
@override @override
@ -515,7 +612,7 @@ abstract class LegFields {
createdAt, createdAt,
updatedAt, updatedAt,
foot, foot,
name name,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -589,7 +686,7 @@ abstract class FootFields {
createdAt, createdAt,
updatedAt, updatedAt,
legId, legId,
nToes nToes,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,7 +9,9 @@ part of angel3_orm_generator.test.models.order;
class OrderMigration extends Migration { class OrderMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('orders', (table) { schema.create(
'orders',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
@ -17,9 +19,16 @@ class OrderMigration extends Migration {
table.timeStamp('order_date'); table.timeStamp('order_date');
table.integer('shipper_id'); table.integer('shipper_id');
table table
.declare('customer_id', ColumnType('int')) .declare(
.references('customers', 'id'); 'customer_id',
}); ColumnType('int'),
)
.references(
'customers',
'id',
);
},
);
} }
@override @override
@ -31,11 +40,14 @@ class OrderMigration extends Migration {
class CustomerMigration extends Migration { class CustomerMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('customers', (table) { schema.create(
'customers',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
}); },
);
} }
@override @override
@ -49,14 +61,27 @@ class CustomerMigration extends Migration {
// ************************************************************************** // **************************************************************************
class OrderQuery extends Query<Order, OrderQueryWhere> { class OrderQuery extends Query<Order, OrderQueryWhere> {
OrderQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { OrderQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = OrderQueryWhere(this); _where = OrderQueryWhere(this);
leftJoin(_customer = CustomerQuery(trampoline: trampoline, parent: this), leftJoin(
'customer_id', 'id', _customer = CustomerQuery(
additionalFields: const ['id', 'created_at', 'updated_at'], trampoline: trampoline,
trampoline: trampoline); parent: this,
),
'customer_id',
'id',
additionalFields: const [
'id',
'created_at',
'updated_at',
],
trampoline: trampoline,
);
} }
@override @override
@ -87,7 +112,7 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
'customer_id', 'customer_id',
'employee_id', 'employee_id',
'order_date', 'order_date',
'shipper_id' 'shipper_id',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -115,17 +140,15 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
} }
var model = Order( var model = Order(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
employeeId: fields.contains('employee_id') ? (row[4] as int?) : null, employeeId: fields.contains('employee_id') ? (row[4] as int?) : null,
orderDate: fields.contains('order_date') orderDate:
? mapToNullableDateTime(row[5]) fields.contains('order_date') ? mapToNullableDateTime(row[5]) : null,
: null, shipperId: fields.contains('shipper_id') ? (row[6] as int?) : null,
shipperId: fields.contains('shipper_id') ? (row[6] as int?) : null); );
if (row.length > 7) { if (row.length > 7) {
var modelOpt = CustomerQuery().parseRow(row.skip(7).take(3).toList()); var modelOpt = CustomerQuery().parseRow(row.skip(7).take(3).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -147,13 +170,34 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
class OrderQueryWhere extends QueryWhere { class OrderQueryWhere extends QueryWhere {
OrderQueryWhere(OrderQuery query) OrderQueryWhere(OrderQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
customerId = NumericSqlExpressionBuilder<int>(query, 'customer_id'), ),
employeeId = NumericSqlExpressionBuilder<int>(query, 'employee_id'), createdAt = DateTimeSqlExpressionBuilder(
orderDate = DateTimeSqlExpressionBuilder(query, 'order_date'), query,
shipperId = NumericSqlExpressionBuilder<int>(query, 'shipper_id'); 'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
customerId = NumericSqlExpressionBuilder<int>(
query,
'customer_id',
),
employeeId = NumericSqlExpressionBuilder<int>(
query,
'employee_id',
),
orderDate = DateTimeSqlExpressionBuilder(
query,
'order_date',
),
shipperId = NumericSqlExpressionBuilder<int>(
query,
'shipper_id',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -178,7 +222,7 @@ class OrderQueryWhere extends QueryWhere {
customerId, customerId,
employeeId, employeeId,
orderDate, orderDate,
shipperId shipperId,
]; ];
} }
} }
@ -237,8 +281,10 @@ class OrderQueryValues extends MapQueryValues {
} }
class CustomerQuery extends Query<Customer, CustomerQueryWhere> { class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
CustomerQuery({Query? parent, Set<String>? trampoline}) CustomerQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = CustomerQueryWhere(this); _where = CustomerQueryWhere(this);
@ -263,7 +309,11 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at']; const _fields = [
'id',
'created_at',
'updated_at',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -290,12 +340,11 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
} }
var model = Customer( var model = Customer(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) );
: null);
return Optional.of(model); return Optional.of(model);
} }
@ -307,9 +356,18 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
class CustomerQueryWhere extends QueryWhere { class CustomerQueryWhere extends QueryWhere {
CustomerQueryWhere(CustomerQuery query) CustomerQueryWhere(CustomerQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'); 'id',
),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -319,7 +377,11 @@ class CustomerQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt]; return [
id,
createdAt,
updatedAt,
];
} }
} }
@ -356,14 +418,15 @@ class CustomerQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Order extends _Order { class Order extends _Order {
Order( Order({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.customer, this.customer,
this.employeeId, this.employeeId,
this.orderDate, this.orderDate,
this.shipperId}); this.shipperId,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -389,14 +452,15 @@ class Order extends _Order {
@override @override
int? shipperId; int? shipperId;
Order copyWith( Order copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
_Customer? customer, _Customer? customer,
int? employeeId, int? employeeId,
DateTime? orderDate, DateTime? orderDate,
int? shipperId}) { int? shipperId,
}) {
return Order( return Order(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -421,8 +485,15 @@ class Order extends _Order {
@override @override
int get hashCode { int get hashCode {
return hashObjects( return hashObjects([
[id, createdAt, updatedAt, customer, employeeId, orderDate, shipperId]); id,
createdAt,
updatedAt,
customer,
employeeId,
orderDate,
shipperId,
]);
} }
@override @override
@ -437,7 +508,11 @@ class Order extends _Order {
@generatedSerializable @generatedSerializable
class Customer extends _Customer { class Customer extends _Customer {
Customer({this.id, this.createdAt, this.updatedAt}); Customer({
this.id,
this.createdAt,
this.updatedAt,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -451,7 +526,11 @@ class Customer extends _Customer {
@override @override
DateTime? updatedAt; DateTime? updatedAt;
Customer copyWith({String? id, DateTime? createdAt, DateTime? updatedAt}) { Customer copyWith({
String? id,
DateTime? createdAt,
DateTime? updatedAt,
}) {
return Customer( return Customer(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -468,7 +547,11 @@ class Customer extends _Customer {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt]); return hashObjects([
id,
createdAt,
updatedAt,
]);
} }
@override @override
@ -557,7 +640,7 @@ abstract class OrderFields {
customer, customer,
employeeId, employeeId,
orderDate, orderDate,
shipperId shipperId,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -626,7 +709,11 @@ class CustomerSerializer extends Codec<Customer, Map> {
} }
abstract class CustomerFields { abstract class CustomerFields {
static const List<String> allFields = <String>[id, createdAt, updatedAt]; static const List<String> allFields = <String>[
id,
createdAt,
updatedAt,
];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,13 +9,19 @@ part of angel_orm3.generator.models.person;
class PersonMigration extends Migration { class PersonMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('persons', (table) { schema.create(
'persons',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('name', length: 255); table.varChar(
'name',
length: 255,
);
table.integer('age'); table.integer('age');
}); },
);
} }
@override @override
@ -29,8 +35,10 @@ class PersonMigration extends Migration {
// ************************************************************************** // **************************************************************************
class PersonQuery extends Query<Person, PersonQueryWhere> { class PersonQuery extends Query<Person, PersonQueryWhere> {
PersonQuery({Query? parent, Set<String>? trampoline}) PersonQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = PersonQueryWhere(this); _where = PersonQueryWhere(this);
@ -55,7 +63,13 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'name', 'age']; const _fields = [
'id',
'created_at',
'updated_at',
'name',
'age',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -82,14 +96,13 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
} }
var model = Person( var model = Person(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
name: fields.contains('name') ? (row[3] as String?) : null, name: fields.contains('name') ? (row[3] as String?) : null,
age: fields.contains('age') ? (row[4] as int?) : null); age: fields.contains('age') ? (row[4] as int?) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -101,11 +114,26 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
class PersonQueryWhere extends QueryWhere { class PersonQueryWhere extends QueryWhere {
PersonQueryWhere(PersonQuery query) PersonQueryWhere(PersonQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
name = StringSqlExpressionBuilder(query, 'name'), ),
age = NumericSqlExpressionBuilder<int>(query, 'age'); createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
name = StringSqlExpressionBuilder(
query,
'name',
),
age = NumericSqlExpressionBuilder<int>(
query,
'age',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -119,7 +147,13 @@ class PersonQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, name, age]; return [
id,
createdAt,
updatedAt,
name,
age,
];
} }
} }
@ -164,8 +198,10 @@ class PersonQueryValues extends MapQueryValues {
class PersonWithLastOrderQuery class PersonWithLastOrderQuery
extends Query<PersonWithLastOrder, PersonWithLastOrderQueryWhere> { extends Query<PersonWithLastOrder, PersonWithLastOrderQueryWhere> {
PersonWithLastOrderQuery({Query? parent, Set<String>? trampoline}) PersonWithLastOrderQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
expressions['last_order_name'] = 'po.name'; expressions['last_order_name'] = 'po.name';
@ -183,7 +219,7 @@ class PersonWithLastOrderQuery
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'last_order_price': 'char'}; return {};
} }
@override @override
@ -193,7 +229,11 @@ class PersonWithLastOrderQuery
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['name', 'last_order_name', 'last_order_price']; const _fields = [
'name',
'last_order_name',
'last_order_price',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -223,7 +263,8 @@ class PersonWithLastOrderQuery
lastOrderName: lastOrderName:
fields.contains('last_order_name') ? (row[1] as String?) : null, fields.contains('last_order_name') ? (row[1] as String?) : null,
lastOrderPrice: lastOrderPrice:
fields.contains('last_order_price') ? mapToDouble(row[2]) : null); fields.contains('last_order_price') ? mapToDouble(row[2]) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -235,7 +276,10 @@ class PersonWithLastOrderQuery
class PersonWithLastOrderQueryWhere extends QueryWhere { class PersonWithLastOrderQueryWhere extends QueryWhere {
PersonWithLastOrderQueryWhere(PersonWithLastOrderQuery query) PersonWithLastOrderQueryWhere(PersonWithLastOrderQuery query)
: name = StringSqlExpressionBuilder(query, 'name'); : name = StringSqlExpressionBuilder(
query,
'name',
);
final StringSqlExpressionBuilder name; final StringSqlExpressionBuilder name;
@ -248,7 +292,7 @@ class PersonWithLastOrderQueryWhere extends QueryWhere {
class PersonWithLastOrderQueryValues extends MapQueryValues { class PersonWithLastOrderQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'last_order_price': 'double precision'}; return {};
} }
String? get name { String? get name {
@ -267,7 +311,13 @@ class PersonWithLastOrderQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Person extends _Person { class Person extends _Person {
Person({this.id, this.createdAt, this.updatedAt, this.name, this.age}); Person({
this.id,
this.createdAt,
this.updatedAt,
this.name,
this.age,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -287,12 +337,13 @@ class Person extends _Person {
@override @override
int? age; int? age;
Person copyWith( Person copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? name, String? name,
int? age}) { int? age,
}) {
return Person( return Person(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -313,7 +364,13 @@ class Person extends _Person {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, name, age]); return hashObjects([
id,
createdAt,
updatedAt,
name,
age,
]);
} }
@override @override
@ -328,7 +385,11 @@ class Person extends _Person {
@generatedSerializable @generatedSerializable
class PersonWithLastOrder extends _PersonWithLastOrder { class PersonWithLastOrder extends _PersonWithLastOrder {
PersonWithLastOrder({this.name, this.lastOrderName, this.lastOrderPrice}); PersonWithLastOrder({
this.name,
this.lastOrderName,
this.lastOrderPrice,
});
@override @override
String? name; String? name;
@ -339,8 +400,11 @@ class PersonWithLastOrder extends _PersonWithLastOrder {
@override @override
double? lastOrderPrice; double? lastOrderPrice;
PersonWithLastOrder copyWith( PersonWithLastOrder copyWith({
{String? name, String? lastOrderName, double? lastOrderPrice}) { String? name,
String? lastOrderName,
double? lastOrderPrice,
}) {
return PersonWithLastOrder( return PersonWithLastOrder(
name: name ?? this.name, name: name ?? this.name,
lastOrderName: lastOrderName ?? this.lastOrderName, lastOrderName: lastOrderName ?? this.lastOrderName,
@ -357,7 +421,11 @@ class PersonWithLastOrder extends _PersonWithLastOrder {
@override @override
int get hashCode { int get hashCode {
return hashObjects([name, lastOrderName, lastOrderPrice]); return hashObjects([
name,
lastOrderName,
lastOrderPrice,
]);
} }
@override @override
@ -434,7 +502,7 @@ abstract class PersonFields {
createdAt, createdAt,
updatedAt, updatedAt,
name, name,
age age,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -497,7 +565,7 @@ abstract class PersonWithLastOrderFields {
static const List<String> allFields = <String>[ static const List<String> allFields = <String>[
name, name,
lastOrderName, lastOrderName,
lastOrderPrice lastOrderPrice,
]; ];
static const String name = 'name'; static const String name = 'name';

View file

@ -9,15 +9,21 @@ part of angel3_orm_generator.test.models.person_order;
class PersonOrderMigration extends Migration { class PersonOrderMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('person_orders', (table) { schema.create(
'person_orders',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.integer('person_id'); table.integer('person_id');
table.varChar('name', length: 255); table.varChar(
'name',
length: 255,
);
table.double('price'); table.double('price');
table.boolean('deleted'); table.boolean('deleted');
}); },
);
} }
@override @override
@ -31,8 +37,10 @@ class PersonOrderMigration extends Migration {
// ************************************************************************** // **************************************************************************
class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> { class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
PersonOrderQuery({Query? parent, Set<String>? trampoline}) PersonOrderQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = PersonOrderQueryWhere(this); _where = PersonOrderQueryWhere(this);
@ -47,7 +55,7 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'char'}; return {};
} }
@override @override
@ -64,7 +72,7 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
'person_id', 'person_id',
'name', 'name',
'price', 'price',
'deleted' 'deleted',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -92,16 +100,15 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
} }
var model = PersonOrder( var model = PersonOrder(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
personId: fields.contains('person_id') ? (row[3] as int?) : null, personId: fields.contains('person_id') ? (row[3] as int?) : null,
name: fields.contains('name') ? (row[4] as String?) : null, name: fields.contains('name') ? (row[4] as String?) : null,
price: fields.contains('price') ? mapToDouble(row[5]) : null, price: fields.contains('price') ? mapToDouble(row[5]) : null,
deleted: fields.contains('deleted') ? mapToBool(row[6]) : null); deleted: fields.contains('deleted') ? mapToBool(row[6]) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -113,13 +120,34 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
class PersonOrderQueryWhere extends QueryWhere { class PersonOrderQueryWhere extends QueryWhere {
PersonOrderQueryWhere(PersonOrderQuery query) PersonOrderQueryWhere(PersonOrderQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
personId = NumericSqlExpressionBuilder<int>(query, 'person_id'), ),
name = StringSqlExpressionBuilder(query, 'name'), createdAt = DateTimeSqlExpressionBuilder(
price = NumericSqlExpressionBuilder<double>(query, 'price'), query,
deleted = BooleanSqlExpressionBuilder(query, 'deleted'); 'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
personId = NumericSqlExpressionBuilder<int>(
query,
'person_id',
),
name = StringSqlExpressionBuilder(
query,
'name',
),
price = NumericSqlExpressionBuilder<double>(
query,
'price',
),
deleted = BooleanSqlExpressionBuilder(
query,
'deleted',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -137,14 +165,22 @@ class PersonOrderQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, personId, name, price, deleted]; return [
id,
createdAt,
updatedAt,
personId,
name,
price,
deleted,
];
} }
} }
class PersonOrderQueryValues extends MapQueryValues { class PersonOrderQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'double precision'}; return {};
} }
String? get id { String? get id {
@ -173,10 +209,10 @@ class PersonOrderQueryValues extends MapQueryValues {
set name(String? value) => values['name'] = value; set name(String? value) => values['name'] = value;
double? get price { double? get price {
return double.tryParse((values['price'] as String)) ?? 0.0; return (values['price'] as double?) ?? 0.0;
} }
set price(double? value) => values['price'] = value.toString(); set price(double? value) => values['price'] = value;
bool? get deleted { bool? get deleted {
return (values['deleted'] as bool?); return (values['deleted'] as bool?);
} }
@ -194,8 +230,10 @@ class PersonOrderQueryValues extends MapQueryValues {
class OrderWithPersonInfoQuery class OrderWithPersonInfoQuery
extends Query<OrderWithPersonInfo, OrderWithPersonInfoQueryWhere> { extends Query<OrderWithPersonInfo, OrderWithPersonInfoQueryWhere> {
OrderWithPersonInfoQuery({Query? parent, Set<String>? trampoline}) OrderWithPersonInfoQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
expressions['person_name'] = 'p.name'; expressions['person_name'] = 'p.name';
@ -213,7 +251,7 @@ class OrderWithPersonInfoQuery
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'char'}; return {};
} }
@override @override
@ -231,7 +269,7 @@ class OrderWithPersonInfoQuery
'price', 'price',
'deleted', 'deleted',
'person_name', 'person_name',
'person_age' 'person_age',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -259,17 +297,16 @@ class OrderWithPersonInfoQuery
} }
var model = OrderWithPersonInfo( var model = OrderWithPersonInfo(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
name: fields.contains('name') ? (row[3] as String?) : null, name: fields.contains('name') ? (row[3] as String?) : null,
price: fields.contains('price') ? mapToDouble(row[4]) : null, price: fields.contains('price') ? mapToDouble(row[4]) : null,
deleted: fields.contains('deleted') ? mapToBool(row[5]) : null, deleted: fields.contains('deleted') ? mapToBool(row[5]) : null,
personName: fields.contains('person_name') ? (row[6] as String?) : null, personName: fields.contains('person_name') ? (row[6] as String?) : null,
personAge: fields.contains('person_age') ? (row[7] as int?) : null); personAge: fields.contains('person_age') ? (row[7] as int?) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -281,12 +318,30 @@ class OrderWithPersonInfoQuery
class OrderWithPersonInfoQueryWhere extends QueryWhere { class OrderWithPersonInfoQueryWhere extends QueryWhere {
OrderWithPersonInfoQueryWhere(OrderWithPersonInfoQuery query) OrderWithPersonInfoQueryWhere(OrderWithPersonInfoQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
name = StringSqlExpressionBuilder(query, 'name'), ),
price = NumericSqlExpressionBuilder<double>(query, 'price'), createdAt = DateTimeSqlExpressionBuilder(
deleted = BooleanSqlExpressionBuilder(query, 'deleted'); query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
name = StringSqlExpressionBuilder(
query,
'name',
),
price = NumericSqlExpressionBuilder<double>(
query,
'price',
),
deleted = BooleanSqlExpressionBuilder(
query,
'deleted',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -302,14 +357,21 @@ class OrderWithPersonInfoQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, name, price, deleted]; return [
id,
createdAt,
updatedAt,
name,
price,
deleted,
];
} }
} }
class OrderWithPersonInfoQueryValues extends MapQueryValues { class OrderWithPersonInfoQueryValues extends MapQueryValues {
@override @override
Map<String, String> get casts { Map<String, String> get casts {
return {'price': 'double precision'}; return {};
} }
String? get id { String? get id {
@ -333,10 +395,10 @@ class OrderWithPersonInfoQueryValues extends MapQueryValues {
set name(String? value) => values['name'] = value; set name(String? value) => values['name'] = value;
double? get price { double? get price {
return double.tryParse((values['price'] as String)) ?? 0.0; return (values['price'] as double?) ?? 0.0;
} }
set price(double? value) => values['price'] = value.toString(); set price(double? value) => values['price'] = value;
bool? get deleted { bool? get deleted {
return (values['deleted'] as bool?); return (values['deleted'] as bool?);
} }
@ -357,14 +419,15 @@ class OrderWithPersonInfoQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class PersonOrder extends _PersonOrder { class PersonOrder extends _PersonOrder {
PersonOrder( PersonOrder({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.personId, this.personId,
this.name, this.name,
this.price, this.price,
this.deleted}); this.deleted,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -390,14 +453,15 @@ class PersonOrder extends _PersonOrder {
@override @override
bool? deleted; bool? deleted;
PersonOrder copyWith( PersonOrder copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
int? personId, int? personId,
String? name, String? name,
double? price, double? price,
bool? deleted}) { bool? deleted,
}) {
return PersonOrder( return PersonOrder(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -422,8 +486,15 @@ class PersonOrder extends _PersonOrder {
@override @override
int get hashCode { int get hashCode {
return hashObjects( return hashObjects([
[id, createdAt, updatedAt, personId, name, price, deleted]); id,
createdAt,
updatedAt,
personId,
name,
price,
deleted,
]);
} }
@override @override
@ -438,15 +509,16 @@ class PersonOrder extends _PersonOrder {
@generatedSerializable @generatedSerializable
class OrderWithPersonInfo extends _OrderWithPersonInfo { class OrderWithPersonInfo extends _OrderWithPersonInfo {
OrderWithPersonInfo( OrderWithPersonInfo({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.name, this.name,
this.price, this.price,
this.deleted, this.deleted,
this.personName, this.personName,
this.personAge}); this.personAge,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -475,15 +547,16 @@ class OrderWithPersonInfo extends _OrderWithPersonInfo {
@override @override
int? personAge; int? personAge;
OrderWithPersonInfo copyWith( OrderWithPersonInfo copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? name, String? name,
double? price, double? price,
bool? deleted, bool? deleted,
String? personName, String? personName,
int? personAge}) { int? personAge,
}) {
return OrderWithPersonInfo( return OrderWithPersonInfo(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -518,7 +591,7 @@ class OrderWithPersonInfo extends _OrderWithPersonInfo {
price, price,
deleted, deleted,
personName, personName,
personAge personAge,
]); ]);
} }
@ -602,7 +675,7 @@ abstract class PersonOrderFields {
personId, personId,
name, name,
price, price,
deleted deleted,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -692,7 +765,7 @@ abstract class OrderWithPersonInfoFields {
price, price,
deleted, deleted,
personName, personName,
personAge personAge,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,30 +9,42 @@ part of angel3_orm_generator.test.models.tree;
class TreeMigration extends Migration { class TreeMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('trees', (table) { schema.create(
'trees',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.integer('rings').unique(); table.integer('rings').unique();
}); },
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('trees', cascade: true); schema.drop(
'trees',
cascade: true,
);
} }
} }
class FruitMigration extends Migration { class FruitMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('fruits', (table) { schema.create(
'fruits',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.integer('tree_id'); table.integer('tree_id');
table.varChar('common_name', length: 255); table.varChar(
}); 'common_name',
length: 255,
);
},
);
} }
@override @override
@ -46,20 +58,29 @@ class FruitMigration extends Migration {
// ************************************************************************** // **************************************************************************
class TreeQuery extends Query<Tree, TreeQueryWhere> { class TreeQuery extends Query<Tree, TreeQueryWhere> {
TreeQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { TreeQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = TreeQueryWhere(this); _where = TreeQueryWhere(this);
leftJoin(_fruits = FruitQuery(trampoline: trampoline, parent: this), 'id', leftJoin(
_fruits = FruitQuery(
trampoline: trampoline,
parent: this,
),
'id',
'tree_id', 'tree_id',
additionalFields: const [ additionalFields: const [
'id', 'id',
'created_at', 'created_at',
'updated_at', 'updated_at',
'tree_id', 'tree_id',
'common_name' 'common_name',
], ],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -83,7 +104,12 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'rings']; const _fields = [
'id',
'created_at',
'updated_at',
'rings',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -110,13 +136,12 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
} }
var model = Tree( var model = Tree(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) rings: fields.contains('rings') ? (row[3] as int?) : null,
: null, );
rings: fields.contains('rings') ? (row[3] as int?) : null);
if (row.length > 4) { if (row.length > 4) {
var modelOpt = FruitQuery().parseRow(row.skip(4).take(5).toList()); var modelOpt = FruitQuery().parseRow(row.skip(4).take(5).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -192,10 +217,22 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
class TreeQueryWhere extends QueryWhere { class TreeQueryWhere extends QueryWhere {
TreeQueryWhere(TreeQuery query) TreeQueryWhere(TreeQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
rings = NumericSqlExpressionBuilder<int>(query, 'rings'); ),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
rings = NumericSqlExpressionBuilder<int>(
query,
'rings',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -207,7 +244,12 @@ class TreeQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, rings]; return [
id,
createdAt,
updatedAt,
rings,
];
} }
} }
@ -245,7 +287,10 @@ class TreeQueryValues extends MapQueryValues {
} }
class FruitQuery extends Query<Fruit, FruitQueryWhere> { class FruitQuery extends Query<Fruit, FruitQueryWhere> {
FruitQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { FruitQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = FruitQueryWhere(this); _where = FruitQueryWhere(this);
@ -275,7 +320,7 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
'created_at', 'created_at',
'updated_at', 'updated_at',
'tree_id', 'tree_id',
'common_name' 'common_name',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -303,15 +348,13 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
} }
var model = Fruit( var model = Fruit(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
treeId: fields.contains('tree_id') ? (row[3] as int?) : null, treeId: fields.contains('tree_id') ? (row[3] as int?) : null,
commonName: commonName: fields.contains('common_name') ? (row[4] as String?) : null,
fields.contains('common_name') ? (row[4] as String?) : null); );
return Optional.of(model); return Optional.of(model);
} }
@ -323,11 +366,26 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
class FruitQueryWhere extends QueryWhere { class FruitQueryWhere extends QueryWhere {
FruitQueryWhere(FruitQuery query) FruitQueryWhere(FruitQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
treeId = NumericSqlExpressionBuilder<int>(query, 'tree_id'), ),
commonName = StringSqlExpressionBuilder(query, 'common_name'); createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
treeId = NumericSqlExpressionBuilder<int>(
query,
'tree_id',
),
commonName = StringSqlExpressionBuilder(
query,
'common_name',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -341,7 +399,13 @@ class FruitQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, treeId, commonName]; return [
id,
createdAt,
updatedAt,
treeId,
commonName,
];
} }
} }
@ -390,13 +454,13 @@ class FruitQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class Tree extends _Tree { class Tree extends _Tree {
Tree( Tree({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.rings, this.rings,
List<_Fruit> fruits = const []}) List<_Fruit> fruits = const [],
: fruits = List.unmodifiable(fruits); }) : fruits = List.unmodifiable(fruits);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -416,12 +480,13 @@ class Tree extends _Tree {
@override @override
List<_Fruit> fruits; List<_Fruit> fruits;
Tree copyWith( Tree copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
int? rings, int? rings,
List<_Fruit>? fruits}) { List<_Fruit>? fruits,
}) {
return Tree( return Tree(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -443,7 +508,13 @@ class Tree extends _Tree {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, rings, fruits]); return hashObjects([
id,
createdAt,
updatedAt,
rings,
fruits,
]);
} }
@override @override
@ -458,8 +529,13 @@ class Tree extends _Tree {
@generatedSerializable @generatedSerializable
class Fruit extends _Fruit { class Fruit extends _Fruit {
Fruit( Fruit({
{this.id, this.createdAt, this.updatedAt, this.treeId, this.commonName}); this.id,
this.createdAt,
this.updatedAt,
this.treeId,
this.commonName,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -479,12 +555,13 @@ class Fruit extends _Fruit {
@override @override
String? commonName; String? commonName;
Fruit copyWith( Fruit copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
int? treeId, int? treeId,
String? commonName}) { String? commonName,
}) {
return Fruit( return Fruit(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -505,7 +582,13 @@ class Fruit extends _Fruit {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, treeId, commonName]); return hashObjects([
id,
createdAt,
updatedAt,
treeId,
commonName,
]);
} }
@override @override
@ -585,7 +668,7 @@ abstract class TreeFields {
createdAt, createdAt,
updatedAt, updatedAt,
rings, rings,
fruits fruits,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -659,7 +742,7 @@ abstract class FruitFields {
createdAt, createdAt,
updatedAt, updatedAt,
treeId, treeId,
commonName commonName,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,9 +9,17 @@ part of 'unorthodox.dart';
class UnorthodoxMigration extends Migration { class UnorthodoxMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('unorthodoxes', (table) { schema.create(
table.varChar('name', length: 255).primaryKey(); 'unorthodoxes',
}); (table) {
table
.varChar(
'name',
length: 255,
)
.primaryKey();
},
);
} }
@override @override
@ -23,30 +31,48 @@ class UnorthodoxMigration extends Migration {
class WeirdJoinMigration extends Migration { class WeirdJoinMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('weird_joins', (table) { schema.create(
'weird_joins',
(table) {
table.integer('id').primaryKey(); table.integer('id').primaryKey();
table table
.declare('join_name', ColumnType('varchar')) .declare(
.references('unorthodoxes', 'name'); 'join_name',
}); ColumnType('varchar'),
)
.references(
'unorthodoxes',
'name',
);
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('weird_joins', cascade: true); schema.drop(
'weird_joins',
cascade: true,
);
} }
} }
class SongMigration extends Migration { class SongMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('songs', (table) { schema.create(
'songs',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.integer('weird_join_id'); table.integer('weird_join_id');
table.varChar('title', length: 255); table.varChar(
}); 'title',
length: 255,
);
},
);
} }
@override @override
@ -58,10 +84,13 @@ class SongMigration extends Migration {
class NumbaMigration extends Migration { class NumbaMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('numbas', (table) { schema.create(
'numbas',
(table) {
table.integer('i').primaryKey(); table.integer('i').primaryKey();
table.integer('parent'); table.integer('parent');
}); },
);
} }
@override @override
@ -73,26 +102,54 @@ class NumbaMigration extends Migration {
class FooMigration extends Migration { class FooMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('foos', (table) { schema.create(
table.varChar('bar', length: 255).primaryKey(); 'foos',
}); (table) {
table
.varChar(
'bar',
length: 255,
)
.primaryKey();
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('foos', cascade: true); schema.drop(
'foos',
cascade: true,
);
} }
} }
class FooPivotMigration extends Migration { class FooPivotMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('foo_pivots', (table) { schema.create(
'foo_pivots',
(table) {
table table
.declare('weird_join_id', ColumnType('int')) .declare(
.references('weird_joins', 'id'); 'weird_join_id',
table.declare('foo_bar', ColumnType('varchar')).references('foos', 'bar'); ColumnType('int'),
}); )
.references(
'weird_joins',
'id',
);
table
.declare(
'foo_bar',
ColumnType('varchar'),
)
.references(
'foos',
'bar',
);
},
);
} }
@override @override
@ -106,8 +163,10 @@ class FooPivotMigration extends Migration {
// ************************************************************************** // **************************************************************************
class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> { class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
UnorthodoxQuery({Query? parent, Set<String>? trampoline}) UnorthodoxQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = UnorthodoxQueryWhere(this); _where = UnorthodoxQueryWhere(this);
@ -170,7 +229,10 @@ class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
class UnorthodoxQueryWhere extends QueryWhere { class UnorthodoxQueryWhere extends QueryWhere {
UnorthodoxQueryWhere(UnorthodoxQuery query) UnorthodoxQueryWhere(UnorthodoxQuery query)
: name = StringSqlExpressionBuilder(query, 'name'); : name = StringSqlExpressionBuilder(
query,
'name',
);
final StringSqlExpressionBuilder name; final StringSqlExpressionBuilder name;
@ -197,36 +259,59 @@ class UnorthodoxQueryValues extends MapQueryValues {
} }
class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> { class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
WeirdJoinQuery({Query? parent, Set<String>? trampoline}) WeirdJoinQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = WeirdJoinQueryWhere(this); _where = WeirdJoinQueryWhere(this);
leftJoin( leftJoin(
_unorthodox = UnorthodoxQuery(trampoline: trampoline, parent: this), _unorthodox = UnorthodoxQuery(
trampoline: trampoline,
parent: this,
),
'join_name', 'join_name',
'name', 'name',
additionalFields: const ['name'], additionalFields: const ['name'],
trampoline: trampoline); trampoline: trampoline,
leftJoin(_song = SongQuery(trampoline: trampoline, parent: this), 'id', );
leftJoin(
_song = SongQuery(
trampoline: trampoline,
parent: this,
),
'id',
'weird_join_id', 'weird_join_id',
additionalFields: const [ additionalFields: const [
'id', 'id',
'created_at', 'created_at',
'updated_at', 'updated_at',
'weird_join_id', 'weird_join_id',
'title' 'title',
], ],
trampoline: trampoline); trampoline: trampoline,
leftJoin(_numbas = NumbaQuery(trampoline: trampoline, parent: this), 'id', );
leftJoin(
_numbas = NumbaQuery(
trampoline: trampoline,
parent: this,
),
'id',
'parent', 'parent',
additionalFields: const ['i', 'parent'], trampoline: trampoline); additionalFields: const [
'i',
'parent',
],
trampoline: trampoline,
);
leftJoin( leftJoin(
'(SELECT foo_pivots.weird_join_id, foos.bar FROM foos LEFT JOIN foo_pivots ON foo_pivots.foo_bar=foos.bar)', '(SELECT foo_pivots.weird_join_id, foos.bar FROM foos LEFT JOIN foo_pivots ON foo_pivots.foo_bar=foos.bar)',
'id', 'id',
'weird_join_id', 'weird_join_id',
additionalFields: const ['bar'], additionalFields: const ['bar'],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -254,7 +339,10 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'join_name']; const _fields = [
'id',
'join_name',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -390,8 +478,14 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
class WeirdJoinQueryWhere extends QueryWhere { class WeirdJoinQueryWhere extends QueryWhere {
WeirdJoinQueryWhere(WeirdJoinQuery query) WeirdJoinQueryWhere(WeirdJoinQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
joinName = StringSqlExpressionBuilder(query, 'join_name'); query,
'id',
),
joinName = StringSqlExpressionBuilder(
query,
'join_name',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -399,7 +493,10 @@ class WeirdJoinQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, joinName]; return [
id,
joinName,
];
} }
} }
@ -428,7 +525,10 @@ class WeirdJoinQueryValues extends MapQueryValues {
} }
class SongQuery extends Query<Song, SongQueryWhere> { class SongQuery extends Query<Song, SongQueryWhere> {
SongQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { SongQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = SongQueryWhere(this); _where = SongQueryWhere(this);
@ -458,7 +558,7 @@ class SongQuery extends Query<Song, SongQueryWhere> {
'created_at', 'created_at',
'updated_at', 'updated_at',
'weird_join_id', 'weird_join_id',
'title' 'title',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -486,14 +586,13 @@ class SongQuery extends Query<Song, SongQueryWhere> {
} }
var model = Song( var model = Song(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
weirdJoinId: fields.contains('weird_join_id') ? (row[3] as int?) : null, weirdJoinId: fields.contains('weird_join_id') ? (row[3] as int?) : null,
title: fields.contains('title') ? (row[4] as String?) : null); title: fields.contains('title') ? (row[4] as String?) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -505,11 +604,26 @@ class SongQuery extends Query<Song, SongQueryWhere> {
class SongQueryWhere extends QueryWhere { class SongQueryWhere extends QueryWhere {
SongQueryWhere(SongQuery query) SongQueryWhere(SongQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
weirdJoinId = NumericSqlExpressionBuilder<int>(query, 'weird_join_id'), ),
title = StringSqlExpressionBuilder(query, 'title'); createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
weirdJoinId = NumericSqlExpressionBuilder<int>(
query,
'weird_join_id',
),
title = StringSqlExpressionBuilder(
query,
'title',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -523,7 +637,13 @@ class SongQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, weirdJoinId, title]; return [
id,
createdAt,
updatedAt,
weirdJoinId,
title,
];
} }
} }
@ -567,7 +687,10 @@ class SongQueryValues extends MapQueryValues {
} }
class NumbaQuery extends Query<Numba, NumbaQueryWhere> { class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
NumbaQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { NumbaQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = NumbaQueryWhere(this); _where = NumbaQueryWhere(this);
@ -592,7 +715,10 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['i', 'parent']; const _fields = [
'i',
'parent',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -619,7 +745,8 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
} }
var model = Numba( var model = Numba(
i: fields.contains('i') ? (row[0] as int?) : null, i: fields.contains('i') ? (row[0] as int?) : null,
parent: fields.contains('parent') ? (row[1] as int?) : null); parent: fields.contains('parent') ? (row[1] as int?) : null,
);
return Optional.of(model); return Optional.of(model);
} }
@ -631,8 +758,14 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
class NumbaQueryWhere extends QueryWhere { class NumbaQueryWhere extends QueryWhere {
NumbaQueryWhere(NumbaQuery query) NumbaQueryWhere(NumbaQuery query)
: i = NumericSqlExpressionBuilder<int>(query, 'i'), : i = NumericSqlExpressionBuilder<int>(
parent = NumericSqlExpressionBuilder<int>(query, 'parent'); query,
'i',
),
parent = NumericSqlExpressionBuilder<int>(
query,
'parent',
);
final NumericSqlExpressionBuilder<int> i; final NumericSqlExpressionBuilder<int> i;
@ -640,7 +773,10 @@ class NumbaQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [i, parent]; return [
i,
parent,
];
} }
} }
@ -667,7 +803,10 @@ class NumbaQueryValues extends MapQueryValues {
} }
class FooQuery extends Query<Foo, FooQueryWhere> { class FooQuery extends Query<Foo, FooQueryWhere> {
FooQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { FooQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = FooQueryWhere(this); _where = FooQueryWhere(this);
@ -675,8 +814,12 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
'(SELECT foo_pivots.foo_bar, weird_joins.id, weird_joins.join_name FROM weird_joins LEFT JOIN foo_pivots ON foo_pivots.weird_join_id=weird_joins.id)', '(SELECT foo_pivots.foo_bar, weird_joins.id, weird_joins.join_name FROM weird_joins LEFT JOIN foo_pivots ON foo_pivots.weird_join_id=weird_joins.id)',
'bar', 'bar',
'foo_bar', 'foo_bar',
additionalFields: const ['id', 'join_name'], additionalFields: const [
trampoline: trampoline); 'id',
'join_name',
],
trampoline: trampoline,
);
} }
@override @override
@ -804,7 +947,10 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
class FooQueryWhere extends QueryWhere { class FooQueryWhere extends QueryWhere {
FooQueryWhere(FooQuery query) FooQueryWhere(FooQuery query)
: bar = StringSqlExpressionBuilder(query, 'bar'); : bar = StringSqlExpressionBuilder(
query,
'bar',
);
final StringSqlExpressionBuilder bar; final StringSqlExpressionBuilder bar;
@ -831,17 +977,36 @@ class FooQueryValues extends MapQueryValues {
} }
class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> { class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
FooPivotQuery({Query? parent, Set<String>? trampoline}) FooPivotQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = FooPivotQueryWhere(this); _where = FooPivotQueryWhere(this);
leftJoin(_weirdJoin = WeirdJoinQuery(trampoline: trampoline, parent: this),
'weird_join_id', 'id',
additionalFields: const ['id', 'join_name'], trampoline: trampoline);
leftJoin( leftJoin(
_foo = FooQuery(trampoline: trampoline, parent: this), 'foo_bar', 'bar', _weirdJoin = WeirdJoinQuery(
additionalFields: const ['bar'], trampoline: trampoline); trampoline: trampoline,
parent: this,
),
'weird_join_id',
'id',
additionalFields: const [
'id',
'join_name',
],
trampoline: trampoline,
);
leftJoin(
_foo = FooQuery(
trampoline: trampoline,
parent: this,
),
'foo_bar',
'bar',
additionalFields: const ['bar'],
trampoline: trampoline,
);
} }
@override @override
@ -867,7 +1032,10 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['weird_join_id', 'foo_bar']; const _fields = [
'weird_join_id',
'foo_bar',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -924,8 +1092,14 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
class FooPivotQueryWhere extends QueryWhere { class FooPivotQueryWhere extends QueryWhere {
FooPivotQueryWhere(FooPivotQuery query) FooPivotQueryWhere(FooPivotQuery query)
: weirdJoinId = NumericSqlExpressionBuilder<int>(query, 'weird_join_id'), : weirdJoinId = NumericSqlExpressionBuilder<int>(
fooBar = StringSqlExpressionBuilder(query, 'foo_bar'); query,
'weird_join_id',
),
fooBar = StringSqlExpressionBuilder(
query,
'foo_bar',
);
final NumericSqlExpressionBuilder<int> weirdJoinId; final NumericSqlExpressionBuilder<int> weirdJoinId;
@ -933,7 +1107,10 @@ class FooPivotQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [weirdJoinId, fooBar]; return [
weirdJoinId,
fooBar,
];
} }
} }
@ -1000,12 +1177,13 @@ class Unorthodox implements _Unorthodox {
@generatedSerializable @generatedSerializable
class WeirdJoin implements _WeirdJoin { class WeirdJoin implements _WeirdJoin {
WeirdJoin( WeirdJoin({
{this.id, this.id,
this.unorthodox, this.unorthodox,
this.song, this.song,
this.numbas = const [], this.numbas = const [],
this.foos = const []}); this.foos = const [],
});
@override @override
int? id; int? id;
@ -1022,12 +1200,13 @@ class WeirdJoin implements _WeirdJoin {
@override @override
List<_Foo> foos; List<_Foo> foos;
WeirdJoin copyWith( WeirdJoin copyWith({
{int? id, int? id,
_Unorthodox? unorthodox, _Unorthodox? unorthodox,
_Song? song, _Song? song,
List<_Numba>? numbas, List<_Numba>? numbas,
List<_Foo>? foos}) { List<_Foo>? foos,
}) {
return WeirdJoin( return WeirdJoin(
id: id ?? this.id, id: id ?? this.id,
unorthodox: unorthodox ?? this.unorthodox, unorthodox: unorthodox ?? this.unorthodox,
@ -1049,7 +1228,13 @@ class WeirdJoin implements _WeirdJoin {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, unorthodox, song, numbas, foos]); return hashObjects([
id,
unorthodox,
song,
numbas,
foos,
]);
} }
@override @override
@ -1064,7 +1249,13 @@ class WeirdJoin implements _WeirdJoin {
@generatedSerializable @generatedSerializable
class Song extends _Song { class Song extends _Song {
Song({this.id, this.createdAt, this.updatedAt, this.weirdJoinId, this.title}); Song({
this.id,
this.createdAt,
this.updatedAt,
this.weirdJoinId,
this.title,
});
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -1084,12 +1275,13 @@ class Song extends _Song {
@override @override
String? title; String? title;
Song copyWith( Song copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
int? weirdJoinId, int? weirdJoinId,
String? title}) { String? title,
}) {
return Song( return Song(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -1110,7 +1302,13 @@ class Song extends _Song {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, weirdJoinId, title]); return hashObjects([
id,
createdAt,
updatedAt,
weirdJoinId,
title,
]);
} }
@override @override
@ -1125,7 +1323,10 @@ class Song extends _Song {
@generatedSerializable @generatedSerializable
class Numba extends _Numba { class Numba extends _Numba {
Numba({this.i, this.parent}); Numba({
this.i,
this.parent,
});
@override @override
int? i; int? i;
@ -1133,7 +1334,10 @@ class Numba extends _Numba {
@override @override
int? parent; int? parent;
Numba copyWith({int? i, int? parent}) { Numba copyWith({
int? i,
int? parent,
}) {
return Numba(i: i ?? this.i, parent: parent ?? this.parent); return Numba(i: i ?? this.i, parent: parent ?? this.parent);
} }
@ -1144,7 +1348,10 @@ class Numba extends _Numba {
@override @override
int get hashCode { int get hashCode {
return hashObjects([i, parent]); return hashObjects([
i,
parent,
]);
} }
@override @override
@ -1159,7 +1366,10 @@ class Numba extends _Numba {
@generatedSerializable @generatedSerializable
class Foo implements _Foo { class Foo implements _Foo {
Foo({this.bar, this.weirdJoins = const []}); Foo({
this.bar,
this.weirdJoins = const [],
});
@override @override
String? bar; String? bar;
@ -1167,7 +1377,10 @@ class Foo implements _Foo {
@override @override
List<_WeirdJoin> weirdJoins; List<_WeirdJoin> weirdJoins;
Foo copyWith({String? bar, List<_WeirdJoin>? weirdJoins}) { Foo copyWith({
String? bar,
List<_WeirdJoin>? weirdJoins,
}) {
return Foo(bar: bar ?? this.bar, weirdJoins: weirdJoins ?? this.weirdJoins); return Foo(bar: bar ?? this.bar, weirdJoins: weirdJoins ?? this.weirdJoins);
} }
@ -1181,7 +1394,10 @@ class Foo implements _Foo {
@override @override
int get hashCode { int get hashCode {
return hashObjects([bar, weirdJoins]); return hashObjects([
bar,
weirdJoins,
]);
} }
@override @override
@ -1196,7 +1412,10 @@ class Foo implements _Foo {
@generatedSerializable @generatedSerializable
class FooPivot implements _FooPivot { class FooPivot implements _FooPivot {
FooPivot({this.weirdJoin, this.foo}); FooPivot({
this.weirdJoin,
this.foo,
});
@override @override
_WeirdJoin? weirdJoin; _WeirdJoin? weirdJoin;
@ -1204,7 +1423,10 @@ class FooPivot implements _FooPivot {
@override @override
_Foo? foo; _Foo? foo;
FooPivot copyWith({_WeirdJoin? weirdJoin, _Foo? foo}) { FooPivot copyWith({
_WeirdJoin? weirdJoin,
_Foo? foo,
}) {
return FooPivot( return FooPivot(
weirdJoin: weirdJoin ?? this.weirdJoin, foo: foo ?? this.foo); weirdJoin: weirdJoin ?? this.weirdJoin, foo: foo ?? this.foo);
} }
@ -1218,7 +1440,10 @@ class FooPivot implements _FooPivot {
@override @override
int get hashCode { int get hashCode {
return hashObjects([weirdJoin, foo]); return hashObjects([
weirdJoin,
foo,
]);
} }
@override @override
@ -1338,7 +1563,7 @@ abstract class WeirdJoinFields {
unorthodox, unorthodox,
song, song,
numbas, numbas,
foos foos,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -1412,7 +1637,7 @@ abstract class SongFields {
createdAt, createdAt,
updatedAt, updatedAt,
weirdJoinId, weirdJoinId,
title title,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -1462,7 +1687,10 @@ class NumbaSerializer extends Codec<Numba, Map> {
} }
abstract class NumbaFields { abstract class NumbaFields {
static const List<String> allFields = <String>[i, parent]; static const List<String> allFields = <String>[
i,
parent,
];
static const String i = 'i'; static const String i = 'i';
@ -1515,7 +1743,10 @@ class FooSerializer extends Codec<Foo, Map> {
} }
abstract class FooFields { abstract class FooFields {
static const List<String> allFields = <String>[bar, weirdJoins]; static const List<String> allFields = <String>[
bar,
weirdJoins,
];
static const String bar = 'bar'; static const String bar = 'bar';
@ -1567,7 +1798,10 @@ class FooPivotSerializer extends Codec<FooPivot, Map> {
} }
abstract class FooPivotFields { abstract class FooPivotFields {
static const List<String> allFields = <String>[weirdJoin, foo]; static const List<String> allFields = <String>[
weirdJoin,
foo,
];
static const String weirdJoin = 'weird_join'; static const String weirdJoin = 'weird_join';

View file

@ -9,29 +9,63 @@ part of angel3_orm_generator.test.models.user;
class UserMigration extends Migration { class UserMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('users', (table) { schema.create(
'users',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('username', length: 255); table.varChar(
table.varChar('password', length: 255); 'username',
table.varChar('email', length: 255); length: 255,
}); );
table.varChar(
'password',
length: 255,
);
table.varChar(
'email',
length: 255,
);
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('users', cascade: true); schema.drop(
'users',
cascade: true,
);
} }
} }
class RoleUserMigration extends Migration { class RoleUserMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('role_users', (table) { schema.create(
table.declare('role_id', ColumnType('int')).references('roles', 'id'); 'role_users',
table.declare('user_id', ColumnType('int')).references('users', 'id'); (table) {
}); table
.declare(
'role_id',
ColumnType('int'),
)
.references(
'roles',
'id',
);
table
.declare(
'user_id',
ColumnType('int'),
)
.references(
'users',
'id',
);
},
);
} }
@override @override
@ -43,17 +77,26 @@ class RoleUserMigration extends Migration {
class RoleMigration extends Migration { class RoleMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('roles', (table) { schema.create(
'roles',
(table) {
table.serial('id').primaryKey(); table.serial('id').primaryKey();
table.timeStamp('created_at'); table.timeStamp('created_at');
table.timeStamp('updated_at'); table.timeStamp('updated_at');
table.varChar('name', length: 255); table.varChar(
}); 'name',
length: 255,
);
},
);
} }
@override @override
void down(Schema schema) { void down(Schema schema) {
schema.drop('roles', cascade: true); schema.drop(
'roles',
cascade: true,
);
} }
} }
@ -62,7 +105,10 @@ class RoleMigration extends Migration {
// ************************************************************************** // **************************************************************************
class UserQuery extends Query<User, UserQueryWhere> { class UserQuery extends Query<User, UserQueryWhere> {
UserQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { UserQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = UserQueryWhere(this); _where = UserQueryWhere(this);
@ -70,8 +116,14 @@ class UserQuery extends Query<User, UserQueryWhere> {
'(SELECT role_users.user_id, roles.id, roles.created_at, roles.updated_at, roles.name FROM roles LEFT JOIN role_users ON role_users.role_id=roles.id)', '(SELECT role_users.user_id, roles.id, roles.created_at, roles.updated_at, roles.name FROM roles LEFT JOIN role_users ON role_users.role_id=roles.id)',
'id', 'id',
'user_id', 'user_id',
additionalFields: const ['id', 'created_at', 'updated_at', 'name'], additionalFields: const [
trampoline: trampoline); 'id',
'created_at',
'updated_at',
'name',
],
trampoline: trampoline,
);
} }
@override @override
@ -99,7 +151,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
'updated_at', 'updated_at',
'username', 'username',
'password', 'password',
'email' 'email',
]; ];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
@ -127,15 +179,14 @@ class UserQuery extends Query<User, UserQueryWhere> {
} }
var model = User( var model = User(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2])
: null,
username: fields.contains('username') ? (row[3] as String?) : null, username: fields.contains('username') ? (row[3] as String?) : null,
password: fields.contains('password') ? (row[4] as String?) : null, password: fields.contains('password') ? (row[4] as String?) : null,
email: fields.contains('email') ? (row[5] as String?) : null); email: fields.contains('email') ? (row[5] as String?) : null,
);
if (row.length > 6) { if (row.length > 6) {
var modelOpt = RoleQuery().parseRow(row.skip(6).take(4).toList()); var modelOpt = RoleQuery().parseRow(row.skip(6).take(4).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -213,12 +264,30 @@ class UserQuery extends Query<User, UserQueryWhere> {
class UserQueryWhere extends QueryWhere { class UserQueryWhere extends QueryWhere {
UserQueryWhere(UserQuery query) UserQueryWhere(UserQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
username = StringSqlExpressionBuilder(query, 'username'), ),
password = StringSqlExpressionBuilder(query, 'password'), createdAt = DateTimeSqlExpressionBuilder(
email = StringSqlExpressionBuilder(query, 'email'); query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
username = StringSqlExpressionBuilder(
query,
'username',
),
password = StringSqlExpressionBuilder(
query,
'password',
),
email = StringSqlExpressionBuilder(
query,
'email',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -234,7 +303,14 @@ class UserQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, username, password, email]; return [
id,
createdAt,
updatedAt,
username,
password,
email,
];
} }
} }
@ -284,16 +360,34 @@ class UserQueryValues extends MapQueryValues {
} }
class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> { class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
RoleUserQuery({Query? parent, Set<String>? trampoline}) RoleUserQuery({
: super(parent: parent) { Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = RoleUserQueryWhere(this); _where = RoleUserQueryWhere(this);
leftJoin(_role = RoleQuery(trampoline: trampoline, parent: this), 'role_id', leftJoin(
_role = RoleQuery(
trampoline: trampoline,
parent: this,
),
'role_id',
'id', 'id',
additionalFields: const ['id', 'created_at', 'updated_at', 'name'], additionalFields: const [
trampoline: trampoline); 'id',
leftJoin(_user = UserQuery(trampoline: trampoline, parent: this), 'user_id', 'created_at',
'updated_at',
'name',
],
trampoline: trampoline,
);
leftJoin(
_user = UserQuery(
trampoline: trampoline,
parent: this,
),
'user_id',
'id', 'id',
additionalFields: const [ additionalFields: const [
'id', 'id',
@ -301,9 +395,10 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
'updated_at', 'updated_at',
'username', 'username',
'password', 'password',
'email' 'email',
], ],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -329,7 +424,10 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['role_id', 'user_id']; const _fields = [
'role_id',
'user_id',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -386,8 +484,14 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
class RoleUserQueryWhere extends QueryWhere { class RoleUserQueryWhere extends QueryWhere {
RoleUserQueryWhere(RoleUserQuery query) RoleUserQueryWhere(RoleUserQuery query)
: roleId = NumericSqlExpressionBuilder<int>(query, 'role_id'), : roleId = NumericSqlExpressionBuilder<int>(
userId = NumericSqlExpressionBuilder<int>(query, 'user_id'); query,
'role_id',
),
userId = NumericSqlExpressionBuilder<int>(
query,
'user_id',
);
final NumericSqlExpressionBuilder<int> roleId; final NumericSqlExpressionBuilder<int> roleId;
@ -395,7 +499,10 @@ class RoleUserQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [roleId, userId]; return [
roleId,
userId,
];
} }
} }
@ -426,7 +533,10 @@ class RoleUserQueryValues extends MapQueryValues {
} }
class RoleQuery extends Query<Role, RoleQueryWhere> { class RoleQuery extends Query<Role, RoleQueryWhere> {
RoleQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { RoleQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = RoleQueryWhere(this); _where = RoleQueryWhere(this);
@ -440,9 +550,10 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
'updated_at', 'updated_at',
'username', 'username',
'password', 'password',
'email' 'email',
], ],
trampoline: trampoline); trampoline: trampoline,
);
} }
@override @override
@ -464,7 +575,12 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'created_at', 'updated_at', 'name']; const _fields = [
'id',
'created_at',
'updated_at',
'name',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -491,13 +607,12 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
} }
var model = Role( var model = Role(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') createdAt:
? mapToNullableDateTime(row[1]) fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
: null, updatedAt:
updatedAt: fields.contains('updated_at') fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
? mapToNullableDateTime(row[2]) name: fields.contains('name') ? (row[3] as String?) : null,
: null, );
name: fields.contains('name') ? (row[3] as String?) : null);
if (row.length > 4) { if (row.length > 4) {
var modelOpt = UserQuery().parseRow(row.skip(4).take(6).toList()); var modelOpt = UserQuery().parseRow(row.skip(4).take(6).toList());
modelOpt.ifPresent((m) { modelOpt.ifPresent((m) {
@ -575,10 +690,22 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
class RoleQueryWhere extends QueryWhere { class RoleQueryWhere extends QueryWhere {
RoleQueryWhere(RoleQuery query) RoleQueryWhere(RoleQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), query,
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), 'id',
name = StringSqlExpressionBuilder(query, 'name'); ),
createdAt = DateTimeSqlExpressionBuilder(
query,
'created_at',
),
updatedAt = DateTimeSqlExpressionBuilder(
query,
'updated_at',
),
name = StringSqlExpressionBuilder(
query,
'name',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -590,7 +717,12 @@ class RoleQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, createdAt, updatedAt, name]; return [
id,
createdAt,
updatedAt,
name,
];
} }
} }
@ -633,15 +765,15 @@ class RoleQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class User extends _User { class User extends _User {
User( User({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.username, this.username,
this.password, this.password,
this.email, this.email,
List<_Role> roles = const []}) List<_Role> roles = const [],
: roles = List.unmodifiable(roles); }) : roles = List.unmodifiable(roles);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -667,14 +799,15 @@ class User extends _User {
@override @override
List<_Role> roles; List<_Role> roles;
User copyWith( User copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? username, String? username,
String? password, String? password,
String? email, String? email,
List<_Role>? roles}) { List<_Role>? roles,
}) {
return User( return User(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -700,8 +833,15 @@ class User extends _User {
@override @override
int get hashCode { int get hashCode {
return hashObjects( return hashObjects([
[id, createdAt, updatedAt, username, password, email, roles]); id,
createdAt,
updatedAt,
username,
password,
email,
roles,
]);
} }
@override @override
@ -716,7 +856,10 @@ class User extends _User {
@generatedSerializable @generatedSerializable
class RoleUser implements _RoleUser { class RoleUser implements _RoleUser {
RoleUser({this.role, this.user}); RoleUser({
this.role,
this.user,
});
@override @override
_Role? role; _Role? role;
@ -724,7 +867,10 @@ class RoleUser implements _RoleUser {
@override @override
_User? user; _User? user;
RoleUser copyWith({_Role? role, _User? user}) { RoleUser copyWith({
_Role? role,
_User? user,
}) {
return RoleUser(role: role ?? this.role, user: user ?? this.user); return RoleUser(role: role ?? this.role, user: user ?? this.user);
} }
@ -735,7 +881,10 @@ class RoleUser implements _RoleUser {
@override @override
int get hashCode { int get hashCode {
return hashObjects([role, user]); return hashObjects([
role,
user,
]);
} }
@override @override
@ -750,13 +899,13 @@ class RoleUser implements _RoleUser {
@generatedSerializable @generatedSerializable
class Role extends _Role { class Role extends _Role {
Role( Role({
{this.id, this.id,
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.name, this.name,
List<_User> users = const []}) List<_User> users = const [],
: users = List.unmodifiable(users); }) : users = List.unmodifiable(users);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
@ -776,12 +925,13 @@ class Role extends _Role {
@override @override
List<_User> users; List<_User> users;
Role copyWith( Role copyWith({
{String? id, String? id,
DateTime? createdAt, DateTime? createdAt,
DateTime? updatedAt, DateTime? updatedAt,
String? name, String? name,
List<_User>? users}) { List<_User>? users,
}) {
return Role( return Role(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -803,7 +953,13 @@ class Role extends _Role {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, createdAt, updatedAt, name, users]); return hashObjects([
id,
createdAt,
updatedAt,
name,
users,
]);
} }
@override @override
@ -889,7 +1045,7 @@ abstract class UserFields {
username, username,
password, password,
email, email,
roles roles,
]; ];
static const String id = 'id'; static const String id = 'id';
@ -952,7 +1108,10 @@ class RoleUserSerializer extends Codec<RoleUser, Map> {
} }
abstract class RoleUserFields { abstract class RoleUserFields {
static const List<String> allFields = <String>[role, user]; static const List<String> allFields = <String>[
role,
user,
];
static const String role = 'role'; static const String role = 'role';
@ -1022,7 +1181,7 @@ abstract class RoleFields {
createdAt, createdAt,
updatedAt, updatedAt,
name, name,
users users,
]; ];
static const String id = 'id'; static const String id = 'id';

View file

@ -9,10 +9,13 @@ part of 'world.dart';
class WorldMigration extends Migration { class WorldMigration extends Migration {
@override @override
void up(Schema schema) { void up(Schema schema) {
schema.create('world', (table) { schema.create(
'world',
(table) {
table.integer('id').primaryKey(); table.integer('id').primaryKey();
table.integer('random_number'); table.integer('random_number');
}); },
);
} }
@override @override
@ -26,7 +29,10 @@ class WorldMigration extends Migration {
// ************************************************************************** // **************************************************************************
class WorldQuery extends Query<World, WorldQueryWhere> { class WorldQuery extends Query<World, WorldQueryWhere> {
WorldQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) { WorldQuery({
Query? parent,
Set<String>? trampoline,
}) : super(parent: parent) {
trampoline ??= <String>{}; trampoline ??= <String>{};
trampoline.add(tableName); trampoline.add(tableName);
_where = WorldQueryWhere(this); _where = WorldQueryWhere(this);
@ -51,7 +57,10 @@ class WorldQuery extends Query<World, WorldQueryWhere> {
@override @override
List<String> get fields { List<String> get fields {
const _fields = ['id', 'random_number']; const _fields = [
'id',
'random_number',
];
return _selectedFields.isEmpty return _selectedFields.isEmpty
? _fields ? _fields
: _fields.where((field) => _selectedFields.contains(field)).toList(); : _fields.where((field) => _selectedFields.contains(field)).toList();
@ -78,8 +87,8 @@ class WorldQuery extends Query<World, WorldQueryWhere> {
} }
var model = World( var model = World(
id: fields.contains('id') ? (row[0] as int?) : null, id: fields.contains('id') ? (row[0] as int?) : null,
randomNumber: randomNumber: fields.contains('random_number') ? (row[1] as int?) : null,
fields.contains('random_number') ? (row[1] as int?) : null); );
return Optional.of(model); return Optional.of(model);
} }
@ -91,8 +100,14 @@ class WorldQuery extends Query<World, WorldQueryWhere> {
class WorldQueryWhere extends QueryWhere { class WorldQueryWhere extends QueryWhere {
WorldQueryWhere(WorldQuery query) WorldQueryWhere(WorldQuery query)
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(
randomNumber = NumericSqlExpressionBuilder<int>(query, 'random_number'); query,
'id',
),
randomNumber = NumericSqlExpressionBuilder<int>(
query,
'random_number',
);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -100,7 +115,10 @@ class WorldQueryWhere extends QueryWhere {
@override @override
List<SqlExpressionBuilder> get expressionBuilders { List<SqlExpressionBuilder> get expressionBuilders {
return [id, randomNumber]; return [
id,
randomNumber,
];
} }
} }
@ -132,7 +150,10 @@ class WorldQueryValues extends MapQueryValues {
@generatedSerializable @generatedSerializable
class World extends _World { class World extends _World {
World({this.id, this.randomNumber}); World({
this.id,
this.randomNumber,
});
@override @override
int? id; int? id;
@ -140,7 +161,10 @@ class World extends _World {
@override @override
int? randomNumber; int? randomNumber;
World copyWith({int? id, int? randomNumber}) { World copyWith({
int? id,
int? randomNumber,
}) {
return World( return World(
id: id ?? this.id, randomNumber: randomNumber ?? this.randomNumber); id: id ?? this.id, randomNumber: randomNumber ?? this.randomNumber);
} }
@ -154,7 +178,10 @@ class World extends _World {
@override @override
int get hashCode { int get hashCode {
return hashObjects([id, randomNumber]); return hashObjects([
id,
randomNumber,
]);
} }
@override @override
@ -208,7 +235,10 @@ class WorldSerializer extends Codec<World, Map> {
} }
abstract class WorldFields { abstract class WorldFields {
static const List<String> allFields = <String>[id, randomNumber]; static const List<String> allFields = <String>[
id,
randomNumber,
];
static const String id = 'id'; static const String id = 'id';

View file

@ -22,7 +22,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
test('parseRow', () { test('parseRow', () {
// 'id', 'created_at', 'updated_at', 'make', 'description', 'family_friendly', 'recalled_at' // 'id', 'created_at', 'updated_at', 'make', 'description', 'family_friendly', 'recalled_at'
// var row = [0, 'Mazda', 'CX9', true, y2k, y2k, y2k]; // var row = [0, 'Mazda', 'CX9', true, y2k, y2k, y2k];
var row = [0, y2k, y2k, 'Mazda', 'CX9', true, y2k]; var row = [0, y2k, y2k, 'Mazda', 'CX9', true, y2k, 80000.00];
//print(row); //print(row);
var carOpt = CarQuery().deserialize(row); var carOpt = CarQuery().deserialize(row);
expect(carOpt.isPresent, true); expect(carOpt.isPresent, true);
@ -38,6 +38,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
y2k.toIso8601String(), startsWith(car.createdAt!.toIso8601String())); y2k.toIso8601String(), startsWith(car.createdAt!.toIso8601String()));
expect( expect(
y2k.toIso8601String(), startsWith(car.updatedAt!.toIso8601String())); y2k.toIso8601String(), startsWith(car.updatedAt!.toIso8601String()));
expect(car.price, 80000.00);
}); });
}); });
@ -66,6 +67,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
..createdAt = y2k ..createdAt = y2k
..updatedAt = y2k ..updatedAt = y2k
..description = 'Vroom vroom!' ..description = 'Vroom vroom!'
//..price = 120000.00
..familyFriendly = false; ..familyFriendly = false;
ferrari = (await query.insert(executor!)).value; ferrari = (await query.insert(executor!)).value;
}); });

View file

@ -1,5 +1,5 @@
name: angel3_orm_test name: angel3_orm_test
version: 7.0.0 version: 7.0.1
description: Common tests for Angel3 ORM. Reference implmentation of the generated ORM files. description: Common tests for Angel3 ORM. Reference implmentation of the generated ORM files.
homepage: https://angel3-framework.web.app/ homepage: https://angel3-framework.web.app/
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_test repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_test
@ -19,7 +19,7 @@ dev_dependencies:
angel3_framework: ^7.0.0 angel3_framework: ^7.0.0
build_runner: ^2.0.1 build_runner: ^2.0.1
lints: ^2.0.0 lints: ^2.0.0
# dependency_overrides: dependency_overrides:
# angel3_container: # angel3_container:
# path: ../../container/angel_container # path: ../../container/angel_container
# angel3_framework: # angel3_framework:
@ -40,5 +40,5 @@ dev_dependencies:
# path: ../angel_orm # path: ../angel_orm
# angel3_migration: # angel3_migration:
# path: ../angel_migration # path: ../angel_migration
# angel3_orm_generator: angel3_orm_generator:
# path: ../angel_orm_generator path: ../angel_orm_generator