@@ -90,7 +90,7 @@ struct LiveTableFetcherTests {
9090 #expect( initialCallCount == 1 )
9191
9292 let fetcher = LiveTableFetcher ( connectionId: UUID ( ) , schemaProvider: provider)
93- let result = try await fetcher. fetchTables ( )
93+ let result = try await fetcher. fetchTables ( force : false )
9494
9595 #expect( result. count == 3 )
9696 #expect( result. map ( \. name) == [ " users " , " orders " , " products " ] )
@@ -102,15 +102,15 @@ struct LiveTableFetcherTests {
102102 let provider = SQLSchemaProvider ( )
103103
104104 let fetcher = LiveTableFetcher ( connectionId: UUID ( ) , schemaProvider: provider)
105- let result = try await fetcher. fetchTables ( )
105+ let result = try await fetcher. fetchTables ( force : false )
106106
107107 #expect( result. isEmpty)
108108 }
109109
110110 @Test ( " works without schema provider using direct driver fetch " )
111111 func worksWithoutSchemaProvider( ) async throws {
112112 let fetcher = LiveTableFetcher ( connectionId: UUID ( ) )
113- let result = try await fetcher. fetchTables ( )
113+ let result = try await fetcher. fetchTables ( force : false )
114114
115115 #expect( result. isEmpty)
116116 }
@@ -131,11 +131,64 @@ struct LiveTableFetcherTests {
131131 let fetcher = LiveTableFetcher ( connectionId: UUID ( ) , schemaProvider: provider)
132132
133133 for _ in 0 ..< 3 {
134- let result = try await fetcher. fetchTables ( )
134+ let result = try await fetcher. fetchTables ( force : false )
135135 #expect( result. count == 2 )
136136 #expect( result. map ( \. name) == [ " accounts " , " transactions " ] )
137137 }
138138
139139 #expect( mockDriver. fetchTablesCallCount == 1 )
140140 }
141+
142+ @Test ( " force: true bypasses schema provider cache and hits driver " )
143+ func forceBypassesCache( ) async throws {
144+ let initialTables = [
145+ TestFixtures . makeTableInfo ( name: " users " ) ,
146+ TestFixtures . makeTableInfo ( name: " orders " )
147+ ]
148+
149+ let mockDriver = MockDatabaseDriver ( )
150+ mockDriver. tablesToReturn = initialTables
151+
152+ let provider = SQLSchemaProvider ( )
153+ await provider. loadSchema ( using: mockDriver)
154+
155+ let freshTables = [
156+ TestFixtures . makeTableInfo ( name: " users " ) ,
157+ TestFixtures . makeTableInfo ( name: " orders " ) ,
158+ TestFixtures . makeTableInfo ( name: " new_table " )
159+ ]
160+ mockDriver. tablesToReturn = freshTables
161+
162+ let callCountBefore = mockDriver. fetchTablesCallCount
163+
164+ let fetcher = LiveTableFetcher ( connectionId: UUID ( ) , schemaProvider: provider)
165+ let result = try await fetcher. fetchTables ( force: true )
166+
167+ #expect( result. count == 3 )
168+ #expect( result. map ( \. name) == [ " users " , " orders " , " new_table " ] )
169+ #expect( mockDriver. fetchTablesCallCount == callCountBefore + 1 )
170+ }
171+
172+ @Test ( " force: true writes fresh tables back into schema provider " )
173+ func forcedFetchUpdatesSchemaProvider( ) async throws {
174+ let initialTables = [ TestFixtures . makeTableInfo ( name: " old_table " ) ]
175+
176+ let mockDriver = MockDatabaseDriver ( )
177+ mockDriver. tablesToReturn = initialTables
178+
179+ let provider = SQLSchemaProvider ( )
180+ await provider. loadSchema ( using: mockDriver)
181+
182+ let freshTables = [
183+ TestFixtures . makeTableInfo ( name: " alpha " ) ,
184+ TestFixtures . makeTableInfo ( name: " beta " )
185+ ]
186+ mockDriver. tablesToReturn = freshTables
187+
188+ let fetcher = LiveTableFetcher ( connectionId: UUID ( ) , schemaProvider: provider)
189+ _ = try await fetcher. fetchTables ( force: true )
190+
191+ let cached = await provider. getTables ( )
192+ #expect( cached. map ( \. name) . sorted ( ) == [ " alpha " , " beta " ] )
193+ }
141194}
0 commit comments