diff options
author | Yasuhiro Matsumoto <mattn.jp@gmail.com> | 2017-08-30 19:37:57 +0900 |
---|---|---|
committer | Yasuhiro Matsumoto <mattn.jp@gmail.com> | 2017-08-30 19:37:57 +0900 |
commit | 8d81c2f1f8f4b00b487c668bb8c9df5daa112900 (patch) | |
tree | 8ee1b97a63a96c55f482b9a2a85d092c52488cb3 /sqlite3.go | |
parent | fix race (diff) | |
download | golite-8d81c2f1f8f4b00b487c668bb8c9df5daa112900.tar.gz golite-8d81c2f1f8f4b00b487c668bb8c9df5daa112900.tar.xz |
fix race
Diffstat (limited to 'sqlite3.go')
-rw-r--r-- | sqlite3.go | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -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)) { |