diff --git a/moor_generator/lib/src/analyzer/options.dart b/moor_generator/lib/src/analyzer/options.dart index 7303220f..3618545f 100644 --- a/moor_generator/lib/src/analyzer/options.dart +++ b/moor_generator/lib/src/analyzer/options.dart @@ -2,6 +2,10 @@ import 'package:json_annotation/json_annotation.dart'; part 'options.g.dart'; +// note when working on this file: If you can't run the builder because +// options.g.dart is missing, just re-create it from git. build_runner will +// complain about existing outputs, let it delete the part file. + /// Controllable options to define the behavior of the analyzer and the /// generator. @JsonSerializable( @@ -48,6 +52,9 @@ class MoorOptions { @JsonKey(name: 'generate_connect_constructor') final bool generateConnectConstructor; + @JsonKey(name: 'sqlite_modules', defaultValue: []) + final List modules; + const MoorOptions( {this.generateFromJsonStringConstructor = false, this.overrideHashAndEqualsInResultSets = false, @@ -55,8 +62,20 @@ class MoorOptions { this.skipVerificationCode = false, this.useDataClassNameForCompanions = false, this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false, - this.generateConnectConstructor = false}); + this.generateConnectConstructor = false, + this.modules = const []}); factory MoorOptions.fromJson(Map json) => _$MoorOptionsFromJson(json); } + +/// Set of sqlite modules that require special knowledge from the generator. +enum SqlModule { + /// Enables support for the json1 module and its functions when parsing sql + /// queries. + json1, + + /// Enables support for the fts5 module and its functions when parsing sql + /// queries. + fts5, +} diff --git a/moor_generator/lib/src/analyzer/options.g.dart b/moor_generator/lib/src/analyzer/options.g.dart index 0cece3a0..84d461b5 100644 --- a/moor_generator/lib/src/analyzer/options.g.dart +++ b/moor_generator/lib/src/analyzer/options.g.dart @@ -9,17 +9,18 @@ part of 'options.dart'; MoorOptions _$MoorOptionsFromJson(Map json) { return $checkedNew('MoorOptions', json, () { $checkKeys(json, allowedKeys: const [ - 'generate_from_json_string_constructor', + 'write_from_json_string_constructor', 'override_hash_and_equals_in_result_sets', 'compact_query_methods', 'skip_verification_code', 'use_data_class_name_for_companions', 'use_column_name_as_json_key_when_defined_in_moor_file', - 'generate_connect_constructor' + 'generate_connect_constructor', + 'sqlite_modules' ]); final val = MoorOptions( generateFromJsonStringConstructor: $checkedConvert( - json, 'generate_from_json_string_constructor', (v) => v as bool), + json, 'write_from_json_string_constructor', (v) => v as bool), overrideHashAndEqualsInResultSets: $checkedConvert( json, 'override_hash_and_equals_in_result_sets', (v) => v as bool), compactQueryMethods: @@ -34,11 +35,17 @@ MoorOptions _$MoorOptionsFromJson(Map json) { (v) => v as bool), generateConnectConstructor: $checkedConvert( json, 'generate_connect_constructor', (v) => v as bool), + modules: $checkedConvert( + json, + 'sqlite_modules', + (v) => (v as List) + ?.map((e) => _$enumDecodeNullable(_$SqlModuleEnumMap, e)) + ?.toList()) ?? + [], ); return val; }, fieldKeyMap: const { - 'generateFromJsonStringConstructor': - 'generate_from_json_string_constructor', + 'generateFromJsonStringConstructor': 'write_from_json_string_constructor', 'overrideHashAndEqualsInResultSets': 'override_hash_and_equals_in_result_sets', 'compactQueryMethods': 'compact_query_methods', @@ -46,6 +53,44 @@ MoorOptions _$MoorOptionsFromJson(Map json) { 'useDataClassNameForCompanions': 'use_data_class_name_for_companions', 'useColumnNameAsJsonKeyWhenDefinedInMoorFile': 'use_column_name_as_json_key_when_defined_in_moor_file', - 'generateConnectConstructor': 'generate_connect_constructor' + 'generateConnectConstructor': 'generate_connect_constructor', + 'modules': 'sqlite_modules' }); } + +T _$enumDecode( + Map enumValues, + dynamic source, { + T unknownValue, +}) { + if (source == null) { + throw ArgumentError('A value must be provided. Supported values: ' + '${enumValues.values.join(', ')}'); + } + + final value = enumValues.entries + .singleWhere((e) => e.value == source, orElse: () => null) + ?.key; + + if (value == null && unknownValue == null) { + throw ArgumentError('`$source` is not one of the supported values: ' + '${enumValues.values.join(', ')}'); + } + return value ?? unknownValue; +} + +T _$enumDecodeNullable( + Map enumValues, + dynamic source, { + T unknownValue, +}) { + if (source == null) { + return null; + } + return _$enumDecode(enumValues, source, unknownValue: unknownValue); +} + +const _$SqlModuleEnumMap = { + SqlModule.json1: 'json1', + SqlModule.fts5: 'fts5', +};