Updated ORM Mysql

This commit is contained in:
thomashii 2022-05-07 15:23:58 +08:00
parent ae0120398c
commit 178bc924c1
27 changed files with 198 additions and 227 deletions

View file

@ -1,5 +1,9 @@
# Change Log # Change Log
## 6.0.1
* Added `mapToDateTime`
## 6.0.0 ## 6.0.0
* Updated to SDK 2.16.x * Updated to SDK 2.16.x

View file

@ -19,3 +19,27 @@ String mapToText(dynamic value) {
} }
return value; return value;
} }
DateTime? mapToDateTime(dynamic value) {
if (value == null) {
return value;
}
if (value is String) {
return DateTime.tryParse(value);
}
return value;
}
double mapToDouble(dynamic value) {
if (value == null) {
return 0.0;
}
if (value is String) {
return double.tryParse(value) ?? 0.0;
}
if (value is! double) {
return 0.0;
}
return value;
}

View file

@ -1,5 +1,5 @@
name: angel3_orm name: angel3_orm
version: 6.0.0 version: 6.0.1
description: Runtime support for Angel3 ORM. Includes base classes for queries. description: Runtime support for Angel3 ORM. Includes base classes for queries.
homepage: https://angel3-framework.web.app/ homepage: https://angel3-framework.web.app/
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm

View file

@ -1,5 +1,10 @@
# Change Log # Change Log
## 6.0.1
* Fixed timestamp or date field to DateTime mapping
* Fixed double or float field to double mapping
## 6.0.0 ## 6.0.0
* Updated to SDK 2.16.x * Updated to SDK 2.16.x

View file

@ -93,14 +93,12 @@ class EmployeeQuery extends Query<Employee, EmployeeQueryWhere> {
} }
var model = Employee( var model = Employee(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
uniqueId: fields.contains('unique_id') ? (row[3] as String?) : null, uniqueId: fields.contains('unique_id') ? (row[3] as String?) : null,
firstName: fields.contains('first_name') ? (row[4] as String?) : null, firstName: fields.contains('first_name') ? (row[4] as String?) : null,
lastName: fields.contains('last_name') ? (row[5] as String?) : null, lastName: fields.contains('last_name') ? (row[5] as String?) : null,
salary: fields.contains('salary') salary: fields.contains('salary') ? mapToDouble(row[6]) : null);
? double.tryParse(row[6].toString())
: null);
return Optional.of(model); return Optional.of(model);
} }

View file

@ -262,9 +262,10 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
.property('decode') .property('decode')
.call([expr.asA(refer('String'))]).asA(type); .call([expr.asA(refer('String'))]).asA(type);
} else if (floatTypes.contains(ctx.columns[field.name]?.type)) { } else if (floatTypes.contains(ctx.columns[field.name]?.type)) {
expr = refer('double') //expr = refer('double')
.property('tryParse') // .property('tryParse')
.call([expr.property('toString').call([])]); // .call([expr.property('toString').call([])]);
expr = refer('mapToDouble').call([expr]);
} else if (fType is InterfaceType && fType.element.isEnum) { } else if (fType is InterfaceType && fType.element.isEnum) {
var isNull = expr.equalTo(literalNull); var isNull = expr.equalTo(literalNull);
expr = isNull.conditional(literalNull, expr = isNull.conditional(literalNull,
@ -272,6 +273,10 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
} else if (fType.isDartCoreBool) { } else if (fType.isDartCoreBool) {
// Generated Code: mapToBool(row[i]) // Generated Code: mapToBool(row[i])
expr = refer('mapToBool').call([expr]); expr = refer('mapToBool').call([expr]);
} else if (fType.element?.displayName == 'DateTime') {
//print("fType: ${fType.element?.displayName}");
// Generated Code: mapToDateTime(row[i])
expr = refer('mapToDateTime').call([expr]);
} else { } else {
// Generated Code: (row[i] as type?) // Generated Code: (row[i] as type?)
expr = expr.asA(type); expr = expr.asA(type);

View file

@ -1,5 +1,5 @@
name: angel3_orm_generator name: angel3_orm_generator
version: 6.0.0 version: 6.0.1
description: Code generators for Angel3 ORM. Generates query builder classes. description: Code generators for Angel3 ORM. Generates query builder classes.
homepage: https://angel3-framework.web.app/ homepage: https://angel3-framework.web.app/
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator
@ -30,7 +30,7 @@ dev_dependencies:
postgres: ^2.4.0 postgres: ^2.4.0
test: ^1.21.0 test: ^1.21.0
lints: ^1.0.0 lints: ^1.0.0
# dependency_overrides: dependency_overrides:
# angel3_container: # angel3_container:
# path: ../../container/angel_container # path: ../../container/angel_container
# angel3_framework: # angel3_framework:
@ -47,8 +47,8 @@ dev_dependencies:
# path: ../../serialize/angel_serialize # path: ../../serialize/angel_serialize
# angel3_serialize_generator: # angel3_serialize_generator:
# path: ../../serialize/angel_serialize_generator # path: ../../serialize/angel_serialize_generator
# angel3_orm: angel3_orm:
# path: ../angel_orm path: ../angel_orm
# angel3_migration: # angel3_migration:
# path: ../angel_migration # path: ../angel_migration

View file

@ -1,5 +1,10 @@
# Change Log # Change Log
## 6.0.0-beta.3
* Updated transaction for `MariaDbExecutor`
* Updated transaction for `MySqlExecutor`
## 6.0.0-beta.2 ## 6.0.0-beta.2
* Updated README * Updated README

View file

@ -81,8 +81,8 @@ class TodoQuery extends Query<Todo, TodoQueryWhere> {
} }
var model = Todo( var model = Todo(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
isComplete: fields.contains('is_complete') ? mapToBool(row[3]) : null, isComplete: fields.contains('is_complete') ? mapToBool(row[3]) : null,
text: fields.contains('text') ? (row[4] as String?) : null); text: fields.contains('text') ? (row[4] as String?) : null);
return Optional.of(model); return Optional.of(model);

View file

@ -4,12 +4,14 @@ import 'package:logging/logging.dart';
import 'package:mysql1/mysql1.dart'; import 'package:mysql1/mysql1.dart';
class MariaDbExecutor extends QueryExecutor { class MariaDbExecutor extends QueryExecutor {
/// An optional [Logger] to write to. /// An optional [Logger] print information to. A default logger will be used if not set
final Logger? logger; late Logger logger;
final MySqlConnection _connection; final MySqlConnection _connection;
MariaDbExecutor(this._connection, {this.logger}); MariaDbExecutor(this._connection, {Logger? logger}) {
this.logger = logger ?? Logger('MariaDbExecutor');
}
final Dialect _dialect = const MySQLDialect(); final Dialect _dialect = const MySQLDialect();
@ -18,65 +20,7 @@ class MariaDbExecutor extends QueryExecutor {
Future<void> close() { Future<void> close() {
return _connection.close(); return _connection.close();
/*
if (_connection is MySqlConnection) {
return (_connection as MySqlConnection).close();
} else {
return Future.value();
} }
*/
}
/*
Future<Transaction> _startTransaction() {
if (_connection is Transaction) {
return Future.value(_connection as Transaction?);
} else if (_connection is MySqlConnection) {
return (_connection as MySqlConnection).begin();
} else {
throw StateError('Connection must be transaction or connection');
}
}
@override
Future<List<List>> query(
String tableName, String query, Map<String, dynamic> substitutionValues,
[List<String> returningFields = const []]) {
// Change @id -> ?
for (var name in substitutionValues.keys) {
query = query.replaceAll('@$name', '?');
}
logger?.fine('Query: $query');
logger?.fine('Values: $substitutionValues');
if (returningFields.isNotEmpty != true) {
return _connection!
.prepared(query, substitutionValues.values)
.then((results) => results.map((r) => r.toList()).toList());
} else {
return Future(() async {
var tx = await _startTransaction();
try {
var writeResults =
await tx.prepared(query, substitutionValues.values);
var fieldSet = returningFields.map((s) => '`$s`').join(',');
var fetchSql = 'select $fieldSet from $tableName where id = ?;';
logger?.fine(fetchSql);
var readResults =
await tx.prepared(fetchSql, [writeResults.insertId]);
var mapped = readResults.map((r) => r.toList()).toList();
await tx.commit();
return mapped;
} catch (_) {
await tx.rollback();
rethrow;
}
});
}
}
*/
@override @override
Future<List<List>> query( Future<List<List>> query(
@ -103,7 +47,6 @@ class MariaDbExecutor extends QueryExecutor {
query = returningQuery; query = returningQuery;
// logger?.warning('Result.insertId: ${result.insertId}'); // logger?.warning('Result.insertId: ${result.insertId}');
// Has primary key // Has primary key
//if (result.insertId != 0) {
if (returningQuery.endsWith('.id=?')) { if (returningQuery.endsWith('.id=?')) {
params = [result.insertId]; params = [result.insertId];
} }
@ -122,35 +65,20 @@ class MariaDbExecutor extends QueryExecutor {
@override @override
Future<T> transaction<T>(FutureOr<T> Function(QueryExecutor) f) async { Future<T> transaction<T>(FutureOr<T> Function(QueryExecutor) f) async {
return f(this); T? returnValue = await _connection.transaction((ctx) async {
/* var conn = ctx as MySqlConnection;
if (_connection is! MySqlConnection) {
return await f(this);
}
await _connection.transaction((context) async {
var executor = MySqlExecutor(context, logger: logger);
});
*/
}
/*
@override
Future<T> transaction<T>(FutureOr<T> Function(QueryExecutor) f) async {
if (_connection is Transaction) {
return await f(this);
}
Transaction? tx;
try { try {
tx = await _startTransaction(); logger.fine('Entering transaction');
var executor = MySqlExecutor(tx, logger: logger); var tx = MariaDbExecutor(conn, logger: logger);
var result = await f(executor); return await f(tx);
await tx.commit(); } catch (e) {
return result; logger.severe('Failed to run transaction', e);
} catch (_) {
await tx?.rollback();
rethrow; rethrow;
} finally {
logger.fine('Exiting transaction');
}
});
return returnValue!;
} }
} }
*/
}

View file

@ -4,12 +4,14 @@ import 'package:logging/logging.dart';
import 'package:mysql_client/mysql_client.dart'; import 'package:mysql_client/mysql_client.dart';
class MySqlExecutor extends QueryExecutor { class MySqlExecutor extends QueryExecutor {
/// An optional [Logger] to write to. /// An optional [Logger] to write to. A default logger will be used if not set
final Logger? logger; late Logger logger;
final MySQLConnection _connection; final MySQLConnection _connection;
MySqlExecutor(this._connection, {this.logger}); MySqlExecutor(this._connection, {Logger? logger}) {
this.logger = logger ?? Logger('MySqlExecutor');
}
final Dialect _dialect = const MySQLDialect(); final Dialect _dialect = const MySQLDialect();
@ -18,13 +20,6 @@ class MySqlExecutor extends QueryExecutor {
Future<void> close() { Future<void> close() {
return _connection.close(); return _connection.close();
/*
if (_connection is MySqlConnection) {
return (_connection as MySqlConnection).close();
} else {
return Future.value();
}
*/
} }
/* /*
@ -86,13 +81,23 @@ class MySqlExecutor extends QueryExecutor {
// Change @id -> ? // Change @id -> ?
for (var name in substitutionValues.keys) { for (var name in substitutionValues.keys) {
query = query.replaceAll('@$name', ':$name'); query = query.replaceAll('@$name', ':$name');
// Convert UTC time to local time
var value = substitutionValues[name];
if (value is DateTime && value.isUtc) {
var t = value.toLocal();
logger.warning('Datetime deteted: $name');
logger.warning('Datetime: UTC -> $value, Local -> $t');
substitutionValues[name] = t;
}
} }
//var params = substitutionValues.values.toList(); //var params = substitutionValues.values.toList();
var params = []; //var params = [];
logger?.warning('Query: $query'); logger.warning('Query: $query');
logger?.warning('Values: $substitutionValues'); logger.warning('Values: $substitutionValues');
//logger?.warning('Returning Query: $returningQuery'); //logger?.warning('Returning Query: $returningQuery');
if (returningQuery.isNotEmpty) { if (returningQuery.isNotEmpty) {
@ -101,35 +106,28 @@ class MySqlExecutor extends QueryExecutor {
if (query.startsWith("INSERT")) { if (query.startsWith("INSERT")) {
var result = await _connection.execute(query, substitutionValues); var result = await _connection.execute(query, substitutionValues);
logger?.warning(result.lastInsertID); logger.warning(result.lastInsertID);
query = returningQuery; query = returningQuery;
//logger?.warning('Result.insertId: ${result.insertId}'); //logger?.warning('Result.insertId: ${result.insertId}');
// Has primary key // Has primary key
//if (result.insertId != 0) {
if (returningQuery.endsWith('.id=?')) { if (returningQuery.endsWith('.id=?')) {
query = query.replaceAll("?", ":id"); query = query.replaceAll("?", ":id");
//params = [result.lastInsertID];
substitutionValues.clear(); substitutionValues.clear();
substitutionValues['id'] = result.lastInsertID; substitutionValues['id'] = result.lastInsertID;
} }
} else if (query.startsWith("UPDATE")) { } else if (query.startsWith("UPDATE")) {
await _connection.execute(query, substitutionValues); await _connection.execute(query, substitutionValues);
query = returningQuery; query = returningQuery;
params = [];
} }
} }
logger?.warning('Query 2: $query'); logger.warning('Query 2: $query');
logger?.warning('Values 2: $substitutionValues'); logger.warning('Values 2: $substitutionValues');
// Handle select // Handle select
return _connection.execute(query, substitutionValues).then((results) { return _connection.execute(query, substitutionValues).then((results) {
logger?.warning("SELECT"); logger.warning("SELECT");
//for (var element in results.cols) {
// print(
// '${element.name} ${element.type.toString()} ${element.runtimeType.toString()}');
//}
return results.rows.map((r) => r.typedAssoc().values.toList()).toList(); return results.rows.map((r) => r.typedAssoc().values.toList()).toList();
}); });
@ -137,17 +135,22 @@ class MySqlExecutor extends QueryExecutor {
@override @override
Future<T> transaction<T>(FutureOr<T> Function(QueryExecutor) f) async { Future<T> transaction<T>(FutureOr<T> Function(QueryExecutor) f) async {
logger?.warning("Transaction"); logger.warning("Transaction");
return f(this);
/*
if (_connection is! MySqlConnection) {
return await f(this);
}
await _connection.transaction((context) async { T? returnValue = await _connection.transactional((ctx) async {
var executor = MySqlExecutor(context, logger: logger); try {
logger.fine('Entering transaction');
var tx = MySqlExecutor(ctx, logger: logger);
return await f(tx);
} catch (e) {
logger.severe('Failed to run transaction', e);
rethrow;
} finally {
logger.fine('Exiting transaction');
}
}); });
*/
return returnValue!;
} }
/* /*
@override @override

View file

@ -1,5 +1,5 @@
name: angel3_orm_mysql name: angel3_orm_mysql
version: 6.0.0-beta.2 version: 6.0.0-beta.3
description: MySQL support for Angel3 ORM. Includes functionality for querying and transactions. description: MySQL support for Angel3 ORM. Includes functionality for querying and transactions.
homepage: https://angel3-framework.web.app/ homepage: https://angel3-framework.web.app/
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_mysql repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_mysql
@ -9,7 +9,7 @@ dependencies:
angel3_orm: ^6.0.0 angel3_orm: ^6.0.0
logging: ^1.0.0 logging: ^1.0.0
mysql1: ^0.19.0 mysql1: ^0.19.0
mysql_client: ^0.0.11 mysql_client: ^0.0.15
optional: ^6.0.0 optional: ^6.0.0
dev_dependencies: dev_dependencies:
angel3_orm_generator: ^6.0.0 angel3_orm_generator: ^6.0.0
@ -17,18 +17,18 @@ dev_dependencies:
build_runner: ^2.0.1 build_runner: ^2.0.1
test: ^1.21.0 test: ^1.21.0
lints: ^1.0.0 lints: ^1.0.0
# dependency_overrides: dependency_overrides:
# angel3_serialize: # angel3_serialize:
# path: ../../serialize/angel_serialize # path: ../../serialize/angel_serialize
# angel3_serialize_generator: # angel3_serialize_generator:
# path: ../../serialize/angel_serialize_generator # path: ../../serialize/angel_serialize_generator
# angel3_model: # angel3_model:
# path: ../../model # path: ../../model
# angel3_orm_test: angel3_orm_test:
# path: ../angel_orm_test path: ../angel_orm_test
# angel3_orm: angel3_orm:
# path: ../angel_orm path: ../angel_orm
angel3_orm_generator:
path: ../angel_orm_generator
# angel3_migration: # angel3_migration:
# path: ../angel_migration # path: ../angel_migration
# angel3_orm_generator:
# path: ../angel_orm_generator

View file

@ -9,7 +9,8 @@ import 'package:postgres/postgres.dart';
class PostgreSqlExecutor extends QueryExecutor { class PostgreSqlExecutor extends QueryExecutor {
final PostgreSQLExecutionContext _connection; final PostgreSQLExecutionContext _connection;
/// An optional [Logger] to print information to. /// An optional [Logger] to print information to. A default logger will be used
/// if not set
late Logger logger; late Logger logger;
PostgreSqlExecutor(this._connection, {Logger? logger}) { PostgreSqlExecutor(this._connection, {Logger? logger}) {

View file

@ -16,14 +16,14 @@ dev_dependencies:
angel3_orm_test: ^6.0.0 angel3_orm_test: ^6.0.0
test: ^1.21.0 test: ^1.21.0
lints: ^1.0.0 lints: ^1.0.0
# dependency_overrides: dependency_overrides:
# angel3_serialize: # angel3_serialize:
# path: ../../serialize/angel_serialize # path: ../../serialize/angel_serialize
# angel3_model: # angel3_model:
# path: ../../model # path: ../../model
# angel3_orm_test: angel3_orm_test:
# path: ../angel_orm_test path: ../angel_orm_test
# angel3_orm: angel3_orm:
# path: ../angel_orm path: ../angel_orm
# angel3_migration: # angel3_migration:
# path: ../angel_migration # path: ../angel_migration

View file

@ -1,5 +1,9 @@
# Change Log # Change Log
## 6.0.1
* Updated generated test cases
## 6.0.0 ## 6.0.0
* Updated to SDK 2.16.x * Updated to SDK 2.16.x

View file

@ -122,8 +122,8 @@ class BookQuery extends Query<Book, BookQueryWhere> {
} }
var model = Book( var model = Book(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
name: fields.contains('name') ? (row[5] as String?) : null); name: fields.contains('name') ? (row[5] as String?) : null);
if (row.length > 6) { if (row.length > 6) {
var modelOpt = AuthorQuery().parseRow(row.skip(6).take(4).toList()); var modelOpt = AuthorQuery().parseRow(row.skip(6).take(4).toList());
@ -285,8 +285,8 @@ class AuthorQuery extends Query<Author, AuthorQueryWhere> {
} }
var model = Author( var model = Author(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
name: fields.contains('name') ? (row[3] as String?) : null); name: fields.contains('name') ? (row[3] as String?) : null);
return Optional.of(model); return Optional.of(model);
} }

View file

@ -91,15 +91,15 @@ class CarQuery extends Query<Car, CarQueryWhere> {
} }
var model = Car( var model = Car(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
make: fields.contains('make') ? (row[3] as String?) : null, make: fields.contains('make') ? (row[3] as String?) : null,
description: description:
fields.contains('description') ? (row[4] as String?) : null, fields.contains('description') ? (row[4] as String?) : null,
familyFriendly: familyFriendly:
fields.contains('family_friendly') ? mapToBool(row[5]) : null, fields.contains('family_friendly') ? mapToBool(row[5]) : null,
recalledAt: recalledAt:
fields.contains('recalled_at') ? (row[6] as DateTime?) : null); fields.contains('recalled_at') ? mapToDateTime(row[6]) : null);
return Optional.of(model); return Optional.of(model);
} }

View file

@ -101,8 +101,8 @@ class NumbersQuery extends Query<Numbers, NumbersQueryWhere> {
} }
var model = Numbers( var model = Numbers(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
two: fields.contains('two') ? (row[3] as int?) : null); two: fields.contains('two') ? (row[3] as int?) : null);
return Optional.of(model); return Optional.of(model);
} }
@ -218,8 +218,8 @@ class AlphabetQuery extends Query<Alphabet, AlphabetQueryWhere> {
} }
var model = Alphabet( var model = Alphabet(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
value: fields.contains('value') ? (row[3] as String?) : null); value: fields.contains('value') ? (row[3] as String?) : null);
if (row.length > 5) { if (row.length > 5) {
var modelOpt = NumbersQuery().parseRow(row.skip(5).take(4).toList()); var modelOpt = NumbersQuery().parseRow(row.skip(5).take(4).toList());

View file

@ -81,8 +81,8 @@ class HasCarQuery extends Query<HasCar, HasCarQueryWhere> {
} }
var model = HasCar( var model = HasCar(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
type: fields.contains('type') type: fields.contains('type')
? row[3] == null ? row[3] == null
? null ? null

View file

@ -111,8 +111,8 @@ class LegQuery extends Query<Leg, LegQueryWhere> {
} }
var model = Leg( var model = Leg(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
name: fields.contains('name') ? (row[3] as String?) : null); name: fields.contains('name') ? (row[3] as String?) : null);
if (row.length > 4) { if (row.length > 4) {
var modelOpt = FootQuery().parseRow(row.skip(4).take(5).toList()); var modelOpt = FootQuery().parseRow(row.skip(4).take(5).toList());
@ -240,12 +240,10 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
} }
var model = Foot( var model = Foot(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
legId: fields.contains('leg_id') ? (row[3] as int?) : null, legId: fields.contains('leg_id') ? (row[3] as int?) : null,
nToes: fields.contains('n_toes') nToes: fields.contains('n_toes') ? mapToDouble(row[4]) : null);
? double.tryParse(row[4].toString())
: null);
return Optional.of(model); return Optional.of(model);
} }

View file

@ -115,10 +115,10 @@ class OrderQuery extends Query<Order, OrderQueryWhere> {
} }
var model = Order( var model = Order(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
employeeId: fields.contains('employee_id') ? (row[4] as int?) : null, employeeId: fields.contains('employee_id') ? (row[4] as int?) : null,
orderDate: fields.contains('order_date') ? (row[5] as DateTime?) : null, orderDate: fields.contains('order_date') ? mapToDateTime(row[5]) : null,
shipperId: fields.contains('shipper_id') ? (row[6] as int?) : null); shipperId: fields.contains('shipper_id') ? (row[6] as int?) : null);
if (row.length > 7) { if (row.length > 7) {
var modelOpt = CustomerQuery().parseRow(row.skip(7).take(3).toList()); var modelOpt = CustomerQuery().parseRow(row.skip(7).take(3).toList());
@ -284,9 +284,9 @@ class CustomerQuery extends Query<Customer, CustomerQueryWhere> {
} }
var model = Customer( var model = Customer(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: updatedAt:
fields.contains('updated_at') ? (row[2] as DateTime?) : null); fields.contains('updated_at') ? mapToDateTime(row[2]) : null);
return Optional.of(model); return Optional.of(model);
} }

View file

@ -82,8 +82,8 @@ class PersonQuery extends Query<Person, PersonQueryWhere> {
} }
var model = Person( var model = Person(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
name: fields.contains('name') ? (row[3] as String?) : null, name: fields.contains('name') ? (row[3] as String?) : null,
age: fields.contains('age') ? (row[4] as int?) : null); age: fields.contains('age') ? (row[4] as int?) : null);
return Optional.of(model); return Optional.of(model);

View file

@ -93,13 +93,11 @@ class PersonOrderQuery extends Query<PersonOrder, PersonOrderQueryWhere> {
} }
var model = PersonOrder( var model = PersonOrder(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
personId: fields.contains('person_id') ? (row[3] as int?) : null, personId: fields.contains('person_id') ? (row[3] as int?) : null,
name: fields.contains('name') ? (row[4] as String?) : null, name: fields.contains('name') ? (row[4] as String?) : null,
price: fields.contains('price') price: fields.contains('price') ? mapToDouble(row[5]) : null,
? double.tryParse(row[5].toString())
: null,
deleted: fields.contains('deleted') ? mapToBool(row[6]) : null); deleted: fields.contains('deleted') ? mapToBool(row[6]) : null);
return Optional.of(model); return Optional.of(model);
} }
@ -258,12 +256,10 @@ class OrderWithPersonInfoQuery
} }
var model = OrderWithPersonInfo( var model = OrderWithPersonInfo(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
name: fields.contains('name') ? (row[3] as String?) : null, name: fields.contains('name') ? (row[3] as String?) : null,
price: fields.contains('price') price: fields.contains('price') ? mapToDouble(row[4]) : null,
? double.tryParse(row[4].toString())
: null,
deleted: fields.contains('deleted') ? mapToBool(row[5]) : null, deleted: fields.contains('deleted') ? mapToBool(row[5]) : null,
personName: fields.contains('person_name') ? (row[6] as String?) : null, personName: fields.contains('person_name') ? (row[6] as String?) : null,
personAge: fields.contains('person_age') ? (row[7] as int?) : null); personAge: fields.contains('person_age') ? (row[7] as int?) : null);

View file

@ -110,8 +110,8 @@ class TreeQuery extends Query<Tree, TreeQueryWhere> {
} }
var model = Tree( var model = Tree(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
rings: fields.contains('rings') ? (row[3] as int?) : null); rings: fields.contains('rings') ? (row[3] as int?) : null);
if (row.length > 4) { if (row.length > 4) {
var modelOpt = FruitQuery().parseRow(row.skip(4).take(5).toList()); var modelOpt = FruitQuery().parseRow(row.skip(4).take(5).toList());
@ -299,8 +299,8 @@ class FruitQuery extends Query<Fruit, FruitQueryWhere> {
} }
var model = Fruit( var model = Fruit(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
treeId: fields.contains('tree_id') ? (row[3] as int?) : null, treeId: fields.contains('tree_id') ? (row[3] as int?) : null,
commonName: commonName:
fields.contains('common_name') ? (row[4] as String?) : null); fields.contains('common_name') ? (row[4] as String?) : null);

View file

@ -486,8 +486,8 @@ class SongQuery extends Query<Song, SongQueryWhere> {
} }
var model = Song( var model = Song(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
weirdJoinId: fields.contains('weird_join_id') ? (row[3] as int?) : null, weirdJoinId: fields.contains('weird_join_id') ? (row[3] as int?) : null,
title: fields.contains('title') ? (row[4] as String?) : null); title: fields.contains('title') ? (row[4] as String?) : null);
return Optional.of(model); return Optional.of(model);

View file

@ -127,8 +127,8 @@ class UserQuery extends Query<User, UserQueryWhere> {
} }
var model = User( var model = User(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
username: fields.contains('username') ? (row[3] as String?) : null, username: fields.contains('username') ? (row[3] as String?) : null,
password: fields.contains('password') ? (row[4] as String?) : null, password: fields.contains('password') ? (row[4] as String?) : null,
email: fields.contains('email') ? (row[5] as String?) : null); email: fields.contains('email') ? (row[5] as String?) : null);
@ -487,8 +487,8 @@ class RoleQuery extends Query<Role, RoleQueryWhere> {
} }
var model = Role( var model = Role(
id: fields.contains('id') ? row[0].toString() : null, id: fields.contains('id') ? row[0].toString() : null,
createdAt: fields.contains('created_at') ? (row[1] as DateTime?) : null, createdAt: fields.contains('created_at') ? mapToDateTime(row[1]) : null,
updatedAt: fields.contains('updated_at') ? (row[2] as DateTime?) : null, updatedAt: fields.contains('updated_at') ? mapToDateTime(row[2]) : null,
name: fields.contains('name') ? (row[3] as String?) : null); name: fields.contains('name') ? (row[3] as String?) : null);
if (row.length > 4) { if (row.length > 4) {
var modelOpt = UserQuery().parseRow(row.skip(4).take(6).toList()); var modelOpt = UserQuery().parseRow(row.skip(4).take(6).toList());

View file

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