mirror of https://github.com/AMT-Cheif/drift.git
Generate null variables
This commit is contained in:
parent
cd89379627
commit
944725dafb
|
@ -84,11 +84,9 @@ class Variable<T extends Object> extends Expression<T> {
|
||||||
..write(mark)
|
..write(mark)
|
||||||
..write(explicitStart + context.amountOfVariables);
|
..write(explicitStart + context.amountOfVariables);
|
||||||
context.introduceVariable(this, mapToSimpleValue(context));
|
context.introduceVariable(this, mapToSimpleValue(context));
|
||||||
} else if (value != null) {
|
} else {
|
||||||
context.buffer.write(mark);
|
context.buffer.write(mark);
|
||||||
context.introduceVariable(this, mapToSimpleValue(context));
|
context.introduceVariable(this, mapToSimpleValue(context));
|
||||||
} else {
|
|
||||||
context.buffer.write('NULL');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,10 @@ void main() {
|
||||||
expect(ctx.boundVariables, [1551297563]);
|
expect(ctx.boundVariables, [1551297563]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('maps null to null', () {
|
||||||
|
expect(Variable<Object>(null), generates('?', [null]));
|
||||||
|
});
|
||||||
|
|
||||||
group('can write variables with wrong type parameter', () {
|
group('can write variables with wrong type parameter', () {
|
||||||
test('true', () {
|
test('true', () {
|
||||||
expect(const Variable<Object>(true), generates('?', [1]));
|
expect(const Variable<Object>(true), generates('?', [1]));
|
||||||
|
@ -52,16 +56,6 @@ void main() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('writes null directly for null values', () {
|
|
||||||
const variable = Variable<String>(null);
|
|
||||||
final ctx = GenerationContext.fromDb(TodoDb());
|
|
||||||
|
|
||||||
variable.writeInto(ctx);
|
|
||||||
|
|
||||||
expect(ctx.sql, 'NULL');
|
|
||||||
expect(ctx.boundVariables, isEmpty);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('writes constants when variables are not supported', () {
|
test('writes constants when variables are not supported', () {
|
||||||
const variable = Variable("hello world'");
|
const variable = Variable("hello world'");
|
||||||
final ctx = GenerationContext.fromDb(TodoDb(), supportsVariables: false);
|
final ctx = GenerationContext.fromDb(TodoDb(), supportsVariables: false);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart' hide isNull;
|
||||||
import 'package:mockito/mockito.dart';
|
import 'package:mockito/mockito.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
@ -37,8 +37,8 @@ void main() {
|
||||||
verify(executor.runInsert(
|
verify(executor.runInsert(
|
||||||
'INSERT INTO table_without_p_k '
|
'INSERT INTO table_without_p_k '
|
||||||
'(not_really_an_id, some_float, web_safe_int, custom) '
|
'(not_really_an_id, some_float, web_safe_int, custom) '
|
||||||
'VALUES (?, ?, NULL, ?)',
|
'VALUES (?, ?, ?, ?)',
|
||||||
[42, 3.1415, anything]));
|
[42, 3.1415, isNull, anything]));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('can insert BigInt values', () async {
|
test('can insert BigInt values', () async {
|
||||||
|
@ -156,7 +156,8 @@ void main() {
|
||||||
TodosTableCompanion.insert(content: 'content', title: Value(null)));
|
TodosTableCompanion.insert(content: 'content', title: Value(null)));
|
||||||
|
|
||||||
verify(executor.runInsert(
|
verify(executor.runInsert(
|
||||||
'INSERT INTO todos (title, content) VALUES (NULL, ?)', ['content']));
|
'INSERT INTO todos (title, content) VALUES (?, ?)',
|
||||||
|
[null, 'content']));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,8 @@ void main() {
|
||||||
|
|
||||||
verify(executor.runUpdate(
|
verify(executor.runUpdate(
|
||||||
'UPDATE todos SET title = ?, content = ?, '
|
'UPDATE todos SET title = ?, content = ?, '
|
||||||
'target_date = NULL, category = NULL WHERE id = ?;',
|
'target_date = ?, category = ? WHERE id = ?;',
|
||||||
['Title', 'Updated content', 3]));
|
['Title', 'Updated content', null, null, 3]));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('applies default values', () async {
|
test('applies default values', () async {
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
## 2.0.1
|
||||||
|
|
||||||
|
- Fix batch implementation to not start a second transaction.
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
- Support `drift` version `2.0.0`.
|
- Support `drift` version `2.0.0`.
|
||||||
|
|
|
@ -74,7 +74,7 @@ class _SqfliteDelegate extends DatabaseDelegate {
|
||||||
batch.execute(statements.statements[arg.statementIndex], arg.arguments);
|
batch.execute(statements.statements[arg.statementIndex], arg.arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
await batch.commit(noResult: true);
|
await batch.apply(noResult: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: drift_sqflite
|
name: drift_sqflite
|
||||||
description: A Flutter-only implementation of a drift database, based on the `sqflite` package.
|
description: A Flutter-only implementation of a drift database, based on the `sqflite` package.
|
||||||
version: 2.0.0
|
version: 2.0.1
|
||||||
repository: https://github.com/simolus3/drift
|
repository: https://github.com/simolus3/drift
|
||||||
homepage: https://drift.simonbinder.eu/
|
homepage: https://drift.simonbinder.eu/
|
||||||
issue_tracker: https://github.com/simolus3/drift/issues
|
issue_tracker: https://github.com/simolus3/drift/issues
|
||||||
|
@ -10,7 +10,7 @@ environment:
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
drift: ^2.0.0
|
drift: ^2.0.0
|
||||||
sqflite: ^2.0.0+3
|
sqflite: ^2.1.0
|
||||||
path: ^1.8.0
|
path: ^1.8.0
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
|
@ -111,4 +111,47 @@ void crudTests(TestExecutor executor) {
|
||||||
expect(await db.friendsOf(1).get(), isNotEmpty);
|
expect(await db.friendsOf(1).get(), isNotEmpty);
|
||||||
await executor.clearDatabaseAndClose(db);
|
await executor.clearDatabaseAndClose(db);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group('bind variable', () {
|
||||||
|
late Database database;
|
||||||
|
|
||||||
|
setUp(() => database = Database(executor.createConnection()));
|
||||||
|
tearDown(() => executor.clearDatabaseAndClose(database));
|
||||||
|
|
||||||
|
Future<T?> evaluate<T extends Object>(Expression<T> expr) async {
|
||||||
|
final query = database.selectOnly(database.users)
|
||||||
|
..addColumns([expr])
|
||||||
|
..limit(1);
|
||||||
|
final row = await query.getSingle();
|
||||||
|
return row.read(expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
test('null', () {
|
||||||
|
expect(evaluate(Variable<String>(null)), completion(isNull));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('string', () {
|
||||||
|
expect(evaluate(Variable<String>('foo bar')), completion('foo bar'));
|
||||||
|
expect(evaluate(Variable<String>('')), completion(''));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('boolean', () {
|
||||||
|
expect(evaluate(Variable<bool>(true)), completion(isTrue));
|
||||||
|
expect(evaluate(Variable<bool>(false)), completion(isFalse));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('int', () {
|
||||||
|
expect(evaluate(Variable<double>(42)), completion(42));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('double', () {
|
||||||
|
expect(evaluate(Variable<double>(3.14)), completion(3.14));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Uint8List', () {
|
||||||
|
final list = Uint8List.fromList(List.generate(12, (index) => index));
|
||||||
|
|
||||||
|
expect(evaluate(Variable<Uint8List>(list)), completion(list));
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
library tests;
|
library tests;
|
||||||
|
|
||||||
export 'package:drift/drift.dart';
|
export 'package:drift/drift.dart' hide isNull, isNotNull;
|
||||||
|
|
||||||
export 'data/sample_data.dart';
|
export 'data/sample_data.dart';
|
||||||
export 'database/database.dart';
|
export 'database/database.dart';
|
||||||
|
|
Loading…
Reference in New Issue