mirror of https://github.com/AMT-Cheif/drift.git
82 lines
1.9 KiB
Dart
82 lines
1.9 KiB
Dart
import 'package:sqlparser/sqlparser.dart';
|
|
|
|
// Example that parses a select statement on some tables defined below and
|
|
// prints what columns would be returned by that statement.
|
|
void main() {
|
|
final engine = SqlEngine()
|
|
..registerTable(frameworks)
|
|
..registerTable(languages)
|
|
..registerTable(frameworkToLanguage);
|
|
|
|
final result = engine.analyze('''
|
|
SELECT f.* FROM frameworks f
|
|
INNER JOIN uses_language ul ON ul.framework = f.id
|
|
INNER JOIN languages l ON l.id = ul.language
|
|
WHERE l.name = 'Dart'
|
|
ORDER BY f.name ASC, f.popularity DESC
|
|
LIMIT 5 OFFSET 5 * 3
|
|
''');
|
|
|
|
for (var error in result.errors) {
|
|
print(error);
|
|
}
|
|
|
|
final select = result.root as SelectStatement;
|
|
final columns = select.resolvedColumns;
|
|
|
|
print('the query returns ${columns.length} columns');
|
|
|
|
for (var column in columns) {
|
|
final type = result.typeOf(column);
|
|
print('${column.name}, which will be a $type');
|
|
}
|
|
}
|
|
|
|
// declare some tables. I know this is verbose and boring, but it's needed so
|
|
// that the analyzer knows what's going on.
|
|
final Table frameworks = Table(
|
|
name: 'frameworks',
|
|
resolvedColumns: [
|
|
TableColumn(
|
|
'id',
|
|
const ResolvedType(type: BasicType.int),
|
|
),
|
|
TableColumn(
|
|
'name',
|
|
const ResolvedType(type: BasicType.text),
|
|
),
|
|
TableColumn(
|
|
'popularity',
|
|
const ResolvedType(type: BasicType.real),
|
|
),
|
|
],
|
|
);
|
|
|
|
final Table languages = Table(
|
|
name: 'languages',
|
|
resolvedColumns: [
|
|
TableColumn(
|
|
'id',
|
|
const ResolvedType(type: BasicType.int),
|
|
),
|
|
TableColumn(
|
|
'name',
|
|
const ResolvedType(type: BasicType.text),
|
|
),
|
|
],
|
|
);
|
|
|
|
final Table frameworkToLanguage = Table(
|
|
name: 'uses_language',
|
|
resolvedColumns: [
|
|
TableColumn(
|
|
'framework',
|
|
const ResolvedType(type: BasicType.int),
|
|
),
|
|
TableColumn(
|
|
'language',
|
|
const ResolvedType(type: BasicType.int),
|
|
),
|
|
],
|
|
);
|