mirror of https://github.com/AMT-Cheif/drift.git
67 lines
1.9 KiB
Dart
67 lines
1.9 KiB
Dart
import 'package:sqlparser/src/ast/ast.dart';
|
|
import 'package:sqlparser/src/reader/parser/parser.dart';
|
|
import 'package:sqlparser/src/reader/tokenizer/scanner.dart';
|
|
import 'package:sqlparser/src/reader/tokenizer/token.dart';
|
|
import 'package:sqlparser/src/utils/ast_equality.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../utils.dart';
|
|
|
|
void main() {
|
|
test('parses select statements', () {
|
|
final scanner = Scanner(
|
|
'SELECT table.*, *, 1 as name WHERE 1 ORDER BY name LIMIT 3 OFFSET 5');
|
|
final tokens = scanner.scanTokens();
|
|
final parser = Parser(tokens);
|
|
|
|
final stmt = parser.select();
|
|
enforceEqual(
|
|
stmt,
|
|
SelectStatement(
|
|
columns: [
|
|
StarResultColumn('table'),
|
|
StarResultColumn(null),
|
|
ExpressionResultColumn(
|
|
expression: NumericLiteral(1, token(TokenType.numberLiteral)),
|
|
as: 'name',
|
|
),
|
|
],
|
|
where: NumericLiteral(1, token(TokenType.numberLiteral)),
|
|
orderBy: OrderBy(terms: [
|
|
OrderingTerm(expression: Reference(columnName: 'name')),
|
|
]),
|
|
limit: Limit(
|
|
count: NumericLiteral(3, token(TokenType.numberLiteral)),
|
|
offsetSeparator: token(TokenType.offset),
|
|
offset: NumericLiteral(5, token(TokenType.numberLiteral)),
|
|
),
|
|
),
|
|
);
|
|
});
|
|
|
|
test('supports subqueries', () {
|
|
final scanner =
|
|
Scanner('SELECT table.*, (SELECT * FROM table2) FROM table');
|
|
final tokens = scanner.scanTokens();
|
|
final parser = Parser(tokens);
|
|
|
|
final stmt = parser.select();
|
|
enforceEqual(
|
|
stmt,
|
|
SelectStatement(columns: [
|
|
StarResultColumn('table'),
|
|
ExpressionResultColumn(
|
|
expression: SubQuery(
|
|
select: SelectStatement(
|
|
columns: [StarResultColumn(null)],
|
|
from: [TableReference('table2', null)],
|
|
),
|
|
),
|
|
),
|
|
], from: [
|
|
TableReference('table', null),
|
|
]),
|
|
);
|
|
});
|
|
}
|