drift/drift_dev/test/writer/queries/sql_writer_test.dart

43 lines
1.3 KiB
Dart

import 'package:drift/drift.dart';
import 'package:drift_dev/src/analysis/options.dart';
import 'package:drift_dev/src/analysis/results/results.dart';
import 'package:drift_dev/src/writer/queries/sql_writer.dart';
import 'package:sqlparser/sqlparser.dart';
import 'package:test/test.dart';
void main() {
void check(
String sql,
String expectedDart, {
DriftOptions options = const DriftOptions.defaults(),
SqlDialect dialect = SqlDialect.sqlite,
}) {
final engine = SqlEngine();
final context = engine.analyze(sql);
final query = SqlSelectQuery('name', context, context.root, [], [],
InferredResultSet(null, []), null, null);
final result = SqlWriter(options, dialect: dialect, query: query).write();
expect(result, expectedDart);
}
test('removes unnecessary whitespace', () {
check(r'SELECT 1 + 3 AS r', r"'SELECT 1 + 3 AS r'");
});
test('removes comments', () {
check(r'SELECT /*comment*/ 1', r"'SELECT 1'");
});
test('escapes Dart characters in SQL', () {
check(r"SELECT '$hey';", r"'SELECT \'\$hey\''");
});
test('escapes postgres keywords', () {
check('SELECT * FROM user', "'SELECT * FROM user'");
check('SELECT * FROM user', "'SELECT * FROM \"user\"'",
dialect: SqlDialect.postgres);
});
}