diff --git a/sqlparser/lib/src/reader/tokenizer/scanner.dart b/sqlparser/lib/src/reader/tokenizer/scanner.dart index c7cb3792..cec56246 100644 --- a/sqlparser/lib/src/reader/tokenizer/scanner.dart +++ b/sqlparser/lib/src/reader/tokenizer/scanner.dart @@ -152,6 +152,11 @@ class Scanner { final name = _matchColumnName(); tokens.add(DollarSignVariableToken(_currentSpan, name)); break; + case '@': + final name = _matchColumnName(); + tokens.add(AtSignVariableToken(_currentSpan, name)); + break; + break; case ';': _addToken(TokenType.semicolon); break; @@ -167,7 +172,6 @@ class Scanner { _string(); break; case '"': - // todo sqlite also allows string literals with double ticks, we don't _identifier(escapedInQuotes: true); break; case '`': diff --git a/sqlparser/lib/src/reader/tokenizer/token.dart b/sqlparser/lib/src/reader/tokenizer/token.dart index 2dcb85d1..14139482 100644 --- a/sqlparser/lib/src/reader/tokenizer/token.dart +++ b/sqlparser/lib/src/reader/tokenizer/token.dart @@ -42,8 +42,7 @@ enum TokenType { questionMarkVariable, colon, colonVariable, - // todo at is not used at the moment - at, + atSignVariable, dollarSignVariable, stringLiteral, @@ -362,6 +361,13 @@ class DollarSignVariableToken extends Token { : super(TokenType.dollarSignVariable, span); } +class AtSignVariableToken extends Token { + final String name; + + AtSignVariableToken(FileSpan span, this.name) + : 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. class InlineDartToken extends Token { diff --git a/sqlparser/test/scanner/single_token_tests.dart b/sqlparser/test/scanner/single_token_tests.dart index 4aa2a0e0..d33d9f9c 100644 --- a/sqlparser/test/scanner/single_token_tests.dart +++ b/sqlparser/test/scanner/single_token_tests.dart @@ -44,6 +44,8 @@ Map testCases = { '0Xf13A': TokenType.numberLiteral, 'SELECT': TokenType.select, '"UPDATE"': TokenType.identifier, + '@foo': TokenType.atSignVariable, + ':named': TokenType.colonVariable, }; void main() {