/
query_analyzer_test.dart
56 lines (46 loc) · 1.64 KB
/
query_analyzer_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import 'package:drift_dev/moor_generator.dart';
import 'package:drift_dev/src/analyzer/runner/results.dart';
import 'package:test/test.dart';
import '../utils.dart';
void main() {
test('respects explicit type arguments', () async {
final state = TestState.withContent({
'foo|lib/main.moor': '''
bar(?1 AS TEXT, :foo AS BOOLEAN): SELECT ?, :foo;
''',
});
await state.runTask('package:foo/main.moor');
final file = state.file('package:foo/main.moor');
state.close();
expect(file.errors.errors, isEmpty);
final content = file.currentResult as ParsedDriftFile;
final query = content.resolvedQueries!.single;
expect(query, const TypeMatcher<SqlSelectQuery>());
final resultSet = (query as SqlSelectQuery).resultSet;
expect(resultSet.matchingTable, isNull);
expect(resultSet.columns.map((c) => c.name), ['?', ':foo']);
expect(resultSet.columns.map((c) => c.type),
[DriftSqlType.string, DriftSqlType.bool]);
});
test('reads REQUIRED syntax', () async {
final state = TestState.withContent({
'foo|lib/main.moor': '''
bar(REQUIRED ?1 AS TEXT OR NULL, REQUIRED :foo AS BOOLEAN): SELECT ?, :foo;
''',
});
await state.runTask('package:foo/main.moor');
final file = state.file('package:foo/main.moor');
state.close();
expect(file.errors.errors, isEmpty);
final content = file.currentResult as ParsedDriftFile;
final query = content.resolvedQueries!.single;
expect(
query.variables,
allOf(
hasLength(2),
everyElement(isA<FoundVariable>()
.having((e) => e.isRequired, 'isRequired', isTrue)),
),
);
});
}