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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,13 +40,13 @@ class PreprocessBuilder extends Builder {
FutureOr<void> build(BuildStep buildStep) async {
final input = buildStep.inputId;
final moorFileContent = await buildStep.readAsString(input);
final engine = SqlEngine(EngineOptions(useMoorExtensions: true));
final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
ParseResult parsedInput;
try {
parsedInput = engine.parseMoorFile(moorFileContent);
parsedInput = engine.parseDriftFile(moorFileContent);
} 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.
return;
}
@ -71,7 +71,7 @@ class PreprocessBuilder extends Builder {
if (asset.extension == '.moor' || asset.extension == '.drift') {
final parsed = asset == input
? parsedInput
: engine.parseMoorFile(await buildStep.readAsString(asset));
: engine.parseDriftFile(await buildStep.readAsString(asset));
parsed.rootNode.allDescendants
.whereType<ImportStatement>()

View File

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

View File

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

View File

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

View File

@ -100,11 +100,11 @@ class MigrateCommand extends MoorCommand {
}
Future<String> _transformMoorFile(File file) async {
final engine = SqlEngine(
EngineOptions(useMoorExtensions: true, version: SqliteVersion.current));
final engine = SqlEngine(EngineOptions(
useDriftExtensions: true, version: SqliteVersion.current));
final originalContent = await file.readAsString();
var output = originalContent;
final result = engine.parseMoorFile(originalContent);
final result = engine.parseDriftFile(originalContent);
if (result.errors.isNotEmpty) {
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
final root = result.rootNode as MoorFile;
final root = result.rootNode as DriftFile;
for (final import in root.imports) {
final importedFile = import.importedFile;
if (p.url.extension(importedFile) == '.moor') {

View File

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

View File

@ -118,11 +118,11 @@ class SqlWriter extends NodeSqlBuilder {
}
@override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) {
void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is NestedStarResultColumn) {
final result = _starColumnToResolved[e];
if (result == null) {
return super.visitMoorSpecificNode(e, arg);
return super.visitDriftSpecificNode(e, arg);
}
final select = query as SqlSelectQuery;
@ -155,7 +155,7 @@ class SqlWriter extends NodeSqlBuilder {
'variables (or just removed if no variables are required)',
);
} 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';
void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true));
final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final result = engine.parse('CREATE TABLE a (id INTEGER);');
engine.registerTable(const SchemaFromCreateTable()
.read(result.rootNode as CreateTableStatement));

View File

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

View File

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

View File

@ -11,7 +11,7 @@ final Table table =
Table(name: 'todos', resolvedColumns: [_idColumn, _titleColumn]);
void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true));
final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
final mapper = TypeMapper();
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/sqlite/bind_string.dart';
import 'src/sqlparser/parse_moor_file.dart';
import 'src/sqlparser/parse_drift_file.dart';
import 'src/sqlparser/tokenizer.dart';
export 'package:benchmark_harness/benchmark_harness.dart' show ScoreEmitter;
@ -20,7 +20,7 @@ List<Reportable> allBenchmarks(ScoreEmitter emitter) {
KeyValueInsertBatch(emitter),
KeyValueInsertSerial(emitter),
// sql parser
ParseMoorFile(emitter),
ParseDriftFile(emitter),
TokenizerBenchmark(emitter),
];
}

View File

@ -25,25 +25,26 @@ foo: SELECT
ORDER BY
revenue DESC,
o_orderdate;
manyColumns:
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;
''';
class ParseMoorFile extends BenchmarkBase {
ParseMoorFile(ScoreEmitter emitter) : super('Moor file: Parse only', emitter);
class ParseDriftFile extends BenchmarkBase {
ParseDriftFile(ScoreEmitter emitter)
: super('Moor file: Parse only', emitter);
final _engine = SqlEngine(EngineOptions(useMoorExtensions: true));
final _engine = SqlEngine(EngineOptions(useDriftExtensions: true));
@override
void exercise() {
for (var i = 0; i < 10; i++) {
assert(_engine.parseMoorFile(file).errors.isEmpty);
assert(_engine.parseDriftFile(file).errors.isEmpty);
}
}
@override
void run() {
_engine.parseMoorFile(file);
_engine.parseDriftFile(file);
}
}

View File

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

View File

@ -69,7 +69,7 @@ resolvedColumns.map((c) => context.typeOf(c).type.type); // int, text, int, text
```
## 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.
## Thanks

View File

@ -12,4 +12,5 @@ export 'src/engine/options.dart';
export 'src/engine/sql_engine.dart';
export 'src/reader/parser.dart' show ParsingError;
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<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.
final Map<String, Expression> defaultValuesForPlaceholder;

View File

@ -4,9 +4,9 @@ part of '../analysis.dart';
class SchemaFromCreateTable {
/// Whether we should provide additional type hints for nonstandard `BOOL`
/// 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
/// [CreateTableStatement] or a [CreateVirtualTableStatement]).
@ -126,7 +126,7 @@ class SchemaFromCreateTable {
}
/// 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`,
/// respectively.
/// https://www.sqlite.org/datatype3.html#determination_of_column_affinity
@ -149,7 +149,7 @@ class SchemaFromCreateTable {
return const ResolvedType(type: BasicType.blob);
}
if (moorExtensions) {
if (driftExtensions) {
if (upper.contains('BOOL')) {
return const ResolvedType.bool();
}
@ -166,7 +166,7 @@ class SchemaFromCreateTable {
}
bool isValidTypeNameForStrictTable(String typeName) {
if (moorExtensions) {
if (driftExtensions) {
// 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
// that type. So, anything goes!

View File

@ -43,7 +43,7 @@ class LintingVisitor extends RecursiveVisitor<void, void> {
@override
void visitCreateTableStatement(CreateTableStatement e, void arg) {
final schemaReader =
SchemaFromCreateTable(moorExtensions: options.useMoorExtensions);
SchemaFromCreateTable(driftExtensions: options.useDriftExtensions);
var hasNonGeneratedColumn = false;
var hasPrimaryKeyDeclaration = 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.
@override
void visitMoorSpecificNode(MoorSpecificNode e, void arg) {
void visitDriftSpecificNode(DriftSpecificNode e, void arg) {
if (e is NestedQueryColumn) {
// create a new scope for the nested query to differentiate between
// 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();
AstPreparingVisitor(context: context).start(e.select);
} else {
super.visitMoorSpecificNode(e, arg);
super.visitDriftSpecificNode(e, arg);
}
}
}

View File

@ -174,11 +174,11 @@ class TypeResolver extends RecursiveVisitor<TypeExpectation, void> {
}
@override
void visitMoorSpecificNode(MoorSpecificNode e, TypeExpectation arg) {
void visitDriftSpecificNode(DriftSpecificNode e, TypeExpectation arg) {
if (e is DartExpressionPlaceholder) {
_inferAsVariable(e, arg);
} 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/reader/tokenizer/token.dart';
// todo: Remove these imports after splitting up this library
import 'drift/inline_dart.dart';
import 'expressions/expressions.dart';
import 'moor/inline_dart.dart';
import 'node.dart';
import 'statements/create_index.dart';
import 'statements/select.dart';
@ -12,14 +11,14 @@ import 'visitor.dart';
export 'clauses/returning.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/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 'statements/block.dart';
export 'statements/create_index.dart';

View File

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

View File

@ -1,11 +1,11 @@
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.
abstract class OrderByBase extends AstNode {}
/// Base for a single ordering term that is a part of a [OrderBy]. Without moor
/// extensions, only [OrderingTerm] will be parsed. With moor extensions, a
/// Base for a single ordering term that is a part of a [OrderBy]. Without drift
/// extensions, only [OrderingTerm] will be parsed. With drift extensions, a
/// [DartOrderingTermPlaceholder] can be parsed as well.
abstract class OrderingTermBase extends AstNode {}

View File

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

View File

@ -5,23 +5,23 @@ import 'declared_statement.dart';
import 'import_statement.dart';
/// 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.
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.
class MoorFile extends AstNode implements MoorSpecificNode {
List<PartOfMoorFile> statements;
class DriftFile extends AstNode implements DriftSpecificNode {
List<PartOfDriftFile> statements;
MoorFile(this.statements);
DriftFile(this.statements);
@override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg);
return visitor.visitDriftSpecificNode(this, arg);
}
@override
@ -37,15 +37,15 @@ class MoorFile extends AstNode implements MoorSpecificNode {
childNodes.whereType<ImportStatement>();
}
class MoorTableName extends AstNode implements MoorSpecificNode {
class DriftTableName extends AstNode implements DriftSpecificNode {
final String overriddenDataClassName;
final bool useExistingDartClass;
MoorTableName(this.overriddenDataClassName, this.useExistingDartClass);
DriftTableName(this.overriddenDataClassName, this.useExistingDartClass);
@override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg);
return visitor.visitDriftSpecificNode(this, arg);
}
@override

View File

@ -2,10 +2,10 @@ import '../../reader/tokenizer/token.dart';
import '../node.dart';
import '../statements/statement.dart';
import '../visitor.dart';
import 'moor_file.dart';
import 'drift_file.dart';
/// 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;
StringLiteralToken? importString;
final String importedFile;
@ -14,7 +14,7 @@ class ImportStatement extends Statement implements PartOfMoorFile {
@override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
return visitor.visitMoorSpecificNode(this, arg);
return visitor.visitDriftSpecificNode(this, arg);
}
@override

View File

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

View File

@ -1,7 +1,7 @@
import '../ast.dart' show ResultColumn, Renamable, SelectStatement;
import '../node.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
/// the [AstNode] metadata.
@ -18,7 +18,7 @@ class _NestedColumnNameMetadata {
/// top level select query, because the result of them can only be computed
/// in dart.
class NestedQueryColumn extends ResultColumn
implements MoorSpecificNode, Renamable {
implements DriftSpecificNode, Renamable {
@override
final String? as;
@ -36,7 +36,7 @@ class NestedQueryColumn extends ResultColumn
@override
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

View File

@ -2,7 +2,7 @@ import '../../analysis/analysis.dart';
import '../ast.dart' show StarResultColumn, ResultColumn, Renamable;
import '../node.dart';
import '../visitor.dart';
import 'moor_file.dart';
import 'drift_file.dart';
/// 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 using moor.
class NestedStarResultColumn extends ResultColumn
implements MoorSpecificNode, Renamable {
implements DriftSpecificNode, Renamable {
final String tableName;
ResultSet? resultSet;
@ -27,6 +27,6 @@ class NestedStarResultColumn extends ResultColumn
@override
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.
class MappedBy extends ColumnConstraint {
/// 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) {}
}
/// 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 {
Token? json;
Token? key;
@ -249,8 +249,8 @@ class JsonKey extends ColumnConstraint {
void transformChildren<A>(Transformer<A> transformer, A arg) {}
}
/// A `AS xyz` constraint, which is only parsed for moor files.
class MoorDartName extends ColumnConstraint {
/// A `AS xyz` constraint, which is only parsed for drift files.
class DriftDartName extends ColumnConstraint {
Token? as;
IdentifierToken identifier;
@ -259,7 +259,7 @@ class MoorDartName extends ColumnConstraint {
String get dartName => identifier.identifier;
MoorDartName(String? name, this.identifier) : super(name);
DriftDartName(String? name, this.identifier) : super(name);
@override
void transformChildren<A>(Transformer<A> transformer, A arg) {}

View File

@ -8,15 +8,15 @@ abstract class TableInducingStatement extends Statement
final bool ifNotExists;
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.
///
/// This will always be `null` when moor extensions are not enabled.
MoorTableName? moorTableName;
/// This will always be `null` when drift extensions are not enabled.
DriftTableName? driftTableName;
Token? tableNameToken;
TableInducingStatement._(this.ifNotExists, this.tableName,
[this.moorTableName]);
[this.driftTableName]);
@override
String get createdName => tableName;
@ -48,8 +48,8 @@ class CreateTableStatement extends TableInducingStatement {
this.tableConstraints = const [],
this.withoutRowId = false,
this.isStrict = false,
MoorTableName? moorTableName,
}) : super._(ifNotExists, tableName, moorTableName);
DriftTableName? driftTableName,
}) : super._(ifNotExists, tableName, driftTableName);
@override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
@ -61,15 +61,15 @@ class CreateTableStatement extends TableInducingStatement {
columns = transformer.transformChildren(columns, this, arg);
tableConstraints =
transformer.transformChildren(tableConstraints, this, arg);
moorTableName =
transformer.transformNullableChild(moorTableName, this, arg);
driftTableName =
transformer.transformNullableChild(driftTableName, this, arg);
}
@override
Iterable<AstNode> get childNodes => [
...columns,
...tableConstraints,
if (moorTableName != null) moorTableName!,
if (driftTableName != null) driftTableName!,
];
}
@ -93,8 +93,8 @@ class CreateVirtualTableStatement extends TableInducingStatement {
required String tableName,
required this.moduleName,
this.arguments = const [],
MoorTableName? moorTableName,
}) : super._(ifNotExists, tableName, moorTableName);
DriftTableName? driftTableName,
}) : super._(ifNotExists, tableName, driftTableName);
@override
R accept<A, R>(AstVisitor<A, R> visitor, A arg) {
@ -103,11 +103,11 @@ class CreateVirtualTableStatement extends TableInducingStatement {
@override
void transformChildren<A>(Transformer<A> transformer, A arg) {
moorTableName =
transformer.transformNullableChild(moorTableName, this, arg);
driftTableName =
transformer.transformNullableChild(driftTableName, this, arg);
}
@override
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;
/// 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.
///
/// This will always be `null` when moor extensions are not enabled.
MoorTableName? moorTableName;
/// This will always be `null` when drift extensions are not enabled.
DriftTableName? driftTableName;
CreateViewStatement({
this.ifNotExists = false,
required this.viewName,
this.columns,
required this.query,
this.moorTableName,
this.driftTableName,
});
@override
@ -37,11 +37,11 @@ class CreateViewStatement extends Statement implements CreatingStatement {
@override
void transformChildren<A>(Transformer<A> transformer, A arg) {
query = transformer.transformChild(query, this, arg);
moorTableName =
transformer.transformNullableChild(moorTableName, this, arg);
driftTableName =
transformer.transformNullableChild(driftTableName, this, arg);
}
@override
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.
abstract class SchemaStatement extends Statement implements PartOfMoorFile {}
abstract class SchemaStatement extends Statement implements PartOfDriftFile {}
/// Marker interface for schema statements that create a schematic entity.
abstract class CreatingStatement extends SchemaStatement {

View File

@ -93,7 +93,7 @@ abstract class AstVisitor<A, R> {
R visitBeginTransaction(BeginTransactionStatement 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.
@ -388,7 +388,7 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R?> {
}
@override
R? visitMoorSpecificNode(MoorSpecificNode e, A arg) {
R? visitDriftSpecificNode(DriftSpecificNode e, A arg) {
return defaultNode(e, arg);
}

View File

@ -2,10 +2,10 @@ import 'package:meta/meta.dart';
import 'package:sqlparser/sqlparser.dart';
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
/// extensions enabled.
final bool useMoorExtensions;
final bool useDriftExtensions;
/// The target sqlite version.
///
@ -27,7 +27,7 @@ class EngineOptions {
final Map<String, TableValuedFunctionHandler> addedTableFunctions = {};
EngineOptions({
this.useMoorExtensions = false,
this.useDriftExtensions = false,
List<Extension> enabledExtensions = const [],
this.version = SqliteVersion.minimum,
}) : enabledExtensions = _allExtensions(enabledExtensions, version) {

View File

@ -35,7 +35,7 @@ class SqlEngine {
/// [TableInducingStatement] by using [SchemaFromCreateTable.read].
SchemaFromCreateTable get schemaReader {
return _schemaReader ??=
SchemaFromCreateTable(moorExtensions: options.useMoorExtensions);
SchemaFromCreateTable(driftExtensions: options.useDriftExtensions);
}
/// 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
/// be taken care of automatically.
List<Token> tokenize(String source) {
final scanner = Scanner(source, scanMoorTokens: options.useMoorExtensions);
final scanner =
Scanner(source, scanDriftTokens: options.useDriftExtensions);
final tokens = scanner.scanTokens();
return tokens;
@ -106,29 +107,30 @@ class SqlEngine {
ParseResult parse(String sql) {
final tokens = tokenize(sql);
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();
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.
ParseResult parseMoorFile(String content) {
assert(options.useMoorExtensions);
ParseResult parseDriftFile(String content) {
assert(options.useDriftExtensions);
final tokens = tokenize(content);
final autoComplete = AutoCompleteEngine(tokens, this);
final tokensForParser = tokens.where((t) => !t.invisibleToParser).toList();
final parser =
Parser(tokensForParser, useMoor: true, autoComplete: autoComplete);
Parser(tokensForParser, useDrift: true, autoComplete: autoComplete);
final moorFile = parser.moorFile();
_attachRootScope(moorFile);
final driftFile = parser.driftFile();
_attachRootScope(driftFile);
return ParseResult._(
moorFile, tokens, parser.errors, content, autoComplete);
driftFile, tokens, parser.errors, content, autoComplete);
}
/// Parses and analyzes the [sql] statement. The [AnalysisContext] returned

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -35,8 +35,8 @@ void main() {
});
}
ComputedSuggestions _compute(String moorFile) {
return completionsFor(moorFile, setup: _setupEngine);
ComputedSuggestions _compute(String driftFile) {
return completionsFor(driftFile, setup: _setupEngine);
}
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: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.
ComputedSuggestions completionsFor(String moorFile,
ComputedSuggestions completionsFor(String driftFile,
{void Function(SqlEngine)? setup}) {
final position = moorFile.indexOf('^');
final engine = SqlEngine(EngineOptions(useMoorExtensions: true));
final position = driftFile.indexOf('^');
final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
setup?.call(engine);
final result = engine.parseMoorFile(moorFile.replaceFirst('^', ''));
final result = engine.parseDriftFile(driftFile.replaceFirst('^', ''));
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(
'CREATE TABLE a (b NOT NULL MAPPED BY `Mapper()` PRIMARY KEY)',
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(
'CREATE TABLE a (b INTEGER JSON KEY "my_json_key")',
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(
'CREATE TABLE a (b INTEGER) WITH MyExistingClass',
CreateTableStatement(
@ -232,15 +232,15 @@ void main() {
typeName: 'INTEGER',
),
],
moorTableName: MoorTableName('MyExistingClass', true),
driftTableName: DriftTableName('MyExistingClass', true),
),
moorMode: true,
driftMode: true,
);
});
test('parses CREATE VIRTUAL TABLE statement', () {
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(
ifNotExists: true,
tableName: 'foo',
@ -250,9 +250,9 @@ void main() {
fakeSpan('b()'),
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'),
limit: DartLimitPlaceholder(name: 'limit'),
),
moorMode: true,
driftMode: true,
);
});
@ -28,7 +28,7 @@ void main() {
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'),
orderBy: DartOrderByPlaceholder(name: 'order'),
),
moorMode: true,
driftMode: true,
);
});
}

View File

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

View File

@ -10,9 +10,9 @@ void main() {
test('can parse multiple statements', () {
const sql = 'a: UPDATE tbl SET a = b; b: SELECT * FROM tbl;';
testMoorFile(
testDriftFile(
sql,
MoorFile([
DriftFile([
DeclaredStatement(
SimpleName('a'),
UpdateStatement(
@ -39,7 +39,7 @@ void main() {
test('recovers from invalid statements', () {
const sql = 'a: UPDATE tbl SET a = * d; b: SELECT * FROM tbl;';
final tokens = Scanner(sql).scanTokens();
final statements = Parser(tokens).moorFile().statements;
final statements = Parser(tokens).driftFile().statements;
expect(statements, hasLength(1));
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'''
import 'test.dart';
query: SELECT * FROM tbl;
''';
final tokens = Scanner(sql, scanMoorTokens: true).scanTokens();
final statements = Parser(tokens, useMoor: true).moorFile().statements;
final tokens = Scanner(sql, scanDriftTokens: true).scanTokens();
final statements = Parser(tokens, useDrift: true).driftFile().statements;
expect(statements, hasLength(2));

View File

@ -6,7 +6,7 @@ import 'utils.dart';
void main() {
test('parses create table statements with a previous malformed inport', () {
final file = parseMoor('''
final file = parseDrift('''
import ;
CREATE TABLE foo (name TEXT);
''');
@ -16,10 +16,10 @@ CREATE TABLE foo (name TEXT);
});
test('recovers from parsing errors in column definition', () {
final file = parseMoor('''
final file = parseDrift('''
CREATE TABLE foo (
id INTEGER PRIMARY,
name TEXT NOT NULL
name TEXT NOT NULL
);
''');
@ -41,9 +41,9 @@ CREATE TABLE foo (
});
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 (
id INTEGER PRIMARY KEY,
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() {
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')
.rootNode as SelectStatement;
@ -23,7 +23,7 @@ void main() {
});
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')
.rootNode as SelectStatement;

View File

@ -31,7 +31,7 @@ void main() {
});
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')
.rootNode as SelectStatement;

View File

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

View File

@ -3,9 +3,9 @@ import 'package:sqlparser/src/reader/tokenizer/token.dart';
import 'package:test/test.dart';
void main() {
test('parses moor specific tokens', () {
test('parses drift specific tokens', () {
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();
expect(scanner.errors, isEmpty);

View File

@ -3,7 +3,7 @@ import 'package:sqlparser/src/reader/tokenizer/scanner.dart';
import 'package:test/test.dart';
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();
expect(tokens.map((e) => e.type),
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:test/test.dart';
enum _ParseKind { statement, moorFile }
enum _ParseKind { statement, driftFile }
void main() {
final engine = SqlEngine(EngineOptions(useMoorExtensions: true));
final engine = SqlEngine(EngineOptions(useDriftExtensions: true));
void testFormat(String input, {_ParseKind kind = _ParseKind.statement}) {
AstNode parse(String input) {
@ -16,8 +16,8 @@ void main() {
case _ParseKind.statement:
result = engine.parse(input);
break;
case _ParseKind.moorFile:
result = engine.parseMoorFile(input);
case _ParseKind.driftFile:
result = engine.parseDriftFile(input);
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"');
});
group('moor', () {
group('drift', () {
test('dart placeholders', () {
testFormat(r'SELECT $placeholder FROM foo');
});
test('imports', () {
testFormat('import \'foo.bar\';', kind: _ParseKind.moorFile);
testFormat('import \'foo.bar\';', kind: _ParseKind.driftFile);
});
test('declared statements', () {
testFormat('foo (?1 AS INT): SELECT * FROM bar WHERE ? < 10;',
kind: _ParseKind.moorFile);
kind: _ParseKind.driftFile);
testFormat('foo: SELECT * FROM bar WHERE :id < 10;',
kind: _ParseKind.moorFile);
kind: _ParseKind.driftFile);
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;',
kind: _ParseKind.moorFile);
kind: _ParseKind.driftFile);
});
test('nested star', () {
testFormat('q: SELECT foo.** FROM foo;', kind: _ParseKind.moorFile);
testFormat('q: SELECT foo.** FROM foo;', kind: _ParseKind.driftFile);
});
test('transaction block', () {
@ -486,7 +486,7 @@ test: BEGIN TRANSACTION
INSERT INTO foo VALUES (x, y, z);
COMMIT TRANSACTION;
''',
kind: _ParseKind.moorFile,
kind: _ParseKind.driftFile,
);
});
});