Replace null with Optional
This commit is contained in:
parent
0204977281
commit
8d3c8b9121
34 changed files with 403 additions and 333 deletions
|
@ -19,7 +19,8 @@ abstract class QueryBase<T> {
|
||||||
|
|
||||||
/// The list of fields returned by this query.
|
/// The list of fields returned by this query.
|
||||||
///
|
///
|
||||||
/// If it's `null`, then this query will perform a `SELECT *`.
|
/// @deprecated If it's `null`, then this query will perform a `SELECT *`.
|
||||||
|
/// If it's empty, then this query will perform a `SELECT *`.
|
||||||
List<String> get fields;
|
List<String> get fields;
|
||||||
|
|
||||||
/// A String of all [fields], joined by a comma (`,`).
|
/// A String of all [fields], joined by a comma (`,`).
|
||||||
|
@ -42,6 +43,7 @@ abstract class QueryBase<T> {
|
||||||
|
|
||||||
Future<List<T>> get(QueryExecutor executor) async {
|
Future<List<T>> get(QueryExecutor executor) async {
|
||||||
var sql = compile({});
|
var sql = compile({});
|
||||||
|
|
||||||
return executor
|
return executor
|
||||||
.query(tableName, sql, substitutionValues)
|
.query(tableName, sql, substitutionValues)
|
||||||
.then((it) => it.map(deserialize).toList());
|
.then((it) => it.map(deserialize).toList());
|
||||||
|
|
|
@ -6,7 +6,7 @@ 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 = CarQuery();
|
var query = CarQuery();
|
||||||
query.where
|
query.where
|
||||||
?..familyFriendly.equals(false)
|
?..familyFriendly.equals(false)
|
||||||
|
|
|
@ -2,6 +2,8 @@ import 'dart:async';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
import 'models/book.dart';
|
import 'models/book.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
import 'util.dart';
|
import 'util.dart';
|
||||||
|
|
||||||
belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
@ -17,10 +19,10 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
// Insert an author
|
// Insert an author
|
||||||
var query = AuthorQuery()..values.name = 'J.K. Rowling';
|
var query = AuthorQuery()..values.name = 'J.K. Rowling';
|
||||||
jkRowling = await query.insert(executor);
|
jkRowling = (await query.insert(executor)).value;
|
||||||
|
|
||||||
query.values.name = 'J.K. Jameson';
|
query.values.name = 'J.K. Jameson';
|
||||||
jameson = await query.insert(executor);
|
jameson = (await query.insert(executor)).value;
|
||||||
|
|
||||||
// And a book
|
// And a book
|
||||||
var bookQuery = BookQuery();
|
var bookQuery = BookQuery();
|
||||||
|
@ -29,7 +31,7 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
..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)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
tearDown(() => close!(executor));
|
tearDown(() => close!(executor));
|
||||||
|
@ -37,10 +39,10 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
group('selects', () {
|
group('selects', () {
|
||||||
test('select all', () async {
|
test('select all', () async {
|
||||||
var query = BookQuery();
|
var query = BookQuery();
|
||||||
List<Book?> 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);
|
||||||
|
@ -70,10 +72,10 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
test('where clause', () async {
|
test('where clause', () async {
|
||||||
var query = BookQuery()
|
var query = 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()));
|
||||||
|
|
||||||
List<Book> books = await query.get(executor) as List<Book>;
|
List<Book> books = await query.get(executor);
|
||||||
expect(books, hasLength(1));
|
expect(books, hasLength(1));
|
||||||
|
|
||||||
var book = books.first;
|
var book = books.first;
|
||||||
|
@ -97,10 +99,10 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
..unionAll(query3);
|
..unionAll(query3);
|
||||||
print(query1.compile(Set()));
|
print(query1.compile(Set()));
|
||||||
|
|
||||||
List<Book?> 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);
|
||||||
|
@ -113,7 +115,7 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
test('order by', () async {
|
test('order by', () async {
|
||||||
var query = AuthorQuery()..orderBy(AuthorFields.name, descending: true);
|
var query = AuthorQuery()..orderBy(AuthorFields.name, descending: true);
|
||||||
List<Author?> authors = await query.get(executor);
|
List<Author> authors = await query.get(executor);
|
||||||
expect(authors, [jkRowling, jameson]);
|
expect(authors, [jkRowling, jameson]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -128,7 +130,7 @@ belongsToTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
printSeparator('Delete stream test');
|
printSeparator('Delete stream test');
|
||||||
var query = BookQuery()..where!.name.equals(deathlyHallows!.name!);
|
var query = BookQuery()..where!.name.equals(deathlyHallows!.name!);
|
||||||
print(query.compile(Set(), preamble: 'DELETE', withFields: false));
|
print(query.compile(Set(), preamble: 'DELETE', withFields: false));
|
||||||
List<Book>? books = await query.delete(executor) as List<Book>;
|
List<Book>? books = await query.delete(executor);
|
||||||
expect(books, hasLength(1));
|
expect(books, hasLength(1));
|
||||||
|
|
||||||
var book = books.first;
|
var book = books.first;
|
||||||
|
|
|
@ -18,7 +18,7 @@ customExprTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
nQuery.values
|
nQuery.values
|
||||||
..createdAt = now
|
..createdAt = now
|
||||||
..updatedAt = now;
|
..updatedAt = now;
|
||||||
numbersModel = await nQuery.insert(executor);
|
numbersModel = (await nQuery.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
tearDown(() => close!(executor));
|
tearDown(() => close!(executor));
|
||||||
|
|
|
@ -25,7 +25,7 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
var query = UnorthodoxQuery()..values.name = 'Hey';
|
var query = UnorthodoxQuery()..values.name = 'Hey';
|
||||||
unorthodox = await query.insert(executor);
|
unorthodox = (await query.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('belongs to', () async {
|
test('belongs to', () async {
|
||||||
|
@ -42,12 +42,12 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
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)).value;
|
||||||
|
|
||||||
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)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('has one', () async {
|
test('has one', () async {
|
||||||
|
@ -65,7 +65,7 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
..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.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
var query = WeirdJoinQuery()..where!.id.equals(weirdJoin!.id!);
|
var query = WeirdJoinQuery()..where!.id.equals(weirdJoin!.id!);
|
||||||
|
@ -76,7 +76,8 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
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.value.bar);
|
||||||
var pivotQuery = FooPivotQuery()
|
var pivotQuery = FooPivotQuery()
|
||||||
..values.weirdJoinId = weirdJoin!.id
|
..values.weirdJoinId = weirdJoin!.id
|
||||||
..values.fooBar = fooBar;
|
..values.fooBar = fooBar;
|
||||||
|
@ -86,7 +87,7 @@ edgeCaseTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
var foo = await (fooQuery.getOne(executor) as FutureOr<Foo>);
|
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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,7 +24,7 @@ enumAndNestedTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
var query = HasCarQuery();
|
var query = HasCarQuery();
|
||||||
query.values.type = CarType.sedan;
|
query.values.type = CarType.sedan;
|
||||||
initialValue = await query.insert(executor);
|
initialValue = (await query.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('query by enum', () async {
|
test('query by enum', () async {
|
||||||
|
|
|
@ -14,7 +14,7 @@ hasManyTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
var query = TreeQuery()..values.rings = 10;
|
var query = TreeQuery()..values.rings = 10;
|
||||||
|
|
||||||
executor = await createExecutor();
|
executor = await createExecutor();
|
||||||
appleTree = await query.insert(executor);
|
appleTree = (await query.insert(executor)).value;
|
||||||
treeId = int.parse(appleTree!.id!);
|
treeId = int.parse(appleTree!.id!);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -44,8 +44,8 @@ hasManyTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
..values.treeId = treeId
|
..values.treeId = treeId
|
||||||
..values.commonName = 'Banana';
|
..values.commonName = 'Banana';
|
||||||
|
|
||||||
apple = await appleQuery.insert(executor);
|
apple = (await appleQuery.insert(executor)).value;
|
||||||
banana = await bananaQuery.insert(executor);
|
banana = (await bananaQuery.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('can fetch any children', () async {
|
test('can fetch any children', () async {
|
||||||
|
|
|
@ -44,7 +44,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];
|
||||||
initialValue = await query.insert(executor);
|
initialValue = (await query.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('get all', () async {
|
test('get all', () async {
|
||||||
|
|
|
@ -12,7 +12,7 @@ hasOneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
executor = await createExecutor();
|
executor = await createExecutor();
|
||||||
var query = LegQuery()..values.name = 'Left';
|
var query = LegQuery()..values.name = 'Left';
|
||||||
originalLeg = await query.insert(executor);
|
originalLeg = (await query.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
tearDown(() => close!(executor));
|
tearDown(() => close!(executor));
|
||||||
|
|
|
@ -48,10 +48,10 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
var canPubQuery = RoleQuery()..values.name = 'can_pub';
|
var canPubQuery = RoleQuery()..values.name = 'can_pub';
|
||||||
var canSubQuery = RoleQuery()..values.name = 'can_sub';
|
var canSubQuery = RoleQuery()..values.name = 'can_sub';
|
||||||
canPub = await canPubQuery.insert(executor);
|
canPub = (await canPubQuery.insert(executor)).value;
|
||||||
print('=== CANPUB: ${canPub?.toJson()}');
|
print('=== CANPUB: ${canPub?.toJson()}');
|
||||||
// await dumpQuery(canPubQuery.compile(Set()));
|
// await dumpQuery(canPubQuery.compile(Set()));
|
||||||
canSub = await canSubQuery.insert(executor);
|
canSub = (await canSubQuery.insert(executor)).value;
|
||||||
print('=== CANSUB: ${canSub?.toJson()}');
|
print('=== CANSUB: ${canSub?.toJson()}');
|
||||||
|
|
||||||
var thosakweQuery = UserQuery();
|
var thosakweQuery = UserQuery();
|
||||||
|
@ -59,7 +59,7 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
..username = 'thosakwe'
|
..username = 'thosakwe'
|
||||||
..password = 'Hahahahayoureallythoughtiwasstupidenoughtotypethishere'
|
..password = 'Hahahahayoureallythoughtiwasstupidenoughtotypethishere'
|
||||||
..email = 'thosakwe AT gmail.com';
|
..email = 'thosakwe AT gmail.com';
|
||||||
thosakwe = await thosakweQuery.insert(executor);
|
thosakwe = (await thosakweQuery.insert(executor)).value;
|
||||||
print('=== THOSAKWE: ${thosakwe?.toJson()}');
|
print('=== THOSAKWE: ${thosakwe?.toJson()}');
|
||||||
|
|
||||||
// Allow thosakwe to publish...
|
// Allow thosakwe to publish...
|
||||||
|
@ -95,7 +95,7 @@ manyToManyTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
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)).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
test('fetch roles for user', () async {
|
test('fetch roles for user', () async {
|
||||||
|
|
|
@ -4,6 +4,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'book.g.dart';
|
part 'book.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -50,7 +50,7 @@ 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);
|
||||||
|
@ -106,8 +106,10 @@ class BookQuery extends Query<Book?, BookQueryWhere?> {
|
||||||
return BookQueryWhere(this);
|
return BookQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Book? parseRow(List row) {
|
static Optional<Book> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Book(
|
var model = Book(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -115,18 +117,19 @@ class BookQuery extends Query<Book?, BookQueryWhere?> {
|
||||||
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()).value);
|
||||||
}
|
}
|
||||||
if (row.length > 10) {
|
if (row.length > 10) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
partnerAuthor: AuthorQuery.parseRow(row.skip(10).take(4).toList()));
|
partnerAuthor:
|
||||||
|
AuthorQuery.parseRow(row.skip(10).take(4).toList()).value);
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Book deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuthorQuery? get author {
|
AuthorQuery? get author {
|
||||||
|
@ -215,7 +218,7 @@ class BookQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AuthorQuery extends Query<Author?, AuthorQueryWhere?> {
|
class AuthorQuery extends Query<Author, AuthorQueryWhere> {
|
||||||
AuthorQuery({Query? parent, Set<String>? trampoline})
|
AuthorQuery({Query? parent, Set<String>? trampoline})
|
||||||
: super(parent: parent) {
|
: super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
|
@ -253,19 +256,21 @@ class AuthorQuery extends Query<Author?, AuthorQueryWhere?> {
|
||||||
return AuthorQueryWhere(this);
|
return AuthorQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Author? parseRow(List row) {
|
static Optional<Author> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Author(
|
var model = Author(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1]),
|
||||||
updatedAt: (row[2] as DateTime?),
|
updatedAt: (row[2]),
|
||||||
name: (row[3] as String?));
|
name: (row[3]));
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Author deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
part 'car.g.dart';
|
part 'car.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -30,7 +30,7 @@ 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);
|
||||||
|
@ -75,8 +75,10 @@ class CarQuery extends Query<Car?, CarQueryWhere?> {
|
||||||
return CarQueryWhere(this);
|
return CarQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Car? parseRow(List row) {
|
static Optional<Car> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Car(
|
var model = Car(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -85,12 +87,12 @@ class CarQuery extends Query<Car?, CarQueryWhere?> {
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Car deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'custom_expr.g.dart';
|
part 'custom_expr.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -46,7 +46,7 @@ class AlphabetMigration extends Migration {
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
class NumbersQuery extends Query<Numbers?, NumbersQueryWhere?> {
|
class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
|
||||||
NumbersQuery({Query? parent, Set<String>? trampoline})
|
NumbersQuery({Query? parent, Set<String>? trampoline})
|
||||||
: super(parent: parent) {
|
: super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
|
@ -85,19 +85,21 @@ class NumbersQuery extends Query<Numbers?, NumbersQueryWhere?> {
|
||||||
return NumbersQueryWhere(this);
|
return NumbersQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Numbers? parseRow(List row) {
|
static Optional<Numbers> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Numbers deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +148,7 @@ class NumbersQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
@ -190,8 +192,10 @@ class AlphabetQuery extends Query<Alphabet?, AlphabetQueryWhere?> {
|
||||||
return AlphabetQueryWhere(this);
|
return AlphabetQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Alphabet? parseRow(List row) {
|
static Optional<Alphabet> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Alphabet(
|
var model = Alphabet(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -199,14 +203,14 @@ class AlphabetQuery extends Query<Alphabet?, AlphabetQueryWhere?> {
|
||||||
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()).value);
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Alphabet deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
NumbersQuery? get numbers {
|
NumbersQuery? get numbers {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import 'package:angel_migration/angel_migration.dart';
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'email_indexed.g.dart';
|
part 'email_indexed.g.dart';
|
||||||
|
|
||||||
// * https://github.com/angel-dart/angel/issues/116
|
// * https://github.com/angel-dart/angel/issues/116
|
||||||
|
|
|
@ -75,7 +75,7 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
||||||
@override
|
@override
|
||||||
final RoleQueryValues values = RoleQueryValues();
|
final RoleQueryValues values = RoleQueryValues();
|
||||||
|
|
||||||
RoleQueryWhere? _where;
|
late RoleQueryWhere _where;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
get casts {
|
get casts {
|
||||||
|
@ -102,42 +102,44 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
||||||
return RoleQueryWhere(this);
|
return RoleQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Role? parseRow(List row) {
|
static Optional<Role> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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(
|
var rowData = UserQuery.parseRow(row.skip(1).take(3).toList());
|
||||||
users: [UserQuery.parseRow(row.skip(1).take(3).toList())]
|
if (rowData.isPresent) {
|
||||||
.where((x) => x != null)
|
model = model.copyWith(users: [rowData.value]);
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
return model;
|
}
|
||||||
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Role deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool canCompile(trampoline) {
|
bool canCompile(trampoline) {
|
||||||
return (!(trampoline?.contains('roles') == true &&
|
return (!(trampoline.contains('roles') == true &&
|
||||||
trampoline?.contains('role_users') == true));
|
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)..addAll(model!.users));
|
users: List<_User>.from(l.users)..addAll(model.users));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -146,16 +148,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!.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)..addAll(model!.users));
|
users: List<_User>.from(l.users)..addAll(model.users));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -165,15 +167,15 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
|
||||||
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)..addAll(model!.users));
|
users: List<_User>.from(l.users)..addAll(model.users));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -208,7 +210,7 @@ class RoleQueryValues 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();
|
||||||
|
@ -257,23 +259,30 @@ class RoleUserQuery extends Query<RoleUser?, RoleUserQueryWhere?> {
|
||||||
return RoleUserQueryWhere(this);
|
return RoleUserQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RoleUser? parseRow(List row) {
|
static Optional<RoleUser> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = RoleUser();
|
var model = RoleUser();
|
||||||
if (row.length > 2) {
|
if (row.length > 2) {
|
||||||
model = model.copyWith(
|
var r = RoleQuery.parseRow(row.skip(2).take(1).toList());
|
||||||
role: RoleQuery.parseRow(row.skip(2).take(1).toList()));
|
if (r.isPresent) {
|
||||||
|
model = model.copyWith(role: r.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (row.length > 3) {
|
if (row.length > 3) {
|
||||||
|
var u = UserQuery.parseRow(row.skip(3).take(3).toList());
|
||||||
|
if (u.isPresent) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
user: UserQuery.parseRow(row.skip(3).take(3).toList()));
|
user: UserQuery.parseRow(row.skip(3).take(3).toList()).value);
|
||||||
}
|
}
|
||||||
return model;
|
}
|
||||||
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
RoleUser deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
RoleQuery? get role {
|
RoleQuery? get role {
|
||||||
|
@ -342,7 +351,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 {
|
||||||
|
@ -360,7 +369,7 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
UserQueryWhere get where {
|
UserQueryWhere? get where {
|
||||||
return _where;
|
return _where;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,30 +378,34 @@ class UserQuery extends Query<User, UserQueryWhere> {
|
||||||
return UserQueryWhere(this);
|
return UserQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static User? parseRow(List row) {
|
static Optional<User> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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(
|
var d = RoleQuery.parseRow(row.skip(3).take(1).toList());
|
||||||
roles: [RoleQuery.parseRow(row.skip(3).take(1).toList())]
|
|
||||||
.where((x) => x != null)
|
model = model.copyWith(roles: [d.value]);
|
||||||
.toList());
|
// roles: [RoleQuery.parseRow(row.skip(3).take(1).toList())]
|
||||||
|
// .where((x) => x != null)
|
||||||
|
// .toList());
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
User deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool canCompile(trampoline) {
|
bool canCompile(trampoline) {
|
||||||
return (!(trampoline?.contains('users') == true &&
|
return (!(trampoline.contains('users') == true &&
|
||||||
trampoline?.contains('role_users') == true));
|
trampoline.contains('role_users') == true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -586,15 +599,12 @@ class User implements _User {
|
||||||
final List<_Role> roles;
|
final List<_Role> roles;
|
||||||
|
|
||||||
User copyWith(
|
User copyWith(
|
||||||
{String? email,
|
{String? email, String? name, String? password, List<_Role>? roles}) {
|
||||||
String? name,
|
|
||||||
String? password,
|
|
||||||
List<_Role> roles = const []}) {
|
|
||||||
return User(
|
return User(
|
||||||
email: email ?? this.email,
|
email: email ?? this.email,
|
||||||
name: name ?? this.name,
|
name: name ?? this.name,
|
||||||
password: password ?? this.password,
|
password: password ?? this.password,
|
||||||
roles: roles);
|
roles: roles ?? []);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator ==(other) {
|
bool operator ==(other) {
|
||||||
|
|
|
@ -2,6 +2,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
// import 'car.dart';
|
// import 'car.dart';
|
||||||
part 'has_car.g.dart';
|
part 'has_car.g.dart';
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ class HasCarMigration extends Migration {
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
class HasCarQuery extends Query<HasCar?, HasCarQueryWhere?> {
|
class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
|
||||||
HasCarQuery({Query? parent, Set<String>? trampoline})
|
HasCarQuery({Query? parent, Set<String>? trampoline})
|
||||||
: super(parent: parent) {
|
: super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
|
@ -65,19 +65,21 @@ class HasCarQuery extends Query<HasCar?, HasCarQueryWhere?> {
|
||||||
return HasCarQueryWhere(this);
|
return HasCarQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HasCar? parseRow(List row) {
|
static Optional<HasCar> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
HasCar deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'has_map.g.dart';
|
part 'has_map.g.dart';
|
||||||
|
|
||||||
// String _boolToCustom(bool v) => v ? 'yes' : 'no';
|
// String _boolToCustom(bool v) => v ? 'yes' : 'no';
|
||||||
|
|
|
@ -25,7 +25,7 @@ class HasMapMigration extends Migration {
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
class HasMapQuery extends Query<HasMap?, HasMapQueryWhere?> {
|
class HasMapQuery extends Query<HasMap, HasMapQueryWhere> {
|
||||||
HasMapQuery({Query? parent, Set<String>? trampoline})
|
HasMapQuery({Query? parent, Set<String>? trampoline})
|
||||||
: super(parent: parent) {
|
: super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
|
@ -63,17 +63,19 @@ class HasMapQuery extends Query<HasMap?, HasMapQueryWhere?> {
|
||||||
return HasMapQueryWhere(this);
|
return HasMapQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HasMap? parseRow(List row) {
|
static Optional<HasMap> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
HasMap deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'leg.g.dart';
|
part 'leg.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -45,7 +45,7 @@ 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);
|
||||||
|
@ -94,8 +94,10 @@ class LegQuery extends Query<Leg?, LegQueryWhere?> {
|
||||||
return LegQueryWhere(this);
|
return LegQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Leg? parseRow(List row) {
|
static Optional<Leg> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Leg(
|
var model = Leg(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -103,14 +105,14 @@ class LegQuery extends Query<Leg?, LegQueryWhere?> {
|
||||||
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()).value);
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Leg deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
FootQuery? get foot {
|
FootQuery? get foot {
|
||||||
|
@ -172,7 +174,7 @@ 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);
|
||||||
|
@ -209,20 +211,22 @@ class FootQuery extends Query<Foot?, FootQueryWhere?> {
|
||||||
return FootQueryWhere(this);
|
return FootQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Foot? parseRow(List row) {
|
static Optional<Foot> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Foot deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'order.g.dart';
|
part 'order.g.dart';
|
||||||
|
|
||||||
@orm
|
@orm
|
||||||
|
|
|
@ -48,7 +48,7 @@ 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);
|
||||||
|
@ -99,8 +99,10 @@ class OrderQuery extends Query<Order?, OrderQueryWhere?> {
|
||||||
return OrderQueryWhere(this);
|
return OrderQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Order? parseRow(List row) {
|
static Optional<Order> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Order(
|
var model = Order(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -110,14 +112,14 @@ class OrderQuery extends Query<Order?, OrderQueryWhere?> {
|
||||||
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()).value);
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Order deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomerQuery? get customer {
|
CustomerQuery? get customer {
|
||||||
|
@ -216,7 +218,7 @@ class OrderQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
@ -254,18 +256,20 @@ class CustomerQuery extends Query<Customer?, CustomerQueryWhere?> {
|
||||||
return CustomerQueryWhere(this);
|
return CustomerQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Customer? parseRow(List row) {
|
static Optional<Customer> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Customer deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'tree.g.dart';
|
part 'tree.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -45,7 +45,7 @@ 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);
|
||||||
|
@ -94,8 +94,10 @@ class TreeQuery extends Query<Tree?, TreeQueryWhere?> {
|
||||||
return TreeQueryWhere(this);
|
return TreeQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Tree? parseRow(List row) {
|
static Optional<Tree> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Tree(
|
var model = Tree(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -103,16 +105,14 @@ class TreeQuery extends Query<Tree?, TreeQueryWhere?> {
|
||||||
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()).value]);
|
||||||
.where((x) => x != null)
|
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Tree deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
FruitQuery? get fruits {
|
FruitQuery? get fruits {
|
||||||
|
@ -122,17 +122,17 @@ class TreeQuery extends Query<Tree?, TreeQueryWhere?> {
|
||||||
@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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -161,16 +161,16 @@ class TreeQuery extends Query<Tree?, TreeQueryWhere?> {
|
||||||
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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -231,7 +231,7 @@ 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);
|
||||||
|
@ -268,20 +268,22 @@ class FruitQuery extends Query<Fruit?, FruitQueryWhere?> {
|
||||||
return FruitQueryWhere(this);
|
return FruitQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Fruit? parseRow(List row) {
|
static Optional<Fruit> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Fruit deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'unorthodox.g.dart';
|
part 'unorthodox.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -105,7 +105,7 @@ 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();
|
||||||
|
@ -143,15 +143,17 @@ class UnorthodoxQuery extends Query<Unorthodox?, UnorthodoxQueryWhere?> {
|
||||||
return UnorthodoxQueryWhere(this);
|
return UnorthodoxQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Unorthodox? parseRow(List row) {
|
static Optional<Unorthodox> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Unorthodox(name: (row[0] as String?));
|
var model = Unorthodox(name: (row[0] as String?));
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Unorthodox deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +185,7 @@ class UnorthodoxQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
@ -252,35 +254,34 @@ class WeirdJoinQuery extends Query<WeirdJoin?, WeirdJoinQueryWhere?> {
|
||||||
return WeirdJoinQueryWhere(this);
|
return WeirdJoinQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WeirdJoin? parseRow(List row) {
|
static Optional<WeirdJoin> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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()).value);
|
||||||
}
|
}
|
||||||
if (row.length > 3) {
|
if (row.length > 3) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
song: SongQuery.parseRow(row.skip(3).take(5).toList()));
|
song: SongQuery.parseRow(row.skip(3).take(5).toList()).value);
|
||||||
}
|
}
|
||||||
if (row.length > 8) {
|
if (row.length > 8) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
numbas: [NumbaQuery.parseRow(row.skip(8).take(2).toList())]
|
numbas: [NumbaQuery.parseRow(row.skip(8).take(2).toList()).value]);
|
||||||
.where((x) => x != null)
|
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
if (row.length > 10) {
|
if (row.length > 10) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
foos: [FooQuery.parseRow(row.skip(10).take(1).toList())]
|
foos: [FooQuery.parseRow(row.skip(10).take(1).toList()).value]);
|
||||||
.where((x) => x != null)
|
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
WeirdJoin deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
UnorthodoxQuery? get unorthodox {
|
UnorthodoxQuery? get unorthodox {
|
||||||
|
@ -297,28 +298,25 @@ class WeirdJoinQuery extends Query<WeirdJoin?, WeirdJoinQueryWhere?> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool canCompile(trampoline) {
|
bool canCompile(trampoline) {
|
||||||
return (!(trampoline?.contains('weird_joins') == true &&
|
return (!(trampoline.contains('weird_joins') == true &&
|
||||||
trampoline?.contains('foo_pivots') == true));
|
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 == null
|
..addAll(List<_Numba>.from(model.numbas ?? [])),
|
||||||
? []
|
foos: List<_Foo?>.from(l.foos ?? [])..addAll(model.foos ?? []));
|
||||||
: List<_Numba>.from(model.numbas ?? [])),
|
|
||||||
foos: List<_Foo?>.from(l.foos ?? [])
|
|
||||||
..addAll(model?.foos ?? []));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -328,16 +326,16 @@ class WeirdJoinQuery extends Query<WeirdJoin?, WeirdJoinQueryWhere?> {
|
||||||
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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -348,16 +346,16 @@ class WeirdJoinQuery extends Query<WeirdJoin?, WeirdJoinQueryWhere?> {
|
||||||
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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -404,7 +402,7 @@ class WeirdJoinQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SongQuery extends Query<Song?, SongQueryWhere?> {
|
class SongQuery extends Query<Song, SongQueryWhere> {
|
||||||
SongQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
SongQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
trampoline.add(tableName);
|
trampoline.add(tableName);
|
||||||
|
@ -441,20 +439,22 @@ class SongQuery extends Query<Song?, SongQueryWhere?> {
|
||||||
return SongQueryWhere(this);
|
return SongQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Song? parseRow(List row) {
|
static Optional<Song> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Song deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,7 +521,7 @@ 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);
|
||||||
|
@ -558,15 +558,17 @@ class NumbaQuery extends Query<Numba?, NumbaQueryWhere?> {
|
||||||
return NumbaQueryWhere(this);
|
return NumbaQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Numba? parseRow(List row) {
|
static Optional<Numba> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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 Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Numba deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,7 +609,7 @@ class NumbaQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FooQuery extends Query<Foo?, FooQueryWhere?> {
|
class FooQuery extends Query<Foo, FooQueryWhere> {
|
||||||
FooQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
FooQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
trampoline.add(tableName);
|
trampoline.add(tableName);
|
||||||
|
@ -650,43 +652,44 @@ class FooQuery extends Query<Foo?, FooQueryWhere?> {
|
||||||
return FooQueryWhere(this);
|
return FooQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Foo? parseRow(List row) {
|
static Optional<Foo> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
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: [
|
||||||
weirdJoins: [WeirdJoinQuery.parseRow(row.skip(1).take(2).toList())]
|
WeirdJoinQuery.parseRow(row.skip(1).take(2).toList()).value
|
||||||
.where((x) => x != null)
|
]);
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Foo deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool canCompile(trampoline) {
|
bool canCompile(trampoline) {
|
||||||
return (!(trampoline?.contains('foos') == true &&
|
return (!(trampoline.contains('foos') == true &&
|
||||||
trampoline?.contains('foo_pivots') == true));
|
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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -695,17 +698,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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -714,17 +717,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 ?? []));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -759,7 +762,7 @@ class FooQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
@ -807,23 +810,26 @@ class FooPivotQuery extends Query<FooPivot?, FooPivotQueryWhere?> {
|
||||||
return FooPivotQueryWhere(this);
|
return FooPivotQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static FooPivot? parseRow(List row) {
|
static Optional<FooPivot> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = FooPivot();
|
var model = FooPivot();
|
||||||
if (row.length > 2) {
|
if (row.length > 2) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
weirdJoin: WeirdJoinQuery.parseRow(row.skip(2).take(2).toList()));
|
weirdJoin:
|
||||||
|
WeirdJoinQuery.parseRow(row.skip(2).take(2).toList()).value);
|
||||||
}
|
}
|
||||||
if (row.length > 4) {
|
if (row.length > 4) {
|
||||||
model =
|
model = model.copyWith(
|
||||||
model.copyWith(foo: FooQuery.parseRow(row.skip(4).take(1).toList()));
|
foo: FooQuery.parseRow(row.skip(4).take(1).toList()).value);
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
FooPivot deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
WeirdJoinQuery? get weirdJoin {
|
WeirdJoinQuery? get weirdJoin {
|
||||||
|
@ -1070,9 +1076,9 @@ class Foo implements _Foo {
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:optional/optional.dart';
|
||||||
|
|
||||||
part 'user.g.dart';
|
part 'user.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
|
|
|
@ -61,7 +61,7 @@ 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);
|
||||||
|
@ -111,8 +111,10 @@ class UserQuery extends Query<User?, UserQueryWhere?> {
|
||||||
return UserQueryWhere(this);
|
return UserQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static User? parseRow(List row) {
|
static Optional<User> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = User(
|
var model = User(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -122,37 +124,35 @@ class UserQuery extends Query<User?, UserQueryWhere?> {
|
||||||
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()).value]);
|
||||||
.where((x) => x != null)
|
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
User deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool canCompile(trampoline) {
|
bool canCompile(trampoline) {
|
||||||
return (!(trampoline?.contains('users') == true &&
|
return (!(trampoline.contains('users') == true &&
|
||||||
trampoline?.contains('role_users') == true));
|
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)..addAll(model!.roles));
|
roles: List<_Role>.from(l.roles)..addAll(model.roles));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -162,15 +162,15 @@ class UserQuery extends Query<User?, UserQueryWhere?> {
|
||||||
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)..addAll(model!.roles));
|
roles: List<_Role>.from(l.roles)..addAll(model.roles));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -180,15 +180,15 @@ class UserQuery extends Query<User?, UserQueryWhere?> {
|
||||||
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)..addAll(model!.roles));
|
roles: List<_Role>.from(l.roles)..addAll(model.roles));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -267,7 +267,7 @@ 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();
|
||||||
|
@ -324,23 +324,25 @@ class RoleUserQuery extends Query<RoleUser?, RoleUserQueryWhere?> {
|
||||||
return RoleUserQueryWhere(this);
|
return RoleUserQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RoleUser? parseRow(List row) {
|
static Optional<RoleUser> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = RoleUser();
|
var model = RoleUser();
|
||||||
if (row.length > 2) {
|
if (row.length > 2) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
role: RoleQuery.parseRow(row.skip(2).take(4).toList()));
|
role: RoleQuery.parseRow(row.skip(2).take(4).toList()).value);
|
||||||
}
|
}
|
||||||
if (row.length > 6) {
|
if (row.length > 6) {
|
||||||
model = model.copyWith(
|
model = model.copyWith(
|
||||||
user: UserQuery.parseRow(row.skip(6).take(6).toList()));
|
user: UserQuery.parseRow(row.skip(6).take(6).toList()).value);
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
RoleUser deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
RoleQuery? get role {
|
RoleQuery? get role {
|
||||||
|
@ -393,7 +395,7 @@ class RoleUserQueryValues extends MapQueryValues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RoleQuery extends Query<Role?, RoleQueryWhere?> {
|
class RoleQuery extends Query<Role, RoleQueryWhere> {
|
||||||
RoleQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
RoleQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
|
||||||
trampoline ??= Set();
|
trampoline ??= Set();
|
||||||
trampoline.add(tableName);
|
trampoline.add(tableName);
|
||||||
|
@ -443,8 +445,10 @@ class RoleQuery extends Query<Role?, RoleQueryWhere?> {
|
||||||
return RoleQueryWhere(this);
|
return RoleQueryWhere(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Role? parseRow(List row) {
|
static Optional<Role> parseRow(List row) {
|
||||||
if (row.every((x) => x == null)) return null;
|
if (row.every((x) => x == null)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
var model = Role(
|
var model = Role(
|
||||||
id: row[0].toString(),
|
id: row[0].toString(),
|
||||||
createdAt: (row[1] as DateTime?),
|
createdAt: (row[1] as DateTime?),
|
||||||
|
@ -452,37 +456,35 @@ class RoleQuery extends Query<Role?, RoleQueryWhere?> {
|
||||||
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()).value]);
|
||||||
.where((x) => x != null)
|
|
||||||
.toList());
|
|
||||||
}
|
}
|
||||||
return model;
|
return Optional.ofNullable(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
deserialize(List row) {
|
Role deserialize(List row) {
|
||||||
return parseRow(row);
|
return parseRow(row).value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool canCompile(trampoline) {
|
bool canCompile(trampoline) {
|
||||||
return (!(trampoline?.contains('roles') == true &&
|
return (!(trampoline.contains('roles') == true &&
|
||||||
trampoline?.contains('role_users') == true));
|
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)..addAll(model!.users));
|
users: List<_User>.from(l.users)..addAll(model.users));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -491,16 +493,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)..addAll(model!.users));
|
users: List<_User>.from(l.users)..addAll(model.users));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -510,15 +512,15 @@ class RoleQuery extends Query<Role?, RoleQueryWhere?> {
|
||||||
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)..addAll(model!.users));
|
users: List<_User>.from(l.users)..addAll(model.users));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,7 +24,7 @@ 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 = CarQuery().deserialize(row)!;
|
var car = 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');
|
||||||
|
@ -47,7 +47,7 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
|
|
||||||
group('selects', () {
|
group('selects', () {
|
||||||
test('select all', () async {
|
test('select all', () async {
|
||||||
List<Car?> cars = await CarQuery().get(executor);
|
List<Car> cars = await CarQuery().get(executor);
|
||||||
expect(cars, []);
|
expect(cars, []);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -60,19 +60,19 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
..make = 'Ferrari東'
|
..make = 'Ferrari東'
|
||||||
..description = 'Vroom vroom!'
|
..description = 'Vroom vroom!'
|
||||||
..familyFriendly = false;
|
..familyFriendly = false;
|
||||||
ferrari = await query.insert(executor);
|
ferrari = (await query.insert(executor)).value;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('where clause is applied', () async {
|
test('where clause is applied', () async {
|
||||||
var query = CarQuery()..where!.familyFriendly.isTrue;
|
var query = CarQuery()..where!.familyFriendly.isTrue;
|
||||||
List<Car?> cars = await query.get(executor);
|
List<Car> cars = await query.get(executor);
|
||||||
expect(cars, isEmpty);
|
expect(cars, isEmpty);
|
||||||
|
|
||||||
var sportsCars = CarQuery()..where!.familyFriendly.isFalse;
|
var sportsCars = 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);
|
||||||
|
@ -80,10 +80,10 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
});
|
});
|
||||||
|
|
||||||
test('union', () async {
|
test('union', () async {
|
||||||
var query1 = CarQuery()..where!.make.like('%Fer%');
|
var query1 = CarQuery()..where?.make.like('%Fer%');
|
||||||
var query2 = CarQuery()..where!.familyFriendly.isTrue;
|
var query2 = CarQuery()..where?.familyFriendly.isTrue;
|
||||||
var query3 = CarQuery()..where!.description.equals('Submarine');
|
var query3 = CarQuery()..where?.description.equals('Submarine');
|
||||||
Union<Car?> 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));
|
||||||
|
@ -93,17 +93,17 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
var query = CarQuery()
|
var query = 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()));
|
||||||
List<Car?> 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 = CarQuery()..limit(0);
|
var query = CarQuery()..limit(0);
|
||||||
print(query.compile(Set()));
|
print(query.compile(Set()));
|
||||||
List<Car?> cars = await query.get(executor);
|
List<Car> cars = await query.get(executor);
|
||||||
expect(cars, isEmpty);
|
expect(cars, isEmpty);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -120,28 +120,28 @@ standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
var car = await (query.deleteOne(executor) as FutureOr<Car>);
|
var car = await (query.deleteOne(executor) as FutureOr<Car>);
|
||||||
expect(car.toJson(), ferrari!.toJson());
|
expect(car.toJson(), ferrari!.toJson());
|
||||||
|
|
||||||
List<Car?> cars = await CarQuery().get(executor);
|
List<Car> cars = await CarQuery().get(executor);
|
||||||
expect(cars, isEmpty);
|
expect(cars, isEmpty);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('delete stream', () async {
|
test('delete stream', () async {
|
||||||
var query = CarQuery()
|
var query = 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"'));
|
||||||
|
|
||||||
List<Car?>? 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 = CarQuery()
|
var query = CarQuery()
|
||||||
..where!.id.equals(int.parse(ferrari!.id!))
|
..where!.id.equals(int.parse(ferrari!.id!))
|
||||||
..values.make = 'Hyundai';
|
..values.make = 'Hyundai';
|
||||||
List<Car?> 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 {
|
||||||
|
|
|
@ -38,6 +38,7 @@ dev_dependencies:
|
||||||
ref: sdk-2.12.x_nnbd
|
ref: sdk-2.12.x_nnbd
|
||||||
path: packages/framework
|
path: packages/framework
|
||||||
build_runner: ^2.0.1
|
build_runner: ^2.0.1
|
||||||
|
optional: ^6.0.0-nullsafety.2
|
||||||
|
|
||||||
#dependency_overrides:
|
#dependency_overrides:
|
||||||
# angel_orm:
|
# angel_orm:
|
||||||
|
|
Loading…
Reference in a new issue