60
60
61
61
function Base. close {T} (db:: SQLiteDB{T} )
62
62
db. handle == C_NULL && return
63
+ # ensure SQLiteStmts are finalised
64
+ gc ()
63
65
@CHECK db sqlite3_close (db. handle)
64
66
db. handle = C_NULL
65
67
return
@@ -80,6 +82,7 @@ function SQLiteStmt{T}(db::SQLiteDB{T},sql::String)
80
82
handle = [C_NULL ]
81
83
sqliteprepare (db,sql,handle,[C_NULL ])
82
84
stmt = SQLiteStmt (db,handle[1 ],convert (T,sql))
85
+ finalizer (stmt, close)
83
86
return stmt
84
87
end
85
88
128
131
function execute (db:: SQLiteDB ,sql:: String )
129
132
stmt = SQLiteStmt (db,sql)
130
133
execute (stmt)
131
- close (stmt)
132
134
return changes (db)
133
135
end
134
136
@@ -139,7 +141,6 @@ function query(db::SQLiteDB,sql::String)
139
141
status = execute (stmt)
140
142
ncols = sqlite3_column_count (stmt. handle)
141
143
if status == SQLITE_DONE || ncols == 0
142
- close (stmt)
143
144
return changes (db)
144
145
end
145
146
colnames = Array (String,ncols)
@@ -171,7 +172,6 @@ function query(db::SQLiteDB,sql::String)
171
172
end
172
173
status = sqlite3_step (stmt. handle)
173
174
end
174
- close (stmt)
175
175
if status == SQLITE_DONE
176
176
return ResultSet (colnames, results)
177
177
else
@@ -274,7 +274,6 @@ function create(db::SQLiteDB,name::String,table,
274
274
end
275
275
execute (stmt)
276
276
end
277
- close (stmt)
278
277
end
279
278
execute (db," analyze $name " )
280
279
return changes (db)
@@ -303,7 +302,6 @@ function append(db::SQLiteDB,name::String,table)
303
302
end
304
303
execute (stmt)
305
304
end
306
- close (stmt)
307
305
end
308
306
execute (db," analyze $name " )
309
307
return return changes (db)
0 commit comments