• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.github/H28-Aug-2020-130102

_example/H28-Aug-2020-2,3061,956

upgrade/H28-Aug-2020-225175

.codecov.ymlH A D28-Aug-202052 54

.gitignoreH A D28-Aug-2020129 1511

LICENSEH A D28-Aug-20201.1 KiB2217

README.mdH A D28-Aug-202028.3 KiB591397

backup.goH A D28-Aug-20202.2 KiB8648

backup_test.goH A D28-Aug-20209.7 KiB295217

callback.goH A D28-Aug-202011.2 KiB393314

callback_test.goH A D28-Aug-20203 KiB10585

convert.goH A D28-Aug-20206.7 KiB300266

doc.goH A D28-Aug-20203.1 KiB1131

error.goH A D28-Aug-20206 KiB151117

error_test.goH A D28-Aug-20206.1 KiB276229

go.modH A D28-Aug-2020161 96

go.sumH A D28-Aug-20201.3 KiB1413

sqlite3-binding.cH A D28-Aug-20207.8 MiB230,878143,654

sqlite3-binding.hH A D28-Aug-2020570.6 KiB12,2761,697

sqlite3.goH A D28-Aug-202061.1 KiB2,1481,395

sqlite3_context.goH A D28-Aug-20203 KiB10451

sqlite3_func_crypt.goH A D28-Aug-20204 KiB12154

sqlite3_func_crypt_test.goH A D28-Aug-20201.9 KiB5847

sqlite3_go113_test.goH A D28-Aug-20201.5 KiB7557

sqlite3_go18.goH A D28-Aug-20201.9 KiB7145

sqlite3_go18_test.goH A D28-Aug-202011.3 KiB498417

sqlite3_libsqlite3.goH A D28-Aug-2020495 202

sqlite3_load_extension.goH A D28-Aug-20201.8 KiB8554

sqlite3_load_extension_omit.goH A D28-Aug-2020587 2511

sqlite3_load_extension_test.goH A D28-Aug-20201.3 KiB6447

sqlite3_opt_allow_uri_authority.goH A D28-Aug-2020364 162

sqlite3_opt_app_armor.goH A D28-Aug-2020370 172

sqlite3_opt_foreign_keys.goH A D28-Aug-2020360 162

sqlite3_opt_fts3_test.goH A D28-Aug-20203.2 KiB133103

sqlite3_opt_fts5.goH A D28-Aug-2020286 152

sqlite3_opt_icu.goH A D28-Aug-2020428 182

sqlite3_opt_introspect.goH A D28-Aug-2020355 162

sqlite3_opt_json1.goH A D28-Aug-2020283 142

sqlite3_opt_preupdate.goH A D28-Aug-2020513 219

sqlite3_opt_preupdate_hook.goH A D28-Aug-20203.2 KiB11363

sqlite3_opt_preupdate_hook_test.goH A D28-Aug-20203.2 KiB129102

sqlite3_opt_preupdate_omit.goH A D28-Aug-2020767 223

sqlite3_opt_secure_delete.goH A D28-Aug-2020354 162

sqlite3_opt_secure_delete_fast.goH A D28-Aug-2020362 162

sqlite3_opt_stat4.goH A D28-Aug-2020343 162

sqlite3_opt_unlock_notify.cH A D28-Aug-20201.7 KiB8670

sqlite3_opt_unlock_notify.goH A D28-Aug-20201.9 KiB9460

sqlite3_opt_unlock_notify_test.goH A D28-Aug-20204.7 KiB223186

sqlite3_opt_userauth.goH A D28-Aug-20207.4 KiB290109

sqlite3_opt_userauth_omit.goH A D28-Aug-20204.3 KiB15334

sqlite3_opt_userauth_test.goH A D28-Aug-202015 KiB644503

sqlite3_opt_vacuum_full.goH A D28-Aug-2020357 162

sqlite3_opt_vacuum_incr.goH A D28-Aug-2020357 162

sqlite3_opt_vtable.goH A D28-Aug-202017.5 KiB661332

sqlite3_opt_vtable_test.goH A D28-Aug-202010.9 KiB487387

sqlite3_other.goH A D28-Aug-2020376 182

sqlite3_solaris.goH A D28-Aug-2020275 152

sqlite3_test.goH A D28-Aug-202057.3 KiB2,3552,053

sqlite3_trace.goH A D28-Aug-20208.1 KiB288168

sqlite3_type.goH A D28-Aug-20201.6 KiB6333

sqlite3_usleep_windows.goH A D28-Aug-20201.1 KiB402

sqlite3_windows.goH A D28-Aug-2020419 192

sqlite3ext.hH A D28-Aug-202034.6 KiB664574

static_mock.goH A D28-Aug-20201.3 KiB3825

README.md

1go-sqlite3
2==========
3
4[![GoDoc Reference](https://godoc.org/github.com/mattn/go-sqlite3?status.svg)](http://godoc.org/github.com/mattn/go-sqlite3)
5[![GitHub Actions](https://github.com/mattn/go-sqlite3/workflows/Go/badge.svg)](https://github.com/mattn/go-sqlite3/actions?query=workflow%3AGo)
6[![Financial Contributors on Open Collective](https://opencollective.com/mattn-go-sqlite3/all/badge.svg?label=financial+contributors)](https://opencollective.com/mattn-go-sqlite3)
7[![codecov](https://codecov.io/gh/mattn/go-sqlite3/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-sqlite3)
8[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-sqlite3)](https://goreportcard.com/report/github.com/mattn/go-sqlite3)
9
10Latest stable version is v1.14 or later not v2.
11
12~~**NOTE:** The increase to v2 was an accident. There were no major changes or features.~~
13
14# Description
15
16sqlite3 driver conforming to the built-in database/sql interface
17
18Supported Golang version: See .github/workflows/go.yaml
19
20[This package follows the official Golang Release Policy.](https://golang.org/doc/devel/release.html#policy)
21
22### Overview
23
24- [go-sqlite3](#go-sqlite3)
25- [Description](#description)
26    - [Overview](#overview)
27- [Installation](#installation)
28- [API Reference](#api-reference)
29- [Connection String](#connection-string)
30  - [DSN Examples](#dsn-examples)
31- [Features](#features)
32    - [Usage](#usage)
33    - [Feature / Extension List](#feature--extension-list)
34- [Compilation](#compilation)
35  - [Android](#android)
36- [ARM](#arm)
37- [Cross Compile](#cross-compile)
38- [Google Cloud Platform](#google-cloud-platform)
39  - [Linux](#linux)
40    - [Alpine](#alpine)
41    - [Fedora](#fedora)
42    - [Ubuntu](#ubuntu)
43  - [Mac OSX](#mac-osx)
44  - [Windows](#windows)
45  - [Errors](#errors)
46- [User Authentication](#user-authentication)
47  - [Compile](#compile)
48  - [Usage](#usage-1)
49    - [Create protected database](#create-protected-database)
50    - [Password Encoding](#password-encoding)
51      - [Available Encoders](#available-encoders)
52    - [Restrictions](#restrictions)
53    - [Support](#support)
54    - [User Management](#user-management)
55      - [SQL](#sql)
56        - [Examples](#examples)
57      - [*SQLiteConn](#sqliteconn)
58    - [Attached database](#attached-database)
59- [Extensions](#extensions)
60  - [Spatialite](#spatialite)
61- [FAQ](#faq)
62- [License](#license)
63- [Author](#author)
64
65# Installation
66
67This package can be installed with the go get command:
68
69    go get github.com/mattn/go-sqlite3
70
71_go-sqlite3_ is *cgo* package.
72If you want to build your app using go-sqlite3, you need gcc.
73However, after you have built and installed _go-sqlite3_ with `go install github.com/mattn/go-sqlite3` (which requires gcc), you can build your app without relying on gcc in future.
74
75***Important: because this is a `CGO` enabled package you are required to set the environment variable `CGO_ENABLED=1` and have a `gcc` compile present within your path.***
76
77# API Reference
78
79API documentation can be found here: http://godoc.org/github.com/mattn/go-sqlite3
80
81Examples can be found under the [examples](./_example) directory
82
83# Connection String
84
85When creating a new SQLite database or connection to an existing one, with the file name additional options can be given.
86This is also known as a DSN string. (Data Source Name).
87
88Options are append after the filename of the SQLite database.
89The database filename and options are seperated by an `?` (Question Mark).
90Options should be URL-encoded (see [url.QueryEscape](https://golang.org/pkg/net/url/#QueryEscape)).
91
92This also applies when using an in-memory database instead of a file.
93
94Options can be given using the following format: `KEYWORD=VALUE` and multiple options can be combined with the `&` ampersand.
95
96This library supports dsn options of SQLite itself and provides additional options.
97
98Boolean values can be one of:
99* `0` `no` `false` `off`
100* `1` `yes` `true` `on`
101
102| Name | Key | Value(s) | Description |
103|------|-----|----------|-------------|
104| UA - Create | `_auth` | - | Create User Authentication, for more information see [User Authentication](#user-authentication) |
105| UA - Username | `_auth_user` | `string` | Username for User Authentication, for more information see [User Authentication](#user-authentication) |
106| UA - Password | `_auth_pass` | `string` | Password for User Authentication, for more information see [User Authentication](#user-authentication) |
107| UA - Crypt | `_auth_crypt` | <ul><li>SHA1</li><li>SSHA1</li><li>SHA256</li><li>SSHA256</li><li>SHA384</li><li>SSHA384</li><li>SHA512</li><li>SSHA512</li></ul> | Password encoder to use for User Authentication, for more information see [User Authentication](#user-authentication) |
108| UA - Salt | `_auth_salt` | `string` | Salt to use if the configure password encoder requires a salt, for User Authentication, for more information see [User Authentication](#user-authentication) |
109| Auto Vacuum | `_auto_vacuum` \| `_vacuum` | <ul><li>`0` \| `none`</li><li>`1` \| `full`</li><li>`2` \| `incremental`</li></ul> | For more information see [PRAGMA auto_vacuum](https://www.sqlite.org/pragma.html#pragma_auto_vacuum) |
110| Busy Timeout | `_busy_timeout` \| `_timeout` | `int` | Specify value for sqlite3_busy_timeout. For more information see [PRAGMA busy_timeout](https://www.sqlite.org/pragma.html#pragma_busy_timeout) |
111| Case Sensitive LIKE | `_case_sensitive_like` \| `_cslike` | `boolean` | For more information see [PRAGMA case_sensitive_like](https://www.sqlite.org/pragma.html#pragma_case_sensitive_like) |
112| Defer Foreign Keys | `_defer_foreign_keys` \| `_defer_fk` | `boolean` | For more information see [PRAGMA defer_foreign_keys](https://www.sqlite.org/pragma.html#pragma_defer_foreign_keys) |
113| Foreign Keys | `_foreign_keys` \| `_fk` | `boolean` | For more information see [PRAGMA foreign_keys](https://www.sqlite.org/pragma.html#pragma_foreign_keys) |
114| Ignore CHECK Constraints | `_ignore_check_constraints` | `boolean` | For more information see [PRAGMA ignore_check_constraints](https://www.sqlite.org/pragma.html#pragma_ignore_check_constraints) |
115| Immutable | `immutable` | `boolean` | For more information see [Immutable](https://www.sqlite.org/c3ref/open.html) |
116| Journal Mode | `_journal_mode` \| `_journal` | <ul><li>DELETE</li><li>TRUNCATE</li><li>PERSIST</li><li>MEMORY</li><li>WAL</li><li>OFF</li></ul> | For more information see [PRAGMA journal_mode](https://www.sqlite.org/pragma.html#pragma_journal_mode) |
117| Locking Mode | `_locking_mode` \| `_locking` | <ul><li>NORMAL</li><li>EXCLUSIVE</li></ul> | For more information see [PRAGMA locking_mode](https://www.sqlite.org/pragma.html#pragma_locking_mode) |
118| Mode | `mode` | <ul><li>ro</li><li>rw</li><li>rwc</li><li>memory</li></ul> | Access Mode of the database. For more information see [SQLite Open](https://www.sqlite.org/c3ref/open.html) |
119| Mutex Locking | `_mutex` | <ul><li>no</li><li>full</li></ul> | Specify mutex mode. |
120| Query Only | `_query_only` | `boolean` | For more information see [PRAGMA query_only](https://www.sqlite.org/pragma.html#pragma_query_only) |
121| Recursive Triggers | `_recursive_triggers` \| `_rt` | `boolean` | For more information see [PRAGMA recursive_triggers](https://www.sqlite.org/pragma.html#pragma_recursive_triggers) |
122| Secure Delete | `_secure_delete` | `boolean` \| `FAST` | For more information see [PRAGMA secure_delete](https://www.sqlite.org/pragma.html#pragma_secure_delete) |
123| Shared-Cache Mode | `cache` | <ul><li>shared</li><li>private</li></ul> | Set cache mode for more information see [sqlite.org](https://www.sqlite.org/sharedcache.html) |
124| Synchronous | `_synchronous` \| `_sync` | <ul><li>0 \| OFF</li><li>1 \| NORMAL</li><li>2 \| FULL</li><li>3 \| EXTRA</li></ul> | For more information see [PRAGMA synchronous](https://www.sqlite.org/pragma.html#pragma_synchronous) |
125| Time Zone Location | `_loc` | auto | Specify location of time format. |
126| Transaction Lock | `_txlock` | <ul><li>immediate</li><li>deferred</li><li>exclusive</li></ul> | Specify locking behavior for transactions. |
127| Writable Schema | `_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. |
128
129## DSN Examples
130
131```
132file:test.db?cache=shared&mode=memory
133```
134
135# Features
136
137This package allows additional configuration of features available within SQLite3 to be enabled or disabled by golang build constraints also known as build `tags`.
138
139[Click here for more information about build tags / constraints.](https://golang.org/pkg/go/build/#hdr-Build_Constraints)
140
141### Usage
142
143If you wish to build this library with additional extensions / features.
144Use the following command.
145
146```bash
147go build --tags "<FEATURE>"
148```
149
150For available features see the extension list.
151When using multiple build tags, all the different tags should be space delimted.
152
153Example:
154
155```bash
156go build --tags "icu json1 fts5 secure_delete"
157```
158
159### Feature / Extension List
160
161| Extension | Build Tag | Description |
162|-----------|-----------|-------------|
163| Additional Statistics | sqlite_stat4 | This option adds additional logic to the ANALYZE command and to the query planner that can help SQLite to chose a better query plan under certain situations. The ANALYZE command is enhanced to collect histogram data from all columns of every index and store that data in the sqlite_stat4 table.<br><br>The query planner will then use the histogram data to help it make better index choices. The downside of this compile-time option is that it violates the query planner stability guarantee making it more difficult to ensure consistent performance in mass-produced applications.<br><br>SQLITE_ENABLE_STAT4 is an enhancement of SQLITE_ENABLE_STAT3. STAT3 only recorded histogram data for the left-most column of each index whereas the STAT4 enhancement records histogram data from all columns of each index.<br><br>The SQLITE_ENABLE_STAT3 compile-time option is a no-op and is ignored if the SQLITE_ENABLE_STAT4 compile-time option is used |
164| Allow URI Authority | sqlite_allow_uri_authority | URI filenames normally throws an error if the authority section is not either empty or "localhost".<br><br>However, if SQLite is compiled with the SQLITE_ALLOW_URI_AUTHORITY compile-time option, then the URI is converted into a Uniform Naming Convention (UNC) filename and passed down to the underlying operating system that way |
165| App Armor | sqlite_app_armor | When defined, this C-preprocessor macro activates extra code that attempts to detect misuse of the SQLite API, such as passing in NULL pointers to required parameters or using objects after they have been destroyed. <br><br>App Armor is not available under `Windows`. |
166| Disable Load Extensions | sqlite_omit_load_extension | Loading of external extensions is enabled by default.<br><br>To disable extension loading add the build tag `sqlite_omit_load_extension`. |
167| Foreign Keys | sqlite_foreign_keys | This macro determines whether enforcement of foreign key constraints is enabled or disabled by default for new database connections.<br><br>Each database connection can always turn enforcement of foreign key constraints on and off and run-time using the foreign_keys pragma.<br><br>Enforcement of foreign key constraints is normally off by default, but if this compile-time parameter is set to 1, enforcement of foreign key constraints will be on by default |
168| Full Auto Vacuum | sqlite_vacuum_full | Set the default auto vacuum to full |
169| Incremental Auto Vacuum | sqlite_vacuum_incr | Set the default auto vacuum to incremental |
170| Full Text Search Engine | sqlite_fts5 | When this option is defined in the amalgamation, versions 5 of the full-text search engine (fts5) is added to the build automatically |
171|  International Components for Unicode | sqlite_icu | This option causes the International Components for Unicode or "ICU" extension to SQLite to be added to the build |
172| Introspect PRAGMAS | sqlite_introspect | This option adds some extra PRAGMA statements. <ul><li>PRAGMA function_list</li><li>PRAGMA module_list</li><li>PRAGMA pragma_list</li></ul> |
173| JSON SQL Functions | sqlite_json | When this option is defined in the amalgamation, the JSON SQL functions are added to the build automatically |
174| Pre Update Hook | sqlite_preupdate_hook | Registers a callback function that is invoked prior to each INSERT, UPDATE, and DELETE operation on a database table. |
175| Secure Delete | sqlite_secure_delete | This compile-time option changes the default setting of the secure_delete pragma.<br><br>When this option is not used, secure_delete defaults to off. When this option is present, secure_delete defaults to on.<br><br>The secure_delete setting causes deleted content to be overwritten with zeros. There is a small performance penalty since additional I/O must occur.<br><br>On the other hand, secure_delete can prevent fragments of sensitive information from lingering in unused parts of the database file after it has been deleted. See the documentation on the secure_delete pragma for additional information |
176| Secure Delete (FAST) | sqlite_secure_delete_fast | For more information see [PRAGMA secure_delete](https://www.sqlite.org/pragma.html#pragma_secure_delete) |
177| Tracing / Debug | sqlite_trace | Activate trace functions |
178| User Authentication | sqlite_userauth | SQLite User Authentication see [User Authentication](#user-authentication) for more information. |
179
180# Compilation
181
182This package requires `CGO_ENABLED=1` ennvironment variable if not set by default, and the presence of the `gcc` compiler.
183
184If you need to add additional CFLAGS or LDFLAGS to the build command, and do not want to modify this package. Then this can be achieved by  using the `CGO_CFLAGS` and `CGO_LDFLAGS` environment variables.
185
186## Android
187
188This package can be compiled for android.
189Compile with:
190
191```bash
192go build --tags "android"
193```
194
195For more information see [#201](https://github.com/mattn/go-sqlite3/issues/201)
196
197# ARM
198
199To compile for `ARM` use the following environment.
200
201```bash
202env CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ \
203    CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 \
204    go build -v
205```
206
207Additional information:
208- [#242](https://github.com/mattn/go-sqlite3/issues/242)
209- [#504](https://github.com/mattn/go-sqlite3/issues/504)
210
211# Cross Compile
212
213This library can be cross-compiled.
214
215In some cases you are required to the `CC` environment variable with the cross compiler.
216
217## Cross Compiling from MAC OSX
218The simplest way to cross compile from OSX is to use [xgo](https://github.com/karalabe/xgo).
219
220Steps:
221- Install [xgo](https://github.com/karalabe/xgo) (`go get github.com/karalabe/xgo`).
222- Ensure that your project is within your `GOPATH`.
223- Run `xgo local/path/to/project`.
224
225Please refer to the project's [README](https://github.com/karalabe/xgo/blob/master/README.md) for further information.
226
227# Google Cloud Platform
228
229Building on GCP is not possible because Google Cloud Platform does not allow `gcc` to be executed.
230
231Please work only with compiled final binaries.
232
233## Linux
234
235To compile this package on Linux you must install the development tools for your linux distribution.
236
237To compile under linux use the build tag `linux`.
238
239```bash
240go build --tags "linux"
241```
242
243If you wish to link directly to libsqlite3 then you can use the `libsqlite3` build tag.
244
245```
246go build --tags "libsqlite3 linux"
247```
248
249### Alpine
250
251When building in an `alpine` container run the following command before building.
252
253```
254apk add --update gcc musl-dev
255```
256
257### Fedora
258
259```bash
260sudo yum groupinstall "Development Tools" "Development Libraries"
261```
262
263### Ubuntu
264
265```bash
266sudo apt-get install build-essential
267```
268
269## Mac OSX
270
271OSX should have all the tools present to compile this package, if not install XCode this will add all the developers tools.
272
273Required dependency
274
275```bash
276brew install sqlite3
277```
278
279For OSX there is an additional package install which is required if you wish to build the `icu` extension.
280
281This additional package can be installed with `homebrew`.
282
283```bash
284brew upgrade icu4c
285```
286
287To compile for Mac OSX.
288
289```bash
290go build --tags "darwin"
291```
292
293If you wish to link directly to libsqlite3 then you can use the `libsqlite3` build tag.
294
295```
296go build --tags "libsqlite3 darwin"
297```
298
299Additional information:
300- [#206](https://github.com/mattn/go-sqlite3/issues/206)
301- [#404](https://github.com/mattn/go-sqlite3/issues/404)
302
303## Windows
304
305To compile this package on Windows OS you must have the `gcc` compiler installed.
306
3071) Install a Windows `gcc` toolchain.
3082) Add the `bin` folders to the Windows path if the installer did not do this by default.
3093) Open a terminal for the TDM-GCC toolchain, can be found in the Windows Start menu.
3104) Navigate to your project folder and run the `go build ...` command for this package.
311
312For example the TDM-GCC Toolchain can be found [here](https://sourceforge.net/projects/tdm-gcc/).
313
314## Errors
315
316- Compile error: `can not be used when making a shared object; recompile with -fPIC`
317
318    When receiving a compile time error referencing recompile with `-FPIC` then you
319    are probably using a hardend system.
320
321    You can compile the library on a hardend system with the following command.
322
323    ```bash
324    go build -ldflags '-extldflags=-fno-PIC'
325    ```
326
327    More details see [#120](https://github.com/mattn/go-sqlite3/issues/120)
328
329- Can't build go-sqlite3 on windows 64bit.
330
331    > Probably, you are using go 1.0, go1.0 has a problem when it comes to compiling/linking on windows 64bit.
332    > See: [#27](https://github.com/mattn/go-sqlite3/issues/27)
333
334- `go get github.com/mattn/go-sqlite3` throws compilation error.
335
336    `gcc` throws: `internal compiler error`
337
338    Remove the download repository from your disk and try re-install with:
339
340    ```bash
341    go install github.com/mattn/go-sqlite3
342    ```
343
344# User Authentication
345
346This package supports the SQLite User Authentication module.
347
348## Compile
349
350To use the User authentication module the package has to be compiled with the tag `sqlite_userauth`. See [Features](#features).
351
352## Usage
353
354### Create protected database
355
356To create a database protected by user authentication provide the following argument to the connection string `_auth`.
357This will enable user authentication within the database. This option however requires two additional arguments:
358
359- `_auth_user`
360- `_auth_pass`
361
362When `_auth` is present on the connection string user authentication will be enabled and the provided user will be created
363as an `admin` user. After initial creation, the parameter `_auth` has no effect anymore and can be omitted from the connection string.
364
365Example connection string:
366
367Create an user authentication database with user `admin` and password `admin`.
368
369`file:test.s3db?_auth&_auth_user=admin&_auth_pass=admin`
370
371Create an user authentication database with user `admin` and password `admin` and use `SHA1` for the password encoding.
372
373`file:test.s3db?_auth&_auth_user=admin&_auth_pass=admin&_auth_crypt=sha1`
374
375### Password Encoding
376
377The passwords within the user authentication module of SQLite are encoded with the SQLite function `sqlite_cryp`.
378This function uses a ceasar-cypher which is quite insecure.
379This library provides several additional password encoders which can be configured through the connection string.
380
381The password cypher can be configured with the key `_auth_crypt`. And if the configured password encoder also requires an
382salt this can be configured with `_auth_salt`.
383
384#### Available Encoders
385
386- SHA1
387- SSHA1 (Salted SHA1)
388- SHA256
389- SSHA256 (salted SHA256)
390- SHA384
391- SSHA384 (salted SHA384)
392- SHA512
393- SSHA512 (salted SHA512)
394
395### Restrictions
396
397Operations on the database regarding to user management can only be preformed by an administrator user.
398
399### Support
400
401The user authentication supports two kinds of users
402
403- administrators
404- regular users
405
406### User Management
407
408User management can be done by directly using the `*SQLiteConn` or by SQL.
409
410#### SQL
411
412The following sql functions are available for user management.
413
414| Function | Arguments | Description |
415|----------|-----------|-------------|
416| `authenticate` | username `string`, password `string` | Will authenticate an user, this is done by the connection; and should not be used manually. |
417| `auth_user_add` | username `string`, password `string`, admin `int` | This function will add an user to the database.<br>if the database is not protected by user authentication it will enable it. Argument `admin` is an integer identifying if the added user should be an administrator. Only Administrators can add administrators. |
418| `auth_user_change` | username `string`, password `string`, admin `int` | Function to modify an user. Users can change their own password, but only an administrator can change the administrator flag. |
419| `authUserDelete` | username `string` | Delete an user from the database. Can only be used by an administrator. The current logged in administrator cannot be deleted. This is to make sure their is always an administrator remaining. |
420
421These functions will return an integer.
422
423- 0 (SQLITE_OK)
424- 23 (SQLITE_AUTH) Failed to perform due to authentication or insufficient privileges
425
426##### Examples
427
428```sql
429// Autheticate user
430// Create Admin User
431SELECT auth_user_add('admin2', 'admin2', 1);
432
433// Change password for user
434SELECT auth_user_change('user', 'userpassword', 0);
435
436// Delete user
437SELECT user_delete('user');
438```
439
440#### *SQLiteConn
441
442The following functions are available for User authentication from the `*SQLiteConn`.
443
444| Function | Description |
445|----------|-------------|
446| `Authenticate(username, password string) error` | Authenticate user |
447| `AuthUserAdd(username, password string, admin bool) error` | Add user |
448| `AuthUserChange(username, password string, admin bool) error` | Modify user |
449| `AuthUserDelete(username string) error` | Delete user |
450
451### Attached database
452
453When using attached databases. SQLite will use the authentication from the `main` database for the attached database(s).
454
455# Extensions
456
457If you want your own extension to be listed here or you want to add a reference to an extension; please submit an Issue for this.
458
459## Spatialite
460
461Spatialite is available as an extension to SQLite, and can be used in combination with this repository.
462For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatialite).
463
464## extension-functions.c from SQLite3 Contrib
465
466extension-functions.c is available as an extension to SQLite, and provides the following functions:
467
468- Math: acos, asin, atan, atn2, atan2, acosh, asinh, atanh, difference, degrees, radians, cos, sin, tan, cot, cosh, sinh, tanh, coth, exp, log, log10, power, sign, sqrt, square, ceil, floor, pi.
469- String: replicate, charindex, leftstr, rightstr, ltrim, rtrim, trim, replace, reverse, proper, padl, padr, padc, strfilter.
470- Aggregate: stdev, variance, mode, median, lower_quartile, upper_quartile
471
472For an example see [dinedal/go-sqlite3-extension-functions](https://github.com/dinedal/go-sqlite3-extension-functions).
473
474# FAQ
475
476- Getting insert error while query is opened.
477
478    > You can pass some arguments into the connection string, for example, a URI.
479    > See: [#39](https://github.com/mattn/go-sqlite3/issues/39)
480
481- Do you want to cross compile? mingw on Linux or Mac?
482
483    > See: [#106](https://github.com/mattn/go-sqlite3/issues/106)
484    > See also: http://www.limitlessfx.com/cross-compile-golang-app-for-windows-from-linux.html
485
486- Want to get time.Time with current locale
487
488    Use `_loc=auto` in SQLite3 filename schema like `file:foo.db?_loc=auto`.
489
490- Can I use this in multiple routines concurrently?
491
492    Yes for readonly. But, No for writable. See [#50](https://github.com/mattn/go-sqlite3/issues/50), [#51](https://github.com/mattn/go-sqlite3/issues/51), [#209](https://github.com/mattn/go-sqlite3/issues/209), [#274](https://github.com/mattn/go-sqlite3/issues/274).
493
494- Why I'm getting `no such table` error?
495
496    Why is it racy if I use a `sql.Open("sqlite3", ":memory:")` database?
497
498    Each connection to `":memory:"` opens a brand new in-memory sql database, so if
499    the stdlib's sql engine happens to open another connection and you've only
500    specified `":memory:"`, that connection will see a brand new database. A
501    workaround is to use `"file::memory:?cache=shared"` (or `"file:foobar?mode=memory&cache=shared"`). Every
502    connection to this string will point to the same in-memory database.
503
504    Note that if the last database connection in the pool closes, the in-memory database is deleted. Make sure the [max idle connection limit](https://golang.org/pkg/database/sql/#DB.SetMaxIdleConns) is > 0, and the [connection lifetime](https://golang.org/pkg/database/sql/#DB.SetConnMaxLifetime) is infinite.
505
506    For more information see
507    * [#204](https://github.com/mattn/go-sqlite3/issues/204)
508    * [#511](https://github.com/mattn/go-sqlite3/issues/511)
509    * https://www.sqlite.org/sharedcache.html#shared_cache_and_in_memory_databases
510    * https://www.sqlite.org/inmemorydb.html#sharedmemdb
511
512- Reading from database with large amount of goroutines fails on OSX.
513
514    OS X limits OS-wide to not have more than 1000 files open simultaneously by default.
515
516    For more information see [#289](https://github.com/mattn/go-sqlite3/issues/289)
517
518- Trying to execute a `.` (dot) command throws an error.
519
520    Error: `Error: near ".": syntax error`
521    Dot command are part of SQLite3 CLI not of this library.
522
523    You need to implement the feature or call the sqlite3 cli.
524
525    More information see [#305](https://github.com/mattn/go-sqlite3/issues/305)
526
527- Error: `database is locked`
528
529    When you get a database is locked. Please use the following options.
530
531    Add to DSN: `cache=shared`
532
533    Example:
534    ```go
535    db, err := sql.Open("sqlite3", "file:locked.sqlite?cache=shared")
536    ```
537
538    Second please set the database connections of the SQL package to 1.
539
540    ```go
541    db.SetMaxOpenConns(1)
542    ```
543
544    More information see [#209](https://github.com/mattn/go-sqlite3/issues/209)
545
546## Contributors
547
548### Code Contributors
549
550This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
551<a href="https://github.com/mattn/go-sqlite3/graphs/contributors"><img src="https://opencollective.com/mattn-go-sqlite3/contributors.svg?width=890&button=false" /></a>
552
553### Financial Contributors
554
555Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/mattn-go-sqlite3/contribute)]
556
557#### Individuals
558
559<a href="https://opencollective.com/mattn-go-sqlite3"><img src="https://opencollective.com/mattn-go-sqlite3/individuals.svg?width=890"></a>
560
561#### Organizations
562
563Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/mattn-go-sqlite3/contribute)]
564
565<a href="https://opencollective.com/mattn-go-sqlite3/organization/0/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/0/avatar.svg"></a>
566<a href="https://opencollective.com/mattn-go-sqlite3/organization/1/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/1/avatar.svg"></a>
567<a href="https://opencollective.com/mattn-go-sqlite3/organization/2/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/2/avatar.svg"></a>
568<a href="https://opencollective.com/mattn-go-sqlite3/organization/3/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/3/avatar.svg"></a>
569<a href="https://opencollective.com/mattn-go-sqlite3/organization/4/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/4/avatar.svg"></a>
570<a href="https://opencollective.com/mattn-go-sqlite3/organization/5/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/5/avatar.svg"></a>
571<a href="https://opencollective.com/mattn-go-sqlite3/organization/6/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/6/avatar.svg"></a>
572<a href="https://opencollective.com/mattn-go-sqlite3/organization/7/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/7/avatar.svg"></a>
573<a href="https://opencollective.com/mattn-go-sqlite3/organization/8/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/8/avatar.svg"></a>
574<a href="https://opencollective.com/mattn-go-sqlite3/organization/9/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/9/avatar.svg"></a>
575
576# License
577
578MIT: http://mattn.mit-license.org/2018
579
580sqlite3-binding.c, sqlite3-binding.h, sqlite3ext.h
581
582The -binding suffix was added to avoid build failures under gccgo.
583
584In this repository, those files are an amalgamation of code that was copied from SQLite3. The license of that code is the same as the license of SQLite3.
585
586# Author
587
588Yasuhiro Matsumoto (a.k.a mattn)
589
590G.J.R. Timmer
591