import Foundation import SQLite3 class DatabaseConfig { private var currentDatabasePath: String = "/Users/accusys/markbase/data/users/warren.sqlite" func getCurrentDatabasePath() -> String { return currentDatabasePath } func setDatabasePath(_ path: String) { currentDatabasePath = path } func validateDatabase(path: String) -> Bool { let fileManager = FileManager.default if !fileManager.fileExists(atPath: path) { print("Database file not found: \(path)") return false } var db: OpaquePointer? let result = sqlite3_open(path, &db) if result != SQLITE_OK { print("Failed to open database: \(path)") return false } var statement: OpaquePointer? let query = "SELECT name FROM sqlite_master WHERE type='table' AND name='file_nodes'" if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK { if sqlite3_step(statement) == SQLITE_ROW { sqlite3_finalize(statement) sqlite3_close(db) print("Database validated: \(path)") return true } } sqlite3_finalize(statement) sqlite3_close(db) print("Database validation failed: file_nodes table not found") return false } func getNodeCount() -> Int { var db: OpaquePointer? let result = sqlite3_open(currentDatabasePath, &db) if result != SQLITE_OK { print("Failed to open database for node count") return 0 } var statement: OpaquePointer? let query = "SELECT COUNT(*) FROM file_nodes" var count: Int = 0 if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK { if sqlite3_step(statement) == SQLITE_ROW { count = Int(sqlite3_column_int64(statement, 0)) } } sqlite3_finalize(statement) sqlite3_close(db) return count } func checkIntegrity() -> Bool { var db: OpaquePointer? let result = sqlite3_open(currentDatabasePath, &db) if result != SQLITE_OK { return false } var statement: OpaquePointer? let query = "PRAGMA integrity_check" if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK { if sqlite3_step(statement) == SQLITE_ROW { let text = String(cString: sqlite3_column_text(statement, 0)) sqlite3_finalize(statement) sqlite3_close(db) return text == "ok" } } sqlite3_finalize(statement) sqlite3_close(db) return false } }