mirror of https://github.com/AMT-Cheif/drift.git
✨ Adds column_name_case option
This commit is contained in:
parent
6503624ff1
commit
3835e0aae4
|
@ -87,6 +87,9 @@ class DriftOptions {
|
|||
@JsonKey(defaultValue: false)
|
||||
final bool storeDateTimeValuesAsText;
|
||||
|
||||
@JsonKey(name: 'column_name_case', defaultValue: ColumnNameCase.snake)
|
||||
final ColumnNameCase columnNameCase;
|
||||
|
||||
@internal
|
||||
const DriftOptions.defaults({
|
||||
this.generateFromJsonStringConstructor = false,
|
||||
|
@ -107,6 +110,7 @@ class DriftOptions {
|
|||
this.sqliteAnalysisOptions,
|
||||
this.storeDateTimeValuesAsText = false,
|
||||
this.dialect = const DialectOptions(SqlDialect.sqlite, null),
|
||||
this.columnNameCase = ColumnNameCase.snake,
|
||||
});
|
||||
|
||||
DriftOptions({
|
||||
|
@ -127,6 +131,7 @@ class DriftOptions {
|
|||
required this.modules,
|
||||
required this.sqliteAnalysisOptions,
|
||||
required this.storeDateTimeValuesAsText,
|
||||
required this.columnNameCase,
|
||||
this.dialect,
|
||||
}) {
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
|
@ -282,3 +287,48 @@ enum SqlModule {
|
|||
|
||||
spellfix1,
|
||||
}
|
||||
|
||||
/// The possible values for the case of the column names.
|
||||
enum ColumnNameCase {
|
||||
/// Preserves the case of the column name as it is in the dart code.
|
||||
///
|
||||
/// `myColumn` -> `myColumn`.
|
||||
preserve,
|
||||
|
||||
/// Use camelCase.
|
||||
///
|
||||
/// `my_column` -> `myColumn`.
|
||||
@JsonValue('camelCase')
|
||||
camel,
|
||||
|
||||
/// Use CONSTANT_CASE.
|
||||
///
|
||||
/// `myColumn` -> `MY_COLUMN`.
|
||||
@JsonValue('CONSTANT_CASE')
|
||||
constant,
|
||||
|
||||
/// Use snake_case.
|
||||
///
|
||||
/// `myColumn` -> `my_column`.
|
||||
@JsonValue('snake_case')
|
||||
snake,
|
||||
|
||||
/// Use PascalCase.
|
||||
///
|
||||
/// `my_column` -> `MyColumn`.
|
||||
// ignore: constant_identifier_names
|
||||
@JsonValue('PascalCase')
|
||||
pascal,
|
||||
|
||||
/// Use lowercase.
|
||||
///
|
||||
/// `myColumn` -> `mycolumn`.
|
||||
@JsonValue('lowercase')
|
||||
lower,
|
||||
|
||||
/// Use UPPERCASE.
|
||||
///
|
||||
/// `myColumn` -> `MYCOLUMN`.
|
||||
@JsonValue('UPPERCASE')
|
||||
upper,
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'package:analyzer/dart/element/element.dart';
|
|||
import 'package:analyzer/dart/element/type.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:drift/drift.dart' show DriftSqlType;
|
||||
import 'package:drift_dev/src/analysis/options.dart';
|
||||
import 'package:recase/recase.dart';
|
||||
import 'package:sqlparser/sqlparser.dart' show ReferenceAction;
|
||||
|
||||
|
@ -335,7 +336,10 @@ class ColumnParser {
|
|||
remainingExpr = inner;
|
||||
}
|
||||
|
||||
final sqlName = foundExplicitName ?? ReCase(getter.name.lexeme).snakeCase;
|
||||
_resolver.resolver.driver.options.columnNameCase;
|
||||
final sqlName = foundExplicitName ??
|
||||
_resolver.resolver.driver.options.columnNameCase
|
||||
.apply(getter.name.lexeme);
|
||||
final sqlType = _startMethodToColumnType(foundStartMethod);
|
||||
|
||||
AppliedTypeConverter? converter;
|
||||
|
@ -484,3 +488,25 @@ class PendingColumnInformation {
|
|||
|
||||
PendingColumnInformation(this.column, {this.referencesColumnInSameTable});
|
||||
}
|
||||
|
||||
extension on ColumnNameCase {
|
||||
String apply(String name) {
|
||||
final reCase = ReCase(name);
|
||||
switch (this) {
|
||||
case ColumnNameCase.preserve:
|
||||
return name;
|
||||
case ColumnNameCase.camel:
|
||||
return reCase.camelCase;
|
||||
case ColumnNameCase.constant:
|
||||
return reCase.constantCase;
|
||||
case ColumnNameCase.snake:
|
||||
return reCase.snakeCase;
|
||||
case ColumnNameCase.pascal:
|
||||
return reCase.pascalCase;
|
||||
case ColumnNameCase.lower:
|
||||
return name.toLowerCase();
|
||||
case ColumnNameCase.upper:
|
||||
return name.toUpperCase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
|
|||
'named_parameters',
|
||||
'named_parameters_always_required',
|
||||
'scoped_dart_components',
|
||||
'store_date_time_values_as_text'
|
||||
'store_date_time_values_as_text',
|
||||
'column_name_case'
|
||||
],
|
||||
);
|
||||
final val = DriftOptions(
|
||||
|
@ -77,6 +78,11 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
|
|||
v == null ? null : SqliteAnalysisOptions.fromJson(v as Map)),
|
||||
storeDateTimeValuesAsText: $checkedConvert(
|
||||
'store_date_time_values_as_text', (v) => v as bool? ?? false),
|
||||
columnNameCase: $checkedConvert(
|
||||
'column_name_case',
|
||||
(v) =>
|
||||
$enumDecodeNullable(_$ColumnNameCaseEnumMap, v) ??
|
||||
ColumnNameCase.snake),
|
||||
dialect: $checkedConvert('sql',
|
||||
(v) => v == null ? null : DialectOptions.fromJson(v as Map)),
|
||||
);
|
||||
|
@ -103,6 +109,7 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
|
|||
'modules': 'sqlite_modules',
|
||||
'sqliteAnalysisOptions': 'sqlite',
|
||||
'storeDateTimeValuesAsText': 'store_date_time_values_as_text',
|
||||
'columnNameCase': 'column_name_case',
|
||||
'dialect': 'sql'
|
||||
},
|
||||
);
|
||||
|
@ -133,6 +140,7 @@ Map<String, dynamic> _$DriftOptionsToJson(DriftOptions instance) =>
|
|||
instance.namedParametersAlwaysRequired,
|
||||
'scoped_dart_components': instance.scopedDartComponents,
|
||||
'store_date_time_values_as_text': instance.storeDateTimeValuesAsText,
|
||||
'column_name_case': _$ColumnNameCaseEnumMap[instance.columnNameCase]!,
|
||||
};
|
||||
|
||||
const _$SqlModuleEnumMap = {
|
||||
|
@ -144,6 +152,16 @@ const _$SqlModuleEnumMap = {
|
|||
SqlModule.spellfix1: 'spellfix1',
|
||||
};
|
||||
|
||||
const _$ColumnNameCaseEnumMap = {
|
||||
ColumnNameCase.none: 'none',
|
||||
ColumnNameCase.camel: 'camelCase',
|
||||
ColumnNameCase.constant: 'CONSTANT_CASE',
|
||||
ColumnNameCase.snake: 'snake_case',
|
||||
ColumnNameCase.pascal: 'PascalCase',
|
||||
ColumnNameCase.lower: 'lowercase',
|
||||
ColumnNameCase.upper: 'UPPERCASE',
|
||||
};
|
||||
|
||||
DialectOptions _$DialectOptionsFromJson(Map json) => $checkedCreate(
|
||||
'DialectOptions',
|
||||
json,
|
||||
|
|
Loading…
Reference in New Issue