commit
681e91d024
30 changed files with 2836 additions and 1258 deletions
|
@ -1,5 +1,9 @@
|
|||
# Change Log
|
||||
|
||||
## 7.0.1
|
||||
|
||||
* Fixed issue #82: Fixed issue #82: Removed casting for numeric fields
|
||||
|
||||
## 7.0.0
|
||||
|
||||
* Require Dart >= 2.17
|
||||
|
|
|
@ -16,8 +16,7 @@ class EmployeeMigration extends Migration {
|
|||
table.varChar('unique_id', length: 255).unique();
|
||||
table.varChar('first_name', length: 255);
|
||||
table.varChar('last_name', length: 255);
|
||||
table.declareColumn(
|
||||
'salary', Column(type: ColumnType('decimal'), length: 255));
|
||||
table.double('salary');
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -93,8 +92,12 @@ class EmployeeQuery extends Query<Employee, EmployeeQueryWhere> {
|
|||
}
|
||||
var model = Employee(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
|
||||
updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
uniqueId: fields.contains('unique_id') ? (row[3] as String?) : null,
|
||||
firstName: fields.contains('first_name') ? (row[4] 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 {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'salary': 'decimal'};
|
||||
return {'salary': 'double precision'};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -175,10 +178,10 @@ class EmployeeQueryValues extends MapQueryValues {
|
|||
|
||||
set lastName(String? value) => values['last_name'] = value;
|
||||
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) {
|
||||
createdAt = model.createdAt;
|
||||
updatedAt = model.updatedAt;
|
||||
|
|
|
@ -103,17 +103,19 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
|
|||
..types.add(refer('String')))
|
||||
..type = MethodType.getter
|
||||
..body = Block((b) {
|
||||
var args = <String?, Expression>{};
|
||||
var args = <String, Expression>{};
|
||||
|
||||
/* Remove casts no numeric values
|
||||
for (var field in ctx.effectiveFields) {
|
||||
var name = ctx.buildContext.resolveFieldName(field.name);
|
||||
var type = ctx.columns[field.name]?.type;
|
||||
if (type == null) continue;
|
||||
if (floatTypes.contains(type)) {
|
||||
//args[name] = literalString('text');
|
||||
args[name] = literalString('char');
|
||||
args[name!] = literalString('char');
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
b.addExpression(literalMap(args).returned);
|
||||
});
|
||||
|
@ -857,9 +859,11 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
|
|||
if (const TypeChecker.fromRuntime(List)
|
||||
.isAssignableFromType(fType)) {
|
||||
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);
|
||||
|
@ -887,10 +891,14 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
|
|||
.property('cast')
|
||||
.call([]);
|
||||
} else if (floatTypes.contains(ctx.columns[field.name]?.type)) {
|
||||
value = refer('double')
|
||||
.property('tryParse')
|
||||
.call([value.asA(refer('String'))]).ifNullThen(
|
||||
CodeExpression(Code('0.0')));
|
||||
// Skip using casts on double
|
||||
value = value
|
||||
.asA(refer('double?'))
|
||||
.ifNullThen(CodeExpression(Code('0.0')));
|
||||
//value = refer('double')
|
||||
// .property('tryParse')
|
||||
// .call([value.asA(refer('String'))]).ifNullThen(
|
||||
// CodeExpression(Code('0.0')));
|
||||
} else {
|
||||
value = value.asA(type);
|
||||
}
|
||||
|
@ -910,10 +918,12 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
|
|||
} else if (const TypeChecker.fromRuntime(List)
|
||||
.isAssignableFromType(fType)) {
|
||||
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
|
||||
..name = field.name
|
||||
..type = MethodType.setter
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: angel3_orm_generator
|
||||
version: 7.0.0
|
||||
version: 7.0.1
|
||||
description: Code generators for Angel3 ORM. Generates query builder classes.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
CREATE TABLE IF NOT EXISTS feet (
|
||||
id serial PRIMARY KEY,
|
||||
leg_id int NOT NULL,
|
||||
n_toes int NOT NULL,
|
||||
n_toes double precision NOT NULL,
|
||||
created_at datetime,
|
||||
updated_at datetime
|
||||
);
|
|
@ -16,13 +16,13 @@ dev_dependencies:
|
|||
angel3_orm_test: ^7.0.0
|
||||
test: ^1.21.0
|
||||
lints: ^2.0.0
|
||||
# dependency_overrides:
|
||||
dependency_overrides:
|
||||
# angel3_serialize:
|
||||
# path: ../../serialize/angel_serialize
|
||||
# angel3_model:
|
||||
# path: ../../model
|
||||
# angel3_orm_test:
|
||||
# path: ../angel_orm_test
|
||||
angel3_orm_test:
|
||||
path: ../angel_orm_test
|
||||
# angel3_orm:
|
||||
# path: ../angel_orm
|
||||
# angel3_migration:
|
||||
|
|
|
@ -3,6 +3,7 @@ CREATE TEMPORARY TABLE "cars" (
|
|||
make varchar(255) NOT NULL,
|
||||
description TEXT NOT NULL,
|
||||
family_friendly BOOLEAN NOT NULL,
|
||||
price double precision,
|
||||
recalled_at timestamp,
|
||||
created_at timestamp,
|
||||
updated_at timestamp
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
CREATE TEMPORARY TABLE "feet" (
|
||||
id serial PRIMARY KEY,
|
||||
leg_id int NOT NULL,
|
||||
n_toes int NOT NULL,
|
||||
n_toes double precision NOT NULL,
|
||||
created_at timestamp,
|
||||
updated_at timestamp
|
||||
);
|
|
@ -1,5 +1,9 @@
|
|||
# Change Log
|
||||
|
||||
## 7.0.1
|
||||
|
||||
* Fixed issue #82: Removed casting for numeric fields
|
||||
|
||||
## 7.0.0
|
||||
|
||||
* Require Dart >= 2.17
|
||||
|
|
|
@ -9,12 +9,18 @@ part of 'asset.dart';
|
|||
class ItemMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('items', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('description', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'items',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'description',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -26,19 +32,31 @@ class ItemMigration extends Migration {
|
|||
class AssetMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('assets', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('description', length: 255);
|
||||
table.varChar('name', length: 255);
|
||||
table.double('price');
|
||||
});
|
||||
schema.create(
|
||||
'assets',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'description',
|
||||
length: 255,
|
||||
);
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
table.double('price');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
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> {
|
||||
ItemQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||
ItemQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = ItemQueryWhere(this);
|
||||
|
@ -72,7 +93,12 @@ class ItemQuery extends Query<Item, ItemQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'description'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'description',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -98,14 +124,13 @@ class ItemQuery extends Query<Item, ItemQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Item(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
description: fields.contains('description') ? (row[3] as String) : '');
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
description: fields.contains('description') ? (row[3] as String) : '',
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -117,10 +142,22 @@ class ItemQuery extends Query<Item, ItemQueryWhere> {
|
|||
|
||||
class ItemQueryWhere extends QueryWhere {
|
||||
ItemQueryWhere(ItemQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
description = StringSqlExpressionBuilder(query, 'description');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
description = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'description',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -132,7 +169,12 @@ class ItemQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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> {
|
||||
AssetQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||
AssetQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = AssetQueryWhere(this);
|
||||
leftJoin(_items = ItemQuery(trampoline: trampoline, parent: this), 'id',
|
||||
'asset_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'description'
|
||||
],
|
||||
trampoline: trampoline);
|
||||
leftJoin(
|
||||
_items = ItemQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'id',
|
||||
'asset_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'description',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -196,7 +247,7 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -212,7 +263,7 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
|
|||
'updated_at',
|
||||
'description',
|
||||
'name',
|
||||
'price'
|
||||
'price',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -239,16 +290,15 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Asset(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
description: fields.contains('description') ? (row[3] as String) : '',
|
||||
name: fields.contains('name') ? (row[4] as String) : '',
|
||||
price: fields.contains('price') ? mapToDouble(row[5]) : 0.0);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
description: fields.contains('description') ? (row[3] as String) : '',
|
||||
name: fields.contains('name') ? (row[4] as String) : '',
|
||||
price: fields.contains('price') ? mapToDouble(row[5]) : 0.0,
|
||||
);
|
||||
if (row.length > 6) {
|
||||
var modelOpt = ItemQuery().parseRow(row.skip(6).take(4).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -324,12 +374,30 @@ class AssetQuery extends Query<Asset, AssetQueryWhere> {
|
|||
|
||||
class AssetQueryWhere extends QueryWhere {
|
||||
AssetQueryWhere(AssetQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
description = StringSqlExpressionBuilder(query, 'description'),
|
||||
name = StringSqlExpressionBuilder(query, 'name'),
|
||||
price = NumericSqlExpressionBuilder<double>(query, 'price');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
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;
|
||||
|
||||
|
@ -345,14 +413,21 @@ class AssetQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, description, name, price];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
description,
|
||||
name,
|
||||
price,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
class AssetQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -381,10 +456,10 @@ class AssetQueryValues extends MapQueryValues {
|
|||
|
||||
set name(String value) => values['name'] = value;
|
||||
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) {
|
||||
createdAt = model.createdAt;
|
||||
updatedAt = model.updatedAt;
|
||||
|
@ -400,7 +475,12 @@ class AssetQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -417,11 +497,12 @@ class Item extends _Item {
|
|||
@override
|
||||
String description;
|
||||
|
||||
Item copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? description}) {
|
||||
Item copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? description,
|
||||
}) {
|
||||
return Item(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -440,7 +521,12 @@ class Item extends _Item {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, description]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
description,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -455,15 +541,15 @@ class Item extends _Item {
|
|||
|
||||
@generatedSerializable
|
||||
class Asset extends _Asset {
|
||||
Asset(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
required this.description,
|
||||
required this.name,
|
||||
required this.price,
|
||||
List<_Item> items = const []})
|
||||
: items = List.unmodifiable(items);
|
||||
Asset({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
required this.description,
|
||||
required this.name,
|
||||
required this.price,
|
||||
List<_Item> items = const [],
|
||||
}) : items = List.unmodifiable(items);
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -489,14 +575,15 @@ class Asset extends _Asset {
|
|||
@override
|
||||
List<_Item> items;
|
||||
|
||||
Asset copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? description,
|
||||
String? name,
|
||||
double? price,
|
||||
List<_Item>? items}) {
|
||||
Asset copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? description,
|
||||
String? name,
|
||||
double? price,
|
||||
List<_Item>? items,
|
||||
}) {
|
||||
return Asset(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -522,8 +609,15 @@ class Asset extends _Asset {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects(
|
||||
[id, createdAt, updatedAt, description, name, price, items]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
description,
|
||||
name,
|
||||
price,
|
||||
items,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -597,7 +691,7 @@ abstract class ItemFields {
|
|||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
description
|
||||
description,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -678,7 +772,7 @@ abstract class AssetFields {
|
|||
description,
|
||||
name,
|
||||
price,
|
||||
items
|
||||
items,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,17 +9,26 @@ part of 'bike.dart';
|
|||
class BikeMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('bikes', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('make', length: 255);
|
||||
table.varChar('description', length: 255);
|
||||
table.boolean('family_friendly');
|
||||
table.timeStamp('recalled_at');
|
||||
table.double('price');
|
||||
table.integer('width');
|
||||
});
|
||||
schema.create(
|
||||
'bikes',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'make',
|
||||
length: 255,
|
||||
);
|
||||
table.varChar(
|
||||
'description',
|
||||
length: 255,
|
||||
);
|
||||
table.boolean('family_friendly');
|
||||
table.timeStamp('recalled_at');
|
||||
table.double('price');
|
||||
table.integer('width');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -33,7 +42,10 @@ class BikeMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = BikeQueryWhere(this);
|
||||
|
@ -48,7 +60,7 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -67,7 +79,7 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
|
|||
'family_friendly',
|
||||
'recalled_at',
|
||||
'price',
|
||||
'width'
|
||||
'width',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -94,22 +106,21 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Bike(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
make: fields.contains('make') ? (row[3] as String) : '',
|
||||
description: fields.contains('description') ? (row[4] as String) : '',
|
||||
familyFriendly:
|
||||
fields.contains('family_friendly') ? mapToBool(row[5]) : false,
|
||||
recalledAt: fields.contains('recalled_at')
|
||||
? mapToDateTime(row[6])
|
||||
: DateTime.parse("1970-01-01 00:00:00"),
|
||||
price: fields.contains('price') ? mapToDouble(row[7]) : 0.0,
|
||||
width: fields.contains('width') ? (row[8] as int) : 0);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
make: fields.contains('make') ? (row[3] as String) : '',
|
||||
description: fields.contains('description') ? (row[4] as String) : '',
|
||||
familyFriendly:
|
||||
fields.contains('family_friendly') ? mapToBool(row[5]) : false,
|
||||
recalledAt: fields.contains('recalled_at')
|
||||
? mapToDateTime(row[6])
|
||||
: DateTime.parse("1970-01-01 00:00:00"),
|
||||
price: fields.contains('price') ? mapToDouble(row[7]) : 0.0,
|
||||
width: fields.contains('width') ? (row[8] as int) : 0,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -121,15 +132,42 @@ class BikeQuery extends Query<Bike, BikeQueryWhere> {
|
|||
|
||||
class BikeQueryWhere extends QueryWhere {
|
||||
BikeQueryWhere(BikeQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, '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'),
|
||||
width = NumericSqlExpressionBuilder<int>(query, 'width');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'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',
|
||||
),
|
||||
width = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'width',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -160,7 +198,7 @@ class BikeQueryWhere extends QueryWhere {
|
|||
familyFriendly,
|
||||
recalledAt,
|
||||
price,
|
||||
width
|
||||
width,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +206,7 @@ class BikeQueryWhere extends QueryWhere {
|
|||
class BikeQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -207,10 +245,10 @@ class BikeQueryValues extends MapQueryValues {
|
|||
|
||||
set recalledAt(DateTime value) => values['recalled_at'] = value;
|
||||
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 {
|
||||
return (values['width'] as int);
|
||||
}
|
||||
|
@ -234,16 +272,17 @@ class BikeQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Bike extends _Bike {
|
||||
Bike(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
required this.make,
|
||||
required this.description,
|
||||
required this.familyFriendly,
|
||||
required this.recalledAt,
|
||||
required this.price,
|
||||
required this.width});
|
||||
Bike({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
required this.make,
|
||||
required this.description,
|
||||
required this.familyFriendly,
|
||||
required this.recalledAt,
|
||||
required this.price,
|
||||
required this.width,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -275,16 +314,17 @@ class Bike extends _Bike {
|
|||
@override
|
||||
int width;
|
||||
|
||||
Bike copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? make,
|
||||
String? description,
|
||||
bool? familyFriendly,
|
||||
DateTime? recalledAt,
|
||||
double? price,
|
||||
int? width}) {
|
||||
Bike copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? make,
|
||||
String? description,
|
||||
bool? familyFriendly,
|
||||
DateTime? recalledAt,
|
||||
double? price,
|
||||
int? width,
|
||||
}) {
|
||||
return Bike(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -322,7 +362,7 @@ class Bike extends _Bike {
|
|||
familyFriendly,
|
||||
recalledAt,
|
||||
price,
|
||||
width
|
||||
width,
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -416,7 +456,7 @@ abstract class BikeFields {
|
|||
familyFriendly,
|
||||
recalledAt,
|
||||
price,
|
||||
width
|
||||
width,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,17 +9,30 @@ part of 'boat.dart';
|
|||
class BoatMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('boats', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('make', length: 255).defaultsTo('');
|
||||
table.varChar('description', length: 255).defaultsTo('none');
|
||||
table.boolean('family_friendly').defaultsTo(false);
|
||||
table.timeStamp('recalled_at');
|
||||
table.double('price').defaultsTo(0.0);
|
||||
table.integer('width').defaultsTo(0);
|
||||
});
|
||||
schema.create(
|
||||
'boats',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table
|
||||
.varChar(
|
||||
'make',
|
||||
length: 255,
|
||||
)
|
||||
.defaultsTo('');
|
||||
table
|
||||
.varChar(
|
||||
'description',
|
||||
length: 255,
|
||||
)
|
||||
.defaultsTo('none');
|
||||
table.boolean('family_friendly').defaultsTo(false);
|
||||
table.timeStamp('recalled_at');
|
||||
table.double('price').defaultsTo(0.0);
|
||||
table.integer('width').defaultsTo(0);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -33,7 +46,10 @@ class BoatMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = BoatQueryWhere(this);
|
||||
|
@ -48,7 +64,7 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -67,7 +83,7 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
|
|||
'family_friendly',
|
||||
'recalled_at',
|
||||
'price',
|
||||
'width'
|
||||
'width',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -94,22 +110,21 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Boat(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
make: fields.contains('make') ? (row[3] as String) : '',
|
||||
description: fields.contains('description') ? (row[4] as String) : '',
|
||||
familyFriendly:
|
||||
fields.contains('family_friendly') ? mapToBool(row[5]) : false,
|
||||
recalledAt: fields.contains('recalled_at')
|
||||
? mapToDateTime(row[6])
|
||||
: DateTime.parse("1970-01-01 00:00:00"),
|
||||
price: fields.contains('price') ? mapToDouble(row[7]) : 0.0,
|
||||
width: fields.contains('width') ? (row[8] as int) : 0);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
make: fields.contains('make') ? (row[3] as String) : '',
|
||||
description: fields.contains('description') ? (row[4] as String) : '',
|
||||
familyFriendly:
|
||||
fields.contains('family_friendly') ? mapToBool(row[5]) : false,
|
||||
recalledAt: fields.contains('recalled_at')
|
||||
? mapToDateTime(row[6])
|
||||
: DateTime.parse("1970-01-01 00:00:00"),
|
||||
price: fields.contains('price') ? mapToDouble(row[7]) : 0.0,
|
||||
width: fields.contains('width') ? (row[8] as int) : 0,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -121,15 +136,42 @@ class BoatQuery extends Query<Boat, BoatQueryWhere> {
|
|||
|
||||
class BoatQueryWhere extends QueryWhere {
|
||||
BoatQueryWhere(BoatQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, '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'),
|
||||
width = NumericSqlExpressionBuilder<int>(query, 'width');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'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',
|
||||
),
|
||||
width = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'width',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -160,7 +202,7 @@ class BoatQueryWhere extends QueryWhere {
|
|||
familyFriendly,
|
||||
recalledAt,
|
||||
price,
|
||||
width
|
||||
width,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +210,7 @@ class BoatQueryWhere extends QueryWhere {
|
|||
class BoatQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -207,10 +249,10 @@ class BoatQueryValues extends MapQueryValues {
|
|||
|
||||
set recalledAt(DateTime value) => values['recalled_at'] = value;
|
||||
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 {
|
||||
return (values['width'] as int);
|
||||
}
|
||||
|
@ -234,16 +276,17 @@ class BoatQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Boat extends _Boat {
|
||||
Boat(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
required this.make,
|
||||
required this.description,
|
||||
required this.familyFriendly,
|
||||
required this.recalledAt,
|
||||
required this.price,
|
||||
required this.width});
|
||||
Boat({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
required this.make,
|
||||
required this.description,
|
||||
required this.familyFriendly,
|
||||
required this.recalledAt,
|
||||
required this.price,
|
||||
required this.width,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -275,16 +318,17 @@ class Boat extends _Boat {
|
|||
@override
|
||||
int width;
|
||||
|
||||
Boat copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? make,
|
||||
String? description,
|
||||
bool? familyFriendly,
|
||||
DateTime? recalledAt,
|
||||
double? price,
|
||||
int? width}) {
|
||||
Boat copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? make,
|
||||
String? description,
|
||||
bool? familyFriendly,
|
||||
DateTime? recalledAt,
|
||||
double? price,
|
||||
int? width,
|
||||
}) {
|
||||
return Boat(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -322,7 +366,7 @@ class Boat extends _Boat {
|
|||
familyFriendly,
|
||||
recalledAt,
|
||||
price,
|
||||
width
|
||||
width,
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -416,7 +460,7 @@ abstract class BoatFields {
|
|||
familyFriendly,
|
||||
recalledAt,
|
||||
price,
|
||||
width
|
||||
width,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,16 +9,36 @@ part of angel_orm3.generator.models.book;
|
|||
class BookMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('books', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('name', length: 255);
|
||||
table.declare('author_id', ColumnType('int')).references('authors', 'id');
|
||||
table
|
||||
.declare('partner_author_id', ColumnType('int'))
|
||||
.references('authors', 'id');
|
||||
});
|
||||
schema.create(
|
||||
'books',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
table
|
||||
.declare(
|
||||
'author_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'authors',
|
||||
'id',
|
||||
);
|
||||
table
|
||||
.declare(
|
||||
'partner_author_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'authors',
|
||||
'id',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -30,14 +50,20 @@ class BookMigration extends Migration {
|
|||
class AuthorMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('authors', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('name', length: 255)
|
||||
..defaultsTo('Tobe Osakwe')
|
||||
..unique();
|
||||
});
|
||||
schema.create(
|
||||
'authors',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
)
|
||||
..defaultsTo('Tobe Osakwe')
|
||||
..unique();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -51,18 +77,43 @@ class AuthorMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = BookQueryWhere(this);
|
||||
join(_author = AuthorQuery(trampoline: trampoline, parent: this),
|
||||
'author_id', 'id',
|
||||
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);
|
||||
join(
|
||||
_author = AuthorQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'author_id',
|
||||
'id',
|
||||
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
|
||||
|
@ -94,7 +145,7 @@ class BookQuery extends Query<Book, BookQueryWhere> {
|
|||
'updated_at',
|
||||
'author_id',
|
||||
'partner_author_id',
|
||||
'name'
|
||||
'name',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -121,14 +172,13 @@ class BookQuery extends Query<Book, BookQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Book(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
name: fields.contains('name') ? (row[5] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
name: fields.contains('name') ? (row[5] as String?) : null,
|
||||
);
|
||||
if (row.length > 6) {
|
||||
var modelOpt = AuthorQuery().parseRow(row.skip(6).take(4).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -160,13 +210,30 @@ class BookQuery extends Query<Book, BookQueryWhere> {
|
|||
|
||||
class BookQueryWhere extends QueryWhere {
|
||||
BookQueryWhere(BookQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
authorId = NumericSqlExpressionBuilder<int>(query, 'author_id'),
|
||||
partnerAuthorId =
|
||||
NumericSqlExpressionBuilder<int>(query, 'partner_author_id'),
|
||||
name = StringSqlExpressionBuilder(query, 'name');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'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;
|
||||
|
||||
|
@ -182,7 +249,14 @@ class BookQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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> {
|
||||
AuthorQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
AuthorQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = AuthorQueryWhere(this);
|
||||
|
@ -262,7 +338,12 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'name'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'name',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -288,14 +369,13 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Author(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -307,10 +387,22 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
|
|||
|
||||
class AuthorQueryWhere extends QueryWhere {
|
||||
AuthorQueryWhere(AuthorQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
name = StringSqlExpressionBuilder(query, 'name');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -322,7 +414,12 @@ class AuthorQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, name];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,13 +462,14 @@ class AuthorQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Book extends _Book {
|
||||
Book(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.author,
|
||||
this.partnerAuthor,
|
||||
this.name});
|
||||
Book({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.author,
|
||||
this.partnerAuthor,
|
||||
this.name,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -394,13 +492,14 @@ class Book extends _Book {
|
|||
@override
|
||||
String? name;
|
||||
|
||||
Book copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
_Author? author,
|
||||
_Author? partnerAuthor,
|
||||
String? name}) {
|
||||
Book copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
_Author? author,
|
||||
_Author? partnerAuthor,
|
||||
String? name,
|
||||
}) {
|
||||
return Book(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -423,7 +522,14 @@ class Book extends _Book {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, author, partnerAuthor, name]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
author,
|
||||
partnerAuthor,
|
||||
name,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -438,7 +544,12 @@ class Book extends _Book {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -455,8 +566,12 @@ class Author extends _Author {
|
|||
@override
|
||||
String? name;
|
||||
|
||||
Author copyWith(
|
||||
{String? id, DateTime? createdAt, DateTime? updatedAt, String? name}) {
|
||||
Author copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
}) {
|
||||
return Author(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -475,7 +590,12 @@ class Author extends _Author {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, name]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -559,7 +679,7 @@ abstract class BookFields {
|
|||
updatedAt,
|
||||
author,
|
||||
partnerAuthor,
|
||||
name
|
||||
name,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -632,7 +752,7 @@ abstract class AuthorFields {
|
|||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name
|
||||
name,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -13,4 +13,5 @@ class _Car extends Model {
|
|||
String? description;
|
||||
bool? familyFriendly;
|
||||
DateTime? recalledAt;
|
||||
double? price;
|
||||
}
|
||||
|
|
|
@ -9,15 +9,25 @@ part of angel_orm3.generator.models.car;
|
|||
class CarMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('cars', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('make', length: 255);
|
||||
table.varChar('description', length: 255);
|
||||
table.boolean('family_friendly');
|
||||
table.timeStamp('recalled_at');
|
||||
});
|
||||
schema.create(
|
||||
'cars',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'make',
|
||||
length: 255,
|
||||
);
|
||||
table.varChar(
|
||||
'description',
|
||||
length: 255,
|
||||
);
|
||||
table.boolean('family_friendly');
|
||||
table.timeStamp('recalled_at');
|
||||
table.double('price');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -31,7 +41,10 @@ class CarMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = CarQueryWhere(this);
|
||||
|
@ -63,7 +76,8 @@ class CarQuery extends Query<Car, CarQueryWhere> {
|
|||
'make',
|
||||
'description',
|
||||
'family_friendly',
|
||||
'recalled_at'
|
||||
'recalled_at',
|
||||
'price',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -90,21 +104,19 @@ class CarQuery extends Query<Car, CarQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Car(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
make: fields.contains('make') ? (row[3] as String?) : null,
|
||||
description:
|
||||
fields.contains('description') ? (row[4] as String?) : null,
|
||||
familyFriendly:
|
||||
fields.contains('family_friendly') ? mapToBool(row[5]) : null,
|
||||
recalledAt: fields.contains('recalled_at')
|
||||
? mapToNullableDateTime(row[6])
|
||||
: null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
make: fields.contains('make') ? (row[3] as String?) : null,
|
||||
description: fields.contains('description') ? (row[4] as String?) : null,
|
||||
familyFriendly:
|
||||
fields.contains('family_friendly') ? mapToBool(row[5]) : null,
|
||||
recalledAt:
|
||||
fields.contains('recalled_at') ? mapToNullableDateTime(row[6]) : null,
|
||||
price: fields.contains('price') ? mapToDouble(row[7]) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -116,13 +128,38 @@ class CarQuery extends Query<Car, CarQueryWhere> {
|
|||
|
||||
class CarQueryWhere extends QueryWhere {
|
||||
CarQueryWhere(CarQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, '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');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'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;
|
||||
|
||||
|
@ -138,6 +175,8 @@ class CarQueryWhere extends QueryWhere {
|
|||
|
||||
final DateTimeSqlExpressionBuilder recalledAt;
|
||||
|
||||
final NumericSqlExpressionBuilder<double> price;
|
||||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [
|
||||
|
@ -147,7 +186,8 @@ class CarQueryWhere extends QueryWhere {
|
|||
make,
|
||||
description,
|
||||
familyFriendly,
|
||||
recalledAt
|
||||
recalledAt,
|
||||
price,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -193,6 +233,11 @@ class CarQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
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) {
|
||||
createdAt = model.createdAt;
|
||||
updatedAt = model.updatedAt;
|
||||
|
@ -200,6 +245,7 @@ class CarQueryValues extends MapQueryValues {
|
|||
description = model.description;
|
||||
familyFriendly = model.familyFriendly;
|
||||
recalledAt = model.recalledAt;
|
||||
price = model.price;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -209,14 +255,16 @@ class CarQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Car extends _Car {
|
||||
Car(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.make,
|
||||
this.description,
|
||||
this.familyFriendly,
|
||||
this.recalledAt});
|
||||
Car({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.make,
|
||||
this.description,
|
||||
this.familyFriendly,
|
||||
this.recalledAt,
|
||||
this.price,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -242,14 +290,19 @@ class Car extends _Car {
|
|||
@override
|
||||
DateTime? recalledAt;
|
||||
|
||||
Car copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? make,
|
||||
String? description,
|
||||
bool? familyFriendly,
|
||||
DateTime? recalledAt}) {
|
||||
@override
|
||||
double? price;
|
||||
|
||||
Car copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? make,
|
||||
String? description,
|
||||
bool? familyFriendly,
|
||||
DateTime? recalledAt,
|
||||
double? price,
|
||||
}) {
|
||||
return Car(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -257,7 +310,8 @@ class Car extends _Car {
|
|||
make: make ?? this.make,
|
||||
description: description ?? this.description,
|
||||
familyFriendly: familyFriendly ?? this.familyFriendly,
|
||||
recalledAt: recalledAt ?? this.recalledAt);
|
||||
recalledAt: recalledAt ?? this.recalledAt,
|
||||
price: price ?? this.price);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -269,7 +323,8 @@ class Car extends _Car {
|
|||
other.make == make &&
|
||||
other.description == description &&
|
||||
other.familyFriendly == familyFriendly &&
|
||||
other.recalledAt == recalledAt;
|
||||
other.recalledAt == recalledAt &&
|
||||
other.price == price;
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -281,13 +336,14 @@ class Car extends _Car {
|
|||
make,
|
||||
description,
|
||||
familyFriendly,
|
||||
recalledAt
|
||||
recalledAt,
|
||||
price,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
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() {
|
||||
|
@ -342,7 +398,8 @@ class CarSerializer extends Codec<Car, Map> {
|
|||
? (map['recalled_at'] is DateTime
|
||||
? (map['recalled_at'] as DateTime)
|
||||
: DateTime.parse(map['recalled_at'].toString()))
|
||||
: null);
|
||||
: null,
|
||||
price: map['price'] as double?);
|
||||
}
|
||||
|
||||
static Map<String, dynamic> toMap(_Car? model) {
|
||||
|
@ -356,7 +413,8 @@ class CarSerializer extends Codec<Car, Map> {
|
|||
'make': model.make,
|
||||
'description': model.description,
|
||||
'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,
|
||||
description,
|
||||
familyFriendly,
|
||||
recalledAt
|
||||
recalledAt,
|
||||
price,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -385,4 +444,6 @@ abstract class CarFields {
|
|||
static const String familyFriendly = 'family_friendly';
|
||||
|
||||
static const String recalledAt = 'recalled_at';
|
||||
|
||||
static const String price = 'price';
|
||||
}
|
||||
|
|
|
@ -9,11 +9,14 @@ part of 'custom_expr.dart';
|
|||
class NumbersMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('numbers', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
});
|
||||
schema.create(
|
||||
'numbers',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -25,15 +28,27 @@ class NumbersMigration extends Migration {
|
|||
class AlphabetMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('alphabets', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('value', length: 255);
|
||||
table
|
||||
.declare('numbers_id', ColumnType('int'))
|
||||
.references('numbers', 'id');
|
||||
});
|
||||
schema.create(
|
||||
'alphabets',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'value',
|
||||
length: 255,
|
||||
);
|
||||
table
|
||||
.declare(
|
||||
'numbers_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'numbers',
|
||||
'id',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -47,8 +62,10 @@ class AlphabetMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
|
||||
NumbersQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
NumbersQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
expressions['two'] = 'SELECT 2';
|
||||
|
@ -74,7 +91,12 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'two'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'two',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -100,14 +122,13 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Numbers(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
two: fields.contains('two') ? (row[3] as int?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
two: fields.contains('two') ? (row[3] as int?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -119,9 +140,18 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
|
|||
|
||||
class NumbersQueryWhere extends QueryWhere {
|
||||
NumbersQueryWhere(NumbersQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -131,7 +161,11 @@ class NumbersQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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> {
|
||||
AlphabetQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
AlphabetQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = AlphabetQueryWhere(this);
|
||||
leftJoin(_numbers = NumbersQuery(trampoline: trampoline, parent: this),
|
||||
'numbers_id', 'id',
|
||||
additionalFields: const ['id', 'created_at', 'updated_at', 'two'],
|
||||
trampoline: trampoline);
|
||||
leftJoin(
|
||||
_numbers = NumbersQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'numbers_id',
|
||||
'id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'two',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -195,7 +242,13 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
|
|||
|
||||
@override
|
||||
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
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -221,14 +274,13 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Alphabet(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
value: fields.contains('value') ? (row[3] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
value: fields.contains('value') ? (row[3] as String?) : null,
|
||||
);
|
||||
if (row.length > 5) {
|
||||
var modelOpt = NumbersQuery().parseRow(row.skip(5).take(4).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -250,11 +302,26 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
|
|||
|
||||
class AlphabetQueryWhere extends QueryWhere {
|
||||
AlphabetQueryWhere(AlphabetQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
value = StringSqlExpressionBuilder(query, 'value'),
|
||||
numbersId = NumericSqlExpressionBuilder<int>(query, 'numbers_id');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'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;
|
||||
|
||||
|
@ -268,7 +335,13 @@ class AlphabetQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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
|
||||
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.
|
||||
@override
|
||||
|
@ -336,8 +414,12 @@ class Numbers extends _Numbers {
|
|||
@override
|
||||
int? two;
|
||||
|
||||
Numbers copyWith(
|
||||
{String? id, DateTime? createdAt, DateTime? updatedAt, int? two}) {
|
||||
Numbers copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? two,
|
||||
}) {
|
||||
return Numbers(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -356,7 +438,12 @@ class Numbers extends _Numbers {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, two]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
two,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -371,7 +458,13 @@ class Numbers extends _Numbers {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -391,12 +484,13 @@ class Alphabet extends _Alphabet {
|
|||
@override
|
||||
_Numbers? numbers;
|
||||
|
||||
Alphabet copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? value,
|
||||
_Numbers? numbers}) {
|
||||
Alphabet copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? value,
|
||||
_Numbers? numbers,
|
||||
}) {
|
||||
return Alphabet(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -417,7 +511,13 @@ class Alphabet extends _Alphabet {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, value, numbers]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
value,
|
||||
numbers,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -487,7 +587,12 @@ class NumbersSerializer extends Codec<Numbers, Map> {
|
|||
}
|
||||
|
||||
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';
|
||||
|
||||
|
@ -560,7 +665,7 @@ abstract class AlphabetFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
value,
|
||||
numbers
|
||||
numbers,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,28 +9,54 @@ part of 'email_indexed.dart';
|
|||
class RoleMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('roles', (table) {
|
||||
table.varChar('role', length: 255).primaryKey();
|
||||
});
|
||||
schema.create(
|
||||
'roles',
|
||||
(table) {
|
||||
table
|
||||
.varChar(
|
||||
'role',
|
||||
length: 255,
|
||||
)
|
||||
.primaryKey();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('roles', cascade: true);
|
||||
schema.drop(
|
||||
'roles',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RoleUserMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('role_users', (table) {
|
||||
table
|
||||
.declare('role_role', ColumnType('varchar'))
|
||||
.references('roles', 'role');
|
||||
table
|
||||
.declare('user_email', ColumnType('varchar'))
|
||||
.references('users', 'email');
|
||||
});
|
||||
schema.create(
|
||||
'role_users',
|
||||
(table) {
|
||||
table
|
||||
.declare(
|
||||
'role_role',
|
||||
ColumnType('varchar'),
|
||||
)
|
||||
.references(
|
||||
'roles',
|
||||
'role',
|
||||
);
|
||||
table
|
||||
.declare(
|
||||
'user_email',
|
||||
ColumnType('varchar'),
|
||||
)
|
||||
.references(
|
||||
'users',
|
||||
'email',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -42,16 +68,33 @@ class RoleUserMigration extends Migration {
|
|||
class UserMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('users', (table) {
|
||||
table.varChar('email', length: 255).primaryKey();
|
||||
table.varChar('name', length: 255);
|
||||
table.varChar('password', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'users',
|
||||
(table) {
|
||||
table
|
||||
.varChar(
|
||||
'email',
|
||||
length: 255,
|
||||
)
|
||||
.primaryKey();
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
table.varChar(
|
||||
'password',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('users', cascade: true);
|
||||
schema.drop(
|
||||
'users',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,16 +103,24 @@ class UserMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = RoleQueryWhere(this);
|
||||
leftJoin(
|
||||
'(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',
|
||||
additionalFields: const ['email', 'name', 'password'],
|
||||
trampoline: trampoline);
|
||||
'(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',
|
||||
additionalFields: const [
|
||||
'email',
|
||||
'name',
|
||||
'password',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -195,7 +246,10 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
|||
|
||||
class RoleQueryWhere extends QueryWhere {
|
||||
RoleQueryWhere(RoleQuery query)
|
||||
: role = StringSqlExpressionBuilder(query, 'role');
|
||||
: role = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'role',
|
||||
);
|
||||
|
||||
final StringSqlExpressionBuilder role;
|
||||
|
||||
|
@ -222,18 +276,37 @@ class RoleQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
|
||||
RoleUserQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
RoleUserQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = RoleUserQueryWhere(this);
|
||||
leftJoin(_role = RoleQuery(trampoline: trampoline, parent: this),
|
||||
'role_role', 'role',
|
||||
additionalFields: const ['role'], trampoline: trampoline);
|
||||
leftJoin(_user = UserQuery(trampoline: trampoline, parent: this),
|
||||
'user_email', 'email',
|
||||
additionalFields: const ['email', 'name', 'password'],
|
||||
trampoline: trampoline);
|
||||
leftJoin(
|
||||
_role = RoleQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'role_role',
|
||||
'role',
|
||||
additionalFields: const ['role'],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
leftJoin(
|
||||
_user = UserQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'user_email',
|
||||
'email',
|
||||
additionalFields: const [
|
||||
'email',
|
||||
'name',
|
||||
'password',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -259,7 +332,10 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['role_role', 'user_email'];
|
||||
const _fields = [
|
||||
'role_role',
|
||||
'user_email',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -316,8 +392,14 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
|
|||
|
||||
class RoleUserQueryWhere extends QueryWhere {
|
||||
RoleUserQueryWhere(RoleUserQuery query)
|
||||
: roleRole = StringSqlExpressionBuilder(query, 'role_role'),
|
||||
userEmail = StringSqlExpressionBuilder(query, 'user_email');
|
||||
: roleRole = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'role_role',
|
||||
),
|
||||
userEmail = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'user_email',
|
||||
);
|
||||
|
||||
final StringSqlExpressionBuilder roleRole;
|
||||
|
||||
|
@ -325,7 +407,10 @@ class RoleUserQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [roleRole, userEmail];
|
||||
return [
|
||||
roleRole,
|
||||
userEmail,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,16 +441,20 @@ class RoleUserQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
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.add(tableName);
|
||||
_where = UserQueryWhere(this);
|
||||
leftJoin(
|
||||
'(SELECT role_users.user_email, roles.role FROM roles LEFT JOIN role_users ON role_users.role_role=roles.role)',
|
||||
'email',
|
||||
'user_email',
|
||||
additionalFields: const ['role'],
|
||||
trampoline: trampoline);
|
||||
'(SELECT role_users.user_email, roles.role FROM roles LEFT JOIN role_users ON role_users.role_role=roles.role)',
|
||||
'email',
|
||||
'user_email',
|
||||
additionalFields: const ['role'],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -387,7 +476,11 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['email', 'name', 'password'];
|
||||
const _fields = [
|
||||
'email',
|
||||
'name',
|
||||
'password',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -413,9 +506,10 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = User(
|
||||
email: fields.contains('email') ? (row[0] as String?) : null,
|
||||
name: fields.contains('name') ? (row[1] as String?) : null,
|
||||
password: fields.contains('password') ? (row[2] as String?) : null);
|
||||
email: fields.contains('email') ? (row[0] as String?) : null,
|
||||
name: fields.contains('name') ? (row[1] as String?) : null,
|
||||
password: fields.contains('password') ? (row[2] as String?) : null,
|
||||
);
|
||||
if (row.length > 3) {
|
||||
var modelOpt = RoleQuery().parseRow(row.skip(3).take(1).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -493,9 +587,18 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
|||
|
||||
class UserQueryWhere extends QueryWhere {
|
||||
UserQueryWhere(UserQuery query)
|
||||
: email = StringSqlExpressionBuilder(query, 'email'),
|
||||
name = StringSqlExpressionBuilder(query, 'name'),
|
||||
password = StringSqlExpressionBuilder(query, 'password');
|
||||
: email = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'email',
|
||||
),
|
||||
name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
),
|
||||
password = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'password',
|
||||
);
|
||||
|
||||
final StringSqlExpressionBuilder email;
|
||||
|
||||
|
@ -505,7 +608,11 @@ class UserQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [email, name, password];
|
||||
return [
|
||||
email,
|
||||
name,
|
||||
password,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -543,7 +650,10 @@ class UserQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Role implements _Role {
|
||||
Role({this.role, this.users = const []});
|
||||
Role({
|
||||
this.role,
|
||||
this.users = const [],
|
||||
});
|
||||
|
||||
@override
|
||||
String? role;
|
||||
|
@ -551,7 +661,10 @@ class Role implements _Role {
|
|||
@override
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -565,7 +678,10 @@ class Role implements _Role {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([role, users]);
|
||||
return hashObjects([
|
||||
role,
|
||||
users,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -580,7 +696,10 @@ class Role implements _Role {
|
|||
|
||||
@generatedSerializable
|
||||
class RoleUser implements _RoleUser {
|
||||
RoleUser({this.role, this.user});
|
||||
RoleUser({
|
||||
this.role,
|
||||
this.user,
|
||||
});
|
||||
|
||||
@override
|
||||
_Role? role;
|
||||
|
@ -588,7 +707,10 @@ class RoleUser implements _RoleUser {
|
|||
@override
|
||||
_User? user;
|
||||
|
||||
RoleUser copyWith({_Role? role, _User? user}) {
|
||||
RoleUser copyWith({
|
||||
_Role? role,
|
||||
_User? user,
|
||||
}) {
|
||||
return RoleUser(role: role ?? this.role, user: user ?? this.user);
|
||||
}
|
||||
|
||||
|
@ -599,7 +721,10 @@ class RoleUser implements _RoleUser {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([role, user]);
|
||||
return hashObjects([
|
||||
role,
|
||||
user,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -614,7 +739,12 @@ class RoleUser implements _RoleUser {
|
|||
|
||||
@generatedSerializable
|
||||
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
|
||||
String? email;
|
||||
|
@ -628,8 +758,12 @@ class User implements _User {
|
|||
@override
|
||||
List<_Role> roles;
|
||||
|
||||
User copyWith(
|
||||
{String? email, String? name, String? password, List<_Role>? roles}) {
|
||||
User copyWith({
|
||||
String? email,
|
||||
String? name,
|
||||
String? password,
|
||||
List<_Role>? roles,
|
||||
}) {
|
||||
return User(
|
||||
email: email ?? this.email,
|
||||
name: name ?? this.name,
|
||||
|
@ -649,7 +783,12 @@ class User implements _User {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([email, name, password, roles]);
|
||||
return hashObjects([
|
||||
email,
|
||||
name,
|
||||
password,
|
||||
roles,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -710,7 +849,10 @@ class RoleSerializer extends Codec<Role, Map> {
|
|||
}
|
||||
|
||||
abstract class RoleFields {
|
||||
static const List<String> allFields = <String>[role, users];
|
||||
static const List<String> allFields = <String>[
|
||||
role,
|
||||
users,
|
||||
];
|
||||
|
||||
static const String role = 'role';
|
||||
|
||||
|
@ -762,7 +904,10 @@ class RoleUserSerializer extends Codec<RoleUser, Map> {
|
|||
}
|
||||
|
||||
abstract class RoleUserFields {
|
||||
static const List<String> allFields = <String>[role, user];
|
||||
static const List<String> allFields = <String>[
|
||||
role,
|
||||
user,
|
||||
];
|
||||
|
||||
static const String role = 'role';
|
||||
|
||||
|
@ -817,7 +962,12 @@ class UserSerializer extends Codec<User, Map> {
|
|||
}
|
||||
|
||||
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';
|
||||
|
||||
|
|
|
@ -9,10 +9,16 @@ part of 'fortune.dart';
|
|||
class FortuneMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('fortune', (table) {
|
||||
table.integer('id').primaryKey();
|
||||
table.varChar('message', length: 2048);
|
||||
});
|
||||
schema.create(
|
||||
'fortune',
|
||||
(table) {
|
||||
table.integer('id').primaryKey();
|
||||
table.varChar(
|
||||
'message',
|
||||
length: 2048,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -26,8 +32,10 @@ class FortuneMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
|
||||
FortuneQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
FortuneQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = FortuneQueryWhere(this);
|
||||
|
@ -52,7 +60,10 @@ class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'message'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'message',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -78,8 +89,9 @@ class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Fortune(
|
||||
id: fields.contains('id') ? (row[0] as int?) : null,
|
||||
message: fields.contains('message') ? (row[1] as String?) : null);
|
||||
id: fields.contains('id') ? (row[0] as int?) : null,
|
||||
message: fields.contains('message') ? (row[1] as String?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -91,8 +103,14 @@ class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
|
|||
|
||||
class FortuneQueryWhere extends QueryWhere {
|
||||
FortuneQueryWhere(FortuneQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
message = StringSqlExpressionBuilder(query, 'message');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
message = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'message',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -100,7 +118,10 @@ class FortuneQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, message];
|
||||
return [
|
||||
id,
|
||||
message,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,7 +153,10 @@ class FortuneQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Fortune extends _Fortune {
|
||||
Fortune({this.id, this.message});
|
||||
Fortune({
|
||||
this.id,
|
||||
this.message,
|
||||
});
|
||||
|
||||
@override
|
||||
int? id;
|
||||
|
@ -140,7 +164,10 @@ class Fortune extends _Fortune {
|
|||
@override
|
||||
String? message;
|
||||
|
||||
Fortune copyWith({int? id, String? message}) {
|
||||
Fortune copyWith({
|
||||
int? id,
|
||||
String? message,
|
||||
}) {
|
||||
return Fortune(id: id ?? this.id, message: message ?? this.message);
|
||||
}
|
||||
|
||||
|
@ -151,7 +178,10 @@ class Fortune extends _Fortune {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, message]);
|
||||
return hashObjects([
|
||||
id,
|
||||
message,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -204,7 +234,10 @@ class FortuneSerializer extends Codec<Fortune, Map> {
|
|||
}
|
||||
|
||||
abstract class FortuneFields {
|
||||
static const List<String> allFields = <String>[id, message];
|
||||
static const List<String> allFields = <String>[
|
||||
id,
|
||||
message,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
||||
|
|
|
@ -9,12 +9,15 @@ part of 'has_car.dart';
|
|||
class HasCarMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('has_cars', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('type').defaultsTo(0);
|
||||
});
|
||||
schema.create(
|
||||
'has_cars',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('type').defaultsTo(0);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -28,8 +31,10 @@ class HasCarMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
|
||||
HasCarQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
HasCarQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = HasCarQueryWhere(this);
|
||||
|
@ -54,7 +59,12 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'type'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'type',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -80,18 +90,17 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = HasCar(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
type: fields.contains('type')
|
||||
? row[3] == null
|
||||
? null
|
||||
: CarType.values[(row[3] as int)]
|
||||
: null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
type: fields.contains('type')
|
||||
? row[3] == null
|
||||
? null
|
||||
: CarType?.values[(row[3] as int)]
|
||||
: null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -103,11 +112,23 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
|
|||
|
||||
class HasCarQueryWhere extends QueryWhere {
|
||||
HasCarQueryWhere(HasCarQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
type = EnumSqlExpressionBuilder<CarType?>(
|
||||
query, 'type', (v) => v?.index as int);
|
||||
query,
|
||||
'type',
|
||||
(v) => v?.index as int,
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -119,7 +140,12 @@ class HasCarQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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;
|
||||
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;
|
||||
|
@ -162,7 +188,12 @@ class HasCarQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -179,8 +210,12 @@ class HasCar extends _HasCar {
|
|||
@override
|
||||
CarType? type;
|
||||
|
||||
HasCar copyWith(
|
||||
{String? id, DateTime? createdAt, DateTime? updatedAt, CarType? type}) {
|
||||
HasCar copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
CarType? type,
|
||||
}) {
|
||||
return HasCar(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -199,7 +234,12 @@ class HasCar extends _HasCar {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, type]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
type,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -256,11 +296,7 @@ class HasCarSerializer extends Codec<HasCar, Map> {
|
|||
? (map['updated_at'] as DateTime)
|
||||
: DateTime.parse(map['updated_at'].toString()))
|
||||
: null,
|
||||
type: map['type'] is CarType?
|
||||
? (map['type'] as CarType?) ?? CarType.sedan
|
||||
: (map['type'] is int
|
||||
? CarType.values[map['type'] as int]
|
||||
: CarType.sedan));
|
||||
type: map['type'] as CarType? ?? CarType.sedan);
|
||||
}
|
||||
|
||||
static Map<String, dynamic> toMap(_HasCar? model) {
|
||||
|
@ -271,7 +307,7 @@ class HasCarSerializer extends Codec<HasCar, Map> {
|
|||
'id': model.id,
|
||||
'created_at': model.createdAt?.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,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
type
|
||||
type,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,12 +9,25 @@ part of 'has_map.dart';
|
|||
class HasMapMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('has_maps', (table) {
|
||||
table.declareColumn(
|
||||
'value', Column(type: ColumnType('jsonb'), length: 255));
|
||||
table.declareColumn(
|
||||
'list', Column(type: ColumnType('jsonb'), length: 255));
|
||||
});
|
||||
schema.create(
|
||||
'has_maps',
|
||||
(table) {
|
||||
table.declareColumn(
|
||||
'value',
|
||||
Column(
|
||||
type: ColumnType('jsonb'),
|
||||
length: 255,
|
||||
),
|
||||
);
|
||||
table.declareColumn(
|
||||
'list',
|
||||
Column(
|
||||
type: ColumnType('jsonb'),
|
||||
length: 255,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -28,8 +41,10 @@ class HasMapMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
|
||||
HasMapQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
HasMapQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = HasMapQueryWhere(this);
|
||||
|
@ -54,7 +69,10 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['value', 'list'];
|
||||
const _fields = [
|
||||
'value',
|
||||
'list',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -80,10 +98,10 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = HasMap(
|
||||
value: fields.contains('value')
|
||||
? (row[0] as Map<dynamic, dynamic>?)
|
||||
: null,
|
||||
list: fields.contains('list') ? (row[1] as List<dynamic>?) : null);
|
||||
value:
|
||||
fields.contains('value') ? (row[0] as Map<dynamic, dynamic>?) : null,
|
||||
list: fields.contains('list') ? (row[1] as List<dynamic>?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -95,8 +113,14 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
|
|||
|
||||
class HasMapQueryWhere extends QueryWhere {
|
||||
HasMapQueryWhere(HasMapQuery query)
|
||||
: value = MapSqlExpressionBuilder(query, 'value'),
|
||||
list = ListSqlExpressionBuilder(query, 'list');
|
||||
: value = MapSqlExpressionBuilder(
|
||||
query,
|
||||
'value',
|
||||
),
|
||||
list = ListSqlExpressionBuilder(
|
||||
query,
|
||||
'list',
|
||||
);
|
||||
|
||||
final MapSqlExpressionBuilder value;
|
||||
|
||||
|
@ -104,7 +128,10 @@ class HasMapQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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;
|
||||
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);
|
||||
|
@ -136,7 +163,10 @@ class HasMapQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class HasMap implements _HasMap {
|
||||
HasMap({this.value, this.list = const []});
|
||||
HasMap({
|
||||
this.value,
|
||||
this.list = const [],
|
||||
});
|
||||
|
||||
@override
|
||||
Map<dynamic, dynamic>? value;
|
||||
|
@ -144,7 +174,10 @@ class HasMap implements _HasMap {
|
|||
@override
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -159,7 +192,10 @@ class HasMap implements _HasMap {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([value, list]);
|
||||
return hashObjects([
|
||||
value,
|
||||
list,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -218,7 +254,10 @@ class HasMapSerializer extends Codec<HasMap, Map> {
|
|||
}
|
||||
|
||||
abstract class HasMapFields {
|
||||
static const List<String> allFields = <String>[value, list];
|
||||
static const List<String> allFields = <String>[
|
||||
value,
|
||||
list,
|
||||
];
|
||||
|
||||
static const String value = 'value';
|
||||
|
||||
|
|
|
@ -9,30 +9,42 @@ part of angel3_orm_generator.test.models.leg;
|
|||
class LegMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('legs', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('name', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'legs',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('legs', cascade: true);
|
||||
schema.drop(
|
||||
'legs',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FootMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('feet', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('leg_id');
|
||||
table.double('n_toes');
|
||||
});
|
||||
schema.create(
|
||||
'feet',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('leg_id');
|
||||
table.double('n_toes');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -46,20 +58,29 @@ class FootMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = LegQueryWhere(this);
|
||||
leftJoin(
|
||||
_foot = FootQuery(trampoline: trampoline, parent: this), 'id', 'leg_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'leg_id',
|
||||
'n_toes'
|
||||
],
|
||||
trampoline: trampoline);
|
||||
_foot = FootQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'id',
|
||||
'leg_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'leg_id',
|
||||
'n_toes',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -83,7 +104,12 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'name'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'name',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -109,14 +135,13 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Leg(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
);
|
||||
if (row.length > 4) {
|
||||
var modelOpt = FootQuery().parseRow(row.skip(4).take(5).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -138,10 +163,22 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
|
|||
|
||||
class LegQueryWhere extends QueryWhere {
|
||||
LegQueryWhere(LegQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
name = StringSqlExpressionBuilder(query, 'name');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -153,7 +190,12 @@ class LegQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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> {
|
||||
FootQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||
FootQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = FootQueryWhere(this);
|
||||
|
@ -206,7 +251,7 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'n_toes': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -216,7 +261,13 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
|
|||
|
||||
@override
|
||||
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
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -242,15 +293,14 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Foot(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
legId: fields.contains('leg_id') ? (row[3] as int?) : null,
|
||||
nToes: fields.contains('n_toes') ? mapToDouble(row[4]) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
legId: fields.contains('leg_id') ? (row[3] as int?) : null,
|
||||
nToes: fields.contains('n_toes') ? mapToDouble(row[4]) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -262,11 +312,26 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
|
|||
|
||||
class FootQueryWhere extends QueryWhere {
|
||||
FootQueryWhere(FootQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
legId = NumericSqlExpressionBuilder<int>(query, 'leg_id'),
|
||||
nToes = NumericSqlExpressionBuilder<double>(query, 'n_toes');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
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;
|
||||
|
||||
|
@ -280,14 +345,20 @@ class FootQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, legId, nToes];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
legId,
|
||||
nToes,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
class FootQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'n_toes': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -311,10 +382,10 @@ class FootQueryValues extends MapQueryValues {
|
|||
|
||||
set legId(int? value) => values['leg_id'] = value;
|
||||
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) {
|
||||
createdAt = model.createdAt;
|
||||
updatedAt = model.updatedAt;
|
||||
|
@ -329,7 +400,13 @@ class FootQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -349,12 +426,13 @@ class Leg extends _Leg {
|
|||
@override
|
||||
String? name;
|
||||
|
||||
Leg copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
_Foot? foot,
|
||||
String? name}) {
|
||||
Leg copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
_Foot? foot,
|
||||
String? name,
|
||||
}) {
|
||||
return Leg(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -375,7 +453,13 @@ class Leg extends _Leg {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, foot, name]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
foot,
|
||||
name,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -390,7 +474,13 @@ class Leg extends _Leg {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -410,12 +500,13 @@ class Foot extends _Foot {
|
|||
@override
|
||||
double? nToes;
|
||||
|
||||
Foot copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? legId,
|
||||
double? nToes}) {
|
||||
Foot copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? legId,
|
||||
double? nToes,
|
||||
}) {
|
||||
return Foot(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -436,7 +527,13 @@ class Foot extends _Foot {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, legId, nToes]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
legId,
|
||||
nToes,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -515,7 +612,7 @@ abstract class LegFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
foot,
|
||||
name
|
||||
name,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -589,7 +686,7 @@ abstract class FootFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
legId,
|
||||
nToes
|
||||
nToes,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,17 +9,26 @@ part of angel3_orm_generator.test.models.order;
|
|||
class OrderMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('orders', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('employee_id');
|
||||
table.timeStamp('order_date');
|
||||
table.integer('shipper_id');
|
||||
table
|
||||
.declare('customer_id', ColumnType('int'))
|
||||
.references('customers', 'id');
|
||||
});
|
||||
schema.create(
|
||||
'orders',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('employee_id');
|
||||
table.timeStamp('order_date');
|
||||
table.integer('shipper_id');
|
||||
table
|
||||
.declare(
|
||||
'customer_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'customers',
|
||||
'id',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -31,11 +40,14 @@ class OrderMigration extends Migration {
|
|||
class CustomerMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('customers', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
});
|
||||
schema.create(
|
||||
'customers',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -49,14 +61,27 @@ class CustomerMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = OrderQueryWhere(this);
|
||||
leftJoin(_customer = CustomerQuery(trampoline: trampoline, parent: this),
|
||||
'customer_id', 'id',
|
||||
additionalFields: const ['id', 'created_at', 'updated_at'],
|
||||
trampoline: trampoline);
|
||||
leftJoin(
|
||||
_customer = CustomerQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'customer_id',
|
||||
'id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -87,7 +112,7 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
|
|||
'customer_id',
|
||||
'employee_id',
|
||||
'order_date',
|
||||
'shipper_id'
|
||||
'shipper_id',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -114,18 +139,16 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Order(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
employeeId: fields.contains('employee_id') ? (row[4] as int?) : null,
|
||||
orderDate: fields.contains('order_date')
|
||||
? mapToNullableDateTime(row[5])
|
||||
: null,
|
||||
shipperId: fields.contains('shipper_id') ? (row[6] as int?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
employeeId: fields.contains('employee_id') ? (row[4] as int?) : null,
|
||||
orderDate:
|
||||
fields.contains('order_date') ? mapToNullableDateTime(row[5]) : null,
|
||||
shipperId: fields.contains('shipper_id') ? (row[6] as int?) : null,
|
||||
);
|
||||
if (row.length > 7) {
|
||||
var modelOpt = CustomerQuery().parseRow(row.skip(7).take(3).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -147,13 +170,34 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
|
|||
|
||||
class OrderQueryWhere extends QueryWhere {
|
||||
OrderQueryWhere(OrderQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, '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');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'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;
|
||||
|
||||
|
@ -178,7 +222,7 @@ class OrderQueryWhere extends QueryWhere {
|
|||
customerId,
|
||||
employeeId,
|
||||
orderDate,
|
||||
shipperId
|
||||
shipperId,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -237,8 +281,10 @@ class OrderQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
|
||||
CustomerQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
CustomerQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = CustomerQueryWhere(this);
|
||||
|
@ -263,7 +309,11 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -289,13 +339,12 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Customer(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -307,9 +356,18 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
|
|||
|
||||
class CustomerQueryWhere extends QueryWhere {
|
||||
CustomerQueryWhere(CustomerQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -319,7 +377,11 @@ class CustomerQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,14 +418,15 @@ class CustomerQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class Order extends _Order {
|
||||
Order(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.customer,
|
||||
this.employeeId,
|
||||
this.orderDate,
|
||||
this.shipperId});
|
||||
Order({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.customer,
|
||||
this.employeeId,
|
||||
this.orderDate,
|
||||
this.shipperId,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -389,14 +452,15 @@ class Order extends _Order {
|
|||
@override
|
||||
int? shipperId;
|
||||
|
||||
Order copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
_Customer? customer,
|
||||
int? employeeId,
|
||||
DateTime? orderDate,
|
||||
int? shipperId}) {
|
||||
Order copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
_Customer? customer,
|
||||
int? employeeId,
|
||||
DateTime? orderDate,
|
||||
int? shipperId,
|
||||
}) {
|
||||
return Order(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -421,8 +485,15 @@ class Order extends _Order {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects(
|
||||
[id, createdAt, updatedAt, customer, employeeId, orderDate, shipperId]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
customer,
|
||||
employeeId,
|
||||
orderDate,
|
||||
shipperId,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -437,7 +508,11 @@ class Order extends _Order {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -451,7 +526,11 @@ class Customer extends _Customer {
|
|||
@override
|
||||
DateTime? updatedAt;
|
||||
|
||||
Customer copyWith({String? id, DateTime? createdAt, DateTime? updatedAt}) {
|
||||
Customer copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
}) {
|
||||
return Customer(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -468,7 +547,11 @@ class Customer extends _Customer {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -557,7 +640,7 @@ abstract class OrderFields {
|
|||
customer,
|
||||
employeeId,
|
||||
orderDate,
|
||||
shipperId
|
||||
shipperId,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -626,7 +709,11 @@ class CustomerSerializer extends Codec<Customer, Map> {
|
|||
}
|
||||
|
||||
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';
|
||||
|
||||
|
|
|
@ -9,13 +9,19 @@ part of angel_orm3.generator.models.person;
|
|||
class PersonMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('persons', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('name', length: 255);
|
||||
table.integer('age');
|
||||
});
|
||||
schema.create(
|
||||
'persons',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
table.integer('age');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -29,8 +35,10 @@ class PersonMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class PersonQuery extends Query<Person, PersonQueryWhere> {
|
||||
PersonQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
PersonQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = PersonQueryWhere(this);
|
||||
|
@ -55,7 +63,13 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
|
|||
|
||||
@override
|
||||
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
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -81,15 +95,14 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Person(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
age: fields.contains('age') ? (row[4] as int?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
age: fields.contains('age') ? (row[4] as int?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -101,11 +114,26 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
|
|||
|
||||
class PersonQueryWhere extends QueryWhere {
|
||||
PersonQueryWhere(PersonQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
name = StringSqlExpressionBuilder(query, 'name'),
|
||||
age = NumericSqlExpressionBuilder<int>(query, 'age');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
),
|
||||
age = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'age',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -119,7 +147,13 @@ class PersonQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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
|
||||
extends Query<PersonWithLastOrder, PersonWithLastOrderQueryWhere> {
|
||||
PersonWithLastOrderQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
PersonWithLastOrderQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
expressions['last_order_name'] = 'po.name';
|
||||
|
@ -183,7 +219,7 @@ class PersonWithLastOrderQuery
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'last_order_price': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -193,7 +229,11 @@ class PersonWithLastOrderQuery
|
|||
|
||||
@override
|
||||
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
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -219,11 +259,12 @@ class PersonWithLastOrderQuery
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = PersonWithLastOrder(
|
||||
name: fields.contains('name') ? (row[0] as String?) : null,
|
||||
lastOrderName:
|
||||
fields.contains('last_order_name') ? (row[1] as String?) : null,
|
||||
lastOrderPrice:
|
||||
fields.contains('last_order_price') ? mapToDouble(row[2]) : null);
|
||||
name: fields.contains('name') ? (row[0] as String?) : null,
|
||||
lastOrderName:
|
||||
fields.contains('last_order_name') ? (row[1] as String?) : null,
|
||||
lastOrderPrice:
|
||||
fields.contains('last_order_price') ? mapToDouble(row[2]) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -235,7 +276,10 @@ class PersonWithLastOrderQuery
|
|||
|
||||
class PersonWithLastOrderQueryWhere extends QueryWhere {
|
||||
PersonWithLastOrderQueryWhere(PersonWithLastOrderQuery query)
|
||||
: name = StringSqlExpressionBuilder(query, 'name');
|
||||
: name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
);
|
||||
|
||||
final StringSqlExpressionBuilder name;
|
||||
|
||||
|
@ -248,7 +292,7 @@ class PersonWithLastOrderQueryWhere extends QueryWhere {
|
|||
class PersonWithLastOrderQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'last_order_price': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get name {
|
||||
|
@ -267,7 +311,13 @@ class PersonWithLastOrderQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -287,12 +337,13 @@ class Person extends _Person {
|
|||
@override
|
||||
int? age;
|
||||
|
||||
Person copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
int? age}) {
|
||||
Person copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
int? age,
|
||||
}) {
|
||||
return Person(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -313,7 +364,13 @@ class Person extends _Person {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, name, age]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
age,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -328,7 +385,11 @@ class Person extends _Person {
|
|||
|
||||
@generatedSerializable
|
||||
class PersonWithLastOrder extends _PersonWithLastOrder {
|
||||
PersonWithLastOrder({this.name, this.lastOrderName, this.lastOrderPrice});
|
||||
PersonWithLastOrder({
|
||||
this.name,
|
||||
this.lastOrderName,
|
||||
this.lastOrderPrice,
|
||||
});
|
||||
|
||||
@override
|
||||
String? name;
|
||||
|
@ -339,8 +400,11 @@ class PersonWithLastOrder extends _PersonWithLastOrder {
|
|||
@override
|
||||
double? lastOrderPrice;
|
||||
|
||||
PersonWithLastOrder copyWith(
|
||||
{String? name, String? lastOrderName, double? lastOrderPrice}) {
|
||||
PersonWithLastOrder copyWith({
|
||||
String? name,
|
||||
String? lastOrderName,
|
||||
double? lastOrderPrice,
|
||||
}) {
|
||||
return PersonWithLastOrder(
|
||||
name: name ?? this.name,
|
||||
lastOrderName: lastOrderName ?? this.lastOrderName,
|
||||
|
@ -357,7 +421,11 @@ class PersonWithLastOrder extends _PersonWithLastOrder {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([name, lastOrderName, lastOrderPrice]);
|
||||
return hashObjects([
|
||||
name,
|
||||
lastOrderName,
|
||||
lastOrderPrice,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -434,7 +502,7 @@ abstract class PersonFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
age
|
||||
age,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -497,7 +565,7 @@ abstract class PersonWithLastOrderFields {
|
|||
static const List<String> allFields = <String>[
|
||||
name,
|
||||
lastOrderName,
|
||||
lastOrderPrice
|
||||
lastOrderPrice,
|
||||
];
|
||||
|
||||
static const String name = 'name';
|
||||
|
|
|
@ -9,15 +9,21 @@ part of angel3_orm_generator.test.models.person_order;
|
|||
class PersonOrderMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('person_orders', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('person_id');
|
||||
table.varChar('name', length: 255);
|
||||
table.double('price');
|
||||
table.boolean('deleted');
|
||||
});
|
||||
schema.create(
|
||||
'person_orders',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('person_id');
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
table.double('price');
|
||||
table.boolean('deleted');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -31,8 +37,10 @@ class PersonOrderMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
|
||||
PersonOrderQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
PersonOrderQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = PersonOrderQueryWhere(this);
|
||||
|
@ -47,7 +55,7 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -64,7 +72,7 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
|
|||
'person_id',
|
||||
'name',
|
||||
'price',
|
||||
'deleted'
|
||||
'deleted',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -91,17 +99,16 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = PersonOrder(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
personId: fields.contains('person_id') ? (row[3] as int?) : null,
|
||||
name: fields.contains('name') ? (row[4] as String?) : null,
|
||||
price: fields.contains('price') ? mapToDouble(row[5]) : null,
|
||||
deleted: fields.contains('deleted') ? mapToBool(row[6]) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
personId: fields.contains('person_id') ? (row[3] as int?) : null,
|
||||
name: fields.contains('name') ? (row[4] as String?) : null,
|
||||
price: fields.contains('price') ? mapToDouble(row[5]) : null,
|
||||
deleted: fields.contains('deleted') ? mapToBool(row[6]) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -113,13 +120,34 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
|
|||
|
||||
class PersonOrderQueryWhere extends QueryWhere {
|
||||
PersonOrderQueryWhere(PersonOrderQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, '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');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'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;
|
||||
|
||||
|
@ -137,14 +165,22 @@ class PersonOrderQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, personId, name, price, deleted];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
personId,
|
||||
name,
|
||||
price,
|
||||
deleted,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
class PersonOrderQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -173,10 +209,10 @@ class PersonOrderQueryValues extends MapQueryValues {
|
|||
|
||||
set name(String? value) => values['name'] = value;
|
||||
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 {
|
||||
return (values['deleted'] as bool?);
|
||||
}
|
||||
|
@ -194,8 +230,10 @@ class PersonOrderQueryValues extends MapQueryValues {
|
|||
|
||||
class OrderWithPersonInfoQuery
|
||||
extends Query<OrderWithPersonInfo, OrderWithPersonInfoQueryWhere> {
|
||||
OrderWithPersonInfoQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
OrderWithPersonInfoQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
expressions['person_name'] = 'p.name';
|
||||
|
@ -213,7 +251,7 @@ class OrderWithPersonInfoQuery
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'char'};
|
||||
return {};
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -231,7 +269,7 @@ class OrderWithPersonInfoQuery
|
|||
'price',
|
||||
'deleted',
|
||||
'person_name',
|
||||
'person_age'
|
||||
'person_age',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -258,18 +296,17 @@ class OrderWithPersonInfoQuery
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = OrderWithPersonInfo(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
price: fields.contains('price') ? mapToDouble(row[4]) : null,
|
||||
deleted: fields.contains('deleted') ? mapToBool(row[5]) : null,
|
||||
personName: fields.contains('person_name') ? (row[6] as String?) : null,
|
||||
personAge: fields.contains('person_age') ? (row[7] as int?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
price: fields.contains('price') ? mapToDouble(row[4]) : null,
|
||||
deleted: fields.contains('deleted') ? mapToBool(row[5]) : null,
|
||||
personName: fields.contains('person_name') ? (row[6] as String?) : null,
|
||||
personAge: fields.contains('person_age') ? (row[7] as int?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -281,12 +318,30 @@ class OrderWithPersonInfoQuery
|
|||
|
||||
class OrderWithPersonInfoQueryWhere extends QueryWhere {
|
||||
OrderWithPersonInfoQueryWhere(OrderWithPersonInfoQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
name = StringSqlExpressionBuilder(query, 'name'),
|
||||
price = NumericSqlExpressionBuilder<double>(query, 'price'),
|
||||
deleted = BooleanSqlExpressionBuilder(query, 'deleted');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
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;
|
||||
|
||||
|
@ -302,14 +357,21 @@ class OrderWithPersonInfoQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, name, price, deleted];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
price,
|
||||
deleted,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
class OrderWithPersonInfoQueryValues extends MapQueryValues {
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'price': 'double precision'};
|
||||
return {};
|
||||
}
|
||||
|
||||
String? get id {
|
||||
|
@ -333,10 +395,10 @@ class OrderWithPersonInfoQueryValues extends MapQueryValues {
|
|||
|
||||
set name(String? value) => values['name'] = value;
|
||||
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 {
|
||||
return (values['deleted'] as bool?);
|
||||
}
|
||||
|
@ -357,14 +419,15 @@ class OrderWithPersonInfoQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class PersonOrder extends _PersonOrder {
|
||||
PersonOrder(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.personId,
|
||||
this.name,
|
||||
this.price,
|
||||
this.deleted});
|
||||
PersonOrder({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.personId,
|
||||
this.name,
|
||||
this.price,
|
||||
this.deleted,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -390,14 +453,15 @@ class PersonOrder extends _PersonOrder {
|
|||
@override
|
||||
bool? deleted;
|
||||
|
||||
PersonOrder copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? personId,
|
||||
String? name,
|
||||
double? price,
|
||||
bool? deleted}) {
|
||||
PersonOrder copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? personId,
|
||||
String? name,
|
||||
double? price,
|
||||
bool? deleted,
|
||||
}) {
|
||||
return PersonOrder(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -422,8 +486,15 @@ class PersonOrder extends _PersonOrder {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects(
|
||||
[id, createdAt, updatedAt, personId, name, price, deleted]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
personId,
|
||||
name,
|
||||
price,
|
||||
deleted,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -438,15 +509,16 @@ class PersonOrder extends _PersonOrder {
|
|||
|
||||
@generatedSerializable
|
||||
class OrderWithPersonInfo extends _OrderWithPersonInfo {
|
||||
OrderWithPersonInfo(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.name,
|
||||
this.price,
|
||||
this.deleted,
|
||||
this.personName,
|
||||
this.personAge});
|
||||
OrderWithPersonInfo({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.name,
|
||||
this.price,
|
||||
this.deleted,
|
||||
this.personName,
|
||||
this.personAge,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -475,15 +547,16 @@ class OrderWithPersonInfo extends _OrderWithPersonInfo {
|
|||
@override
|
||||
int? personAge;
|
||||
|
||||
OrderWithPersonInfo copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
double? price,
|
||||
bool? deleted,
|
||||
String? personName,
|
||||
int? personAge}) {
|
||||
OrderWithPersonInfo copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
double? price,
|
||||
bool? deleted,
|
||||
String? personName,
|
||||
int? personAge,
|
||||
}) {
|
||||
return OrderWithPersonInfo(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -518,7 +591,7 @@ class OrderWithPersonInfo extends _OrderWithPersonInfo {
|
|||
price,
|
||||
deleted,
|
||||
personName,
|
||||
personAge
|
||||
personAge,
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -602,7 +675,7 @@ abstract class PersonOrderFields {
|
|||
personId,
|
||||
name,
|
||||
price,
|
||||
deleted
|
||||
deleted,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -692,7 +765,7 @@ abstract class OrderWithPersonInfoFields {
|
|||
price,
|
||||
deleted,
|
||||
personName,
|
||||
personAge
|
||||
personAge,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,30 +9,42 @@ part of angel3_orm_generator.test.models.tree;
|
|||
class TreeMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('trees', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('rings').unique();
|
||||
});
|
||||
schema.create(
|
||||
'trees',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('rings').unique();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('trees', cascade: true);
|
||||
schema.drop(
|
||||
'trees',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FruitMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('fruits', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('tree_id');
|
||||
table.varChar('common_name', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'fruits',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('tree_id');
|
||||
table.varChar(
|
||||
'common_name',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -46,20 +58,29 @@ class FruitMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = TreeQueryWhere(this);
|
||||
leftJoin(_fruits = FruitQuery(trampoline: trampoline, parent: this), 'id',
|
||||
leftJoin(
|
||||
_fruits = FruitQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'id',
|
||||
'tree_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'tree_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'tree_id',
|
||||
'common_name'
|
||||
],
|
||||
trampoline: trampoline);
|
||||
'common_name',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -83,7 +104,12 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'rings'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'rings',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -109,14 +135,13 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Tree(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
rings: fields.contains('rings') ? (row[3] as int?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
rings: fields.contains('rings') ? (row[3] as int?) : null,
|
||||
);
|
||||
if (row.length > 4) {
|
||||
var modelOpt = FruitQuery().parseRow(row.skip(4).take(5).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -192,10 +217,22 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
|
|||
|
||||
class TreeQueryWhere extends QueryWhere {
|
||||
TreeQueryWhere(TreeQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
rings = NumericSqlExpressionBuilder<int>(query, 'rings');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
rings = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'rings',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -207,7 +244,12 @@ class TreeQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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> {
|
||||
FruitQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||
FruitQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = FruitQueryWhere(this);
|
||||
|
@ -275,7 +320,7 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
|
|||
'created_at',
|
||||
'updated_at',
|
||||
'tree_id',
|
||||
'common_name'
|
||||
'common_name',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -302,16 +347,14 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Fruit(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
treeId: fields.contains('tree_id') ? (row[3] as int?) : null,
|
||||
commonName:
|
||||
fields.contains('common_name') ? (row[4] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
treeId: fields.contains('tree_id') ? (row[3] as int?) : null,
|
||||
commonName: fields.contains('common_name') ? (row[4] as String?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -323,11 +366,26 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
|
|||
|
||||
class FruitQueryWhere extends QueryWhere {
|
||||
FruitQueryWhere(FruitQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
treeId = NumericSqlExpressionBuilder<int>(query, 'tree_id'),
|
||||
commonName = StringSqlExpressionBuilder(query, 'common_name');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
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;
|
||||
|
||||
|
@ -341,7 +399,13 @@ class FruitQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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
|
||||
class Tree extends _Tree {
|
||||
Tree(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.rings,
|
||||
List<_Fruit> fruits = const []})
|
||||
: fruits = List.unmodifiable(fruits);
|
||||
Tree({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.rings,
|
||||
List<_Fruit> fruits = const [],
|
||||
}) : fruits = List.unmodifiable(fruits);
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -416,12 +480,13 @@ class Tree extends _Tree {
|
|||
@override
|
||||
List<_Fruit> fruits;
|
||||
|
||||
Tree copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? rings,
|
||||
List<_Fruit>? fruits}) {
|
||||
Tree copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? rings,
|
||||
List<_Fruit>? fruits,
|
||||
}) {
|
||||
return Tree(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -443,7 +508,13 @@ class Tree extends _Tree {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, rings, fruits]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
rings,
|
||||
fruits,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -458,8 +529,13 @@ class Tree extends _Tree {
|
|||
|
||||
@generatedSerializable
|
||||
class Fruit extends _Fruit {
|
||||
Fruit(
|
||||
{this.id, this.createdAt, this.updatedAt, this.treeId, this.commonName});
|
||||
Fruit({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.treeId,
|
||||
this.commonName,
|
||||
});
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -479,12 +555,13 @@ class Fruit extends _Fruit {
|
|||
@override
|
||||
String? commonName;
|
||||
|
||||
Fruit copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? treeId,
|
||||
String? commonName}) {
|
||||
Fruit copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? treeId,
|
||||
String? commonName,
|
||||
}) {
|
||||
return Fruit(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -505,7 +582,13 @@ class Fruit extends _Fruit {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, treeId, commonName]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
treeId,
|
||||
commonName,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -585,7 +668,7 @@ abstract class TreeFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
rings,
|
||||
fruits
|
||||
fruits,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -659,7 +742,7 @@ abstract class FruitFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
treeId,
|
||||
commonName
|
||||
commonName,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,9 +9,17 @@ part of 'unorthodox.dart';
|
|||
class UnorthodoxMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('unorthodoxes', (table) {
|
||||
table.varChar('name', length: 255).primaryKey();
|
||||
});
|
||||
schema.create(
|
||||
'unorthodoxes',
|
||||
(table) {
|
||||
table
|
||||
.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
)
|
||||
.primaryKey();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -23,30 +31,48 @@ class UnorthodoxMigration extends Migration {
|
|||
class WeirdJoinMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('weird_joins', (table) {
|
||||
table.integer('id').primaryKey();
|
||||
table
|
||||
.declare('join_name', ColumnType('varchar'))
|
||||
.references('unorthodoxes', 'name');
|
||||
});
|
||||
schema.create(
|
||||
'weird_joins',
|
||||
(table) {
|
||||
table.integer('id').primaryKey();
|
||||
table
|
||||
.declare(
|
||||
'join_name',
|
||||
ColumnType('varchar'),
|
||||
)
|
||||
.references(
|
||||
'unorthodoxes',
|
||||
'name',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('weird_joins', cascade: true);
|
||||
schema.drop(
|
||||
'weird_joins',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class SongMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('songs', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('weird_join_id');
|
||||
table.varChar('title', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'songs',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.integer('weird_join_id');
|
||||
table.varChar(
|
||||
'title',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -58,10 +84,13 @@ class SongMigration extends Migration {
|
|||
class NumbaMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('numbas', (table) {
|
||||
table.integer('i').primaryKey();
|
||||
table.integer('parent');
|
||||
});
|
||||
schema.create(
|
||||
'numbas',
|
||||
(table) {
|
||||
table.integer('i').primaryKey();
|
||||
table.integer('parent');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -73,26 +102,54 @@ class NumbaMigration extends Migration {
|
|||
class FooMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('foos', (table) {
|
||||
table.varChar('bar', length: 255).primaryKey();
|
||||
});
|
||||
schema.create(
|
||||
'foos',
|
||||
(table) {
|
||||
table
|
||||
.varChar(
|
||||
'bar',
|
||||
length: 255,
|
||||
)
|
||||
.primaryKey();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('foos', cascade: true);
|
||||
schema.drop(
|
||||
'foos',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FooPivotMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('foo_pivots', (table) {
|
||||
table
|
||||
.declare('weird_join_id', ColumnType('int'))
|
||||
.references('weird_joins', 'id');
|
||||
table.declare('foo_bar', ColumnType('varchar')).references('foos', 'bar');
|
||||
});
|
||||
schema.create(
|
||||
'foo_pivots',
|
||||
(table) {
|
||||
table
|
||||
.declare(
|
||||
'weird_join_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'weird_joins',
|
||||
'id',
|
||||
);
|
||||
table
|
||||
.declare(
|
||||
'foo_bar',
|
||||
ColumnType('varchar'),
|
||||
)
|
||||
.references(
|
||||
'foos',
|
||||
'bar',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -106,8 +163,10 @@ class FooPivotMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
|
||||
UnorthodoxQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
UnorthodoxQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = UnorthodoxQueryWhere(this);
|
||||
|
@ -170,7 +229,10 @@ class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
|
|||
|
||||
class UnorthodoxQueryWhere extends QueryWhere {
|
||||
UnorthodoxQueryWhere(UnorthodoxQuery query)
|
||||
: name = StringSqlExpressionBuilder(query, 'name');
|
||||
: name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
);
|
||||
|
||||
final StringSqlExpressionBuilder name;
|
||||
|
||||
|
@ -197,36 +259,59 @@ class UnorthodoxQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
|
||||
WeirdJoinQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
WeirdJoinQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = WeirdJoinQueryWhere(this);
|
||||
leftJoin(
|
||||
_unorthodox = UnorthodoxQuery(trampoline: trampoline, parent: this),
|
||||
'join_name',
|
||||
'name',
|
||||
additionalFields: const ['name'],
|
||||
trampoline: trampoline);
|
||||
leftJoin(_song = SongQuery(trampoline: trampoline, parent: this), 'id',
|
||||
'weird_join_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'weird_join_id',
|
||||
'title'
|
||||
],
|
||||
trampoline: trampoline);
|
||||
leftJoin(_numbas = NumbaQuery(trampoline: trampoline, parent: this), 'id',
|
||||
'parent',
|
||||
additionalFields: const ['i', 'parent'], trampoline: trampoline);
|
||||
_unorthodox = UnorthodoxQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'join_name',
|
||||
'name',
|
||||
additionalFields: const ['name'],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
leftJoin(
|
||||
'(SELECT foo_pivots.weird_join_id, foos.bar FROM foos LEFT JOIN foo_pivots ON foo_pivots.foo_bar=foos.bar)',
|
||||
_song = SongQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'id',
|
||||
'weird_join_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'weird_join_id',
|
||||
additionalFields: const ['bar'],
|
||||
trampoline: trampoline);
|
||||
'title',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
leftJoin(
|
||||
_numbas = NumbaQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'id',
|
||||
'parent',
|
||||
additionalFields: const [
|
||||
'i',
|
||||
'parent',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
leftJoin(
|
||||
'(SELECT foo_pivots.weird_join_id, foos.bar FROM foos LEFT JOIN foo_pivots ON foo_pivots.foo_bar=foos.bar)',
|
||||
'id',
|
||||
'weird_join_id',
|
||||
additionalFields: const ['bar'],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -254,7 +339,10 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'join_name'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'join_name',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -390,8 +478,14 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
|
|||
|
||||
class WeirdJoinQueryWhere extends QueryWhere {
|
||||
WeirdJoinQueryWhere(WeirdJoinQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
joinName = StringSqlExpressionBuilder(query, 'join_name');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
joinName = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'join_name',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -399,7 +493,10 @@ class WeirdJoinQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, joinName];
|
||||
return [
|
||||
id,
|
||||
joinName,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -428,7 +525,10 @@ class WeirdJoinQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
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.add(tableName);
|
||||
_where = SongQueryWhere(this);
|
||||
|
@ -458,7 +558,7 @@ class SongQuery extends Query<Song, SongQueryWhere> {
|
|||
'created_at',
|
||||
'updated_at',
|
||||
'weird_join_id',
|
||||
'title'
|
||||
'title',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -485,15 +585,14 @@ class SongQuery extends Query<Song, SongQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Song(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
weirdJoinId: fields.contains('weird_join_id') ? (row[3] as int?) : null,
|
||||
title: fields.contains('title') ? (row[4] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
weirdJoinId: fields.contains('weird_join_id') ? (row[3] as int?) : null,
|
||||
title: fields.contains('title') ? (row[4] as String?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -505,11 +604,26 @@ class SongQuery extends Query<Song, SongQueryWhere> {
|
|||
|
||||
class SongQueryWhere extends QueryWhere {
|
||||
SongQueryWhere(SongQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
weirdJoinId = NumericSqlExpressionBuilder<int>(query, 'weird_join_id'),
|
||||
title = StringSqlExpressionBuilder(query, 'title');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
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;
|
||||
|
||||
|
@ -523,7 +637,13 @@ class SongQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
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> {
|
||||
NumbaQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||
NumbaQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = NumbaQueryWhere(this);
|
||||
|
@ -592,7 +715,10 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['i', 'parent'];
|
||||
const _fields = [
|
||||
'i',
|
||||
'parent',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -618,8 +744,9 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Numba(
|
||||
i: fields.contains('i') ? (row[0] as int?) : null,
|
||||
parent: fields.contains('parent') ? (row[1] as int?) : null);
|
||||
i: fields.contains('i') ? (row[0] as int?) : null,
|
||||
parent: fields.contains('parent') ? (row[1] as int?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -631,8 +758,14 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
|
|||
|
||||
class NumbaQueryWhere extends QueryWhere {
|
||||
NumbaQueryWhere(NumbaQuery query)
|
||||
: i = NumericSqlExpressionBuilder<int>(query, 'i'),
|
||||
parent = NumericSqlExpressionBuilder<int>(query, 'parent');
|
||||
: i = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'i',
|
||||
),
|
||||
parent = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'parent',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> i;
|
||||
|
||||
|
@ -640,7 +773,10 @@ class NumbaQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [i, parent];
|
||||
return [
|
||||
i,
|
||||
parent,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -667,16 +803,23 @@ class NumbaQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
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.add(tableName);
|
||||
_where = FooQueryWhere(this);
|
||||
leftJoin(
|
||||
'(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',
|
||||
'foo_bar',
|
||||
additionalFields: const ['id', 'join_name'],
|
||||
trampoline: trampoline);
|
||||
'(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',
|
||||
'foo_bar',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'join_name',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -804,7 +947,10 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
|
|||
|
||||
class FooQueryWhere extends QueryWhere {
|
||||
FooQueryWhere(FooQuery query)
|
||||
: bar = StringSqlExpressionBuilder(query, 'bar');
|
||||
: bar = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'bar',
|
||||
);
|
||||
|
||||
final StringSqlExpressionBuilder bar;
|
||||
|
||||
|
@ -831,17 +977,36 @@ class FooQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
|
||||
FooPivotQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
FooPivotQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = FooPivotQueryWhere(this);
|
||||
leftJoin(_weirdJoin = WeirdJoinQuery(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);
|
||||
_weirdJoin = WeirdJoinQuery(
|
||||
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
|
||||
|
@ -867,7 +1032,10 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['weird_join_id', 'foo_bar'];
|
||||
const _fields = [
|
||||
'weird_join_id',
|
||||
'foo_bar',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -924,8 +1092,14 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
|
|||
|
||||
class FooPivotQueryWhere extends QueryWhere {
|
||||
FooPivotQueryWhere(FooPivotQuery query)
|
||||
: weirdJoinId = NumericSqlExpressionBuilder<int>(query, 'weird_join_id'),
|
||||
fooBar = StringSqlExpressionBuilder(query, 'foo_bar');
|
||||
: weirdJoinId = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'weird_join_id',
|
||||
),
|
||||
fooBar = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'foo_bar',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> weirdJoinId;
|
||||
|
||||
|
@ -933,7 +1107,10 @@ class FooPivotQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [weirdJoinId, fooBar];
|
||||
return [
|
||||
weirdJoinId,
|
||||
fooBar,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1000,12 +1177,13 @@ class Unorthodox implements _Unorthodox {
|
|||
|
||||
@generatedSerializable
|
||||
class WeirdJoin implements _WeirdJoin {
|
||||
WeirdJoin(
|
||||
{this.id,
|
||||
this.unorthodox,
|
||||
this.song,
|
||||
this.numbas = const [],
|
||||
this.foos = const []});
|
||||
WeirdJoin({
|
||||
this.id,
|
||||
this.unorthodox,
|
||||
this.song,
|
||||
this.numbas = const [],
|
||||
this.foos = const [],
|
||||
});
|
||||
|
||||
@override
|
||||
int? id;
|
||||
|
@ -1022,12 +1200,13 @@ class WeirdJoin implements _WeirdJoin {
|
|||
@override
|
||||
List<_Foo> foos;
|
||||
|
||||
WeirdJoin copyWith(
|
||||
{int? id,
|
||||
_Unorthodox? unorthodox,
|
||||
_Song? song,
|
||||
List<_Numba>? numbas,
|
||||
List<_Foo>? foos}) {
|
||||
WeirdJoin copyWith({
|
||||
int? id,
|
||||
_Unorthodox? unorthodox,
|
||||
_Song? song,
|
||||
List<_Numba>? numbas,
|
||||
List<_Foo>? foos,
|
||||
}) {
|
||||
return WeirdJoin(
|
||||
id: id ?? this.id,
|
||||
unorthodox: unorthodox ?? this.unorthodox,
|
||||
|
@ -1049,7 +1228,13 @@ class WeirdJoin implements _WeirdJoin {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, unorthodox, song, numbas, foos]);
|
||||
return hashObjects([
|
||||
id,
|
||||
unorthodox,
|
||||
song,
|
||||
numbas,
|
||||
foos,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1064,7 +1249,13 @@ class WeirdJoin implements _WeirdJoin {
|
|||
|
||||
@generatedSerializable
|
||||
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.
|
||||
@override
|
||||
|
@ -1084,12 +1275,13 @@ class Song extends _Song {
|
|||
@override
|
||||
String? title;
|
||||
|
||||
Song copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? weirdJoinId,
|
||||
String? title}) {
|
||||
Song copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
int? weirdJoinId,
|
||||
String? title,
|
||||
}) {
|
||||
return Song(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -1110,7 +1302,13 @@ class Song extends _Song {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, weirdJoinId, title]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
weirdJoinId,
|
||||
title,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1125,7 +1323,10 @@ class Song extends _Song {
|
|||
|
||||
@generatedSerializable
|
||||
class Numba extends _Numba {
|
||||
Numba({this.i, this.parent});
|
||||
Numba({
|
||||
this.i,
|
||||
this.parent,
|
||||
});
|
||||
|
||||
@override
|
||||
int? i;
|
||||
|
@ -1133,7 +1334,10 @@ class Numba extends _Numba {
|
|||
@override
|
||||
int? parent;
|
||||
|
||||
Numba copyWith({int? i, int? parent}) {
|
||||
Numba copyWith({
|
||||
int? i,
|
||||
int? parent,
|
||||
}) {
|
||||
return Numba(i: i ?? this.i, parent: parent ?? this.parent);
|
||||
}
|
||||
|
||||
|
@ -1144,7 +1348,10 @@ class Numba extends _Numba {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([i, parent]);
|
||||
return hashObjects([
|
||||
i,
|
||||
parent,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1159,7 +1366,10 @@ class Numba extends _Numba {
|
|||
|
||||
@generatedSerializable
|
||||
class Foo implements _Foo {
|
||||
Foo({this.bar, this.weirdJoins = const []});
|
||||
Foo({
|
||||
this.bar,
|
||||
this.weirdJoins = const [],
|
||||
});
|
||||
|
||||
@override
|
||||
String? bar;
|
||||
|
@ -1167,7 +1377,10 @@ class Foo implements _Foo {
|
|||
@override
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -1181,7 +1394,10 @@ class Foo implements _Foo {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([bar, weirdJoins]);
|
||||
return hashObjects([
|
||||
bar,
|
||||
weirdJoins,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1196,7 +1412,10 @@ class Foo implements _Foo {
|
|||
|
||||
@generatedSerializable
|
||||
class FooPivot implements _FooPivot {
|
||||
FooPivot({this.weirdJoin, this.foo});
|
||||
FooPivot({
|
||||
this.weirdJoin,
|
||||
this.foo,
|
||||
});
|
||||
|
||||
@override
|
||||
_WeirdJoin? weirdJoin;
|
||||
|
@ -1204,7 +1423,10 @@ class FooPivot implements _FooPivot {
|
|||
@override
|
||||
_Foo? foo;
|
||||
|
||||
FooPivot copyWith({_WeirdJoin? weirdJoin, _Foo? foo}) {
|
||||
FooPivot copyWith({
|
||||
_WeirdJoin? weirdJoin,
|
||||
_Foo? foo,
|
||||
}) {
|
||||
return FooPivot(
|
||||
weirdJoin: weirdJoin ?? this.weirdJoin, foo: foo ?? this.foo);
|
||||
}
|
||||
|
@ -1218,7 +1440,10 @@ class FooPivot implements _FooPivot {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([weirdJoin, foo]);
|
||||
return hashObjects([
|
||||
weirdJoin,
|
||||
foo,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1338,7 +1563,7 @@ abstract class WeirdJoinFields {
|
|||
unorthodox,
|
||||
song,
|
||||
numbas,
|
||||
foos
|
||||
foos,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -1412,7 +1637,7 @@ abstract class SongFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
weirdJoinId,
|
||||
title
|
||||
title,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -1462,7 +1687,10 @@ class NumbaSerializer extends Codec<Numba, Map> {
|
|||
}
|
||||
|
||||
abstract class NumbaFields {
|
||||
static const List<String> allFields = <String>[i, parent];
|
||||
static const List<String> allFields = <String>[
|
||||
i,
|
||||
parent,
|
||||
];
|
||||
|
||||
static const String i = 'i';
|
||||
|
||||
|
@ -1515,7 +1743,10 @@ class FooSerializer extends Codec<Foo, Map> {
|
|||
}
|
||||
|
||||
abstract class FooFields {
|
||||
static const List<String> allFields = <String>[bar, weirdJoins];
|
||||
static const List<String> allFields = <String>[
|
||||
bar,
|
||||
weirdJoins,
|
||||
];
|
||||
|
||||
static const String bar = 'bar';
|
||||
|
||||
|
@ -1567,7 +1798,10 @@ class FooPivotSerializer extends Codec<FooPivot, Map> {
|
|||
}
|
||||
|
||||
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';
|
||||
|
||||
|
|
|
@ -9,29 +9,63 @@ part of angel3_orm_generator.test.models.user;
|
|||
class UserMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('users', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('username', length: 255);
|
||||
table.varChar('password', length: 255);
|
||||
table.varChar('email', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'users',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'username',
|
||||
length: 255,
|
||||
);
|
||||
table.varChar(
|
||||
'password',
|
||||
length: 255,
|
||||
);
|
||||
table.varChar(
|
||||
'email',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('users', cascade: true);
|
||||
schema.drop(
|
||||
'users',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RoleUserMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('role_users', (table) {
|
||||
table.declare('role_id', ColumnType('int')).references('roles', 'id');
|
||||
table.declare('user_id', ColumnType('int')).references('users', 'id');
|
||||
});
|
||||
schema.create(
|
||||
'role_users',
|
||||
(table) {
|
||||
table
|
||||
.declare(
|
||||
'role_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'roles',
|
||||
'id',
|
||||
);
|
||||
table
|
||||
.declare(
|
||||
'user_id',
|
||||
ColumnType('int'),
|
||||
)
|
||||
.references(
|
||||
'users',
|
||||
'id',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -43,17 +77,26 @@ class RoleUserMigration extends Migration {
|
|||
class RoleMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('roles', (table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar('name', length: 255);
|
||||
});
|
||||
schema.create(
|
||||
'roles',
|
||||
(table) {
|
||||
table.serial('id').primaryKey();
|
||||
table.timeStamp('created_at');
|
||||
table.timeStamp('updated_at');
|
||||
table.varChar(
|
||||
'name',
|
||||
length: 255,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void down(Schema schema) {
|
||||
schema.drop('roles', cascade: true);
|
||||
schema.drop(
|
||||
'roles',
|
||||
cascade: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,16 +105,25 @@ class RoleMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = UserQueryWhere(this);
|
||||
leftJoin(
|
||||
'(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',
|
||||
'user_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'user_id',
|
||||
additionalFields: const ['id', 'created_at', 'updated_at', 'name'],
|
||||
trampoline: trampoline);
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'name',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -99,7 +151,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
|||
'updated_at',
|
||||
'username',
|
||||
'password',
|
||||
'email'
|
||||
'email',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
|
@ -126,16 +178,15 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = User(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
username: fields.contains('username') ? (row[3] as String?) : null,
|
||||
password: fields.contains('password') ? (row[4] as String?) : null,
|
||||
email: fields.contains('email') ? (row[5] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
username: fields.contains('username') ? (row[3] as String?) : null,
|
||||
password: fields.contains('password') ? (row[4] as String?) : null,
|
||||
email: fields.contains('email') ? (row[5] as String?) : null,
|
||||
);
|
||||
if (row.length > 6) {
|
||||
var modelOpt = RoleQuery().parseRow(row.skip(6).take(4).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -213,12 +264,30 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
|||
|
||||
class UserQueryWhere extends QueryWhere {
|
||||
UserQueryWhere(UserQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
username = StringSqlExpressionBuilder(query, 'username'),
|
||||
password = StringSqlExpressionBuilder(query, 'password'),
|
||||
email = StringSqlExpressionBuilder(query, 'email');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
username = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'username',
|
||||
),
|
||||
password = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'password',
|
||||
),
|
||||
email = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'email',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -234,7 +303,14 @@ class UserQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, username, password, email];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
username,
|
||||
password,
|
||||
email,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -284,26 +360,45 @@ class UserQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
|
||||
RoleUserQuery({Query? parent, Set<String>? trampoline})
|
||||
: super(parent: parent) {
|
||||
RoleUserQuery({
|
||||
Query? parent,
|
||||
Set<String>? trampoline,
|
||||
}) : super(parent: parent) {
|
||||
trampoline ??= <String>{};
|
||||
trampoline.add(tableName);
|
||||
_where = RoleUserQueryWhere(this);
|
||||
leftJoin(_role = RoleQuery(trampoline: trampoline, parent: this), 'role_id',
|
||||
leftJoin(
|
||||
_role = RoleQuery(
|
||||
trampoline: trampoline,
|
||||
parent: this,
|
||||
),
|
||||
'role_id',
|
||||
'id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
additionalFields: const ['id', 'created_at', 'updated_at', 'name'],
|
||||
trampoline: trampoline);
|
||||
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',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'username',
|
||||
'password',
|
||||
'email'
|
||||
],
|
||||
trampoline: trampoline);
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'username',
|
||||
'password',
|
||||
'email',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -329,7 +424,10 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['role_id', 'user_id'];
|
||||
const _fields = [
|
||||
'role_id',
|
||||
'user_id',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -386,8 +484,14 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
|
|||
|
||||
class RoleUserQueryWhere extends QueryWhere {
|
||||
RoleUserQueryWhere(RoleUserQuery query)
|
||||
: roleId = NumericSqlExpressionBuilder<int>(query, 'role_id'),
|
||||
userId = NumericSqlExpressionBuilder<int>(query, 'user_id');
|
||||
: roleId = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'role_id',
|
||||
),
|
||||
userId = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'user_id',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> roleId;
|
||||
|
||||
|
@ -395,7 +499,10 @@ class RoleUserQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [roleId, userId];
|
||||
return [
|
||||
roleId,
|
||||
userId,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -426,23 +533,27 @@ class RoleUserQueryValues extends MapQueryValues {
|
|||
}
|
||||
|
||||
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.add(tableName);
|
||||
_where = RoleQueryWhere(this);
|
||||
leftJoin(
|
||||
'(SELECT role_users.role_id, users.id, users.created_at, users.updated_at, users.username, users.password, users.email FROM users LEFT JOIN role_users ON role_users.user_id=users.id)',
|
||||
'(SELECT role_users.role_id, users.id, users.created_at, users.updated_at, users.username, users.password, users.email FROM users LEFT JOIN role_users ON role_users.user_id=users.id)',
|
||||
'id',
|
||||
'role_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'role_id',
|
||||
additionalFields: const [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'username',
|
||||
'password',
|
||||
'email'
|
||||
],
|
||||
trampoline: trampoline);
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'username',
|
||||
'password',
|
||||
'email',
|
||||
],
|
||||
trampoline: trampoline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -464,7 +575,12 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'created_at', 'updated_at', 'name'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'name',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -490,14 +606,13 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = Role(
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt: fields.contains('created_at')
|
||||
? mapToNullableDateTime(row[1])
|
||||
: null,
|
||||
updatedAt: fields.contains('updated_at')
|
||||
? mapToNullableDateTime(row[2])
|
||||
: null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null);
|
||||
id: fields.contains('id') ? row[0].toString() : null,
|
||||
createdAt:
|
||||
fields.contains('created_at') ? mapToNullableDateTime(row[1]) : null,
|
||||
updatedAt:
|
||||
fields.contains('updated_at') ? mapToNullableDateTime(row[2]) : null,
|
||||
name: fields.contains('name') ? (row[3] as String?) : null,
|
||||
);
|
||||
if (row.length > 4) {
|
||||
var modelOpt = UserQuery().parseRow(row.skip(4).take(6).toList());
|
||||
modelOpt.ifPresent((m) {
|
||||
|
@ -575,10 +690,22 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
|||
|
||||
class RoleQueryWhere extends QueryWhere {
|
||||
RoleQueryWhere(RoleQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
|
||||
name = StringSqlExpressionBuilder(query, 'name');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
createdAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'created_at',
|
||||
),
|
||||
updatedAt = DateTimeSqlExpressionBuilder(
|
||||
query,
|
||||
'updated_at',
|
||||
),
|
||||
name = StringSqlExpressionBuilder(
|
||||
query,
|
||||
'name',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -590,7 +717,12 @@ class RoleQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, createdAt, updatedAt, name];
|
||||
return [
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -633,15 +765,15 @@ class RoleQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class User extends _User {
|
||||
User(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.username,
|
||||
this.password,
|
||||
this.email,
|
||||
List<_Role> roles = const []})
|
||||
: roles = List.unmodifiable(roles);
|
||||
User({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.username,
|
||||
this.password,
|
||||
this.email,
|
||||
List<_Role> roles = const [],
|
||||
}) : roles = List.unmodifiable(roles);
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -667,14 +799,15 @@ class User extends _User {
|
|||
@override
|
||||
List<_Role> roles;
|
||||
|
||||
User copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? username,
|
||||
String? password,
|
||||
String? email,
|
||||
List<_Role>? roles}) {
|
||||
User copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? username,
|
||||
String? password,
|
||||
String? email,
|
||||
List<_Role>? roles,
|
||||
}) {
|
||||
return User(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -700,8 +833,15 @@ class User extends _User {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects(
|
||||
[id, createdAt, updatedAt, username, password, email, roles]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
username,
|
||||
password,
|
||||
email,
|
||||
roles,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -716,7 +856,10 @@ class User extends _User {
|
|||
|
||||
@generatedSerializable
|
||||
class RoleUser implements _RoleUser {
|
||||
RoleUser({this.role, this.user});
|
||||
RoleUser({
|
||||
this.role,
|
||||
this.user,
|
||||
});
|
||||
|
||||
@override
|
||||
_Role? role;
|
||||
|
@ -724,7 +867,10 @@ class RoleUser implements _RoleUser {
|
|||
@override
|
||||
_User? user;
|
||||
|
||||
RoleUser copyWith({_Role? role, _User? user}) {
|
||||
RoleUser copyWith({
|
||||
_Role? role,
|
||||
_User? user,
|
||||
}) {
|
||||
return RoleUser(role: role ?? this.role, user: user ?? this.user);
|
||||
}
|
||||
|
||||
|
@ -735,7 +881,10 @@ class RoleUser implements _RoleUser {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([role, user]);
|
||||
return hashObjects([
|
||||
role,
|
||||
user,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -750,13 +899,13 @@ class RoleUser implements _RoleUser {
|
|||
|
||||
@generatedSerializable
|
||||
class Role extends _Role {
|
||||
Role(
|
||||
{this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.name,
|
||||
List<_User> users = const []})
|
||||
: users = List.unmodifiable(users);
|
||||
Role({
|
||||
this.id,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.name,
|
||||
List<_User> users = const [],
|
||||
}) : users = List.unmodifiable(users);
|
||||
|
||||
/// A unique identifier corresponding to this item.
|
||||
@override
|
||||
|
@ -776,12 +925,13 @@ class Role extends _Role {
|
|||
@override
|
||||
List<_User> users;
|
||||
|
||||
Role copyWith(
|
||||
{String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
List<_User>? users}) {
|
||||
Role copyWith({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? name,
|
||||
List<_User>? users,
|
||||
}) {
|
||||
return Role(
|
||||
id: id ?? this.id,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
|
@ -803,7 +953,13 @@ class Role extends _Role {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, createdAt, updatedAt, name, users]);
|
||||
return hashObjects([
|
||||
id,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
users,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -889,7 +1045,7 @@ abstract class UserFields {
|
|||
username,
|
||||
password,
|
||||
email,
|
||||
roles
|
||||
roles,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
@ -952,7 +1108,10 @@ class RoleUserSerializer extends Codec<RoleUser, Map> {
|
|||
}
|
||||
|
||||
abstract class RoleUserFields {
|
||||
static const List<String> allFields = <String>[role, user];
|
||||
static const List<String> allFields = <String>[
|
||||
role,
|
||||
user,
|
||||
];
|
||||
|
||||
static const String role = 'role';
|
||||
|
||||
|
@ -1022,7 +1181,7 @@ abstract class RoleFields {
|
|||
createdAt,
|
||||
updatedAt,
|
||||
name,
|
||||
users
|
||||
users,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
|
|
@ -9,10 +9,13 @@ part of 'world.dart';
|
|||
class WorldMigration extends Migration {
|
||||
@override
|
||||
void up(Schema schema) {
|
||||
schema.create('world', (table) {
|
||||
table.integer('id').primaryKey();
|
||||
table.integer('random_number');
|
||||
});
|
||||
schema.create(
|
||||
'world',
|
||||
(table) {
|
||||
table.integer('id').primaryKey();
|
||||
table.integer('random_number');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -26,7 +29,10 @@ class WorldMigration extends Migration {
|
|||
// **************************************************************************
|
||||
|
||||
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.add(tableName);
|
||||
_where = WorldQueryWhere(this);
|
||||
|
@ -51,7 +57,10 @@ class WorldQuery extends Query<World, WorldQueryWhere> {
|
|||
|
||||
@override
|
||||
List<String> get fields {
|
||||
const _fields = ['id', 'random_number'];
|
||||
const _fields = [
|
||||
'id',
|
||||
'random_number',
|
||||
];
|
||||
return _selectedFields.isEmpty
|
||||
? _fields
|
||||
: _fields.where((field) => _selectedFields.contains(field)).toList();
|
||||
|
@ -77,9 +86,9 @@ class WorldQuery extends Query<World, WorldQueryWhere> {
|
|||
return Optional.empty();
|
||||
}
|
||||
var model = World(
|
||||
id: fields.contains('id') ? (row[0] as int?) : null,
|
||||
randomNumber:
|
||||
fields.contains('random_number') ? (row[1] as int?) : null);
|
||||
id: fields.contains('id') ? (row[0] as int?) : null,
|
||||
randomNumber: fields.contains('random_number') ? (row[1] as int?) : null,
|
||||
);
|
||||
return Optional.of(model);
|
||||
}
|
||||
|
||||
|
@ -91,8 +100,14 @@ class WorldQuery extends Query<World, WorldQueryWhere> {
|
|||
|
||||
class WorldQueryWhere extends QueryWhere {
|
||||
WorldQueryWhere(WorldQuery query)
|
||||
: id = NumericSqlExpressionBuilder<int>(query, 'id'),
|
||||
randomNumber = NumericSqlExpressionBuilder<int>(query, 'random_number');
|
||||
: id = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'id',
|
||||
),
|
||||
randomNumber = NumericSqlExpressionBuilder<int>(
|
||||
query,
|
||||
'random_number',
|
||||
);
|
||||
|
||||
final NumericSqlExpressionBuilder<int> id;
|
||||
|
||||
|
@ -100,7 +115,10 @@ class WorldQueryWhere extends QueryWhere {
|
|||
|
||||
@override
|
||||
List<SqlExpressionBuilder> get expressionBuilders {
|
||||
return [id, randomNumber];
|
||||
return [
|
||||
id,
|
||||
randomNumber,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,7 +150,10 @@ class WorldQueryValues extends MapQueryValues {
|
|||
|
||||
@generatedSerializable
|
||||
class World extends _World {
|
||||
World({this.id, this.randomNumber});
|
||||
World({
|
||||
this.id,
|
||||
this.randomNumber,
|
||||
});
|
||||
|
||||
@override
|
||||
int? id;
|
||||
|
@ -140,7 +161,10 @@ class World extends _World {
|
|||
@override
|
||||
int? randomNumber;
|
||||
|
||||
World copyWith({int? id, int? randomNumber}) {
|
||||
World copyWith({
|
||||
int? id,
|
||||
int? randomNumber,
|
||||
}) {
|
||||
return World(
|
||||
id: id ?? this.id, randomNumber: randomNumber ?? this.randomNumber);
|
||||
}
|
||||
|
@ -154,7 +178,10 @@ class World extends _World {
|
|||
|
||||
@override
|
||||
int get hashCode {
|
||||
return hashObjects([id, randomNumber]);
|
||||
return hashObjects([
|
||||
id,
|
||||
randomNumber,
|
||||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -208,7 +235,10 @@ class WorldSerializer extends Codec<World, Map> {
|
|||
}
|
||||
|
||||
abstract class WorldFields {
|
||||
static const List<String> allFields = <String>[id, randomNumber];
|
||||
static const List<String> allFields = <String>[
|
||||
id,
|
||||
randomNumber,
|
||||
];
|
||||
|
||||
static const String id = 'id';
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
|||
test('parseRow', () {
|
||||
// 'id', 'created_at', 'updated_at', 'make', 'description', 'family_friendly', 'recalled_at'
|
||||
// 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);
|
||||
var carOpt = CarQuery().deserialize(row);
|
||||
expect(carOpt.isPresent, true);
|
||||
|
@ -38,6 +38,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
|||
y2k.toIso8601String(), startsWith(car.createdAt!.toIso8601String()));
|
||||
expect(
|
||||
y2k.toIso8601String(), startsWith(car.updatedAt!.toIso8601String()));
|
||||
expect(car.price, 80000.00);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -66,6 +67,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
|||
..createdAt = y2k
|
||||
..updatedAt = y2k
|
||||
..description = 'Vroom vroom!'
|
||||
//..price = 120000.00
|
||||
..familyFriendly = false;
|
||||
ferrari = (await query.insert(executor!)).value;
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_test
|
||||
|
@ -19,7 +19,7 @@ dev_dependencies:
|
|||
angel3_framework: ^7.0.0
|
||||
build_runner: ^2.0.1
|
||||
lints: ^2.0.0
|
||||
# dependency_overrides:
|
||||
dependency_overrides:
|
||||
# angel3_container:
|
||||
# path: ../../container/angel_container
|
||||
# angel3_framework:
|
||||
|
@ -40,5 +40,5 @@ dev_dependencies:
|
|||
# path: ../angel_orm
|
||||
# angel3_migration:
|
||||
# path: ../angel_migration
|
||||
# angel3_orm_generator:
|
||||
# path: ../angel_orm_generator
|
||||
angel3_orm_generator:
|
||||
path: ../angel_orm_generator
|
||||
|
|
Loading…
Reference in a new issue