Documentation
¶
Overview ¶
Package sqlite3 provides interface to SQLite3 databases.
This works as a driver for database/sql.
Installation
go get github.com/0xCarbon/go-sqlite3
Supported Types ¶
Currently, go-sqlite3 supports the following data types.
+------------------------------+ |go | sqlite3 | |----------|-------------------| |nil | null | |int | integer | |int64 | integer | |float64 | float | |bool | integer | |[]byte | blob | |string | text | |time.Time | timestamp/datetime| +------------------------------+
SQLite3 Extension ¶
You can write your own extension module for sqlite3. For example, below is an extension for a Regexp matcher operation.
#include <pcre.h>
#include <string.h>
#include <stdio.h>
#include <sqlite3ext.h>
SQLITE_EXTENSION_INIT1
static void regexp_func(sqlite3_context *context, int argc, sqlite3_value **argv) {
if (argc >= 2) {
const char *target = (const char *)sqlite3_value_text(argv[1]);
const char *pattern = (const char *)sqlite3_value_text(argv[0]);
const char* errstr = NULL;
int erroff = 0;
int vec[500];
int n, rc;
pcre* re = pcre_compile(pattern, 0, &errstr, &erroff, NULL);
rc = pcre_exec(re, NULL, target, strlen(target), 0, 0, vec, 500);
if (rc <= 0) {
sqlite3_result_error(context, errstr, 0);
return;
}
sqlite3_result_int(context, 1);
}
}
#ifdef _WIN32
__declspec(dllexport)
#endif
int sqlite3_extension_init(sqlite3 *db, char **errmsg,
const sqlite3_api_routines *api) {
SQLITE_EXTENSION_INIT2(api);
return sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8,
(void*)db, regexp_func, NULL, NULL);
}
It needs to be built as a so/dll shared library. And you need to register the extension module like below.
sql.Register("sqlite3_with_extensions",
&sqlite3.SQLiteDriver{
Extensions: []string{
"sqlite3_mod_regexp",
},
})
Then, you can use this extension.
rows, err := db.Query("select text from mytable where name regexp '^golang'")
Connection Hook ¶
You can hook and inject your code when the connection is established by setting ConnectHook to get the SQLiteConn.
sql.Register("sqlite3_with_hook_example",
&sqlite3.SQLiteDriver{
ConnectHook: func(conn *sqlite3.SQLiteConn) error {
sqlite3conn = append(sqlite3conn, conn)
return nil
},
})
You can also use database/sql.Conn.Raw (Go >= 1.13):
conn, err := db.Conn(context.Background())
// if err != nil { ... }
defer conn.Close()
err = conn.Raw(func (driverConn any) error {
sqliteConn := driverConn.(*sqlite3.SQLiteConn)
// ... use sqliteConn
})
// if err != nil { ... }
Go SQlite3 Extensions ¶
If you want to register Go functions as SQLite extension functions you can make a custom driver by calling RegisterFunction from ConnectHook.
regex = func(re, s string) (bool, error) {
return regexp.MatchString(re, s)
}
sql.Register("sqlite3_extended",
&sqlite3.SQLiteDriver{
ConnectHook: func(conn *sqlite3.SQLiteConn) error {
return conn.RegisterFunc("regexp", regex, true)
},
})
You can then use the custom driver by passing its name to sql.Open.
var i int
conn, err := sql.Open("sqlite3_extended", "./foo.db")
if err != nil {
panic(err)
}
err = db.QueryRow(`SELECT regexp("foo.*", "seafood")`).Scan(&i)
if err != nil {
panic(err)
}
See the documentation of RegisterFunc for more details.
Index ¶
- Constants
- Variables
- func CryptEncoderSHA1(pass []byte, hash any) []byte
- func CryptEncoderSHA256(pass []byte, hash any) []byte
- func CryptEncoderSHA384(pass []byte, hash any) []byte
- func CryptEncoderSHA512(pass []byte, hash any) []byte
- func CryptEncoderSSHA1(salt string) func(pass []byte, hash any) []byte
- func CryptEncoderSSHA256(salt string) func(pass []byte, hash any) []byte
- func CryptEncoderSSHA384(salt string) func(pass []byte, hash any) []byte
- func CryptEncoderSSHA512(salt string) func(pass []byte, hash any) []byte
- func Version() (libVersion string, libVersionNumber int, sourceID string)
- type ErrNo
- type ErrNoExtended
- type Error
- type SQLiteBackup
- type SQLiteConn
- func (c *SQLiteConn) AuthEnabled() (exists bool)
- func (c *SQLiteConn) AuthUserAdd(username, password string, admin bool) error
- func (c *SQLiteConn) AuthUserChange(username, password string, admin bool) error
- func (c *SQLiteConn) AuthUserDelete(username string) error
- func (c *SQLiteConn) Authenticate(username, password string) error
- func (c *SQLiteConn) AutoCommit() bool
- func (destConn *SQLiteConn) Backup(dest string, srcConn *SQLiteConn, src string) (*SQLiteBackup, error)
- func (c *SQLiteConn) Begin() (driver.Tx, error)
- func (c *SQLiteConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error)
- func (c *SQLiteConn) Close() error
- func (c *SQLiteConn) Deserialize(b []byte, schema string) error
- func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, error)
- func (c *SQLiteConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error)
- func (c *SQLiteConn) GetFilename(schemaName string) string
- func (c *SQLiteConn) GetLimit(id int) int
- func (c *SQLiteConn) LoadExtension(lib string, entry string) error
- func (c *SQLiteConn) Ping(ctx context.Context) error
- func (c *SQLiteConn) Prepare(query string) (driver.Stmt, error)
- func (c *SQLiteConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error)
- func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, error)
- func (c *SQLiteConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error)
- func (c *SQLiteConn) RegisterAggregator(name string, impl any, pure bool) error
- func (c *SQLiteConn) RegisterAuthorizer(callback func(int, string, string, string) int)
- func (c *SQLiteConn) RegisterCollation(name string, cmp func(string, string) int) error
- func (c *SQLiteConn) RegisterCommitHook(callback func() int)
- func (c *SQLiteConn) RegisterFunc(name string, impl any, pure bool) error
- func (c *SQLiteConn) RegisterPreUpdateHook(callback func(SQLitePreUpdateData))
- func (c *SQLiteConn) RegisterRollbackHook(callback func())
- func (c *SQLiteConn) RegisterUpdateHook(callback func(int, string, string, int64))
- func (c *SQLiteConn) Serialize(schema string) ([]byte, error)
- func (c *SQLiteConn) SetFileControlInt(dbName string, op int, arg int) error
- func (c *SQLiteConn) SetFileControlInt64(dbName string, op int, arg int64) error
- func (c *SQLiteConn) SetLimit(id int, newVal int) int
- type SQLiteContext
- func (c *SQLiteContext) ResultBlob(b []byte)
- func (c *SQLiteContext) ResultBool(b bool)
- func (c *SQLiteContext) ResultDouble(d float64)
- func (c *SQLiteContext) ResultInt(i int)
- func (c *SQLiteContext) ResultInt64(i int64)
- func (c *SQLiteContext) ResultNull()
- func (c *SQLiteContext) ResultText(s string)
- func (c *SQLiteContext) ResultZeroblob(n int)
- type SQLiteDriver
- type SQLitePreUpdateData
- type SQLiteResult
- type SQLiteRows
- func (rc *SQLiteRows) Close() error
- func (rc *SQLiteRows) ColumnTypeDatabaseTypeName(i int) string
- func (rc *SQLiteRows) ColumnTypeNullable(i int) (nullable, ok bool)
- func (rc *SQLiteRows) ColumnTypeScanType(i int) reflect.Type
- func (rc *SQLiteRows) Columns() []string
- func (rc *SQLiteRows) DeclTypes() []string
- func (rc *SQLiteRows) Next(dest []driver.Value) error
- type SQLiteStmt
- func (s *SQLiteStmt) Close() error
- func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error)
- func (s *SQLiteStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error)
- func (s *SQLiteStmt) NumInput() int
- func (s *SQLiteStmt) Query(args []driver.Value) (driver.Rows, error)
- func (s *SQLiteStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error)
- func (s *SQLiteStmt) Readonly() bool
- type SQLiteTx
Constants ¶
const ( // used by authorizer and pre_update_hook SQLITE_DELETE = C.SQLITE_DELETE SQLITE_INSERT = C.SQLITE_INSERT SQLITE_UPDATE = C.SQLITE_UPDATE // used by authorzier - as return value SQLITE_OK = C.SQLITE_OK SQLITE_IGNORE = C.SQLITE_IGNORE SQLITE_DENY = C.SQLITE_DENY // different actions query tries to do - passed as argument to authorizer SQLITE_CREATE_INDEX = C.SQLITE_CREATE_INDEX SQLITE_CREATE_TABLE = C.SQLITE_CREATE_TABLE SQLITE_CREATE_TEMP_INDEX = C.SQLITE_CREATE_TEMP_INDEX SQLITE_CREATE_TEMP_TABLE = C.SQLITE_CREATE_TEMP_TABLE SQLITE_CREATE_TEMP_TRIGGER = C.SQLITE_CREATE_TEMP_TRIGGER SQLITE_CREATE_TEMP_VIEW = C.SQLITE_CREATE_TEMP_VIEW SQLITE_CREATE_TRIGGER = C.SQLITE_CREATE_TRIGGER SQLITE_CREATE_VIEW = C.SQLITE_CREATE_VIEW SQLITE_CREATE_VTABLE = C.SQLITE_CREATE_VTABLE SQLITE_DROP_INDEX = C.SQLITE_DROP_INDEX SQLITE_DROP_TABLE = C.SQLITE_DROP_TABLE SQLITE_DROP_TEMP_INDEX = C.SQLITE_DROP_TEMP_INDEX SQLITE_DROP_TEMP_TABLE = C.SQLITE_DROP_TEMP_TABLE SQLITE_DROP_TEMP_TRIGGER = C.SQLITE_DROP_TEMP_TRIGGER SQLITE_DROP_TEMP_VIEW = C.SQLITE_DROP_TEMP_VIEW SQLITE_DROP_TRIGGER = C.SQLITE_DROP_TRIGGER SQLITE_DROP_VIEW = C.SQLITE_DROP_VIEW SQLITE_DROP_VTABLE = C.SQLITE_DROP_VTABLE SQLITE_PRAGMA = C.SQLITE_PRAGMA SQLITE_READ = C.SQLITE_READ SQLITE_SELECT = C.SQLITE_SELECT SQLITE_TRANSACTION = C.SQLITE_TRANSACTION SQLITE_ATTACH = C.SQLITE_ATTACH SQLITE_DETACH = C.SQLITE_DETACH SQLITE_ALTER_TABLE = C.SQLITE_ALTER_TABLE SQLITE_REINDEX = C.SQLITE_REINDEX SQLITE_ANALYZE = C.SQLITE_ANALYZE SQLITE_FUNCTION = C.SQLITE_FUNCTION SQLITE_SAVEPOINT = C.SQLITE_SAVEPOINT SQLITE_COPY = C.SQLITE_COPY )
const ( SQLITE_FCNTL_LOCKSTATE = int(1) SQLITE_FCNTL_GET_LOCKPROXYFILE = int(2) SQLITE_FCNTL_SET_LOCKPROXYFILE = int(3) SQLITE_FCNTL_LAST_ERRNO = int(4) SQLITE_FCNTL_SIZE_HINT = int(5) SQLITE_FCNTL_CHUNK_SIZE = int(6) SQLITE_FCNTL_FILE_POINTER = int(7) SQLITE_FCNTL_SYNC_OMITTED = int(8) SQLITE_FCNTL_WIN32_AV_RETRY = int(9) SQLITE_FCNTL_PERSIST_WAL = int(10) SQLITE_FCNTL_OVERWRITE = int(11) SQLITE_FCNTL_VFSNAME = int(12) SQLITE_FCNTL_POWERSAFE_OVERWRITE = int(13) SQLITE_FCNTL_PRAGMA = int(14) SQLITE_FCNTL_BUSYHANDLER = int(15) SQLITE_FCNTL_TEMPFILENAME = int(16) SQLITE_FCNTL_MMAP_SIZE = int(18) SQLITE_FCNTL_TRACE = int(19) SQLITE_FCNTL_HAS_MOVED = int(20) SQLITE_FCNTL_SYNC = int(21) SQLITE_FCNTL_COMMIT_PHASETWO = int(22) SQLITE_FCNTL_WIN32_SET_HANDLE = int(23) SQLITE_FCNTL_WAL_BLOCK = int(24) SQLITE_FCNTL_ZIPVFS = int(25) SQLITE_FCNTL_RBU = int(26) SQLITE_FCNTL_VFS_POINTER = int(27) SQLITE_FCNTL_JOURNAL_POINTER = int(28) SQLITE_FCNTL_WIN32_GET_HANDLE = int(29) SQLITE_FCNTL_PDB = int(30) SQLITE_FCNTL_BEGIN_ATOMIC_WRITE = int(31) SQLITE_FCNTL_COMMIT_ATOMIC_WRITE = int(32) SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE = int(33) SQLITE_FCNTL_LOCK_TIMEOUT = int(34) SQLITE_FCNTL_DATA_VERSION = int(35) SQLITE_FCNTL_SIZE_LIMIT = int(36) SQLITE_FCNTL_CKPT_DONE = int(37) SQLITE_FCNTL_RESERVE_BYTES = int(38) SQLITE_FCNTL_CKPT_START = int(39) SQLITE_FCNTL_EXTERNAL_READER = int(40) SQLITE_FCNTL_CKSM_FILE = int(41) )
Standard File Control Opcodes See: https://www.sqlite.org/c3ref/c_fcntl_begin_atomic_write.html
const ( SQLITE_LIMIT_LENGTH = C.SQLITE_LIMIT_LENGTH SQLITE_LIMIT_SQL_LENGTH = C.SQLITE_LIMIT_SQL_LENGTH SQLITE_LIMIT_COLUMN = C.SQLITE_LIMIT_COLUMN SQLITE_LIMIT_EXPR_DEPTH = C.SQLITE_LIMIT_EXPR_DEPTH SQLITE_LIMIT_COMPOUND_SELECT = C.SQLITE_LIMIT_COMPOUND_SELECT SQLITE_LIMIT_VDBE_OP = C.SQLITE_LIMIT_VDBE_OP SQLITE_LIMIT_FUNCTION_ARG = C.SQLITE_LIMIT_FUNCTION_ARG SQLITE_LIMIT_ATTACHED = C.SQLITE_LIMIT_ATTACHED SQLITE_LIMIT_LIKE_PATTERN_LENGTH = C.SQLITE_LIMIT_LIKE_PATTERN_LENGTH SQLITE_LIMIT_VARIABLE_NUMBER = C.SQLITE_LIMIT_VARIABLE_NUMBER SQLITE_LIMIT_TRIGGER_DEPTH = C.SQLITE_LIMIT_TRIGGER_DEPTH SQLITE_LIMIT_WORKER_THREADS = C.SQLITE_LIMIT_WORKER_THREADS )
Run-Time Limit Categories. See: http://www.sqlite.org/c3ref/c_limit_attached.html
const ( SQLITE_INTEGER = iota SQLITE_TEXT SQLITE_BLOB SQLITE_REAL SQLITE_NUMERIC SQLITE_TIME SQLITE_BOOL SQLITE_NULL )
const ErrNoMask C.int = 0xff
ErrNoMask is mask code.
Variables ¶
var ( ErrError = ErrNo(1) /* SQL error or missing database */ ErrInternal = ErrNo(2) /* Internal logic error in SQLite */ ErrPerm = ErrNo(3) /* Access permission denied */ ErrAbort = ErrNo(4) /* Callback routine requested an abort */ ErrBusy = ErrNo(5) /* The database file is locked */ ErrLocked = ErrNo(6) /* A table in the database is locked */ ErrNomem = ErrNo(7) /* A malloc() failed */ ErrReadonly = ErrNo(8) /* Attempt to write a readonly database */ ErrInterrupt = ErrNo(9) /* Operation terminated by sqlite3_interrupt() */ ErrIoErr = ErrNo(10) /* Some kind of disk I/O error occurred */ ErrCorrupt = ErrNo(11) /* The database disk image is malformed */ ErrNotFound = ErrNo(12) /* Unknown opcode in sqlite3_file_control() */ ErrFull = ErrNo(13) /* Insertion failed because database is full */ ErrCantOpen = ErrNo(14) /* Unable to open the database file */ ErrProtocol = ErrNo(15) /* Database lock protocol error */ ErrEmpty = ErrNo(16) /* Database is empty */ ErrSchema = ErrNo(17) /* The database schema changed */ ErrTooBig = ErrNo(18) /* String or BLOB exceeds size limit */ ErrConstraint = ErrNo(19) /* Abort due to constraint violation */ ErrMismatch = ErrNo(20) /* Data type mismatch */ ErrMisuse = ErrNo(21) /* Library used incorrectly */ ErrNoLFS = ErrNo(22) /* Uses OS features not supported on host */ ErrAuth = ErrNo(23) /* Authorization denied */ ErrFormat = ErrNo(24) /* Auxiliary database format error */ ErrRange = ErrNo(25) /* 2nd parameter to sqlite3_bind out of range */ ErrNotADB = ErrNo(26) /* File opened that is not a database file */ ErrNotice = ErrNo(27) /* Notifications from sqlite3_log() */ ErrWarning = ErrNo(28) /* Warnings from sqlite3_log() */ )
result codes from http://www.sqlite.org/c3ref/c_abort.html
var ( ErrIoErrRead = ErrIoErr.Extend(1) ErrIoErrShortRead = ErrIoErr.Extend(2) ErrIoErrWrite = ErrIoErr.Extend(3) ErrIoErrFsync = ErrIoErr.Extend(4) ErrIoErrDirFsync = ErrIoErr.Extend(5) ErrIoErrTruncate = ErrIoErr.Extend(6) ErrIoErrFstat = ErrIoErr.Extend(7) ErrIoErrUnlock = ErrIoErr.Extend(8) ErrIoErrRDlock = ErrIoErr.Extend(9) ErrIoErrDelete = ErrIoErr.Extend(10) ErrIoErrBlocked = ErrIoErr.Extend(11) ErrIoErrNoMem = ErrIoErr.Extend(12) ErrIoErrAccess = ErrIoErr.Extend(13) ErrIoErrCheckReservedLock = ErrIoErr.Extend(14) ErrIoErrLock = ErrIoErr.Extend(15) ErrIoErrClose = ErrIoErr.Extend(16) ErrIoErrDirClose = ErrIoErr.Extend(17) ErrIoErrSHMOpen = ErrIoErr.Extend(18) ErrIoErrSHMSize = ErrIoErr.Extend(19) ErrIoErrSHMLock = ErrIoErr.Extend(20) ErrIoErrSHMMap = ErrIoErr.Extend(21) ErrIoErrSeek = ErrIoErr.Extend(22) ErrIoErrDeleteNoent = ErrIoErr.Extend(23) ErrIoErrMMap = ErrIoErr.Extend(24) ErrIoErrGetTempPath = ErrIoErr.Extend(25) ErrIoErrConvPath = ErrIoErr.Extend(26) ErrBusyRecovery = ErrBusy.Extend(1) ErrBusySnapshot = ErrBusy.Extend(2) ErrCantOpenNoTempDir = ErrCantOpen.Extend(1) ErrCantOpenIsDir = ErrCantOpen.Extend(2) ErrCantOpenFullPath = ErrCantOpen.Extend(3) ErrCantOpenConvPath = ErrCantOpen.Extend(4) ErrCorruptVTab = ErrCorrupt.Extend(1) ErrReadonlyRecovery = ErrReadonly.Extend(1) ErrReadonlyCantLock = ErrReadonly.Extend(2) ErrReadonlyRollback = ErrReadonly.Extend(3) ErrReadonlyDbMoved = ErrReadonly.Extend(4) ErrAbortRollback = ErrAbort.Extend(2) ErrConstraintCheck = ErrConstraint.Extend(1) ErrConstraintCommitHook = ErrConstraint.Extend(2) ErrConstraintForeignKey = ErrConstraint.Extend(3) ErrConstraintFunction = ErrConstraint.Extend(4) ErrConstraintNotNull = ErrConstraint.Extend(5) ErrConstraintPrimaryKey = ErrConstraint.Extend(6) ErrConstraintTrigger = ErrConstraint.Extend(7) ErrConstraintUnique = ErrConstraint.Extend(8) ErrConstraintVTab = ErrConstraint.Extend(9) ErrConstraintRowID = ErrConstraint.Extend(10) ErrNoticeRecoverWAL = ErrNotice.Extend(1) ErrNoticeRecoverRollback = ErrNotice.Extend(2) ErrWarningAutoIndex = ErrWarning.Extend(1) )
result codes from http://www.sqlite.org/c3ref/c_abort_rollback.html
var SQLiteTimestampFormats = []string{
"2006-01-02 15:04:05.999999999-07:00",
"2006-01-02T15:04:05.999999999-07:00",
"2006-01-02 15:04:05.999999999",
"2006-01-02T15:04:05.999999999",
"2006-01-02 15:04:05",
"2006-01-02T15:04:05",
"2006-01-02 15:04",
"2006-01-02T15:04",
"2006-01-02",
}
SQLiteTimestampFormats is timestamp formats understood by both this module and SQLite. The first format in the slice will be used when saving time values into the database. When parsing a string from a timestamp or datetime column, the formats are tried in order.
Functions ¶
func CryptEncoderSHA1 ¶ added in v1.8.0
CryptEncoderSHA1 encodes a password with SHA1
func CryptEncoderSHA256 ¶ added in v1.8.0
CryptEncoderSHA256 encodes a password with SHA256
func CryptEncoderSHA384 ¶ added in v1.8.0
CryptEncoderSHA384 encodes a password with SHA384
func CryptEncoderSHA512 ¶ added in v1.8.0
CryptEncoderSHA512 encodes a password with SHA512
func CryptEncoderSSHA1 ¶ added in v1.8.0
CryptEncoderSSHA1 encodes a password with SHA1 with the configured salt.
func CryptEncoderSSHA256 ¶ added in v1.8.0
CryptEncoderSSHA256 encodes a password with SHA256 with the configured salt
func CryptEncoderSSHA384 ¶ added in v1.8.0
CryptEncoderSSHA384 encodes a password with SHA384 with the configured salt
func CryptEncoderSSHA512 ¶ added in v1.8.0
CryptEncoderSSHA512 encodes a password with SHA512 with the configured salt
Types ¶
type ErrNoExtended ¶
type ErrNoExtended int
ErrNoExtended is extended errno.
func (ErrNoExtended) Error ¶
func (err ErrNoExtended) Error() string
Error return error message that is extended code.
type Error ¶
type Error struct {
Code ErrNo /* The error code returned by SQLite */
ExtendedCode ErrNoExtended /* The extended error code returned by SQLite */
SystemErrno syscall.Errno /* The system errno returned by the OS through SQLite, if applicable */
// contains filtered or unexported fields
}
Error implement sqlite error code.
type SQLiteBackup ¶
type SQLiteBackup struct {
// contains filtered or unexported fields
}
SQLiteBackup implement interface of Backup.
func (*SQLiteBackup) PageCount ¶
func (b *SQLiteBackup) PageCount() int
PageCount return count of pages.
func (*SQLiteBackup) Remaining ¶
func (b *SQLiteBackup) Remaining() int
Remaining return whether have the rest for backup.
func (*SQLiteBackup) Step ¶
func (b *SQLiteBackup) Step(p int) (bool, error)
Step to backs up for one step. Calls the underlying `sqlite3_backup_step` function. This function returns a boolean indicating if the backup is done and an error signalling any other error. Done is returned if the underlying C function returns SQLITE_DONE (Code 101)
type SQLiteConn ¶
type SQLiteConn struct {
// contains filtered or unexported fields
}
SQLiteConn implements driver.Conn.
func (*SQLiteConn) AuthEnabled ¶ added in v1.8.0
func (c *SQLiteConn) AuthEnabled() (exists bool)
AuthEnabled checks if the database is protected by user authentication
func (*SQLiteConn) AuthUserAdd ¶ added in v1.8.0
func (c *SQLiteConn) AuthUserAdd(username, password string, admin bool) error
AuthUserAdd can be used (by an admin user only) to create a new user. When called on a no-authentication-required database, this routine converts the database into an authentication- required database, automatically makes the added user an administrator, and logs in the current connection as that user. The AuthUserAdd only works for the "main" database, not for any ATTACH-ed databases. Any call to AuthUserAdd by a non-admin user results in an error.
func (*SQLiteConn) AuthUserChange ¶ added in v1.8.0
func (c *SQLiteConn) AuthUserChange(username, password string, admin bool) error
AuthUserChange can be used to change a users login credentials or admin privilege. Any user can change their own login credentials. Only an admin user can change another users login credentials or admin privilege setting. No user may change their own admin privilege setting.
func (*SQLiteConn) AuthUserDelete ¶ added in v1.8.0
func (c *SQLiteConn) AuthUserDelete(username string) error
AuthUserDelete can be used (by an admin user only) to delete a user. The currently logged-in user cannot be deleted, which guarantees that there is always an admin user and hence that the database cannot be converted into a no-authentication-required database.
func (*SQLiteConn) Authenticate ¶ added in v1.8.0
func (c *SQLiteConn) Authenticate(username, password string) error
Authenticate will perform an authentication of the provided username and password against the database.
If a database contains the SQLITE_USER table, then the call to Authenticate must be invoked with an appropriate username and password prior to enable read and write access to the database.
Return SQLITE_OK on success or SQLITE_ERROR if the username/password combination is incorrect or unknown.
If the SQLITE_USER table is not present in the database file, then this interface is a harmless no-op returnning SQLITE_OK.
func (*SQLiteConn) AutoCommit ¶
func (c *SQLiteConn) AutoCommit() bool
AutoCommit return which currently auto commit or not.
func (*SQLiteConn) Backup ¶
func (destConn *SQLiteConn) Backup(dest string, srcConn *SQLiteConn, src string) (*SQLiteBackup, error)
Backup make backup from src to dest.
SQLCipher note: source and destination must be keyed identically when encrypted — SQLite refuses mixed-codec backups at init ("backup is not supported with encrypted databases"), and a plain destination cannot receive encrypted pages. To decrypt or rekey, use ATTACH with a raw-key string and sqlcipher_export instead. After Close, Step returns Error{Code: ErrMisuse} and Remaining/PageCount return 0.
func (*SQLiteConn) Deserialize ¶ added in v1.15.0
func (c *SQLiteConn) Deserialize(b []byte, schema string) error
Deserialize causes the connection to disconnect from the current database and then re-open as an in-memory database based on the contents of the byte slice.
func (*SQLiteConn) ExecContext ¶ added in v1.2.0
func (c *SQLiteConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error)
ExecContext implement ExecerContext.
func (*SQLiteConn) GetFilename ¶ added in v1.8.0
func (c *SQLiteConn) GetFilename(schemaName string) string
GetFilename returns the absolute path to the file containing the requested schema. When passed an empty string, it will instead use the database's default schema: "main". See: sqlite3_db_filename, https://www.sqlite.org/c3ref/db_filename.html
func (*SQLiteConn) GetLimit ¶ added in v1.4.0
func (c *SQLiteConn) GetLimit(id int) int
GetLimit returns the current value of a run-time limit. See: sqlite3_limit, http://www.sqlite.org/c3ref/limit.html
func (*SQLiteConn) LoadExtension ¶ added in v1.2.0
func (c *SQLiteConn) LoadExtension(lib string, entry string) error
LoadExtension load the sqlite3 extension.
func (*SQLiteConn) Ping ¶ added in v1.2.0
func (c *SQLiteConn) Ping(ctx context.Context) error
Ping implement Pinger.
func (*SQLiteConn) Prepare ¶
func (c *SQLiteConn) Prepare(query string) (driver.Stmt, error)
Prepare the query string. Return a new statement.
func (*SQLiteConn) PrepareContext ¶ added in v1.2.0
PrepareContext implement ConnPrepareContext.
func (*SQLiteConn) QueryContext ¶ added in v1.2.0
func (c *SQLiteConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error)
QueryContext implement QueryerContext.
func (*SQLiteConn) RegisterAggregator ¶ added in v1.2.0
func (c *SQLiteConn) RegisterAggregator(name string, impl any, pure bool) error
RegisterAggregator makes a Go type available as a SQLite aggregation function.
Because aggregation is incremental, it's implemented in Go with a type that has 2 methods: func Step(values) accumulates one row of data into the accumulator, and func Done() ret finalizes and returns the aggregate value. "values" and "ret" may be any type supported by RegisterFunc.
RegisterAggregator takes as implementation a constructor function that constructs an instance of the aggregator type each time an aggregation begins. The constructor must return a pointer to a type, or an interface that implements Step() and Done().
The constructor function and the Step/Done methods may optionally return an error in addition to their other return values.
See _example/go_custom_funcs for a detailed example.
func (*SQLiteConn) RegisterAuthorizer ¶ added in v1.10.0
RegisterAuthorizer sets the authorizer for connection.
The parameters to the callback are the operation (one of the constants SQLITE_INSERT, SQLITE_DELETE, or SQLITE_UPDATE), and 1 to 3 arguments, depending on operation. More details see: https://www.sqlite.org/c3ref/c_alter_table.html
func (*SQLiteConn) RegisterCollation ¶ added in v1.3.0
RegisterCollation makes a Go function available as a collation.
cmp receives two UTF-8 strings, a and b. The result should be 0 if a==b, -1 if a < b, and +1 if a > b.
cmp 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.
If cmp does not obey these constraints, sqlite3's behavior is undefined when the collation is used.
func (*SQLiteConn) RegisterCommitHook ¶ added in v1.3.0
func (c *SQLiteConn) RegisterCommitHook(callback func() int)
RegisterCommitHook sets the commit hook for a connection.
If the callback returns non-zero the transaction will become a rollback.
If there is an existing commit hook for this connection, it will be removed. If callback is nil the existing hook (if any) will be removed without creating a new one.
func (*SQLiteConn) RegisterFunc ¶ added in v1.2.0
func (c *SQLiteConn) RegisterFunc(name string, impl any, pure bool) error
RegisterFunc makes a Go function available as a SQLite function.
The Go function can have arguments of the following types: any numeric type except complex, bool, []byte, string and any. any arguments are given the direct translation of the SQLite data type: int64 for INTEGER, float64 for FLOAT, []byte for BLOB, string for TEXT.
The function can additionally be variadic, as long as the type of the variadic argument is one of the above.
If pure is true. SQLite will assume that the function's return value depends only on its inputs, and make more aggressive optimizations in its queries.
See _example/go_custom_funcs for a detailed example.
func (*SQLiteConn) RegisterPreUpdateHook ¶ added in v1.12.0
func (c *SQLiteConn) RegisterPreUpdateHook(callback func(SQLitePreUpdateData))
RegisterPreUpdateHook sets the pre-update hook for a connection.
The callback is passed a SQLitePreUpdateData struct with the data for the update, as well as methods for fetching copies of impacted data.
If there is an existing preupdate hook for this connection, it will be removed. If callback is nil the existing hook (if any) will be removed without creating a new one.
func (*SQLiteConn) RegisterRollbackHook ¶ added in v1.3.0
func (c *SQLiteConn) RegisterRollbackHook(callback func())
RegisterRollbackHook sets the rollback hook for a connection.
If there is an existing rollback hook for this connection, it will be removed. If callback is nil the existing hook (if any) will be removed without creating a new one.
func (*SQLiteConn) RegisterUpdateHook ¶ added in v1.3.0
func (c *SQLiteConn) RegisterUpdateHook(callback func(int, string, string, int64))
RegisterUpdateHook sets the update hook for a connection.
The parameters to the callback are the operation (one of the constants SQLITE_INSERT, SQLITE_DELETE, or SQLITE_UPDATE), the database name, the table name, and the rowid.
If there is an existing update hook for this connection, it will be removed. If callback is nil the existing hook (if any) will be removed without creating a new one.
func (*SQLiteConn) Serialize ¶ added in v1.15.0
func (c *SQLiteConn) Serialize(schema string) ([]byte, error)
Serialize returns a byte slice that is a serialization of the database.
func (*SQLiteConn) SetFileControlInt ¶ added in v1.15.0
func (c *SQLiteConn) SetFileControlInt(dbName string, op int, arg int) error
SetFileControlInt invokes the xFileControl method on a given database. The dbName is the name of the database. It will default to "main" if left blank. The op is one of the opcodes prefixed by "SQLITE_FCNTL_". The arg argument and return code are both opcode-specific. Please see the SQLite documentation.
This method is not thread-safe as the returned error code can be changed by another call if invoked concurrently.
Use SetFileControlInt64 instead if the argument for the opcode is documented as a pointer to a sqlite3_int64.
See: sqlite3_file_control, https://www.sqlite.org/c3ref/file_control.html
func (*SQLiteConn) SetFileControlInt64 ¶ added in v1.15.0
func (c *SQLiteConn) SetFileControlInt64(dbName string, op int, arg int64) error
SetFileControlInt64 invokes the xFileControl method on a given database. The dbName is the name of the database. It will default to "main" if left blank. The op is one of the opcodes prefixed by "SQLITE_FCNTL_". The arg argument and return code are both opcode-specific. Please see the SQLite documentation.
This method is not thread-safe as the returned error code can be changed by another call if invoked concurrently.
Only use this method if the argument for the opcode is documented as a pointer to a sqlite3_int64.
See: sqlite3_file_control, https://www.sqlite.org/c3ref/file_control.html
func (*SQLiteConn) SetLimit ¶ added in v1.4.0
func (c *SQLiteConn) SetLimit(id int, newVal int) int
SetLimit changes the value of a run-time limits. Then this method returns the prior value of the limit. See: sqlite3_limit, http://www.sqlite.org/c3ref/limit.html
type SQLiteContext ¶ added in v1.3.0
type SQLiteContext C.sqlite3_context
SQLiteContext behave sqlite3_context
func (*SQLiteContext) ResultBlob ¶ added in v1.3.0
func (c *SQLiteContext) ResultBlob(b []byte)
ResultBlob sets the result of an SQL function. See: sqlite3_result_blob, http://sqlite.org/c3ref/result_blob.html
func (*SQLiteContext) ResultBool ¶ added in v1.3.0
func (c *SQLiteContext) ResultBool(b bool)
ResultBool sets the result of an SQL function.
func (*SQLiteContext) ResultDouble ¶ added in v1.3.0
func (c *SQLiteContext) ResultDouble(d float64)
ResultDouble sets the result of an SQL function. See: sqlite3_result_double, http://sqlite.org/c3ref/result_blob.html
func (*SQLiteContext) ResultInt ¶ added in v1.3.0
func (c *SQLiteContext) ResultInt(i int)
ResultInt sets the result of an SQL function. See: sqlite3_result_int, http://sqlite.org/c3ref/result_blob.html
func (*SQLiteContext) ResultInt64 ¶ added in v1.3.0
func (c *SQLiteContext) ResultInt64(i int64)
ResultInt64 sets the result of an SQL function. See: sqlite3_result_int64, http://sqlite.org/c3ref/result_blob.html
func (*SQLiteContext) ResultNull ¶ added in v1.3.0
func (c *SQLiteContext) ResultNull()
ResultNull sets the result of an SQL function. See: sqlite3_result_null, http://sqlite.org/c3ref/result_blob.html
func (*SQLiteContext) ResultText ¶ added in v1.3.0
func (c *SQLiteContext) ResultText(s string)
ResultText sets the result of an SQL function. See: sqlite3_result_text, http://sqlite.org/c3ref/result_blob.html
func (*SQLiteContext) ResultZeroblob ¶ added in v1.3.0
func (c *SQLiteContext) ResultZeroblob(n int)
ResultZeroblob sets the result of an SQL function. See: sqlite3_result_zeroblob, http://sqlite.org/c3ref/result_blob.html
type SQLiteDriver ¶
type SQLiteDriver struct {
Extensions []string
ConnectHook func(*SQLiteConn) error
// EncryptionKey sets the SQLCipher PRAGMA key as the very first SQL
// statement after sqlite3_open_v2(), before any other pragmas.
// Required for opening SQLCipher-encrypted databases. If empty, no
// PRAGMA key is executed (plain SQLite behavior).
EncryptionKey string
// EncryptionKeyBytes sets the SQLCipher PRAGMA key from raw bytes
// (32 bytes, or 48/80 with salt). The driver hex-encodes the key
// internally and zeroizes the intermediate PRAGMA buffer after each
// connection open. Takes precedence over EncryptionKey when non-empty.
// The caller retains ownership of the slice and must not modify it while
// connections may be opened; zero it after closing the *sql.DB.
EncryptionKeyBytes []byte
}
SQLiteDriver implements driver.Driver.
type SQLitePreUpdateData ¶ added in v1.12.0
type SQLitePreUpdateData struct {
Conn *SQLiteConn
Op int
DatabaseName string
TableName string
OldRowID int64
NewRowID int64
}
SQLitePreUpdateData represents all of the data available during a pre-update hook call.
type SQLiteResult ¶
type SQLiteResult struct {
// contains filtered or unexported fields
}
SQLiteResult implements sql.Result.
func (*SQLiteResult) LastInsertId ¶
func (r *SQLiteResult) LastInsertId() (int64, error)
LastInsertId return last inserted ID.
func (*SQLiteResult) RowsAffected ¶
func (r *SQLiteResult) RowsAffected() (int64, error)
RowsAffected return how many rows affected.
type SQLiteRows ¶
type SQLiteRows struct {
// contains filtered or unexported fields
}
SQLiteRows implements driver.Rows.
func (*SQLiteRows) ColumnTypeDatabaseTypeName ¶ added in v1.2.0
func (rc *SQLiteRows) ColumnTypeDatabaseTypeName(i int) string
ColumnTypeDatabaseTypeName implement RowsColumnTypeDatabaseTypeName.
func (*SQLiteRows) ColumnTypeNullable ¶ added in v1.2.0
func (rc *SQLiteRows) ColumnTypeNullable(i int) (nullable, ok bool)
ColumnTypeNullable implement RowsColumnTypeNullable.
func (*SQLiteRows) ColumnTypeScanType ¶ added in v1.2.0
func (rc *SQLiteRows) ColumnTypeScanType(i int) reflect.Type
ColumnTypeScanType implement RowsColumnTypeScanType.
func (*SQLiteRows) DeclTypes ¶ added in v1.2.0
func (rc *SQLiteRows) DeclTypes() []string
DeclTypes return column types.
type SQLiteStmt ¶
type SQLiteStmt struct {
// contains filtered or unexported fields
}
SQLiteStmt implements driver.Stmt.
func (*SQLiteStmt) ExecContext ¶ added in v1.2.0
func (s *SQLiteStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error)
ExecContext implement ExecerContext.
func (*SQLiteStmt) NumInput ¶
func (s *SQLiteStmt) NumInput() int
NumInput return a number of parameters.
func (*SQLiteStmt) QueryContext ¶ added in v1.2.0
func (s *SQLiteStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error)
QueryContext implement QueryerContext.
func (*SQLiteStmt) Readonly ¶ added in v1.15.0
func (s *SQLiteStmt) Readonly() bool
Readonly reports if this statement is considered readonly by SQLite.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
_example
|
|
|
custom_driver_name
command
|
|
|
custom_func
command
|
|
|
hook
command
|
|
|
json
command
|
|
|
limit
command
|
|
|
mod_regexp
command
|
|
|
mod_vtable
command
|
|
|
simple
command
|
|
|
trace
command
|
|
|
vtable
command
|
|
|
vtable_eponymous_only
command
|