Skip to content

Commit 50bd15a

Browse files
Retain Database (#12)
retain database
1 parent fc4d2f4 commit 50bd15a

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

Sources/SQLyra/Database.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,6 @@ public final class Database: DatabaseHandle {
133133
public func prepare(_ sql: String) throws -> PreparedStatement {
134134
var stmt: OpaquePointer!
135135
try check(sqlite3_prepare_v2(db, sql, -1, &stmt, nil))
136-
return PreparedStatement(stmt: stmt)
136+
return PreparedStatement(stmt: stmt, database: self)
137137
}
138138
}

Sources/SQLyra/PreparedStatement.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import SQLite3
77
/// Or, in other words, these routines are constructors for the prepared statement object.
88
public final class PreparedStatement: DatabaseHandle {
99
let stmt: OpaquePointer
10+
let database: Database // release database after all statements
1011

1112
/// Find the database handle of a prepared statement.
1213
var db: OpaquePointer! { sqlite3_db_handle(stmt) }
@@ -17,8 +18,9 @@ public final class PreparedStatement: DatabaseHandle {
1718
}
1819
)
1920

20-
init(stmt: OpaquePointer) {
21+
init(stmt: OpaquePointer, database: Database) {
2122
self.stmt = stmt
23+
self.database = database
2224
}
2325

2426
deinit {

Tests/SQLyraTests/PreparedStatementTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,18 @@ struct PreparedStatementTests {
114114
"""
115115
#expect(df.description == expected + "\n")
116116
}
117+
118+
@Test static func retainDatabase() throws {
119+
weak var db: Database?
120+
var statement: PreparedStatement?
121+
do {
122+
let suite = try PreparedStatementTests()
123+
db = suite.db
124+
statement = try suite.db.prepare("SELECT * FROM contacts;")
125+
}
126+
try #require(statement != nil)
127+
#expect(db != nil)
128+
statement = nil
129+
#expect(db == nil)
130+
}
117131
}

0 commit comments

Comments
 (0)