aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
| * Renamed build option `trace`Gert-Jan Timmer2018-05-242-2/+2
| |
| * Update: READMEGert-Jan Timmer2018-05-241-0/+1
| | | | | | Add documentation to feature table for tag `trace`
| * Update: Travis CIGert-Jan Timmer2018-05-241-1/+12
| |
| * Update: READMEGert-Jan Timmer2018-05-241-11/+11
| | | | | | Fix: New build tag(s) names
| * Update prefix of build tags to `sqlite_`Gert-Jan Timmer2018-05-245-5/+5
| | | | | | | | * Keep current build tags backwards compliant * Added alias for `sqlite_json1` => `sqlite_json`
| * Update build tags with prefix `sqlite_`Gert-Jan Timmer2018-05-248-8/+8
| |
| * Merge branch 'master' into update/optionsGert-Jan Timmer2018-05-242-10/+141
| |\ | |/ |/|
* | Merge pull request #562 from GJRTimmer/fix/travis-cimattn2018-05-241-10/+138
|\ \ | | | | | | Update Travis CI
| * | Add: EOLGert-Jan Timmer2018-05-241-1/+1
| | |
| * | Update Travis CIGert-Jan Timmer2018-05-231-10/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add: OSX Add: Windows Cross-Compile Add: Golang: 1.10.x Exclusions: - Golang: 1.7 from OSX - Golang: Master does not cause build failure - Tests for Windows Cross-Platform
* | | Merge pull request #565 from GJRTimmer/fix/walmattn2018-05-241-0/+1
|\ \ \ | | | | | | | | ADD: SQLITE_DEFAULT_WAL_SYNCHRONOUS
| * \ \ Merge branch 'master' into fix/walmattn2018-05-241-0/+2
| |\ \ \ | |/ / / |/| | |
* | | | Merge pull request #564 from GJRTimmer/fix/213mattn2018-05-241-0/+1
|\ \ \ \ | | | | | | | | | | Fix #213
| * | | | ADD: SQLITE_ENABLE_UPDATE_DELETE_LIMITGert-Jan Timmer2018-05-231-0/+1
| | |/ / | |/| | | | | | Fixes #213
* | | | Merge pull request #566 from GJRTimmer/fix/deprecatedmattn2018-05-241-0/+1
|\ \ \ \ | |/ / / |/| | | ADD: SQLITE_OMIT_DEPRECATED
| * | | ADD: SQLITE_OMIT_DEPRECATEDGert-Jan Timmer2018-05-231-0/+1
|/ / /
| * / ADD: SQLITE_DEFAULT_WAL_SYNCHRONOUSGert-Jan Timmer2018-05-231-0/+1
|/ /
| * Update: READMEGert-Jan Timmer2018-05-231-24/+51
| | | | | | | | | | | | Add: Feature Table Add: Links Add: TOC Fix: References for TOC
| * Add: SQLITE_DEFAULT_AUTOVACUUMGert-Jan Timmer2018-05-232-0/+26
| |
| * Add: SQLITE_ENABLE_STAT4Gert-Jan Timmer2018-05-231-0/+13
| |
| * Add: SQLITE_SECURE_DELETEGert-Jan Timmer2018-05-231-0/+13
| |
| * Add: SQLITE_INTROSPECTION_PRAGMASGert-Jan Timmer2018-05-231-0/+13
| |
| * Add: SQLITE_DEFAULT_FOREIGN_KEYSGert-Jan Timmer2018-05-231-0/+13
| |
| * Add: SQLITE_ENABLE_API_ARMORGert-Jan Timmer2018-05-231-0/+14
| |
| * Add: SQLITE_ALLOW_URI_AUTHORITYGert-Jan Timmer2018-05-231-0/+13
| |
| * RenameGert-Jan Timmer2018-05-236-0/+0
|/ | | Renamed files containing current features.
* Merge pull request #540 from mattn/open-modemattn2018-04-191-3/+16
|\ | | | | add _mutex flag to specify SQLITE_OPEN_NOMUTEX or SQLITE_OPEN_FULLMUTEX
| * add _mutex flag to specify SQLITE_OPEN_NOMUTEX or SQLITE_OPEN_FULLMUTEXYasuhiro Matsumoto2018-03-161-3/+16
| |
* | Merge pull request #552 from mattn/disable-pread64-androidmattn2018-04-181-1/+1
|\ \ | | | | | | disable pread64/pwrite64 on android
| * | disable pread64/pwrite64 on androidYasuhiro Matsumoto2018-04-181-1/+1
|/ /
* | Merge pull request #550 from mattn/upgrade-3.23.1mattn2018-04-172-1278/+1409
|\ \ | | | | | | bump sqlite3 3.23.1
| * | bump sqlite3 3.23.1Yasuhiro Matsumoto2018-04-172-1278/+1409
|/ /
* | Merge pull request #549 from mjtrangoni/fix-linter-issuesmattn2018-04-172-16/+19
|\ \ | | | | | | Fix linter issues
| * | fix small codespell issueMario Trangoni2018-04-171-1/+1
| | |
| * | fix all goconst issuesMario Trangoni2018-04-171-2/+8
| | |
| * | fix all gosimple issuesMario Trangoni2018-04-171-6/+3
| | |
| * | fix all unconvert issuesMario Trangoni2018-04-171-7/+7
| | |
* | | Merge pull request #546 from mattn/upgrade-3.23mattn2018-04-043-922/+3472
|\ \ \ | |_|/ |/| | bump sqlite 3.23.0
| * | bump sqlite 3.23.0Yasuhiro Matsumoto2018-04-043-922/+3472
|/ / | | | | | | closes #545
* | Merge pull request #536 from ifraixedes/if-update-readmemattn2018-03-071-1/+1
|\ \ | | | | | | README: Update list issues concurrent read/writes
| * | README: Update list issues concurrent read/writesIvan Fraixedes2018-02-241-1/+1
|/ / | | | | | | | | | | | | Update the README FAQ section adding one issues more to the list of the issues related with the concurrent reads and writes. This new added issues gives a lot of insights, much more than the ones which where already present.
* | Merge pull request #530 from navytux/y/no-go-if-notneededmattn2018-02-181-19/+23
|\ \ | | | | | | Don't spawn interrupt goroutine if we know that context cannot be canceled
| * | Don't spawn interrupt goroutine if we know that context cannot be canceledKirill Smelkov2018-02-171-19/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For a Go-only project the following code pattern go func() { select { case <-ctx.Done(): // call some cancel case <-done: // work finished ok } }() // do some work close(done) works good and fast - without high scheduling overhead because scheduler usually puts spawned goroutine into run queue on the same OS thread and so after done is closed control is passed to spawned goroutine without OS context switch. However in the presence of Cgo calls in "do some work" the situation can become different - Cgo calls are treated by go runtime similarly to system calls with the effect that goroutines spawned on original OS thread tend to be migrated by scheduler to be executed on another OS thread. This in turn can bring high overhead for communicating on "done", which ultimately can result in full context switch: if the spawned goroutine had chance to run, already checked done and ctx to be not ready, and went into sleep via wait on futex - showing as something like below in strace for one read query (note futex calls): 27867 00:38:39.782146 stat(".../neo.sqlite-journal", 0x7f83809c4a20) = -1 ENOENT (No such file or directory) 27867 00:38:39.782165 pread64(3, "\0\0\0\33\0\0\10\235\0\0\10]\0\0\0\27", 16, 24) = 16 27871 00:38:39.782179 <... pselect6 resumed> ) = 0 (Timeout) 27868 00:38:39.782187 <... pselect6 resumed> ) = 0 (Timeout) 27871 00:38:39.782193 futex(0xc4200f8538, FUTEX_WAIT, 0, NULL <unfinished ...> 27868 00:38:39.782199 futex(0xc420013138, FUTEX_WAIT, 0, NULL <unfinished ...> 27867 00:38:39.782205 stat(".../neo.sqlite-wal", 0x7f83809c4a20) = -1 ENOENT (No such file or directory) 27867 00:38:39.782224 fstat(3, {st_mode=S_IFREG|0644, st_size=9031680, ...}) = 0 27867 00:38:39.782247 futex(0xc420013138, FUTEX_WAKE, 1 <unfinished ...> 27868 00:38:39.782259 <... futex resumed> ) = 0 27867 00:38:39.782265 <... futex resumed> ) = 1 27868 00:38:39.782270 pselect6(0, NULL, NULL, NULL, {tv_sec=0, tv_nsec=3000}, NULL <unfinished ...> 27867 00:38:39.782279 fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0 27867 00:38:39.782315 fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0 27868 00:38:39.782336 <... pselect6 resumed> ) = 0 (Timeout) 27867 00:38:39.782342 fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510} <unfinished ...> 27868 00:38:39.782348 futex(0xc4200f8538, FUTEX_WAKE, 1 <unfinished ...> 27867 00:38:39.782355 <... fcntl resumed> ) = 0 27871 00:38:39.782360 <... futex resumed> ) = 0 27868 00:38:39.782367 <... futex resumed> ) = 1 27871 00:38:39.782372 futex(0xc4200f8138, FUTEX_WAKE, 1 <unfinished ...> 27868 00:38:39.782377 pselect6(0, NULL, NULL, NULL, {tv_sec=0, tv_nsec=3000}, NULL <unfinished ...> 27871 00:38:39.782384 <... futex resumed> ) = 1 27870 00:38:39.782389 <... futex resumed> ) = 0 27867 00:38:39.782394 fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1} <unfinished ...> 27870 00:38:39.782400 pselect6(0, NULL, NULL, NULL, {tv_sec=0, tv_nsec=3000}, NULL <unfinished ...> 27867 00:38:39.782408 <... fcntl resumed> ) = 0 Below link shows that go scheduler itself might be significantly improved for cases when there are several Cgo calls made for a request in a server: https://github.com/golang/go/issues/21827#issuecomment-329092317 in particular CGo-4 case should be closely related to this sqlite3 go package, because for one query many CGo calls are made to SQLite. However until there are proper scheduler fixes, let's make what could be made to improve time to do queries: If we know that the context under which a query is executed will never be canceled - we know we can safely skip spawning the interrupt goroutine and this was avoid ping-pong on done in between different OS threads. This brings the following speedup on my notebook with go1.10: name old req/s new req/s delta Exec 254k ± 1% 379k ± 1% +48.89% (p=0.000 n=10+10) Query 90.6k ± 2% 96.4k ± 1% +6.37% (p=0.000 n=10+10) Params 81.5k ± 1% 87.0k ± 1% +6.83% (p=0.000 n=10+10) Stmt 122k ± 2% 129k ± 1% +6.07% (p=0.000 n=10+9) Rows 2.98k ± 1% 3.06k ± 1% +2.77% (p=0.000 n=9+10) StmtRows 3.10k ± 1% 3.13k ± 1% +1.12% (p=0.000 n=9+10) name old time/op new time/op delta CustomFunctions-4 10.6µs ± 1% 10.1µs ± 1% -5.01% (p=0.000 n=10+10)
* | | Merge pull request #534 from basvanbeek/mastermattn2018-02-181-1/+2
|\ \ \ | | | | | | | | only enable pread/pwrite for linux. fixes #533 and fixes #532
| * | | only enable pread/pwrite for linux. fixes #533 and fixes #532Bas van Beek2018-02-171-1/+2
|/ / /
* | | Merge pull request #531 from navytux/y/preadwritemattn2018-02-171-1/+1
|\ \ \ | |/ / |/| | Let SQLite use pread/pwrite
| * | Let SQLite use pread/pwriteKirill Smelkov2018-02-161-1/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With current settings SQLite was using lseek/read syscalls to read data, e.g.: 20:43:17.640660 fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0 20:43:17.640683 fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0 20:43:17.640705 fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0 20:43:17.640725 fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0 20:43:17.640744 stat(".../neo.sqlite-journal", 0x7ffef2c91080) = -1 ENOENT (No such file or directory) 20:43:17.640764 lseek(3, 24, SEEK_SET) = 24 20:43:17.640779 read(3, "\0\0\0\33\0\0\10\235\0\0\10]\0\0\0\27", 16) = 16 20:43:17.640795 stat(".../neo.sqlite-wal", 0x7ffef2c91080) = -1 ENOENT (No such file or directory) but if we allow it to use pread it will be only 1 system call instead of 2 and reading this way can also be done in parallel because there is no global to file seeking: 20:48:42.668466 fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0 20:48:42.668501 fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0 20:48:42.668522 fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0 20:48:42.668542 fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0 20:48:42.668561 stat(".../neo.sqlite-journal", 0x7ffdbc1f22c0) = -1 ENOENT (No such file or directory) 20:48:42.668580 pread64(3, "\0\0\0\33\0\0\10\235\0\0\10]\0\0\0\27", 16, 24) = 16 20:48:42.668597 stat(".../neo.sqlite-wal", 0x7ffdbc1f22c0) = -1 ENOENT (No such file or directory) (if needed this enablement can be done per OS)
* | Merge pull request #527 from mattn/sqlite-amalgamation-3220000mattn2018-02-074-3194/+5559
|\ \ | | | | | | bump sqlite 3.22.0
| * | bump sqlite 3.22.0Yasuhiro Matsumoto2018-02-074-3194/+5559
| | | | | | | | | | | | closes #526
* | | Merge pull request #525 from mattn/add-usleepmattn2018-02-071-1/+1
|\| | | | | | | | add -DHAVE_USLEEP=1