Commit 3dd0fe33 authored by gwenn's avatar gwenn

Add support to SQLITE_CONFIG_LOG.

parent 412216e2
......@@ -43,6 +43,16 @@ static void goSqlite3ProgressHandler(sqlite3 *db, int numOps, void *udp) {
static void my_log(int iErrCode, char *msg) {
sqlite3_log(iErrCode, msg);
}
extern void goXLog(void *udp, int err, const char *msg);
static int goSqlite3ConfigLog(void *udp) {
if (udp) {
return sqlite3_config(SQLITE_CONFIG_LOG, goXLog, udp);
} else {
return sqlite3_config(SQLITE_CONFIG_LOG, NULL, NULL);
}
}
*/
import "C"
......@@ -267,6 +277,36 @@ func Log(err /*Errno*/ int, msg string) {
C.my_log(C.int(err), cs)
}
// TODO sqlite3_config(SQLITE_CONFIG_LOG,...)
// #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
// The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a function with a call signature of void(*)(void*,int,const char*), and a pointer to void.
type Logger func(udp interface{}, err error, msg string)
type sqliteLogger struct {
f Logger
udp interface{}
}
//export goXLog
func goXLog(udp unsafe.Pointer, err C.int, msg *C.char) {
arg := (*sqliteLogger)(udp)
arg.f(arg.udp, Errno(err), C.GoString(msg))
return
}
var logger *sqliteLogger
// Calls sqlite3_config(SQLITE_CONFIG_LOG,...)
func ConfigLog(f Logger, udp interface{}) error {
var rv C.int
if f == nil {
logger = nil
rv = C.goSqlite3ConfigLog(nil)
} else {
// To make sure it is not gced, keep a reference.
logger = &sqliteLogger{f, udp}
rv = C.goSqlite3ConfigLog(unsafe.Pointer(logger))
}
if rv == C.SQLITE_OK {
return nil
}
return Errno(rv)
}
......@@ -6,6 +6,10 @@ import (
"testing"
)
func init() {
ConfigLog(log, "LOG")
}
func trace(d interface{}, sql string) {
//fmt.Printf("%s: %s\n", d, sql)
}
......@@ -37,6 +41,10 @@ func updateHook(d interface{}, a Action, dbName, tableName string, rowId int64)
fmt.Printf("%s: %d, %s.%s.%d\n", d, a, dbName, tableName, rowId)
}
func log(d interface{}, err error, msg string) {
fmt.Printf("%s: %s, %s\n", d, err, msg)
}
func TestNoTrace(t *testing.T) {
db, err := Open("")
if err != nil {
......@@ -67,3 +75,7 @@ func TestTrace(t *testing.T) {
db.UpdateHook(updateHook, "UPD")
db.Exists("SELECT 1 WHERE 1 = ?", 1)
}
func TestLog(t *testing.T) {
Log(0, "One message")
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment