Method: SQLite3::Backup#initialize
- Defined in:
- ext/sqlite3/backup.c
#SQLite3::Backup.new(dstdb, dstname, srcdb, srcname) ⇒ Object
Initialize backup the backup.
dstdb:
the destination SQLite3::Database object.
dstname:
the destination's database name.
srcdb:
the source SQLite3::Database object.
srcname:
the source's database name.
The database name is “main”, “temp”, or the name specified in an ATTACH statement.
This feature requires SQLite 3.6.11 or later.
require 'sqlite3'
sdb = SQLite3::Database.new('src.sqlite3')
ddb = SQLite3::Database.new(':memory:')
b = SQLite3::Backup.new(ddb, 'main', sdb, 'main')
p [b.remaining, b.pagecount] # invalid value; for example [0, 0]
begin
p b.step(1) #=> OK or DONE
p [b.remaining, b.pagecount]
end while b.remaining > 0
b.finish
ddb = SQLite3::Database.new(':memory:')
b = SQLite3::Backup.new(ddb, 'main', sdb, 'main')
b.step(-1) #=> DONE
b.finish
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'ext/sqlite3/backup.c', line 74
static VALUE
initialize(VALUE self, VALUE dstdb, VALUE dstname, VALUE srcdb, VALUE srcname)
{
sqlite3BackupRubyPtr ctx;
sqlite3RubyPtr ddb_ctx, sdb_ctx;
sqlite3_backup *pBackup;
TypedData_Get_Struct(self, sqlite3BackupRuby, &backup_type, ctx);
ddb_ctx = sqlite3_database_unwrap(dstdb);
sdb_ctx = sqlite3_database_unwrap(srcdb);
if (!sdb_ctx->db) {
rb_raise(rb_eArgError, "cannot backup from a closed database");
}
if (!ddb_ctx->db) {
rb_raise(rb_eArgError, "cannot backup to a closed database");
}
pBackup = sqlite3_backup_init(ddb_ctx->db, StringValuePtr(dstname),
sdb_ctx->db, StringValuePtr(srcname));
if (pBackup) {
ctx->p = pBackup;
} else {
CHECK(ddb_ctx->db, sqlite3_errcode(ddb_ctx->db));
}
return self;
}
|