summaryrefslogtreecommitdiffstats
path: root/vendor/modernc.org/sqlite/doc.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/modernc.org/sqlite/doc.go')
-rw-r--r--vendor/modernc.org/sqlite/doc.go226
1 files changed, 201 insertions, 25 deletions
diff --git a/vendor/modernc.org/sqlite/doc.go b/vendor/modernc.org/sqlite/doc.go
index 121810ce..923a8db7 100644
--- a/vendor/modernc.org/sqlite/doc.go
+++ b/vendor/modernc.org/sqlite/doc.go
@@ -8,37 +8,105 @@
// SQLite is an in-process implementation of a self-contained, serverless,
// zero-configuration, transactional SQL database engine.
//
-// Thanks
+// # Thanks
//
// This project is sponsored by Schleibinger Geräte Teubert u. Greim GmbH by
// allowing one of the maintainers to work on it also in office hours.
//
-// Supported platforms and architectures
+// # Supported platforms and architectures
//
// These combinations of GOOS and GOARCH are currently supported
//
// OS Arch SQLite version
// ------------------------------
-// darwin amd64 3.41.0
-// darwin arm64 3.41.0
-// freebsd amd64 3.41.0
-// freebsd arm64 3.41.0
-// linux 386 3.41.0
-// linux amd64 3.41.0
-// linux arm 3.41.0
-// linux arm64 3.41.0
-// linux ppc64le 3.41.0
-// linux riscv64 3.41.0
-// windows amd64 3.41.0
-// windows arm64 3.41.0
-//
-// Builders
-//
-// Builder results available at
+// darwin amd64 3.41.2
+// darwin arm64 3.41.2
+// freebsd amd64 3.41.2
+// freebsd arm64 3.41.2
+// linux 386 3.41.2
+// linux amd64 3.41.2
+// linux arm 3.41.2
+// linux arm64 3.41.2
+// linux ppc64le 3.41.2
+// linux riscv64 3.41.2
+// linux s390x 3.41.2
+// windows amd64 3.41.2
+// windows arm64 3.41.2
+//
+// # Builders
+//
+// Builder results available at:
//
// https://modern-c.appspot.com/-/builder/?importpath=modernc.org%2fsqlite
//
-// Changelog
+// # Speedtest1
+//
+// Numbers for the pure Go version were produced by
+//
+// ~/src/modernc.org/sqlite/speedtest1$ go build && ./speedtest1
+//
+// Numbers for the pure C version were produced by
+//
+// ~/src/modernc.org/sqlite/testdata/sqlite-src-3410200/test$ gcc speedtest1.c ../../sqlite-amalgamation-3410200/sqlite3.c -lpthread -ldl && ./a.out
+//
+// The results are from Go version 1.20.4 and GCC version 10.2.1 on a
+// Linux/amd64 machine, CPU: AMD Ryzen 9 3900X 12-Core Processor × 24, 128GB
+// RAM. Shown are the best of 3 runs.
+//
+// Go C
+//
+// -- Speedtest1 for SQLite 3.41.2 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69 -- Speedtest1 for SQLite 3.41.2 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69
+// 100 - 50000 INSERTs into table with no index...................... 0.071s 100 - 50000 INSERTs into table with no index...................... 0.077s
+// 110 - 50000 ordered INSERTS with one index/PK..................... 0.114s 110 - 50000 ordered INSERTS with one index/PK..................... 0.082s
+// 120 - 50000 unordered INSERTS with one index/PK................... 0.137s 120 - 50000 unordered INSERTS with one index/PK................... 0.099s
+// 130 - 25 SELECTS, numeric BETWEEN, unindexed...................... 0.083s 130 - 25 SELECTS, numeric BETWEEN, unindexed...................... 0.091s
+// 140 - 10 SELECTS, LIKE, unindexed................................. 0.210s 140 - 10 SELECTS, LIKE, unindexed................................. 0.120s
+// 142 - 10 SELECTS w/ORDER BY, unindexed............................ 0.276s 142 - 10 SELECTS w/ORDER BY, unindexed............................ 0.182s
+// 145 - 10 SELECTS w/ORDER BY and LIMIT, unindexed.................. 0.183s 145 - 10 SELECTS w/ORDER BY and LIMIT, unindexed.................. 0.099s
+// 150 - CREATE INDEX five times..................................... 0.172s 150 - CREATE INDEX five times..................................... 0.127s
+// 160 - 10000 SELECTS, numeric BETWEEN, indexed..................... 0.080s 160 - 10000 SELECTS, numeric BETWEEN, indexed..................... 0.078s
+// 161 - 10000 SELECTS, numeric BETWEEN, PK.......................... 0.080s 161 - 10000 SELECTS, numeric BETWEEN, PK.......................... 0.078s
+// 170 - 10000 SELECTS, text BETWEEN, indexed........................ 0.187s 170 - 10000 SELECTS, text BETWEEN, indexed........................ 0.169s
+// 180 - 50000 INSERTS with three indexes............................ 0.196s 180 - 50000 INSERTS with three indexes............................ 0.154s
+// 190 - DELETE and REFILL one table................................. 0.200s 190 - DELETE and REFILL one table................................. 0.155s
+// 200 - VACUUM...................................................... 0.180s 200 - VACUUM...................................................... 0.142s
+// 210 - ALTER TABLE ADD COLUMN, and query........................... 0.004s 210 - ALTER TABLE ADD COLUMN, and query........................... 0.005s
+// 230 - 10000 UPDATES, numeric BETWEEN, indexed..................... 0.093s 230 - 10000 UPDATES, numeric BETWEEN, indexed..................... 0.080s
+// 240 - 50000 UPDATES of individual rows............................ 0.153s 240 - 50000 UPDATES of individual rows............................ 0.137s
+// 250 - One big UPDATE of the whole 50000-row table................. 0.024s 250 - One big UPDATE of the whole 50000-row table................. 0.019s
+// 260 - Query added column after filling............................ 0.004s 260 - Query added column after filling............................ 0.005s
+// 270 - 10000 DELETEs, numeric BETWEEN, indexed..................... 0.278s 270 - 10000 DELETEs, numeric BETWEEN, indexed..................... 0.263s
+// 280 - 50000 DELETEs of individual rows............................ 0.188s 280 - 50000 DELETEs of individual rows............................ 0.180s
+// 290 - Refill two 50000-row tables using REPLACE................... 0.411s 290 - Refill two 50000-row tables using REPLACE................... 0.359s
+// 300 - Refill a 50000-row table using (b&1)==(a&1)................. 0.175s 300 - Refill a 50000-row table using (b&1)==(a&1)................. 0.151s
+// 310 - 10000 four-ways joins....................................... 0.427s 310 - 10000 four-ways joins....................................... 0.365s
+// 320 - subquery in result set...................................... 0.440s 320 - subquery in result set...................................... 0.521s
+// 400 - 70000 REPLACE ops on an IPK................................. 0.125s 400 - 70000 REPLACE ops on an IPK................................. 0.106s
+// 410 - 70000 SELECTS on an IPK..................................... 0.081s 410 - 70000 SELECTS on an IPK..................................... 0.078s
+// 500 - 70000 REPLACE on TEXT PK.................................... 0.174s 500 - 70000 REPLACE on TEXT PK.................................... 0.116s
+// 510 - 70000 SELECTS on a TEXT PK.................................. 0.153s 510 - 70000 SELECTS on a TEXT PK.................................. 0.117s
+// 520 - 70000 SELECT DISTINCT....................................... 0.083s 520 - 70000 SELECT DISTINCT....................................... 0.067s
+// 980 - PRAGMA integrity_check...................................... 0.436s 980 - PRAGMA integrity_check...................................... 0.377s
+// 990 - ANALYZE..................................................... 0.107s 990 - ANALYZE..................................................... 0.038s
+// TOTAL....................................................... 5.525s TOTAL....................................................... 4.637s
+//
+// This particular test executes 16.1% faster in the C version.
+//
+// # Changelog
+//
+// 2023-08-03 v1.25.0: enable SQLITE_ENABLE_DBSTAT_VTAB.
+//
+// 2023-07-11 v1.24.0:
+//
+// Add (*conn).{Serialize,Deserialize,NewBackup,NewRestore} methods, add Backup type.
+//
+// 2023-06-01 v1.23.0:
+//
+// Allow registering aggregate functions.
+//
+// 2023-04-22 v1.22.0:
+//
+// Support linux/s390x.
//
// 2023-02-23 v1.21.0:
//
@@ -65,7 +133,7 @@
//
// Support scalar application defined functions written in Go.
//
-// https://www.sqlite.org/appfunc.html
+// https://www.sqlite.org/appfunc.html
//
// 2022-03-13 v1.15.0:
//
@@ -80,8 +148,6 @@
//
// Support freebsd/amd64.
//
-// Changelog
-//
// 2021-06-23 v1.11.0:
//
// Upgrade to use sqlite 3.36.0, release notes at https://www.sqlite.org/releaselog/3_36_0.html.
@@ -169,7 +235,7 @@
//
// 2017-06-05 Linux/Intel no more uses the VM (cznic/virtual).
//
-// Connecting to a database
+// # Connecting to a database
//
// To access a Sqlite database do something like
//
@@ -186,7 +252,7 @@
//
// ...
//
-// Debug and development versions
+// # Debug and development versions
//
// A comma separated list of options can be passed to `go generate` via the
// environment variable GO_GENERATE. Some useful options include for example:
@@ -201,7 +267,117 @@
//
// Note: To run `go generate` you need to have modernc.org/ccgo/v3 installed.
//
-// Sqlite documentation
+// # Hacking
+//
+// This is an example of how to use the debug logs in modernc.org/libc when hunting a bug.
+//
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ git status
+// On branch master
+// Your branch is up to date with 'origin/master'.
+//
+// nothing to commit, working tree clean
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ git log -1
+// commit df33b8d15107f3cc777799c0fe105f74ef499e62 (HEAD -> master, tag: v1.21.1, origin/master, origin/HEAD, wips, ok)
+// Author: Jan Mercl <0xjnml@gmail.com>
+// Date: Mon Mar 27 16:18:28 2023 +0200
+//
+// upgrade to SQLite 3.41.2
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ rm -f /tmp/libc.log ; go test -v -tags=libc.dmesg -run TestScalar ; ls -l /tmp/libc.log
+// test binary compiled for linux/amd64
+// === RUN TestScalar
+// --- PASS: TestScalar (0.09s)
+// PASS
+// ok modernc.org/sqlite 0.128s
+// -rw-r--r-- 1 jnml jnml 76 Apr 6 11:22 /tmp/libc.log
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ cat /tmp/libc.log
+// [10723 sqlite.test] 2023-04-06 11:22:48.288066057 +0200 CEST m=+0.000707150
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$
+//
+// The /tmp/libc.log file is created as requested. No useful messages there because none are enabled in libc. Let's try to enable Xwrite as an example.
+//
+// 0:jnml@e5-1650:~/src/modernc.org/libc$ git status
+// On branch master
+// Your branch is up to date with 'origin/master'.
+//
+// Changes not staged for commit:
+// (use "git add <file>..." to update what will be committed)
+// (use "git restore <file>..." to discard changes in working directory)
+// modified: libc_linux.go
+//
+// no changes added to commit (use "git add" and/or "git commit -a")
+// 0:jnml@e5-1650:~/src/modernc.org/libc$ git log -1
+// commit 1e22c18cf2de8aa86d5b19b165f354f99c70479c (HEAD -> master, tag: v1.22.3, origin/master, origin/HEAD)
+// Author: Jan Mercl <0xjnml@gmail.com>
+// Date: Wed Feb 22 20:27:45 2023 +0100
+//
+// support sqlite 3.41 on linux targets
+// 0:jnml@e5-1650:~/src/modernc.org/libc$ git diff
+// diff --git a/libc_linux.go b/libc_linux.go
+// index 1c2f482..ac1f08d 100644
+// --- a/libc_linux.go
+// +++ b/libc_linux.go
+// @@ -332,19 +332,19 @@ func Xwrite(t *TLS, fd int32, buf uintptr, count types.Size_t) types.Ssize_t {
+// var n uintptr
+// switch n, _, err = unix.Syscall(unix.SYS_WRITE, uintptr(fd), buf, uintptr(count)); err {
+// case 0:
+// - // if dmesgs {
+// - // // dmesg("%v: %d %#x: %#x\n%s", origin(1), fd, count, n, hex.Dump(GoBytes(buf, int(n))))
+// - // dmesg("%v: %d %#x: %#x", origin(1), fd, count, n)
+// - // }
+// + if dmesgs {
+// + // dmesg("%v: %d %#x: %#x\n%s", origin(1), fd, count, n, hex.Dump(GoBytes(buf, int(n))))
+// + dmesg("%v: %d %#x: %#x", origin(1), fd, count, n)
+// + }
+// return types.Ssize_t(n)
+// case errno.EAGAIN:
+// // nop
+// }
+// }
+//
+// - // if dmesgs {
+// - // dmesg("%v: fd %v, count %#x: %v", origin(1), fd, count, err)
+// - // }
+// + if dmesgs {
+// + dmesg("%v: fd %v, count %#x: %v", origin(1), fd, count, err)
+// + }
+// t.setErrno(err)
+// return -1
+// }
+// 0:jnml@e5-1650:~/src/modernc.org/libc$
+//
+// We need to tell the Go build system to use our local, patched/debug libc:
+//
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ go work use $(go env GOPATH)/src/modernc.org/libc
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ go work use .
+//
+// And run the test again:
+//
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ rm -f /tmp/libc.log ; go test -v -tags=libc.dmesg -run TestScalar ; ls -l /tmp/libc.log
+// test binary compiled for linux/amd64
+// === RUN TestScalar
+// --- PASS: TestScalar (0.26s)
+// PASS
+// ok modernc.org/sqlite 0.285s
+// -rw-r--r-- 1 jnml jnml 918 Apr 6 11:29 /tmp/libc.log
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$ cat /tmp/libc.log
+// [11910 sqlite.test] 2023-04-06 11:29:13.143589542 +0200 CEST m=+0.000689270
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x200: 0x200
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0xc: 0xc
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 7 0x1000: 0x1000
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 7 0x1000: 0x1000
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x200: 0x200
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x4: 0x4
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x1000: 0x1000
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x4: 0x4
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x4: 0x4
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x1000: 0x1000
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0x4: 0x4
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 8 0xc: 0xc
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 7 0x1000: 0x1000
+// [11910 sqlite.test] libc_linux.go:337:Xwrite: 7 0x1000: 0x1000
+// 0:jnml@e5-1650:~/src/modernc.org/sqlite$
+//
+// # Sqlite documentation
//
// See https://sqlite.org/docs.html
package sqlite // import "modernc.org/sqlite"