From 707eb72b07f971b5c151d5ffef09549d9f798466 Mon Sep 17 00:00:00 2001 From: ValentinVignal Date: Tue, 5 Mar 2024 21:27:32 +0800 Subject: [PATCH] feat: Add option use_sql_column_name_as_json_key --- drift_dev/lib/src/analysis/options.dart | 10 +++++++++- drift_dev/lib/src/analysis/results/column.dart | 7 ++++--- drift_dev/lib/src/generated/analysis/options.g.dart | 5 +++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/drift_dev/lib/src/analysis/options.dart b/drift_dev/lib/src/analysis/options.dart index fe298795..a4d871cc 100644 --- a/drift_dev/lib/src/analysis/options.dart +++ b/drift_dev/lib/src/analysis/options.dart @@ -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, diff --git a/drift_dev/lib/src/analysis/results/column.dart b/drift_dev/lib/src/analysis/results/column.dart index 93a07786..bbd150aa 100644 --- a/drift_dev/lib/src/analysis/results/column.dart +++ b/drift_dev/lib/src/analysis/results/column.dart @@ -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; } diff --git a/drift_dev/lib/src/generated/analysis/options.g.dart b/drift_dev/lib/src/generated/analysis/options.g.dart index 4e86b7c9..3872438b 100644 --- a/drift_dev/lib/src/generated/analysis/options.g.dart +++ b/drift_dev/lib/src/generated/analysis/options.g.dart @@ -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 _$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(),