Documentation ¶
Overview ¶
Package sqlite is a CGo-free port of SQLite/SQLite3 v3.36.0.
SQLite is an in-process implementation of a self-contained, serverless, zero-configuration, transactional SQL database engine.
Supported platforms and architectures ¶
These combinations of GOOS and GOARCH are currently supported
darwin amd64 darwin arm64 freebsd amd64 linux 386 linux amd64 linux arm linux arm64 windows amd64
The windows/amd64 has currently experimental/preview status. Tcl tests report an unresolved yet memory leak, see https://gitlab.com/cznic/sqlite/-/issues/23 for more details.
Planned platforms and architectures
windows 386
Builders ¶
Builder results available at
https://modern-c.appspot.com/-/builder/?importpath=modernc.org%2fsqlite
Changelog ¶
2021-09-07 v1.13.0:
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.
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 modernc.org/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" _ "modernc.org/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 modernc.org/ccgo/v3 installed.
Sqlite documentation ¶
Index ¶
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 ¶
This section is empty.
Types ¶
type Driver ¶
type Driver struct{}
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.