mirror of https://github.com/mattn/go-sqlite3.git
go fmt ./...
This commit is contained in:
parent
c91bca4fb4
commit
1f0dc0a0ef
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build cgo
|
||||||
// +build cgo
|
// +build cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -360,11 +360,11 @@ func callbackRetGeneric(ctx *C.sqlite3_context, v reflect.Value) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
cb, err := callbackRet(v.Elem().Type())
|
cb, err := callbackRet(v.Elem().Type())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return cb(ctx, v.Elem())
|
return cb(ctx, v.Elem())
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackRet(typ reflect.Type) (callbackRetConverter, error) {
|
func callbackRet(typ reflect.Type) (callbackRetConverter, error) {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build cgo
|
||||||
// +build cgo
|
// +build cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
97
doc.go
97
doc.go
|
@ -5,63 +5,63 @@ This works as a driver for database/sql.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
|
|
||||||
go get github.com/mattn/go-sqlite3
|
go get github.com/mattn/go-sqlite3
|
||||||
|
|
||||||
Supported Types
|
# Supported Types
|
||||||
|
|
||||||
Currently, go-sqlite3 supports the following data types.
|
Currently, go-sqlite3 supports the following data types.
|
||||||
|
|
||||||
+------------------------------+
|
+------------------------------+
|
||||||
|go | sqlite3 |
|
|go | sqlite3 |
|
||||||
|----------|-------------------|
|
|----------|-------------------|
|
||||||
|nil | null |
|
|nil | null |
|
||||||
|int | integer |
|
|int | integer |
|
||||||
|int64 | integer |
|
|int64 | integer |
|
||||||
|float64 | float |
|
|float64 | float |
|
||||||
|bool | integer |
|
|bool | integer |
|
||||||
|[]byte | blob |
|
|[]byte | blob |
|
||||||
|string | text |
|
|string | text |
|
||||||
|time.Time | timestamp/datetime|
|
|time.Time | timestamp/datetime|
|
||||||
+------------------------------+
|
+------------------------------+
|
||||||
|
|
||||||
SQLite3 Extension
|
# SQLite3 Extension
|
||||||
|
|
||||||
You can write your own extension module for sqlite3. For example, below is an
|
You can write your own extension module for sqlite3. For example, below is an
|
||||||
extension for a Regexp matcher operation.
|
extension for a Regexp matcher operation.
|
||||||
|
|
||||||
#include <pcre.h>
|
#include <pcre.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sqlite3ext.h>
|
#include <sqlite3ext.h>
|
||||||
|
|
||||||
SQLITE_EXTENSION_INIT1
|
SQLITE_EXTENSION_INIT1
|
||||||
static void regexp_func(sqlite3_context *context, int argc, sqlite3_value **argv) {
|
static void regexp_func(sqlite3_context *context, int argc, sqlite3_value **argv) {
|
||||||
if (argc >= 2) {
|
if (argc >= 2) {
|
||||||
const char *target = (const char *)sqlite3_value_text(argv[1]);
|
const char *target = (const char *)sqlite3_value_text(argv[1]);
|
||||||
const char *pattern = (const char *)sqlite3_value_text(argv[0]);
|
const char *pattern = (const char *)sqlite3_value_text(argv[0]);
|
||||||
const char* errstr = NULL;
|
const char* errstr = NULL;
|
||||||
int erroff = 0;
|
int erroff = 0;
|
||||||
int vec[500];
|
int vec[500];
|
||||||
int n, rc;
|
int n, rc;
|
||||||
pcre* re = pcre_compile(pattern, 0, &errstr, &erroff, NULL);
|
pcre* re = pcre_compile(pattern, 0, &errstr, &erroff, NULL);
|
||||||
rc = pcre_exec(re, NULL, target, strlen(target), 0, 0, vec, 500);
|
rc = pcre_exec(re, NULL, target, strlen(target), 0, 0, vec, 500);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
sqlite3_result_error(context, errstr, 0);
|
sqlite3_result_error(context, errstr, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sqlite3_result_int(context, 1);
|
sqlite3_result_int(context, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
__declspec(dllexport)
|
__declspec(dllexport)
|
||||||
#endif
|
#endif
|
||||||
int sqlite3_extension_init(sqlite3 *db, char **errmsg,
|
int sqlite3_extension_init(sqlite3 *db, char **errmsg,
|
||||||
const sqlite3_api_routines *api) {
|
const sqlite3_api_routines *api) {
|
||||||
SQLITE_EXTENSION_INIT2(api);
|
SQLITE_EXTENSION_INIT2(api);
|
||||||
return sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8,
|
return sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8,
|
||||||
(void*)db, regexp_func, NULL, NULL);
|
(void*)db, regexp_func, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
It needs to be built as a so/dll shared library. And you need to register
|
It needs to be built as a so/dll shared library. And you need to register
|
||||||
the extension module like below.
|
the extension module like below.
|
||||||
|
@ -77,7 +77,7 @@ Then, you can use this extension.
|
||||||
|
|
||||||
rows, err := db.Query("select text from mytable where name regexp '^golang'")
|
rows, err := db.Query("select text from mytable where name regexp '^golang'")
|
||||||
|
|
||||||
Connection Hook
|
# Connection Hook
|
||||||
|
|
||||||
You can hook and inject your code when the connection is established by setting
|
You can hook and inject your code when the connection is established by setting
|
||||||
ConnectHook to get the SQLiteConn.
|
ConnectHook to get the SQLiteConn.
|
||||||
|
@ -101,7 +101,7 @@ You can also use database/sql.Conn.Raw (Go >= 1.13):
|
||||||
})
|
})
|
||||||
// if err != nil { ... }
|
// if err != nil { ... }
|
||||||
|
|
||||||
Go SQlite3 Extensions
|
# Go SQlite3 Extensions
|
||||||
|
|
||||||
If you want to register Go functions as SQLite extension functions
|
If you want to register Go functions as SQLite extension functions
|
||||||
you can make a custom driver by calling RegisterFunction from
|
you can make a custom driver by calling RegisterFunction from
|
||||||
|
@ -130,6 +130,5 @@ You can then use the custom driver by passing its name to sql.Open.
|
||||||
}
|
}
|
||||||
|
|
||||||
See the documentation of RegisterFunc for more details.
|
See the documentation of RegisterFunc for more details.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build cgo
|
||||||
// +build cgo
|
// +build cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
149
sqlite3.go
149
sqlite3.go
|
@ -975,103 +975,104 @@ func (c *SQLiteConn) begin(ctx context.Context) (driver.Tx, error) {
|
||||||
// The argument is may be either in parentheses or it may be separated from
|
// The argument is may be either in parentheses or it may be separated from
|
||||||
// the pragma name by an equal sign. The two syntaxes yield identical results.
|
// the pragma name by an equal sign. The two syntaxes yield identical results.
|
||||||
// In many pragmas, the argument is a boolean. The boolean can be one of:
|
// In many pragmas, the argument is a boolean. The boolean can be one of:
|
||||||
// 1 yes true on
|
//
|
||||||
// 0 no false off
|
// 1 yes true on
|
||||||
|
// 0 no false off
|
||||||
//
|
//
|
||||||
// You can specify a DSN string using a URI as the filename.
|
// You can specify a DSN string using a URI as the filename.
|
||||||
// test.db
|
|
||||||
// file:test.db?cache=shared&mode=memory
|
|
||||||
// :memory:
|
|
||||||
// file::memory:
|
|
||||||
//
|
//
|
||||||
// mode
|
// test.db
|
||||||
// Access mode of the database.
|
// file:test.db?cache=shared&mode=memory
|
||||||
// https://www.sqlite.org/c3ref/open.html
|
// :memory:
|
||||||
// Values:
|
// file::memory:
|
||||||
// - ro
|
|
||||||
// - rw
|
|
||||||
// - rwc
|
|
||||||
// - memory
|
|
||||||
//
|
//
|
||||||
// cache
|
// mode
|
||||||
// SQLite Shared-Cache Mode
|
// Access mode of the database.
|
||||||
// https://www.sqlite.org/sharedcache.html
|
// https://www.sqlite.org/c3ref/open.html
|
||||||
// Values:
|
// Values:
|
||||||
// - shared
|
// - ro
|
||||||
// - private
|
// - rw
|
||||||
|
// - rwc
|
||||||
|
// - memory
|
||||||
//
|
//
|
||||||
// immutable=Boolean
|
// cache
|
||||||
// The immutable parameter is a boolean query parameter that indicates
|
// SQLite Shared-Cache Mode
|
||||||
// that the database file is stored on read-only media. When immutable is set,
|
// https://www.sqlite.org/sharedcache.html
|
||||||
// SQLite assumes that the database file cannot be changed,
|
// Values:
|
||||||
// even by a process with higher privilege,
|
// - shared
|
||||||
// and so the database is opened read-only and all locking and change detection is disabled.
|
// - private
|
||||||
// Caution: Setting the immutable property on a database file that
|
//
|
||||||
// does in fact change can result in incorrect query results and/or SQLITE_CORRUPT errors.
|
// immutable=Boolean
|
||||||
|
// The immutable parameter is a boolean query parameter that indicates
|
||||||
|
// that the database file is stored on read-only media. When immutable is set,
|
||||||
|
// SQLite assumes that the database file cannot be changed,
|
||||||
|
// even by a process with higher privilege,
|
||||||
|
// and so the database is opened read-only and all locking and change detection is disabled.
|
||||||
|
// Caution: Setting the immutable property on a database file that
|
||||||
|
// does in fact change can result in incorrect query results and/or SQLITE_CORRUPT errors.
|
||||||
//
|
//
|
||||||
// go-sqlite3 adds the following query parameters to those used by SQLite:
|
// go-sqlite3 adds the following query parameters to those used by SQLite:
|
||||||
// _loc=XXX
|
|
||||||
// Specify location of time format. It's possible to specify "auto".
|
|
||||||
//
|
//
|
||||||
// _mutex=XXX
|
// _loc=XXX
|
||||||
// Specify mutex mode. XXX can be "no", "full".
|
// Specify location of time format. It's possible to specify "auto".
|
||||||
//
|
//
|
||||||
// _txlock=XXX
|
// _mutex=XXX
|
||||||
// Specify locking behavior for transactions. XXX can be "immediate",
|
// Specify mutex mode. XXX can be "no", "full".
|
||||||
// "deferred", "exclusive".
|
|
||||||
//
|
//
|
||||||
// _auto_vacuum=X | _vacuum=X
|
// _txlock=XXX
|
||||||
// 0 | none - Auto Vacuum disabled
|
// Specify locking behavior for transactions. XXX can be "immediate",
|
||||||
// 1 | full - Auto Vacuum FULL
|
// "deferred", "exclusive".
|
||||||
// 2 | incremental - Auto Vacuum Incremental
|
|
||||||
//
|
//
|
||||||
// _busy_timeout=XXX"| _timeout=XXX
|
// _auto_vacuum=X | _vacuum=X
|
||||||
// Specify value for sqlite3_busy_timeout.
|
// 0 | none - Auto Vacuum disabled
|
||||||
|
// 1 | full - Auto Vacuum FULL
|
||||||
|
// 2 | incremental - Auto Vacuum Incremental
|
||||||
//
|
//
|
||||||
// _case_sensitive_like=Boolean | _cslike=Boolean
|
// _busy_timeout=XXX"| _timeout=XXX
|
||||||
// https://www.sqlite.org/pragma.html#pragma_case_sensitive_like
|
// Specify value for sqlite3_busy_timeout.
|
||||||
// Default or disabled the LIKE operation is case-insensitive.
|
|
||||||
// When enabling this options behaviour of LIKE will become case-sensitive.
|
|
||||||
//
|
//
|
||||||
// _defer_foreign_keys=Boolean | _defer_fk=Boolean
|
// _case_sensitive_like=Boolean | _cslike=Boolean
|
||||||
// Defer Foreign Keys until outermost transaction is committed.
|
// https://www.sqlite.org/pragma.html#pragma_case_sensitive_like
|
||||||
|
// Default or disabled the LIKE operation is case-insensitive.
|
||||||
|
// When enabling this options behaviour of LIKE will become case-sensitive.
|
||||||
//
|
//
|
||||||
// _foreign_keys=Boolean | _fk=Boolean
|
// _defer_foreign_keys=Boolean | _defer_fk=Boolean
|
||||||
// Enable or disable enforcement of foreign keys.
|
// Defer Foreign Keys until outermost transaction is committed.
|
||||||
//
|
//
|
||||||
// _ignore_check_constraints=Boolean
|
// _foreign_keys=Boolean | _fk=Boolean
|
||||||
// This pragma enables or disables the enforcement of CHECK constraints.
|
// Enable or disable enforcement of foreign keys.
|
||||||
// The default setting is off, meaning that CHECK constraints are enforced by default.
|
|
||||||
//
|
//
|
||||||
// _journal_mode=MODE | _journal=MODE
|
// _ignore_check_constraints=Boolean
|
||||||
// Set journal mode for the databases associated with the current connection.
|
// This pragma enables or disables the enforcement of CHECK constraints.
|
||||||
// https://www.sqlite.org/pragma.html#pragma_journal_mode
|
// The default setting is off, meaning that CHECK constraints are enforced by default.
|
||||||
//
|
//
|
||||||
// _locking_mode=X | _locking=X
|
// _journal_mode=MODE | _journal=MODE
|
||||||
// Sets the database connection locking-mode.
|
// Set journal mode for the databases associated with the current connection.
|
||||||
// The locking-mode is either NORMAL or EXCLUSIVE.
|
// https://www.sqlite.org/pragma.html#pragma_journal_mode
|
||||||
// https://www.sqlite.org/pragma.html#pragma_locking_mode
|
|
||||||
//
|
//
|
||||||
// _query_only=Boolean
|
// _locking_mode=X | _locking=X
|
||||||
// The query_only pragma prevents all changes to database files when enabled.
|
// Sets the database connection locking-mode.
|
||||||
|
// The locking-mode is either NORMAL or EXCLUSIVE.
|
||||||
|
// https://www.sqlite.org/pragma.html#pragma_locking_mode
|
||||||
//
|
//
|
||||||
// _recursive_triggers=Boolean | _rt=Boolean
|
// _query_only=Boolean
|
||||||
// Enable or disable recursive triggers.
|
// The query_only pragma prevents all changes to database files when enabled.
|
||||||
//
|
//
|
||||||
// _secure_delete=Boolean|FAST
|
// _recursive_triggers=Boolean | _rt=Boolean
|
||||||
// When secure_delete is on, SQLite overwrites deleted content with zeros.
|
// Enable or disable recursive triggers.
|
||||||
// https://www.sqlite.org/pragma.html#pragma_secure_delete
|
|
||||||
//
|
//
|
||||||
// _synchronous=X | _sync=X
|
// _secure_delete=Boolean|FAST
|
||||||
// Change the setting of the "synchronous" flag.
|
// When secure_delete is on, SQLite overwrites deleted content with zeros.
|
||||||
// https://www.sqlite.org/pragma.html#pragma_synchronous
|
// https://www.sqlite.org/pragma.html#pragma_secure_delete
|
||||||
//
|
|
||||||
// _writable_schema=Boolean
|
|
||||||
// When this pragma is on, the SQLITE_MASTER tables in which database
|
|
||||||
// can be changed using ordinary UPDATE, INSERT, and DELETE statements.
|
|
||||||
// Warning: misuse of this pragma can easily result in a corrupt database file.
|
|
||||||
//
|
//
|
||||||
|
// _synchronous=X | _sync=X
|
||||||
|
// Change the setting of the "synchronous" flag.
|
||||||
|
// https://www.sqlite.org/pragma.html#pragma_synchronous
|
||||||
//
|
//
|
||||||
|
// _writable_schema=Boolean
|
||||||
|
// When this pragma is on, the SQLITE_MASTER tables in which database
|
||||||
|
// can be changed using ordinary UPDATE, INSERT, and DELETE statements.
|
||||||
|
// Warning: misuse of this pragma can easily result in a corrupt database file.
|
||||||
func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
if C.sqlite3_threadsafe() == 0 {
|
if C.sqlite3_threadsafe() == 0 {
|
||||||
return nil, errors.New("sqlite library was not compiled for thread-safe operation")
|
return nil, errors.New("sqlite library was not compiled for thread-safe operation")
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build go1.13 && cgo
|
||||||
// +build go1.13,cgo
|
// +build go1.13,cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build cgo
|
//go:build cgo && go1.8
|
||||||
// +build go1.8
|
// +build cgo,go1.8
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build go1.8 && cgo
|
||||||
// +build go1.8,cgo
|
// +build go1.8,cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build libsqlite3
|
||||||
// +build libsqlite3
|
// +build libsqlite3
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !sqlite_omit_load_extension
|
||||||
// +build !sqlite_omit_load_extension
|
// +build !sqlite_omit_load_extension
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_omit_load_extension
|
||||||
// +build sqlite_omit_load_extension
|
// +build sqlite_omit_load_extension
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !sqlite_omit_load_extension
|
||||||
// +build !sqlite_omit_load_extension
|
// +build !sqlite_omit_load_extension
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_allow_uri_authority
|
||||||
// +build sqlite_allow_uri_authority
|
// +build sqlite_allow_uri_authority
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build !windows
|
//go:build !windows && sqlite_app_armor
|
||||||
// +build sqlite_app_armor
|
// +build !windows,sqlite_app_armor
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build sqlite_column_metadata
|
||||||
// +build sqlite_column_metadata
|
// +build sqlite_column_metadata
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build sqlite_column_metadata
|
||||||
// +build sqlite_column_metadata
|
// +build sqlite_column_metadata
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_foreign_keys
|
||||||
// +build sqlite_foreign_keys
|
// +build sqlite_foreign_keys
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build cgo
|
||||||
// +build cgo
|
// +build cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_fts5 || fts5
|
||||||
// +build sqlite_fts5 fts5
|
// +build sqlite_fts5 fts5
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_icu || icu
|
||||||
// +build sqlite_icu icu
|
// +build sqlite_icu icu
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_introspect
|
||||||
// +build sqlite_introspect
|
// +build sqlite_introspect
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_math_functions
|
||||||
// +build sqlite_math_functions
|
// +build sqlite_math_functions
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build sqlite_math_functions
|
||||||
// +build sqlite_math_functions
|
// +build sqlite_math_functions
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build cgo
|
||||||
// +build cgo
|
// +build cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_preupdate_hook
|
||||||
// +build sqlite_preupdate_hook
|
// +build sqlite_preupdate_hook
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_preupdate_hook
|
||||||
// +build sqlite_preupdate_hook
|
// +build sqlite_preupdate_hook
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !sqlite_preupdate_hook && cgo
|
||||||
// +build !sqlite_preupdate_hook,cgo
|
// +build !sqlite_preupdate_hook,cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_secure_delete
|
||||||
// +build sqlite_secure_delete
|
// +build sqlite_secure_delete
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_secure_delete_fast
|
||||||
// +build sqlite_secure_delete_fast
|
// +build sqlite_secure_delete_fast
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build !libsqlite3 || sqlite_serialize
|
||||||
// +build !libsqlite3 sqlite_serialize
|
// +build !libsqlite3 sqlite_serialize
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build libsqlite3 && !sqlite_serialize
|
||||||
// +build libsqlite3,!sqlite_serialize
|
// +build libsqlite3,!sqlite_serialize
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//go:build !libsqlite3 || sqlite_serialize
|
||||||
// +build !libsqlite3 sqlite_serialize
|
// +build !libsqlite3 sqlite_serialize
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_stat4
|
||||||
// +build sqlite_stat4
|
// +build sqlite_stat4
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build cgo
|
//go:build cgo && sqlite_unlock_notify
|
||||||
// +build sqlite_unlock_notify
|
// +build cgo,sqlite_unlock_notify
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_unlock_notify
|
||||||
// +build sqlite_unlock_notify
|
// +build sqlite_unlock_notify
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_userauth
|
||||||
// +build sqlite_userauth
|
// +build sqlite_userauth
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
@ -79,7 +80,7 @@ var (
|
||||||
// If a database contains the SQLITE_USER table, then the
|
// If a database contains the SQLITE_USER table, then the
|
||||||
// call to Authenticate must be invoked with an
|
// call to Authenticate must be invoked with an
|
||||||
// appropriate username and password prior to enable read and write
|
// appropriate username and password prior to enable read and write
|
||||||
//access to the database.
|
// access to the database.
|
||||||
//
|
//
|
||||||
// Return SQLITE_OK on success or SQLITE_ERROR if the username/password
|
// Return SQLITE_OK on success or SQLITE_ERROR if the username/password
|
||||||
// combination is incorrect or unknown.
|
// combination is incorrect or unknown.
|
||||||
|
@ -103,9 +104,10 @@ func (c *SQLiteConn) Authenticate(username, password string) error {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authenticate(username, password string) int {
|
func (c *SQLiteConn) authenticate(username, password string) int {
|
||||||
// Allocate C Variables
|
// Allocate C Variables
|
||||||
cuser := C.CString(username)
|
cuser := C.CString(username)
|
||||||
|
@ -155,9 +157,10 @@ func (c *SQLiteConn) AuthUserAdd(username, password string, admin bool) error {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authUserAdd(username, password string, admin int) int {
|
func (c *SQLiteConn) authUserAdd(username, password string, admin int) int {
|
||||||
// Allocate C Variables
|
// Allocate C Variables
|
||||||
cuser := C.CString(username)
|
cuser := C.CString(username)
|
||||||
|
@ -207,9 +210,10 @@ func (c *SQLiteConn) AuthUserChange(username, password string, admin bool) error
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authUserChange(username, password string, admin int) int {
|
func (c *SQLiteConn) authUserChange(username, password string, admin int) int {
|
||||||
// Allocate C Variables
|
// Allocate C Variables
|
||||||
cuser := C.CString(username)
|
cuser := C.CString(username)
|
||||||
|
@ -249,9 +253,10 @@ func (c *SQLiteConn) AuthUserDelete(username string) error {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authUserDelete(username string) int {
|
func (c *SQLiteConn) authUserDelete(username string) int {
|
||||||
// Allocate C Variables
|
// Allocate C Variables
|
||||||
cuser := C.CString(username)
|
cuser := C.CString(username)
|
||||||
|
@ -280,8 +285,9 @@ func (c *SQLiteConn) AuthEnabled() (exists bool) {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// 0 - Disabled
|
//
|
||||||
// 1 - Enabled
|
// 0 - Disabled
|
||||||
|
// 1 - Enabled
|
||||||
func (c *SQLiteConn) authEnabled() int {
|
func (c *SQLiteConn) authEnabled() int {
|
||||||
return int(C._sqlite3_auth_enabled(c.db))
|
return int(C._sqlite3_auth_enabled(c.db))
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !sqlite_userauth
|
||||||
// +build !sqlite_userauth
|
// +build !sqlite_userauth
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
@ -17,7 +18,7 @@ import (
|
||||||
// If a database contains the SQLITE_USER table, then the
|
// If a database contains the SQLITE_USER table, then the
|
||||||
// call to Authenticate must be invoked with an
|
// call to Authenticate must be invoked with an
|
||||||
// appropriate username and password prior to enable read and write
|
// appropriate username and password prior to enable read and write
|
||||||
//access to the database.
|
// access to the database.
|
||||||
//
|
//
|
||||||
// Return SQLITE_OK on success or SQLITE_ERROR if the username/password
|
// Return SQLITE_OK on success or SQLITE_ERROR if the username/password
|
||||||
// combination is incorrect or unknown.
|
// combination is incorrect or unknown.
|
||||||
|
@ -34,9 +35,10 @@ func (c *SQLiteConn) Authenticate(username, password string) error {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authenticate(username, password string) int {
|
func (c *SQLiteConn) authenticate(username, password string) int {
|
||||||
// NOOP
|
// NOOP
|
||||||
return 0
|
return 0
|
||||||
|
@ -65,9 +67,10 @@ func (c *SQLiteConn) AuthUserAdd(username, password string, admin bool) error {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authUserAdd(username, password string, admin int) int {
|
func (c *SQLiteConn) authUserAdd(username, password string, admin int) int {
|
||||||
// NOOP
|
// NOOP
|
||||||
return 0
|
return 0
|
||||||
|
@ -96,9 +99,10 @@ func (c *SQLiteConn) AuthUserChange(username, password string, admin bool) error
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authUserChange(username, password string, admin int) int {
|
func (c *SQLiteConn) authUserChange(username, password string, admin int) int {
|
||||||
// NOOP
|
// NOOP
|
||||||
return 0
|
return 0
|
||||||
|
@ -122,9 +126,10 @@ func (c *SQLiteConn) AuthUserDelete(username string) error {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// C.SQLITE_OK (0)
|
//
|
||||||
// C.SQLITE_ERROR (1)
|
// C.SQLITE_OK (0)
|
||||||
// C.SQLITE_AUTH (23)
|
// C.SQLITE_ERROR (1)
|
||||||
|
// C.SQLITE_AUTH (23)
|
||||||
func (c *SQLiteConn) authUserDelete(username string) int {
|
func (c *SQLiteConn) authUserDelete(username string) int {
|
||||||
// NOOP
|
// NOOP
|
||||||
return 0
|
return 0
|
||||||
|
@ -142,8 +147,9 @@ func (c *SQLiteConn) AuthEnabled() (exists bool) {
|
||||||
// It is however exported for usage within SQL by the user.
|
// It is however exported for usage within SQL by the user.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// 0 - Disabled
|
//
|
||||||
// 1 - Enabled
|
// 0 - Disabled
|
||||||
|
// 1 - Enabled
|
||||||
func (c *SQLiteConn) authEnabled() int {
|
func (c *SQLiteConn) authEnabled() int {
|
||||||
// NOOP
|
// NOOP
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_userauth
|
||||||
// +build sqlite_userauth
|
// +build sqlite_userauth
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_vacuum_full
|
||||||
// +build sqlite_vacuum_full
|
// +build sqlite_vacuum_full
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_vacuum_incr
|
||||||
// +build sqlite_vacuum_incr
|
// +build sqlite_vacuum_incr
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_vtable || vtable
|
||||||
// +build sqlite_vtable vtable
|
// +build sqlite_vtable vtable
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !windows
|
||||||
// +build !windows
|
// +build !windows
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build solaris
|
||||||
// +build solaris
|
// +build solaris
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -1128,7 +1128,7 @@ func TestQueryer(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error("Failed to db.Query:", err)
|
t.Error("Failed to db.Query:", err)
|
||||||
}
|
}
|
||||||
if id != n + 1 {
|
if id != n+1 {
|
||||||
t.Error("Failed to db.Query: not matched results")
|
t.Error("Failed to db.Query: not matched results")
|
||||||
}
|
}
|
||||||
n = n + 1
|
n = n + 1
|
||||||
|
@ -1497,28 +1497,28 @@ func TestAggregatorRegistration(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type mode struct {
|
type mode struct {
|
||||||
counts map[any]int
|
counts map[any]int
|
||||||
top any
|
top any
|
||||||
topCount int
|
topCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
func newMode() *mode {
|
func newMode() *mode {
|
||||||
return &mode{
|
return &mode{
|
||||||
counts: map[any]int{},
|
counts: map[any]int{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mode) Step(x any) {
|
func (m *mode) Step(x any) {
|
||||||
m.counts[x]++
|
m.counts[x]++
|
||||||
c := m.counts[x]
|
c := m.counts[x]
|
||||||
if c > m.topCount {
|
if c > m.topCount {
|
||||||
m.top = x
|
m.top = x
|
||||||
m.topCount = c
|
m.topCount = c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mode) Done() any {
|
func (m *mode) Done() any {
|
||||||
return m.top
|
return m.top
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAggregatorRegistration_GenericReturn(t *testing.T) {
|
func TestAggregatorRegistration_GenericReturn(t *testing.T) {
|
||||||
|
@ -1534,19 +1534,19 @@ func TestAggregatorRegistration_GenericReturn(t *testing.T) {
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
_, err = db.Exec("create table foo (department integer, profits integer)")
|
_, err = db.Exec("create table foo (department integer, profits integer)")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Failed to create table:", err)
|
t.Fatal("Failed to create table:", err)
|
||||||
}
|
}
|
||||||
_, err = db.Exec("insert into foo values (1, 10), (1, 20), (1, 45), (2, 42), (2, 115), (2, 20)")
|
_, err = db.Exec("insert into foo values (1, 10), (1, 20), (1, 45), (2, 42), (2, 115), (2, 20)")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Failed to insert records:", err)
|
t.Fatal("Failed to insert records:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var mode int
|
var mode int
|
||||||
err = db.QueryRow("select mode(profits) from foo").Scan(&mode)
|
err = db.QueryRow("select mode(profits) from foo").Scan(&mode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("MODE query error:", err)
|
t.Fatal("MODE query error:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mode != 20 {
|
if mode != 20 {
|
||||||
t.Fatal("Got incorrect mode. Wanted 20, got: ", mode)
|
t.Fatal("Got incorrect mode. Wanted 20, got: ", mode)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build sqlite_trace || trace
|
||||||
// +build sqlite_trace trace
|
// +build sqlite_trace trace
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build cgo
|
||||||
// +build cgo
|
// +build cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build windows
|
||||||
// +build windows
|
// +build windows
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Use of this source code is governed by an MIT-style
|
// Use of this source code is governed by an MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !cgo
|
||||||
// +build !cgo
|
// +build !cgo
|
||||||
|
|
||||||
package sqlite3
|
package sqlite3
|
||||||
|
@ -28,10 +29,10 @@ type (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (SQLiteDriver) Open(s string) (driver.Conn, error) { return nil, errorMsg }
|
func (SQLiteDriver) Open(s string) (driver.Conn, error) { return nil, errorMsg }
|
||||||
func (c *SQLiteConn) RegisterAggregator(string, any, bool) error { return errorMsg }
|
func (c *SQLiteConn) RegisterAggregator(string, any, bool) error { return errorMsg }
|
||||||
func (c *SQLiteConn) RegisterAuthorizer(func(int, string, string, string) int) {}
|
func (c *SQLiteConn) RegisterAuthorizer(func(int, string, string, string) int) {}
|
||||||
func (c *SQLiteConn) RegisterCollation(string, func(string, string) int) error { return errorMsg }
|
func (c *SQLiteConn) RegisterCollation(string, func(string, string) int) error { return errorMsg }
|
||||||
func (c *SQLiteConn) RegisterCommitHook(func() int) {}
|
func (c *SQLiteConn) RegisterCommitHook(func() int) {}
|
||||||
func (c *SQLiteConn) RegisterFunc(string, any, bool) error { return errorMsg }
|
func (c *SQLiteConn) RegisterFunc(string, any, bool) error { return errorMsg }
|
||||||
func (c *SQLiteConn) RegisterRollbackHook(func()) {}
|
func (c *SQLiteConn) RegisterRollbackHook(func()) {}
|
||||||
func (c *SQLiteConn) RegisterUpdateHook(func(int, string, string, int64)) {}
|
func (c *SQLiteConn) RegisterUpdateHook(func(int, string, string, int64)) {}
|
||||||
|
|
Loading…
Reference in New Issue