Migrated angel_migration_runner

This commit is contained in:
thomashii@dukefirehawk.com 2021-05-02 23:34:47 +08:00
parent ad4558cd0f
commit 106528a93b
33 changed files with 1255 additions and 1289 deletions

View file

@ -6,10 +6,10 @@ import 'package:angel_orm_test/src/models/car.dart';
@Expose('/api/cars') @Expose('/api/cars')
class CarController extends Controller { class CarController extends Controller {
@Expose('/luxury') @Expose('/luxury')
Future<List<Car>> getLuxuryCars(QueryExecutor connection) { Future<List<Car?>> getLuxuryCars(QueryExecutor connection) {
var query = new CarQuery(); var query = new CarQuery();
query.where query.where
..familyFriendly.equals(false) ?..familyFriendly.equals(false)
..createdAt.year.greaterThanOrEqualTo(2014) ..createdAt.year.greaterThanOrEqualTo(2014)
..make.isIn(['Ferrari', 'Lamborghini', 'Mustang', 'Lexus']); ..make.isIn(['Ferrari', 'Lamborghini', 'Mustang', 'Lexus']);
return query.get(connection); return query.get(connection);

View file

@ -5,11 +5,11 @@ import 'models/book.dart';
import 'util.dart'; import 'util.dart';
belongsToTests(FutureOr<QueryExecutor> Function() createExecutor, belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
Author jkRowling; Author? jkRowling;
Author jameson; Author? jameson;
Book deathlyHallows; Book? deathlyHallows;
close ??= (_) => null; close ??= (_) => null;
setUp(() async { setUp(() async {
@ -25,128 +25,128 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
// And a book // And a book
var bookQuery = new BookQuery(); var bookQuery = new BookQuery();
bookQuery.values bookQuery.values
..authorId = int.parse(jkRowling.id) ..authorId = int.parse(jkRowling!.id!)
..partnerAuthorId = int.parse(jameson.id) ..partnerAuthorId = int.parse(jameson!.id!)
..name = 'Deathly Hallows'; ..name = 'Deathly Hallows';
deathlyHallows = await bookQuery.insert(executor); deathlyHallows = await bookQuery.insert(executor);
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
group('selects', () { group('selects', () {
test('select all', () async { test('select all', () async {
var query = new BookQuery(); var query = new BookQuery();
var books = await query.get(executor); List<Book?> books = await query.get(executor);
expect(books, hasLength(1)); expect(books, hasLength(1));
var book = books.first; var book = books.first!;
print(book.toJson()); print(book.toJson());
expect(book.id, deathlyHallows.id); expect(book.id, deathlyHallows!.id);
expect(book.name, deathlyHallows.name); expect(book.name, deathlyHallows!.name);
var author = book.author; var author = book.author!;
print(AuthorSerializer.toMap(author)); print(AuthorSerializer.toMap(author));
expect(author.id, jkRowling.id); expect(author.id, jkRowling!.id);
expect(author.name, jkRowling.name); expect(author.name, jkRowling!.name);
}); });
test('select one', () async { test('select one', () async {
var query = new BookQuery(); var query = new BookQuery();
query.where.id.equals(int.parse(deathlyHallows.id)); query.where!.id.equals(int.parse(deathlyHallows!.id!));
print(query.compile(Set())); print(query.compile(Set()));
var book = await query.getOne(executor); var book = await (query.getOne(executor) as FutureOr<Book>);
print(book.toJson()); print(book.toJson());
expect(book.id, deathlyHallows.id); expect(book.id, deathlyHallows!.id);
expect(book.name, deathlyHallows.name); expect(book.name, deathlyHallows!.name);
var author = book.author; var author = book.author!;
print(AuthorSerializer.toMap(author)); print(AuthorSerializer.toMap(author));
expect(author.id, jkRowling.id); expect(author.id, jkRowling!.id);
expect(author.name, jkRowling.name); expect(author.name, jkRowling!.name);
}); });
test('where clause', () async { test('where clause', () async {
var query = new BookQuery() var query = new BookQuery()
..where.name.equals('Goblet of Fire') ..where!.name.equals('Goblet of Fire')
..orWhere((w) => w.authorId.equals(int.parse(jkRowling.id))); ..orWhere((w) => w!.authorId.equals(int.parse(jkRowling!.id!)));
print(query.compile(Set())); print(query.compile(Set()));
var books = await query.get(executor); List<Book?> books = await query.get(executor);
expect(books, hasLength(1)); expect(books, hasLength(1));
var book = books.first; var book = books.first!;
print(book.toJson()); print(book.toJson());
expect(book.id, deathlyHallows.id); expect(book.id, deathlyHallows!.id);
expect(book.name, deathlyHallows.name); expect(book.name, deathlyHallows!.name);
var author = book.author; var author = book.author!;
print(AuthorSerializer.toMap(author)); print(AuthorSerializer.toMap(author));
expect(author.id, jkRowling.id); expect(author.id, jkRowling!.id);
expect(author.name, jkRowling.name); expect(author.name, jkRowling!.name);
}); });
test('union', () async { test('union', () async {
var query1 = new BookQuery()..where.name.like('Deathly%'); var query1 = new BookQuery()..where!.name.like('Deathly%');
var query2 = new BookQuery()..where.authorId.equals(-1); var query2 = new BookQuery()..where!.authorId.equals(-1);
var query3 = new BookQuery() var query3 = new BookQuery()
..where.name.isIn(['Goblet of Fire', 'Order of the Phoenix']); ..where!.name.isIn(['Goblet of Fire', 'Order of the Phoenix']);
query1 query1
..union(query2) ..union(query2)
..unionAll(query3); ..unionAll(query3);
print(query1.compile(Set())); print(query1.compile(Set()));
var books = await query1.get(executor); List<Book?> books = await query1.get(executor);
expect(books, hasLength(1)); expect(books, hasLength(1));
var book = books.first; var book = books.first!;
print(book.toJson()); print(book.toJson());
expect(book.id, deathlyHallows.id); expect(book.id, deathlyHallows!.id);
expect(book.name, deathlyHallows.name); expect(book.name, deathlyHallows!.name);
var author = book.author; var author = book.author!;
print(AuthorSerializer.toMap(author)); print(AuthorSerializer.toMap(author));
expect(author.id, jkRowling.id); expect(author.id, jkRowling!.id);
expect(author.name, jkRowling.name); expect(author.name, jkRowling!.name);
}); });
test('order by', () async { test('order by', () async {
var query = AuthorQuery()..orderBy(AuthorFields.name, descending: true); var query = AuthorQuery()..orderBy(AuthorFields.name, descending: true);
var authors = await query.get(executor); List<Author?> authors = await query.get(executor);
expect(authors, [jkRowling, jameson]); expect(authors, [jkRowling, jameson]);
}); });
}); });
test('insert sets relationship', () { test('insert sets relationship', () {
expect(deathlyHallows.author, jkRowling); expect(deathlyHallows!.author, jkRowling);
//expect(deathlyHallows.author, isNotNull); //expect(deathlyHallows.author, isNotNull);
//expect(deathlyHallows.author.name, rowling.name); //expect(deathlyHallows.author.name, rowling.name);
}); });
test('delete stream', () async { test('delete stream', () async {
printSeparator('Delete stream test'); printSeparator('Delete stream test');
var query = new BookQuery()..where.name.equals(deathlyHallows.name); var query = new BookQuery()..where!.name.equals(deathlyHallows!.name!);
print(query.compile(Set(), preamble: 'DELETE', withFields: false)); print(query.compile(Set(), preamble: 'DELETE', withFields: false));
var books = await query.delete(executor); List<Book?> books = await query.delete(executor);
expect(books, hasLength(1)); expect(books, hasLength(1));
var book = books.first; var book = books.first!;
expect(book.id, deathlyHallows.id); expect(book.id, deathlyHallows!.id);
expect(book.author, isNotNull); expect(book.author, isNotNull);
expect((book.author).name, jkRowling.name); expect(book.author!.name, jkRowling!.name);
}); });
test('update book', () async { test('update book', () async {
var cloned = deathlyHallows.copyWith(name: "Sorcerer's Stone"); var cloned = deathlyHallows!.copyWith(name: "Sorcerer's Stone");
var query = new BookQuery() var query = new BookQuery()
..where.id.equals(int.parse(cloned.id)) ..where!.id.equals(int.parse(cloned.id!))
..values.copyFrom(cloned); ..values.copyFrom(cloned);
var book = await query.updateOne(executor); var book = await (query.updateOne(executor) as FutureOr<Book>);
print(book.toJson()); print(book.toJson());
expect(book.name, cloned.name); expect(book.name, cloned.name);
expect(book.author, isNotNull); expect(book.author, isNotNull);
expect(book.author.name, jkRowling.name); expect(book.author!.name, jkRowling!.name);
}); });
group('joined subquery', () { group('joined subquery', () {
@ -155,13 +155,13 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
// that should return correctly. // that should return correctly.
test('returns empty on false subquery', () async { test('returns empty on false subquery', () async {
printSeparator('False subquery test'); printSeparator('False subquery test');
var query = BookQuery()..author.where.name.equals('Billie Jean'); var query = BookQuery()..author!.where!.name.equals('Billie Jean');
expect(await query.get(executor), isEmpty); expect(await query.get(executor), isEmpty);
}); });
test('returns values on true subquery', () async { test('returns values on true subquery', () async {
printSeparator('True subquery test'); printSeparator('True subquery test');
var query = BookQuery()..author.where.name.like('%Rowling%'); var query = BookQuery()..author!.where!.name.like('%Rowling%');
expect(await query.get(executor), [deathlyHallows]); expect(await query.get(executor), [deathlyHallows]);
}); });
}); });

View file

@ -5,9 +5,9 @@ import 'models/custom_expr.dart';
import 'util.dart'; import 'util.dart';
customExprTests(FutureOr<QueryExecutor> Function() createExecutor, customExprTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
Numbers numbersModel; Numbers? numbersModel;
close ??= (_) => null; close ??= (_) => null;
@ -22,22 +22,22 @@ customExprTests(FutureOr<QueryExecutor> Function() createExecutor,
numbersModel = await nQuery.insert(executor); numbersModel = await nQuery.insert(executor);
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
test('fetches correct result', () async { test('fetches correct result', () async {
expect(numbersModel.two, 2); expect(numbersModel!.two, 2);
}); });
test('in relation', () async { test('in relation', () async {
var abcQuery = AlphabetQuery(); var abcQuery = AlphabetQuery();
abcQuery.values abcQuery.values
..value = 'abc' ..value = 'abc'
..numbersId = numbersModel.idAsInt ..numbersId = numbersModel!.idAsInt
..createdAt = numbersModel.createdAt ..createdAt = numbersModel!.createdAt
..updatedAt = numbersModel.updatedAt; ..updatedAt = numbersModel!.updatedAt;
var abc = await abcQuery.insert(executor); var abc = await (abcQuery.insert(executor) as FutureOr<Alphabet>);
expect(abc.numbers, numbersModel); expect(abc.numbers, numbersModel);
expect(abc.numbers.two, 2); expect(abc.numbers!.two, 2);
expect(abc.value, 'abc'); expect(abc.value, 'abc');
}); });
} }

View file

@ -4,15 +4,15 @@ import 'package:test/test.dart';
import 'models/unorthodox.dart'; import 'models/unorthodox.dart';
edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor, edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
close ??= (_) => null; close ??= (_) => null;
setUp(() async { setUp(() async {
executor = await createExecutor(); executor = await createExecutor();
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
test('can create object with no id', () async { test('can create object with no id', () async {
var query = UnorthodoxQuery()..values.name = 'Hey'; var query = UnorthodoxQuery()..values.name = 'Hey';
@ -21,7 +21,7 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
}); });
group('relations on non-model', () { group('relations on non-model', () {
Unorthodox unorthodox; Unorthodox? unorthodox;
setUp(() async { setUp(() async {
var query = UnorthodoxQuery()..values.name = 'Hey'; var query = UnorthodoxQuery()..values.name = 'Hey';
@ -29,64 +29,64 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
}); });
test('belongs to', () async { test('belongs to', () async {
var query = WeirdJoinQuery()..values.joinName = unorthodox.name; var query = WeirdJoinQuery()..values.joinName = unorthodox!.name;
var model = await query.insert(executor); var model = await (query.insert(executor) as FutureOr<WeirdJoin>);
print(model.toJson()); print(model.toJson());
expect(model.id, isNotNull); // Postgres should set this. expect(model.id, isNotNull); // Postgres should set this.
expect(model.unorthodox, unorthodox); expect(model.unorthodox, unorthodox);
}); });
group('layered', () { group('layered', () {
WeirdJoin weirdJoin; WeirdJoin? weirdJoin;
Song girlBlue; Song? girlBlue;
setUp(() async { setUp(() async {
var wjQuery = WeirdJoinQuery()..values.joinName = unorthodox.name; var wjQuery = WeirdJoinQuery()..values.joinName = unorthodox!.name;
weirdJoin = await wjQuery.insert(executor); weirdJoin = await wjQuery.insert(executor);
var gbQuery = SongQuery() var gbQuery = SongQuery()
..values.weirdJoinId = weirdJoin.id ..values.weirdJoinId = weirdJoin!.id
..values.title = 'Girl Blue'; ..values.title = 'Girl Blue';
girlBlue = await gbQuery.insert(executor); girlBlue = await gbQuery.insert(executor);
}); });
test('has one', () async { test('has one', () async {
var query = WeirdJoinQuery()..where.id.equals(weirdJoin.id); var query = WeirdJoinQuery()..where!.id.equals(weirdJoin!.id!);
var wj = await query.getOne(executor); var wj = await (query.getOne(executor) as FutureOr<WeirdJoin>);
print(wj.toJson()); print(wj.toJson());
expect(wj.song, girlBlue); expect(wj.song, girlBlue);
}); });
test('has many', () async { test('has many', () async {
var numbas = <Numba>[]; var numbas = <Numba?>[];
for (int i = 0; i < 15; i++) { for (int i = 0; i < 15; i++) {
var query = NumbaQuery() var query = NumbaQuery()
..values.parent = weirdJoin.id ..values.parent = weirdJoin!.id
..values.i = i; ..values.i = i;
var model = await query.insert(executor); var model = await query.insert(executor);
numbas.add(model); numbas.add(model);
} }
var query = WeirdJoinQuery()..where.id.equals(weirdJoin.id); var query = WeirdJoinQuery()..where!.id.equals(weirdJoin!.id!);
var wj = await query.getOne(executor); var wj = await (query.getOne(executor) as FutureOr<WeirdJoin>);
print(wj.toJson()); print(wj.toJson());
expect(wj.numbas, numbas); expect(wj.numbas, numbas);
}); });
test('many to many', () async { test('many to many', () async {
var fooQuery = FooQuery()..values.bar = 'baz'; var fooQuery = FooQuery()..values.bar = 'baz';
var fooBar = await fooQuery.insert(executor).then((foo) => foo.bar); var fooBar = await fooQuery.insert(executor).then((foo) => foo!.bar!);
var pivotQuery = FooPivotQuery() var pivotQuery = FooPivotQuery()
..values.weirdJoinId = weirdJoin.id ..values.weirdJoinId = weirdJoin!.id
..values.fooBar = fooBar; ..values.fooBar = fooBar;
await pivotQuery.insert(executor); await pivotQuery.insert(executor);
fooQuery = FooQuery()..where.bar.equals('baz'); fooQuery = FooQuery()..where!.bar.equals('baz');
var foo = await fooQuery.getOne(executor); var foo = await (fooQuery.getOne(executor) as FutureOr<Foo>);
print(foo.toJson()); print(foo.toJson());
print(weirdJoin.toJson()); print(weirdJoin!.toJson());
expect(foo.weirdJoins[0].id, weirdJoin.id); expect(foo.weirdJoins![0]!.id, weirdJoin!.id);
}); });
}); });
}); });

View file

@ -4,8 +4,8 @@ import 'package:test/test.dart';
import 'models/has_car.dart'; import 'models/has_car.dart';
enumAndNestedTests(FutureOr<QueryExecutor> Function() createExecutor, enumAndNestedTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
close ??= (_) => null; close ??= (_) => null;
setUp(() async { setUp(() async {
@ -14,12 +14,12 @@ enumAndNestedTests(FutureOr<QueryExecutor> Function() createExecutor,
test('insert', () async { test('insert', () async {
var query = HasCarQuery()..values.type = CarType.sedan; var query = HasCarQuery()..values.type = CarType.sedan;
var result = await query.insert(executor); var result = await (query.insert(executor) as FutureOr<HasCar>);
expect(result.type, CarType.sedan); expect(result.type, CarType.sedan);
}); });
group('query', () { group('query', () {
HasCar initialValue; HasCar? initialValue;
setUp(() async { setUp(() async {
var query = HasCarQuery(); var query = HasCarQuery();
@ -29,10 +29,10 @@ enumAndNestedTests(FutureOr<QueryExecutor> Function() createExecutor,
test('query by enum', () async { test('query by enum', () async {
// Check for mismatched type // Check for mismatched type
var query = HasCarQuery()..where.type.equals(CarType.atv); var query = HasCarQuery()..where!.type.equals(CarType.atv);
expect(await query.get(executor), isEmpty); expect(await query.get(executor), isEmpty);
query = HasCarQuery()..where.type.equals(initialValue.type); query = HasCarQuery()..where!.type.equals(initialValue!.type);
expect(await query.getOne(executor), initialValue); expect(await query.getOne(executor), initialValue);
}); });
}); });

View file

@ -4,10 +4,10 @@ import 'package:test/test.dart';
import 'models/tree.dart'; import 'models/tree.dart';
hasManyTests(FutureOr<QueryExecutor> Function() createExecutor, hasManyTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
Tree appleTree; Tree? appleTree;
int treeId; late int treeId;
close ??= (_) => null; close ??= (_) => null;
setUp(() async { setUp(() async {
@ -15,24 +15,24 @@ hasManyTests(FutureOr<QueryExecutor> Function() createExecutor,
executor = await createExecutor(); executor = await createExecutor();
appleTree = await query.insert(executor); appleTree = await query.insert(executor);
treeId = int.parse(appleTree.id); treeId = int.parse(appleTree!.id!);
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
test('list is empty if there is nothing', () { test('list is empty if there is nothing', () {
expect(appleTree.rings, 10); expect(appleTree!.rings, 10);
expect(appleTree.fruits, isEmpty); expect(appleTree!.fruits, isEmpty);
}); });
group('mutations', () { group('mutations', () {
Fruit apple, banana; Fruit? apple, banana;
void verify(Tree tree) { void verify(Tree tree) {
print(tree.fruits.map(FruitSerializer.toMap).toList()); print(tree.fruits!.map(FruitSerializer.toMap).toList());
expect(tree.fruits, hasLength(2)); expect(tree.fruits, hasLength(2));
expect(tree.fruits[0].commonName, apple.commonName); expect(tree.fruits![0].commonName, apple!.commonName);
expect(tree.fruits[1].commonName, banana.commonName); expect(tree.fruits![1].commonName, banana!.commonName);
} }
setUp(() async { setUp(() async {
@ -49,31 +49,31 @@ hasManyTests(FutureOr<QueryExecutor> Function() createExecutor,
}); });
test('can fetch any children', () async { test('can fetch any children', () async {
var query = new TreeQuery()..where.id.equals(treeId); var query = new TreeQuery()..where!.id.equals(treeId);
var tree = await query.getOne(executor); var tree = await (query.getOne(executor) as FutureOr<Tree>);
verify(tree); verify(tree);
}); });
test('sets on update', () async { test('sets on update', () async {
var tq = new TreeQuery() var tq = new TreeQuery()
..where.id.equals(treeId) ..where!.id.equals(treeId)
..values.rings = 24; ..values.rings = 24;
var tree = await tq.updateOne(executor); var tree = await (tq.updateOne(executor) as FutureOr<Tree>);
verify(tree); verify(tree);
expect(tree.rings, 24); expect(tree.rings, 24);
}); });
test('sets on delete', () async { test('sets on delete', () async {
var tq = new TreeQuery()..where.id.equals(treeId); var tq = new TreeQuery()..where!.id.equals(treeId);
var tree = await tq.deleteOne(executor); var tree = await (tq.deleteOne(executor) as FutureOr<Tree>);
verify(tree); verify(tree);
}); });
test('returns empty on false subquery', () async { test('returns empty on false subquery', () async {
var tq = new TreeQuery() var tq = new TreeQuery()
..where.id.equals(treeId) ..where!.id.equals(treeId)
..fruits.where.commonName.equals('Kiwi'); ..fruits!.where!.commonName.equals('Kiwi');
var tree = await tq.getOne(executor); var tree = await (tq.getOne(executor) as FutureOr<Tree>);
expect(tree.fruits, isEmpty); expect(tree.fruits, isEmpty);
}); });
}); });

View file

@ -4,22 +4,22 @@ import 'package:test/test.dart';
import 'models/has_map.dart'; import 'models/has_map.dart';
hasMapTests(FutureOr<QueryExecutor> Function() createExecutor, hasMapTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
close ??= (_) => null; close ??= (_) => null;
setUp(() async { setUp(() async {
executor = await createExecutor(); executor = await createExecutor();
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
test('insert', () async { test('insert', () async {
var query = HasMapQuery(); var query = HasMapQuery();
query.values query.values
..value = {'foo': 'bar'} ..value = {'foo': 'bar'}
..list = ['1', 2, 3.0]; ..list = ['1', 2, 3.0];
var model = await query.insert(executor); var model = await (query.insert(executor) as FutureOr<HasMap>);
print(model.toJson()); print(model.toJson());
expect(model, HasMap(value: {'foo': 'bar'}, list: ['1', 2, 3.0])); expect(model, HasMap(value: {'foo': 'bar'}, list: ['1', 2, 3.0]));
}); });
@ -29,7 +29,7 @@ hasMapTests(FutureOr<QueryExecutor> Function() createExecutor,
query.values query.values
..value = {'foo': 'bar'} ..value = {'foo': 'bar'}
..list = ['1', 2, 3.0]; ..list = ['1', 2, 3.0];
var model = await query.insert(executor); var model = await (query.insert(executor) as FutureOr<HasMap>);
print(model.toJson()); print(model.toJson());
query = HasMapQuery()..values.copyFrom(model); query = HasMapQuery()..values.copyFrom(model);
@ -37,7 +37,7 @@ hasMapTests(FutureOr<QueryExecutor> Function() createExecutor,
}); });
group('query', () { group('query', () {
HasMap initialValue; HasMap? initialValue;
setUp(() async { setUp(() async {
var query = HasMapQuery(); var query = HasMapQuery();
@ -54,37 +54,37 @@ hasMapTests(FutureOr<QueryExecutor> Function() createExecutor,
test('map equals', () async { test('map equals', () async {
var query = HasMapQuery(); var query = HasMapQuery();
query.where.value.equals({'foo': 'bar'}); query.where!.value.equals({'foo': 'bar'});
expect(await query.get(executor), [initialValue]); expect(await query.get(executor), [initialValue]);
query = HasMapQuery(); query = HasMapQuery();
query.where.value.equals({'foo': 'baz'}); query.where!.value.equals({'foo': 'baz'});
expect(await query.get(executor), isEmpty); expect(await query.get(executor), isEmpty);
}); });
test('list equals', () async { test('list equals', () async {
var query = HasMapQuery(); var query = HasMapQuery();
query.where.list.equals(['1', 2, 3.0]); query.where!.list.equals(['1', 2, 3.0]);
expect(await query.get(executor), [initialValue]); expect(await query.get(executor), [initialValue]);
query = HasMapQuery(); query = HasMapQuery();
query.where.list.equals(['10', 20, 30.0]); query.where!.list.equals(['10', 20, 30.0]);
expect(await query.get(executor), isEmpty); expect(await query.get(executor), isEmpty);
}); });
test('property equals', () async { test('property equals', () async {
var query = HasMapQuery()..where.value['foo'].asString.equals('bar'); var query = HasMapQuery()..where!.value['foo'].asString!.equals('bar');
expect(await query.get(executor), [initialValue]); expect(await query.get(executor), [initialValue]);
query = HasMapQuery()..where.value['foo'].asString.equals('baz'); query = HasMapQuery()..where!.value['foo'].asString!.equals('baz');
expect(await query.get(executor), []); expect(await query.get(executor), []);
}); });
test('index equals', () async { test('index equals', () async {
var query = HasMapQuery()..where.list[0].asString.equals('1'); var query = HasMapQuery()..where!.list[0].asString!.equals('1');
expect(await query.get(executor), [initialValue]); expect(await query.get(executor), [initialValue]);
query = HasMapQuery()..where.list[1].asInt.equals(3); query = HasMapQuery()..where!.list[1].asInt!.equals(3);
expect(await query.get(executor), []); expect(await query.get(executor), []);
}); });
}); });

View file

@ -4,9 +4,9 @@ import 'package:test/test.dart';
import 'models/leg.dart'; import 'models/leg.dart';
hasOneTests(FutureOr<QueryExecutor> Function() createExecutor, hasOneTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
Leg originalLeg; Leg? originalLeg;
close ??= (_) => null; close ??= (_) => null;
setUp(() async { setUp(() async {
@ -15,82 +15,82 @@ hasOneTests(FutureOr<QueryExecutor> Function() createExecutor,
originalLeg = await query.insert(executor); originalLeg = await query.insert(executor);
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
test('sets to null if no child', () async { test('sets to null if no child', () async {
print(LegQuery().compile(Set())); print(LegQuery().compile(Set()));
var query = new LegQuery()..where.id.equals(int.parse(originalLeg.id)); var query = new LegQuery()..where!.id.equals(int.parse(originalLeg!.id!));
var leg = await query.getOne(executor); var leg = await (query.getOne(executor) as FutureOr<Leg>);
print(leg.toJson()); print(leg.toJson());
expect(leg.name, originalLeg.name); expect(leg.name, originalLeg!.name);
expect(leg.id, originalLeg.id); expect(leg.id, originalLeg!.id);
expect(leg.foot, isNull); expect(leg.foot, isNull);
}); });
test('can fetch one foot', () async { test('can fetch one foot', () async {
var footQuery = new FootQuery() var footQuery = new FootQuery()
..values.legId = int.parse(originalLeg.id) ..values.legId = int.parse(originalLeg!.id!)
..values.nToes = 5.64; ..values.nToes = 5.64;
var legQuery = new LegQuery()..where.id.equals(int.parse(originalLeg.id)); var legQuery = new LegQuery()..where!.id.equals(int.parse(originalLeg!.id!));
var foot = await footQuery.insert(executor); var foot = await (footQuery.insert(executor) as FutureOr<Foot>);
var leg = await legQuery.getOne(executor); var leg = await (legQuery.getOne(executor) as FutureOr<Leg>);
expect(leg.name, originalLeg.name); expect(leg.name, originalLeg!.name);
expect(leg.id, originalLeg.id); expect(leg.id, originalLeg!.id);
expect(leg.foot, isNotNull); expect(leg.foot, isNotNull);
expect(leg.foot.id, foot.id); expect(leg.foot!.id, foot.id);
expect(leg.foot.nToes, foot.nToes); expect(leg.foot!.nToes, foot.nToes);
}); });
test('only fetches one foot even if there are multiple', () async { test('only fetches one foot even if there are multiple', () async {
var footQuery = new FootQuery() var footQuery = new FootQuery()
..values.legId = int.parse(originalLeg.id) ..values.legId = int.parse(originalLeg!.id!)
..values.nToes = 24; ..values.nToes = 24;
var legQuery = new LegQuery()..where.id.equals(int.parse(originalLeg.id)); var legQuery = new LegQuery()..where!.id.equals(int.parse(originalLeg!.id!));
var foot = await footQuery.insert(executor); var foot = await (footQuery.insert(executor) as FutureOr<Foot>);
var leg = await legQuery.getOne(executor); var leg = await (legQuery.getOne(executor) as FutureOr<Leg>);
expect(leg.name, originalLeg.name); expect(leg.name, originalLeg!.name);
expect(leg.id, originalLeg.id); expect(leg.id, originalLeg!.id);
expect(leg.foot, isNotNull); expect(leg.foot, isNotNull);
expect(leg.foot.id, foot.id); expect(leg.foot!.id, foot.id);
expect(leg.foot.nToes, foot.nToes); expect(leg.foot!.nToes, foot.nToes);
}); });
test('sets foot on update', () async { test('sets foot on update', () async {
var footQuery = new FootQuery() var footQuery = new FootQuery()
..values.legId = int.parse(originalLeg.id) ..values.legId = int.parse(originalLeg!.id!)
..values.nToes = 5.64; ..values.nToes = 5.64;
var legQuery = new LegQuery() var legQuery = new LegQuery()
..where.id.equals(int.parse(originalLeg.id)) ..where!.id.equals(int.parse(originalLeg!.id!))
..values.copyFrom(originalLeg.copyWith(name: 'Right')); ..values.copyFrom(originalLeg!.copyWith(name: 'Right'));
var foot = await footQuery.insert(executor); var foot = await (footQuery.insert(executor) as FutureOr<Foot>);
var leg = await legQuery.updateOne(executor); var leg = await (legQuery.updateOne(executor) as FutureOr<Leg>);
print(leg.toJson()); print(leg.toJson());
expect(leg.name, 'Right'); expect(leg.name, 'Right');
expect(leg.foot, isNotNull); expect(leg.foot, isNotNull);
expect(leg.foot.id, foot.id); expect(leg.foot!.id, foot.id);
expect(leg.foot.nToes, foot.nToes); expect(leg.foot!.nToes, foot.nToes);
}); });
test('sets foot on delete', () async { test('sets foot on delete', () async {
var footQuery = new FootQuery() var footQuery = new FootQuery()
..values.legId = int.parse(originalLeg.id) ..values.legId = int.parse(originalLeg!.id!)
..values.nToes = 5.64; ..values.nToes = 5.64;
var legQuery = new LegQuery()..where.id.equals(int.parse(originalLeg.id)); var legQuery = new LegQuery()..where!.id.equals(int.parse(originalLeg!.id!));
var foot = await footQuery.insert(executor); var foot = await (footQuery.insert(executor) as FutureOr<Foot>);
var leg = await legQuery.deleteOne(executor); var leg = await (legQuery.deleteOne(executor) as FutureOr<Leg>);
print(leg.toJson()); print(leg.toJson());
expect(leg.name, originalLeg.name); expect(leg.name, originalLeg!.name);
expect(leg.foot, isNotNull); expect(leg.foot, isNotNull);
expect(leg.foot.id, foot.id); expect(leg.foot!.id, foot.id);
expect(leg.foot.nToes, foot.nToes); expect(leg.foot!.nToes, foot.nToes);
}); });
test('sets null on false subquery', () async { test('sets null on false subquery', () async {
var legQuery = new LegQuery() var legQuery = new LegQuery()
..where.id.equals(originalLeg.idAsInt) ..where!.id.equals(originalLeg!.idAsInt!)
..foot.where.legId.equals(originalLeg.idAsInt + 1024); ..foot!.where!.legId.equals(originalLeg!.idAsInt! + 1024);
var leg = await legQuery.getOne(executor); var leg = await (legQuery.getOne(executor) as FutureOr<Leg>);
expect(leg.foot, isNull); expect(leg.foot, isNull);
}); });
} }

View file

@ -6,10 +6,10 @@ import 'models/user.dart';
import 'util.dart'; import 'util.dart';
manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor, manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
QueryExecutor executor; late QueryExecutor executor;
Role canPub, canSub; Role? canPub, canSub;
User thosakwe; User? thosakwe;
close ??= (_) => null; close ??= (_) => null;
Future<void> dumpQuery(String query) async { Future<void> dumpQuery(String query) async {
@ -18,7 +18,8 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
print('=================================================='); print('==================================================');
print(' DUMPING QUERY'); print(' DUMPING QUERY');
print(query); print(query);
var rows = await executor.query(null, query, {}); //var rows = await executor.query(null, query, {});
var rows = await executor.query('', query, {});
print('\n${rows.length} row(s):'); print('\n${rows.length} row(s):');
rows.forEach((r) => print(' * $r')); rows.forEach((r) => print(' * $r'));
print('==================================================\n\n'); print('==================================================\n\n');
@ -65,16 +66,16 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
printSeparator('Allow thosakwe to publish'); printSeparator('Allow thosakwe to publish');
var thosakwePubQuery = RoleUserQuery(); var thosakwePubQuery = RoleUserQuery();
thosakwePubQuery.values thosakwePubQuery.values
..userId = int.parse(thosakwe.id) ..userId = int.parse(thosakwe!.id!)
..roleId = int.parse(canPub.id); ..roleId = int.parse(canPub!.id!);
await thosakwePubQuery.insert(executor); await thosakwePubQuery.insert(executor);
// Allow thosakwe to subscribe... // Allow thosakwe to subscribe...
printSeparator('Allow thosakwe to subscribe'); printSeparator('Allow thosakwe to subscribe');
var thosakweSubQuery = RoleUserQuery(); var thosakweSubQuery = RoleUserQuery();
thosakweSubQuery.values thosakweSubQuery.values
..userId = int.parse(thosakwe.id) ..userId = int.parse(thosakwe!.id!)
..roleId = int.parse(canSub.id); ..roleId = int.parse(canSub!.id!);
await thosakweSubQuery.insert(executor); await thosakweSubQuery.insert(executor);
// Print all users... // Print all users...
@ -90,16 +91,16 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
print('==================================================\n\n'); print('==================================================\n\n');
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
Future<User> fetchThosakwe() async { Future<User?> fetchThosakwe() async {
var query = UserQuery()..where.id.equals(int.parse(thosakwe.id)); var query = UserQuery()..where!.id.equals(int.parse(thosakwe!.id!));
return await query.getOne(executor); return await query.getOne(executor);
} }
test('fetch roles for user', () async { test('fetch roles for user', () async {
printSeparator('Fetch roles for user test'); printSeparator('Fetch roles for user test');
var user = await fetchThosakwe(); var user = await (fetchThosakwe() as FutureOr<User>);
expect(user.roles, hasLength(2)); expect(user.roles, hasLength(2));
expect(user.roles, contains(canPub)); expect(user.roles, contains(canPub));
expect(user.roles, contains(canSub)); expect(user.roles, contains(canSub));
@ -107,8 +108,8 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
test('fetch users for role', () async { test('fetch users for role', () async {
for (var role in [canPub, canSub]) { for (var role in [canPub, canSub]) {
var query = RoleQuery()..where.id.equals(role.idAsInt); var query = RoleQuery()..where!.id.equals(role!.idAsInt!);
var r = await query.getOne(executor); var r = await (query.getOne(executor) as FutureOr<Role>);
expect(r.users.toList(), [thosakwe]); expect(r.users.toList(), [thosakwe]);
} }
}); });
@ -121,12 +122,12 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
..username = 'Prince' ..username = 'Prince'
..password = 'Rogers' ..password = 'Rogers'
..email = 'Nelson'; ..email = 'Nelson';
var user = await userQuery.insert(executor); var user = await (userQuery.insert(executor) as FutureOr<User>);
expect(user.roles, isEmpty); expect(user.roles, isEmpty);
// Fetch again, just to be doubly sure. // Fetch again, just to be doubly sure.
var query = UserQuery()..where.id.equals(user.idAsInt); var query = UserQuery()..where!.id.equals(user.idAsInt!);
var fetched = await query.getOne(executor); var fetched = await (query.getOne(executor) as FutureOr<User>);
expect(fetched.roles, isEmpty); expect(fetched.roles, isEmpty);
}); });
} }

View file

@ -10,12 +10,12 @@ part 'book.g.dart';
@orm @orm
class _Book extends Model { class _Book extends Model {
@BelongsTo(joinType: JoinType.inner) @BelongsTo(joinType: JoinType.inner)
_Author author; _Author? author;
@BelongsTo(localKey: "partner_author_id", joinType: JoinType.inner) @BelongsTo(localKey: "partner_author_id", joinType: JoinType.inner)
_Author partnerAuthor; _Author? partnerAuthor;
String name; String? name;
} }
@serializable @serializable
@ -23,5 +23,5 @@ class _Book extends Model {
abstract class _Author extends Model { abstract class _Author extends Model {
@Column(length: 255, indexType: IndexType.unique) @Column(length: 255, indexType: IndexType.unique)
@SerializableField(defaultValue: 'Tobe Osakwe') @SerializableField(defaultValue: 'Tobe Osakwe')
String get name; String? get name;
} }

View file

@ -50,8 +50,8 @@ class AuthorMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class BookQuery extends Query<Book, BookQueryWhere> { class BookQuery extends Query<Book?, BookQueryWhere?> {
BookQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { BookQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = BookQueryWhere(this); _where = BookQueryWhere(this);
@ -68,11 +68,11 @@ class BookQuery extends Query<Book, BookQueryWhere> {
@override @override
final BookQueryValues values = BookQueryValues(); final BookQueryValues values = BookQueryValues();
BookQueryWhere _where; BookQueryWhere? _where;
AuthorQuery _author; AuthorQuery? _author;
AuthorQuery _partnerAuthor; AuthorQuery? _partnerAuthor;
@override @override
get casts { get casts {
@ -97,7 +97,7 @@ class BookQuery extends Query<Book, BookQueryWhere> {
} }
@override @override
BookQueryWhere get where { BookQueryWhere? get where {
return _where; return _where;
} }
@ -106,13 +106,13 @@ class BookQuery extends Query<Book, BookQueryWhere> {
return BookQueryWhere(this); return BookQueryWhere(this);
} }
static Book parseRow(List row) { static Book? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Book( var model = Book(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
name: (row[5] as String)); name: (row[5] as String?));
if (row.length > 6) { if (row.length > 6) {
model = model.copyWith( model = model.copyWith(
author: AuthorQuery.parseRow(row.skip(6).take(4).toList())); author: AuthorQuery.parseRow(row.skip(6).take(4).toList()));
@ -129,11 +129,11 @@ class BookQuery extends Query<Book, BookQueryWhere> {
return parseRow(row); return parseRow(row);
} }
AuthorQuery get author { AuthorQuery? get author {
return _author; return _author;
} }
AuthorQuery get partnerAuthor { AuthorQuery? get partnerAuthor {
return _partnerAuthor; return _partnerAuthor;
} }
} }
@ -172,51 +172,52 @@ class BookQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
int get authorId { int? get authorId {
return (values['author_id'] as int); return (values['author_id'] as int?);
} }
set authorId(int value) => values['author_id'] = value; set authorId(int? value) => values['author_id'] = value;
int get partnerAuthorId { int? get partnerAuthorId {
return (values['partner_author_id'] as int); return (values['partner_author_id'] as int?);
} }
set partnerAuthorId(int value) => values['partner_author_id'] = value; set partnerAuthorId(int? value) => values['partner_author_id'] = value;
String get name { String? get name {
return (values['name'] as String); return (values['name'] as String?);
} }
set name(String value) => values['name'] = value; set name(String? value) => values['name'] = value;
void copyFrom(Book model) { void copyFrom(Book model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
name = model.name; name = model.name;
if (model.author != null) { if (model.author != null) {
values['author_id'] = model.author.id; values['author_id'] = model.author!.id;
} }
if (model.partnerAuthor != null) { if (model.partnerAuthor != null) {
values['partner_author_id'] = model.partnerAuthor.id; values['partner_author_id'] = model.partnerAuthor!.id;
} }
} }
} }
class AuthorQuery extends Query<Author, AuthorQueryWhere> { 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 ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = AuthorQueryWhere(this); _where = AuthorQueryWhere(this);
@ -225,7 +226,7 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
@override @override
final AuthorQueryValues values = AuthorQueryValues(); final AuthorQueryValues values = AuthorQueryValues();
AuthorQueryWhere _where; AuthorQueryWhere? _where;
@override @override
get casts { get casts {
@ -243,7 +244,7 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
} }
@override @override
AuthorQueryWhere get where { AuthorQueryWhere? get where {
return _where; return _where;
} }
@ -252,13 +253,13 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
return AuthorQueryWhere(this); return AuthorQueryWhere(this);
} }
static Author parseRow(List row) { static Author? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Author( var model = Author(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
name: (row[3] as String)); name: (row[3] as String?));
return model; return model;
} }
@ -295,26 +296,26 @@ class AuthorQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
String get name { String? get name {
return (values['name'] as String); return (values['name'] as String?);
} }
set name(String value) => values['name'] = value; set name(String? value) => values['name'] = value;
void copyFrom(Author model) { void copyFrom(Author model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -338,32 +339,32 @@ class Book extends _Book {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
_Author author; _Author? author;
@override @override
_Author partnerAuthor; _Author? partnerAuthor;
@override @override
String name; String? name;
Book copyWith( Book copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
_Author author, _Author? author,
_Author partnerAuthor, _Author? partnerAuthor,
String name}) { String? name}) {
return Book( return Book(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -404,21 +405,21 @@ class Author extends _Author {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
final String name; final String? name;
Author copyWith( Author copyWith(
{String id, DateTime createdAt, DateTime updatedAt, String name}) { {String? id, DateTime? createdAt, DateTime? updatedAt, String? name}) {
return Author( return Author(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -444,7 +445,7 @@ class Author extends _Author {
return "Author(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, name=$name)"; return "Author(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, name=$name)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return AuthorSerializer.toMap(this); return AuthorSerializer.toMap(this);
} }
} }
@ -478,15 +479,15 @@ class BookSerializer extends Codec<Book, Map> {
get decoder => const BookDecoder(); get decoder => const BookDecoder();
static Book fromMap(Map map) { static Book fromMap(Map map) {
return Book( return Book(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
author: map['author'] != null author: map['author'] != null
@ -495,13 +496,10 @@ class BookSerializer extends Codec<Book, Map> {
partnerAuthor: map['partner_author'] != null partnerAuthor: map['partner_author'] != null
? AuthorSerializer.fromMap(map['partner_author'] as Map) ? AuthorSerializer.fromMap(map['partner_author'] as Map)
: null, : null,
name: map['name'] as String); name: map['name'] as String?);
} }
static Map<String, dynamic> toMap(_Book model) { static Map<String, dynamic> toMap(_Book model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
@ -538,11 +536,11 @@ abstract class BookFields {
const AuthorSerializer authorSerializer = AuthorSerializer(); const AuthorSerializer authorSerializer = AuthorSerializer();
class AuthorEncoder extends Converter<Author, Map> { class AuthorEncoder extends Converter<Author, Map?> {
const AuthorEncoder(); const AuthorEncoder();
@override @override
Map convert(Author model) => AuthorSerializer.toMap(model); Map? convert(Author model) => AuthorSerializer.toMap(model);
} }
class AuthorDecoder extends Converter<Map, Author> { class AuthorDecoder extends Converter<Map, Author> {
@ -552,7 +550,7 @@ class AuthorDecoder extends Converter<Map, Author> {
Author convert(Map map) => AuthorSerializer.fromMap(map); Author convert(Map map) => AuthorSerializer.fromMap(map);
} }
class AuthorSerializer extends Codec<Author, Map> { class AuthorSerializer extends Codec<Author, Map?> {
const AuthorSerializer(); const AuthorSerializer();
@override @override
@ -561,21 +559,21 @@ class AuthorSerializer extends Codec<Author, Map> {
get decoder => const AuthorDecoder(); get decoder => const AuthorDecoder();
static Author fromMap(Map map) { static Author fromMap(Map map) {
return Author( return Author(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
name: map['name'] as String ?? 'Tobe Osakwe'); name: map['name'] as String? ?? 'Tobe Osakwe');
} }
static Map<String, dynamic> toMap(_Author model) { static Map<String, dynamic>? toMap(_Author? model) {
if (model == null) { if (model == null) {
return null; return null;
} }

View file

@ -9,8 +9,8 @@ part 'car.g.dart';
@serializable @serializable
@orm @orm
class _Car extends Model { class _Car extends Model {
String make; String? make;
String description; String? description;
bool familyFriendly; bool? familyFriendly;
DateTime recalledAt; DateTime? recalledAt;
} }

View file

@ -30,8 +30,8 @@ class CarMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class CarQuery extends Query<Car, CarQueryWhere> { class CarQuery extends Query<Car?, CarQueryWhere?> {
CarQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { CarQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = CarQueryWhere(this); _where = CarQueryWhere(this);
@ -40,7 +40,7 @@ class CarQuery extends Query<Car, CarQueryWhere> {
@override @override
final CarQueryValues values = CarQueryValues(); final CarQueryValues values = CarQueryValues();
CarQueryWhere _where; CarQueryWhere? _where;
@override @override
get casts { get casts {
@ -66,7 +66,7 @@ class CarQuery extends Query<Car, CarQueryWhere> {
} }
@override @override
CarQueryWhere get where { CarQueryWhere? get where {
return _where; return _where;
} }
@ -75,16 +75,16 @@ class CarQuery extends Query<Car, CarQueryWhere> {
return CarQueryWhere(this); return CarQueryWhere(this);
} }
static Car parseRow(List row) { static Car? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Car( var model = Car(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
make: (row[3] as String), make: (row[3] as String?),
description: (row[4] as String), description: (row[4] as String?),
familyFriendly: (row[5] as bool), familyFriendly: (row[5] as bool?),
recalledAt: (row[6] as DateTime)); recalledAt: (row[6] as DateTime?));
return model; return model;
} }
@ -138,41 +138,41 @@ class CarQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
String get make { String? get make {
return (values['make'] as String); return (values['make'] as String?);
} }
set make(String value) => values['make'] = value; set make(String? value) => values['make'] = value;
String get description { String? get description {
return (values['description'] as String); return (values['description'] as String?);
} }
set description(String value) => values['description'] = value; set description(String? value) => values['description'] = value;
bool get familyFriendly { bool? get familyFriendly {
return (values['family_friendly'] as bool); return (values['family_friendly'] as bool?);
} }
set familyFriendly(bool value) => values['family_friendly'] = value; set familyFriendly(bool? value) => values['family_friendly'] = value;
DateTime get recalledAt { DateTime? get recalledAt {
return (values['recalled_at'] as DateTime); return (values['recalled_at'] as DateTime?);
} }
set recalledAt(DateTime value) => values['recalled_at'] = value; set recalledAt(DateTime? value) => values['recalled_at'] = value;
void copyFrom(Car model) { void copyFrom(Car model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -200,36 +200,36 @@ class Car extends _Car {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
String make; String? make;
@override @override
String description; String? description;
@override @override
bool familyFriendly; bool? familyFriendly;
@override @override
DateTime recalledAt; DateTime? recalledAt;
Car copyWith( Car copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
String make, String? make,
String description, String? description,
bool familyFriendly, bool? familyFriendly,
DateTime recalledAt}) { DateTime? recalledAt}) {
return Car( return Car(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -303,31 +303,28 @@ class CarSerializer extends Codec<Car, Map> {
get decoder => const CarDecoder(); get decoder => const CarDecoder();
static Car fromMap(Map map) { static Car fromMap(Map map) {
return Car( return Car(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
make: map['make'] as String, make: map['make'] as String?,
description: map['description'] as String, description: map['description'] as String?,
familyFriendly: map['family_friendly'] as bool, familyFriendly: map['family_friendly'] as bool?,
recalledAt: map['recalled_at'] != null recalledAt: map['recalled_at'] != null
? (map['recalled_at'] is DateTime ? (map['recalled_at'] is DateTime
? (map['recalled_at'] as DateTime) ? (map['recalled_at'] as DateTime?)
: DateTime.parse(map['recalled_at'].toString())) : DateTime.parse(map['recalled_at'].toString()))
: null); : null);
} }
static Map<String, dynamic> toMap(_Car model) { static Map<String, dynamic> toMap(_Car model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),

View file

@ -8,14 +8,14 @@ part 'custom_expr.g.dart';
@orm @orm
class _Numbers extends Model { class _Numbers extends Model {
@Column(expression: 'SELECT 2') @Column(expression: 'SELECT 2')
int two; int? two;
} }
@serializable @serializable
@orm @orm
class _Alphabet extends Model { class _Alphabet extends Model {
String value; String? value;
@belongsTo @belongsTo
_Numbers numbers; _Numbers? numbers;
} }

View file

@ -46,8 +46,9 @@ class AlphabetMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class NumbersQuery extends Query<Numbers, NumbersQueryWhere> { 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 ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
expressions['two'] = 'SELECT 2'; expressions['two'] = 'SELECT 2';
@ -57,7 +58,7 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
@override @override
final NumbersQueryValues values = NumbersQueryValues(); final NumbersQueryValues values = NumbersQueryValues();
NumbersQueryWhere _where; NumbersQueryWhere? _where;
@override @override
get casts { get casts {
@ -75,7 +76,7 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
} }
@override @override
NumbersQueryWhere get where { NumbersQueryWhere? get where {
return _where; return _where;
} }
@ -84,13 +85,13 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
return NumbersQueryWhere(this); return NumbersQueryWhere(this);
} }
static Numbers parseRow(List row) { static Numbers? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Numbers( var model = Numbers(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
two: (row[3] as int)); two: (row[3] as int?));
return model; return model;
} }
@ -124,29 +125,29 @@ class NumbersQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
void copyFrom(Numbers model) { void copyFrom(Numbers model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
} }
} }
class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> { class AlphabetQuery extends Query<Alphabet?, AlphabetQueryWhere?> {
AlphabetQuery({Query parent, Set<String> trampoline}) AlphabetQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -160,9 +161,9 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
@override @override
final AlphabetQueryValues values = AlphabetQueryValues(); final AlphabetQueryValues values = AlphabetQueryValues();
AlphabetQueryWhere _where; AlphabetQueryWhere? _where;
NumbersQuery _numbers; NumbersQuery? _numbers;
@override @override
get casts { get casts {
@ -180,7 +181,7 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
} }
@override @override
AlphabetQueryWhere get where { AlphabetQueryWhere? get where {
return _where; return _where;
} }
@ -189,13 +190,13 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
return AlphabetQueryWhere(this); return AlphabetQueryWhere(this);
} }
static Alphabet parseRow(List row) { static Alphabet? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Alphabet( var model = Alphabet(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
value: (row[3] as String)); value: (row[3] as String?));
if (row.length > 5) { if (row.length > 5) {
model = model.copyWith( model = model.copyWith(
numbers: NumbersQuery.parseRow(row.skip(5).take(4).toList())); numbers: NumbersQuery.parseRow(row.skip(5).take(4).toList()));
@ -208,7 +209,7 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
return parseRow(row); return parseRow(row);
} }
NumbersQuery get numbers { NumbersQuery? get numbers {
return _numbers; return _numbers;
} }
} }
@ -243,37 +244,37 @@ class AlphabetQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
String get value { String? get value {
return (values['value'] as String); return (values['value'] as String?);
} }
set value(String value) => values['value'] = value; set value(String? value) => values['value'] = value;
int get numbersId { int? get numbersId {
return (values['numbers_id'] as int); return (values['numbers_id'] as int?);
} }
set numbersId(int value) => values['numbers_id'] = value; set numbersId(int? value) => values['numbers_id'] = value;
void copyFrom(Alphabet model) { void copyFrom(Alphabet model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
value = model.value; value = model.value;
if (model.numbers != null) { if (model.numbers != null) {
values['numbers_id'] = model.numbers.id; values['numbers_id'] = model.numbers!.id;
} }
} }
} }
@ -288,21 +289,21 @@ class Numbers extends _Numbers {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
int two; int? two;
Numbers copyWith( Numbers copyWith(
{String id, DateTime createdAt, DateTime updatedAt, int two}) { {String? id, DateTime? createdAt, DateTime? updatedAt, int? two}) {
return Numbers( return Numbers(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -328,7 +329,7 @@ class Numbers extends _Numbers {
return "Numbers(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, two=$two)"; return "Numbers(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, two=$two)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return NumbersSerializer.toMap(this); return NumbersSerializer.toMap(this);
} }
} }
@ -339,28 +340,28 @@ class Alphabet extends _Alphabet {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
String value; String? value;
@override @override
_Numbers numbers; _Numbers? numbers;
Alphabet copyWith( Alphabet copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
String value, String? value,
_Numbers numbers}) { _Numbers? numbers}) {
return Alphabet( return Alphabet(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -399,11 +400,11 @@ class Alphabet extends _Alphabet {
const NumbersSerializer numbersSerializer = NumbersSerializer(); const NumbersSerializer numbersSerializer = NumbersSerializer();
class NumbersEncoder extends Converter<Numbers, Map> { class NumbersEncoder extends Converter<Numbers, Map?> {
const NumbersEncoder(); const NumbersEncoder();
@override @override
Map convert(Numbers model) => NumbersSerializer.toMap(model); Map? convert(Numbers model) => NumbersSerializer.toMap(model);
} }
class NumbersDecoder extends Converter<Map, Numbers> { class NumbersDecoder extends Converter<Map, Numbers> {
@ -413,7 +414,7 @@ class NumbersDecoder extends Converter<Map, Numbers> {
Numbers convert(Map map) => NumbersSerializer.fromMap(map); Numbers convert(Map map) => NumbersSerializer.fromMap(map);
} }
class NumbersSerializer extends Codec<Numbers, Map> { class NumbersSerializer extends Codec<Numbers, Map?> {
const NumbersSerializer(); const NumbersSerializer();
@override @override
@ -422,21 +423,21 @@ class NumbersSerializer extends Codec<Numbers, Map> {
get decoder => const NumbersDecoder(); get decoder => const NumbersDecoder();
static Numbers fromMap(Map map) { static Numbers fromMap(Map map) {
return Numbers( return Numbers(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
two: map['two'] as int); two: map['two'] as int?);
} }
static Map<String, dynamic> toMap(_Numbers model) { static Map<String, dynamic>? toMap(_Numbers? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -486,27 +487,24 @@ class AlphabetSerializer extends Codec<Alphabet, Map> {
get decoder => const AlphabetDecoder(); get decoder => const AlphabetDecoder();
static Alphabet fromMap(Map map) { static Alphabet fromMap(Map map) {
return Alphabet( return Alphabet(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
value: map['value'] as String, value: map['value'] as String?,
numbers: map['numbers'] != null numbers: map['numbers'] != null
? NumbersSerializer.fromMap(map['numbers'] as Map) ? NumbersSerializer.fromMap(map['numbers'] as Map)
: null); : null);
} }
static Map<String, dynamic> toMap(_Alphabet model) { static Map<String, dynamic> toMap(_Alphabet model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),

View file

@ -9,20 +9,20 @@ part 'email_indexed.g.dart';
@orm @orm
abstract class _Role { abstract class _Role {
@PrimaryKey(columnType: ColumnType.varChar) @PrimaryKey(columnType: ColumnType.varChar)
String get role; String? get role;
@ManyToMany(_RoleUser) @ManyToMany(_RoleUser)
List<_User> get users; List<_User?>? get users;
} }
@serializable @serializable
@orm @orm
abstract class _RoleUser { abstract class _RoleUser {
@belongsTo @belongsTo
_Role get role; _Role? get role;
@belongsTo @belongsTo
_User get user; _User? get user;
} }
@serializable @serializable
@ -30,10 +30,10 @@ abstract class _RoleUser {
abstract class _User { abstract class _User {
// @PrimaryKey(columnType: ColumnType.varChar) // @PrimaryKey(columnType: ColumnType.varChar)
@primaryKey @primaryKey
String get email; String? get email;
String get name; String? get name;
String get password; String? get password;
@ManyToMany(_RoleUser) @ManyToMany(_RoleUser)
List<_Role> get roles; List<_Role?>? get roles;
} }

View file

@ -59,8 +59,8 @@ class UserMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class RoleQuery extends Query<Role, RoleQueryWhere> { class RoleQuery extends Query<Role?, RoleQueryWhere?> {
RoleQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { RoleQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = RoleQueryWhere(this); _where = RoleQueryWhere(this);
@ -75,7 +75,7 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
final RoleQueryValues values = RoleQueryValues(); final RoleQueryValues values = RoleQueryValues();
RoleQueryWhere _where; RoleQueryWhere? _where;
@override @override
get casts { get casts {
@ -93,7 +93,7 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
} }
@override @override
RoleQueryWhere get where { RoleQueryWhere? get where {
return _where; return _where;
} }
@ -102,9 +102,9 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
return RoleQueryWhere(this); return RoleQueryWhere(this);
} }
static Role parseRow(List row) { static Role? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Role(role: (row[0] as String)); var model = Role(role: (row[0] as String?));
if (row.length > 1) { if (row.length > 1) {
model = model.copyWith( model = model.copyWith(
users: [UserQuery.parseRow(row.skip(1).take(3).toList())] users: [UserQuery.parseRow(row.skip(1).take(3).toList())]
@ -121,24 +121,24 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
bool canCompile(trampoline) { bool canCompile(trampoline) {
return (!(trampoline.contains('roles') && return (!(trampoline?.contains('roles') == true &&
trampoline.contains('role_users'))); trampoline?.contains('role_users') == true));
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<Role>>([], (out, model) { return result.fold<List<Role?>>([], (out, model) {
var idx = out.indexWhere((m) => m.role == model.role); var idx = out.indexWhere((m) => m!.role == model!.role);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
users: List<_User>.from(l.users ?? []) users: List<_User?>.from(l.users ?? [])
..addAll(model.users ?? [])); ..addAll(model!.users ?? []));
} }
}); });
}); });
@ -147,17 +147,17 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<Role>>([], (out, model) { return result.fold<List<Role?>>([], (out, model) {
var idx = out.indexWhere((m) => m.role == model.role); var idx = out.indexWhere((m) => m!.role == model!.role);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
users: List<_User>.from(l.users ?? []) users: List<_User?>.from(l.users ?? [])
..addAll(model.users ?? [])); ..addAll(model!.users ?? []));
} }
}); });
}); });
@ -166,17 +166,17 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<Role>>([], (out, model) { return result.fold<List<Role?>>([], (out, model) {
var idx = out.indexWhere((m) => m.role == model.role); var idx = out.indexWhere((m) => m!.role == model!.role);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
users: List<_User>.from(l.users ?? []) users: List<_User?>.from(l.users ?? [])
..addAll(model.users ?? [])); ..addAll(model!.users ?? []));
} }
}); });
}); });
@ -201,18 +201,18 @@ class RoleQueryValues extends MapQueryValues {
return {}; return {};
} }
String get role { String? get role {
return (values['role'] as String); return (values['role'] as String?);
} }
set role(String value) => values['role'] = value; set role(String? value) => values['role'] = value;
void copyFrom(Role model) { void copyFrom(Role model) {
role = model.role; role = model.role;
} }
} }
class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> { class RoleUserQuery extends Query<RoleUser?, RoleUserQueryWhere?> {
RoleUserQuery({Query parent, Set<String> trampoline}) RoleUserQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -229,11 +229,11 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
@override @override
final RoleUserQueryValues values = RoleUserQueryValues(); final RoleUserQueryValues values = RoleUserQueryValues();
RoleUserQueryWhere _where; RoleUserQueryWhere? _where;
RoleQuery _role; RoleQuery? _role;
UserQuery _user; UserQuery? _user;
@override @override
get casts { get casts {
@ -251,7 +251,7 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
} }
@override @override
RoleUserQueryWhere get where { RoleUserQueryWhere? get where {
return _where; return _where;
} }
@ -260,7 +260,7 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
return RoleUserQueryWhere(this); return RoleUserQueryWhere(this);
} }
static RoleUser parseRow(List row) { static RoleUser? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = RoleUser(); var model = RoleUser();
if (row.length > 2) { if (row.length > 2) {
@ -279,11 +279,11 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
return parseRow(row); return parseRow(row);
} }
RoleQuery get role { RoleQuery? get role {
return _role; return _role;
} }
UserQuery get user { UserQuery? get user {
return _user; return _user;
} }
} }
@ -309,28 +309,28 @@ class RoleUserQueryValues extends MapQueryValues {
return {}; return {};
} }
String get roleRole { String? get roleRole {
return (values['role_role'] as String); return (values['role_role'] as String?);
} }
set roleRole(String value) => values['role_role'] = value; set roleRole(String? value) => values['role_role'] = value;
String get userEmail { String? get userEmail {
return (values['user_email'] as String); return (values['user_email'] as String?);
} }
set userEmail(String value) => values['user_email'] = value; set userEmail(String? value) => values['user_email'] = value;
void copyFrom(RoleUser model) { void copyFrom(RoleUser model) {
if (model.role != null) { if (model.role != null) {
values['role_role'] = model.role.role; values['role_role'] = model.role!.role;
} }
if (model.user != null) { if (model.user != null) {
values['user_email'] = model.user.email; values['user_email'] = model.user!.email;
} }
} }
} }
class UserQuery extends Query<User, UserQueryWhere> { class UserQuery extends Query<User?, UserQueryWhere?> {
UserQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { UserQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = UserQueryWhere(this); _where = UserQueryWhere(this);
@ -345,7 +345,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
final UserQueryValues values = UserQueryValues(); final UserQueryValues values = UserQueryValues();
UserQueryWhere _where; UserQueryWhere? _where;
@override @override
get casts { get casts {
@ -363,7 +363,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
} }
@override @override
UserQueryWhere get where { UserQueryWhere? get where {
return _where; return _where;
} }
@ -372,12 +372,12 @@ class UserQuery extends Query<User, UserQueryWhere> {
return UserQueryWhere(this); return UserQueryWhere(this);
} }
static User parseRow(List row) { static User? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = User( var model = User(
email: (row[0] as String), email: (row[0] as String?),
name: (row[1] as String), name: (row[1] as String?),
password: (row[2] as String)); password: (row[2] as String?));
if (row.length > 3) { if (row.length > 3) {
model = model.copyWith( model = model.copyWith(
roles: [RoleQuery.parseRow(row.skip(3).take(1).toList())] roles: [RoleQuery.parseRow(row.skip(3).take(1).toList())]
@ -394,24 +394,24 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
bool canCompile(trampoline) { bool canCompile(trampoline) {
return (!(trampoline.contains('users') && return (!(trampoline?.contains('users') == true &&
trampoline.contains('role_users'))); trampoline?.contains('role_users') == true));
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<User>>([], (out, model) { return result.fold<List<User?>>([], (out, model) {
var idx = out.indexWhere((m) => m.email == model.email); var idx = out.indexWhere((m) => m!.email == model!.email);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
roles: List<_Role>.from(l.roles ?? []) roles: List<_Role?>.from(l.roles ?? [])
..addAll(model.roles ?? [])); ..addAll(model!.roles ?? []));
} }
}); });
}); });
@ -420,17 +420,17 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<User>>([], (out, model) { return result.fold<List<User?>>([], (out, model) {
var idx = out.indexWhere((m) => m.email == model.email); var idx = out.indexWhere((m) => m!.email == model!.email);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
roles: List<_Role>.from(l.roles ?? []) roles: List<_Role?>.from(l.roles ?? [])
..addAll(model.roles ?? [])); ..addAll(model!.roles ?? []));
} }
}); });
}); });
@ -439,17 +439,17 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<User>>([], (out, model) { return result.fold<List<User?>>([], (out, model) {
var idx = out.indexWhere((m) => m.email == model.email); var idx = out.indexWhere((m) => m!.email == model!.email);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
roles: List<_Role>.from(l.roles ?? []) roles: List<_Role?>.from(l.roles ?? [])
..addAll(model.roles ?? [])); ..addAll(model!.roles ?? []));
} }
}); });
}); });
@ -480,21 +480,21 @@ class UserQueryValues extends MapQueryValues {
return {}; return {};
} }
String get email { String? get email {
return (values['email'] as String); return (values['email'] as String?);
} }
set email(String value) => values['email'] = value; set email(String? value) => values['email'] = value;
String get name { String? get name {
return (values['name'] as String); return (values['name'] as String?);
} }
set name(String value) => values['name'] = value; set name(String? value) => values['name'] = value;
String get password { String? get password {
return (values['password'] as String); return (values['password'] as String?);
} }
set password(String value) => values['password'] = value; set password(String? value) => values['password'] = value;
void copyFrom(User model) { void copyFrom(User model) {
email = model.email; email = model.email;
name = model.name; name = model.name;
@ -511,19 +511,19 @@ class Role implements _Role {
const Role({this.role, this.users}); const Role({this.role, this.users});
@override @override
final String role; final String? role;
@override @override
final List<_User> users; final List<_User?>? users;
Role copyWith({String role, List<_User> users}) { Role copyWith({String? role, List<_User?>? users}) {
return Role(role: role ?? this.role, users: users ?? this.users); return Role(role: role ?? this.role, users: users ?? this.users);
} }
bool operator ==(other) { bool operator ==(other) {
return other is _Role && return other is _Role &&
other.role == role && other.role == role &&
ListEquality<_User>(DefaultEquality<_User>()) ListEquality<_User?>(DefaultEquality<_User>())
.equals(other.users, users); .equals(other.users, users);
} }
@ -537,7 +537,7 @@ class Role implements _Role {
return "Role(role=$role, users=$users)"; return "Role(role=$role, users=$users)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return RoleSerializer.toMap(this); return RoleSerializer.toMap(this);
} }
} }
@ -547,12 +547,12 @@ class RoleUser implements _RoleUser {
const RoleUser({this.role, this.user}); const RoleUser({this.role, this.user});
@override @override
final _Role role; final _Role? role;
@override @override
final _User user; final _User? user;
RoleUser copyWith({_Role role, _User user}) { RoleUser copyWith({_Role? role, _User? user}) {
return RoleUser(role: role ?? this.role, user: user ?? this.user); return RoleUser(role: role ?? this.role, user: user ?? this.user);
} }
@ -580,19 +580,19 @@ class User implements _User {
const User({this.email, this.name, this.password, this.roles}); const User({this.email, this.name, this.password, this.roles});
@override @override
final String email; final String? email;
@override @override
final String name; final String? name;
@override @override
final String password; final String? password;
@override @override
final List<_Role> roles; final List<_Role?>? roles;
User copyWith( User copyWith(
{String email, String name, String password, List<_Role> roles}) { {String? email, String? name, String? password, List<_Role?>? roles}) {
return User( return User(
email: email ?? this.email, email: email ?? this.email,
name: name ?? this.name, name: name ?? this.name,
@ -605,7 +605,7 @@ class User implements _User {
other.email == email && other.email == email &&
other.name == name && other.name == name &&
other.password == password && other.password == password &&
ListEquality<_Role>(DefaultEquality<_Role>()) ListEquality<_Role?>(DefaultEquality<_Role>())
.equals(other.roles, roles); .equals(other.roles, roles);
} }
@ -619,7 +619,7 @@ class User implements _User {
return "User(email=$email, name=$name, password=$password, roles=$roles)"; return "User(email=$email, name=$name, password=$password, roles=$roles)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return UserSerializer.toMap(this); return UserSerializer.toMap(this);
} }
} }
@ -630,11 +630,11 @@ class User implements _User {
const RoleSerializer roleSerializer = RoleSerializer(); const RoleSerializer roleSerializer = RoleSerializer();
class RoleEncoder extends Converter<Role, Map> { class RoleEncoder extends Converter<Role, Map?> {
const RoleEncoder(); const RoleEncoder();
@override @override
Map convert(Role model) => RoleSerializer.toMap(model); Map? convert(Role model) => RoleSerializer.toMap(model);
} }
class RoleDecoder extends Converter<Map, Role> { class RoleDecoder extends Converter<Map, Role> {
@ -644,7 +644,7 @@ class RoleDecoder extends Converter<Map, Role> {
Role convert(Map map) => RoleSerializer.fromMap(map); Role convert(Map map) => RoleSerializer.fromMap(map);
} }
class RoleSerializer extends Codec<Role, Map> { class RoleSerializer extends Codec<Role, Map?> {
const RoleSerializer(); const RoleSerializer();
@override @override
@ -653,20 +653,20 @@ class RoleSerializer extends Codec<Role, Map> {
get decoder => const RoleDecoder(); get decoder => const RoleDecoder();
static Role fromMap(Map map) { static Role fromMap(Map map) {
return Role( return Role(
role: map['role'] as String, role: map['role'] as String?,
users: map['users'] is Iterable users: map['users'] is Iterable
? List.unmodifiable(((map['users'] as Iterable).whereType<Map>()) ? List.unmodifiable(((map['users'] as Iterable).whereType<Map>())
.map(UserSerializer.fromMap)) .map(UserSerializer.fromMap))
: null); : null);
} }
static Map<String, dynamic> toMap(_Role model) { static Map<String, dynamic>? toMap(_Role? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
return { return {
'role': model.role, 'role': model.role,
'users': model.users?.map((m) => UserSerializer.toMap(m))?.toList() 'users': model.users?.map((m) => UserSerializer.toMap(m)).toList()
}; };
} }
} }
@ -713,9 +713,6 @@ class RoleUserSerializer extends Codec<RoleUser, Map> {
} }
static Map<String, dynamic> toMap(_RoleUser model) { static Map<String, dynamic> toMap(_RoleUser model) {
if (model == null) {
return null;
}
return { return {
'role': RoleSerializer.toMap(model.role), 'role': RoleSerializer.toMap(model.role),
'user': UserSerializer.toMap(model.user) 'user': UserSerializer.toMap(model.user)
@ -733,11 +730,11 @@ abstract class RoleUserFields {
const UserSerializer userSerializer = UserSerializer(); const UserSerializer userSerializer = UserSerializer();
class UserEncoder extends Converter<User, Map> { class UserEncoder extends Converter<User, Map?> {
const UserEncoder(); const UserEncoder();
@override @override
Map convert(User model) => UserSerializer.toMap(model); Map? convert(User model) => UserSerializer.toMap(model);
} }
class UserDecoder extends Converter<Map, User> { class UserDecoder extends Converter<Map, User> {
@ -747,7 +744,7 @@ class UserDecoder extends Converter<Map, User> {
User convert(Map map) => UserSerializer.fromMap(map); User convert(Map map) => UserSerializer.fromMap(map);
} }
class UserSerializer extends Codec<User, Map> { class UserSerializer extends Codec<User, Map?> {
const UserSerializer(); const UserSerializer();
@override @override
@ -756,16 +753,16 @@ class UserSerializer extends Codec<User, Map> {
get decoder => const UserDecoder(); get decoder => const UserDecoder();
static User fromMap(Map map) { static User fromMap(Map map) {
return User( return User(
email: map['email'] as String, email: map['email'] as String?,
name: map['name'] as String, name: map['name'] as String?,
password: map['password'] as String, password: map['password'] as String?,
roles: map['roles'] is Iterable roles: map['roles'] is Iterable
? List.unmodifiable(((map['roles'] as Iterable).whereType<Map>()) ? List.unmodifiable(((map['roles'] as Iterable).whereType<Map>())
.map(RoleSerializer.fromMap)) .map(RoleSerializer.fromMap))
: null); : null);
} }
static Map<String, dynamic> toMap(_User model) { static Map<String, dynamic>? toMap(_User? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -773,7 +770,7 @@ class UserSerializer extends Codec<User, Map> {
'email': model.email, 'email': model.email,
'name': model.name, 'name': model.name,
'password': model.password, 'password': model.password,
'roles': model.roles?.map((m) => RoleSerializer.toMap(m))?.toList() 'roles': model.roles?.map((m) => RoleSerializer.toMap(m)).toList()
}; };
} }
} }

View file

@ -20,5 +20,5 @@ abstract class _HasCar extends Model {
// Car get car; // Car get car;
@SerializableField(isNullable: false, defaultValue: CarType.sedan) @SerializableField(isNullable: false, defaultValue: CarType.sedan)
CarType get type; CarType? get type;
} }

View file

@ -27,8 +27,9 @@ class HasCarMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class HasCarQuery extends Query<HasCar, HasCarQueryWhere> { 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 ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = HasCarQueryWhere(this); _where = HasCarQueryWhere(this);
@ -37,7 +38,7 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
@override @override
final HasCarQueryValues values = HasCarQueryValues(); final HasCarQueryValues values = HasCarQueryValues();
HasCarQueryWhere _where; HasCarQueryWhere? _where;
@override @override
get casts { get casts {
@ -55,7 +56,7 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
} }
@override @override
HasCarQueryWhere get where { HasCarQueryWhere? get where {
return _where; return _where;
} }
@ -64,12 +65,12 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
return HasCarQueryWhere(this); return HasCarQueryWhere(this);
} }
static HasCar parseRow(List row) { static HasCar? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = HasCar( var model = HasCar(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
type: row[3] == null ? null : CarType.values[(row[3] as int)]); type: row[3] == null ? null : CarType.values[(row[3] as int)]);
return model; return model;
} }
@ -85,7 +86,8 @@ class HasCarQueryWhere extends QueryWhere {
: id = NumericSqlExpressionBuilder<int>(query, 'id'), : id = NumericSqlExpressionBuilder<int>(query, 'id'),
createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'), createdAt = DateTimeSqlExpressionBuilder(query, 'created_at'),
updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'), updatedAt = DateTimeSqlExpressionBuilder(query, 'updated_at'),
type = EnumSqlExpressionBuilder<CarType>(query, 'type', (v) => v.index); type =
EnumSqlExpressionBuilder<CarType?>(query, 'type', (v) => v!.index);
final NumericSqlExpressionBuilder<int> id; final NumericSqlExpressionBuilder<int> id;
@ -93,7 +95,7 @@ class HasCarQueryWhere extends QueryWhere {
final DateTimeSqlExpressionBuilder updatedAt; final DateTimeSqlExpressionBuilder updatedAt;
final EnumSqlExpressionBuilder<CarType> type; final EnumSqlExpressionBuilder<CarType?> type;
@override @override
get expressionBuilders { get expressionBuilders {
@ -107,26 +109,26 @@ class HasCarQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
CarType get type { CarType get type {
return CarType.values[(values['type'] as int)]; return CarType.values[(values['type'] as int)];
} }
set type(CarType value) => values['type'] = value?.index; set type(CarType? value) => values['type'] = value?.index;
void copyFrom(HasCar model) { void copyFrom(HasCar model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -144,21 +146,21 @@ class HasCar extends _HasCar {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
final CarType type; final CarType? type;
HasCar copyWith( HasCar copyWith(
{String id, DateTime createdAt, DateTime updatedAt, CarType type}) { {String? id, DateTime? createdAt, DateTime? updatedAt, CarType? type}) {
return HasCar( return HasCar(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -222,28 +224,25 @@ class HasCarSerializer extends Codec<HasCar, Map> {
} }
return HasCar( return HasCar(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
type: map['type'] is CarType type: map['type'] is CarType
? (map['type'] as CarType) ? (map['type'] as CarType?)
: (map['type'] is int : (map['type'] is int
? CarType.values[map['type'] as int] ? CarType.values[map['type'] as int]
: CarType.sedan)); : CarType.sedan));
} }
static Map<String, dynamic> toMap(_HasCar model) { static Map<String, dynamic> toMap(_HasCar model) {
if (model == null) {
return null;
}
if (model.type == null) { if (model.type == null) {
throw FormatException("Missing required field 'type' on HasCar."); throw FormatException("Missing required field 'type' on HasCar.");
} }
@ -252,7 +251,7 @@ class HasCarSerializer extends Codec<HasCar, Map> {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
'updated_at': model.updatedAt?.toIso8601String(), 'updated_at': model.updatedAt?.toIso8601String(),
'type': model.type == null ? null : CarType.values.indexOf(model.type) 'type': model.type == null ? null : CarType.values.indexOf(model.type!)
}; };
} }
} }

View file

@ -11,9 +11,9 @@ part 'has_map.g.dart';
@orm @orm
@serializable @serializable
abstract class _HasMap { abstract class _HasMap {
Map get value; Map? get value;
List get list; List? get list;
// TODO: Support custom serializers // TODO: Support custom serializers
// @SerializableField( // @SerializableField(

View file

@ -25,8 +25,9 @@ class HasMapMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class HasMapQuery extends Query<HasMap, HasMapQueryWhere> { 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 ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = HasMapQueryWhere(this); _where = HasMapQueryWhere(this);
@ -35,7 +36,7 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
@override @override
final HasMapQueryValues values = HasMapQueryValues(); final HasMapQueryValues values = HasMapQueryValues();
HasMapQueryWhere _where; HasMapQueryWhere? _where;
@override @override
get casts { get casts {
@ -53,7 +54,7 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
} }
@override @override
HasMapQueryWhere get where { HasMapQueryWhere? get where {
return _where; return _where;
} }
@ -62,11 +63,11 @@ class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
return HasMapQueryWhere(this); return HasMapQueryWhere(this);
} }
static HasMap parseRow(List row) { static HasMap? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = HasMap( var model = HasMap(
value: (row[0] as Map<dynamic, dynamic>), value: (row[0] as Map<dynamic, dynamic>?),
list: (row[1] as List<dynamic>)); list: (row[1] as List<dynamic>?));
return model; return model;
} }
@ -97,16 +98,16 @@ class HasMapQueryValues extends MapQueryValues {
return {'list': 'jsonb'}; return {'list': 'jsonb'};
} }
Map<dynamic, dynamic> get value { Map<dynamic, dynamic>? get value {
return (values['value'] as Map<dynamic, dynamic>); return (values['value'] as Map<dynamic, dynamic>?);
} }
set value(Map<dynamic, dynamic> value) => values['value'] = value; set value(Map<dynamic, dynamic>? value) => values['value'] = value;
List<dynamic> get list { List<dynamic>? get list {
return (json.decode((values['list'] as String)) as List); return (json.decode((values['list'] as String)) as List?);
} }
set list(List<dynamic> value) => values['list'] = json.encode(value); set list(List<dynamic>? value) => values['list'] = json.encode(value);
void copyFrom(HasMap model) { void copyFrom(HasMap model) {
value = model.value; value = model.value;
list = model.list; list = model.list;
@ -122,12 +123,12 @@ class HasMap implements _HasMap {
const HasMap({this.value, this.list}); const HasMap({this.value, this.list});
@override @override
final Map<dynamic, dynamic> value; final Map<dynamic, dynamic>? value;
@override @override
final List<dynamic> list; final List<dynamic>? list;
HasMap copyWith({Map<dynamic, dynamic> value, List<dynamic> list}) { HasMap copyWith({Map<dynamic, dynamic>? value, List<dynamic>? list}) {
return HasMap(value: value ?? this.value, list: list ?? this.list); return HasMap(value: value ?? this.value, list: list ?? this.list);
} }
@ -192,9 +193,6 @@ class HasMapSerializer extends Codec<HasMap, Map> {
} }
static Map<String, dynamic> toMap(_HasMap model) { static Map<String, dynamic> toMap(_HasMap model) {
if (model == null) {
return null;
}
return {'value': model.value, 'list': model.list}; return {'value': model.value, 'list': model.list};
} }
} }

View file

@ -10,15 +10,15 @@ part 'leg.g.dart';
@orm @orm
class _Leg extends Model { class _Leg extends Model {
@hasOne @hasOne
_Foot foot; _Foot? foot;
String name; String? name;
} }
@serializable @serializable
@Orm(tableName: 'feet') @Orm(tableName: 'feet')
class _Foot extends Model { class _Foot extends Model {
int legId; int? legId;
double nToes; double? nToes;
} }

View file

@ -45,8 +45,8 @@ class FootMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class LegQuery extends Query<Leg, LegQueryWhere> { class LegQuery extends Query<Leg?, LegQueryWhere?> {
LegQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { LegQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = LegQueryWhere(this); _where = LegQueryWhere(this);
@ -65,9 +65,9 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
@override @override
final LegQueryValues values = LegQueryValues(); final LegQueryValues values = LegQueryValues();
LegQueryWhere _where; LegQueryWhere? _where;
FootQuery _foot; FootQuery? _foot;
@override @override
get casts { get casts {
@ -85,7 +85,7 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
} }
@override @override
LegQueryWhere get where { LegQueryWhere? get where {
return _where; return _where;
} }
@ -94,13 +94,13 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
return LegQueryWhere(this); return LegQueryWhere(this);
} }
static Leg parseRow(List row) { static Leg? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Leg( var model = Leg(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
name: (row[3] as String)); name: (row[3] as String?));
if (row.length > 4) { if (row.length > 4) {
model = model.copyWith( model = model.copyWith(
foot: FootQuery.parseRow(row.skip(4).take(5).toList())); foot: FootQuery.parseRow(row.skip(4).take(5).toList()));
@ -113,7 +113,7 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
return parseRow(row); return parseRow(row);
} }
FootQuery get foot { FootQuery? get foot {
return _foot; return _foot;
} }
} }
@ -145,26 +145,26 @@ class LegQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
String get name { String? get name {
return (values['name'] as String); return (values['name'] as String?);
} }
set name(String value) => values['name'] = value; set name(String? value) => values['name'] = value;
void copyFrom(Leg model) { void copyFrom(Leg model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -172,8 +172,8 @@ class LegQueryValues extends MapQueryValues {
} }
} }
class FootQuery extends Query<Foot, FootQueryWhere> { class FootQuery extends Query<Foot?, FootQueryWhere?> {
FootQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { FootQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = FootQueryWhere(this); _where = FootQueryWhere(this);
@ -182,7 +182,7 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
@override @override
final FootQueryValues values = FootQueryValues(); final FootQueryValues values = FootQueryValues();
FootQueryWhere _where; FootQueryWhere? _where;
@override @override
get casts { get casts {
@ -200,7 +200,7 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
} }
@override @override
FootQueryWhere get where { FootQueryWhere? get where {
return _where; return _where;
} }
@ -209,13 +209,13 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
return FootQueryWhere(this); return FootQueryWhere(this);
} }
static Foot parseRow(List row) { static Foot? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Foot( var model = Foot(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
legId: (row[3] as int), legId: (row[3] as int?),
nToes: double.tryParse(row[4].toString())); nToes: double.tryParse(row[4].toString()));
return model; return model;
} }
@ -256,31 +256,31 @@ class FootQueryValues extends MapQueryValues {
return {'n_toes': 'decimal'}; return {'n_toes': 'decimal'};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
int get legId { int? get legId {
return (values['leg_id'] as int); return (values['leg_id'] as int?);
} }
set legId(int value) => values['leg_id'] = value; set legId(int? value) => values['leg_id'] = value;
double get nToes { double? get nToes {
return double.tryParse((values['n_toes'] as String)); return double.tryParse((values['n_toes'] as String));
} }
set nToes(double value) => values['n_toes'] = value.toString(); set nToes(double? value) => values['n_toes'] = value.toString();
void copyFrom(Foot model) { void copyFrom(Foot model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -299,28 +299,28 @@ class Leg extends _Leg {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
_Foot foot; _Foot? foot;
@override @override
String name; String? name;
Leg copyWith( Leg copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
_Foot foot, _Foot? foot,
String name}) { String? name}) {
return Leg( return Leg(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -359,28 +359,28 @@ class Foot extends _Foot {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
int legId; int? legId;
@override @override
double nToes; double? nToes;
Foot copyWith( Foot copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
int legId, int? legId,
double nToes}) { double? nToes}) {
return Foot( return Foot(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -408,7 +408,7 @@ class Foot extends _Foot {
return "Foot(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, legId=$legId, nToes=$nToes)"; return "Foot(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, legId=$legId, nToes=$nToes)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return FootSerializer.toMap(this); return FootSerializer.toMap(this);
} }
} }
@ -442,27 +442,24 @@ class LegSerializer extends Codec<Leg, Map> {
get decoder => const LegDecoder(); get decoder => const LegDecoder();
static Leg fromMap(Map map) { static Leg fromMap(Map map) {
return Leg( return Leg(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
foot: map['foot'] != null foot: map['foot'] != null
? FootSerializer.fromMap(map['foot'] as Map) ? FootSerializer.fromMap(map['foot'] as Map)
: null, : null,
name: map['name'] as String); name: map['name'] as String?);
} }
static Map<String, dynamic> toMap(_Leg model) { static Map<String, dynamic> toMap(_Leg model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
@ -495,11 +492,11 @@ abstract class LegFields {
const FootSerializer footSerializer = FootSerializer(); const FootSerializer footSerializer = FootSerializer();
class FootEncoder extends Converter<Foot, Map> { class FootEncoder extends Converter<Foot, Map?> {
const FootEncoder(); const FootEncoder();
@override @override
Map convert(Foot model) => FootSerializer.toMap(model); Map? convert(Foot model) => FootSerializer.toMap(model);
} }
class FootDecoder extends Converter<Map, Foot> { class FootDecoder extends Converter<Map, Foot> {
@ -509,7 +506,7 @@ class FootDecoder extends Converter<Map, Foot> {
Foot convert(Map map) => FootSerializer.fromMap(map); Foot convert(Map map) => FootSerializer.fromMap(map);
} }
class FootSerializer extends Codec<Foot, Map> { class FootSerializer extends Codec<Foot, Map?> {
const FootSerializer(); const FootSerializer();
@override @override
@ -518,22 +515,22 @@ class FootSerializer extends Codec<Foot, Map> {
get decoder => const FootDecoder(); get decoder => const FootDecoder();
static Foot fromMap(Map map) { static Foot fromMap(Map map) {
return Foot( return Foot(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
legId: map['leg_id'] as int, legId: map['leg_id'] as int?,
nToes: map['n_toes'] as double); nToes: map['n_toes'] as double?);
} }
static Map<String, dynamic> toMap(_Foot model) { static Map<String, dynamic>? toMap(_Foot? model) {
if (model == null) { if (model == null) {
return null; return null;
} }

View file

@ -10,13 +10,13 @@ part 'order.g.dart';
@serializable @serializable
abstract class _Order extends Model { abstract class _Order extends Model {
@belongsTo @belongsTo
_Customer get customer; _Customer? get customer;
int get employeeId; int? get employeeId;
DateTime get orderDate; DateTime? get orderDate;
int get shipperId; int? get shipperId;
} }
@orm @orm

View file

@ -48,8 +48,8 @@ class CustomerMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class OrderQuery extends Query<Order, OrderQueryWhere> { class OrderQuery extends Query<Order?, OrderQueryWhere?> {
OrderQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { OrderQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = OrderQueryWhere(this); _where = OrderQueryWhere(this);
@ -62,9 +62,9 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
@override @override
final OrderQueryValues values = OrderQueryValues(); final OrderQueryValues values = OrderQueryValues();
OrderQueryWhere _where; OrderQueryWhere? _where;
CustomerQuery _customer; CustomerQuery? _customer;
@override @override
get casts { get casts {
@ -90,7 +90,7 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
} }
@override @override
OrderQueryWhere get where { OrderQueryWhere? get where {
return _where; return _where;
} }
@ -99,15 +99,15 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
return OrderQueryWhere(this); return OrderQueryWhere(this);
} }
static Order parseRow(List row) { static Order? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Order( var model = Order(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
employeeId: (row[4] as int), employeeId: (row[4] as int?),
orderDate: (row[5] as DateTime), orderDate: (row[5] as DateTime?),
shipperId: (row[6] as int)); shipperId: (row[6] as int?));
if (row.length > 7) { if (row.length > 7) {
model = model.copyWith( model = model.copyWith(
customer: CustomerQuery.parseRow(row.skip(7).take(3).toList())); customer: CustomerQuery.parseRow(row.skip(7).take(3).toList()));
@ -120,7 +120,7 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
return parseRow(row); return parseRow(row);
} }
CustomerQuery get customer { CustomerQuery? get customer {
return _customer; return _customer;
} }
} }
@ -169,41 +169,41 @@ class OrderQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
int get customerId { int? get customerId {
return (values['customer_id'] as int); return (values['customer_id'] as int?);
} }
set customerId(int value) => values['customer_id'] = value; set customerId(int? value) => values['customer_id'] = value;
int get employeeId { int? get employeeId {
return (values['employee_id'] as int); return (values['employee_id'] as int?);
} }
set employeeId(int value) => values['employee_id'] = value; set employeeId(int? value) => values['employee_id'] = value;
DateTime get orderDate { DateTime? get orderDate {
return (values['order_date'] as DateTime); return (values['order_date'] as DateTime?);
} }
set orderDate(DateTime value) => values['order_date'] = value; set orderDate(DateTime? value) => values['order_date'] = value;
int get shipperId { int? get shipperId {
return (values['shipper_id'] as int); return (values['shipper_id'] as int?);
} }
set shipperId(int value) => values['shipper_id'] = value; set shipperId(int? value) => values['shipper_id'] = value;
void copyFrom(Order model) { void copyFrom(Order model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -211,13 +211,13 @@ class OrderQueryValues extends MapQueryValues {
orderDate = model.orderDate; orderDate = model.orderDate;
shipperId = model.shipperId; shipperId = model.shipperId;
if (model.customer != null) { if (model.customer != null) {
values['customer_id'] = model.customer.id; values['customer_id'] = model.customer!.id;
} }
} }
} }
class CustomerQuery extends Query<Customer, CustomerQueryWhere> { class CustomerQuery extends Query<Customer?, CustomerQueryWhere?> {
CustomerQuery({Query parent, Set<String> trampoline}) CustomerQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -227,7 +227,7 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
@override @override
final CustomerQueryValues values = CustomerQueryValues(); final CustomerQueryValues values = CustomerQueryValues();
CustomerQueryWhere _where; CustomerQueryWhere? _where;
@override @override
get casts { get casts {
@ -245,7 +245,7 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
} }
@override @override
CustomerQueryWhere get where { CustomerQueryWhere? get where {
return _where; return _where;
} }
@ -254,12 +254,12 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
return CustomerQueryWhere(this); return CustomerQueryWhere(this);
} }
static Customer parseRow(List row) { static Customer? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Customer( var model = Customer(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime)); updatedAt: (row[2] as DateTime?));
return model; return model;
} }
@ -293,21 +293,21 @@ class CustomerQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
void copyFrom(Customer model) { void copyFrom(Customer model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -331,36 +331,36 @@ class Order extends _Order {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
final _Customer customer; final _Customer? customer;
@override @override
final int employeeId; final int? employeeId;
@override @override
final DateTime orderDate; final DateTime? orderDate;
@override @override
final int shipperId; final int? shipperId;
Order copyWith( Order copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
_Customer customer, _Customer? customer,
int employeeId, int? employeeId,
DateTime orderDate, DateTime? orderDate,
int shipperId}) { int? shipperId}) {
return Order( return Order(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -404,17 +404,17 @@ class Customer extends _Customer {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
Customer copyWith({String id, DateTime createdAt, DateTime updatedAt}) { Customer copyWith({String? id, DateTime? createdAt, DateTime? updatedAt}) {
return Customer( return Customer(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -438,7 +438,7 @@ class Customer extends _Customer {
return "Customer(id=$id, createdAt=$createdAt, updatedAt=$updatedAt)"; return "Customer(id=$id, createdAt=$createdAt, updatedAt=$updatedAt)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return CustomerSerializer.toMap(this); return CustomerSerializer.toMap(this);
} }
} }
@ -472,33 +472,30 @@ class OrderSerializer extends Codec<Order, Map> {
get decoder => const OrderDecoder(); get decoder => const OrderDecoder();
static Order fromMap(Map map) { static Order fromMap(Map map) {
return Order( return Order(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
customer: map['customer'] != null customer: map['customer'] != null
? CustomerSerializer.fromMap(map['customer'] as Map) ? CustomerSerializer.fromMap(map['customer'] as Map)
: null, : null,
employeeId: map['employee_id'] as int, employeeId: map['employee_id'] as int?,
orderDate: map['order_date'] != null orderDate: map['order_date'] != null
? (map['order_date'] is DateTime ? (map['order_date'] is DateTime
? (map['order_date'] as DateTime) ? (map['order_date'] as DateTime?)
: DateTime.parse(map['order_date'].toString())) : DateTime.parse(map['order_date'].toString()))
: null, : null,
shipperId: map['shipper_id'] as int); shipperId: map['shipper_id'] as int?);
} }
static Map<String, dynamic> toMap(_Order model) { static Map<String, dynamic> toMap(_Order model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
@ -539,11 +536,11 @@ abstract class OrderFields {
const CustomerSerializer customerSerializer = CustomerSerializer(); const CustomerSerializer customerSerializer = CustomerSerializer();
class CustomerEncoder extends Converter<Customer, Map> { class CustomerEncoder extends Converter<Customer, Map?> {
const CustomerEncoder(); const CustomerEncoder();
@override @override
Map convert(Customer model) => CustomerSerializer.toMap(model); Map? convert(Customer model) => CustomerSerializer.toMap(model);
} }
class CustomerDecoder extends Converter<Map, Customer> { class CustomerDecoder extends Converter<Map, Customer> {
@ -553,7 +550,7 @@ class CustomerDecoder extends Converter<Map, Customer> {
Customer convert(Map map) => CustomerSerializer.fromMap(map); Customer convert(Map map) => CustomerSerializer.fromMap(map);
} }
class CustomerSerializer extends Codec<Customer, Map> { class CustomerSerializer extends Codec<Customer, Map?> {
const CustomerSerializer(); const CustomerSerializer();
@override @override
@ -562,20 +559,20 @@ class CustomerSerializer extends Codec<Customer, Map> {
get decoder => const CustomerDecoder(); get decoder => const CustomerDecoder();
static Customer fromMap(Map map) { static Customer fromMap(Map map) {
return Customer( return Customer(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null); : null);
} }
static Map<String, dynamic> toMap(_Customer model) { static Map<String, dynamic>? toMap(_Customer? model) {
if (model == null) { if (model == null) {
return null; return null;
} }

View file

@ -11,15 +11,15 @@ part 'tree.g.dart';
@orm @orm
class _Tree extends Model { class _Tree extends Model {
@Column(indexType: IndexType.unique, type: ColumnType.smallInt) @Column(indexType: IndexType.unique, type: ColumnType.smallInt)
int rings; int? rings;
@hasMany @hasMany
List<_Fruit> fruits; List<_Fruit>? fruits;
} }
@serializable @serializable
@orm @orm
class _Fruit extends Model { class _Fruit extends Model {
int treeId; int? treeId;
String commonName; String? commonName;
} }

View file

@ -45,8 +45,8 @@ class FruitMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class TreeQuery extends Query<Tree, TreeQueryWhere> { class TreeQuery extends Query<Tree?, TreeQueryWhere?> {
TreeQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { TreeQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = TreeQueryWhere(this); _where = TreeQueryWhere(this);
@ -65,9 +65,9 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
@override @override
final TreeQueryValues values = TreeQueryValues(); final TreeQueryValues values = TreeQueryValues();
TreeQueryWhere _where; TreeQueryWhere? _where;
FruitQuery _fruits; FruitQuery? _fruits;
@override @override
get casts { get casts {
@ -85,7 +85,7 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
} }
@override @override
TreeQueryWhere get where { TreeQueryWhere? get where {
return _where; return _where;
} }
@ -94,13 +94,13 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
return TreeQueryWhere(this); return TreeQueryWhere(this);
} }
static Tree parseRow(List row) { static Tree? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Tree( var model = Tree(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
rings: (row[3] as int)); rings: (row[3] as int?));
if (row.length > 4) { if (row.length > 4) {
model = model.copyWith( model = model.copyWith(
fruits: [FruitQuery.parseRow(row.skip(4).take(5).toList())] fruits: [FruitQuery.parseRow(row.skip(4).take(5).toList())]
@ -115,24 +115,24 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
return parseRow(row); return parseRow(row);
} }
FruitQuery get fruits { FruitQuery? get fruits {
return _fruits; return _fruits;
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<Tree>>([], (out, model) { return result.fold<List<Tree?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
fruits: List<_Fruit>.from(l.fruits ?? []) fruits: List<_Fruit>.from(l.fruits ?? [])
..addAll(model.fruits ?? [])); ..addAll(model!.fruits ?? []));
} }
}); });
}); });
@ -141,17 +141,17 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<Tree>>([], (out, model) { return result.fold<List<Tree?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
fruits: List<_Fruit>.from(l.fruits ?? []) fruits: List<_Fruit>.from(l.fruits ?? [])
..addAll(model.fruits ?? [])); ..addAll(model!.fruits ?? []));
} }
}); });
}); });
@ -160,17 +160,17 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<Tree>>([], (out, model) { return result.fold<List<Tree?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
fruits: List<_Fruit>.from(l.fruits ?? []) fruits: List<_Fruit>.from(l.fruits ?? [])
..addAll(model.fruits ?? [])); ..addAll(model!.fruits ?? []));
} }
}); });
}); });
@ -204,26 +204,26 @@ class TreeQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
int get rings { int? get rings {
return (values['rings'] as int); return (values['rings'] as int?);
} }
set rings(int value) => values['rings'] = value; set rings(int? value) => values['rings'] = value;
void copyFrom(Tree model) { void copyFrom(Tree model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -231,8 +231,8 @@ class TreeQueryValues extends MapQueryValues {
} }
} }
class FruitQuery extends Query<Fruit, FruitQueryWhere> { class FruitQuery extends Query<Fruit?, FruitQueryWhere?> {
FruitQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { FruitQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = FruitQueryWhere(this); _where = FruitQueryWhere(this);
@ -241,7 +241,7 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
@override @override
final FruitQueryValues values = FruitQueryValues(); final FruitQueryValues values = FruitQueryValues();
FruitQueryWhere _where; FruitQueryWhere? _where;
@override @override
get casts { get casts {
@ -259,7 +259,7 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
} }
@override @override
FruitQueryWhere get where { FruitQueryWhere? get where {
return _where; return _where;
} }
@ -268,14 +268,14 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
return FruitQueryWhere(this); return FruitQueryWhere(this);
} }
static Fruit parseRow(List row) { static Fruit? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Fruit( var model = Fruit(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
treeId: (row[3] as int), treeId: (row[3] as int?),
commonName: (row[4] as String)); commonName: (row[4] as String?));
return model; return model;
} }
@ -315,31 +315,31 @@ class FruitQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
int get treeId { int? get treeId {
return (values['tree_id'] as int); return (values['tree_id'] as int?);
} }
set treeId(int value) => values['tree_id'] = value; set treeId(int? value) => values['tree_id'] = value;
String get commonName { String? get commonName {
return (values['common_name'] as String); return (values['common_name'] as String?);
} }
set commonName(String value) => values['common_name'] = value; set commonName(String? value) => values['common_name'] = value;
void copyFrom(Fruit model) { void copyFrom(Fruit model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -359,33 +359,33 @@ class Tree extends _Tree {
this.createdAt, this.createdAt,
this.updatedAt, this.updatedAt,
this.rings, this.rings,
List<_Fruit> fruits}) List<_Fruit?>? fruits})
: this.fruits = List.unmodifiable(fruits ?? []); : this.fruits = List.unmodifiable(fruits ?? []);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
int rings; int? rings;
@override @override
List<_Fruit> fruits; List<_Fruit>? fruits;
Tree copyWith( Tree copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
int rings, int? rings,
List<_Fruit> fruits}) { List<_Fruit?>? fruits}) {
return Tree( return Tree(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -426,28 +426,28 @@ class Fruit extends _Fruit {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
int treeId; int? treeId;
@override @override
String commonName; String? commonName;
Fruit copyWith( Fruit copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
int treeId, int? treeId,
String commonName}) { String? commonName}) {
return Fruit( return Fruit(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -509,18 +509,18 @@ class TreeSerializer extends Codec<Tree, Map> {
get decoder => const TreeDecoder(); get decoder => const TreeDecoder();
static Tree fromMap(Map map) { static Tree fromMap(Map map) {
return Tree( return Tree(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
rings: map['rings'] as int, rings: map['rings'] as int?,
fruits: map['fruits'] is Iterable fruits: map['fruits'] is Iterable
? List.unmodifiable(((map['fruits'] as Iterable).whereType<Map>()) ? List.unmodifiable(((map['fruits'] as Iterable).whereType<Map>())
.map(FruitSerializer.fromMap)) .map(FruitSerializer.fromMap))
@ -528,15 +528,12 @@ class TreeSerializer extends Codec<Tree, Map> {
} }
static Map<String, dynamic> toMap(_Tree model) { static Map<String, dynamic> toMap(_Tree model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
'updated_at': model.updatedAt?.toIso8601String(), 'updated_at': model.updatedAt?.toIso8601String(),
'rings': model.rings, 'rings': model.rings,
'fruits': model.fruits?.map((m) => FruitSerializer.toMap(m))?.toList() 'fruits': model.fruits?.map((m) => FruitSerializer.toMap(m)).toList()
}; };
} }
} }
@ -586,25 +583,22 @@ class FruitSerializer extends Codec<Fruit, Map> {
get decoder => const FruitDecoder(); get decoder => const FruitDecoder();
static Fruit fromMap(Map map) { static Fruit fromMap(Map map) {
return Fruit( return Fruit(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
treeId: map['tree_id'] as int, treeId: map['tree_id'] as int?,
commonName: map['common_name'] as String); commonName: map['common_name'] as String?);
} }
static Map<String, dynamic> toMap(_Fruit model) { static Map<String, dynamic> toMap(_Fruit model) {
if (model == null) {
return null;
}
return { return {
'id': model.id, 'id': model.id,
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),

View file

@ -8,63 +8,63 @@ part 'unorthodox.g.dart';
@orm @orm
abstract class _Unorthodox { abstract class _Unorthodox {
@Column(indexType: IndexType.primaryKey) @Column(indexType: IndexType.primaryKey)
String get name; String? get name;
} }
@serializable @serializable
@orm @orm
abstract class _WeirdJoin { abstract class _WeirdJoin {
@primaryKey @primaryKey
int get id; int? get id;
@BelongsTo(localKey: 'join_name', foreignKey: 'name') @BelongsTo(localKey: 'join_name', foreignKey: 'name')
_Unorthodox get unorthodox; _Unorthodox? get unorthodox;
@hasOne @hasOne
_Song get song; _Song? get song;
@HasMany(foreignKey: 'parent') @HasMany(foreignKey: 'parent')
List<_Numba> get numbas; List<_Numba?>? get numbas;
@ManyToMany(_FooPivot) @ManyToMany(_FooPivot)
List<_Foo> get foos; List<_Foo?>? get foos;
} }
@serializable @serializable
@orm @orm
abstract class _Song extends Model { abstract class _Song extends Model {
int get weirdJoinId; int? get weirdJoinId;
String get title; String? get title;
} }
@serializable @serializable
@orm @orm
class _Numba implements Comparable<_Numba> { class _Numba implements Comparable<_Numba> {
@primaryKey @primaryKey
int i; int? i;
int parent; int? parent;
int compareTo(_Numba other) => i.compareTo(other.i); int compareTo(_Numba other) => i!.compareTo(other.i!);
} }
@serializable @serializable
@orm @orm
abstract class _Foo { abstract class _Foo {
@primaryKey @primaryKey
String get bar; String? get bar;
@ManyToMany(_FooPivot) @ManyToMany(_FooPivot)
List<_WeirdJoin> get weirdJoins; List<_WeirdJoin?>? get weirdJoins;
} }
@serializable @serializable
@orm @orm
abstract class _FooPivot { abstract class _FooPivot {
@belongsTo @belongsTo
_WeirdJoin get weirdJoin; _WeirdJoin? get weirdJoin;
@belongsTo @belongsTo
_Foo get foo; _Foo? get foo;
} }

View file

@ -105,8 +105,8 @@ class FooPivotMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> { class UnorthodoxQuery extends Query<Unorthodox?, UnorthodoxQueryWhere?> {
UnorthodoxQuery({Query parent, Set<String> trampoline}) UnorthodoxQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -116,7 +116,7 @@ class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
@override @override
final UnorthodoxQueryValues values = UnorthodoxQueryValues(); final UnorthodoxQueryValues values = UnorthodoxQueryValues();
UnorthodoxQueryWhere _where; UnorthodoxQueryWhere? _where;
@override @override
get casts { get casts {
@ -134,7 +134,7 @@ class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
} }
@override @override
UnorthodoxQueryWhere get where { UnorthodoxQueryWhere? get where {
return _where; return _where;
} }
@ -143,9 +143,9 @@ class UnorthodoxQuery extends Query<Unorthodox, UnorthodoxQueryWhere> {
return UnorthodoxQueryWhere(this); return UnorthodoxQueryWhere(this);
} }
static Unorthodox parseRow(List row) { static Unorthodox? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Unorthodox(name: (row[0] as String)); var model = Unorthodox(name: (row[0] as String?));
return model; return model;
} }
@ -173,18 +173,18 @@ class UnorthodoxQueryValues extends MapQueryValues {
return {}; return {};
} }
String get name { String? get name {
return (values['name'] as String); return (values['name'] as String?);
} }
set name(String value) => values['name'] = value; set name(String? value) => values['name'] = value;
void copyFrom(Unorthodox model) { void copyFrom(Unorthodox model) {
name = model.name; name = model.name;
} }
} }
class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> { class WeirdJoinQuery extends Query<WeirdJoin?, WeirdJoinQueryWhere?> {
WeirdJoinQuery({Query parent, Set<String> trampoline}) WeirdJoinQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -219,13 +219,13 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
@override @override
final WeirdJoinQueryValues values = WeirdJoinQueryValues(); final WeirdJoinQueryValues values = WeirdJoinQueryValues();
WeirdJoinQueryWhere _where; WeirdJoinQueryWhere? _where;
UnorthodoxQuery _unorthodox; UnorthodoxQuery? _unorthodox;
SongQuery _song; SongQuery? _song;
NumbaQuery _numbas; NumbaQuery? _numbas;
@override @override
get casts { get casts {
@ -243,7 +243,7 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
} }
@override @override
WeirdJoinQueryWhere get where { WeirdJoinQueryWhere? get where {
return _where; return _where;
} }
@ -252,9 +252,9 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
return WeirdJoinQueryWhere(this); return WeirdJoinQueryWhere(this);
} }
static WeirdJoin parseRow(List row) { static WeirdJoin? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = WeirdJoin(id: (row[0] as int)); var model = WeirdJoin(id: (row[0] as int?));
if (row.length > 2) { if (row.length > 2) {
model = model.copyWith( model = model.copyWith(
unorthodox: UnorthodoxQuery.parseRow(row.skip(2).take(1).toList())); unorthodox: UnorthodoxQuery.parseRow(row.skip(2).take(1).toList()));
@ -283,39 +283,39 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
return parseRow(row); return parseRow(row);
} }
UnorthodoxQuery get unorthodox { UnorthodoxQuery? get unorthodox {
return _unorthodox; return _unorthodox;
} }
SongQuery get song { SongQuery? get song {
return _song; return _song;
} }
NumbaQuery get numbas { NumbaQuery? get numbas {
return _numbas; return _numbas;
} }
@override @override
bool canCompile(trampoline) { bool canCompile(trampoline) {
return (!(trampoline.contains('weird_joins') && return (!(trampoline?.contains('weird_joins') == true &&
trampoline.contains('foo_pivots'))); trampoline?.contains('foo_pivots') == true));
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<WeirdJoin>>([], (out, model) { return result.fold<List<WeirdJoin?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
numbas: List<_Numba>.from(l.numbas ?? []) numbas: List<_Numba?>.from(l.numbas ?? [])
..addAll(model.numbas ?? []), ..addAll(model!.numbas ?? []),
foos: List<_Foo>.from(l.foos ?? [])..addAll(model.foos ?? [])); foos: List<_Foo?>.from(l.foos ?? [])..addAll(model.foos ?? []));
} }
}); });
}); });
@ -324,18 +324,18 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<WeirdJoin>>([], (out, model) { return result.fold<List<WeirdJoin?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
numbas: List<_Numba>.from(l.numbas ?? []) numbas: List<_Numba?>.from(l.numbas ?? [])
..addAll(model.numbas ?? []), ..addAll(model!.numbas ?? []),
foos: List<_Foo>.from(l.foos ?? [])..addAll(model.foos ?? [])); foos: List<_Foo?>.from(l.foos ?? [])..addAll(model.foos ?? []));
} }
}); });
}); });
@ -344,18 +344,18 @@ class WeirdJoinQuery extends Query<WeirdJoin, WeirdJoinQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<WeirdJoin>>([], (out, model) { return result.fold<List<WeirdJoin?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
numbas: List<_Numba>.from(l.numbas ?? []) numbas: List<_Numba?>.from(l.numbas ?? [])
..addAll(model.numbas ?? []), ..addAll(model!.numbas ?? []),
foos: List<_Foo>.from(l.foos ?? [])..addAll(model.foos ?? [])); foos: List<_Foo?>.from(l.foos ?? [])..addAll(model.foos ?? []));
} }
}); });
}); });
@ -383,26 +383,26 @@ class WeirdJoinQueryValues extends MapQueryValues {
return {}; return {};
} }
int get id { int? get id {
return (values['id'] as int); return (values['id'] as int?);
} }
set id(int value) => values['id'] = value; set id(int? value) => values['id'] = value;
String get joinName { String? get joinName {
return (values['join_name'] as String); return (values['join_name'] as String?);
} }
set joinName(String value) => values['join_name'] = value; set joinName(String? value) => values['join_name'] = value;
void copyFrom(WeirdJoin model) { void copyFrom(WeirdJoin model) {
id = model.id; id = model.id;
if (model.unorthodox != null) { if (model.unorthodox != null) {
values['join_name'] = model.unorthodox.name; values['join_name'] = model.unorthodox!.name;
} }
} }
} }
class SongQuery extends Query<Song, SongQueryWhere> { class SongQuery extends Query<Song?, SongQueryWhere?> {
SongQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { SongQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = SongQueryWhere(this); _where = SongQueryWhere(this);
@ -411,7 +411,7 @@ class SongQuery extends Query<Song, SongQueryWhere> {
@override @override
final SongQueryValues values = SongQueryValues(); final SongQueryValues values = SongQueryValues();
SongQueryWhere _where; SongQueryWhere? _where;
@override @override
get casts { get casts {
@ -429,7 +429,7 @@ class SongQuery extends Query<Song, SongQueryWhere> {
} }
@override @override
SongQueryWhere get where { SongQueryWhere? get where {
return _where; return _where;
} }
@ -438,14 +438,14 @@ class SongQuery extends Query<Song, SongQueryWhere> {
return SongQueryWhere(this); return SongQueryWhere(this);
} }
static Song parseRow(List row) { static Song? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Song( var model = Song(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
weirdJoinId: (row[3] as int), weirdJoinId: (row[3] as int?),
title: (row[4] as String)); title: (row[4] as String?));
return model; return model;
} }
@ -485,31 +485,31 @@ class SongQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
int get weirdJoinId { int? get weirdJoinId {
return (values['weird_join_id'] as int); return (values['weird_join_id'] as int?);
} }
set weirdJoinId(int value) => values['weird_join_id'] = value; set weirdJoinId(int? value) => values['weird_join_id'] = value;
String get title { String? get title {
return (values['title'] as String); return (values['title'] as String?);
} }
set title(String value) => values['title'] = value; set title(String? value) => values['title'] = value;
void copyFrom(Song model) { void copyFrom(Song model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -518,8 +518,8 @@ class SongQueryValues extends MapQueryValues {
} }
} }
class NumbaQuery extends Query<Numba, NumbaQueryWhere> { class NumbaQuery extends Query<Numba?, NumbaQueryWhere?> {
NumbaQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { NumbaQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = NumbaQueryWhere(this); _where = NumbaQueryWhere(this);
@ -528,7 +528,7 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
@override @override
final NumbaQueryValues values = NumbaQueryValues(); final NumbaQueryValues values = NumbaQueryValues();
NumbaQueryWhere _where; NumbaQueryWhere? _where;
@override @override
get casts { get casts {
@ -546,7 +546,7 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
} }
@override @override
NumbaQueryWhere get where { NumbaQueryWhere? get where {
return _where; return _where;
} }
@ -555,9 +555,9 @@ class NumbaQuery extends Query<Numba, NumbaQueryWhere> {
return NumbaQueryWhere(this); return NumbaQueryWhere(this);
} }
static Numba parseRow(List row) { static Numba? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Numba(i: (row[0] as int), parent: (row[1] as int)); var model = Numba(i: (row[0] as int?), parent: (row[1] as int?));
return model; return model;
} }
@ -588,24 +588,24 @@ class NumbaQueryValues extends MapQueryValues {
return {}; return {};
} }
int get i { int? get i {
return (values['i'] as int); return (values['i'] as int?);
} }
set i(int value) => values['i'] = value; set i(int? value) => values['i'] = value;
int get parent { int? get parent {
return (values['parent'] as int); return (values['parent'] as int?);
} }
set parent(int value) => values['parent'] = value; set parent(int? value) => values['parent'] = value;
void copyFrom(Numba model) { void copyFrom(Numba model) {
i = model.i; i = model.i;
parent = model.parent; parent = model.parent;
} }
} }
class FooQuery extends Query<Foo, FooQueryWhere> { class FooQuery extends Query<Foo?, FooQueryWhere?> {
FooQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { FooQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = FooQueryWhere(this); _where = FooQueryWhere(this);
@ -620,7 +620,7 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
@override @override
final FooQueryValues values = FooQueryValues(); final FooQueryValues values = FooQueryValues();
FooQueryWhere _where; FooQueryWhere? _where;
@override @override
get casts { get casts {
@ -638,7 +638,7 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
} }
@override @override
FooQueryWhere get where { FooQueryWhere? get where {
return _where; return _where;
} }
@ -647,9 +647,9 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
return FooQueryWhere(this); return FooQueryWhere(this);
} }
static Foo parseRow(List row) { static Foo? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Foo(bar: (row[0] as String)); var model = Foo(bar: (row[0] as String?));
if (row.length > 1) { if (row.length > 1) {
model = model.copyWith( model = model.copyWith(
weirdJoins: [WeirdJoinQuery.parseRow(row.skip(1).take(2).toList())] weirdJoins: [WeirdJoinQuery.parseRow(row.skip(1).take(2).toList())]
@ -666,24 +666,24 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
@override @override
bool canCompile(trampoline) { bool canCompile(trampoline) {
return (!(trampoline.contains('foos') && return (!(trampoline?.contains('foos') == true &&
trampoline.contains('foo_pivots'))); trampoline?.contains('foo_pivots') == true));
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<Foo>>([], (out, model) { return result.fold<List<Foo?>>([], (out, model) {
var idx = out.indexWhere((m) => m.bar == model.bar); var idx = out.indexWhere((m) => m!.bar == model!.bar);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
weirdJoins: List<_WeirdJoin>.from(l.weirdJoins ?? []) weirdJoins: List<_WeirdJoin?>.from(l.weirdJoins ?? [])
..addAll(model.weirdJoins ?? [])); ..addAll(model!.weirdJoins ?? []));
} }
}); });
}); });
@ -692,17 +692,17 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<Foo>>([], (out, model) { return result.fold<List<Foo?>>([], (out, model) {
var idx = out.indexWhere((m) => m.bar == model.bar); var idx = out.indexWhere((m) => m!.bar == model!.bar);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
weirdJoins: List<_WeirdJoin>.from(l.weirdJoins ?? []) weirdJoins: List<_WeirdJoin?>.from(l.weirdJoins ?? [])
..addAll(model.weirdJoins ?? [])); ..addAll(model!.weirdJoins ?? []));
} }
}); });
}); });
@ -711,17 +711,17 @@ class FooQuery extends Query<Foo, FooQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<Foo>>([], (out, model) { return result.fold<List<Foo?>>([], (out, model) {
var idx = out.indexWhere((m) => m.bar == model.bar); var idx = out.indexWhere((m) => m!.bar == model!.bar);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
weirdJoins: List<_WeirdJoin>.from(l.weirdJoins ?? []) weirdJoins: List<_WeirdJoin?>.from(l.weirdJoins ?? [])
..addAll(model.weirdJoins ?? [])); ..addAll(model!.weirdJoins ?? []));
} }
}); });
}); });
@ -746,18 +746,18 @@ class FooQueryValues extends MapQueryValues {
return {}; return {};
} }
String get bar { String? get bar {
return (values['bar'] as String); return (values['bar'] as String?);
} }
set bar(String value) => values['bar'] = value; set bar(String? value) => values['bar'] = value;
void copyFrom(Foo model) { void copyFrom(Foo model) {
bar = model.bar; bar = model.bar;
} }
} }
class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> { class FooPivotQuery extends Query<FooPivot?, FooPivotQueryWhere?> {
FooPivotQuery({Query parent, Set<String> trampoline}) FooPivotQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -773,11 +773,11 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
@override @override
final FooPivotQueryValues values = FooPivotQueryValues(); final FooPivotQueryValues values = FooPivotQueryValues();
FooPivotQueryWhere _where; FooPivotQueryWhere? _where;
WeirdJoinQuery _weirdJoin; WeirdJoinQuery? _weirdJoin;
FooQuery _foo; FooQuery? _foo;
@override @override
get casts { get casts {
@ -795,7 +795,7 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
} }
@override @override
FooPivotQueryWhere get where { FooPivotQueryWhere? get where {
return _where; return _where;
} }
@ -804,7 +804,7 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
return FooPivotQueryWhere(this); return FooPivotQueryWhere(this);
} }
static FooPivot parseRow(List row) { static FooPivot? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = FooPivot(); var model = FooPivot();
if (row.length > 2) { if (row.length > 2) {
@ -823,11 +823,11 @@ class FooPivotQuery extends Query<FooPivot, FooPivotQueryWhere> {
return parseRow(row); return parseRow(row);
} }
WeirdJoinQuery get weirdJoin { WeirdJoinQuery? get weirdJoin {
return _weirdJoin; return _weirdJoin;
} }
FooQuery get foo { FooQuery? get foo {
return _foo; return _foo;
} }
} }
@ -853,22 +853,22 @@ class FooPivotQueryValues extends MapQueryValues {
return {}; return {};
} }
int get weirdJoinId { int? get weirdJoinId {
return (values['weird_join_id'] as int); return (values['weird_join_id'] as int?);
} }
set weirdJoinId(int value) => values['weird_join_id'] = value; set weirdJoinId(int? value) => values['weird_join_id'] = value;
String get fooBar { String? get fooBar {
return (values['foo_bar'] as String); return (values['foo_bar'] as String?);
} }
set fooBar(String value) => values['foo_bar'] = value; set fooBar(String? value) => values['foo_bar'] = value;
void copyFrom(FooPivot model) { void copyFrom(FooPivot model) {
if (model.weirdJoin != null) { if (model.weirdJoin != null) {
values['weird_join_id'] = model.weirdJoin.id; values['weird_join_id'] = model.weirdJoin!.id;
} }
if (model.foo != null) { if (model.foo != null) {
values['foo_bar'] = model.foo.bar; values['foo_bar'] = model.foo!.bar;
} }
} }
} }
@ -882,9 +882,9 @@ class Unorthodox implements _Unorthodox {
const Unorthodox({this.name}); const Unorthodox({this.name});
@override @override
final String name; final String? name;
Unorthodox copyWith({String name}) { Unorthodox copyWith({String? name}) {
return Unorthodox(name: name ?? this.name); return Unorthodox(name: name ?? this.name);
} }
@ -902,7 +902,7 @@ class Unorthodox implements _Unorthodox {
return "Unorthodox(name=$name)"; return "Unorthodox(name=$name)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return UnorthodoxSerializer.toMap(this); return UnorthodoxSerializer.toMap(this);
} }
} }
@ -913,26 +913,26 @@ class WeirdJoin implements _WeirdJoin {
{this.id, this.unorthodox, this.song, this.numbas, this.foos}); {this.id, this.unorthodox, this.song, this.numbas, this.foos});
@override @override
final int id; final int? id;
@override @override
final _Unorthodox unorthodox; final _Unorthodox? unorthodox;
@override @override
final _Song song; final _Song? song;
@override @override
final List<_Numba> numbas; final List<_Numba?>? numbas;
@override @override
final List<_Foo> foos; final List<_Foo?>? foos;
WeirdJoin copyWith( WeirdJoin copyWith(
{int id, {int? id,
_Unorthodox unorthodox, _Unorthodox? unorthodox,
_Song song, _Song? song,
List<_Numba> numbas, List<_Numba?>? numbas,
List<_Foo> foos}) { List<_Foo?>? foos}) {
return WeirdJoin( return WeirdJoin(
id: id ?? this.id, id: id ?? this.id,
unorthodox: unorthodox ?? this.unorthodox, unorthodox: unorthodox ?? this.unorthodox,
@ -946,9 +946,9 @@ class WeirdJoin implements _WeirdJoin {
other.id == id && other.id == id &&
other.unorthodox == unorthodox && other.unorthodox == unorthodox &&
other.song == song && other.song == song &&
ListEquality<_Numba>(DefaultEquality<_Numba>()) ListEquality<_Numba?>(DefaultEquality<_Numba>())
.equals(other.numbas, numbas) && .equals(other.numbas, numbas) &&
ListEquality<_Foo>(DefaultEquality<_Foo>()).equals(other.foos, foos); ListEquality<_Foo?>(DefaultEquality<_Foo>()).equals(other.foos, foos);
} }
@override @override
@ -961,7 +961,7 @@ class WeirdJoin implements _WeirdJoin {
return "WeirdJoin(id=$id, unorthodox=$unorthodox, song=$song, numbas=$numbas, foos=$foos)"; return "WeirdJoin(id=$id, unorthodox=$unorthodox, song=$song, numbas=$numbas, foos=$foos)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return WeirdJoinSerializer.toMap(this); return WeirdJoinSerializer.toMap(this);
} }
} }
@ -972,28 +972,28 @@ class Song extends _Song {
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
final int weirdJoinId; final int? weirdJoinId;
@override @override
final String title; final String? title;
Song copyWith( Song copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
int weirdJoinId, int? weirdJoinId,
String title}) { String? title}) {
return Song( return Song(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -1021,7 +1021,7 @@ class Song extends _Song {
return "Song(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, weirdJoinId=$weirdJoinId, title=$title)"; return "Song(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, weirdJoinId=$weirdJoinId, title=$title)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return SongSerializer.toMap(this); return SongSerializer.toMap(this);
} }
} }
@ -1031,12 +1031,12 @@ class Numba extends _Numba {
Numba({this.i, this.parent}); Numba({this.i, this.parent});
@override @override
int i; int? i;
@override @override
int parent; int? parent;
Numba copyWith({int i, int parent}) { Numba copyWith({int? i, int? parent}) {
return Numba(i: i ?? this.i, parent: parent ?? this.parent); return Numba(i: i ?? this.i, parent: parent ?? this.parent);
} }
@ -1054,7 +1054,7 @@ class Numba extends _Numba {
return "Numba(i=$i, parent=$parent)"; return "Numba(i=$i, parent=$parent)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return NumbaSerializer.toMap(this); return NumbaSerializer.toMap(this);
} }
} }
@ -1064,19 +1064,19 @@ class Foo implements _Foo {
const Foo({this.bar, this.weirdJoins}); const Foo({this.bar, this.weirdJoins});
@override @override
final String bar; final String? bar;
@override @override
final List<_WeirdJoin> weirdJoins; final List<_WeirdJoin?>? weirdJoins;
Foo copyWith({String bar, List<_WeirdJoin> weirdJoins}) { Foo copyWith({String? bar, List<_WeirdJoin?>? weirdJoins}) {
return Foo(bar: bar ?? this.bar, weirdJoins: weirdJoins ?? this.weirdJoins); return Foo(bar: bar ?? this.bar, weirdJoins: weirdJoins ?? this.weirdJoins);
} }
bool operator ==(other) { bool operator ==(other) {
return other is _Foo && return other is _Foo &&
other.bar == bar && other.bar == bar &&
ListEquality<_WeirdJoin>(DefaultEquality<_WeirdJoin>()) ListEquality<_WeirdJoin?>(DefaultEquality<_WeirdJoin>())
.equals(other.weirdJoins, weirdJoins); .equals(other.weirdJoins, weirdJoins);
} }
@ -1090,7 +1090,7 @@ class Foo implements _Foo {
return "Foo(bar=$bar, weirdJoins=$weirdJoins)"; return "Foo(bar=$bar, weirdJoins=$weirdJoins)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return FooSerializer.toMap(this); return FooSerializer.toMap(this);
} }
} }
@ -1100,12 +1100,12 @@ class FooPivot implements _FooPivot {
const FooPivot({this.weirdJoin, this.foo}); const FooPivot({this.weirdJoin, this.foo});
@override @override
final _WeirdJoin weirdJoin; final _WeirdJoin? weirdJoin;
@override @override
final _Foo foo; final _Foo? foo;
FooPivot copyWith({_WeirdJoin weirdJoin, _Foo foo}) { FooPivot copyWith({_WeirdJoin? weirdJoin, _Foo? foo}) {
return FooPivot( return FooPivot(
weirdJoin: weirdJoin ?? this.weirdJoin, foo: foo ?? this.foo); weirdJoin: weirdJoin ?? this.weirdJoin, foo: foo ?? this.foo);
} }
@ -1137,11 +1137,11 @@ class FooPivot implements _FooPivot {
const UnorthodoxSerializer unorthodoxSerializer = UnorthodoxSerializer(); const UnorthodoxSerializer unorthodoxSerializer = UnorthodoxSerializer();
class UnorthodoxEncoder extends Converter<Unorthodox, Map> { class UnorthodoxEncoder extends Converter<Unorthodox, Map?> {
const UnorthodoxEncoder(); const UnorthodoxEncoder();
@override @override
Map convert(Unorthodox model) => UnorthodoxSerializer.toMap(model); Map? convert(Unorthodox model) => UnorthodoxSerializer.toMap(model);
} }
class UnorthodoxDecoder extends Converter<Map, Unorthodox> { class UnorthodoxDecoder extends Converter<Map, Unorthodox> {
@ -1151,7 +1151,7 @@ class UnorthodoxDecoder extends Converter<Map, Unorthodox> {
Unorthodox convert(Map map) => UnorthodoxSerializer.fromMap(map); Unorthodox convert(Map map) => UnorthodoxSerializer.fromMap(map);
} }
class UnorthodoxSerializer extends Codec<Unorthodox, Map> { class UnorthodoxSerializer extends Codec<Unorthodox, Map?> {
const UnorthodoxSerializer(); const UnorthodoxSerializer();
@override @override
@ -1159,10 +1159,10 @@ class UnorthodoxSerializer extends Codec<Unorthodox, Map> {
@override @override
get decoder => const UnorthodoxDecoder(); get decoder => const UnorthodoxDecoder();
static Unorthodox fromMap(Map map) { static Unorthodox fromMap(Map map) {
return Unorthodox(name: map['name'] as String); return Unorthodox(name: map['name'] as String?);
} }
static Map<String, dynamic> toMap(_Unorthodox model) { static Map<String, dynamic>? toMap(_Unorthodox? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -1178,11 +1178,11 @@ abstract class UnorthodoxFields {
const WeirdJoinSerializer weirdJoinSerializer = WeirdJoinSerializer(); const WeirdJoinSerializer weirdJoinSerializer = WeirdJoinSerializer();
class WeirdJoinEncoder extends Converter<WeirdJoin, Map> { class WeirdJoinEncoder extends Converter<WeirdJoin, Map?> {
const WeirdJoinEncoder(); const WeirdJoinEncoder();
@override @override
Map convert(WeirdJoin model) => WeirdJoinSerializer.toMap(model); Map? convert(WeirdJoin model) => WeirdJoinSerializer.toMap(model);
} }
class WeirdJoinDecoder extends Converter<Map, WeirdJoin> { class WeirdJoinDecoder extends Converter<Map, WeirdJoin> {
@ -1192,7 +1192,7 @@ class WeirdJoinDecoder extends Converter<Map, WeirdJoin> {
WeirdJoin convert(Map map) => WeirdJoinSerializer.fromMap(map); WeirdJoin convert(Map map) => WeirdJoinSerializer.fromMap(map);
} }
class WeirdJoinSerializer extends Codec<WeirdJoin, Map> { class WeirdJoinSerializer extends Codec<WeirdJoin, Map?> {
const WeirdJoinSerializer(); const WeirdJoinSerializer();
@override @override
@ -1201,7 +1201,7 @@ class WeirdJoinSerializer extends Codec<WeirdJoin, Map> {
get decoder => const WeirdJoinDecoder(); get decoder => const WeirdJoinDecoder();
static WeirdJoin fromMap(Map map) { static WeirdJoin fromMap(Map map) {
return WeirdJoin( return WeirdJoin(
id: map['id'] as int, id: map['id'] as int?,
unorthodox: map['unorthodox'] != null unorthodox: map['unorthodox'] != null
? UnorthodoxSerializer.fromMap(map['unorthodox'] as Map) ? UnorthodoxSerializer.fromMap(map['unorthodox'] as Map)
: null, : null,
@ -1218,7 +1218,7 @@ class WeirdJoinSerializer extends Codec<WeirdJoin, Map> {
: null); : null);
} }
static Map<String, dynamic> toMap(_WeirdJoin model) { static Map<String, dynamic>? toMap(_WeirdJoin? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -1226,8 +1226,8 @@ class WeirdJoinSerializer extends Codec<WeirdJoin, Map> {
'id': model.id, 'id': model.id,
'unorthodox': UnorthodoxSerializer.toMap(model.unorthodox), 'unorthodox': UnorthodoxSerializer.toMap(model.unorthodox),
'song': SongSerializer.toMap(model.song), 'song': SongSerializer.toMap(model.song),
'numbas': model.numbas?.map((m) => NumbaSerializer.toMap(m))?.toList(), 'numbas': model.numbas?.map((m) => NumbaSerializer.toMap(m)).toList(),
'foos': model.foos?.map((m) => FooSerializer.toMap(m))?.toList() 'foos': model.foos?.map((m) => FooSerializer.toMap(m)).toList()
}; };
} }
} }
@ -1254,11 +1254,11 @@ abstract class WeirdJoinFields {
const SongSerializer songSerializer = SongSerializer(); const SongSerializer songSerializer = SongSerializer();
class SongEncoder extends Converter<Song, Map> { class SongEncoder extends Converter<Song, Map?> {
const SongEncoder(); const SongEncoder();
@override @override
Map convert(Song model) => SongSerializer.toMap(model); Map? convert(Song model) => SongSerializer.toMap(model);
} }
class SongDecoder extends Converter<Map, Song> { class SongDecoder extends Converter<Map, Song> {
@ -1268,7 +1268,7 @@ class SongDecoder extends Converter<Map, Song> {
Song convert(Map map) => SongSerializer.fromMap(map); Song convert(Map map) => SongSerializer.fromMap(map);
} }
class SongSerializer extends Codec<Song, Map> { class SongSerializer extends Codec<Song, Map?> {
const SongSerializer(); const SongSerializer();
@override @override
@ -1277,22 +1277,22 @@ class SongSerializer extends Codec<Song, Map> {
get decoder => const SongDecoder(); get decoder => const SongDecoder();
static Song fromMap(Map map) { static Song fromMap(Map map) {
return Song( return Song(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
weirdJoinId: map['weird_join_id'] as int, weirdJoinId: map['weird_join_id'] as int?,
title: map['title'] as String); title: map['title'] as String?);
} }
static Map<String, dynamic> toMap(_Song model) { static Map<String, dynamic>? toMap(_Song? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -1328,11 +1328,11 @@ abstract class SongFields {
const NumbaSerializer numbaSerializer = NumbaSerializer(); const NumbaSerializer numbaSerializer = NumbaSerializer();
class NumbaEncoder extends Converter<Numba, Map> { class NumbaEncoder extends Converter<Numba, Map?> {
const NumbaEncoder(); const NumbaEncoder();
@override @override
Map convert(Numba model) => NumbaSerializer.toMap(model); Map? convert(Numba model) => NumbaSerializer.toMap(model);
} }
class NumbaDecoder extends Converter<Map, Numba> { class NumbaDecoder extends Converter<Map, Numba> {
@ -1342,7 +1342,7 @@ class NumbaDecoder extends Converter<Map, Numba> {
Numba convert(Map map) => NumbaSerializer.fromMap(map); Numba convert(Map map) => NumbaSerializer.fromMap(map);
} }
class NumbaSerializer extends Codec<Numba, Map> { class NumbaSerializer extends Codec<Numba, Map?> {
const NumbaSerializer(); const NumbaSerializer();
@override @override
@ -1350,10 +1350,10 @@ class NumbaSerializer extends Codec<Numba, Map> {
@override @override
get decoder => const NumbaDecoder(); get decoder => const NumbaDecoder();
static Numba fromMap(Map map) { static Numba fromMap(Map map) {
return Numba(i: map['i'] as int, parent: map['parent'] as int); return Numba(i: map['i'] as int?, parent: map['parent'] as int?);
} }
static Map<String, dynamic> toMap(_Numba model) { static Map<String, dynamic>? toMap(_Numba? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -1371,11 +1371,11 @@ abstract class NumbaFields {
const FooSerializer fooSerializer = FooSerializer(); const FooSerializer fooSerializer = FooSerializer();
class FooEncoder extends Converter<Foo, Map> { class FooEncoder extends Converter<Foo, Map?> {
const FooEncoder(); const FooEncoder();
@override @override
Map convert(Foo model) => FooSerializer.toMap(model); Map? convert(Foo model) => FooSerializer.toMap(model);
} }
class FooDecoder extends Converter<Map, Foo> { class FooDecoder extends Converter<Map, Foo> {
@ -1385,7 +1385,7 @@ class FooDecoder extends Converter<Map, Foo> {
Foo convert(Map map) => FooSerializer.fromMap(map); Foo convert(Map map) => FooSerializer.fromMap(map);
} }
class FooSerializer extends Codec<Foo, Map> { class FooSerializer extends Codec<Foo, Map?> {
const FooSerializer(); const FooSerializer();
@override @override
@ -1394,7 +1394,7 @@ class FooSerializer extends Codec<Foo, Map> {
get decoder => const FooDecoder(); get decoder => const FooDecoder();
static Foo fromMap(Map map) { static Foo fromMap(Map map) {
return Foo( return Foo(
bar: map['bar'] as String, bar: map['bar'] as String?,
weirdJoins: map['weird_joins'] is Iterable weirdJoins: map['weird_joins'] is Iterable
? List.unmodifiable( ? List.unmodifiable(
((map['weird_joins'] as Iterable).whereType<Map>()) ((map['weird_joins'] as Iterable).whereType<Map>())
@ -1402,14 +1402,14 @@ class FooSerializer extends Codec<Foo, Map> {
: null); : null);
} }
static Map<String, dynamic> toMap(_Foo model) { static Map<String, dynamic>? toMap(_Foo? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
return { return {
'bar': model.bar, 'bar': model.bar,
'weird_joins': 'weird_joins':
model.weirdJoins?.map((m) => WeirdJoinSerializer.toMap(m))?.toList() model.weirdJoins?.map((m) => WeirdJoinSerializer.toMap(m)).toList()
}; };
} }
} }
@ -1456,9 +1456,6 @@ class FooPivotSerializer extends Codec<FooPivot, Map> {
} }
static Map<String, dynamic> toMap(_FooPivot model) { static Map<String, dynamic> toMap(_FooPivot model) {
if (model == null) {
return null;
}
return { return {
'weird_join': WeirdJoinSerializer.toMap(model.weirdJoin), 'weird_join': WeirdJoinSerializer.toMap(model.weirdJoin),
'foo': FooSerializer.toMap(model.foo) 'foo': FooSerializer.toMap(model.foo)

View file

@ -10,9 +10,9 @@ part 'user.g.dart';
@serializable @serializable
@orm @orm
abstract class _User extends Model { abstract class _User extends Model {
String get username; String? get username;
String get password; String? get password;
String get email; String? get email;
@ManyToMany(_RoleUser) @ManyToMany(_RoleUser)
List<_Role> get roles; List<_Role> get roles;
@ -22,16 +22,16 @@ abstract class _User extends Model {
@orm @orm
abstract class _RoleUser { abstract class _RoleUser {
@belongsTo @belongsTo
_Role get role; _Role? get role;
@belongsTo @belongsTo
_User get user; _User? get user;
} }
@serializable @serializable
@orm @orm
abstract class _Role extends Model { abstract class _Role extends Model {
String name; String? name;
@ManyToMany(_RoleUser) @ManyToMany(_RoleUser)
List<_User> get users; List<_User> get users;

View file

@ -61,8 +61,8 @@ class RoleMigration extends Migration {
// OrmGenerator // OrmGenerator
// ************************************************************************** // **************************************************************************
class UserQuery extends Query<User, UserQueryWhere> { class UserQuery extends Query<User?, UserQueryWhere?> {
UserQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { UserQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = UserQueryWhere(this); _where = UserQueryWhere(this);
@ -77,7 +77,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
final UserQueryValues values = UserQueryValues(); final UserQueryValues values = UserQueryValues();
UserQueryWhere _where; UserQueryWhere? _where;
@override @override
get casts { get casts {
@ -102,7 +102,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
} }
@override @override
UserQueryWhere get where { UserQueryWhere? get where {
return _where; return _where;
} }
@ -111,15 +111,15 @@ class UserQuery extends Query<User, UserQueryWhere> {
return UserQueryWhere(this); return UserQueryWhere(this);
} }
static User parseRow(List row) { static User? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = User( var model = User(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
username: (row[3] as String), username: (row[3] as String?),
password: (row[4] as String), password: (row[4] as String?),
email: (row[5] as String)); email: (row[5] as String?));
if (row.length > 6) { if (row.length > 6) {
model = model.copyWith( model = model.copyWith(
roles: [RoleQuery.parseRow(row.skip(6).take(4).toList())] roles: [RoleQuery.parseRow(row.skip(6).take(4).toList())]
@ -136,24 +136,23 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
bool canCompile(trampoline) { bool canCompile(trampoline) {
return (!(trampoline.contains('users') && return (!(trampoline?.contains('users') == true &&
trampoline.contains('role_users'))); trampoline?.contains('role_users') == true));
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<User>>([], (out, model) { return result.fold<List<User?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
roles: List<_Role>.from(l.roles ?? []) roles: List<_Role>.from(l.roles)..addAll(model!.roles));
..addAll(model.roles ?? []));
} }
}); });
}); });
@ -162,17 +161,16 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<User>>([], (out, model) { return result.fold<List<User?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
roles: List<_Role>.from(l.roles ?? []) roles: List<_Role>.from(l.roles)..addAll(model!.roles));
..addAll(model.roles ?? []));
} }
}); });
}); });
@ -181,17 +179,16 @@ class UserQuery extends Query<User, UserQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<User>>([], (out, model) { return result.fold<List<User?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
roles: List<_Role>.from(l.roles ?? []) roles: List<_Role>.from(l.roles)..addAll(model!.roles));
..addAll(model.roles ?? []));
} }
}); });
}); });
@ -231,36 +228,36 @@ class UserQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
String get username { String? get username {
return (values['username'] as String); return (values['username'] as String?);
} }
set username(String value) => values['username'] = value; set username(String? value) => values['username'] = value;
String get password { String? get password {
return (values['password'] as String); return (values['password'] as String?);
} }
set password(String value) => values['password'] = value; set password(String? value) => values['password'] = value;
String get email { String? get email {
return (values['email'] as String); return (values['email'] as String?);
} }
set email(String value) => values['email'] = value; set email(String? value) => values['email'] = value;
void copyFrom(User model) { void copyFrom(User model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -270,8 +267,8 @@ class UserQueryValues extends MapQueryValues {
} }
} }
class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> { class RoleUserQuery extends Query<RoleUser?, RoleUserQueryWhere?> {
RoleUserQuery({Query parent, Set<String> trampoline}) RoleUserQuery({Query? parent, Set<String>? trampoline})
: super(parent: parent) { : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
@ -296,11 +293,11 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
@override @override
final RoleUserQueryValues values = RoleUserQueryValues(); final RoleUserQueryValues values = RoleUserQueryValues();
RoleUserQueryWhere _where; RoleUserQueryWhere? _where;
RoleQuery _role; RoleQuery? _role;
UserQuery _user; UserQuery? _user;
@override @override
get casts { get casts {
@ -318,7 +315,7 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
} }
@override @override
RoleUserQueryWhere get where { RoleUserQueryWhere? get where {
return _where; return _where;
} }
@ -327,7 +324,7 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
return RoleUserQueryWhere(this); return RoleUserQueryWhere(this);
} }
static RoleUser parseRow(List row) { static RoleUser? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = RoleUser(); var model = RoleUser();
if (row.length > 2) { if (row.length > 2) {
@ -346,11 +343,11 @@ class RoleUserQuery extends Query<RoleUser, RoleUserQueryWhere> {
return parseRow(row); return parseRow(row);
} }
RoleQuery get role { RoleQuery? get role {
return _role; return _role;
} }
UserQuery get user { UserQuery? get user {
return _user; return _user;
} }
} }
@ -376,28 +373,28 @@ class RoleUserQueryValues extends MapQueryValues {
return {}; return {};
} }
int get roleId { int? get roleId {
return (values['role_id'] as int); return (values['role_id'] as int?);
} }
set roleId(int value) => values['role_id'] = value; set roleId(int? value) => values['role_id'] = value;
int get userId { int? get userId {
return (values['user_id'] as int); return (values['user_id'] as int?);
} }
set userId(int value) => values['user_id'] = value; set userId(int? value) => values['user_id'] = value;
void copyFrom(RoleUser model) { void copyFrom(RoleUser model) {
if (model.role != null) { if (model.role != null) {
values['role_id'] = model.role.id; values['role_id'] = model.role!.id;
} }
if (model.user != null) { if (model.user != null) {
values['user_id'] = model.user.id; values['user_id'] = model.user!.id;
} }
} }
} }
class RoleQuery extends Query<Role, RoleQueryWhere> { class RoleQuery extends Query<Role?, RoleQueryWhere?> {
RoleQuery({Query parent, Set<String> trampoline}) : super(parent: parent) { RoleQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
trampoline ??= Set(); trampoline ??= Set();
trampoline.add(tableName); trampoline.add(tableName);
_where = RoleQueryWhere(this); _where = RoleQueryWhere(this);
@ -419,7 +416,7 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
final RoleQueryValues values = RoleQueryValues(); final RoleQueryValues values = RoleQueryValues();
RoleQueryWhere _where; RoleQueryWhere? _where;
@override @override
get casts { get casts {
@ -437,7 +434,7 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
} }
@override @override
RoleQueryWhere get where { RoleQueryWhere? get where {
return _where; return _where;
} }
@ -446,13 +443,13 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
return RoleQueryWhere(this); return RoleQueryWhere(this);
} }
static Role parseRow(List row) { static Role? parseRow(List row) {
if (row.every((x) => x == null)) return null; if (row.every((x) => x == null)) return null;
var model = Role( var model = Role(
id: row[0].toString(), id: row[0].toString(),
createdAt: (row[1] as DateTime), createdAt: (row[1] as DateTime?),
updatedAt: (row[2] as DateTime), updatedAt: (row[2] as DateTime?),
name: (row[3] as String)); name: (row[3] as String?));
if (row.length > 4) { if (row.length > 4) {
model = model.copyWith( model = model.copyWith(
users: [UserQuery.parseRow(row.skip(4).take(6).toList())] users: [UserQuery.parseRow(row.skip(4).take(6).toList())]
@ -469,24 +466,23 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
bool canCompile(trampoline) { bool canCompile(trampoline) {
return (!(trampoline.contains('roles') && return (!(trampoline?.contains('roles') == true &&
trampoline.contains('role_users'))); trampoline?.contains('role_users') == true));
} }
@override @override
get(QueryExecutor executor) { get(QueryExecutor executor) {
return super.get(executor).then((result) { return super.get(executor).then((result) {
return result.fold<List<Role>>([], (out, model) { return result.fold<List<Role?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
users: List<_User>.from(l.users ?? []) users: List<_User>.from(l.users)..addAll(model!.users));
..addAll(model.users ?? []));
} }
}); });
}); });
@ -495,17 +491,16 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
update(QueryExecutor executor) { update(QueryExecutor executor) {
return super.update(executor).then((result) { return super.update(executor).then((result) {
return result.fold<List<Role>>([], (out, model) { return result.fold<List<Role?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
users: List<_User>.from(l.users ?? []) users: List<_User>.from(l.users)..addAll(model!.users));
..addAll(model.users ?? []));
} }
}); });
}); });
@ -514,17 +509,16 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
@override @override
delete(QueryExecutor executor) { delete(QueryExecutor executor) {
return super.delete(executor).then((result) { return super.delete(executor).then((result) {
return result.fold<List<Role>>([], (out, model) { return result.fold<List<Role?>>([], (out, model) {
var idx = out.indexWhere((m) => m.id == model.id); var idx = out.indexWhere((m) => m!.id == model!.id);
if (idx == -1) { if (idx == -1) {
return out..add(model); return out..add(model);
} else { } else {
var l = out[idx]; var l = out[idx]!;
return out return out
..[idx] = l.copyWith( ..[idx] = l.copyWith(
users: List<_User>.from(l.users ?? []) users: List<_User>.from(l.users)..addAll(model!.users));
..addAll(model.users ?? []));
} }
}); });
}); });
@ -558,26 +552,26 @@ class RoleQueryValues extends MapQueryValues {
return {}; return {};
} }
String get id { String? get id {
return (values['id'] as String); return (values['id'] as String?);
} }
set id(String value) => values['id'] = value; set id(String? value) => values['id'] = value;
DateTime get createdAt { DateTime? get createdAt {
return (values['created_at'] as DateTime); return (values['created_at'] as DateTime?);
} }
set createdAt(DateTime value) => values['created_at'] = value; set createdAt(DateTime? value) => values['created_at'] = value;
DateTime get updatedAt { DateTime? get updatedAt {
return (values['updated_at'] as DateTime); return (values['updated_at'] as DateTime?);
} }
set updatedAt(DateTime value) => values['updated_at'] = value; set updatedAt(DateTime? value) => values['updated_at'] = value;
String get name { String? get name {
return (values['name'] as String); return (values['name'] as String?);
} }
set name(String value) => values['name'] = value; set name(String? value) => values['name'] = value;
void copyFrom(Role model) { void copyFrom(Role model) {
createdAt = model.createdAt; createdAt = model.createdAt;
updatedAt = model.updatedAt; updatedAt = model.updatedAt;
@ -598,41 +592,41 @@ class User extends _User {
this.username, this.username,
this.password, this.password,
this.email, this.email,
List<_Role> roles}) List<_Role?>? roles})
: this.roles = List.unmodifiable(roles ?? []); : this.roles = List.unmodifiable(roles ?? []);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
final String username; final String? username;
@override @override
final String password; final String? password;
@override @override
final String email; final String? email;
@override @override
final List<_Role> roles; final List<_Role> roles;
User copyWith( User copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
String username, String? username,
String password, String? password,
String email, String? email,
List<_Role> roles}) { List<_Role?>? roles}) {
return User( return User(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -666,7 +660,7 @@ class User extends _User {
return "User(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, username=$username, password=$password, email=$email, roles=$roles)"; return "User(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, username=$username, password=$password, email=$email, roles=$roles)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return UserSerializer.toMap(this); return UserSerializer.toMap(this);
} }
} }
@ -676,12 +670,12 @@ class RoleUser implements _RoleUser {
const RoleUser({this.role, this.user}); const RoleUser({this.role, this.user});
@override @override
final _Role role; final _Role? role;
@override @override
final _User user; final _User? user;
RoleUser copyWith({_Role role, _User user}) { RoleUser copyWith({_Role? role, _User? user}) {
return RoleUser(role: role ?? this.role, user: user ?? this.user); return RoleUser(role: role ?? this.role, user: user ?? this.user);
} }
@ -706,33 +700,34 @@ class RoleUser implements _RoleUser {
@generatedSerializable @generatedSerializable
class Role extends _Role { class Role extends _Role {
Role({this.id, this.createdAt, this.updatedAt, this.name, List<_User> users}) Role(
{this.id, this.createdAt, this.updatedAt, this.name, List<_User?>? users})
: this.users = List.unmodifiable(users ?? []); : this.users = List.unmodifiable(users ?? []);
/// A unique identifier corresponding to this item. /// A unique identifier corresponding to this item.
@override @override
String id; String? id;
/// The time at which this item was created. /// The time at which this item was created.
@override @override
DateTime createdAt; DateTime? createdAt;
/// The last time at which this item was updated. /// The last time at which this item was updated.
@override @override
DateTime updatedAt; DateTime? updatedAt;
@override @override
String name; String? name;
@override @override
final List<_User> users; final List<_User> users;
Role copyWith( Role copyWith(
{String id, {String? id,
DateTime createdAt, DateTime? createdAt,
DateTime updatedAt, DateTime? updatedAt,
String name, String? name,
List<_User> users}) { List<_User?>? users}) {
return Role( return Role(
id: id ?? this.id, id: id ?? this.id,
createdAt: createdAt ?? this.createdAt, createdAt: createdAt ?? this.createdAt,
@ -761,7 +756,7 @@ class Role extends _Role {
return "Role(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, name=$name, users=$users)"; return "Role(id=$id, createdAt=$createdAt, updatedAt=$updatedAt, name=$name, users=$users)";
} }
Map<String, dynamic> toJson() { Map<String, dynamic>? toJson() {
return RoleSerializer.toMap(this); return RoleSerializer.toMap(this);
} }
} }
@ -772,11 +767,11 @@ class Role extends _Role {
const UserSerializer userSerializer = UserSerializer(); const UserSerializer userSerializer = UserSerializer();
class UserEncoder extends Converter<User, Map> { class UserEncoder extends Converter<User, Map?> {
const UserEncoder(); const UserEncoder();
@override @override
Map convert(User model) => UserSerializer.toMap(model); Map? convert(User model) => UserSerializer.toMap(model);
} }
class UserDecoder extends Converter<Map, User> { class UserDecoder extends Converter<Map, User> {
@ -786,7 +781,7 @@ class UserDecoder extends Converter<Map, User> {
User convert(Map map) => UserSerializer.fromMap(map); User convert(Map map) => UserSerializer.fromMap(map);
} }
class UserSerializer extends Codec<User, Map> { class UserSerializer extends Codec<User, Map?> {
const UserSerializer(); const UserSerializer();
@override @override
@ -795,27 +790,27 @@ class UserSerializer extends Codec<User, Map> {
get decoder => const UserDecoder(); get decoder => const UserDecoder();
static User fromMap(Map map) { static User fromMap(Map map) {
return User( return User(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
username: map['username'] as String, username: map['username'] as String?,
password: map['password'] as String, password: map['password'] as String?,
email: map['email'] as String, email: map['email'] as String?,
roles: map['roles'] is Iterable roles: map['roles'] is Iterable
? List.unmodifiable(((map['roles'] as Iterable).whereType<Map>()) ? List.unmodifiable(((map['roles'] as Iterable).whereType<Map>())
.map(RoleSerializer.fromMap)) .map(RoleSerializer.fromMap))
: null); : null);
} }
static Map<String, dynamic> toMap(_User model) { static Map<String, dynamic>? toMap(_User? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -826,7 +821,7 @@ class UserSerializer extends Codec<User, Map> {
'username': model.username, 'username': model.username,
'password': model.password, 'password': model.password,
'email': model.email, 'email': model.email,
'roles': model.roles?.map((m) => RoleSerializer.toMap(m))?.toList() 'roles': model.roles.map((m) => RoleSerializer.toMap(m)).toList()
}; };
} }
} }
@ -891,9 +886,6 @@ class RoleUserSerializer extends Codec<RoleUser, Map> {
} }
static Map<String, dynamic> toMap(_RoleUser model) { static Map<String, dynamic> toMap(_RoleUser model) {
if (model == null) {
return null;
}
return { return {
'role': RoleSerializer.toMap(model.role), 'role': RoleSerializer.toMap(model.role),
'user': UserSerializer.toMap(model.user) 'user': UserSerializer.toMap(model.user)
@ -911,11 +903,11 @@ abstract class RoleUserFields {
const RoleSerializer roleSerializer = RoleSerializer(); const RoleSerializer roleSerializer = RoleSerializer();
class RoleEncoder extends Converter<Role, Map> { class RoleEncoder extends Converter<Role, Map?> {
const RoleEncoder(); const RoleEncoder();
@override @override
Map convert(Role model) => RoleSerializer.toMap(model); Map? convert(Role model) => RoleSerializer.toMap(model);
} }
class RoleDecoder extends Converter<Map, Role> { class RoleDecoder extends Converter<Map, Role> {
@ -925,7 +917,7 @@ class RoleDecoder extends Converter<Map, Role> {
Role convert(Map map) => RoleSerializer.fromMap(map); Role convert(Map map) => RoleSerializer.fromMap(map);
} }
class RoleSerializer extends Codec<Role, Map> { class RoleSerializer extends Codec<Role, Map?> {
const RoleSerializer(); const RoleSerializer();
@override @override
@ -934,25 +926,25 @@ class RoleSerializer extends Codec<Role, Map> {
get decoder => const RoleDecoder(); get decoder => const RoleDecoder();
static Role fromMap(Map map) { static Role fromMap(Map map) {
return Role( return Role(
id: map['id'] as String, id: map['id'] as String?,
createdAt: map['created_at'] != null createdAt: map['created_at'] != null
? (map['created_at'] is DateTime ? (map['created_at'] is DateTime
? (map['created_at'] as DateTime) ? (map['created_at'] as DateTime?)
: DateTime.parse(map['created_at'].toString())) : DateTime.parse(map['created_at'].toString()))
: null, : null,
updatedAt: map['updated_at'] != null updatedAt: map['updated_at'] != null
? (map['updated_at'] is DateTime ? (map['updated_at'] is DateTime
? (map['updated_at'] as DateTime) ? (map['updated_at'] as DateTime?)
: DateTime.parse(map['updated_at'].toString())) : DateTime.parse(map['updated_at'].toString()))
: null, : null,
name: map['name'] as String, name: map['name'] as String?,
users: map['users'] is Iterable users: map['users'] is Iterable
? List.unmodifiable(((map['users'] as Iterable).whereType<Map>()) ? List.unmodifiable(((map['users'] as Iterable).whereType<Map>())
.map(UserSerializer.fromMap)) .map(UserSerializer.fromMap))
: null); : null);
} }
static Map<String, dynamic> toMap(_Role model) { static Map<String, dynamic>? toMap(_Role? model) {
if (model == null) { if (model == null) {
return null; return null;
} }
@ -961,7 +953,7 @@ class RoleSerializer extends Codec<Role, Map> {
'created_at': model.createdAt?.toIso8601String(), 'created_at': model.createdAt?.toIso8601String(),
'updated_at': model.updatedAt?.toIso8601String(), 'updated_at': model.updatedAt?.toIso8601String(),
'name': model.name, 'name': model.name,
'users': model.users?.map((m) => UserSerializer.toMap(m))?.toList() 'users': model.users.map((m) => UserSerializer.toMap(m)).toList()
}; };
} }
} }

View file

@ -6,14 +6,14 @@ import 'models/car.dart';
final DateTime y2k = new DateTime.utc(2000, 1, 1); final DateTime y2k = new DateTime.utc(2000, 1, 1);
standaloneTests(FutureOr<QueryExecutor> Function() createExecutor, standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
{FutureOr<void> Function(QueryExecutor) close}) { {FutureOr<void> Function(QueryExecutor)? close}) {
close ??= (_) => null; close ??= (_) => null;
test('to where', () { test('to where', () {
var query = new CarQuery(); var query = new CarQuery();
query.where query.where
..familyFriendly.isTrue ?..familyFriendly.isTrue
..recalledAt.lessThanOrEqualTo(y2k, includeTime: false); ..recalledAt.lessThanOrEqualTo(y2k, includeTime: false);
var whereClause = query.where.compile(tableName: 'cars'); var whereClause = query.where!.compile(tableName: 'cars');
print('Where clause: $whereClause'); print('Where clause: $whereClause');
expect(whereClause, expect(whereClause,
'cars.family_friendly = TRUE AND cars.recalled_at <= \'2000-01-01\''); 'cars.family_friendly = TRUE AND cars.recalled_at <= \'2000-01-01\'');
@ -24,34 +24,35 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
// var row = [0, 'Mazda', 'CX9', true, y2k, y2k, y2k]; // var row = [0, 'Mazda', 'CX9', true, y2k, y2k, y2k];
var row = [0, y2k, y2k, 'Mazda', 'CX9', true, y2k]; var row = [0, y2k, y2k, 'Mazda', 'CX9', true, y2k];
print(row); print(row);
var car = new CarQuery().deserialize(row); var car = new CarQuery().deserialize(row)!;
print(car.toJson()); print(car.toJson());
expect(car.id, '0'); expect(car.id, '0');
expect(car.make, 'Mazda'); expect(car.make, 'Mazda');
expect(car.description, 'CX9'); expect(car.description, 'CX9');
expect(car.familyFriendly, true); expect(car.familyFriendly, true);
expect(y2k.toIso8601String(), startsWith(car.recalledAt.toIso8601String())); expect(
expect(y2k.toIso8601String(), startsWith(car.createdAt.toIso8601String())); y2k.toIso8601String(), startsWith(car.recalledAt!.toIso8601String()));
expect(y2k.toIso8601String(), startsWith(car.updatedAt.toIso8601String())); expect(y2k.toIso8601String(), startsWith(car.createdAt!.toIso8601String()));
expect(y2k.toIso8601String(), startsWith(car.updatedAt!.toIso8601String()));
}); });
group('queries', () { group('queries', () {
QueryExecutor executor; late QueryExecutor executor;
setUp(() async { setUp(() async {
executor = await createExecutor(); executor = await createExecutor();
}); });
tearDown(() => close(executor)); tearDown(() => close!(executor));
group('selects', () { group('selects', () {
test('select all', () async { test('select all', () async {
var cars = await new CarQuery().get(executor); List<Car?> cars = await new CarQuery().get(executor);
expect(cars, []); expect(cars, []);
}); });
group('with data', () { group('with data', () {
Car ferrari; Car? ferrari;
setUp(() async { setUp(() async {
var query = new CarQuery(); var query = new CarQuery();
@ -63,26 +64,26 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
}); });
test('where clause is applied', () async { test('where clause is applied', () async {
var query = new CarQuery()..where.familyFriendly.isTrue; var query = new CarQuery()..where!.familyFriendly.isTrue;
var cars = await query.get(executor); List<Car?> cars = await query.get(executor);
expect(cars, isEmpty); expect(cars, isEmpty);
var sportsCars = new CarQuery()..where.familyFriendly.isFalse; var sportsCars = new CarQuery()..where!.familyFriendly.isFalse;
cars = await sportsCars.get(executor); cars = await sportsCars.get(executor);
print(cars.map((c) => c.toJson())); print(cars.map((c) => c!.toJson()));
var car = cars.first; var car = cars.first!;
expect(car.make, ferrari.make); expect(car.make, ferrari!.make);
expect(car.description, ferrari.description); expect(car.description, ferrari!.description);
expect(car.familyFriendly, ferrari.familyFriendly); expect(car.familyFriendly, ferrari!.familyFriendly);
expect(car.recalledAt, isNull); expect(car.recalledAt, isNull);
}); });
test('union', () async { test('union', () async {
var query1 = new CarQuery()..where.make.like('%Fer%'); var query1 = new CarQuery()..where!.make.like('%Fer%');
var query2 = new CarQuery()..where.familyFriendly.isTrue; var query2 = new CarQuery()..where!.familyFriendly.isTrue;
var query3 = new CarQuery()..where.description.equals('Submarine'); var query3 = new CarQuery()..where!.description.equals('Submarine');
var union = query1.union(query2).unionAll(query3); Union<Car?> union = query1.union(query2).unionAll(query3);
print(union.compile(Set())); print(union.compile(Set()));
var cars = await union.get(executor); var cars = await union.get(executor);
expect(cars, hasLength(1)); expect(cars, hasLength(1));
@ -90,63 +91,63 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
test('or clause', () async { test('or clause', () async {
var query = new CarQuery() var query = new CarQuery()
..where.make.like('Fer%') ..where!.make.like('Fer%')
..orWhere((where) => where ..orWhere((where) => where
..familyFriendly.isTrue ?..familyFriendly.isTrue
..make.equals('Honda')); ..make.equals('Honda'));
print(query.compile(Set())); print(query.compile(Set()));
var cars = await query.get(executor); List<Car?> cars = await query.get(executor);
expect(cars, hasLength(1)); expect(cars, hasLength(1));
}); });
test('limit obeyed', () async { test('limit obeyed', () async {
var query = new CarQuery()..limit(0); var query = new CarQuery()..limit(0);
print(query.compile(Set())); print(query.compile(Set()));
var cars = await query.get(executor); List<Car?> cars = await query.get(executor);
expect(cars, isEmpty); expect(cars, isEmpty);
}); });
test('get one', () async { test('get one', () async {
var id = int.parse(ferrari.id); var id = int.parse(ferrari!.id!);
var query = new CarQuery()..where.id.equals(id); var query = new CarQuery()..where!.id.equals(id);
var car = await query.getOne(executor); var car = await query.getOne(executor);
expect(car, ferrari); expect(car, ferrari);
}); });
test('delete one', () async { test('delete one', () async {
var id = int.parse(ferrari.id); var id = int.parse(ferrari!.id!);
var query = new CarQuery()..where.id.equals(id); var query = new CarQuery()..where!.id.equals(id);
var car = await query.deleteOne(executor); var car = await (query.deleteOne(executor) as FutureOr<Car>);
expect(car.toJson(), ferrari.toJson()); expect(car.toJson(), ferrari!.toJson());
var cars = await new CarQuery().get(executor); List<Car?> cars = await new CarQuery().get(executor);
expect(cars, isEmpty); expect(cars, isEmpty);
}); });
test('delete stream', () async { test('delete stream', () async {
var query = new CarQuery() var query = new CarQuery()
..where.make.equals('Ferrari東') ..where!.make.equals('Ferrari東')
..orWhere((w) => w.familyFriendly.isTrue); ..orWhere((w) => w!.familyFriendly.isTrue);
print(query.compile(Set(), preamble: 'DELETE FROM "cars"')); print(query.compile(Set(), preamble: 'DELETE FROM "cars"'));
var cars = await query.delete(executor); List<Car?> cars = await query.delete(executor);
expect(cars, hasLength(1)); expect(cars, hasLength(1));
expect(cars.first.toJson(), ferrari.toJson()); expect(cars.first!.toJson(), ferrari!.toJson());
}); });
test('update', () async { test('update', () async {
var query = new CarQuery() var query = new CarQuery()
..where.id.equals(int.parse(ferrari.id)) ..where!.id.equals(int.parse(ferrari!.id!))
..values.make = 'Hyundai'; ..values.make = 'Hyundai';
var cars = await query.update(executor); List<Car?> cars = await query.update(executor);
expect(cars, hasLength(1)); expect(cars, hasLength(1));
expect(cars.first.make, 'Hyundai'); expect(cars.first!.make, 'Hyundai');
}); });
test('update car', () async { test('update car', () async {
var cloned = ferrari.copyWith(make: 'Angel'); var cloned = ferrari!.copyWith(make: 'Angel');
var query = new CarQuery()..values.copyFrom(cloned); var query = new CarQuery()..values.copyFrom(cloned);
var car = await query.updateOne(executor); var car = await (query.updateOne(executor) as FutureOr<Car>);
print(car.toJson()); print(car.toJson());
expect(car.toJson(), cloned.toJson()); expect(car.toJson(), cloned.toJson());
}); });
@ -164,12 +165,12 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
..recalledAt = recalledAt ..recalledAt = recalledAt
..createdAt = now ..createdAt = now
..updatedAt = now; ..updatedAt = now;
var car = await query.insert(executor); var car = await (query.insert(executor) as FutureOr<Car>);
expect(car.id, isNotNull); expect(car.id, isNotNull);
expect(car.make, 'Honda'); expect(car.make, 'Honda');
expect(car.description, 'Hello'); expect(car.description, 'Hello');
expect(car.familyFriendly, isTrue); expect(car.familyFriendly, isTrue);
expect(dateYmdHms.format(car.recalledAt), dateYmdHms.format(recalledAt)); expect(dateYmdHms.format(car.recalledAt!), dateYmdHms.format(recalledAt));
expect(car.createdAt, allOf(isNotNull, equals(car.updatedAt))); expect(car.createdAt, allOf(isNotNull, equals(car.updatedAt)));
}); });
@ -181,13 +182,13 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
familyFriendly: true, familyFriendly: true,
recalledAt: recalledAt); recalledAt: recalledAt);
var query = new CarQuery()..values.copyFrom(beetle); var query = new CarQuery()..values.copyFrom(beetle);
var car = await query.insert(executor); var car = await (query.insert(executor) as FutureOr<Car>);
print(car.toJson()); print(car.toJson());
expect(car.make, beetle.make); expect(car.make, beetle.make);
expect(car.description, beetle.description); expect(car.description, beetle.description);
expect(car.familyFriendly, beetle.familyFriendly); expect(car.familyFriendly, beetle.familyFriendly);
expect(dateYmdHms.format(car.recalledAt), expect(dateYmdHms.format(car.recalledAt!),
dateYmdHms.format(beetle.recalledAt)); dateYmdHms.format(beetle.recalledAt!));
}); });
}); });
} }

View file

@ -1,40 +1,40 @@
name: angel_orm_test name: angel_orm_test
version: 1.0.0 version: 3.0.0
publish_to: none publish_to: none
description: Common tests for Angel ORM backends. description: Common tests for Angel ORM backends.
environment: environment:
sdk: '>=2.10.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'
dependencies: dependencies:
angel_migration: angel_migration:
git: git:
url: https://github.com/dukefirehawk/angel.git url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x ref: sdk-2.12.x_nnbd
path: packages/orm/angel_migration path: packages/orm/angel_migration
angel_model: angel_model:
git: git:
url: https://github.com/dukefirehawk/angel.git url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x ref: sdk-2.12.x_nnbd
path: packages/model path: packages/model
angel_orm: angel_orm:
git: git:
url: https://github.com/dukefirehawk/angel.git url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x ref: sdk-2.12.x_nnbd
path: packages/orm/angel_orm path: packages/orm/angel_orm
angel_serialize: angel_serialize:
git: git:
url: https://github.com/dukefirehawk/angel.git url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x ref: sdk-2.12.x_nnbd
path: packages/serialize/angel_serialize path: packages/serialize/angel_serialize
test: ^1.15.7 test: ^1.17.3
dev_dependencies: dev_dependencies:
angel_orm_generator: angel_orm_generator:
git: git:
url: https://github.com/dukefirehawk/angel.git url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x ref: sdk-2.12.x_nnbd
path: packages/orm/angel_orm_generator path: packages/orm/angel_orm_generator
angel_framework: angel_framework:
git: git:
url: https://github.com/dukefirehawk/angel.git url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x ref: sdk-2.12.x_nnbd
path: packages/framework path: packages/framework
build_runner: ^1.0.0 build_runner: ^2.0.1