Updated ORM generator
This commit is contained in:
parent
f28ba22bb4
commit
f9b07b2477
28 changed files with 108 additions and 76 deletions
|
@ -1,5 +1,10 @@
|
|||
# Change Log
|
||||
|
||||
## 4.0.4
|
||||
|
||||
* Updated README
|
||||
* Removed deprecated
|
||||
|
||||
## 4.0.3
|
||||
|
||||
* Updated README
|
||||
|
|
|
@ -10,5 +10,5 @@ A database migration framework built for Angel3 ORM.
|
|||
## Supported database
|
||||
|
||||
* PostgreSQL version 10 or later
|
||||
* MySQL 8.0 or later
|
||||
* MariaDB 10.2.1 or later
|
||||
* MySQL 8.0.x
|
||||
* MariaDB 10.2.x
|
||||
|
|
|
@ -19,8 +19,8 @@ abstract class Table {
|
|||
|
||||
MigrationColumn date(String name) => declare(name, ColumnType.date);
|
||||
|
||||
@deprecated
|
||||
MigrationColumn dateTime(String name) => timeStamp(name, timezone: true);
|
||||
//@deprecated
|
||||
//MigrationColumn dateTime(String name) => timeStamp(name, timezone: true);
|
||||
|
||||
MigrationColumn timeStamp(String name, {bool timezone = false}) {
|
||||
if (timezone != true) return declare(name, ColumnType.timeStamp);
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
name: angel3_migration
|
||||
version: 4.0.3
|
||||
version: 4.1.0
|
||||
description: Database migration runtime for Angel3 ORM. Use this package to define schemas.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_migration
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
dependencies:
|
||||
angel3_orm: ^4.0.0
|
||||
angel3_orm: ^4.1.0
|
||||
dev_dependencies:
|
||||
lints: ^1.0.0
|
||||
dependency_overrides:
|
||||
angel3_orm:
|
||||
path: ../angel_orm
|
|
@ -1,5 +1,9 @@
|
|||
# Change Log
|
||||
|
||||
## 4.1.2
|
||||
|
||||
* Updated README
|
||||
|
||||
## 4.1.1
|
||||
|
||||
* Updated README
|
||||
|
|
|
@ -10,5 +10,5 @@ Command-line based database migration runner for Angel3 ORM.
|
|||
Supported database:
|
||||
|
||||
* PostgreSQL version 10 or later
|
||||
* MySQL 8.0 or later
|
||||
* MariaDB 10.2.1 or later
|
||||
* MySQL 8.0.x
|
||||
* MariaDB 10.2.x
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
name: angel3_migration_runner
|
||||
version: 4.1.1
|
||||
version: 4.1.2
|
||||
description: Command-line based database migration runner for Angel3's ORM.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_migration_runner
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
dependencies:
|
||||
angel3_migration: ^4.0.0
|
||||
angel3_orm: ^4.0.0
|
||||
angel3_migration: ^4.1.0
|
||||
angel3_orm: ^4.1.0
|
||||
args: ^2.1.0
|
||||
charcode: ^1.2.0
|
||||
postgres: ^2.4.0
|
||||
|
@ -15,4 +15,8 @@ dependencies:
|
|||
logging: ^1.0.0
|
||||
dev_dependencies:
|
||||
lints: ^1.0.0
|
||||
|
||||
dependency_overrides:
|
||||
angel3_orm:
|
||||
path: ../angel_orm
|
||||
angel3_migration:
|
||||
path: ../angel_migration
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
# Change Log
|
||||
|
||||
## 4.1.0
|
||||
|
||||
* Added `MySQLDialect` to handle MySQL database specific features
|
||||
* Updated `insert` and `update` query to support database without writable CTE
|
||||
|
||||
## 4.0.6
|
||||
|
||||
* Fixed multiple `orderBy` error
|
||||
|
|
|
@ -10,6 +10,7 @@ Runtime support for Angel3 ORM. Includes a clean, database-agnostic query builde
|
|||
## Supported database
|
||||
|
||||
* PostgreSQL version 10, 11, 12, 13 and 14
|
||||
* MySQL 8.0 or later
|
||||
* MariaDB 10.2.x
|
||||
* MySQL 8.0.x
|
||||
|
||||
For documentation about the ORM, see [Developer Guide](https://angel3-docs.dukefirehawk.com/guides/orm)
|
||||
|
|
|
@ -343,7 +343,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
Future<List<T>> delete(QueryExecutor executor) {
|
||||
var sql = compile({}, preamble: 'DELETE', withFields: false);
|
||||
|
||||
//_log.fine("Delete Query = $sql");
|
||||
//_log.warning("Delete Query = $sql");
|
||||
|
||||
if (_joins.isEmpty) {
|
||||
return executor
|
||||
|
@ -379,14 +379,20 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
var returning = fields.map(adornWithTableName).join(', ');
|
||||
sql = 'WITH $tableName as ($insertion RETURNING $returning) ' + sql;
|
||||
} else if (executor.dialect is MySQLDialect) {
|
||||
var returningSelect = values?.compileInsertSelect(this, tableName);
|
||||
returningSql = '$sql where $returningSelect';
|
||||
// Default to using 'id' as primary key in model
|
||||
if (fields.contains("id")) {
|
||||
returningSql = '$sql where $tableName.id=?';
|
||||
} else {
|
||||
var returningSelect = values?.compileInsertSelect(this, tableName);
|
||||
returningSql = '$sql where $returningSelect';
|
||||
}
|
||||
|
||||
sql = '$insertion';
|
||||
} else {
|
||||
throw ArgumentError("Unsupported database dialect.");
|
||||
}
|
||||
|
||||
_log.warning("Insert Query = $sql");
|
||||
//_log.warning("Insert Query = $sql");
|
||||
|
||||
return executor
|
||||
.query(tableName, sql, substitutionValues,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: angel3_orm
|
||||
version: 4.0.6
|
||||
version: 4.1.0
|
||||
description: Runtime support for Angel3 ORM. Includes base classes for queries.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
# Change Log
|
||||
|
||||
## 5.0.0
|
||||
|
||||
* Updated `analyzer` to version 3.x
|
||||
* Updated min SDK to 2.14.x
|
||||
|
||||
## 4.3.0
|
||||
|
||||
* Added `where.raw()`
|
||||
|
|
|
@ -21,8 +21,12 @@ class _FakeExecutor extends QueryExecutor {
|
|||
|
||||
@override
|
||||
Future<List<List>> query(
|
||||
String tableName, String? query, Map<String, dynamic> substitutionValues,
|
||||
[returningFields = const []]) async {
|
||||
String tableName,
|
||||
String? query,
|
||||
Map<String, dynamic> substitutionValues, {
|
||||
String returningQuery = '',
|
||||
List<String> returningFields = const [],
|
||||
}) async {
|
||||
var now = DateTime.now();
|
||||
print(
|
||||
'_FakeExecutor received query: $query and values: $substitutionValues');
|
||||
|
@ -35,6 +39,10 @@ class _FakeExecutor extends QueryExecutor {
|
|||
Future<T> transaction<T>(FutureOr<T> Function(QueryExecutor) f) {
|
||||
throw UnsupportedError('Transactions are not supported.');
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO: implement dialect
|
||||
Dialect get dialect => PostgreSQLDialect();
|
||||
}
|
||||
|
||||
@orm
|
||||
|
|
|
@ -110,7 +110,8 @@ class OrmGenerator extends GeneratorForAnnotation<Orm> {
|
|||
var type = ctx.columns[field.name]?.type;
|
||||
if (type == null) continue;
|
||||
if (floatTypes.contains(type)) {
|
||||
args[name] = literalString('text');
|
||||
//args[name] = literalString('text');
|
||||
args[name] = literalString('char');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
name: angel3_orm_generator
|
||||
version: 4.3.0
|
||||
version: 5.0.0
|
||||
description: Code generators for Angel3 ORM. Generates query builder classes.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
sdk: '>=2.14.0 <3.0.0'
|
||||
dependencies:
|
||||
analyzer: ^2.0.0
|
||||
analyzer: ^3.0.0
|
||||
angel3_model: ^3.0.0
|
||||
angel3_serialize: ^4.0.0
|
||||
angel3_orm: ^4.0.0
|
||||
angel3_serialize_generator: ^4.0.0
|
||||
angel3_orm: ^4.1.0
|
||||
angel3_serialize_generator: ^5.0.0
|
||||
inflection3: ^0.5.3+1
|
||||
build: ^2.0.1
|
||||
build_config: ^1.0.0
|
||||
|
@ -25,7 +25,7 @@ dependencies:
|
|||
optional: ^6.0.0
|
||||
dev_dependencies:
|
||||
angel3_framework: ^4.2.0
|
||||
angel3_migration: ^4.0.0
|
||||
angel3_migration: ^4.1.0
|
||||
build_runner: ^2.0.1
|
||||
postgres: ^2.4.0
|
||||
test: ^1.17.3
|
||||
|
@ -35,4 +35,6 @@ dependency_overrides:
|
|||
path: ../angel_orm
|
||||
angel3_migration:
|
||||
path: ../angel_migration
|
||||
angel3_serialize_generator:
|
||||
path: ../../serialize/angel_serialize_generator
|
||||
|
|
@ -90,9 +90,9 @@ class MySqlExecutor extends QueryExecutor {
|
|||
|
||||
var params = substitutionValues.values.toList();
|
||||
|
||||
logger?.warning('Query: $query');
|
||||
logger?.warning('Values: $params');
|
||||
logger?.warning('Returning Query: $returningQuery');
|
||||
//logger?.warning('Query: $query');
|
||||
//logger?.warning('Values: $params');
|
||||
//logger?.warning('Returning Query: $returningQuery');
|
||||
|
||||
if (returningQuery.isNotEmpty) {
|
||||
// Handle insert, update and delete
|
||||
|
@ -101,12 +101,12 @@ class MySqlExecutor extends QueryExecutor {
|
|||
var result = await _connection.query(query, params);
|
||||
|
||||
query = returningQuery;
|
||||
logger?.warning('Result.insertId: ${result.insertId}');
|
||||
|
||||
// No primary key
|
||||
//logger?.warning('Result.insertId: ${result.insertId}');
|
||||
// Has primary key
|
||||
//if (result.insertId != 0) {
|
||||
// params = [result.insertId];
|
||||
//}
|
||||
if (returningQuery.endsWith('.id=?')) {
|
||||
params = [result.insertId];
|
||||
}
|
||||
} else if (query.startsWith("UPDATE")) {
|
||||
await _connection.query(query, params);
|
||||
query = returningQuery;
|
||||
|
|
|
@ -11,11 +11,8 @@ dependencies:
|
|||
mysql1: ^0.19.0
|
||||
optional: ^6.0.0
|
||||
dev_dependencies:
|
||||
angel3_migration: ^4.0.0
|
||||
angel3_orm_generator: ^4.0.0
|
||||
build_runner: ^2.0.0
|
||||
test: ^1.17.0
|
||||
angel3_orm_test: ^3.0.0
|
||||
test: ^1.17.0
|
||||
lints: ^1.0.0
|
||||
dependency_overrides:
|
||||
angel3_orm_test:
|
||||
|
|
|
@ -20,8 +20,10 @@ void main() {
|
|||
group('enumAndNested',
|
||||
() => enumAndNestedTests(my(['has_car']), close: closeMy));
|
||||
group('hasMany', () => hasManyTests(my(['tree', 'fruit']), close: closeMy));
|
||||
group('hasMap', () => hasMapTests(my(['has_map']), close: closeMy));
|
||||
group('hasOne', () => hasOneTests(my(['leg', 'foot']), close: closeMy));
|
||||
// NOTE: MySQL/MariaDB do not support jsonb data type
|
||||
//group('hasMap', () => hasMapTests(my(['has_map']), close: closeMy));
|
||||
// NOTE: mysql1 driver do not support CAST();
|
||||
//group('hasOne', () => hasOneTests(my(['leg', 'foot']), close: closeMy));
|
||||
group(
|
||||
'manyToMany',
|
||||
() =>
|
||||
|
|
|
@ -16,6 +16,6 @@ void main() async {
|
|||
|
||||
belongsToTests(my(['author', 'book']), close: closeMy);
|
||||
|
||||
//edgeCaseTests(my(['unorthodox', 'weird_join', 'song', 'numba']),
|
||||
// close: closeMy);
|
||||
//hasOneTests(my(['leg', 'foot']), close: closeMy);
|
||||
//standaloneTests(my(['car']), close: closeMy);
|
||||
}
|
||||
|
|
|
@ -203,7 +203,7 @@ class FootQuery extends Query<Foot, FootQueryWhere> {
|
|||
|
||||
@override
|
||||
Map<String, String> get casts {
|
||||
return {'n_toes': 'text'};
|
||||
return {'n_toes': 'char'};
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -77,7 +77,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
|||
|
||||
var sportsCars = CarQuery()..where!.familyFriendly.isFalse;
|
||||
cars = await sportsCars.get(executor!);
|
||||
//print(cars.map((c) => c.toJson()));
|
||||
print(cars.map((c) => c.toJson()));
|
||||
|
||||
var car = cars.first;
|
||||
expect(car.make, ferrari!.make);
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
# Change Log
|
||||
|
||||
## 5.0.0
|
||||
|
||||
* Updated `analyzer` to version 3.x
|
||||
* Updated min SDK to 2.14.x
|
||||
|
||||
## 4.1.1
|
||||
|
||||
* Removed deprecated
|
||||
|
||||
## 4.1.0
|
||||
|
||||
* Updated README
|
||||
|
|
|
@ -87,8 +87,6 @@ class Serializable {
|
|||
const Serializable(
|
||||
{this.serializers = const [Serializers.map, Serializers.json],
|
||||
this.autoSnakeCaseNames = true,
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
//@deprecated this.autoIdAndDateFields = true,
|
||||
this.includeAnnotations = const []});
|
||||
|
||||
/// A list of enabled serialization modes.
|
||||
|
@ -99,10 +97,6 @@ class Serializable {
|
|||
/// Overrides the setting in `SerializerGenerator`.
|
||||
final bool autoSnakeCaseNames;
|
||||
|
||||
/// Overrides the setting in `JsonModelGenerator`.
|
||||
//@deprecated
|
||||
//final bool autoIdAndDateFields;
|
||||
|
||||
/// A list of constant members to affix to the generated class.
|
||||
final List includeAnnotations;
|
||||
}
|
||||
|
@ -130,20 +124,3 @@ abstract class Serializers {
|
|||
/// Generate a TypeScript definition file (`.d.ts`) for use on the client-side.
|
||||
static const int typescript = 2;
|
||||
}
|
||||
|
||||
/*
|
||||
@deprecated
|
||||
class DefaultValue {
|
||||
final value;
|
||||
|
||||
const DefaultValue(this.value);
|
||||
}
|
||||
|
||||
@deprecated
|
||||
/// Prefer [SerializableField] instead.
|
||||
class Alias {
|
||||
final String name;
|
||||
|
||||
const Alias(this.name);
|
||||
}
|
||||
*/
|
|
@ -1,8 +1,8 @@
|
|||
name: angel3_serialize
|
||||
version: 4.1.0
|
||||
version: 4.1.1
|
||||
description: Static annotations powering Angel3 model serialization. Combine with angel3_serialize_generator for flexible modeling.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/angel3/packages/serialize/angel_serialize
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/serialize/angel_serialize
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
dependencies:
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
# Change Log
|
||||
|
||||
## 5.0.0
|
||||
|
||||
* Updated `analyzer` to version 3.x
|
||||
* Updated min SDK to 2.14.x
|
||||
|
||||
## 4.3.0
|
||||
|
||||
* Updated to use `package:belatuk_code_buffer`
|
||||
|
|
|
@ -7,7 +7,6 @@ import 'package:analyzer/dart/constant/value.dart';
|
|||
import 'package:analyzer/dart/element/element.dart';
|
||||
import 'package:analyzer/dart/element/nullability_suffix.dart';
|
||||
import 'package:analyzer/dart/element/type.dart';
|
||||
import 'package:angel3_model/angel3_model.dart';
|
||||
import 'package:angel3_serialize/angel3_serialize.dart';
|
||||
import 'package:build/build.dart';
|
||||
import 'package:belatuk_code_buffer/belatuk_code_buffer.dart';
|
||||
|
|
|
@ -5,7 +5,6 @@ import 'package:analyzer/dart/element/type.dart';
|
|||
import 'package:analyzer/src/dart/element/element.dart';
|
||||
import 'package:angel3_serialize/angel3_serialize.dart';
|
||||
import 'package:build/build.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:recase/recase.dart';
|
||||
import 'package:source_gen/source_gen.dart';
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
name: angel3_serialize_generator
|
||||
version: 4.3.0
|
||||
version: 5.0.0
|
||||
description: Angel3 model serialization generators, designed for use with Angel. Combine with angel_serialize for flexible modeling.
|
||||
homepage: https://angel3-framework.web.app/
|
||||
repository: https://github.com/dukefirehawk/angel/tree/angel3/packages/serialize/angel_serialize_generator
|
||||
repository: https://github.com/dukefirehawk/angel/tree/master/packages/serialize/angel_serialize_generator
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
sdk: '>=2.14.0 <3.0.0'
|
||||
dependencies:
|
||||
analyzer: ^2.0.0
|
||||
analyzer: ^3.0.0
|
||||
angel3_model: ^3.0.0
|
||||
angel3_serialize: ^4.1.0
|
||||
belatuk_code_buffer: ^3.0.0
|
||||
|
|
Loading…
Reference in a new issue