// Mprintf2 is like fmt.Printf but implements some additional formatting options // that are useful for constructing SQL statements. // (See http://sqlite.org/c3ref/mprintf.html) func Mprintf2(format string, arg1, arg2 string) string { cf := C.CString(format) defer C.free(unsafe.Pointer(cf)) ca1 := C.CString(arg1) defer C.free(unsafe.Pointer(ca1)) ca2 := C.CString(arg2) defer C.free(unsafe.Pointer(ca2)) zSQL := C.my_mprintf2(cf, ca1, ca2) defer C.sqlite3_free(unsafe.Pointer(zSQL)) return C.GoString(zSQL) }
// LoadExtension loads an extension // (See http://sqlite.org/c3ref/load_extension.html) func (c *Conn) LoadExtension(file string, proc ...string) error { cfile := C.CString(file) defer C.free(unsafe.Pointer(cfile)) var cproc *C.char if len(proc) > 0 { cproc = C.CString(proc[0]) defer C.free(unsafe.Pointer(cproc)) } var errMsg *C.char rv := C.sqlite3_load_extension(c.db, cfile, cproc, &errMsg) if rv != C.SQLITE_OK { defer C.sqlite3_free(unsafe.Pointer(errMsg)) return c.error(rv, C.GoString(errMsg)) } return nil }
// Mprintf is like fmt.Printf but implements some additional formatting options // that are useful for constructing SQL statements. // (See http://sqlite.org/c3ref/mprintf.html) func Mprintf(format string, arg string) string { zSQL := mPrintf(format, arg) defer C.sqlite3_free(unsafe.Pointer(zSQL)) return C.GoString(zSQL) }