// Close closes a database connection and any dangling statements. // (See http://sqlite.org/c3ref/close.html) func (c *Conn) Close() error { if c == nil { return errors.New("nil sqlite database") } if c.db == nil { return nil } c.stmtCache.flush() // Dangling statements stmt := C.sqlite3_next_stmt(c.db, nil) for stmt != nil { if C.sqlite3_stmt_busy(stmt) != 0 { Log(C.SQLITE_MISUSE, "Dangling statement (not reset): \""+C.GoString(C.sqlite3_sql(stmt))+"\"") } else { Log(C.SQLITE_MISUSE, "Dangling statement (not finalize): \""+C.GoString(C.sqlite3_sql(stmt))+"\"") } C.sqlite3_finalize(stmt) stmt = C.sqlite3_next_stmt(c.db, nil) } rv := C.sqlite3_close(c.db) if rv != C.SQLITE_OK { Log(int(rv), "error while closing Conn") return c.error(rv, "Conn.Close") } c.db = nil return nil }
func (self *sqlStatement) sqlSql() string { cp := C.sqlite3_sql(self.handle) if cp == nil { // The call shouldn't fail unless we forgot to // use sqlite3_prepare_v2()... sqlPanic("can't get SQL statement") } return C.GoString(cp) }
// SQL returns the SQL associated with a prepared statement. // (See http://sqlite.org/c3ref/sql.html) func (s *Stmt) SQL() string { if s.sql == "" { s.sql = C.GoString(C.sqlite3_sql(s.stmt)) } return s.sql }
func (s *Statement) SQLSource() (sql string) { if s.cptr != nil { sql = C.GoString(C.sqlite3_sql(s.cptr)) } return }