diff --git a/ios/Plugin/DailyNotificationDatabase.swift b/ios/Plugin/DailyNotificationDatabase.swift index e0f2fb5..046aee7 100644 --- a/ios/Plugin/DailyNotificationDatabase.swift +++ b/ios/Plugin/DailyNotificationDatabase.swift @@ -178,6 +178,28 @@ class DailyNotificationDatabase { sqlite3_finalize(statement) } + /** + * Query SQL and return integer result + * + * @param sql SQL query statement + * @return Integer result or nil if query fails + */ + func queryInt(_ sql: String) -> Int? { + var statement: OpaquePointer? + var result: Int? = nil + + if sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK { + if sqlite3_step(statement) == SQLITE_ROW { + result = Int(sqlite3_column_int(statement, 0)) + } + } else { + print("\(Self.TAG): Query preparation failed: \(String(cString: sqlite3_errmsg(db)))") + } + + sqlite3_finalize(statement) + return result + } + // MARK: - Public Methods /** diff --git a/ios/Plugin/DailyNotificationPerformanceOptimizer.swift b/ios/Plugin/DailyNotificationPerformanceOptimizer.swift index 0db34f4..980333a 100644 --- a/ios/Plugin/DailyNotificationPerformanceOptimizer.swift +++ b/ios/Plugin/DailyNotificationPerformanceOptimizer.swift @@ -175,16 +175,16 @@ class DailyNotificationPerformanceOptimizer { do { logger.log(.debug, "DailyNotificationPerformanceOptimizer.TAG: Analyzing database performance") - // Phase 1: Database stats methods not yet implemented - // TODO: Phase 2 - Implement database statistics - let pageCount: Int = 0 - let pageSize: Int = 0 - let cacheSize: Int = 0 + // Query database statistics using PRAGMA + let pageCount = database.queryInt("PRAGMA page_count") ?? 0 + let pageSize = database.queryInt("PRAGMA page_size") ?? 0 + let cacheSize = database.queryInt("PRAGMA cache_size") ?? 0 logger.log(.info, "DailyNotificationPerformanceOptimizer.TAG: Database stats: pages=\(pageCount), pageSize=\(pageSize), cacheSize=\(cacheSize)") - // Phase 1: Metrics recording not yet implemented - // TODO: Phase 2 - Implement metrics recording + // Record metrics + metrics.recordDatabaseStats(pageCount: pageCount, pageSize: pageSize, cacheSize: cacheSize) + metrics.recordDatabaseQuery() } catch { logger.log(.error, "DailyNotificationPerformanceOptimizer.TAG: Error analyzing database performance: \(error)") diff --git a/ios/Plugin/DailyNotificationStateActor.swift b/ios/Plugin/DailyNotificationStateActor.swift index 2648c4b..d2a19dc 100644 --- a/ios/Plugin/DailyNotificationStateActor.swift +++ b/ios/Plugin/DailyNotificationStateActor.swift @@ -181,9 +181,9 @@ actor DailyNotificationStateActor { * Maintain rolling window * * Phase 2: Rolling window maintenance + * Delegates to DailyNotificationRollingWindow for window maintenance */ func maintainRollingWindow() { - // TODO: Phase 2 - Implement rolling window maintenance rollingWindow?.maintainRollingWindow() } @@ -198,13 +198,11 @@ actor DailyNotificationStateActor { * @return true if content is fresh */ func validateContentFreshness(_ content: NotificationContent) -> Bool { - // TODO: Phase 2 - Implement TTL validation guard let ttlEnforcer = ttlEnforcer else { - return true // No TTL enforcement in Phase 1 + return true // No TTL enforcement if enforcer not available } - // TODO: Call ttlEnforcer.validateBeforeArming(content) - return true + return ttlEnforcer.validateBeforeArming(content) } }