aboutsummaryrefslogtreecommitdiff
path: root/sqlite3_load_extension.go
diff options
context:
space:
mode:
Diffstat (limited to 'sqlite3_load_extension.go')
-rw-r--r--sqlite3_load_extension.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/sqlite3_load_extension.go b/sqlite3_load_extension.go
index 0251016..bb7e25f 100644
--- a/sqlite3_load_extension.go
+++ b/sqlite3_load_extension.go
@@ -7,7 +7,11 @@
package sqlite3
/*
+#ifndef USE_LIBSQLITE3
#include <sqlite3-binding.h>
+#else
+#include <sqlite3.h>
+#endif
#include <stdlib.h>
*/
import "C"
@@ -27,6 +31,7 @@ func (c *SQLiteConn) loadExtensions(extensions []string) error {
defer C.free(unsafe.Pointer(cext))
rv = C.sqlite3_load_extension(c.db, cext, nil, nil)
if rv != C.SQLITE_OK {
+ C.sqlite3_enable_load_extension(c.db, 0)
return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
}
}
@@ -37,3 +42,28 @@ func (c *SQLiteConn) loadExtensions(extensions []string) error {
}
return nil
}
+
+// LoadExtension load the sqlite3 extension.
+func (c *SQLiteConn) LoadExtension(lib string, entry string) error {
+ rv := C.sqlite3_enable_load_extension(c.db, 1)
+ if rv != C.SQLITE_OK {
+ return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
+ }
+
+ clib := C.CString(lib)
+ defer C.free(unsafe.Pointer(clib))
+ centry := C.CString(entry)
+ defer C.free(unsafe.Pointer(centry))
+
+ rv = C.sqlite3_load_extension(c.db, clib, centry, nil)
+ if rv != C.SQLITE_OK {
+ return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
+ }
+
+ rv = C.sqlite3_enable_load_extension(c.db, 0)
+ if rv != C.SQLITE_OK {
+ return errors.New(C.GoString(C.sqlite3_errmsg(c.db)))
+ }
+
+ return nil
+}