Migrate to update companions everywhere :)

This commit is contained in:
Simon Binder 2019-06-21 20:07:29 +02:00
parent 0abc3993f4
commit 0616fb7082
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
11 changed files with 171 additions and 256 deletions

View File

@ -76,18 +76,6 @@ class CategoriesCompanion extends UpdateCompanion<Category> {
this.id = const Value.absent(),
this.description = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return description.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $CategoriesTable extends Categories
@ -126,14 +114,19 @@ class $CategoriesTable extends Categories
@override
final String actualTableName = 'categories';
@override
VerificationContext validateIntegrity(CategoriesCompanion d) {
VerificationContext validateIntegrity(CategoriesCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.description.present) {
context.handle(_descriptionMeta,
description.isAcceptableValue(d.description.value, _descriptionMeta));
} else if (description.isRequired && isInserting) {
context.missing(_descriptionMeta);
}
return context;
}
@ -265,22 +258,6 @@ class RecipesCompanion extends UpdateCompanion<Recipe> {
this.instructions = const Value.absent(),
this.category = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return title.present;
case 2:
return instructions.present;
case 3:
return category.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $RecipesTable extends Recipes with TableInfo<$RecipesTable, Recipe> {
@ -338,24 +315,33 @@ class $RecipesTable extends Recipes with TableInfo<$RecipesTable, Recipe> {
@override
final String actualTableName = 'recipes';
@override
VerificationContext validateIntegrity(RecipesCompanion d) {
VerificationContext validateIntegrity(RecipesCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.title.present) {
context.handle(
_titleMeta, title.isAcceptableValue(d.title.value, _titleMeta));
} else if (title.isRequired && isInserting) {
context.missing(_titleMeta);
}
if (d.isValuePresent(2)) {
if (d.instructions.present) {
context.handle(
_instructionsMeta,
instructions.isAcceptableValue(
d.instructions.value, _instructionsMeta));
} else if (instructions.isRequired && isInserting) {
context.missing(_instructionsMeta);
}
if (d.isValuePresent(3)) {
if (d.category.present) {
context.handle(_categoryMeta,
category.isAcceptableValue(d.category.value, _categoryMeta));
} else if (category.isRequired && isInserting) {
context.missing(_categoryMeta);
}
return context;
}
@ -475,20 +461,6 @@ class IngredientsCompanion extends UpdateCompanion<Ingredient> {
this.name = const Value.absent(),
this.caloriesPer100g = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return name.present;
case 2:
return caloriesPer100g.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $IngredientsTable extends Ingredients
@ -539,20 +511,27 @@ class $IngredientsTable extends Ingredients
@override
final String actualTableName = 'ingredients';
@override
VerificationContext validateIntegrity(IngredientsCompanion d) {
VerificationContext validateIntegrity(IngredientsCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.name.present) {
context.handle(
_nameMeta, name.isAcceptableValue(d.name.value, _nameMeta));
} else if (name.isRequired && isInserting) {
context.missing(_nameMeta);
}
if (d.isValuePresent(2)) {
if (d.caloriesPer100g.present) {
context.handle(
_caloriesPer100gMeta,
caloriesPer100g.isAcceptableValue(
d.caloriesPer100g.value, _caloriesPer100gMeta));
} else if (caloriesPer100g.isRequired && isInserting) {
context.missing(_caloriesPer100gMeta);
}
return context;
}
@ -678,20 +657,6 @@ class IngredientInRecipesCompanion extends UpdateCompanion<IngredientInRecipe> {
this.ingredient = const Value.absent(),
this.amountInGrams = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return recipe.present;
case 1:
return ingredient.present;
case 2:
return amountInGrams.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $IngredientInRecipesTable extends IngredientInRecipes
@ -746,21 +711,28 @@ class $IngredientInRecipesTable extends IngredientInRecipes
@override
final String actualTableName = 'recipe_ingredients';
@override
VerificationContext validateIntegrity(IngredientInRecipesCompanion d) {
VerificationContext validateIntegrity(IngredientInRecipesCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.recipe.present) {
context.handle(
_recipeMeta, recipe.isAcceptableValue(d.recipe.value, _recipeMeta));
} else if (recipe.isRequired && isInserting) {
context.missing(_recipeMeta);
}
if (d.isValuePresent(1)) {
if (d.ingredient.present) {
context.handle(_ingredientMeta,
ingredient.isAcceptableValue(d.ingredient.value, _ingredientMeta));
} else if (ingredient.isRequired && isInserting) {
context.missing(_ingredientMeta);
}
if (d.isValuePresent(2)) {
if (d.amountInGrams.present) {
context.handle(
_amountInGramsMeta,
amountInGrams.isAcceptableValue(
d.amountInGrams.value, _amountInGramsMeta));
} else if (amountInGrams.isRequired && isInserting) {
context.missing(_amountInGramsMeta);
}
return context;
}

View File

@ -40,20 +40,13 @@ abstract class DataClass {
/// database using [InsertStatement.insert] or [UpdateStatement.write].
///
/// See also:
/// - the explanation in the changelog for 1.5
/// - https://github.com/simolus3/moor/issues/25
abstract class UpdateCompanion<D extends DataClass> implements Insertable {
abstract class UpdateCompanion<D extends DataClass> implements Insertable<D> {
const UpdateCompanion();
/// Used internally by moor.
///
/// Returns true if the column at the position [index] has been explicitly
/// set to a value.
// todo this doesn't need to exist anymore, remove before release and adapt
// moor_generator
bool isValuePresent(int index);
@override
T createCompanion<T extends UpdateCompanion>(bool nullToAbsent) {
T createCompanion<T extends UpdateCompanion<D>>(bool nullToAbsent) {
return this as T;
}
}

View File

@ -118,6 +118,8 @@ class InsertStatement<D extends DataClass> {
'Cannot writee null row into ${table.$tableName}');
}
table.validateIntegrity(d.createCompanion(true)).throwIfInvalid(d);
table
.validateIntegrity(d.createCompanion(true), isInserting: true)
.throwIfInvalid(d);
}
}

View File

@ -56,10 +56,10 @@ class UpdateStatement<T extends Table, D extends DataClass> extends Query<T, D>
/// See also: [replace], which does not require [where] statements and
/// supports setting fields back to null.
Future<int> write(Insertable<D> entity) async {
// todo needs to use entity as update companion here
table.validateIntegrity(null).throwIfInvalid(entity);
final companion = entity.createCompanion(true);
table.validateIntegrity(companion).throwIfInvalid(entity);
_updatedFields = table.entityToSql(entity.createCompanion(true))
_updatedFields = table.entityToSql(companion)
..remove((_, value) => value == null);
if (_updatedFields.isEmpty) {
@ -90,7 +90,9 @@ class UpdateStatement<T extends Table, D extends DataClass> extends Query<T, D>
// We don't turn nulls to absent values here (as opposed to a regular
// update, where only non-null fields will be written).
final companion = entity.createCompanion(false);
table.validateIntegrity(companion).throwIfInvalid(entity);
table
.validateIntegrity(companion, isInserting: true)
.throwIfInvalid(entity);
assert(
whereExpr == null,
'When using replace on an update statement, you may not use where(...)'

View File

@ -33,6 +33,11 @@ class VerificationContext {
}
}
void missing(VerificationMeta meta) {
_errors[meta] = const VerificationResult.failure(
"This value was required, but isn't present");
}
void throwIfInvalid(dynamic dataObject) {
if (dataValid) return;

View File

@ -36,7 +36,8 @@ mixin TableInfo<TableDsl extends Table, D extends DataClass> {
/// Validates that the given entity can be inserted into this table, meaning
/// that it respects all constraints (nullability, text length, etc.).
VerificationContext validateIntegrity(covariant UpdateCompanion<D> instance);
VerificationContext validateIntegrity(covariant UpdateCompanion<D> instance,
{bool isInserting = false});
/// Maps the given update companion to a [Map] that can be inserted into sql.
/// The keys should represent the column name in sql, the values the

View File

@ -129,24 +129,6 @@ class TodosTableCompanion extends UpdateCompanion<TodoEntry> {
this.targetDate = const Value.absent(),
this.category = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return title.present;
case 2:
return content.present;
case 3:
return targetDate.present;
case 4:
return category.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $TodosTableTable extends TodosTable
@ -218,26 +200,37 @@ class $TodosTableTable extends TodosTable
@override
final String actualTableName = 'todos';
@override
VerificationContext validateIntegrity(TodosTableCompanion d) {
VerificationContext validateIntegrity(TodosTableCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.title.present) {
context.handle(
_titleMeta, title.isAcceptableValue(d.title.value, _titleMeta));
} else if (title.isRequired && isInserting) {
context.missing(_titleMeta);
}
if (d.isValuePresent(2)) {
if (d.content.present) {
context.handle(_contentMeta,
content.isAcceptableValue(d.content.value, _contentMeta));
} else if (content.isRequired && isInserting) {
context.missing(_contentMeta);
}
if (d.isValuePresent(3)) {
if (d.targetDate.present) {
context.handle(_targetDateMeta,
targetDate.isAcceptableValue(d.targetDate.value, _targetDateMeta));
} else if (targetDate.isRequired && isInserting) {
context.missing(_targetDateMeta);
}
if (d.isValuePresent(4)) {
if (d.category.present) {
context.handle(_categoryMeta,
category.isAcceptableValue(d.category.value, _categoryMeta));
} else if (category.isRequired && isInserting) {
context.missing(_categoryMeta);
}
return context;
}
@ -346,18 +339,6 @@ class CategoriesCompanion extends UpdateCompanion<Category> {
this.id = const Value.absent(),
this.description = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return description.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $CategoriesTable extends Categories
@ -393,14 +374,19 @@ class $CategoriesTable extends Categories
@override
final String actualTableName = 'categories';
@override
VerificationContext validateIntegrity(CategoriesCompanion d) {
VerificationContext validateIntegrity(CategoriesCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.description.present) {
context.handle(_descriptionMeta,
description.isAcceptableValue(d.description.value, _descriptionMeta));
} else if (description.isRequired && isInserting) {
context.missing(_descriptionMeta);
}
return context;
}
@ -558,24 +544,6 @@ class UsersCompanion extends UpdateCompanion<User> {
this.profilePicture = const Value.absent(),
this.creationTime = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return name.present;
case 2:
return isAwesome.present;
case 3:
return profilePicture.present;
case 4:
return creationTime.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $UsersTable extends Users with TableInfo<$UsersTable, User> {
@ -643,30 +611,41 @@ class $UsersTable extends Users with TableInfo<$UsersTable, User> {
@override
final String actualTableName = 'users';
@override
VerificationContext validateIntegrity(UsersCompanion d) {
VerificationContext validateIntegrity(UsersCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.name.present) {
context.handle(
_nameMeta, name.isAcceptableValue(d.name.value, _nameMeta));
} else if (name.isRequired && isInserting) {
context.missing(_nameMeta);
}
if (d.isValuePresent(2)) {
if (d.isAwesome.present) {
context.handle(_isAwesomeMeta,
isAwesome.isAcceptableValue(d.isAwesome.value, _isAwesomeMeta));
} else if (isAwesome.isRequired && isInserting) {
context.missing(_isAwesomeMeta);
}
if (d.isValuePresent(3)) {
if (d.profilePicture.present) {
context.handle(
_profilePictureMeta,
profilePicture.isAcceptableValue(
d.profilePicture.value, _profilePictureMeta));
} else if (profilePicture.isRequired && isInserting) {
context.missing(_profilePictureMeta);
}
if (d.isValuePresent(4)) {
if (d.creationTime.present) {
context.handle(
_creationTimeMeta,
creationTime.isAcceptableValue(
d.creationTime.value, _creationTimeMeta));
} else if (creationTime.isRequired && isInserting) {
context.missing(_creationTimeMeta);
}
return context;
}
@ -775,18 +754,6 @@ class SharedTodosCompanion extends UpdateCompanion<SharedTodo> {
this.todo = const Value.absent(),
this.user = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return todo.present;
case 1:
return user.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $SharedTodosTable extends SharedTodos
@ -827,15 +794,20 @@ class $SharedTodosTable extends SharedTodos
@override
final String actualTableName = 'shared_todos';
@override
VerificationContext validateIntegrity(SharedTodosCompanion d) {
VerificationContext validateIntegrity(SharedTodosCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.todo.present) {
context.handle(
_todoMeta, todo.isAcceptableValue(d.todo.value, _todoMeta));
} else if (todo.isRequired && isInserting) {
context.missing(_todoMeta);
}
if (d.isValuePresent(1)) {
if (d.user.present) {
context.handle(
_userMeta, user.isAcceptableValue(d.user.value, _userMeta));
} else if (user.isRequired && isInserting) {
context.missing(_userMeta);
}
return context;
}
@ -945,18 +917,6 @@ class TableWithoutPKCompanion extends UpdateCompanion<TableWithoutPKData> {
this.notReallyAnId = const Value.absent(),
this.someFloat = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return notReallyAnId.present;
case 1:
return someFloat.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $TableWithoutPKTable extends TableWithoutPK
@ -999,17 +959,22 @@ class $TableWithoutPKTable extends TableWithoutPK
@override
final String actualTableName = 'table_without_p_k';
@override
VerificationContext validateIntegrity(TableWithoutPKCompanion d) {
VerificationContext validateIntegrity(TableWithoutPKCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.notReallyAnId.present) {
context.handle(
_notReallyAnIdMeta,
notReallyAnId.isAcceptableValue(
d.notReallyAnId.value, _notReallyAnIdMeta));
} else if (notReallyAnId.isRequired && isInserting) {
context.missing(_notReallyAnIdMeta);
}
if (d.isValuePresent(1)) {
if (d.someFloat.present) {
context.handle(_someFloatMeta,
someFloat.isAcceptableValue(d.someFloat.value, _someFloatMeta));
} else if (someFloat.isRequired && isInserting) {
context.missing(_someFloatMeta);
}
return context;
}

View File

@ -6,7 +6,10 @@ import 'data/utils/mocks.dart';
// the content is set to non-null and the title must be between 4 and 16 chars
// long
final nullContent = TodoEntry(title: 'Test', content: null);
final nullContent = const TodosTableCompanion(
title: Value.use('Test'), content: Value.use(null));
final absentContent = const TodosTableCompanion(
title: Value.use('Test'), content: Value.absent());
final shortTitle = TodoEntry(title: 'A', content: 'content');
final longTitle = TodoEntry(title: 'A ${'very' * 5} long title', content: 'hi');
final valid = TodoEntry(title: 'Test', content: 'Some content');
@ -26,6 +29,11 @@ void main() {
throwsA(predicate<InvalidDataException>(
(e) => e.message.contains('not nullable'))),
);
expect(
() => db.into(db.todosTable).insert(absentContent),
throwsA(predicate<InvalidDataException>(
(e) => e.message.contains('was required, but'))),
);
expect(
() => db.into(db.todosTable).insert(shortTitle),
throwsA(predicate<InvalidDataException>(

View File

@ -110,22 +110,6 @@ class TodosCompanion extends UpdateCompanion<TodoEntry> {
this.targetDate = const Value.absent(),
this.category = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return content.present;
case 2:
return targetDate.present;
case 3:
return category.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $TodosTable extends Todos with TableInfo<$TodosTable, TodoEntry> {
@ -183,22 +167,31 @@ class $TodosTable extends Todos with TableInfo<$TodosTable, TodoEntry> {
@override
final String actualTableName = 'todos';
@override
VerificationContext validateIntegrity(TodosCompanion d) {
VerificationContext validateIntegrity(TodosCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.content.present) {
context.handle(_contentMeta,
content.isAcceptableValue(d.content.value, _contentMeta));
} else if (content.isRequired && isInserting) {
context.missing(_contentMeta);
}
if (d.isValuePresent(2)) {
if (d.targetDate.present) {
context.handle(_targetDateMeta,
targetDate.isAcceptableValue(d.targetDate.value, _targetDateMeta));
} else if (targetDate.isRequired && isInserting) {
context.missing(_targetDateMeta);
}
if (d.isValuePresent(3)) {
if (d.category.present) {
context.handle(_categoryMeta,
category.isAcceptableValue(d.category.value, _categoryMeta));
} else if (category.isRequired && isInserting) {
context.missing(_categoryMeta);
}
return context;
}
@ -212,19 +205,19 @@ class $TodosTable extends Todos with TableInfo<$TodosTable, TodoEntry> {
}
@override
Map<String, Variable> entityToSql(TodoEntry d, {bool includeNulls = false}) {
Map<String, Variable> entityToSql(TodosCompanion d) {
final map = <String, Variable>{};
if (d.id != null || includeNulls) {
map['id'] = Variable<int, IntType>(d.id);
if (d.id.present) {
map['id'] = Variable<int, IntType>(d.id.value);
}
if (d.content != null || includeNulls) {
map['content'] = Variable<String, StringType>(d.content);
if (d.content.present) {
map['content'] = Variable<String, StringType>(d.content.value);
}
if (d.targetDate != null || includeNulls) {
map['target_date'] = Variable<DateTime, DateTimeType>(d.targetDate);
if (d.targetDate.present) {
map['target_date'] = Variable<DateTime, DateTimeType>(d.targetDate.value);
}
if (d.category != null || includeNulls) {
map['category'] = Variable<int, IntType>(d.category);
if (d.category.present) {
map['category'] = Variable<int, IntType>(d.category.value);
}
return map;
}
@ -304,18 +297,6 @@ class CategoriesCompanion extends UpdateCompanion<Category> {
this.id = const Value.absent(),
this.description = const Value.absent(),
});
@override
bool isValuePresent(int index) {
switch (index) {
case 0:
return id.present;
case 1:
return description.present;
default:
throw ArgumentError(
'Hit an invalid state while serializing data. Did you run the build step?');
}
}
}
class $CategoriesTable extends Categories
@ -354,14 +335,19 @@ class $CategoriesTable extends Categories
@override
final String actualTableName = 'categories';
@override
VerificationContext validateIntegrity(CategoriesCompanion d) {
VerificationContext validateIntegrity(CategoriesCompanion d,
{bool isInserting = false}) {
final context = VerificationContext();
if (d.isValuePresent(0)) {
if (d.id.present) {
context.handle(_idMeta, id.isAcceptableValue(d.id.value, _idMeta));
} else if (id.isRequired && isInserting) {
context.missing(_idMeta);
}
if (d.isValuePresent(1)) {
if (d.description.present) {
context.handle(_descriptionMeta,
description.isAcceptableValue(d.description.value, _descriptionMeta));
} else if (description.isRequired && isInserting) {
context.missing(_descriptionMeta);
}
return context;
}
@ -375,13 +361,13 @@ class $CategoriesTable extends Categories
}
@override
Map<String, Variable> entityToSql(Category d, {bool includeNulls = false}) {
Map<String, Variable> entityToSql(CategoriesCompanion d) {
final map = <String, Variable>{};
if (d.id != null || includeNulls) {
map['id'] = Variable<int, IntType>(d.id);
if (d.id.present) {
map['id'] = Variable<int, IntType>(d.id.value);
}
if (d.description != null || includeNulls) {
map['desc'] = Variable<String, StringType>(d.description);
if (d.description.present) {
map['desc'] = Variable<String, StringType>(d.description.value);
}
return map;
}

View File

@ -163,23 +163,22 @@ class TableWriter {
void _writeValidityCheckMethod(StringBuffer buffer) {
buffer
..write('@override\nVerificationContext validateIntegrity'
'(${table.updateCompanionName} d) {\n')
'(${table.updateCompanionName} d, {bool isInserting = false}) {\n')
..write('final context = VerificationContext();\n');
for (var i = 0; i < table.columns.length; i++) {
final column = table.columns[i];
for (var column in table.columns) {
final getterName = column.dartGetterName;
final metaName = _fieldNameForColumnMeta(column);
buffer
..write('if (d.isValuePresent($i)) {\n')
..write('if (d.$getterName.present) {\n')
..write('context.handle('
'$metaName, '
'$getterName.isAcceptableValue(d.$getterName.value, $metaName));')
..write('} else if ($getterName.isRequired && isInserting) {\n')
..write('context.missing($metaName);\n')
..write('}\n');
}
// todo verify that all required columns are present
buffer.write('return context;\n}\n');
}

View File

@ -12,7 +12,6 @@ class UpdateCompanionWriter {
'extends UpdateCompanion<${table.dartTypeName}> {\n');
_writeFields(buffer);
_writeConstructor(buffer);
_writeIsPresentOverride(buffer);
buffer.write('}\n');
}
@ -33,21 +32,4 @@ class UpdateCompanionWriter {
buffer.write('});\n');
}
void _writeIsPresentOverride(StringBuffer buffer) {
buffer
..write('@override\nbool isValuePresent(int index) {\n')
..write('switch (index) {');
for (var i = 0; i < table.columns.length; i++) {
final getterName = table.columns[i].dartGetterName;
buffer.write('case $i: return $getterName.present;\n');
}
buffer
..write('default: throw ArgumentError('
"'Hit an invalid state while serializing data. Did you run the build "
"step?');")
..write('}\n}\n');
}
}