feat: Add option use_sql_column_name_as_json_key

This commit is contained in:
ValentinVignal 2024-03-05 21:27:32 +08:00
parent ca0c70eac9
commit 707eb72b07
No known key found for this signature in database
GPG Key ID: 040FFDADFB7EF05A
3 changed files with 18 additions and 4 deletions

View File

@ -45,13 +45,19 @@ class DriftOptions {
defaultValue: true)
final bool useColumnNameAsJsonKeyWhenDefinedInMoorFile;
/// Uses the sql column name as the json key instead of the name in dart.
///
/// Overrides [useColumnNameAsJsonKeyWhenDefinedInMoorFile] when set to `true`.
@JsonKey(name: 'use_sql_column_name_as_json_key', defaultValue: false)
final bool useSqlColumnNameAsJsonKey;
/// Generate a `connect` constructor in database superclasses.
///
/// This makes drift generate a constructor for database classes that takes a
/// `DatabaseConnection` instead of just a `QueryExecutor` - meaning that
/// stream queries can also be shared across multiple database instances.
/// Starting from drift 2.5, the database connection class implements the
/// `QueryExecutor` interface, making this option unecessary.
/// `QueryExecutor` interface, making this option unnecessary.
@JsonKey(name: 'generate_connect_constructor', defaultValue: false)
final bool generateConnectConstructor;
@ -120,6 +126,7 @@ class DriftOptions {
this.skipVerificationCode = false,
this.useDataClassNameForCompanions = false,
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = true,
this.useSqlColumnNameAsJsonKey = false,
this.generateConnectConstructor = false,
this.dataClassToCompanions = true,
this.generateMutableClasses = false,
@ -147,6 +154,7 @@ class DriftOptions {
required this.skipVerificationCode,
required this.useDataClassNameForCompanions,
required this.useColumnNameAsJsonKeyWhenDefinedInMoorFile,
required this.useSqlColumnNameAsJsonKey,
required this.generateConnectConstructor,
required this.dataClassToCompanions,
required this.generateMutableClasses,

View File

@ -108,12 +108,13 @@ class DriftColumn implements HasType {
/// The actual json key to use when serializing a data class of this table
/// to json.
///
/// This respectts the [overriddenJsonName], if any, as well as [options].
/// This respects the [overriddenJsonName], if any, as well as [options].
String getJsonKey([DriftOptions options = const DriftOptions.defaults()]) {
if (overriddenJsonName != null) return overriddenJsonName!;
final useColumnName = options.useColumnNameAsJsonKeyWhenDefinedInMoorFile &&
declaredInDriftFile;
final useColumnName = options.useSqlColumnNameAsJsonKey ||
(options.useColumnNameAsJsonKeyWhenDefinedInMoorFile &&
declaredInDriftFile);
return useColumnName ? nameInSql : nameInDart;
}

View File

@ -18,6 +18,7 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
'skip_verification_code',
'use_data_class_name_for_companions',
'use_column_name_as_json_key_when_defined_in_moor_file',
'use_sql_column_name_as_json_key',
'generate_connect_constructor',
'sqlite_modules',
'sqlite',
@ -52,6 +53,8 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
useColumnNameAsJsonKeyWhenDefinedInMoorFile: $checkedConvert(
'use_column_name_as_json_key_when_defined_in_moor_file',
(v) => v as bool? ?? true),
useSqlColumnNameAsJsonKey: $checkedConvert(
'use_sql_column_name_as_json_key', (v) => v as bool? ?? false),
generateConnectConstructor: $checkedConvert(
'generate_connect_constructor', (v) => v as bool? ?? false),
dataClassToCompanions: $checkedConvert(
@ -111,6 +114,7 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
'useDataClassNameForCompanions': 'use_data_class_name_for_companions',
'useColumnNameAsJsonKeyWhenDefinedInMoorFile':
'use_column_name_as_json_key_when_defined_in_moor_file',
'useSqlColumnNameAsJsonKey': 'use_sql_column_name_as_json_key',
'generateConnectConstructor': 'generate_connect_constructor',
'dataClassToCompanions': 'data_class_to_companions',
'generateMutableClasses': 'mutable_classes',
@ -143,6 +147,7 @@ Map<String, dynamic> _$DriftOptionsToJson(DriftOptions instance) =>
instance.useDataClassNameForCompanions,
'use_column_name_as_json_key_when_defined_in_moor_file':
instance.useColumnNameAsJsonKeyWhenDefinedInMoorFile,
'use_sql_column_name_as_json_key': instance.useSqlColumnNameAsJsonKey,
'generate_connect_constructor': instance.generateConnectConstructor,
'sqlite_modules':
instance.modules.map((e) => _$SqlModuleEnumMap[e]!).toList(),