aboutsummaryrefslogtreecommitdiff
path: root/sqlite3.go
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2017-08-30 19:37:57 +0900
committerYasuhiro Matsumoto <mattn.jp@gmail.com>2017-08-30 19:37:57 +0900
commit8d81c2f1f8f4b00b487c668bb8c9df5daa112900 (patch)
tree8ee1b97a63a96c55f482b9a2a85d092c52488cb3 /sqlite3.go
parentfix race (diff)
downloadgolite-8d81c2f1f8f4b00b487c668bb8c9df5daa112900.tar.gz
golite-8d81c2f1f8f4b00b487c668bb8c9df5daa112900.tar.xz
fix race
Diffstat (limited to 'sqlite3.go')
-rw-r--r--sqlite3.go20
1 files changed, 10 insertions, 10 deletions
diff --git a/sqlite3.go b/sqlite3.go
index c345727..42a2e18 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -1018,10 +1018,7 @@ func (rc *SQLiteRows) Columns() []string {
return rc.cols
}
-// DeclTypes return column types.
-func (rc *SQLiteRows) DeclTypes() []string {
- rc.s.mu.Lock()
- defer rc.s.mu.Unlock()
+func (rc *SQLiteRows) declTypes() []string {
if rc.s.s != nil && rc.decltype == nil {
rc.decltype = make([]string, rc.nc)
for i := 0; i < rc.nc; i++ {
@@ -1031,19 +1028,25 @@ func (rc *SQLiteRows) DeclTypes() []string {
return rc.decltype
}
+// DeclTypes return column types.
+func (rc *SQLiteRows) DeclTypes() []string {
+ rc.s.mu.Lock()
+ defer rc.s.mu.Unlock()
+ return rc.declTypes()
+}
+
// Next move cursor to next.
func (rc *SQLiteRows) Next(dest []driver.Value) error {
if rc.s.closed {
return io.EOF
}
rc.s.mu.Lock()
+ defer rc.s.mu.Unlock()
rv := C.sqlite3_step(rc.s.s)
if rv == C.SQLITE_DONE {
- rc.s.mu.Unlock()
return io.EOF
}
if rv != C.SQLITE_ROW {
- defer rc.s.mu.Unlock()
rv = C.sqlite3_reset(rc.s.s)
if rv != C.SQLITE_OK {
return rc.s.c.lastError()
@@ -1051,10 +1054,7 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
return nil
}
- rc.DeclTypes()
-
- rc.s.mu.Lock()
- defer rc.s.mu.Unlock()
+ rc.declTypes()
for i := range dest {
switch C.sqlite3_column_type(rc.s.s, C.int(i)) {