From 6b43a57911c4dfe6bceff386f447f841ea562748 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Tue, 21 Jul 2020 19:43:43 +0200 Subject: [PATCH] Warn when using both primaryKey and autoIncrement() --- .../lib/src/analyzer/dart/table_parser.dart | 11 ++++++++++- .../test/analyzer/dart/table_parser_test.dart | 12 ++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/moor_generator/lib/src/analyzer/dart/table_parser.dart b/moor_generator/lib/src/analyzer/dart/table_parser.dart index 754cba4a..9b6511f4 100644 --- a/moor_generator/lib/src/analyzer/dart/table_parser.dart +++ b/moor_generator/lib/src/analyzer/dart/table_parser.dart @@ -12,15 +12,24 @@ class TableParser { final columns = (await _parseColumns(element)).toList(); + final primaryKey = await _readPrimaryKey(element, columns); + final table = MoorTable( fromClass: element, columns: columns, sqlName: escapeIfNeeded(sqlName), dartTypeName: _readDartTypeName(element), - primaryKey: await _readPrimaryKey(element, columns), + primaryKey: primaryKey, declaration: DartTableDeclaration(element, base.step.file), ); + if (primaryKey != null && columns.any((element) => element.hasAI)) { + base.step.errors.report(ErrorInDartCode( + message: "Tables can't override primaryKey and use autoIncrement()", + affectedElement: element, + )); + } + var index = 0; for (final converter in table.converters) { converter diff --git a/moor_generator/test/analyzer/dart/table_parser_test.dart b/moor_generator/test/analyzer/dart/table_parser_test.dart index 0634ab35..55c65a2f 100644 --- a/moor_generator/test/analyzer/dart/table_parser_test.dart +++ b/moor_generator/test/analyzer/dart/table_parser_test.dart @@ -196,6 +196,18 @@ void main() { expect(table.columns.any((column) => column.hasAI), isFalse); }); + test('warns when using primaryKey and autoIncrement()', () async { + await parse('PrimaryKeyAndAutoIncrement'); + + expect( + dartStep.errors.errors, + contains( + isA().having((e) => e.message, 'message', + contains('override primaryKey and use autoIncrement()')), + ), + ); + }); + test('recognizes aliases for rowid', () async { final table = await parse('WithAliasForRowId'); final idColumn = table.columns.singleWhere((c) => c.name.name == 'id');