From 786aea49f052894566ece1955967a1d8bba3d499 Mon Sep 17 00:00:00 2001 From: Timm Preetz Date: Tue, 2 Apr 2024 14:50:49 +0200 Subject: [PATCH] Throw error when encountering `InvalidStatement` Fixes #820 --- floor_common/lib/src/adapter/query_adapter.dart | 5 +++++ floor_common/test/adapter/query_adapter_test.dart | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/floor_common/lib/src/adapter/query_adapter.dart b/floor_common/lib/src/adapter/query_adapter.dart index 34c2cf6d..d5b86657 100644 --- a/floor_common/lib/src/adapter/query_adapter.dart +++ b/floor_common/lib/src/adapter/query_adapter.dart @@ -150,6 +150,11 @@ class QueryAdapter { } else if (rootNode is DeleteStatement) { result = await _database.rawDelete(sql, arguments).then(_mapResult); tableName = rootNode.table.tableName; + } else if (rootNode is InvalidStatement) { + // The underlying error is not contained in the node, so in order to find the root cause one needs to run with the debugger stopping on "all exceptions" + throw Exception('Failed to parse "$sql"'); + } else { + throw Exception('Unknown statement type: $rootNode'); } _notifyIfChanged(tableName, result); diff --git a/floor_common/test/adapter/query_adapter_test.dart b/floor_common/test/adapter/query_adapter_test.dart index 566e5923..0a9f207b 100644 --- a/floor_common/test/adapter/query_adapter_test.dart +++ b/floor_common/test/adapter/query_adapter_test.dart @@ -76,6 +76,12 @@ void main() { expect(actual, throwsStateError); verify(mockDatabaseExecutor.rawQuery(sql)); }); + + test('exception because query can not be parsed', () async { + final deleteQueryFuture = underTest.queryNoReturn('DELETE * FROM foo'); + + expect(deleteQueryFuture, throwsA(isA().having((e) => e.toString(), 'message', contains('Failed to parse')))); + }); }); group('query list', () {