mirror of https://github.com/AMT-Cheif/drift.git
parent
95f37575f8
commit
263004fe7b
|
@ -43,12 +43,17 @@ At the moment, moor supports these options:
|
|||
is based on the table name (e.g. a `@DataClassName('Users') class UsersTable extends Table` would generate
|
||||
a `UsersTableCompanion`). With this option, the name is based on the data class (so `UsersCompanion` in
|
||||
this case).
|
||||
* `use_column_name_as_json_key_when_defined_in_moor_file`: When serializing columns declared inside a
|
||||
`.moor` file from and to json, use their sql name instead of the generated Dart getter name
|
||||
(so a column named `user_name` would also use `user_name` as a json key instead of `userName`).
|
||||
This will be the only option in moor 3.0. You can always override the json key by using a `JSON KEY`
|
||||
column constraint (e.g. `user_name VARCHAR NOT NULL JSON KEY userName`)
|
||||
|
||||
## Recommended options
|
||||
|
||||
In general, we recommend not enabling these options unless you need to. There are two exceptions though:
|
||||
In general, we recommend not enabling these options unless you need to. There are some exceptions though:
|
||||
|
||||
- `compact_query_methods`: We recommend enabling this flag because it generates less code and it will
|
||||
be the only option in the next breaking upgrade.
|
||||
- `compact_query_methods` and `use_column_name_as_json_key_when_defined_in_moor_file`: We recommend enabling
|
||||
both flags for new projects because they'll be the only option in the next breaking release.
|
||||
- `skip_verification_code`: You can remove a significant portion of generated code with this option. The
|
||||
downside is that error messages when inserting invalid data will be less specific.
|
|
@ -4,3 +4,4 @@ targets:
|
|||
moor_generator:
|
||||
options:
|
||||
override_hash_and_equals_in_result_sets: true
|
||||
use_column_name_as_json_key_when_defined_in_moor_file: true
|
|
@ -25,7 +25,7 @@ class InsertStatement<D extends DataClass> {
|
|||
/// thrown.
|
||||
///
|
||||
/// If [orReplace] is true and a row with the same primary key already exists,
|
||||
/// the columns of that row will be updated and now new row will be written.
|
||||
/// the columns of that row will be updated and no new row will be written.
|
||||
/// Otherwise, an exception will be thrown.
|
||||
///
|
||||
/// If the table contains an auto-increment column, the generated value will
|
||||
|
|
|
@ -495,16 +495,16 @@ class Config extends DataClass implements Insertable<Config> {
|
|||
factory Config.fromJson(Map<String, dynamic> json,
|
||||
{ValueSerializer serializer = const ValueSerializer.defaults()}) {
|
||||
return Config(
|
||||
configKey: serializer.fromJson<String>(json['configKey']),
|
||||
configValue: serializer.fromJson<String>(json['configValue']),
|
||||
configKey: serializer.fromJson<String>(json['config_key']),
|
||||
configValue: serializer.fromJson<String>(json['config_value']),
|
||||
);
|
||||
}
|
||||
@override
|
||||
Map<String, dynamic> toJson(
|
||||
{ValueSerializer serializer = const ValueSerializer.defaults()}) {
|
||||
return {
|
||||
'configKey': serializer.toJson<String>(configKey),
|
||||
'configValue': serializer.toJson<String>(configValue),
|
||||
'config_key': serializer.toJson<String>(configKey),
|
||||
'config_value': serializer.toJson<String>(configValue),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
tables inheriting from that class will also have a `foo` column)
|
||||
- New `use_data_class_name_for_companions` option that will make the name of the companion
|
||||
based on the data class name (uses table name by default).
|
||||
- New `use_column_name_as_json_key_when_defined_in_moor_file` option to use the column name
|
||||
instead of the Dart getter name as json key for columns declared in moor files
|
||||
|
||||
## 2.0.1
|
||||
|
||||
|
|
|
@ -26,6 +26,10 @@ class ColumnDeclaration extends BaseDeclaration {
|
|||
/// The moor version of the declared column.
|
||||
final SpecifiedColumn column;
|
||||
|
||||
/// Whether this declaration is from a moor file (e.g. inside a `CREATE TABLE`
|
||||
/// statement).
|
||||
bool get isDefinedInMoorFile => moorDeclaration != null;
|
||||
|
||||
ColumnDeclaration(this.column, FoundFile declarationFile,
|
||||
Element dartDeclaration, AstNode moorDeclaration)
|
||||
: super(declarationFile, dartDeclaration, moorDeclaration);
|
||||
|
|
|
@ -6,13 +6,15 @@ class MoorOptions {
|
|||
final bool compactQueryMethods;
|
||||
final bool skipVerificationCode;
|
||||
final bool useDataClassNameForCompanions;
|
||||
final bool useColumnNameAsJsonKeyWhenDefinedInMoorFile;
|
||||
|
||||
const MoorOptions(
|
||||
{this.generateFromJsonStringConstructor = false,
|
||||
this.overrideHashAndEqualsInResultSets = false,
|
||||
this.compactQueryMethods = false,
|
||||
this.skipVerificationCode = false,
|
||||
this.useDataClassNameForCompanions = false});
|
||||
this.useDataClassNameForCompanions = false,
|
||||
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false});
|
||||
|
||||
factory MoorOptions.fromBuilder(Map<String, dynamic> config) {
|
||||
final writeFromString =
|
||||
|
@ -30,12 +32,19 @@ class MoorOptions {
|
|||
final dataClassNamesForCompanions =
|
||||
config['use_data_class_name_for_companions'] as bool ?? false;
|
||||
|
||||
final useColumnNameAsJsonKeyForMoor =
|
||||
config['use_column_name_as_json_key_when_defined_in_moor_file']
|
||||
as bool ??
|
||||
false;
|
||||
|
||||
return MoorOptions(
|
||||
generateFromJsonStringConstructor: writeFromString,
|
||||
overrideHashAndEqualsInResultSets: overrideInResultSets,
|
||||
compactQueryMethods: compactQueryMethods,
|
||||
skipVerificationCode: skipVerificationCode,
|
||||
useDataClassNameForCompanions: dataClassNamesForCompanions,
|
||||
useColumnNameAsJsonKeyWhenDefinedInMoorFile:
|
||||
useColumnNameAsJsonKeyForMoor,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:built_value/built_value.dart';
|
||||
import 'package:moor_generator/src/analyzer/sql_queries/meta/declarations.dart';
|
||||
import 'package:moor_generator/src/backends/build/moor_builder.dart';
|
||||
import 'package:moor_generator/src/model/used_type_converter.dart';
|
||||
|
||||
part 'specified_column.g.dart';
|
||||
|
@ -81,6 +82,9 @@ class SpecifiedColumn {
|
|||
/// column was created in source code.
|
||||
ColumnDeclaration declaration;
|
||||
|
||||
/// Whether this column was declared inside a moor file.
|
||||
bool get declaredInMoorFile => declaration?.isDefinedInMoorFile ?? false;
|
||||
|
||||
/// The sql type of this column
|
||||
final ColumnType type;
|
||||
|
||||
|
@ -89,7 +93,13 @@ class SpecifiedColumn {
|
|||
|
||||
/// An (optional) name to use as a json key instead of the [dartGetterName].
|
||||
final String overriddenJsonName;
|
||||
String get jsonKey => overriddenJsonName ?? dartGetterName;
|
||||
String getJsonKey([MoorOptions options = const MoorOptions()]) {
|
||||
if (overriddenJsonName != null) return overriddenJsonName;
|
||||
|
||||
final useColumnName = options.useColumnNameAsJsonKeyWhenDefinedInMoorFile &&
|
||||
declaredInMoorFile;
|
||||
return useColumnName ? name.name : dartGetterName;
|
||||
}
|
||||
|
||||
/// Whether the user has explicitly declared this column to be nullable, the
|
||||
/// default is false
|
||||
|
|
|
@ -117,7 +117,7 @@ class DataClassWriter {
|
|||
|
||||
for (var column in table.columns) {
|
||||
final getter = column.dartGetterName;
|
||||
final jsonKey = column.jsonKey;
|
||||
final jsonKey = column.getJsonKey(scope.options);
|
||||
final type = column.dartTypeName;
|
||||
|
||||
_buffer.write("$getter: serializer.fromJson<$type>(json['$jsonKey']),");
|
||||
|
@ -141,7 +141,7 @@ class DataClassWriter {
|
|||
'\n return {');
|
||||
|
||||
for (var column in table.columns) {
|
||||
final name = column.jsonKey;
|
||||
final name = column.getJsonKey(scope.options);
|
||||
final getter = column.dartGetterName;
|
||||
final needsThis = getter == 'serializer';
|
||||
final value = needsThis ? 'this.$getter' : getter;
|
||||
|
|
|
@ -31,7 +31,7 @@ usersWithLongName: SELECT * FROM users WHERE LENGTH(name) > 25
|
|||
['id', 'name', 'field', 'another', 'differentJson']);
|
||||
expect(table.columns.map((c) => c.dartTypeName),
|
||||
['int', 'String', 'bool', 'DateTime', 'int']);
|
||||
expect(table.columns.map((c) => c.jsonKey),
|
||||
expect(table.columns.map((c) => c.getJsonKey()),
|
||||
['id', 'name', 'field', 'another', 'myJsonKey']);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue