From 030ff273473f0a5620ba276a370e5119f57179df Mon Sep 17 00:00:00 2001 From: Niall Sheridan Date: Mon, 8 Aug 2016 23:39:46 +0100 Subject: SQLite DB support --- vendor/github.com/mattn/go-sqlite3/backup.go | 74 ++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 vendor/github.com/mattn/go-sqlite3/backup.go (limited to 'vendor/github.com/mattn/go-sqlite3/backup.go') diff --git a/vendor/github.com/mattn/go-sqlite3/backup.go b/vendor/github.com/mattn/go-sqlite3/backup.go new file mode 100644 index 0000000..4c1e38c --- /dev/null +++ b/vendor/github.com/mattn/go-sqlite3/backup.go @@ -0,0 +1,74 @@ +// Copyright (C) 2014 Yasuhiro Matsumoto . +// +// Use of this source code is governed by an MIT-style +// license that can be found in the LICENSE file. + +package sqlite3 + +/* +#ifndef USE_LIBSQLITE3 +#include +#else +#include +#endif +#include +*/ +import "C" +import ( + "runtime" + "unsafe" +) + +type SQLiteBackup struct { + b *C.sqlite3_backup +} + +func (c *SQLiteConn) Backup(dest string, conn *SQLiteConn, src string) (*SQLiteBackup, error) { + destptr := C.CString(dest) + defer C.free(unsafe.Pointer(destptr)) + srcptr := C.CString(src) + defer C.free(unsafe.Pointer(srcptr)) + + if b := C.sqlite3_backup_init(c.db, destptr, conn.db, srcptr); b != nil { + bb := &SQLiteBackup{b: b} + runtime.SetFinalizer(bb, (*SQLiteBackup).Finish) + return bb, nil + } + return nil, c.lastError() +} + +// Backs up for one step. Calls the underlying `sqlite3_backup_step` function. +// This function returns a boolean indicating if the backup is done and +// an error signalling any other error. Done is returned if the underlying C +// function returns SQLITE_DONE (Code 101) +func (b *SQLiteBackup) Step(p int) (bool, error) { + ret := C.sqlite3_backup_step(b.b, C.int(p)) + if ret == C.SQLITE_DONE { + return true, nil + } else if ret != 0 && ret != C.SQLITE_LOCKED && ret != C.SQLITE_BUSY { + return false, Error{Code: ErrNo(ret)} + } + return false, nil +} + +func (b *SQLiteBackup) Remaining() int { + return int(C.sqlite3_backup_remaining(b.b)) +} + +func (b *SQLiteBackup) PageCount() int { + return int(C.sqlite3_backup_pagecount(b.b)) +} + +func (b *SQLiteBackup) Finish() error { + return b.Close() +} + +func (b *SQLiteBackup) Close() error { + ret := C.sqlite3_backup_finish(b.b) + if ret != 0 { + return Error{Code: ErrNo(ret)} + } + b.b = nil + runtime.SetFinalizer(b, nil) + return nil +} -- cgit v1.2.3