Rename `moor` to `drift` in `sqlparser`

This commit is contained in:
Simon Binder 2022-02-26 21:38:28 +01:00
parent ce31515c07
commit 93d328f056
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
71 changed files with 306 additions and 301 deletions

View File

@ -21,7 +21,7 @@ class CreateTableReader {
final Step step; final Step step;
final List<ImportStatement> imports; final List<ImportStatement> imports;
static const _schemaReader = SchemaFromCreateTable(moorExtensions: true); static const _schemaReader = SchemaFromCreateTable(driftExtensions: true);
static final RegExp _enumRegex = static final RegExp _enumRegex =
RegExp(r'^enum\((\w+)\)$', caseSensitive: false); RegExp(r'^enum\((\w+)\)$', caseSensitive: false);
@ -125,7 +125,7 @@ class CreateTableReader {
// those are moor-specific as well, don't write them // those are moor-specific as well, don't write them
continue; continue;
} }
if (constraint is MoorDartName) { if (constraint is DriftDartName) {
overriddenDartName = constraint.dartName; overriddenDartName = constraint.dartName;
// ditto // ditto
continue; continue;
@ -167,7 +167,7 @@ class CreateTableReader {
String? dartTableName, dataClassName; String? dartTableName, dataClassName;
ExistingRowClass? existingRowClass; ExistingRowClass? existingRowClass;
final moorTableInfo = stmt.moorTableName; final moorTableInfo = stmt.driftTableName;
if (moorTableInfo != null) { if (moorTableInfo != null) {
final overriddenNames = moorTableInfo.overriddenDataClassName; final overriddenNames = moorTableInfo.overriddenDataClassName;

View File

@ -12,8 +12,8 @@ class MoorParser {
Future<ParsedMoorFile> parseAndAnalyze() async { Future<ParsedMoorFile> parseAndAnalyze() async {
final engine = step.task.session.spawnEngine(); final engine = step.task.session.spawnEngine();
final result = engine.parseMoorFile(step.content); final result = engine.parseDriftFile(step.content);
final parsedFile = result.rootNode as MoorFile; final parsedFile = result.rootNode as DriftFile;
final createdReaders = <CreateTableReader>[]; final createdReaders = <CreateTableReader>[];
final queryDeclarations = <DeclaredMoorQuery>[]; final queryDeclarations = <DeclaredMoorQuery>[];

View File

@ -33,14 +33,14 @@ class ParsedDartFile extends FileResult {
class ParsedMoorFile extends FileResult { class ParsedMoorFile extends FileResult {
final ParseResult parseResult; final ParseResult parseResult;
MoorFile get parsedFile => parseResult.rootNode as MoorFile; DriftFile get parsedFile => parseResult.rootNode as DriftFile;
final List<ImportStatement> imports; final List<ImportStatement> imports;
final List<DeclaredQuery> queries; final List<DeclaredQuery> queries;
/// Schema component that are neither tables nor queries. This can include /// Schema component that are neither tables nor queries. This can include
/// triggers or indexes. /// triggers or indexes.
final List<PartOfMoorFile> otherComponents; final List<PartOfDriftFile> otherComponents;
List<SqlQuery>? resolvedQueries; List<SqlQuery>? resolvedQueries;
Map<ImportStatement, FoundFile>? resolvedImports; Map<ImportStatement, FoundFile>? resolvedImports;

View File

@ -39,7 +39,7 @@ class MoorSession {
/// Creates a properly configured [SqlEngine]. /// Creates a properly configured [SqlEngine].
SqlEngine spawnEngine() { SqlEngine spawnEngine() {
final sqlOptions = EngineOptions( final sqlOptions = EngineOptions(
useMoorExtensions: true, useDriftExtensions: true,
enabledExtensions: [ enabledExtensions: [
if (options.hasModule(SqlModule.fts5)) const Fts5Extension(), if (options.hasModule(SqlModule.fts5)) const Fts5Extension(),
if (options.hasModule(SqlModule.json1)) const Json1Extension(), if (options.hasModule(SqlModule.json1)) const Json1Extension(),

View File

@ -78,7 +78,7 @@ class _LintingVisitor extends RecursiveVisitor<void, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is DartPlaceholder) { if (e is DartPlaceholder) {
return visitDartPlaceholder(e, arg); return visitDartPlaceholder(e, arg);
} else if (e is NestedStarResultColumn) { } else if (e is NestedStarResultColumn) {

View File

@ -58,7 +58,7 @@ class NestedQueryAnalyzer extends RecursiveVisitor<_AnalyzerState, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, _AnalyzerState arg) { void visitDriftSpecificNode(DriftSpecificNode e, _AnalyzerState arg) {
if (e is NestedQueryColumn) { if (e is NestedQueryColumn) {
final expectedParent = arg.container.select; final expectedParent = arg.container.select;
if (e.parent != expectedParent || !expectedParent.columns.contains(e)) { if (e.parent != expectedParent || !expectedParent.columns.contains(e)) {
@ -75,12 +75,12 @@ class NestedQueryAnalyzer extends RecursiveVisitor<_AnalyzerState, void> {
arg.container.nestedQueries[e] = nested; arg.container.nestedQueries[e] = nested;
final childState = _AnalyzerState(nested); final childState = _AnalyzerState(nested);
super.visitMoorSpecificNode(e, childState); super.visitDriftSpecificNode(e, childState);
childState._process(); childState._process();
return; return;
} }
super.visitMoorSpecificNode(e, arg); super.visitDriftSpecificNode(e, arg);
} }
@override @override
@ -154,8 +154,8 @@ class _NestedQueryTransformer extends Transformer<NestedQueriesContainer> {
} }
@override @override
AstNode? visitMoorSpecificNode( AstNode? visitDriftSpecificNode(
MoorSpecificNode e, NestedQueriesContainer arg) { DriftSpecificNode e, NestedQueriesContainer arg) {
if (e is NestedQueryColumn) { if (e is NestedQueryColumn) {
final child = arg.nestedQueries[e]; final child = arg.nestedQueries[e];
if (child != null) { if (child != null) {
@ -165,7 +165,7 @@ class _NestedQueryTransformer extends Transformer<NestedQueriesContainer> {
// Remove nested query colums from the parent query // Remove nested query colums from the parent query
return null; return null;
} }
return super.visitMoorSpecificNode(e, arg); return super.visitDriftSpecificNode(e, arg);
} }
@override @override

View File

@ -383,7 +383,8 @@ class _FindElements extends RecursiveVisitor<NestedQueriesContainer?, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, NestedQueriesContainer? arg) { void visitDriftSpecificNode(
DriftSpecificNode e, NestedQueriesContainer? arg) {
if (e is NestedQueryColumn) { if (e is NestedQueryColumn) {
// If the node ist a nested query, return to avoid collecting elements // If the node ist a nested query, return to avoid collecting elements
// inside of it // inside of it
@ -394,7 +395,7 @@ class _FindElements extends RecursiveVisitor<NestedQueriesContainer?, void> {
dartPlaceholders.add(e); dartPlaceholders.add(e);
} }
super.visitMoorSpecificNode(e, arg); super.visitDriftSpecificNode(e, arg);
} }
@override @override

View File

@ -28,7 +28,7 @@ class ViewAnalyzer extends BaseAnalyzer {
final declaration = viewDeclaration.creatingStatement; final declaration = viewDeclaration.creatingStatement;
final parserView = view.parserView = final parserView = view.parserView =
const SchemaFromCreateTable(moorExtensions: true) const SchemaFromCreateTable(driftExtensions: true)
.readView(ctx, declaration); .readView(ctx, declaration);
final columns = <MoorColumn>[]; final columns = <MoorColumn>[];
@ -51,7 +51,7 @@ class ViewAnalyzer extends BaseAnalyzer {
view.columns = columns; view.columns = columns;
final desiredNames = declaration.moorTableName; final desiredNames = declaration.driftTableName;
if (desiredNames != null) { if (desiredNames != null) {
final dataClassName = desiredNames.overriddenDataClassName; final dataClassName = desiredNames.overriddenDataClassName;
if (desiredNames.useExistingDartClass) { if (desiredNames.useExistingDartClass) {

View File

@ -40,13 +40,13 @@ class PreprocessBuilder extends Builder {
FutureOr<void> build(BuildStep buildStep) async { FutureOr<void> build(BuildStep buildStep) async {
final input = buildStep.inputId; final input = buildStep.inputId;
final moorFileContent = await buildStep.readAsString(input); final moorFileContent = await buildStep.readAsString(input);
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
ParseResult parsedInput; ParseResult parsedInput;
try { try {
parsedInput = engine.parseMoorFile(moorFileContent); parsedInput = engine.parseDriftFile(moorFileContent);
} on Exception { } on Exception {
// Moor file couldn't be parsed, ignore... If it's imported, the main // Drift file couldn't be parsed, ignore... If it's imported, the main
// builder will provide a better error message. // builder will provide a better error message.
return; return;
} }
@ -71,7 +71,7 @@ class PreprocessBuilder extends Builder {
if (asset.extension == '.moor' || asset.extension == '.drift') { if (asset.extension == '.moor' || asset.extension == '.drift') {
final parsed = asset == input final parsed = asset == input
? parsedInput ? parsedInput
: engine.parseMoorFile(await buildStep.readAsString(asset)); : engine.parseDriftFile(await buildStep.readAsString(asset));
parsed.rootNode.allDescendants parsed.rootNode.allDescendants
.whereType<ImportStatement>() .whereType<ImportStatement>()

View File

@ -25,15 +25,15 @@ class _FoldingVisitor extends RecursiveVisitor<void, void> {
_FoldingVisitor(this.collector); _FoldingVisitor(this.collector);
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is MoorFile) { if (e is DriftFile) {
visitMoorFile(e, arg); visitMoorFile(e, arg);
} else { } else {
visitChildren(e, arg); visitChildren(e, arg);
} }
} }
void visitMoorFile(MoorFile e, void arg) { void visitMoorFile(DriftFile e, void arg) {
// construct a folding region for import statements // construct a folding region for import statements
final imports = e.imports.toList(); final imports = e.imports.toList();
if (imports.length > 1) { if (imports.length > 1) {

View File

@ -42,7 +42,7 @@ class _NavigationVisitor extends RecursiveVisitor<void, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is ImportStatement) { if (e is ImportStatement) {
return visitMoorImportStatement(e, arg); return visitMoorImportStatement(e, arg);
} }

View File

@ -77,15 +77,15 @@ class _OutlineVisitor extends RecursiveVisitor<void, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is MoorFile) { if (e is DriftFile) {
visitMoorFile(e, arg); visitMoorFile(e, arg);
} else if (e is DeclaredStatement) { } else if (e is DeclaredStatement) {
visitMoorDeclaredStatement(e, arg); visitMoorDeclaredStatement(e, arg);
} }
} }
void visitMoorFile(MoorFile e, void arg) { void visitMoorFile(DriftFile e, void arg) {
_startElement(ElementKind.LIBRARY, request.file.shortName, e); _startElement(ElementKind.LIBRARY, request.file.shortName, e);
visitChildren(e, arg); visitChildren(e, arg);
collector.endElement(); collector.endElement();

View File

@ -100,11 +100,11 @@ class MigrateCommand extends MoorCommand {
} }
Future<String> _transformMoorFile(File file) async { Future<String> _transformMoorFile(File file) async {
final engine = SqlEngine( final engine = SqlEngine(EngineOptions(
EngineOptions(useMoorExtensions: true, version: SqliteVersion.current)); useDriftExtensions: true, version: SqliteVersion.current));
final originalContent = await file.readAsString(); final originalContent = await file.readAsString();
var output = originalContent; var output = originalContent;
final result = engine.parseMoorFile(originalContent); final result = engine.parseDriftFile(originalContent);
if (result.errors.isNotEmpty) { if (result.errors.isNotEmpty) {
cli.logger.warning('Could not parse ${file.path}, skipping...'); cli.logger.warning('Could not parse ${file.path}, skipping...');
@ -112,7 +112,7 @@ class MigrateCommand extends MoorCommand {
} }
// Change imports to point from .moor to .drift files // Change imports to point from .moor to .drift files
final root = result.rootNode as MoorFile; final root = result.rootNode as DriftFile;
for (final import in root.imports) { for (final import in root.imports) {
final importedFile = import.importedFile; final importedFile = import.importedFile;
if (p.url.extension(importedFile) == '.moor') { if (p.url.extension(importedFile) == '.moor') {

View File

@ -147,7 +147,7 @@ class _HighlightingVisitor extends RecursiveVisitor<void, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is DeclaredStatement) { if (e is DeclaredStatement) {
final identifier = e.identifier; final identifier = e.identifier;
if (identifier is SimpleName && identifier.identifier != null) { if (identifier is SimpleName && identifier.identifier != null) {

View File

@ -118,11 +118,11 @@ class SqlWriter extends NodeSqlBuilder {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is NestedStarResultColumn) { if (e is NestedStarResultColumn) {
final result = _starColumnToResolved[e]; final result = _starColumnToResolved[e];
if (result == null) { if (result == null) {
return super.visitMoorSpecificNode(e, arg); return super.visitDriftSpecificNode(e, arg);
} }
final select = query as SqlSelectQuery; final select = query as SqlSelectQuery;
@ -155,7 +155,7 @@ class SqlWriter extends NodeSqlBuilder {
'variables (or just removed if no variables are required)', 'variables (or just removed if no variables are required)',
); );
} else { } else {
return super.visitMoorSpecificNode(e, arg); return super.visitDriftSpecificNode(e, arg);
} }
} }
} }

View File

@ -4,7 +4,7 @@ import 'package:sqlparser/utils/node_to_text.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
void main() { void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final result = engine.parse('CREATE TABLE a (id INTEGER);'); final result = engine.parse('CREATE TABLE a (id INTEGER);');
engine.registerTable(const SchemaFromCreateTable() engine.registerTable(const SchemaFromCreateTable()
.read(result.rootNode as CreateTableStatement)); .read(result.rootNode as CreateTableStatement));

View File

@ -10,7 +10,7 @@ import '../utils.dart';
void main() { void main() {
final engine = SqlEngine(EngineOptions( final engine = SqlEngine(EngineOptions(
useMoorExtensions: true, enabledExtensions: const [Json1Extension()])); useDriftExtensions: true, enabledExtensions: const [Json1Extension()]));
final mapper = TypeMapper(); final mapper = TypeMapper();
final fakeQuery = DeclaredDartQuery('query', 'sql'); final fakeQuery = DeclaredDartQuery('query', 'sql');

View File

@ -28,7 +28,7 @@ CREATE TABLE bar (
Future<void> main() async { Future<void> main() async {
final mapper = TypeMapper(); final mapper = TypeMapper();
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final step = ParseMoorStep(Task(null, null, null), final step = ParseMoorStep(Task(null, null, null),
FoundFile(Uri.parse('file://foo'), FileType.moor), ''); FoundFile(Uri.parse('file://foo'), FileType.moor), '');

View File

@ -11,7 +11,7 @@ final Table table =
Table(name: 'todos', resolvedColumns: [_idColumn, _titleColumn]); Table(name: 'todos', resolvedColumns: [_idColumn, _titleColumn]);
void main() { void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final mapper = TypeMapper(); final mapper = TypeMapper();
test('extracts variables and sorts them by index', () { test('extracts variables and sorts them by index', () {

View File

@ -5,7 +5,7 @@ import 'package:intl/intl.dart';
import 'src/moor/key_value_insert.dart'; import 'src/moor/key_value_insert.dart';
import 'src/sqlite/bind_string.dart'; import 'src/sqlite/bind_string.dart';
import 'src/sqlparser/parse_moor_file.dart'; import 'src/sqlparser/parse_drift_file.dart';
import 'src/sqlparser/tokenizer.dart'; import 'src/sqlparser/tokenizer.dart';
export 'package:benchmark_harness/benchmark_harness.dart' show ScoreEmitter; export 'package:benchmark_harness/benchmark_harness.dart' show ScoreEmitter;
@ -20,7 +20,7 @@ List<Reportable> allBenchmarks(ScoreEmitter emitter) {
KeyValueInsertBatch(emitter), KeyValueInsertBatch(emitter),
KeyValueInsertSerial(emitter), KeyValueInsertSerial(emitter),
// sql parser // sql parser
ParseMoorFile(emitter), ParseDriftFile(emitter),
TokenizerBenchmark(emitter), TokenizerBenchmark(emitter),
]; ];
} }

View File

@ -30,20 +30,21 @@ manyColumns:
SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z FROM test; SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z FROM test;
'''; ''';
class ParseMoorFile extends BenchmarkBase { class ParseDriftFile extends BenchmarkBase {
ParseMoorFile(ScoreEmitter emitter) : super('Moor file: Parse only', emitter); ParseDriftFile(ScoreEmitter emitter)
: super('Moor file: Parse only', emitter);
final _engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final _engine = SqlEngine(EngineOptions(useDriftExtensions: true));
@override @override
void exercise() { void exercise() {
for (var i = 0; i < 10; i++) { for (var i = 0; i < 10; i++) {
assert(_engine.parseMoorFile(file).errors.isEmpty); assert(_engine.parseDriftFile(file).errors.isEmpty);
} }
} }
@override @override
void run() { void run() {
_engine.parseMoorFile(file); _engine.parseDriftFile(file);
} }
} }

View File

@ -1,6 +1,7 @@
## 0.21.0 ## 0.21.0
- Analysis support for new features in sqlite version 3.38. - Analysis support for new features in sqlite version 3.38.
- Replace internal `moor` references with `drift` references.
## 0.20.1 ## 0.20.1

View File

@ -69,7 +69,7 @@ resolvedColumns.map((c) => context.typeOf(c).type.type); // int, text, int, text
``` ```
## But why? ## But why?
[Moor](https://pub.dev/packages/moor), a persistence library for Dart apps, uses this [Drift](https://pub.dev/packages/drift), a persistence library for Dart apps, uses this
package to generate type-safe methods from sql. package to generate type-safe methods from sql.
## Thanks ## Thanks

View File

@ -12,4 +12,5 @@ export 'src/engine/options.dart';
export 'src/engine/sql_engine.dart'; export 'src/engine/sql_engine.dart';
export 'src/reader/parser.dart' show ParsingError; export 'src/reader/parser.dart' show ParsingError;
export 'src/reader/syntactic_entity.dart'; export 'src/reader/syntactic_entity.dart';
export 'src/reader/tokenizer/token.dart' hide keywords, moorKeywords, isKeyword; export 'src/reader/tokenizer/token.dart'
hide keywords, driftKeywords, isKeyword;

View File

@ -6,7 +6,7 @@ class AnalyzeStatementOptions {
final Map<int, ResolvedType> indexedVariableTypes; final Map<int, ResolvedType> indexedVariableTypes;
final Map<String, ResolvedType> namedVariableTypes; final Map<String, ResolvedType> namedVariableTypes;
/// Moor specific. Maps from a Dart placeholder in a query to its default /// Drift specific. Maps from a Dart placeholder in a query to its default
/// expression, if set. /// expression, if set.
final Map<String, Expression> defaultValuesForPlaceholder; final Map<String, Expression> defaultValuesForPlaceholder;

View File

@ -4,9 +4,9 @@ part of '../analysis.dart';
class SchemaFromCreateTable { class SchemaFromCreateTable {
/// Whether we should provide additional type hints for nonstandard `BOOL` /// Whether we should provide additional type hints for nonstandard `BOOL`
/// and `DATETIME` columns. /// and `DATETIME` columns.
final bool moorExtensions; final bool driftExtensions;
const SchemaFromCreateTable({this.moorExtensions = false}); const SchemaFromCreateTable({this.driftExtensions = false});
/// Reads a [Table] schema from the [stmt] inducing a table (either a /// Reads a [Table] schema from the [stmt] inducing a table (either a
/// [CreateTableStatement] or a [CreateVirtualTableStatement]). /// [CreateTableStatement] or a [CreateVirtualTableStatement]).
@ -126,7 +126,7 @@ class SchemaFromCreateTable {
} }
/// Resolves a column type via its typename, see the linked rules below. /// Resolves a column type via its typename, see the linked rules below.
/// Additionally, if [moorExtensions] are enabled, we support [IsBoolean] and /// Additionally, if [driftExtensions] are enabled, we support [IsBoolean] and
/// [IsDateTime] hints if the type name contains `BOOL` or `DATE`, /// [IsDateTime] hints if the type name contains `BOOL` or `DATE`,
/// respectively. /// respectively.
/// https://www.sqlite.org/datatype3.html#determination_of_column_affinity /// https://www.sqlite.org/datatype3.html#determination_of_column_affinity
@ -149,7 +149,7 @@ class SchemaFromCreateTable {
return const ResolvedType(type: BasicType.blob); return const ResolvedType(type: BasicType.blob);
} }
if (moorExtensions) { if (driftExtensions) {
if (upper.contains('BOOL')) { if (upper.contains('BOOL')) {
return const ResolvedType.bool(); return const ResolvedType.bool();
} }
@ -166,7 +166,7 @@ class SchemaFromCreateTable {
} }
bool isValidTypeNameForStrictTable(String typeName) { bool isValidTypeNameForStrictTable(String typeName) {
if (moorExtensions) { if (driftExtensions) {
// Drift_dev will use resolveColumnType to analyze the actual type of the // Drift_dev will use resolveColumnType to analyze the actual type of the
// column, and the generated code will always use a valid type name for // column, and the generated code will always use a valid type name for
// that type. So, anything goes! // that type. So, anything goes!

View File

@ -43,7 +43,7 @@ class LintingVisitor extends RecursiveVisitor<void, void> {
@override @override
void visitCreateTableStatement(CreateTableStatement e, void arg) { void visitCreateTableStatement(CreateTableStatement e, void arg) {
final schemaReader = final schemaReader =
SchemaFromCreateTable(moorExtensions: options.useMoorExtensions); SchemaFromCreateTable(driftExtensions: options.useDriftExtensions);
var hasNonGeneratedColumn = false; var hasNonGeneratedColumn = false;
var hasPrimaryKeyDeclaration = false; var hasPrimaryKeyDeclaration = false;
var isStrict = false; var isStrict = false;

View File

@ -252,7 +252,7 @@ class AstPreparingVisitor extends RecursiveVisitor<void, void> {
/// If a nested query was found. Collect everything separately. /// If a nested query was found. Collect everything separately.
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is NestedQueryColumn) { if (e is NestedQueryColumn) {
// create a new scope for the nested query to differentiate between // create a new scope for the nested query to differentiate between
// references that can be resolved in the nested query and references // references that can be resolved in the nested query and references
@ -260,7 +260,7 @@ class AstPreparingVisitor extends RecursiveVisitor<void, void> {
e.select.scope = e.scope.createChild(); e.select.scope = e.scope.createChild();
AstPreparingVisitor(context: context).start(e.select); AstPreparingVisitor(context: context).start(e.select);
} else { } else {
super.visitMoorSpecificNode(e, arg); super.visitDriftSpecificNode(e, arg);
} }
} }
} }

View File

@ -174,11 +174,11 @@ class TypeResolver extends RecursiveVisitor<TypeExpectation, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, TypeExpectation arg) { void visitDriftSpecificNode(DriftSpecificNode e, TypeExpectation arg) {
if (e is DartExpressionPlaceholder) { if (e is DartExpressionPlaceholder) {
_inferAsVariable(e, arg); _inferAsVariable(e, arg);
} else { } else {
super.visitMoorSpecificNode(e, arg); super.visitDriftSpecificNode(e, arg);
} }
} }

View File

@ -2,9 +2,8 @@ import 'package:meta/meta.dart';
import 'package:sqlparser/src/analysis/analysis.dart'; import 'package:sqlparser/src/analysis/analysis.dart';
import 'package:sqlparser/src/reader/tokenizer/token.dart'; import 'package:sqlparser/src/reader/tokenizer/token.dart';
// todo: Remove these imports after splitting up this library import 'drift/inline_dart.dart';
import 'expressions/expressions.dart'; import 'expressions/expressions.dart';
import 'moor/inline_dart.dart';
import 'node.dart'; import 'node.dart';
import 'statements/create_index.dart'; import 'statements/create_index.dart';
import 'statements/select.dart'; import 'statements/select.dart';
@ -12,14 +11,14 @@ import 'visitor.dart';
export 'clauses/returning.dart'; export 'clauses/returning.dart';
export 'clauses/upsert.dart'; export 'clauses/upsert.dart';
export 'drift/declared_statement.dart';
export 'drift/drift_file.dart';
export 'drift/import_statement.dart';
export 'drift/inline_dart.dart';
export 'drift/nested_query_column.dart';
export 'drift/nested_star_result_column.dart';
export 'expressions/expressions.dart'; export 'expressions/expressions.dart';
export 'expressions/raise.dart'; export 'expressions/raise.dart';
export 'moor/declared_statement.dart';
export 'moor/import_statement.dart';
export 'moor/inline_dart.dart';
export 'moor/moor_file.dart';
export 'moor/nested_query_column.dart';
export 'moor/nested_star_result_column.dart';
export 'node.dart'; export 'node.dart';
export 'statements/block.dart'; export 'statements/block.dart';
export 'statements/create_index.dart'; export 'statements/create_index.dart';

View File

@ -1,7 +1,7 @@
part of '../ast.dart'; part of '../ast.dart';
/// Base for limit statements. Without moor extensions, only [Limit] will be /// Base for `LIMIT` clauses. Without drift extensions, only [Limit] will be
/// parsed. With moor extensions, a [DartLimitPlaceholder] can be emitted as /// parsed. With drift extensions, a [DartLimitPlaceholder] can be emitted as
/// well. /// well.
abstract class LimitBase implements AstNode {} abstract class LimitBase implements AstNode {}

View File

@ -1,11 +1,11 @@
part of '../ast.dart'; part of '../ast.dart';
/// Base for `ORDER BY` clauses. Without moor extensions, ony [OrderBy] will be /// Base for `ORDER BY` clauses. Without drift extensions, ony [OrderBy] will be
/// parsed. Otherwise, [DartOrderByPlaceholder] can be parsed as well. /// parsed. Otherwise, [DartOrderByPlaceholder] can be parsed as well.
abstract class OrderByBase extends AstNode {} abstract class OrderByBase extends AstNode {}
/// Base for a single ordering term that is a part of a [OrderBy]. Without moor /// Base for a single ordering term that is a part of a [OrderBy]. Without drift
/// extensions, only [OrderingTerm] will be parsed. With moor extensions, a /// extensions, only [OrderingTerm] will be parsed. With drift extensions, a
/// [DartOrderingTermPlaceholder] can be parsed as well. /// [DartOrderingTermPlaceholder] can be parsed as well.
abstract class OrderingTermBase extends AstNode {} abstract class OrderingTermBase extends AstNode {}

View File

@ -5,11 +5,11 @@ import '../node.dart';
import '../statements/statement.dart'; import '../statements/statement.dart';
import '../statements/transaction.dart'; import '../statements/transaction.dart';
import '../visitor.dart'; import '../visitor.dart';
import 'moor_file.dart'; import 'drift_file.dart';
/// A declared statement inside a `.moor` file. It consists of an identifier, /// A declared statement inside a `.moor` file. It consists of an identifier,
/// followed by a colon and the query to run. /// followed by a colon and the query to run.
class DeclaredStatement extends Statement implements PartOfMoorFile { class DeclaredStatement extends Statement implements PartOfDriftFile {
final DeclaredStatementIdentifier identifier; final DeclaredStatementIdentifier identifier;
AstNode statement; AstNode statement;
List<StatementParameter> parameters; List<StatementParameter> parameters;
@ -29,7 +29,7 @@ class DeclaredStatement extends Statement implements PartOfMoorFile {
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
@override @override
@ -96,10 +96,10 @@ class SpecialStatementIdentifier extends DeclaredStatementIdentifier {
/// identifier. /// identifier.
/// In `selectString(:name AS TEXT): SELECT :name`, `:name AS TEXT` is a /// In `selectString(:name AS TEXT): SELECT :name`, `:name AS TEXT` is a
/// statement parameter. /// statement parameter.
abstract class StatementParameter extends AstNode implements MoorSpecificNode { abstract class StatementParameter extends AstNode implements DriftSpecificNode {
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
} }
@ -154,7 +154,7 @@ class DartPlaceholderDefaultValue extends StatementParameter {
} }
} }
class TransactionBlock extends AstNode implements MoorSpecificNode { class TransactionBlock extends AstNode implements DriftSpecificNode {
BeginTransactionStatement begin; BeginTransactionStatement begin;
List<CrudStatement> innerStatements; List<CrudStatement> innerStatements;
CommitStatement commit; CommitStatement commit;
@ -167,7 +167,7 @@ class TransactionBlock extends AstNode implements MoorSpecificNode {
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
@override @override

View File

@ -5,23 +5,23 @@ import 'declared_statement.dart';
import 'import_statement.dart'; import 'import_statement.dart';
/// Marker interface for AST nodes that are moor-specific. /// Marker interface for AST nodes that are moor-specific.
abstract class MoorSpecificNode implements AstNode {} abstract class DriftSpecificNode implements AstNode {}
/// Something that can appear as a top-level declaration inside a `.moor` file. /// Something that can appear as a top-level declaration inside a `.moor` file.
abstract class PartOfMoorFile implements Statement, MoorSpecificNode {} abstract class PartOfDriftFile implements Statement, DriftSpecificNode {}
/// A moor file. /// A parsed `.drift` file.
/// ///
/// A moor file consists of [ImportStatement], followed by ddl statements, /// A drift file consists of [ImportStatement]s, followed by ddl statements,
/// followed by [DeclaredStatement]s. /// followed by [DeclaredStatement]s.
class MoorFile extends AstNode implements MoorSpecificNode { class DriftFile extends AstNode implements DriftSpecificNode {
List<PartOfMoorFile> statements; List<PartOfDriftFile> statements;
MoorFile(this.statements); DriftFile(this.statements);
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
@override @override
@ -37,15 +37,15 @@ class MoorFile extends AstNode implements MoorSpecificNode {
childNodes.whereType<ImportStatement>(); childNodes.whereType<ImportStatement>();
} }
class MoorTableName extends AstNode implements MoorSpecificNode { class DriftTableName extends AstNode implements DriftSpecificNode {
final String overriddenDataClassName; final String overriddenDataClassName;
final bool useExistingDartClass; final bool useExistingDartClass;
MoorTableName(this.overriddenDataClassName, this.useExistingDartClass); DriftTableName(this.overriddenDataClassName, this.useExistingDartClass);
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
@override @override

View File

@ -2,10 +2,10 @@ import '../../reader/tokenizer/token.dart';
import '../node.dart'; import '../node.dart';
import '../statements/statement.dart'; import '../statements/statement.dart';
import '../visitor.dart'; import '../visitor.dart';
import 'moor_file.dart'; import 'drift_file.dart';
/// An `import "file.dart";` statement that can appear inside a moor file. /// An `import "file.dart";` statement that can appear inside a moor file.
class ImportStatement extends Statement implements PartOfMoorFile { class ImportStatement extends Statement implements PartOfDriftFile {
Token? importToken; Token? importToken;
StringLiteralToken? importString; StringLiteralToken? importString;
final String importedFile; final String importedFile;
@ -14,7 +14,7 @@ class ImportStatement extends Statement implements PartOfMoorFile {
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
@override @override

View File

@ -14,7 +14,7 @@ import '../ast.dart';
/// moor. /// moor.
/// 4. A list of order-by clauses, which will be exposed as a `OrderBy` from /// 4. A list of order-by clauses, which will be exposed as a `OrderBy` from
/// moor. /// moor.
abstract class DartPlaceholder extends AstNode implements MoorSpecificNode { abstract class DartPlaceholder extends AstNode implements DriftSpecificNode {
final String name; final String name;
DollarSignVariableToken? token; DollarSignVariableToken? token;
@ -29,7 +29,7 @@ abstract class DartPlaceholder extends AstNode implements MoorSpecificNode {
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
T? when<T>({ T? when<T>({

View File

@ -1,7 +1,7 @@
import '../ast.dart' show ResultColumn, Renamable, SelectStatement; import '../ast.dart' show ResultColumn, Renamable, SelectStatement;
import '../node.dart'; import '../node.dart';
import '../visitor.dart'; import '../visitor.dart';
import 'moor_file.dart'; import 'drift_file.dart';
/// To wrap the query name into its own type, to avoid conflicts when using /// To wrap the query name into its own type, to avoid conflicts when using
/// the [AstNode] metadata. /// the [AstNode] metadata.
@ -18,7 +18,7 @@ class _NestedColumnNameMetadata {
/// top level select query, because the result of them can only be computed /// top level select query, because the result of them can only be computed
/// in dart. /// in dart.
class NestedQueryColumn extends ResultColumn class NestedQueryColumn extends ResultColumn
implements MoorSpecificNode, Renamable { implements DriftSpecificNode, Renamable {
@override @override
final String? as; final String? as;
@ -36,7 +36,7 @@ class NestedQueryColumn extends ResultColumn
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
/// The unique name for this query. Used to identify it and it's variables in /// The unique name for this query. Used to identify it and it's variables in

View File

@ -2,7 +2,7 @@ import '../../analysis/analysis.dart';
import '../ast.dart' show StarResultColumn, ResultColumn, Renamable; import '../ast.dart' show StarResultColumn, ResultColumn, Renamable;
import '../node.dart'; import '../node.dart';
import '../visitor.dart'; import '../visitor.dart';
import 'moor_file.dart'; import 'drift_file.dart';
/// A nested star result column, denoted by `**` in user queries. /// A nested star result column, denoted by `**` in user queries.
/// ///
@ -10,7 +10,7 @@ import 'moor_file.dart';
/// when the query is actually run. However, they will affect generated code /// when the query is actually run. However, they will affect generated code
/// when using moor. /// when using moor.
class NestedStarResultColumn extends ResultColumn class NestedStarResultColumn extends ResultColumn
implements MoorSpecificNode, Renamable { implements DriftSpecificNode, Renamable {
final String tableName; final String tableName;
ResultSet? resultSet; ResultSet? resultSet;
@ -27,6 +27,6 @@ class NestedStarResultColumn extends ResultColumn
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg); return visitor.visitDriftSpecificNode(this, arg);
} }
} }

View File

@ -217,7 +217,7 @@ class GeneratedAs extends ColumnConstraint {
} }
} }
/// A `MAPPED BY` constraint, which is only parsed for moor files. It can be /// A `MAPPED BY` constraint, which is only parsed for drift files. It can be
/// used to declare a type converter for this column. /// used to declare a type converter for this column.
class MappedBy extends ColumnConstraint { class MappedBy extends ColumnConstraint {
/// The Dart expression creating the type converter we use to map this token. /// The Dart expression creating the type converter we use to map this token.
@ -232,7 +232,7 @@ class MappedBy extends ColumnConstraint {
void transformChildren<A>(Transformer<A> transformer, A arg) {} void transformChildren<A>(Transformer<A> transformer, A arg) {}
} }
/// A `JSON KEY xyz` constraint, which is only parsed for moor files. /// A `JSON KEY xyz` constraint, which is only parsed for drift files.
class JsonKey extends ColumnConstraint { class JsonKey extends ColumnConstraint {
Token? json; Token? json;
Token? key; Token? key;
@ -249,8 +249,8 @@ class JsonKey extends ColumnConstraint {
void transformChildren<A>(Transformer<A> transformer, A arg) {} void transformChildren<A>(Transformer<A> transformer, A arg) {}
} }
/// A `AS xyz` constraint, which is only parsed for moor files. /// A `AS xyz` constraint, which is only parsed for drift files.
class MoorDartName extends ColumnConstraint { class DriftDartName extends ColumnConstraint {
Token? as; Token? as;
IdentifierToken identifier; IdentifierToken identifier;
@ -259,7 +259,7 @@ class MoorDartName extends ColumnConstraint {
String get dartName => identifier.identifier; String get dartName => identifier.identifier;
MoorDartName(String? name, this.identifier) : super(name); DriftDartName(String? name, this.identifier) : super(name);
@override @override
void transformChildren<A>(Transformer<A> transformer, A arg) {} void transformChildren<A>(Transformer<A> transformer, A arg) {}

View File

@ -8,15 +8,15 @@ abstract class TableInducingStatement extends Statement
final bool ifNotExists; final bool ifNotExists;
final String tableName; final String tableName;
/// Moor-specific information about the desired name of a Dart class for this /// Drift-specific information about the desired name of a Dart class for this
/// table. /// table.
/// ///
/// This will always be `null` when moor extensions are not enabled. /// This will always be `null` when drift extensions are not enabled.
MoorTableName? moorTableName; DriftTableName? driftTableName;
Token? tableNameToken; Token? tableNameToken;
TableInducingStatement._(this.ifNotExists, this.tableName, TableInducingStatement._(this.ifNotExists, this.tableName,
[this.moorTableName]); [this.driftTableName]);
@override @override
String get createdName => tableName; String get createdName => tableName;
@ -48,8 +48,8 @@ class CreateTableStatement extends TableInducingStatement {
this.tableConstraints = const [], this.tableConstraints = const [],
this.withoutRowId = false, this.withoutRowId = false,
this.isStrict = false, this.isStrict = false,
MoorTableName? moorTableName, DriftTableName? driftTableName,
}) : super._(ifNotExists, tableName, moorTableName); }) : super._(ifNotExists, tableName, driftTableName);
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
@ -61,15 +61,15 @@ class CreateTableStatement extends TableInducingStatement {
columns = transformer.transformChildren(columns, this, arg); columns = transformer.transformChildren(columns, this, arg);
tableConstraints = tableConstraints =
transformer.transformChildren(tableConstraints, this, arg); transformer.transformChildren(tableConstraints, this, arg);
moorTableName = driftTableName =
transformer.transformNullableChild(moorTableName, this, arg); transformer.transformNullableChild(driftTableName, this, arg);
} }
@override @override
Iterable<AstNode> get childNodes => [ Iterable<AstNode> get childNodes => [
...columns, ...columns,
...tableConstraints, ...tableConstraints,
if (moorTableName != null) moorTableName!, if (driftTableName != null) driftTableName!,
]; ];
} }
@ -93,8 +93,8 @@ class CreateVirtualTableStatement extends TableInducingStatement {
required String tableName, required String tableName,
required this.moduleName, required this.moduleName,
this.arguments = const [], this.arguments = const [],
MoorTableName? moorTableName, DriftTableName? driftTableName,
}) : super._(ifNotExists, tableName, moorTableName); }) : super._(ifNotExists, tableName, driftTableName);
@override @override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) { R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
@ -103,11 +103,11 @@ class CreateVirtualTableStatement extends TableInducingStatement {
@override @override
void transformChildren<A>(Transformer<A> transformer, A arg) { void transformChildren<A>(Transformer<A> transformer, A arg) {
moorTableName = driftTableName =
transformer.transformNullableChild(moorTableName, this, arg); transformer.transformNullableChild(driftTableName, this, arg);
} }
@override @override
Iterable<AstNode> get childNodes => Iterable<AstNode> get childNodes =>
[if (moorTableName != null) moorTableName!]; [if (driftTableName != null) driftTableName!];
} }

View File

@ -12,18 +12,18 @@ class CreateViewStatement extends Statement implements CreatingStatement {
final List<String>? columns; final List<String>? columns;
/// Moor-specific information about the desired name of a Dart class for this /// Drift-specific information about the desired name of a Dart class for this
/// table. /// table.
/// ///
/// This will always be `null` when moor extensions are not enabled. /// This will always be `null` when drift extensions are not enabled.
MoorTableName? moorTableName; DriftTableName? driftTableName;
CreateViewStatement({ CreateViewStatement({
this.ifNotExists = false, this.ifNotExists = false,
required this.viewName, required this.viewName,
this.columns, this.columns,
required this.query, required this.query,
this.moorTableName, this.driftTableName,
}); });
@override @override
@ -37,11 +37,11 @@ class CreateViewStatement extends Statement implements CreatingStatement {
@override @override
void transformChildren<A>(Transformer<A> transformer, A arg) { void transformChildren<A>(Transformer<A> transformer, A arg) {
query = transformer.transformChild(query, this, arg); query = transformer.transformChild(query, this, arg);
moorTableName = driftTableName =
transformer.transformNullableChild(moorTableName, this, arg); transformer.transformNullableChild(driftTableName, this, arg);
} }
@override @override
Iterable<AstNode> get childNodes => Iterable<AstNode> get childNodes =>
[query, if (moorTableName != null) moorTableName!]; [query, if (driftTableName != null) driftTableName!];
} }

View File

@ -55,7 +55,7 @@ abstract class StatementReturningColumns extends Statement {
} }
/// Marker interface for statements that change the table structure. /// Marker interface for statements that change the table structure.
abstract class SchemaStatement extends Statement implements PartOfMoorFile {} abstract class SchemaStatement extends Statement implements PartOfDriftFile {}
/// Marker interface for schema statements that create a schematic entity. /// Marker interface for schema statements that create a schematic entity.
abstract class CreatingStatement extends SchemaStatement { abstract class CreatingStatement extends SchemaStatement {

View File

@ -93,7 +93,7 @@ abstract class AstVisitor<A, R> {
R visitBeginTransaction(BeginTransactionStatement e, A arg); R visitBeginTransaction(BeginTransactionStatement e, A arg);
R visitCommitStatement(CommitStatement e, A arg); R visitCommitStatement(CommitStatement e, A arg);
R visitMoorSpecificNode(MoorSpecificNode e, A arg); R visitDriftSpecificNode(DriftSpecificNode e, A arg);
} }
/// Visitor that walks down the entire tree, visiting all children in order. /// Visitor that walks down the entire tree, visiting all children in order.
@ -388,7 +388,7 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R?> {
} }
@override @override
R? visitMoorSpecificNode(MoorSpecificNode e, A arg) { R? visitDriftSpecificNode(DriftSpecificNode e, A arg) {
return defaultNode(e, arg); return defaultNode(e, arg);
} }

View File

@ -2,10 +2,10 @@ import 'package:meta/meta.dart';
import 'package:sqlparser/sqlparser.dart'; import 'package:sqlparser/sqlparser.dart';
class EngineOptions { class EngineOptions {
/// Moor extends the sql grammar a bit to support type converters and other /// Drift extends the sql grammar a bit to support type converters and other
/// features. Enabling this flag will make this engine parse sql with these /// features. Enabling this flag will make this engine parse sql with these
/// extensions enabled. /// extensions enabled.
final bool useMoorExtensions; final bool useDriftExtensions;
/// The target sqlite version. /// The target sqlite version.
/// ///
@ -27,7 +27,7 @@ class EngineOptions {
final Map<String, TableValuedFunctionHandler> addedTableFunctions = {}; final Map<String, TableValuedFunctionHandler> addedTableFunctions = {};
EngineOptions({ EngineOptions({
this.useMoorExtensions = false, this.useDriftExtensions = false,
List<Extension> enabledExtensions = const [], List<Extension> enabledExtensions = const [],
this.version = SqliteVersion.minimum, this.version = SqliteVersion.minimum,
}) : enabledExtensions = _allExtensions(enabledExtensions, version) { }) : enabledExtensions = _allExtensions(enabledExtensions, version) {

View File

@ -35,7 +35,7 @@ class SqlEngine {
/// [TableInducingStatement] by using [SchemaFromCreateTable.read]. /// [TableInducingStatement] by using [SchemaFromCreateTable.read].
SchemaFromCreateTable get schemaReader { SchemaFromCreateTable get schemaReader {
return _schemaReader ??= return _schemaReader ??=
SchemaFromCreateTable(moorExtensions: options.useMoorExtensions); SchemaFromCreateTable(driftExtensions: options.useDriftExtensions);
} }
/// Registers the [table], which means that it can later be used in sql /// Registers the [table], which means that it can later be used in sql
@ -96,7 +96,8 @@ class SqlEngine {
/// you need to filter them. When using the methods in this class, this will /// you need to filter them. When using the methods in this class, this will
/// be taken care of automatically. /// be taken care of automatically.
List<Token> tokenize(String source) { List<Token> tokenize(String source) {
final scanner = Scanner(source, scanMoorTokens: options.useMoorExtensions); final scanner =
Scanner(source, scanDriftTokens: options.useDriftExtensions);
final tokens = scanner.scanTokens(); final tokens = scanner.scanTokens();
return tokens; return tokens;
@ -106,29 +107,30 @@ class SqlEngine {
ParseResult parse(String sql) { ParseResult parse(String sql) {
final tokens = tokenize(sql); final tokens = tokenize(sql);
final tokensForParser = tokens.where((t) => !t.invisibleToParser).toList(); final tokensForParser = tokens.where((t) => !t.invisibleToParser).toList();
final parser = Parser(tokensForParser, useMoor: options.useMoorExtensions); final parser =
Parser(tokensForParser, useDrift: options.useDriftExtensions);
final stmt = parser.safeStatement(); final stmt = parser.safeStatement();
return ParseResult._(stmt, tokens, parser.errors, sql, null); return ParseResult._(stmt, tokens, parser.errors, sql, null);
} }
/// Parses a `.moor` file, which can consist of multiple statements and /// Parses a `.drift` file, which can consist of multiple statements and
/// additional components like import statements. /// additional components like import statements.
ParseResult parseMoorFile(String content) { ParseResult parseDriftFile(String content) {
assert(options.useMoorExtensions); assert(options.useDriftExtensions);
final tokens = tokenize(content); final tokens = tokenize(content);
final autoComplete = AutoCompleteEngine(tokens, this); final autoComplete = AutoCompleteEngine(tokens, this);
final tokensForParser = tokens.where((t) => !t.invisibleToParser).toList(); final tokensForParser = tokens.where((t) => !t.invisibleToParser).toList();
final parser = final parser =
Parser(tokensForParser, useMoor: true, autoComplete: autoComplete); Parser(tokensForParser, useDrift: true, autoComplete: autoComplete);
final moorFile = parser.moorFile(); final driftFile = parser.driftFile();
_attachRootScope(moorFile); _attachRootScope(driftFile);
return ParseResult._( return ParseResult._(
moorFile, tokens, parser.errors, content, autoComplete); driftFile, tokens, parser.errors, content, autoComplete);
} }
/// Parses and analyzes the [sql] statement. The [AnalysisContext] returned /// Parses and analyzes the [sql] statement. The [AnalysisContext] returned

View File

@ -33,16 +33,16 @@ class Parser {
final List<ParsingError> errors = []; final List<ParsingError> errors = [];
final AutoCompleteEngine? autoComplete; final AutoCompleteEngine? autoComplete;
// todo remove this and don't be that lazy in moorFile() // todo remove this and don't be that lazy in driftFile()
var _lastStmtHadParsingError = false; var _lastStmtHadParsingError = false;
/// Whether to enable the extensions moor makes to the sql grammar. /// Whether to enable the extensions drift makes to the sql grammar.
final bool enableMoorExtensions; final bool enableDriftExtensions;
int _current = 0; int _current = 0;
Parser(this.tokens, {bool useMoor = false, this.autoComplete}) Parser(this.tokens, {bool useDrift = false, this.autoComplete})
: enableMoorExtensions = useMoor; : enableDriftExtensions = useDrift;
bool get _reportAutoComplete => autoComplete != null; bool get _reportAutoComplete => autoComplete != null;
@ -206,7 +206,7 @@ class Parser {
return _commit(); return _commit();
} }
if (enableMoorExtensions) { if (enableDriftExtensions) {
if (_check(TokenType.import)) { if (_check(TokenType.import)) {
return _import()!; return _import()!;
} }
@ -232,9 +232,9 @@ class Parser {
return stmt..setSpan(first, _previous); return stmt..setSpan(first, _previous);
} }
MoorFile moorFile() { DriftFile driftFile() {
final first = _peek; final first = _peek;
final foundComponents = <PartOfMoorFile?>[]; final foundComponents = <PartOfDriftFile?>[];
// (we try again if the last statement had a parsing error) // (we try again if the last statement had a parsing error)
@ -265,7 +265,7 @@ class Parser {
foundComponents.removeWhere((c) => c == null); foundComponents.removeWhere((c) => c == null);
final file = MoorFile(foundComponents.cast()); final file = DriftFile(foundComponents.cast());
if (foundComponents.isNotEmpty) { if (foundComponents.isNotEmpty) {
file.setSpan(first, _previous); file.setSpan(first, _previous);
} else { } else {
@ -798,7 +798,7 @@ class Parser {
..setSpan(left, _previous); ..setSpan(left, _previous);
} }
} else if (_matchOne(TokenType.dollarSignVariable)) { } else if (_matchOne(TokenType.dollarSignVariable)) {
if (enableMoorExtensions) { if (enableDriftExtensions) {
final typedToken = _previous as DollarSignVariableToken; final typedToken = _previous as DollarSignVariableToken;
return DartExpressionPlaceholder(name: typedToken.name) return DartExpressionPlaceholder(name: typedToken.name)
..token = typedToken ..token = typedToken
@ -1708,7 +1708,7 @@ class Parser {
final first = _previous; final first = _previous;
_consume(TokenType.$values, 'Expected DEFAULT VALUES'); _consume(TokenType.$values, 'Expected DEFAULT VALUES');
return DefaultValues()..setSpan(first, _previous); return DefaultValues()..setSpan(first, _previous);
} else if (enableMoorExtensions && } else if (enableDriftExtensions &&
_matchOne(TokenType.dollarSignVariable)) { _matchOne(TokenType.dollarSignVariable)) {
final token = _previous as DollarSignVariableToken; final token = _previous as DollarSignVariableToken;
return DartInsertablePlaceholder(name: token.name) return DartInsertablePlaceholder(name: token.name)
@ -1921,7 +1921,7 @@ class Parser {
if (_matchOne(TokenType.star)) { if (_matchOne(TokenType.star)) {
return StarResultColumn(identifier.identifier) return StarResultColumn(identifier.identifier)
..setSpan(identifier, _previous); ..setSpan(identifier, _previous);
} else if (enableMoorExtensions && _matchOne(TokenType.doubleStar)) { } else if (enableDriftExtensions && _matchOne(TokenType.doubleStar)) {
final as = _as(); final as = _as();
return NestedStarResultColumn( return NestedStarResultColumn(
@ -1938,7 +1938,7 @@ class Parser {
} }
// parsing for the nested query column // parsing for the nested query column
if (enableMoorExtensions && _matchOne(TokenType.list)) { if (enableDriftExtensions && _matchOne(TokenType.list)) {
final list = _previous; final list = _previous;
_consume( _consume(
@ -2080,7 +2080,7 @@ class Parser {
} }
} }
final overriddenName = _moorTableName(); final overriddenName = _driftTableName();
return CreateTableStatement( return CreateTableStatement(
ifNotExists: ifNotExists, ifNotExists: ifNotExists,
@ -2089,7 +2089,7 @@ class Parser {
columns: columns, columns: columns,
tableConstraints: tableConstraints, tableConstraints: tableConstraints,
isStrict: isStrict, isStrict: isStrict,
moorTableName: overriddenName, driftTableName: overriddenName,
) )
..setSpan(first, _previous) ..setSpan(first, _previous)
..openingBracket = leftParen ..openingBracket = leftParen
@ -2155,30 +2155,30 @@ class Parser {
} }
} }
final moorDataClassName = _moorTableName(); final driftTableName = _driftTableName();
return CreateVirtualTableStatement( return CreateVirtualTableStatement(
ifNotExists: ifNotExists, ifNotExists: ifNotExists,
tableName: nameToken.identifier, tableName: nameToken.identifier,
moduleName: moduleName.identifier, moduleName: moduleName.identifier,
arguments: args, arguments: args,
moorTableName: moorDataClassName, driftTableName: driftTableName,
) )
..setSpan(first, _previous) ..setSpan(first, _previous)
..tableNameToken = nameToken ..tableNameToken = nameToken
..moduleNameToken = moduleName; ..moduleNameToken = moduleName;
} }
MoorTableName? _moorTableName([bool supportAs = true]) { DriftTableName? _driftTableName({bool supportAs = true}) {
final types = final types =
supportAs ? const [TokenType.as, TokenType.$with] : [TokenType.$with]; supportAs ? const [TokenType.as, TokenType.$with] : [TokenType.$with];
if (enableMoorExtensions && (_match(types))) { if (enableDriftExtensions && (_match(types))) {
final first = _previous; final first = _previous;
final useExisting = _previous.type == TokenType.$with; final useExisting = _previous.type == TokenType.$with;
final name = final name =
_consumeIdentifier('Expected the name for the data class').identifier; _consumeIdentifier('Expected the name for the data class').identifier;
return MoorTableName(name, useExisting)..setSpan(first, _previous); return DriftTableName(name, useExisting)..setSpan(first, _previous);
} }
return null; return null;
} }
@ -2279,7 +2279,7 @@ class Parser {
// Don't allow the "AS ClassName" syntax for views since it causes an // Don't allow the "AS ClassName" syntax for views since it causes an
// ambiguity with the regular view syntax. // ambiguity with the regular view syntax.
final moorTableName = _moorTableName(false); final driftTableName = _driftTableName(supportAs: false);
List<String>? columnNames; List<String>? columnNames;
if (_matchOne(TokenType.leftParen)) { if (_matchOne(TokenType.leftParen)) {
@ -2299,7 +2299,7 @@ class Parser {
viewName: name.identifier, viewName: name.identifier,
columns: columnNames, columns: columnNames,
query: query, query: query,
moorTableName: moorTableName, driftTableName: driftTableName,
) )
..viewNameToken = name ..viewNameToken = name
..setSpan(create, _previous); ..setSpan(create, _previous);
@ -2525,7 +2525,7 @@ class Parser {
..setSpan(first, _previous); ..setSpan(first, _previous);
} }
if (enableMoorExtensions && _matchOne(TokenType.mapped)) { if (enableDriftExtensions && _matchOne(TokenType.mapped)) {
_consume(TokenType.by, 'Expected a MAPPED BY constraint'); _consume(TokenType.by, 'Expected a MAPPED BY constraint');
final dartExpr = _consume( final dartExpr = _consume(
@ -2534,7 +2534,7 @@ class Parser {
return MappedBy(resolvedName, dartExpr as InlineDartToken) return MappedBy(resolvedName, dartExpr as InlineDartToken)
..setSpan(first, _previous); ..setSpan(first, _previous);
} }
if (enableMoorExtensions && _matchOne(TokenType.json)) { if (enableDriftExtensions && _matchOne(TokenType.json)) {
final jsonToken = _previous; final jsonToken = _previous;
final keyToken = final keyToken =
_consume(TokenType.key, 'Expected a JSON KEY constraint'); _consume(TokenType.key, 'Expected a JSON KEY constraint');
@ -2545,11 +2545,11 @@ class Parser {
..json = jsonToken ..json = jsonToken
..key = keyToken; ..key = keyToken;
} }
if (enableMoorExtensions && _matchOne(TokenType.as)) { if (enableDriftExtensions && _matchOne(TokenType.as)) {
final asToken = _previous; final asToken = _previous;
final nameToken = _consumeIdentifier('Expected Dart getter name'); final nameToken = _consumeIdentifier('Expected Dart getter name');
return MoorDartName(resolvedName, nameToken) return DriftDartName(resolvedName, nameToken)
..setSpan(first, _previous) ..setSpan(first, _previous)
..as = asToken; ..as = asToken;
} }

View File

@ -10,8 +10,8 @@ class Scanner {
final String source; final String source;
final Uint16List _charCodes; final Uint16List _charCodes;
/// Whether to scan tokens that are only relevant for moor. /// Whether to scan tokens that are only relevant for drift files.
final bool scanMoorTokens; final bool scanDriftTokens;
final SourceFile _file; final SourceFile _file;
final List<Token> tokens = []; final List<Token> tokens = [];
@ -29,7 +29,7 @@ class Scanner {
return _file.location(_currentOffset); return _file.location(_currentOffset);
} }
Scanner(this.source, {this.scanMoorTokens = false}) Scanner(this.source, {this.scanDriftTokens = false})
: _file = SourceFile.fromString(source), : _file = SourceFile.fromString(source),
_charCodes = Uint16List.fromList(source.codeUnits); _charCodes = Uint16List.fromList(source.codeUnits);
@ -87,7 +87,7 @@ class Scanner {
} }
break; break;
case $asterisk: case $asterisk:
if (scanMoorTokens && _match($asterisk)) { if (scanDriftTokens && _match($asterisk)) {
_addToken(TokenType.doubleStar); _addToken(TokenType.doubleStar);
} else { } else {
_addToken(TokenType.star); _addToken(TokenType.star);
@ -190,7 +190,7 @@ class Scanner {
_identifier(escapeChar: $double_quote); _identifier(escapeChar: $double_quote);
break; break;
case $backquote: case $backquote:
if (scanMoorTokens) { if (scanDriftTokens) {
_inlineDart(); _inlineDart();
} else { } else {
_identifier(escapeChar: $backquote); _identifier(escapeChar: $backquote);
@ -412,8 +412,8 @@ class Scanner {
final text = _currentSpan.text.toUpperCase(); final text = _currentSpan.text.toUpperCase();
if (keywords.containsKey(text)) { if (keywords.containsKey(text)) {
tokens.add(KeywordToken(keywords[text]!, _currentSpan)); tokens.add(KeywordToken(keywords[text]!, _currentSpan));
} else if (scanMoorTokens && moorKeywords.containsKey(text)) { } else if (scanDriftTokens && driftKeywords.containsKey(text)) {
tokens.add(KeywordToken(moorKeywords[text]!, _currentSpan)); tokens.add(KeywordToken(driftKeywords[text]!, _currentSpan));
} else { } else {
tokens.add(IdentifierToken(false, _currentSpan)); tokens.add(IdentifierToken(false, _currentSpan));
} }

View File

@ -218,7 +218,7 @@ enum TokenType {
window, window,
without, without,
/// Moor specific token, used to declare type converter /// Drift specific token, used to declare type converter
mapped, mapped,
inlineDart, inlineDart,
import, import,
@ -226,7 +226,7 @@ enum TokenType {
required, required,
list, list,
/// A `**` token. This is only scanned when scanning for moor tokens. /// A `**` token. This is only scanned when scanning for drift tokens.
doubleStar, doubleStar,
} }
@ -412,10 +412,10 @@ const Map<String, TokenType> postgresKeywords = {
/// Maps [TokenType]s which are keywords to their lexeme. /// Maps [TokenType]s which are keywords to their lexeme.
final Map<TokenType, String> reverseKeywords = { final Map<TokenType, String> reverseKeywords = {
for (var entry in keywords.entries) entry.value: entry.key, for (var entry in keywords.entries) entry.value: entry.key,
for (var entry in moorKeywords.entries) entry.value: entry.key, for (var entry in driftKeywords.entries) entry.value: entry.key,
}; };
const Map<String, TokenType> moorKeywords = { const Map<String, TokenType> driftKeywords = {
'IMPORT': TokenType.import, 'IMPORT': TokenType.import,
'JSON': TokenType.json, 'JSON': TokenType.json,
'MAPPED': TokenType.mapped, 'MAPPED': TokenType.mapped,
@ -539,8 +539,8 @@ class AtSignVariableToken extends Token {
: super(TokenType.atSignVariable, span); : super(TokenType.atSignVariable, span);
} }
/// Inline Dart appearing in a create table statement. Only parsed when the moor /// Inline Dart appearing in a create table statement. Only parsed when the
/// extensions are enabled. Dart code is wrapped in backticks. /// drift extensions are enabled. Dart code is wrapped in backticks.
class InlineDartToken extends Token { class InlineDartToken extends Token {
InlineDartToken(FileSpan span) : super(TokenType.inlineDart, span); InlineDartToken(FileSpan span) : super(TokenType.inlineDart, span);
@ -562,7 +562,7 @@ class KeywordToken extends Token {
bool canConvertToIdentifier() { bool canConvertToIdentifier() {
// https://stackoverflow.com/a/45775719, but we don't parse indexed yet. // https://stackoverflow.com/a/45775719, but we don't parse indexed yet.
return _identifierKeywords.contains(type) || return _identifierKeywords.contains(type) ||
moorKeywords.values.contains(type); driftKeywords.values.contains(type);
} }
IdentifierToken convertToIdentifier() { IdentifierToken convertToIdentifier() {

View File

@ -419,58 +419,58 @@ class EqualityEnforcingVisitor implements AstVisitor<void, void> {
_checkChildren(e); _checkChildren(e);
} }
void visitMoorDeclaredStatement(DeclaredStatement e, void arg) { void visitDriftDeclaredStatement(DeclaredStatement e, void arg) {
final current = _currentAs<DeclaredStatement>(e); final current = _currentAs<DeclaredStatement>(e);
_assert(current.identifier == e.identifier && current.as == e.as, e); _assert(current.identifier == e.identifier && current.as == e.as, e);
_checkChildren(e); _checkChildren(e);
} }
void visitMoorFile(MoorFile e, void arg) { void visitDriftFile(DriftFile e, void arg) {
_currentAs<MoorFile>(e); _currentAs<DriftFile>(e);
_checkChildren(e); _checkChildren(e);
} }
void visitMoorImportStatement(ImportStatement e, void arg) { void visitDriftImportStatement(ImportStatement e, void arg) {
final current = _currentAs<ImportStatement>(e); final current = _currentAs<ImportStatement>(e);
_assert(current.importedFile == e.importedFile, e); _assert(current.importedFile == e.importedFile, e);
_checkChildren(e); _checkChildren(e);
} }
void visitMoorNestedStarResultColumn(NestedStarResultColumn e, void arg) { void visitDriftNestedStarResultColumn(NestedStarResultColumn e, void arg) {
final current = _currentAs<NestedStarResultColumn>(e); final current = _currentAs<NestedStarResultColumn>(e);
_assert(current.tableName == e.tableName, e); _assert(current.tableName == e.tableName, e);
_assert(current.as == e.as, e); _assert(current.as == e.as, e);
_checkChildren(e); _checkChildren(e);
} }
void visitMoorNestedQueryColumn(NestedQueryColumn e, void arg) { void visitDriftNestedQueryColumn(NestedQueryColumn e, void arg) {
final current = _currentAs<NestedQueryColumn>(e); final current = _currentAs<NestedQueryColumn>(e);
_assert(current.as == e.as, e); _assert(current.as == e.as, e);
_checkChildren(e); _checkChildren(e);
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is DartPlaceholder) { if (e is DartPlaceholder) {
return visitDartPlaceholder(e, arg); return visitDartPlaceholder(e, arg);
} else if (e is DeclaredStatement) { } else if (e is DeclaredStatement) {
return visitMoorDeclaredStatement(e, arg); return visitDriftDeclaredStatement(e, arg);
} else if (e is MoorFile) { } else if (e is DriftFile) {
return visitMoorFile(e, arg); return visitDriftFile(e, arg);
} else if (e is ImportStatement) { } else if (e is ImportStatement) {
return visitMoorImportStatement(e, arg); return visitDriftImportStatement(e, arg);
} else if (e is NestedStarResultColumn) { } else if (e is NestedStarResultColumn) {
return visitMoorNestedStarResultColumn(e, arg); return visitDriftNestedStarResultColumn(e, arg);
} else if (e is StatementParameter) { } else if (e is StatementParameter) {
return visitMoorStatementParameter(e, arg); return visitDriftStatementParameter(e, arg);
} else if (e is MoorTableName) { } else if (e is DriftTableName) {
return visitMoorTableName(e, arg); return visitDriftTableName(e, arg);
} else if (e is NestedQueryColumn) { } else if (e is NestedQueryColumn) {
return visitMoorNestedQueryColumn(e, arg); return visitDriftNestedQueryColumn(e, arg);
} }
} }
void visitMoorStatementParameter(StatementParameter e, void arg) { void visitDriftStatementParameter(StatementParameter e, void arg) {
if (e is VariableTypeHint) { if (e is VariableTypeHint) {
final current = _currentAs<VariableTypeHint>(e); final current = _currentAs<VariableTypeHint>(e);
_assert( _assert(
@ -486,8 +486,8 @@ class EqualityEnforcingVisitor implements AstVisitor<void, void> {
_checkChildren(e); _checkChildren(e);
} }
void visitMoorTableName(MoorTableName e, void arg) { void visitDriftTableName(DriftTableName e, void arg) {
final current = _currentAs<MoorTableName>(e); final current = _currentAs<DriftTableName>(e);
_assert( _assert(
current.overriddenDataClassName == e.overriddenDataClassName && current.overriddenDataClassName == e.overriddenDataClassName &&
current.useExistingDartClass == e.useExistingDartClass, current.useExistingDartClass == e.useExistingDartClass,

View File

@ -408,7 +408,7 @@ class NodeSqlBuilder extends AstVisitor<void, void> {
} }
@override @override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) { void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is DartPlaceholder) { if (e is DartPlaceholder) {
symbol(r'$', spaceBefore: true); symbol(r'$', spaceBefore: true);
symbol(e.name, spaceAfter: true); symbol(e.name, spaceAfter: true);
@ -429,7 +429,7 @@ class NodeSqlBuilder extends AstVisitor<void, void> {
symbol(':', spaceAfter: true); symbol(':', spaceAfter: true);
visit(e.statement, arg); visit(e.statement, arg);
symbol(';'); symbol(';');
} else if (e is MoorFile) { } else if (e is DriftFile) {
for (final stmt in e.statements) { for (final stmt in e.statements) {
visit(stmt, arg); visit(stmt, arg);
buffer.write('\n'); buffer.write('\n');
@ -461,7 +461,7 @@ class NodeSqlBuilder extends AstVisitor<void, void> {
} else { } else {
throw AssertionError('Unknown StatementParameter: $e'); throw AssertionError('Unknown StatementParameter: $e');
} }
} else if (e is MoorTableName) { } else if (e is DriftTableName) {
_keyword(e.useExistingDartClass ? TokenType.$with : TokenType.as); _keyword(e.useExistingDartClass ? TokenType.$with : TokenType.as);
identifier(e.overriddenDataClassName); identifier(e.overriddenDataClassName);
} else if (e is NestedStarResultColumn) { } else if (e is NestedStarResultColumn) {

View File

@ -26,7 +26,7 @@ void main() {
}); });
test('does not register the same result set multiple times', () { test('does not register the same result set multiple times', () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTableFromSql(''' ..registerTableFromSql('''
CREATE TABLE with_defaults ( CREATE TABLE with_defaults (
a TEXT DEFAULT 'something', a TEXT DEFAULT 'something',

View File

@ -7,7 +7,7 @@ void main() {
final oldEngine = SqlEngine(EngineOptions(version: SqliteVersion.v3_35)); final oldEngine = SqlEngine(EngineOptions(version: SqliteVersion.v3_35));
final engine = SqlEngine(EngineOptions(version: SqliteVersion.v3_37)); final engine = SqlEngine(EngineOptions(version: SqliteVersion.v3_37));
final engineInDriftMode = SqlEngine( final engineInDriftMode = SqlEngine(
EngineOptions(version: SqliteVersion.v3_37, useMoorExtensions: true)); EngineOptions(version: SqliteVersion.v3_37, useDriftExtensions: true));
group('using STRICT', () { group('using STRICT', () {
test('with an old sqlite3 version', () { test('with an old sqlite3 version', () {

View File

@ -61,8 +61,8 @@ void main() {
); );
}); });
test("resolved columns don't include moor nested results", () { test("resolved columns don't include drift nested results", () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTable(demoTable); ..registerTable(demoTable);
final context = engine.analyze('SELECT demo.** FROM demo;'); final context = engine.analyze('SELECT demo.** FROM demo;');
@ -95,7 +95,7 @@ void main() {
}); });
test('resolves columns from nested results', () { test('resolves columns from nested results', () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTable(demoTable) ..registerTable(demoTable)
..registerTable(anotherTable); ..registerTable(anotherTable);
@ -113,7 +113,7 @@ void main() {
}); });
test('resolves columns in nested queries', () { test('resolves columns in nested queries', () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTable(demoTable); ..registerTable(demoTable);
final context = final context =

View File

@ -35,7 +35,7 @@ void main() {
test('regression test for #1188', () { test('regression test for #1188', () {
// Test for https://github.com/simolus3/moor/issues/1188 // Test for https://github.com/simolus3/moor/issues/1188
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTableFromSql(''' ..registerTableFromSql('''
CREATE TABLE IF NOT EXISTS "employees" ( CREATE TABLE IF NOT EXISTS "employees" (
"id" INTEGER NOT NULL PRIMARY KEY, "id" INTEGER NOT NULL PRIMARY KEY,
@ -85,7 +85,7 @@ void main() {
test('regression test for #1234', () { test('regression test for #1234', () {
// https://github.com/simolus3/moor/issues/1234#issuecomment-853270925 // https://github.com/simolus3/moor/issues/1234#issuecomment-853270925
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTableFromSql(''' ..registerTableFromSql('''
CREATE TABLE inboxes ( CREATE TABLE inboxes (
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
@ -117,7 +117,7 @@ void main() {
test('regression test for #1096', () { test('regression test for #1096', () {
// https://github.com/simolus3/moor/issues/1096#issuecomment-931378474 // https://github.com/simolus3/moor/issues/1096#issuecomment-931378474
final engine = SqlEngine( final engine = SqlEngine(
EngineOptions(useMoorExtensions: true, version: SqliteVersion.v3_35)) EngineOptions(useDriftExtensions: true, version: SqliteVersion.v3_35))
..registerTableFromSql(''' ..registerTableFromSql('''
CREATE TABLE downloads ( CREATE TABLE downloads (
id INT NOT NULL PRIMARY KEY AUTOINCREMENT, id INT NOT NULL PRIMARY KEY AUTOINCREMENT,

View File

@ -86,15 +86,15 @@ void main() {
); );
}); });
test('supports booleans when moor extensions are enabled', () { test('supports booleans when drift extensions are enabled', () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final stmt = engine.parse(''' final stmt = engine.parse('''
CREATE TABLE foo ( CREATE TABLE foo (
a BOOL, b DATETIME, c DATE, d BOOLEAN NOT NULL a BOOL, b DATETIME, c DATE, d BOOLEAN NOT NULL
) )
''').rootNode; ''').rootNode;
final table = const SchemaFromCreateTable(moorExtensions: true) final table = const SchemaFromCreateTable(driftExtensions: true)
.read(stmt as CreateTableStatement); .read(stmt as CreateTableStatement);
expect(table.resolvedColumns.map((c) => c.type), const [ expect(table.resolvedColumns.map((c) => c.type), const [
ResolvedType(type: BasicType.int, hint: IsBoolean(), nullable: true), ResolvedType(type: BasicType.int, hint: IsBoolean(), nullable: true),

View File

@ -5,7 +5,7 @@ import 'package:test/test.dart';
import '../data.dart'; import '../data.dart';
void main() { void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)) final engine = SqlEngine(EngineOptions(useDriftExtensions: true))
..registerTable(demoTable) ..registerTable(demoTable)
..registerTable(anotherTable); ..registerTable(anotherTable);

View File

@ -35,8 +35,8 @@ void main() {
}); });
} }
ComputedSuggestions _compute(String moorFile) { ComputedSuggestions _compute(String driftFile) {
return completionsFor(moorFile, setup: _setupEngine); return completionsFor(driftFile, setup: _setupEngine);
} }
void _setupEngine(SqlEngine engine) { void _setupEngine(SqlEngine engine) {

View File

@ -2,15 +2,15 @@ import 'package:sqlparser/sqlparser.dart';
import 'package:sqlparser/src/engine/autocomplete/engine.dart'; import 'package:sqlparser/src/engine/autocomplete/engine.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
/// Parses the [moorFile] and computes available autocomplete suggestions at /// Parses the [driftFile] and computes available autocomplete suggestions at
/// the position of a `^` character in the source. /// the position of a `^` character in the source.
ComputedSuggestions completionsFor(String moorFile, ComputedSuggestions completionsFor(String driftFile,
{void Function(SqlEngine)? setup}) { {void Function(SqlEngine)? setup}) {
final position = moorFile.indexOf('^'); final position = driftFile.indexOf('^');
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
setup?.call(engine); setup?.call(engine);
final result = engine.parseMoorFile(moorFile.replaceFirst('^', '')); final result = engine.parseDriftFile(driftFile.replaceFirst('^', ''));
return result.autoCompleteEngine!.suggestCompletions(position - 1); return result.autoCompleteEngine!.suggestCompletions(position - 1);
} }

View File

@ -181,7 +181,7 @@ void main() {
); );
}); });
test('parses MAPPED BY constraints when in moor mode', () { test('parses MAPPED BY constraints when in drift mode', () {
testStatement( testStatement(
'CREATE TABLE a (b NOT NULL MAPPED BY `Mapper()` PRIMARY KEY)', 'CREATE TABLE a (b NOT NULL MAPPED BY `Mapper()` PRIMARY KEY)',
CreateTableStatement(tableName: 'a', columns: [ CreateTableStatement(tableName: 'a', columns: [
@ -195,11 +195,11 @@ void main() {
], ],
), ),
]), ]),
moorMode: true, driftMode: true,
); );
}); });
test('parses JSON KEY constraints in moor mode', () { test('parses JSON KEY constraints in drift mode', () {
testStatement( testStatement(
'CREATE TABLE a (b INTEGER JSON KEY "my_json_key")', 'CREATE TABLE a (b INTEGER JSON KEY "my_json_key")',
CreateTableStatement( CreateTableStatement(
@ -217,11 +217,11 @@ void main() {
), ),
], ],
), ),
moorMode: true, driftMode: true,
); );
}); });
test('parses CREATE TABLE WITH in moor more', () { test('parses CREATE TABLE WITH in drift more', () {
testStatement( testStatement(
'CREATE TABLE a (b INTEGER) WITH MyExistingClass', 'CREATE TABLE a (b INTEGER) WITH MyExistingClass',
CreateTableStatement( CreateTableStatement(
@ -232,15 +232,15 @@ void main() {
typeName: 'INTEGER', typeName: 'INTEGER',
), ),
], ],
moorTableName: MoorTableName('MyExistingClass', true), driftTableName: DriftTableName('MyExistingClass', true),
), ),
moorMode: true, driftMode: true,
); );
}); });
test('parses CREATE VIRTUAL TABLE statement', () { test('parses CREATE VIRTUAL TABLE statement', () {
testStatement( testStatement(
'CREATE VIRTUAL TABLE IF NOT EXISTS foo USING bar(a, b(), c) AS moor', 'CREATE VIRTUAL TABLE IF NOT EXISTS foo USING bar(a, b(), c) AS drift',
CreateVirtualTableStatement( CreateVirtualTableStatement(
ifNotExists: true, ifNotExists: true,
tableName: 'foo', tableName: 'foo',
@ -250,9 +250,9 @@ void main() {
fakeSpan('b()'), fakeSpan('b()'),
fakeSpan('c'), fakeSpan('c'),
], ],
moorTableName: MoorTableName('moor', false), driftTableName: DriftTableName('drift', false),
), ),
moorMode: true, driftMode: true,
); );
}); });

View File

@ -29,9 +29,9 @@ void main() {
), ),
], ],
), ),
moorTableName: MoorTableName('ExistingDartClass', true), driftTableName: DriftTableName('ExistingDartClass', true),
), ),
moorMode: true, driftMode: true,
); );
}); });

View File

@ -12,7 +12,7 @@ void main() {
from: TableReference('tbl'), from: TableReference('tbl'),
limit: DartLimitPlaceholder(name: 'limit'), limit: DartLimitPlaceholder(name: 'limit'),
), ),
moorMode: true, driftMode: true,
); );
}); });
@ -28,7 +28,7 @@ void main() {
offset: NumericLiteral(3, token(TokenType.numberLiteral)), offset: NumericLiteral(3, token(TokenType.numberLiteral)),
), ),
), ),
moorMode: true, driftMode: true,
); );
}); });
@ -48,7 +48,7 @@ void main() {
], ],
), ),
), ),
moorMode: true, driftMode: true,
); );
}); });
@ -60,7 +60,7 @@ void main() {
from: TableReference('tbl'), from: TableReference('tbl'),
orderBy: DartOrderByPlaceholder(name: 'order'), orderBy: DartOrderByPlaceholder(name: 'order'),
), ),
moorMode: true, driftMode: true,
); );
}); });
} }

View File

@ -5,7 +5,7 @@ import 'utils.dart';
const content = r''' const content = r'''
import 'other.dart'; import 'other.dart';
import 'another.moor'; import 'another.drift';
CREATE TABLE tbl ( CREATE TABLE tbl (
id INT NOT NULL PRIMARY KEY AUTOINCREMENT, id INT NOT NULL PRIMARY KEY AUTOINCREMENT,
@ -22,12 +22,12 @@ add: INSERT INTO tbl $row RETURNING *;
'''; ''';
void main() { void main() {
test('parses moor files', () { test('parses drift files', () {
testMoorFile( testDriftFile(
content, content,
MoorFile([ DriftFile([
ImportStatement('other.dart'), ImportStatement('other.dart'),
ImportStatement('another.moor'), ImportStatement('another.drift'),
CreateTableStatement( CreateTableStatement(
tableName: 'tbl', tableName: 'tbl',
columns: [ columns: [
@ -52,11 +52,11 @@ void main() {
], ],
), ),
), ),
MoorDartName(null, identifier('placeRef')), DriftDartName(null, identifier('placeRef')),
], ],
), ),
], ],
moorTableName: MoorTableName('RowName', false), driftTableName: DriftTableName('RowName', false),
), ),
DeclaredStatement( DeclaredStatement(
SimpleName('all'), SimpleName('all'),
@ -129,14 +129,14 @@ void main() {
}); });
test('parses transaction blocks', () { test('parses transaction blocks', () {
testMoorFile( testDriftFile(
''' '''
test: BEGIN test: BEGIN
UPDATE foo SET bar = baz; UPDATE foo SET bar = baz;
DELETE FROM t; DELETE FROM t;
END; END;
''', ''',
MoorFile([ DriftFile([
DeclaredStatement( DeclaredStatement(
SimpleName('test'), SimpleName('test'),
TransactionBlock( TransactionBlock(
@ -162,8 +162,8 @@ END;
test("reports error when the statement can't be parsed", () { test("reports error when the statement can't be parsed", () {
// regression test for https://github.com/simolus3/moor/issues/280#issuecomment-570789454 // regression test for https://github.com/simolus3/moor/issues/280#issuecomment-570789454
final parsed = SqlEngine(EngineOptions(useMoorExtensions: true)) final parsed = SqlEngine(EngineOptions(useDriftExtensions: true))
.parseMoorFile('name: NSERT INTO foo DEFAULT VALUES;'); .parseDriftFile('name: NSERT INTO foo DEFAULT VALUES;');
expect( expect(
parsed.errors, parsed.errors,
@ -174,7 +174,7 @@ END;
)), )),
); );
final root = parsed.rootNode as MoorFile; final root = parsed.rootNode as DriftFile;
expect( expect(
root.allDescendants, root.allDescendants,
isNot(contains(const TypeMatcher<DeclaredStatement>())), isNot(contains(const TypeMatcher<DeclaredStatement>())),
@ -182,8 +182,8 @@ END;
}); });
test('syntax errors contain correct position', () { test('syntax errors contain correct position', () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final result = engine.parseMoorFile(''' final result = engine.parseDriftFile('''
worksByComposer: worksByComposer:
SELECT DISTINCT A.* FROM works A, works B ON A.id = SELECT DISTINCT A.* FROM works A, works B ON A.id =
WHERE A.composer = :id OR B.composer = :id; WHERE A.composer = :id OR B.composer = :id;
@ -198,9 +198,9 @@ SELECT DISTINCT A.* FROM works A, works B ON A.id =
test('parses REQUIRED without type hint', () { test('parses REQUIRED without type hint', () {
final variable = ColonVariableToken(fakeSpan(':category'), ':category'); final variable = ColonVariableToken(fakeSpan(':category'), ':category');
testMoorFile( testDriftFile(
'test(REQUIRED :category): SELECT :category;', 'test(REQUIRED :category): SELECT :category;',
MoorFile([ DriftFile([
DeclaredStatement( DeclaredStatement(
SimpleName('test'), SimpleName('test'),
SelectStatement(columns: [ SelectStatement(columns: [

View File

@ -10,9 +10,9 @@ void main() {
test('can parse multiple statements', () { test('can parse multiple statements', () {
const sql = 'a: UPDATE tbl SET a = b; b: SELECT * FROM tbl;'; const sql = 'a: UPDATE tbl SET a = b; b: SELECT * FROM tbl;';
testMoorFile( testDriftFile(
sql, sql,
MoorFile([ DriftFile([
DeclaredStatement( DeclaredStatement(
SimpleName('a'), SimpleName('a'),
UpdateStatement( UpdateStatement(
@ -39,7 +39,7 @@ void main() {
test('recovers from invalid statements', () { test('recovers from invalid statements', () {
const sql = 'a: UPDATE tbl SET a = * d; b: SELECT * FROM tbl;'; const sql = 'a: UPDATE tbl SET a = * d; b: SELECT * FROM tbl;';
final tokens = Scanner(sql).scanTokens(); final tokens = Scanner(sql).scanTokens();
final statements = Parser(tokens).moorFile().statements; final statements = Parser(tokens).driftFile().statements;
expect(statements, hasLength(1)); expect(statements, hasLength(1));
enforceEqual( enforceEqual(
@ -54,14 +54,14 @@ void main() {
); );
}); });
test('parses imports and declared statements in moor mode', () { test('parses imports and declared statements in drift mode', () {
const sql = r''' const sql = r'''
import 'test.dart'; import 'test.dart';
query: SELECT * FROM tbl; query: SELECT * FROM tbl;
'''; ''';
final tokens = Scanner(sql, scanMoorTokens: true).scanTokens(); final tokens = Scanner(sql, scanDriftTokens: true).scanTokens();
final statements = Parser(tokens, useMoor: true).moorFile().statements; final statements = Parser(tokens, useDrift: true).driftFile().statements;
expect(statements, hasLength(2)); expect(statements, hasLength(2));

View File

@ -6,7 +6,7 @@ import 'utils.dart';
void main() { void main() {
test('parses create table statements with a previous malformed inport', () { test('parses create table statements with a previous malformed inport', () {
final file = parseMoor(''' final file = parseDrift('''
import ; import ;
CREATE TABLE foo (name TEXT); CREATE TABLE foo (name TEXT);
'''); ''');
@ -16,7 +16,7 @@ CREATE TABLE foo (name TEXT);
}); });
test('recovers from parsing errors in column definition', () { test('recovers from parsing errors in column definition', () {
final file = parseMoor(''' final file = parseDrift('''
CREATE TABLE foo ( CREATE TABLE foo (
id INTEGER PRIMARY, id INTEGER PRIMARY,
name TEXT NOT NULL name TEXT NOT NULL
@ -41,9 +41,9 @@ CREATE TABLE foo (
}); });
test('parses trailing comma with error', () { test('parses trailing comma with error', () {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final result = engine.parseMoorFile(''' final result = engine.parseDriftFile('''
CREATE TABLE foo ( CREATE TABLE foo (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
name TEXT NOT NULL, name TEXT NOT NULL,

View File

@ -28,7 +28,7 @@ void main() {
), ),
], ],
), ),
moorMode: true, driftMode: true,
); );
}); });
} }

View File

@ -6,7 +6,7 @@ import '../utils.dart';
void main() { void main() {
test('parses nested query statements', () { test('parses nested query statements', () {
final stmt = SqlEngine(EngineOptions(useMoorExtensions: true)) final stmt = SqlEngine(EngineOptions(useDriftExtensions: true))
.parse('SELECT LIST(SELECT * FROM test) FROM test') .parse('SELECT LIST(SELECT * FROM test) FROM test')
.rootNode as SelectStatement; .rootNode as SelectStatement;
@ -23,7 +23,7 @@ void main() {
}); });
test('parses nested query statements with as', () { test('parses nested query statements with as', () {
final stmt = SqlEngine(EngineOptions(useMoorExtensions: true)) final stmt = SqlEngine(EngineOptions(useDriftExtensions: true))
.parse('SELECT LIST(SELECT * FROM test) AS newname FROM test') .parse('SELECT LIST(SELECT * FROM test) AS newname FROM test')
.rootNode as SelectStatement; .rootNode as SelectStatement;

View File

@ -31,7 +31,7 @@ void main() {
}); });
test('parses clauses with NULLS FIRST or NULLS LAST', () { test('parses clauses with NULLS FIRST or NULLS LAST', () {
final parsed = SqlEngine(EngineOptions(useMoorExtensions: true)) final parsed = SqlEngine(EngineOptions(useDriftExtensions: true))
.parse(r'SELECT * FROM tbl ORDER BY $a NULLS LAST, b NULLS FIRST') .parse(r'SELECT * FROM tbl ORDER BY $a NULLS LAST, b NULLS FIRST')
.rootNode as SelectStatement; .rootNode as SelectStatement;

View File

@ -24,21 +24,21 @@ IdentifierToken identifier(String content) {
return IdentifierToken(false, fakeSpan(content)); return IdentifierToken(false, fakeSpan(content));
} }
MoorFile parseMoor(String content) { DriftFile parseDrift(String content) {
return SqlEngine(EngineOptions(useMoorExtensions: true)) return SqlEngine(EngineOptions(useDriftExtensions: true))
.parseMoorFile(content) .parseDriftFile(content)
.rootNode as MoorFile; .rootNode as DriftFile;
} }
void testMoorFile(String moorFile, MoorFile expected) { void testDriftFile(String driftFile, DriftFile expected) {
final parsed = parseMoor(moorFile); final parsed = parseDrift(driftFile);
enforceHasSpan(parsed); enforceHasSpan(parsed);
enforceEqual(parsed, expected); enforceEqual(parsed, expected);
} }
void testStatement(String sql, AstNode expected, {bool moorMode = false}) { void testStatement(String sql, AstNode expected, {bool driftMode = false}) {
final result = final result =
SqlEngine(EngineOptions(useMoorExtensions: moorMode)).parse(sql); SqlEngine(EngineOptions(useDriftExtensions: driftMode)).parse(sql);
expect(result.errors, isEmpty); expect(result.errors, isEmpty);
final parsed = result.rootNode; final parsed = result.rootNode;

View File

@ -3,9 +3,9 @@ import 'package:sqlparser/src/reader/tokenizer/token.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
void main() { void main() {
test('parses moor specific tokens', () { test('parses drift specific tokens', () {
const part = 'c INTEGER MAPPED BY `const Mapper()` NOT NULL **'; const part = 'c INTEGER MAPPED BY `const Mapper()` NOT NULL **';
final scanner = Scanner(part, scanMoorTokens: true); final scanner = Scanner(part, scanDriftTokens: true);
final tokens = scanner.scanTokens(); final tokens = scanner.scanTokens();
expect(scanner.errors, isEmpty); expect(scanner.errors, isEmpty);

View File

@ -3,7 +3,7 @@ import 'package:sqlparser/src/reader/tokenizer/scanner.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
void main() { void main() {
test('parses ** as two tokens when not using moor mode', () { test('parses ** as two tokens when not using drift mode', () {
final tokens = Scanner('**').scanTokens(); final tokens = Scanner('**').scanTokens();
expect(tokens.map((e) => e.type), expect(tokens.map((e) => e.type),
containsAllInOrder([TokenType.star, TokenType.star])); containsAllInOrder([TokenType.star, TokenType.star]));

View File

@ -3,10 +3,10 @@ import 'package:sqlparser/src/utils/ast_equality.dart';
import 'package:sqlparser/utils/node_to_text.dart'; import 'package:sqlparser/utils/node_to_text.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
enum _ParseKind { statement, moorFile } enum _ParseKind { statement, driftFile }
void main() { void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true)); final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
void testFormat(String input, {_ParseKind kind = _ParseKind.statement}) { void testFormat(String input, {_ParseKind kind = _ParseKind.statement}) {
AstNode parse(String input) { AstNode parse(String input) {
@ -16,8 +16,8 @@ void main() {
case _ParseKind.statement: case _ParseKind.statement:
result = engine.parse(input); result = engine.parse(input);
break; break;
case _ParseKind.moorFile: case _ParseKind.driftFile:
result = engine.parseMoorFile(input); result = engine.parseDriftFile(input);
break; break;
} }
@ -452,28 +452,28 @@ CREATE UNIQUE INDEX my_idx ON t1 (c1, c2, c3) WHERE c1 < c3;
testWith(r'a$b', r'"a$b"'); testWith(r'a$b', r'"a$b"');
}); });
group('moor', () { group('drift', () {
test('dart placeholders', () { test('dart placeholders', () {
testFormat(r'SELECT $placeholder FROM foo'); testFormat(r'SELECT $placeholder FROM foo');
}); });
test('imports', () { test('imports', () {
testFormat('import \'foo.bar\';', kind: _ParseKind.moorFile); testFormat('import \'foo.bar\';', kind: _ParseKind.driftFile);
}); });
test('declared statements', () { test('declared statements', () {
testFormat('foo (?1 AS INT): SELECT * FROM bar WHERE ? < 10;', testFormat('foo (?1 AS INT): SELECT * FROM bar WHERE ? < 10;',
kind: _ParseKind.moorFile); kind: _ParseKind.driftFile);
testFormat('foo: SELECT * FROM bar WHERE :id < 10;', testFormat('foo: SELECT * FROM bar WHERE :id < 10;',
kind: _ParseKind.moorFile); kind: _ParseKind.driftFile);
testFormat('foo (REQUIRED :x AS TEXT OR NULL): SELECT :x;', testFormat('foo (REQUIRED :x AS TEXT OR NULL): SELECT :x;',
kind: _ParseKind.moorFile); kind: _ParseKind.driftFile);
testFormat(r'foo ($pred = FALSE): SELECT * FROM bar WHERE $pred;', testFormat(r'foo ($pred = FALSE): SELECT * FROM bar WHERE $pred;',
kind: _ParseKind.moorFile); kind: _ParseKind.driftFile);
}); });
test('nested star', () { test('nested star', () {
testFormat('q: SELECT foo.** FROM foo;', kind: _ParseKind.moorFile); testFormat('q: SELECT foo.** FROM foo;', kind: _ParseKind.driftFile);
}); });
test('transaction block', () { test('transaction block', () {
@ -486,7 +486,7 @@ test: BEGIN TRANSACTION
INSERT INTO foo VALUES (x, y, z); INSERT INTO foo VALUES (x, y, z);
COMMIT TRANSACTION; COMMIT TRANSACTION;
''', ''',
kind: _ParseKind.moorFile, kind: _ParseKind.driftFile,
); );
}); });
}); });