diff --git a/sqlparser/lib/src/ast/statements/create_table.dart b/sqlparser/lib/src/ast/statements/create_table.dart index 471870a4..ee000b28 100644 --- a/sqlparser/lib/src/ast/statements/create_table.dart +++ b/sqlparser/lib/src/ast/statements/create_table.dart @@ -2,7 +2,7 @@ part of '../ast.dart'; /// A "CREATE TABLE" statement, see https://www.sqlite.org/lang_createtable.html /// for the individual components. -class CreateTableStatement extends Statement { +class CreateTableStatement extends Statement with SchemaStatement { final bool ifNotExists; final String tableName; final List columns; diff --git a/sqlparser/lib/src/ast/statements/delete.dart b/sqlparser/lib/src/ast/statements/delete.dart index b841418f..a6326e41 100644 --- a/sqlparser/lib/src/ast/statements/delete.dart +++ b/sqlparser/lib/src/ast/statements/delete.dart @@ -1,6 +1,6 @@ part of '../ast.dart'; -class DeleteStatement extends Statement { +class DeleteStatement extends Statement with CrudStatement { final TableReference from; final Expression where; diff --git a/sqlparser/lib/src/ast/statements/select.dart b/sqlparser/lib/src/ast/statements/select.dart index bcb274d2..fc422ae1 100644 --- a/sqlparser/lib/src/ast/statements/select.dart +++ b/sqlparser/lib/src/ast/statements/select.dart @@ -1,6 +1,6 @@ part of '../ast.dart'; -class SelectStatement extends Statement with ResultSet { +class SelectStatement extends Statement with CrudStatement, ResultSet { final bool distinct; final List columns; final List from; diff --git a/sqlparser/lib/src/ast/statements/statement.dart b/sqlparser/lib/src/ast/statements/statement.dart index c37148a3..d4b2e88e 100644 --- a/sqlparser/lib/src/ast/statements/statement.dart +++ b/sqlparser/lib/src/ast/statements/statement.dart @@ -1,3 +1,9 @@ part of '../ast.dart'; abstract class Statement extends AstNode {} + +/// Marker mixin for statements that read from an existing table structure. +mixin CrudStatement on Statement {} + +/// Marker mixin for statements that change the table structure. +mixin SchemaStatement on Statement {} diff --git a/sqlparser/lib/src/ast/statements/update.dart b/sqlparser/lib/src/ast/statements/update.dart index 490a3a02..a4bc0f8c 100644 --- a/sqlparser/lib/src/ast/statements/update.dart +++ b/sqlparser/lib/src/ast/statements/update.dart @@ -16,7 +16,7 @@ const Map _tokensToMode = { TokenType.ignore: FailureMode.ignore, }; -class UpdateStatement extends Statement { +class UpdateStatement extends Statement with CrudStatement { final FailureMode or; final TableReference table; final List set; diff --git a/sqlparser/lib/src/engine/sql_engine.dart b/sqlparser/lib/src/engine/sql_engine.dart index bd9deb60..cf1d410a 100644 --- a/sqlparser/lib/src/engine/sql_engine.dart +++ b/sqlparser/lib/src/engine/sql_engine.dart @@ -57,10 +57,13 @@ class SqlEngine { try { ReferenceFinder(globalScope: scope).start(node); - node - ..accept(ColumnResolver(context)) - ..accept(ReferenceResolver(context)) - ..accept(TypeResolvingVisitor(context)); + + if (node is CrudStatement) { + node + ..accept(ColumnResolver(context)) + ..accept(ReferenceResolver(context)) + ..accept(TypeResolvingVisitor(context)); + } } catch (e) { // todo should we do now? AFAIK, everything that causes an exception // is added as an error contained in the context.