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)
|
@JsonKey(defaultValue: false)
|
||||||
final bool storeDateTimeValuesAsText;
|
final bool storeDateTimeValuesAsText;
|
||||||
|
|
||||||
|
@JsonKey(name: 'column_name_case', defaultValue: ColumnNameCase.snake)
|
||||||
|
final ColumnNameCase columnNameCase;
|
||||||
|
|
||||||
@internal
|
@internal
|
||||||
const DriftOptions.defaults({
|
const DriftOptions.defaults({
|
||||||
this.generateFromJsonStringConstructor = false,
|
this.generateFromJsonStringConstructor = false,
|
||||||
|
@ -107,6 +110,7 @@ class DriftOptions {
|
||||||
this.sqliteAnalysisOptions,
|
this.sqliteAnalysisOptions,
|
||||||
this.storeDateTimeValuesAsText = false,
|
this.storeDateTimeValuesAsText = false,
|
||||||
this.dialect = const DialectOptions(SqlDialect.sqlite, null),
|
this.dialect = const DialectOptions(SqlDialect.sqlite, null),
|
||||||
|
this.columnNameCase = ColumnNameCase.snake,
|
||||||
});
|
});
|
||||||
|
|
||||||
DriftOptions({
|
DriftOptions({
|
||||||
|
@ -127,6 +131,7 @@ class DriftOptions {
|
||||||
required this.modules,
|
required this.modules,
|
||||||
required this.sqliteAnalysisOptions,
|
required this.sqliteAnalysisOptions,
|
||||||
required this.storeDateTimeValuesAsText,
|
required this.storeDateTimeValuesAsText,
|
||||||
|
required this.columnNameCase,
|
||||||
this.dialect,
|
this.dialect,
|
||||||
}) {
|
}) {
|
||||||
// ignore: deprecated_member_use_from_same_package
|
// ignore: deprecated_member_use_from_same_package
|
||||||
|
@ -282,3 +287,48 @@ enum SqlModule {
|
||||||
|
|
||||||
spellfix1,
|
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:analyzer/dart/element/type.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:drift/drift.dart' show DriftSqlType;
|
import 'package:drift/drift.dart' show DriftSqlType;
|
||||||
|
import 'package:drift_dev/src/analysis/options.dart';
|
||||||
import 'package:recase/recase.dart';
|
import 'package:recase/recase.dart';
|
||||||
import 'package:sqlparser/sqlparser.dart' show ReferenceAction;
|
import 'package:sqlparser/sqlparser.dart' show ReferenceAction;
|
||||||
|
|
||||||
|
@ -335,7 +336,10 @@ class ColumnParser {
|
||||||
remainingExpr = inner;
|
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);
|
final sqlType = _startMethodToColumnType(foundStartMethod);
|
||||||
|
|
||||||
AppliedTypeConverter? converter;
|
AppliedTypeConverter? converter;
|
||||||
|
@ -484,3 +488,25 @@ class PendingColumnInformation {
|
||||||
|
|
||||||
PendingColumnInformation(this.column, {this.referencesColumnInSameTable});
|
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',
|
||||||
'named_parameters_always_required',
|
'named_parameters_always_required',
|
||||||
'scoped_dart_components',
|
'scoped_dart_components',
|
||||||
'store_date_time_values_as_text'
|
'store_date_time_values_as_text',
|
||||||
|
'column_name_case'
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
final val = DriftOptions(
|
final val = DriftOptions(
|
||||||
|
@ -77,6 +78,11 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
|
||||||
v == null ? null : SqliteAnalysisOptions.fromJson(v as Map)),
|
v == null ? null : SqliteAnalysisOptions.fromJson(v as Map)),
|
||||||
storeDateTimeValuesAsText: $checkedConvert(
|
storeDateTimeValuesAsText: $checkedConvert(
|
||||||
'store_date_time_values_as_text', (v) => v as bool? ?? false),
|
'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',
|
dialect: $checkedConvert('sql',
|
||||||
(v) => v == null ? null : DialectOptions.fromJson(v as Map)),
|
(v) => v == null ? null : DialectOptions.fromJson(v as Map)),
|
||||||
);
|
);
|
||||||
|
@ -103,6 +109,7 @@ DriftOptions _$DriftOptionsFromJson(Map json) => $checkedCreate(
|
||||||
'modules': 'sqlite_modules',
|
'modules': 'sqlite_modules',
|
||||||
'sqliteAnalysisOptions': 'sqlite',
|
'sqliteAnalysisOptions': 'sqlite',
|
||||||
'storeDateTimeValuesAsText': 'store_date_time_values_as_text',
|
'storeDateTimeValuesAsText': 'store_date_time_values_as_text',
|
||||||
|
'columnNameCase': 'column_name_case',
|
||||||
'dialect': 'sql'
|
'dialect': 'sql'
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -133,6 +140,7 @@ Map<String, dynamic> _$DriftOptionsToJson(DriftOptions instance) =>
|
||||||
instance.namedParametersAlwaysRequired,
|
instance.namedParametersAlwaysRequired,
|
||||||
'scoped_dart_components': instance.scopedDartComponents,
|
'scoped_dart_components': instance.scopedDartComponents,
|
||||||
'store_date_time_values_as_text': instance.storeDateTimeValuesAsText,
|
'store_date_time_values_as_text': instance.storeDateTimeValuesAsText,
|
||||||
|
'column_name_case': _$ColumnNameCaseEnumMap[instance.columnNameCase]!,
|
||||||
};
|
};
|
||||||
|
|
||||||
const _$SqlModuleEnumMap = {
|
const _$SqlModuleEnumMap = {
|
||||||
|
@ -144,6 +152,16 @@ const _$SqlModuleEnumMap = {
|
||||||
SqlModule.spellfix1: 'spellfix1',
|
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 _$DialectOptionsFromJson(Map json) => $checkedCreate(
|
||||||
'DialectOptions',
|
'DialectOptions',
|
||||||
json,
|
json,
|
||||||
|
|
Loading…
Reference in New Issue