aboutsummaryrefslogtreecommitdiff
path: root/tracecallback.go
diff options
context:
space:
mode:
authorA.N <gimpldo@gmail.com>2016-09-06 18:12:10 +0300
committerYasuhiro Matsumoto <mattn.jp@gmail.com>2016-09-07 23:48:17 +0900
commit911ebeea74fd09a8460324b652071b6bd3f99391 (patch)
tree572d4a783d9238388c0d243da3a58e1efa8b74df /tracecallback.go
parentProvide access to sqlite3_trace_v2(). (diff)
downloadgolite-911ebeea74fd09a8460324b652071b6bd3f99391.tar.gz
golite-911ebeea74fd09a8460324b652071b6bd3f99391.tar.xz
TraceInfo: fix RunTimeNanosec retrieval, add AutoCommit
Also change type of EventCode to uint32 so adding AutoCommit is "free" = does not enlarge the TraceInfo struct. 32 bits are more than enough, since only 4 (four) are used now.
Diffstat (limited to 'tracecallback.go')
-rw-r--r--tracecallback.go17
1 files changed, 14 insertions, 3 deletions
diff --git a/tracecallback.go b/tracecallback.go
index 8ecfae9..2091058 100644
--- a/tracecallback.go
+++ b/tracecallback.go
@@ -33,7 +33,11 @@ const (
)
type TraceInfo struct {
- EventCode uint
+ // Pack together the shorter fields, to keep the struct smaller.
+ // On a 64-bit machine there would be padding
+ // between EventCode and ConnHandle; having AutoCommit here is "free":
+ EventCode uint32
+ AutoCommit bool
ConnHandle uintptr
// Usually filled, unless EventCode = TraceClose = SQLITE_TRACE_CLOSE:
@@ -122,7 +126,8 @@ func traceCallbackTrampoline(
var info TraceInfo
- info.EventCode = traceEventCode
+ info.EventCode = uint32(traceEventCode)
+ info.AutoCommit = (int(C.sqlite3_get_autocommit(contextDB)) != 0)
info.ConnHandle = connHandle
switch traceEventCode {
@@ -146,7 +151,13 @@ func traceCallbackTrampoline(
case TraceProfile:
info.StmtHandle = uintptr(p)
- info.RunTimeNanosec = int64(uintptr(xValue))
+
+ if xValue == nil {
+ panic("NULL pointer in X arg of trace_v2 callback for SQLITE_TRACE_PROFILE event")
+ }
+
+ info.RunTimeNanosec = *(*int64)(xValue)
+
// sample the error //TODO: is it safe? is it useful?
fillDBError(&info.DBError, contextDB)