Documentation ¶
Overview ¶
Package sqlite is a sql/database driver using a CGo-free port of the C SQLite3 library.
SQLite is an in-process implementation of a self-contained, serverless, zero-configuration, transactional SQL database engine.
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 ¶
These combinations of GOOS and GOARCH are currently supported
OS Arch SQLite version ------------------------------ darwin amd64 3.46.0 darwin arm64 3.46.0 freebsd amd64 3.46.0 freebsd arm64 3.46.0 linux 386 3.46.0 linux amd64 3.46.0 linux arm 3.46.0 linux arm64 3.46.0 linux loong64 3.46.0 linux ppc64le 3.46.0 linux riscv64 3.46.0 linux s390x 3.46.0 windows 386 3.46.0 windows amd64 3.46.0 windows arm64 3.46.0
Builders ¶
Builder results available at:
https://modern-c.appspot.com/-/builder/?importpath=github.com/opentoys/sqlite%2fsqlite
Fragile github.com/opentoys/sqlite/libc dependency ¶
When you import this package you should use in your go.mod file the exact same version of github.com/opentoys/sqlite/libc as seen in the go.mod file of this repository.
See the discussion at https://gitlab.com/cznic/sqlite/-/issues/177 for more details.
Changelog ¶
2024-07-22: v1.31.0
Support windows/386.
2024-06-04: v1.30.0
Upgrade to SQLite 3.46.0, release notes at https://sqlite.org/releaselog/3_46_0.html.
2024-02-13: v1.29.0
Upgrade to SQLite 3.45.1, release notes at https://sqlite.org/releaselog/3_45_1.html.
2023-12-14 v1.28.0:
(*Driver).RegisterConnectionHook: added ConnectionHookFn: added ExecQuerierContext: added RegisterConnectionHook: added
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:
Upgrade to SQLite 3.41.0, release notes at https://sqlite.org/releaselog/3_41_0.html.
2022-11-28 v1.20.0
Support linux/ppc64le.
2022-09-16 v1.19.0:
Support frebsd/arm64.
2022-07-26 v1.18.0:
Adds support for Go fs.FS based SQLite virtual filesystems, see function New in github.com/opentoys/sqlite/vfs and/or TestVFS in all_test.go
2022-04-24 v1.17.0:
Support windows/arm64.
2022-04-04 v1.16.0:
Support scalar application defined functions written in Go.
https://www.sqlite.org/appfunc.html
2022-03-13 v1.15.0:
Support linux/riscv64.
2021-11-13 v1.14.0:
Support windows/amd64. This target had previously only experimental status because of a now resolved memory leak.
2021-09-07 v1.13.0:
Support freebsd/amd64.
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.
2021-05-06 v1.10.6:
Fixes a memory corruption issue (https://gitlab.com/cznic/sqlite/-/issues/53). Versions since v1.8.6 were affected and should be updated to v1.10.6.
2021-03-14 v1.10.0:
Update to use sqlite 3.35.0, release notes at https://www.sqlite.org/releaselog/3_35_0.html.
2021-03-11 v1.9.0:
Support darwin/arm64.
2021-01-08 v1.8.0:
Support darwin/amd64.
2020-09-13 v1.7.0:
Support linux/arm and linux/arm64.
2020-09-08 v1.6.0:
Support linux/386.
2020-09-03 v1.5.0:
This project is now completely CGo-free, including the Tcl tests.
2020-08-26 v1.4.0:
First stable release for linux/amd64. The database/sql driver and its tests are CGo free. Tests of the translated sqlite3.c library still require CGo.
$ make full ... SQLite 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f 0 errors out of 928271 tests on 3900x Linux 64-bit little-endian WARNING: Multi-threaded tests skipped: Linked against a non-threadsafe Tcl build All memory allocations freed - no leaks Maximum memory usage: 9156360 bytes Current memory usage: 0 bytes Number of malloc() : -1 calls --- PASS: TestTclTest (1785.04s) PASS ok github.com/opentoys/sqlite 1785.041s $
2020-07-26 v1.4.0-beta1:
The project has reached beta status while supporting linux/amd64 only at the moment. The 'extraquick' Tcl testsuite reports
630 errors out of 200177 tests on Linux 64-bit little-endian
and some memory leaks
Unfreed memory: 698816 bytes in 322 allocations
2019-12-28 v1.2.0-alpha.3: Third alpha fixes issue #19.
It also bumps the minor version as the repository was wrongly already tagged with v1.1.0 before. Even though the tag was deleted there are proxies that cached that tag. Thanks /u/garaktailor for detecting the problem and suggesting this solution.
2019-12-26 v1.1.0-alpha.2: Second alpha release adds support for accessing a database concurrently by multiple goroutines and/or processes. v1.1.0 is now considered feature-complete. Next planed release should be a beta with a proper test suite.
2019-12-18 v1.1.0-alpha.1: First alpha release using the new cc/v3, gocc, qbe toolchain. Some primitive tests pass on linux_{amd64,386}. Not yet safe for concurrent access by multiple goroutines. Next alpha release is planed to arrive before the end of this year.
2017-06-10 Windows/Intel no more uses the VM (thanks Steffen Butzer).
2017-06-05 Linux/Intel no more uses the VM (cznic/virtual).
Connecting to a database ¶
To access a Sqlite database do something like
import ( "database/sql" _ "github.com/opentoys/sqlite" ) ... db, err := sql.Open("sqlite", dsnURI) ...
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:
-DSQLITE_DEBUG -DSQLITE_MEM_DEBUG -ccgo-verify-structs
To create a debug/development version, issue for example:
$ GO_GENERATE=-DSQLITE_DEBUG,-DSQLITE_MEM_DEBUG go generate
Note: To run `go generate` you need to have github.com/opentoys/sqlite/ccgo/v3 installed.
Hacking ¶
This is an example of how to use the debug logs in github.com/opentoys/sqlite/libc when hunting a bug.
0:jnml@e5-1650:~/src/github.com/opentoys/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/github.com/opentoys/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/github.com/opentoys/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 github.com/opentoys/sqlite 0.128s -rw-r--r-- 1 jnml jnml 76 Apr 6 11:22 /tmp/libc.log 0:jnml@e5-1650:~/src/github.com/opentoys/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/github.com/opentoys/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/github.com/opentoys/sqlite/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/github.com/opentoys/sqlite/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/github.com/opentoys/sqlite/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/github.com/opentoys/sqlite/libc$
We need to tell the Go build system to use our local, patched/debug libc:
0:jnml@e5-1650:~/src/github.com/opentoys/sqlite$ go work use $(go env GOPATH)/src/github.com/opentoys/sqlite/libc 0:jnml@e5-1650:~/src/github.com/opentoys/sqlite$ go work use .
And run the test again:
0:jnml@e5-1650:~/src/github.com/opentoys/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 github.com/opentoys/sqlite 0.285s -rw-r--r-- 1 jnml jnml 918 Apr 6 11:29 /tmp/libc.log 0:jnml@e5-1650:~/src/github.com/opentoys/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/github.com/opentoys/sqlite$
Sqlite documentation ¶
Index ¶
- Variables
- func Limit(c *sql.Conn, id int, newVal int) (r int, err error)
- func MustRegisterCollationUtf8(zName string, impl func(left, right string) int)
- func MustRegisterDeterministicScalarFunction(zFuncName string, nArg int32, ...)
- func MustRegisterFunction(zFuncName string, impl *FunctionImpl)
- func MustRegisterScalarFunction(zFuncName string, nArg int32, ...)
- func RegisterCollationUtf8(zName string, impl func(left, right string) int) error
- func RegisterConnectionHook(fn ConnectionHookFn)
- func RegisterDeterministicScalarFunction(zFuncName string, nArg int32, ...) (err error)
- func RegisterFunction(zFuncName string, impl *FunctionImpl) error
- func RegisterScalarFunction(zFuncName string, nArg int32, ...) (err error)
- type AggregateFunction
- type Backup
- type ConnectionHookFn
- type Driver
- type Error
- type ExecQuerierContext
- type FileControl
- type FunctionContext
- type FunctionImpl
Constants ¶
This section is empty.
Variables ¶
var ( // ErrorCodeString maps Error.Code() to its string representation. ErrorCodeString = map[int]string{ sqlite3.SQLITE_ABORT: "Callback routine requested an abort (SQLITE_ABORT)", sqlite3.SQLITE_AUTH: "Authorization denied (SQLITE_AUTH)", sqlite3.SQLITE_BUSY: "The database file is locked (SQLITE_BUSY)", sqlite3.SQLITE_CANTOPEN: "Unable to open the database file (SQLITE_CANTOPEN)", sqlite3.SQLITE_CONSTRAINT: "Abort due to constraint violation (SQLITE_CONSTRAINT)", sqlite3.SQLITE_CORRUPT: "The database disk image is malformed (SQLITE_CORRUPT)", sqlite3.SQLITE_DONE: "sqlite3_step() has finished executing (SQLITE_DONE)", sqlite3.SQLITE_EMPTY: "Internal use only (SQLITE_EMPTY)", sqlite3.SQLITE_ERROR: "Generic error (SQLITE_ERROR)", sqlite3.SQLITE_FORMAT: "Not used (SQLITE_FORMAT)", sqlite3.SQLITE_FULL: "Insertion failed because database is full (SQLITE_FULL)", sqlite3.SQLITE_INTERNAL: "Internal logic error in SQLite (SQLITE_INTERNAL)", sqlite3.SQLITE_INTERRUPT: "Operation terminated by sqlite3_interrupt()(SQLITE_INTERRUPT)", sqlite3.SQLITE_IOERR | (1 << 8): "(SQLITE_IOERR_READ)", sqlite3.SQLITE_IOERR | (10 << 8): "(SQLITE_IOERR_DELETE)", sqlite3.SQLITE_IOERR | (11 << 8): "(SQLITE_IOERR_BLOCKED)", sqlite3.SQLITE_IOERR | (12 << 8): "(SQLITE_IOERR_NOMEM)", sqlite3.SQLITE_IOERR | (13 << 8): "(SQLITE_IOERR_ACCESS)", sqlite3.SQLITE_IOERR | (14 << 8): "(SQLITE_IOERR_CHECKRESERVEDLOCK)", sqlite3.SQLITE_IOERR | (15 << 8): "(SQLITE_IOERR_LOCK)", sqlite3.SQLITE_IOERR | (16 << 8): "(SQLITE_IOERR_CLOSE)", sqlite3.SQLITE_IOERR | (17 << 8): "(SQLITE_IOERR_DIR_CLOSE)", sqlite3.SQLITE_IOERR | (2 << 8): "(SQLITE_IOERR_SHORT_READ)", sqlite3.SQLITE_IOERR | (3 << 8): "(SQLITE_IOERR_WRITE)", sqlite3.SQLITE_IOERR | (4 << 8): "(SQLITE_IOERR_FSYNC)", sqlite3.SQLITE_IOERR | (5 << 8): "(SQLITE_IOERR_DIR_FSYNC)", sqlite3.SQLITE_IOERR | (6 << 8): "(SQLITE_IOERR_TRUNCATE)", sqlite3.SQLITE_IOERR | (7 << 8): "(SQLITE_IOERR_FSTAT)", sqlite3.SQLITE_IOERR | (8 << 8): "(SQLITE_IOERR_UNLOCK)", sqlite3.SQLITE_IOERR | (9 << 8): "(SQLITE_IOERR_RDLOCK)", sqlite3.SQLITE_IOERR: "Some kind of disk I/O error occurred (SQLITE_IOERR)", sqlite3.SQLITE_LOCKED | (1 << 8): "(SQLITE_LOCKED_SHAREDCACHE)", sqlite3.SQLITE_LOCKED: "A table in the database is locked (SQLITE_LOCKED)", sqlite3.SQLITE_MISMATCH: "Data type mismatch (SQLITE_MISMATCH)", sqlite3.SQLITE_MISUSE: "Library used incorrectly (SQLITE_MISUSE)", sqlite3.SQLITE_NOLFS: "Uses OS features not supported on host (SQLITE_NOLFS)", sqlite3.SQLITE_NOMEM: "A malloc() failed (SQLITE_NOMEM)", sqlite3.SQLITE_NOTADB: "File opened that is not a database file (SQLITE_NOTADB)", sqlite3.SQLITE_NOTFOUND: "Unknown opcode in sqlite3_file_control() (SQLITE_NOTFOUND)", sqlite3.SQLITE_NOTICE: "Notifications from sqlite3_log() (SQLITE_NOTICE)", sqlite3.SQLITE_PERM: "Access permission denied (SQLITE_PERM)", sqlite3.SQLITE_PROTOCOL: "Database lock protocol error (SQLITE_PROTOCOL)", sqlite3.SQLITE_RANGE: "2nd parameter to sqlite3_bind out of range (SQLITE_RANGE)", sqlite3.SQLITE_READONLY: "Attempt to write a readonly database (SQLITE_READONLY)", sqlite3.SQLITE_ROW: "sqlite3_step() has another row ready (SQLITE_ROW)", sqlite3.SQLITE_SCHEMA: "The database schema changed (SQLITE_SCHEMA)", sqlite3.SQLITE_TOOBIG: "String or BLOB exceeds size limit (SQLITE_TOOBIG)", sqlite3.SQLITE_WARNING: "Warnings from sqlite3_log() (SQLITE_WARNING)", } )
Functions ¶
func Limit ¶
Limit calls sqlite3_limit, see the docs at https://www.sqlite.org/c3ref/limit.html for details.
To get a sql.Conn from a *sql.DB, use (*sql.DB).Conn(). Limits are bound to the particular instance of 'c', so getting a new connection only to pass it to Limit is possibly not useful above querying what are the various configured default values.
func MustRegisterCollationUtf8 ¶
MustRegisterCollationUtf8 is like RegisterCollationUtf8 but panics on error.
func MustRegisterDeterministicScalarFunction ¶
func MustRegisterDeterministicScalarFunction( zFuncName string, nArg int32, xFunc func(ctx *FunctionContext, args []driver.Value) (driver.Value, error), )
MustRegisterDeterministicScalarFunction is like RegisterDeterministicScalarFunction but panics on error.
func MustRegisterFunction ¶
func MustRegisterFunction( zFuncName string, impl *FunctionImpl, )
MustRegisterFunction is like RegisterFunction but panics on error.
func MustRegisterScalarFunction ¶
func MustRegisterScalarFunction( zFuncName string, nArg int32, xFunc func(ctx *FunctionContext, args []driver.Value) (driver.Value, error), )
MustRegisterScalarFunction is like RegisterScalarFunction but panics on error.
func RegisterCollationUtf8 ¶
RegisterCollationUtf8 makes a Go function available as a collation named zName. impl receives two UTF-8 strings: left and right. The result needs to be:
- 0 if left == right - 1 if left < right - +1 if left > right
impl must always return the same result given the same inputs. Additionally, it must have the following properties for all strings A, B and C: - if A==B, then B==A - if A==B and B==C, then A==C - if A<B, then B>A - if A<B and B<C, then A<C.
The new collation will be available to all new connections opened after executing RegisterCollationUtf8.
func RegisterConnectionHook ¶
func RegisterConnectionHook(fn ConnectionHookFn)
RegisterConnectionHook registers a function to be called after each connection is opened. This is called after all the connection has been set up.
func RegisterDeterministicScalarFunction ¶
func RegisterDeterministicScalarFunction( zFuncName string, nArg int32, xFunc func(ctx *FunctionContext, args []driver.Value) (driver.Value, error), ) (err error)
RegisterDeterministicScalarFunction registers a deterministic scalar function named zFuncName with nArg arguments. Passing -1 for nArg indicates the function is variadic. A deterministic function means that the function always gives the same output when the input parameters are the same.
The new function will be available to all new connections opened after executing RegisterDeterministicScalarFunction.
func RegisterFunction ¶
func RegisterFunction( zFuncName string, impl *FunctionImpl, ) error
RegisterFunction registers a function named zFuncName with nArg arguments. Passing -1 for nArg indicates the function is variadic. The FunctionImpl determines whether the function is deterministic or not, and whether it is a scalar function (when Scalar is defined) or an aggregate function (when Scalar is not defined and MakeAggregate is defined).
The new function will be available to all new connections opened after executing RegisterFunction.
func RegisterScalarFunction ¶
func RegisterScalarFunction( zFuncName string, nArg int32, xFunc func(ctx *FunctionContext, args []driver.Value) (driver.Value, error), ) (err error)
RegisterScalarFunction registers a scalar function named zFuncName with nArg arguments. Passing -1 for nArg indicates the function is variadic.
The new function will be available to all new connections opened after executing RegisterScalarFunction.
Types ¶
type AggregateFunction ¶
type AggregateFunction interface { // Step is called for each row of an aggregate function's SQL // invocation. The argument Values are not valid past the return of the // function. Step(ctx *FunctionContext, rowArgs []driver.Value) error // WindowInverse is called to remove the oldest presently aggregated // result of Step from the current window. The arguments are those // passed to Step for the row being removed. The argument Values are not // valid past the return of the function. WindowInverse(ctx *FunctionContext, rowArgs []driver.Value) error // WindowValue is called to get the current value of an aggregate // function. This is used to return the final value of the function, // whether it is used as a window function or not. WindowValue(ctx *FunctionContext) (driver.Value, error) // Final is called after all of the aggregate function's input rows have // been stepped through. No other methods will be called on the // AggregateFunction after calling Final. WindowValue returns the value // from the function. Final(ctx *FunctionContext) }
An AggregateFunction is an invocation of an aggregate or window function. See the documentation for aggregate function callbacks and application-defined window functions for an overview.
type Backup ¶
type Backup struct {
// contains filtered or unexported fields
}
Backup object is used to manage progress and cleanup an online backup. It is returned by NewBackup or NewRestore.
func (*Backup) Commit ¶
Commit releases all resources associated with the Backup object but does not close the destination database connection.
The destination database connection is returned to the caller or an error if raised. It is the responsibility of the caller to handle the connection closure.
func (*Backup) Finish ¶
Finish releases all resources associated with the Backup object. The Backup object is invalid and may not be used following a call to Finish.
func (*Backup) Step ¶
Step will copy up to n pages between the source and destination databases specified by the backup object. If n is negative, all remaining source pages are copied. If it successfully copies n pages and there are still more pages to be copied, then the function returns true with no error. If it successfully finishes copying all pages from source to destination, then it returns false with no error. If an error occurs while running, then an error is returned.
type ConnectionHookFn ¶
type ConnectionHookFn func( conn ExecQuerierContext, dsn string, ) error
ConnectionHookFn function type for a connection hook on the Driver. Connection hooks are called after the connection has been set up.
type Driver ¶
type Driver struct {
// contains filtered or unexported fields
}
Driver implements database/sql/driver.Driver.
func (*Driver) Open ¶
Open returns a new connection to the database. The name is a string in a driver-specific format.
Open may return a cached connection (one previously closed), but doing so is unnecessary; the sql package maintains a pool of idle connections for efficient re-use.
The returned connection is only used by one goroutine at a time.
The name may be a filename, e.g., "/tmp/mydata.sqlite", or a URI, in which case it may include a '?' followed by one or more query parameters. For example, "file:///tmp/mydata.sqlite?_pragma=foreign_keys(1)&_time_format=sqlite". The supported query parameters are:
_pragma: Each value will be run as a "PRAGMA ..." statement (with the PRAGMA keyword added for you). May be specified more than once, '&'-separated. For more information on supported PRAGMAs see: https://www.sqlite.org/pragma.html
_time_format: The name of a format to use when writing time values to the database. Currently the only supported value is "sqlite", which corresponds to format 7 from https://www.sqlite.org/lang_datefunc.html#time_values, including the timezone specifier. If this parameter is not specified, then the default String() format will be used.
_txlock: The locking behavior to use when beginning a transaction. May be "deferred" (the default), "immediate", or "exclusive" (case insensitive). See: https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions
func (*Driver) RegisterConnectionHook ¶
func (d *Driver) RegisterConnectionHook(fn ConnectionHookFn)
RegisterConnectionHook registers a function to be called after each connection is opened. This is called after all the connection has been set up.
type Error ¶
type Error struct {
// contains filtered or unexported fields
}
Error represents sqlite library error code.
type ExecQuerierContext ¶
type ExecQuerierContext interface { driver.ExecerContext driver.QueryerContext }
type FileControl ¶
type FileControl interface { // Set or query SQLITE_FCNTL_PERSIST_WAL, returns set mode or query result FileControlPersistWAL(dbName string, mode int) (int, error) }
Access to sqlite3_file_control
type FunctionContext ¶
type FunctionContext struct {
// contains filtered or unexported fields
}
FunctionContext represents the context user defined functions execute in. Fields and/or methods of this type may get addedd in the future.
type FunctionImpl ¶
type FunctionImpl struct { // NArgs is the required number of arguments that the function accepts. // If NArgs is negative, then the function is variadic. NArgs int32 // If Deterministic is true, the function must always give the same // output when the input parameters are the same. This enables functions // to be used in additional contexts like the WHERE clause of partial // indexes and enables additional optimizations. // // See https://sqlite.org/c3ref/c_deterministic.html#sqlitedeterministic // for more details. Deterministic bool // Scalar is called when a scalar function is invoked in SQL. The // argument Values are not valid past the return of the function. Scalar func(ctx *FunctionContext, args []driver.Value) (driver.Value, error) // MakeAggregate is called at the beginning of each evaluation of an // aggregate function. MakeAggregate func(ctx FunctionContext) (AggregateFunction, error) }
FunctionImpl describes an application-defined SQL function. If Scalar is set, it is treated as a scalar function; otherwise, it is treated as an aggregate function using MakeAggregate.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package cc is a C99 compiler front end.
|
Package cc is a C99 compiler front end. |
Package demangle defines functions that demangle GCC/LLVM C++ and Rust symbol names.
|
Package demangle defines functions that demangle GCC/LLVM C++ and Rust symbol names. |
examples
|
|
Package fileutil collects some file utility functions.
|
Package fileutil collects some file utility functions. |
ccgo
Package ccgo collects utilities often used while generating code with ccgo.
|
Package ccgo collects utilities often used while generating code with ccgo. |
falloc
WIP: Package falloc provides allocation/deallocation of space within a file/store (WIP, unstable API).
|
WIP: Package falloc provides allocation/deallocation of space within a file/store (WIP, unstable API). |
hdb
WIP: Package hdb provides a "handle"/value DB like store, but actually it's closer to the model of a process's virtual memory and its alloc, free and move methods.
|
WIP: Package hdb provides a "handle"/value DB like store, but actually it's closer to the model of a process's virtual memory and its alloc, free and move methods. |
storage
WIP: Package storage defines and implements storage providers and store accessors.
|
WIP: Package storage defines and implements storage providers and store accessors. |
Package humanize converts boring ugly numbers to human-friendly strings and back.
|
Package humanize converts boring ugly numbers to human-friendly strings and back. |
english
Package english provides utilities to generate more user-friendly English output.
|
Package english provides utilities to generate more user-friendly English output. |
Package isatty implements interface to isatty
|
Package isatty implements interface to isatty |
Package strftime provides strftime/strptime compatible time formatting and parsing.
|
Package strftime provides strftime/strptime compatible time formatting and parsing. |
Package lru provides three different LRU caches of varying sophistication.
|
Package lru provides three different LRU caches of varying sophistication. |
simplelru
Package simplelru provides simple LRU implementation based on build-in container/list.
|
Package simplelru provides simple LRU implementation based on build-in container/list. |
golex
|
|
lex
Package lex is a Unicode-friendly run time library for golex[0] generated lexical analyzers[1].
|
Package lex is a Unicode-friendly run time library for golex[0] generated lexical analyzers[1]. |
Package lex provides support for a *nix (f)lex like tool on .l sources.
|
Package lex provides support for a *nix (f)lex like tool on .l sources. |
Package lexer provides generating actionless scanners (lexeme recognizers) at run time.
|
Package lexer provides generating actionless scanners (lexeme recognizers) at run time. |
Package libc provides run time support for programs generated by the [ccgo] C to Go transpiler, version 4 or later.
|
Package libc provides run time support for programs generated by the [ccgo] C to Go transpiler, version 4 or later. |
honnef.co/go/netdb
Package netdb provides a Go interface for the protoent and servent structures as defined in netdb.h
|
Package netdb provides a Go interface for the protoent and servent structures as defined in netdb.h |
Package mathutil provides utilities supplementing the standard 'math' and 'math/rand' packages.
|
Package mathutil provides utilities supplementing the standard 'math' and 'math/rand' packages. |
mersenne
Package mersenne collects utilities related to Mersenne numbers[1] and/or some of their properties.
|
Package mersenne collects utilities related to Mersenne numbers[1] and/or some of their properties. |
Package memory implements a memory allocator.
|
Package memory implements a memory allocator. |
Package mmap allows mapping files into memory.
|
Package mmap allows mapping files into memory. |
Package opt implements command-line flag parsing.
|
Package opt implements command-line flag parsing. |
parser
|
|
nquads
Package parser implements a parser for N-Quads[0] source text.
|
Package parser implements a parser for N-Quads[0] source text. |
yacc
Package parser implements a parser for yacc source files.
|
Package parser implements a parser for yacc source files. |
pprof is a tool for collection, manipulation and visualization of performance profiles.
|
pprof is a tool for collection, manipulation and visualization of performance profiles. |
driver
Package driver provides an external entry point to the pprof driver.
|
Package driver provides an external entry point to the pprof driver. |
internal/binutils
Package binutils provides access to the GNU binutils.
|
Package binutils provides access to the GNU binutils. |
internal/driver
Package driver implements the core pprof functionality.
|
Package driver implements the core pprof functionality. |
internal/elfexec
Package elfexec provides utility routines to examine ELF binaries.
|
Package elfexec provides utility routines to examine ELF binaries. |
internal/graph
Package graph collects a set of samples into a directed graph.
|
Package graph collects a set of samples into a directed graph. |
internal/measurement
Package measurement export utility functions to manipulate/format performance profile sample values.
|
Package measurement export utility functions to manipulate/format performance profile sample values. |
internal/plugin
Package plugin defines the plugin implementations that the main pprof driver requires.
|
Package plugin defines the plugin implementations that the main pprof driver requires. |
internal/report
Package report summarizes a performance profile into a human-readable report.
|
Package report summarizes a performance profile into a human-readable report. |
internal/symbolizer
Package symbolizer provides a routine to populate a profile with symbol, file and line number information.
|
Package symbolizer provides a routine to populate a profile with symbol, file and line number information. |
internal/symbolz
Package symbolz symbolizes a profile using the output from the symbolz service.
|
Package symbolz symbolizes a profile using the output from the symbolz service. |
internal/transport
Package transport provides a mechanism to send requests with https cert, key, and CA.
|
Package transport provides a mechanism to send requests with https cert, key, and CA. |
profile
Package profile provides a representation of profile.proto and methods to encode/decode profiles in this format.
|
Package profile provides a representation of profile.proto and methods to encode/decode profiles in this format. |
Readline is a pure go implementation for GNU-Readline kind library.
|
Readline is a pure go implementation for GNU-Readline kind library. |
runes
deprecated.
|
deprecated. |
Package scanner provides some common scanner stuff.
|
Package scanner provides some common scanner stuff. |
nquads
Package scanner implements a scanner for N-Quads[0] source text.
|
Package scanner implements a scanner for N-Quads[0] source text. |
yacc
Package scanner implements a scanner for yacc[0] source text with actions written in Go.
|
Package scanner implements a scanner for yacc[0] source text with actions written in Go. |
Package sortutil provides utilities supplementing the standard 'sort' package.
|
Package sortutil provides utilities supplementing the standard 'sort' package. |
Package strutil collects utils supplemental to the standard strings package.
|
Package strutil collects utils supplemental to the standard strings package. |
Package token is variant of the stdlib package token with types FileSet and Token removed.
|
Package token is variant of the stdlib package token with types FileSet and Token removed. |
Package uuid generates and inspects UUIDs.
|
Package uuid generates and inspects UUIDs. |
Package y converts .y (yacc[2]) source files to data suitable for a parser generator.
|
Package y converts .y (yacc[2]) source files to data suitable for a parser generator. |