drift/sqlparser/test/parser/select/generic_test.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),
]),
);
});
}