Skip to content

Commit 1ffe29e

Browse files
committed
wip - Database#discard
- needs docs - needs tests
1 parent 6c274b4 commit 1ffe29e

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

ext/sqlite3/database.c

+26
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,31 @@ closed_p(VALUE self)
155155
return Qfalse;
156156
}
157157

158+
// TODO DOCUMENT
159+
static VALUE
160+
discard(VALUE self)
161+
{
162+
sqlite3RubyPtr ctx;
163+
sqlite3_file *sfile;
164+
int status;
165+
166+
TypedData_Get_Struct(self, sqlite3Ruby, &database_type, ctx);
167+
168+
status = sqlite3_file_control(ctx->db, NULL, SQLITE_FCNTL_FILE_POINTER, &sfile);
169+
if (status == 0 && sfile->pMethods != NULL) {
170+
sfile->pMethods->xClose(sfile);
171+
}
172+
173+
status = sqlite3_file_control(ctx->db, NULL, SQLITE_FCNTL_JOURNAL_POINTER, &sfile);
174+
if (status == 0 && sfile->pMethods != NULL) {
175+
sfile->pMethods->xClose(sfile);
176+
}
177+
178+
ctx->db = NULL;
179+
180+
return Qnil;
181+
}
182+
158183
/* call-seq: total_changes
159184
*
160185
* Returns the total number of changes made to this database instance
@@ -890,6 +915,7 @@ init_sqlite3_database(void)
890915
rb_define_method(cSqlite3Database, "collation", collation, 2);
891916
rb_define_method(cSqlite3Database, "close", sqlite3_rb_close, 0);
892917
rb_define_method(cSqlite3Database, "closed?", closed_p, 0);
918+
rb_define_method(cSqlite3Database, "discard", discard, 0);
893919
rb_define_method(cSqlite3Database, "total_changes", total_changes, 0);
894920
rb_define_method(cSqlite3Database, "trace", trace, -1);
895921
rb_define_method(cSqlite3Database, "last_insert_row_id", last_insert_row_id, 0);

0 commit comments

Comments
 (0)