diff options
author | A.N <gimpldo@gmail.com> | 2016-09-06 18:12:10 +0300 |
---|---|---|
committer | Yasuhiro Matsumoto <mattn.jp@gmail.com> | 2016-09-07 23:48:17 +0900 |
commit | 911ebeea74fd09a8460324b652071b6bd3f99391 (patch) | |
tree | 572d4a783d9238388c0d243da3a58e1efa8b74df | |
parent | Provide access to sqlite3_trace_v2(). (diff) | |
download | golite-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.
-rw-r--r-- | tracecallback.go | 17 |
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) |