mirror of
https://github.com/glebarez/sqlite.git
synced 2025-10-05 15:47:03 +08:00
Merge branch 'master' into orig
This commit is contained in:
12
.github/dependabot.yml
vendored
12
.github/dependabot.yml
vendored
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
version: 2
|
version: 2
|
||||||
updates:
|
updates:
|
||||||
- package-ecosystem: "github-actions"
|
- package-ecosystem: gomod
|
||||||
directory: "/"
|
directory: /
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: daily
|
||||||
- package-ecosystem: "gomod"
|
- package-ecosystem: github-actions
|
||||||
directory: "/"
|
directory: /
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: daily
|
52
.github/workflows/badge-gorm-tests.yml
vendored
Normal file
52
.github/workflows/badge-gorm-tests.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
name: Badge GORM tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["GORM-tests"]
|
||||||
|
branches: [master]
|
||||||
|
types: [completed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-gorm-tests-badge:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Download artifact
|
||||||
|
uses: dawidd6/action-download-artifact@v2
|
||||||
|
with:
|
||||||
|
workflow: gorm-tests.yml
|
||||||
|
workflow_conclusion: completed
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Prepare badge data
|
||||||
|
working-directory: Linux-1.17-tests.out
|
||||||
|
run: |
|
||||||
|
echo "tests_passed=$(cat ./*.out | grep PASS | wc -l)" >> $GITHUB_ENV
|
||||||
|
echo "tests_skipped=$(cat ./*.out | grep SKIP | wc -l)" >> $GITHUB_ENV
|
||||||
|
echo "tests_failed=$(cat ./*.out | grep FAIL | wc -l)" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Make success badge
|
||||||
|
if: ${{ env.tests_failed == '0' }}
|
||||||
|
uses: schneegans/dynamic-badges-action@v1.4.0
|
||||||
|
with:
|
||||||
|
auth: ${{ secrets.GIST_SECRET }}
|
||||||
|
gistID: fb4d23f63d866b3e1e58b26d2f5ed01f
|
||||||
|
filename: badge-gorm-tests.json
|
||||||
|
label: GORM tests
|
||||||
|
message: "Passed: ${{ env.tests_passed }} | Failed: ${{ env.tests_failed }}"
|
||||||
|
color: 54a158
|
||||||
|
style: for-the-badge
|
||||||
|
labelColor: 25292d
|
||||||
|
|
||||||
|
- name: Make fail badge
|
||||||
|
if: ${{ env.tests_failed != '0' }}
|
||||||
|
uses: schneegans/dynamic-badges-action@v1.4.0
|
||||||
|
with:
|
||||||
|
auth: ${{ secrets.GIST_SECRET }}
|
||||||
|
gistID: fb4d23f63d866b3e1e58b26d2f5ed01f
|
||||||
|
filename: badge-gorm-tests.json
|
||||||
|
label: GORM tests
|
||||||
|
message: "Passed: ${{ env.tests_passed }} | Failed: ${{ env.tests_failed }}"
|
||||||
|
color: 96232b
|
||||||
|
style: for-the-badge
|
||||||
|
labelColor: 25292d
|
41
.github/workflows/badge-sqlite-version.yml
vendored
Normal file
41
.github/workflows/badge-sqlite-version.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
name: Badge Sqlite version
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["GORM-tests"]
|
||||||
|
branches: [master]
|
||||||
|
types: [completed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-sqlite-version-badge:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: 1.18
|
||||||
|
|
||||||
|
- name: Check out code into the Go module directory
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: go mod package cache
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ~/go/pkg/mod
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('go.mod') }}
|
||||||
|
|
||||||
|
- name: request sqlite_version()
|
||||||
|
run: echo "sqlite_version=$(go test . -run '^TestSQLiteVersion$' -v | grep sqlite_version | tr -s ' ' | cut -d' ' -f3)" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Make version badge
|
||||||
|
uses: schneegans/dynamic-badges-action@v1.4.0
|
||||||
|
with:
|
||||||
|
auth: ${{ secrets.GIST_SECRET }}
|
||||||
|
gistID: fb4d23f63d866b3e1e58b26d2f5ed01f
|
||||||
|
filename: badge-sqlite-version.json
|
||||||
|
label: SQLite
|
||||||
|
message: "${{ env.sqlite_version }}"
|
||||||
|
color: 2269d3
|
||||||
|
style: for-the-badge
|
||||||
|
labelColor: 25292d
|
15
.github/workflows/ci.yml
vendored
15
.github/workflows/ci.yml
vendored
@@ -2,21 +2,28 @@ name: CI
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- 'orig'
|
||||||
pull_request:
|
pull_request:
|
||||||
|
branches-ignore:
|
||||||
|
- 'orig'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Test
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
go: ['1.19', '1.18', '1.17']
|
go: ['1.19','1.18','1.17']
|
||||||
platform: [ubuntu-latest] # can not run in windows OS
|
platform: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v3
|
uses: actions/setup-go@v3
|
||||||
with:
|
with:
|
||||||
go-version: ${{ matrix.go }}
|
go-version: ${{ matrix.go }}
|
||||||
|
check-latest: true
|
||||||
|
- run: go version
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Test
|
- name: Test
|
||||||
run: go test -v -cover .
|
run: go test -v -cover .
|
||||||
|
72
.github/workflows/gorm-tests.yml
vendored
Normal file
72
.github/workflows/gorm-tests.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
name: GORM-tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- 'orig'
|
||||||
|
pull_request:
|
||||||
|
branches-ignore:
|
||||||
|
- 'orig'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# Label of the container job
|
||||||
|
gorm-test:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go: ['1.19','1.18','1.17']
|
||||||
|
platform: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go }}
|
||||||
|
check-latest: true
|
||||||
|
- run: go version
|
||||||
|
|
||||||
|
- name: Check out this repo
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
path: sqlite
|
||||||
|
|
||||||
|
- name: Check out GORM repo
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: go-gorm/gorm
|
||||||
|
path: gorm
|
||||||
|
|
||||||
|
- name: go mod package cache
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ~/go/pkg/mod
|
||||||
|
key: ${{ runner.os }}-go-${{ matrix.go }}-${{ hashFiles('**/go.mod') }}
|
||||||
|
|
||||||
|
- name: patch gorm test to use this repo as SQLite driver
|
||||||
|
working-directory: ./gorm/tests
|
||||||
|
shell: bash
|
||||||
|
# note portable syntax of sed (both GNU and BSD version work with -i.bak cheat, see https://stackoverflow.com/a/44864004
|
||||||
|
run: |
|
||||||
|
sed -i.bak '/gorm.io\/driver\/sqlite/d' go.mod
|
||||||
|
echo "replace github.com/glebarez/sqlite => ../../sqlite/" >> go.mod
|
||||||
|
sed -i.bak 's:gorm.io/driver/sqlite:github.com/glebarez/sqlite:g' tests_test.go
|
||||||
|
go mod tidy
|
||||||
|
cat go.mod
|
||||||
|
|
||||||
|
- name: run gorm tests
|
||||||
|
working-directory: ./gorm/tests
|
||||||
|
shell: bash
|
||||||
|
run: go test -race -v -count=1 ./... 2>&1 > ${{ runner.os }}-${{ matrix.go }}-tests.out
|
||||||
|
|
||||||
|
- name: view failed tests result
|
||||||
|
if: ${{ failure() }}
|
||||||
|
working-directory: ./gorm/tests
|
||||||
|
shell: bash
|
||||||
|
run: grep FAIL -A10 -B3 ${{ runner.os }}-${{ matrix.go }}-tests.out || true
|
||||||
|
|
||||||
|
- name: save tests results
|
||||||
|
if: ${{ always() }}
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ runner.os }}-${{ matrix.go }}-tests.out
|
||||||
|
path: ./gorm/tests/${{ runner.os }}-${{ matrix.go }}-tests.out
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
vendor/
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"go.buildOnSave": "off"
|
||||||
|
}
|
69
README.md
69
README.md
@@ -1,24 +1,11 @@
|
|||||||
# GORM Sqlite Driver
|

|
||||||
|

|
||||||
|
<br>[](https://hits.seeyoufarm.com)
|
||||||
|
# Pure-Go SQLite driver for GORM
|
||||||
|
Pure-go (without cgo) implementation of SQLite driver for [GORM](https://gorm.io/)<br><br>
|
||||||
|
This driver has SQLite embedded, you don't need to install one separately.
|
||||||
|
|
||||||

|
# Usage
|
||||||
|
|
||||||
## USAGE
|
|
||||||
|
|
||||||
```go
|
|
||||||
import (
|
|
||||||
"gorm.io/driver/sqlite"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
// github.com/mattn/go-sqlite3
|
|
||||||
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
|
|
||||||
```
|
|
||||||
|
|
||||||
Checkout [https://gorm.io](https://gorm.io) for details.
|
|
||||||
|
|
||||||
### Pure go Sqlite Driver
|
|
||||||
|
|
||||||
checkout [https://github.com/glebarez/sqlite](https://github.com/glebarez/sqlite) for details
|
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
@@ -26,5 +13,45 @@ import (
|
|||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
|
db, err := gorm.Open(sqlite.Open("sqlite.db"), &gorm.Config{})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### In-memory DB example
|
||||||
|
```go
|
||||||
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Foreign-key constraint activation
|
||||||
|
Foreign-key constraint is disabled by default in SQLite. To activate it, use connection URL parameter:
|
||||||
|
```go
|
||||||
|
db, err := gorm.Open(sqlite.Open(":memory:?_pragma=foreign_keys(1)"), &gorm.Config{})
|
||||||
|
```
|
||||||
|
More info: [https://www.sqlite.org/foreignkeys.html](https://www.sqlite.org/foreignkeys.html)
|
||||||
|
|
||||||
|
# FAQ
|
||||||
|
## How is this better than standard GORM SQLite driver?
|
||||||
|
The [standard GORM driver for SQLite](https://github.com/go-gorm/sqlite) has one major drawback: it is based on a [Go-bindings of SQLite C-source](https://github.com/mattn/go-sqlite3) (this is called [cgo](https://go.dev/blog/cgo)). This fact imposes following restrictions on Go developers:
|
||||||
|
- to build and run your code, you will need a C compiler installed on a machine
|
||||||
|
- SQLite has many features that need to be enabled at compile time (e.g. [json support](https://www.sqlite.org/json1.html)). If you plan to use those, you will have to include proper build tags for every ```go``` command to work properly (```go run```, ```go test```, etc.).
|
||||||
|
- Because of C-compiler requirement, you can't build your Go code inside tiny stripped containers like (golang-alpine)
|
||||||
|
- Building on GCP is not possible because Google Cloud Platform does not allow gcc to be executed.
|
||||||
|
|
||||||
|
**Instead**, this driver is based on pure-Go implementation of SQLite (https://gitlab.com/cznic/sqlite), which is basically an original SQLite C-source AST, translated into Go! So, you may be sure you're using the original SQLite implementation under the hood.
|
||||||
|
|
||||||
|
## Is this tested good ?
|
||||||
|
Yes, The CI pipeline of this driver employs [whole test base](https://github.com/go-gorm/gorm/tree/master/tests) of GORM, which includes more than **12k** tests (see badge on the page-top). Testing is run against latest major releases of Go:
|
||||||
|
- 1.17
|
||||||
|
- 1.18
|
||||||
|
- 1.19
|
||||||
|
|
||||||
|
In following environments:
|
||||||
|
- Linux
|
||||||
|
- Windows
|
||||||
|
- MacOS
|
||||||
|
|
||||||
|
## Is it fast?
|
||||||
|
Well, it's slower than CGo implementation, but not terribly. See the [bechmark of underlying pure-Go driver vs CGo implementation](https://github.com/glebarez/go-sqlite/tree/master/benchmark).
|
||||||
|
|
||||||
|
## Included features
|
||||||
|
- JSON1 (https://www.sqlite.org/json1.html)
|
||||||
|
- Math functions (https://www.sqlite.org/lang_mathfunc.html)
|
||||||
|
6
go.mod
6
go.mod
@@ -1,9 +1,9 @@
|
|||||||
module gorm.io/driver/sqlite
|
module github.com/glebarez/sqlite
|
||||||
|
|
||||||
go 1.14
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/glebarez/go-sqlite v1.19.1
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.14.15
|
|
||||||
gorm.io/gorm v1.24.0
|
gorm.io/gorm v1.24.0
|
||||||
)
|
)
|
||||||
|
72
go.sum
72
go.sum
@@ -1,9 +1,79 @@
|
|||||||
|
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
|
github.com/glebarez/go-sqlite v1.19.1 h1:o2XhjyR8CQ2m84+bVz10G0cabmG0tY4sIMiCbrcUTrY=
|
||||||
|
github.com/glebarez/go-sqlite v1.19.1/go.mod h1:9AykawGIyIcxoSfpYWiX1SgTNHTNsa/FVc75cDkbp4M=
|
||||||
|
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||||
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
|
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||||
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gorm.io/gorm v1.24.0 h1:j/CoiSm6xpRpmzbFJsQHYj+I8bGYWLXVHeYEyyKlF74=
|
gorm.io/gorm v1.24.0 h1:j/CoiSm6xpRpmzbFJsQHYj+I8bGYWLXVHeYEyyKlF74=
|
||||||
gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA=
|
gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA=
|
||||||
|
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||||
|
modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
|
||||||
|
modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20=
|
||||||
|
modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20=
|
||||||
|
modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI=
|
||||||
|
modernc.org/ccgo/v3 v3.0.0-20220910160915-348f15de615a/go.mod h1:8p47QxPkdugex9J4n9P2tLZ9bK01yngIVp00g4nomW0=
|
||||||
|
modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo=
|
||||||
|
modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
||||||
|
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
||||||
|
modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0=
|
||||||
|
modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA=
|
||||||
|
modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0=
|
||||||
|
modernc.org/libc v1.19.0 h1:bXyVhGQg6KIClTr8FMVIDPl7jtbcs7aS5WP7vLDaxPs=
|
||||||
|
modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0=
|
||||||
|
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
|
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
|
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
|
||||||
|
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
|
modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
|
||||||
|
modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
|
||||||
|
modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk=
|
||||||
|
modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
|
||||||
|
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||||
|
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||||
|
modernc.org/sqlite v1.19.1 h1:8xmS5oLnZtAK//vnd4aTVj8VOeTAccEFOtUnIzfSw+4=
|
||||||
|
modernc.org/sqlite v1.19.1/go.mod h1:UfQ83woKMaPW/ZBruK0T7YaFCrI+IE0LeWVY6pmnVms=
|
||||||
|
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
||||||
|
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
|
||||||
|
modernc.org/tcl v1.14.0/go.mod h1:gQ7c1YPMvryCHCcmf8acB6VPabE59QBeuRQLL7cTUlM=
|
||||||
|
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||||
|
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||||
|
modernc.org/z v1.6.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ=
|
||||||
|
@@ -8,7 +8,8 @@ import (
|
|||||||
|
|
||||||
"gorm.io/gorm/callbacks"
|
"gorm.io/gorm/callbacks"
|
||||||
|
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/glebarez/go-sqlite"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
"gorm.io/gorm/logger"
|
"gorm.io/gorm/logger"
|
||||||
@@ -17,7 +18,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// DriverName is the default driver name for SQLite.
|
// DriverName is the default driver name for SQLite.
|
||||||
const DriverName = "sqlite3"
|
const DriverName = "sqlite"
|
||||||
|
|
||||||
type Dialector struct {
|
type Dialector struct {
|
||||||
DriverName string
|
DriverName string
|
||||||
|
@@ -5,7 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/mattn/go-sqlite3"
|
sqlite "github.com/glebarez/go-sqlite"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -17,20 +17,9 @@ func TestDialector(t *testing.T) {
|
|||||||
|
|
||||||
// Register the custom SQlite3 driver.
|
// Register the custom SQlite3 driver.
|
||||||
// It will have one custom function called "my_custom_function".
|
// It will have one custom function called "my_custom_function".
|
||||||
|
|
||||||
sql.Register(CustomDriverName,
|
sql.Register(CustomDriverName,
|
||||||
&sqlite3.SQLiteDriver{
|
&sqlite.Driver{},
|
||||||
ConnectHook: func(conn *sqlite3.SQLiteConn) error {
|
|
||||||
// Define the `concat` function, since we use this elsewhere.
|
|
||||||
err := conn.RegisterFunc(
|
|
||||||
"my_custom_function",
|
|
||||||
func(arguments ...interface{}) (string, error) {
|
|
||||||
return "my-result", nil // Return a string value.
|
|
||||||
},
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
return err
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
rows := []struct {
|
rows := []struct {
|
||||||
@@ -67,16 +56,16 @@ func TestDialector(t *testing.T) {
|
|||||||
},
|
},
|
||||||
openSuccess: false,
|
openSuccess: false,
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
description: "Explicit default driver, custom function",
|
// description: "Explicit default driver, custom function",
|
||||||
dialector: &Dialector{
|
// dialector: &Dialector{
|
||||||
DriverName: DriverName,
|
// DriverName: DriverName,
|
||||||
DSN: InMemoryDSN,
|
// DSN: InMemoryDSN,
|
||||||
},
|
// },
|
||||||
openSuccess: true,
|
// openSuccess: true,
|
||||||
query: "SELECT my_custom_function()",
|
// query: "SELECT my_custom_function()",
|
||||||
querySuccess: false,
|
// querySuccess: false,
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
description: "Custom driver",
|
description: "Custom driver",
|
||||||
dialector: &Dialector{
|
dialector: &Dialector{
|
||||||
@@ -87,16 +76,16 @@ func TestDialector(t *testing.T) {
|
|||||||
query: "SELECT 1",
|
query: "SELECT 1",
|
||||||
querySuccess: true,
|
querySuccess: true,
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
description: "Custom driver, custom function",
|
// description: "Custom driver, custom function",
|
||||||
dialector: &Dialector{
|
// dialector: &Dialector{
|
||||||
DriverName: CustomDriverName,
|
// DriverName: CustomDriverName,
|
||||||
DSN: InMemoryDSN,
|
// DSN: InMemoryDSN,
|
||||||
},
|
// },
|
||||||
openSuccess: true,
|
// openSuccess: true,
|
||||||
query: "SELECT my_custom_function()",
|
// query: "SELECT my_custom_function()",
|
||||||
querySuccess: true,
|
// querySuccess: true,
|
||||||
},
|
// },
|
||||||
}
|
}
|
||||||
for rowIndex, row := range rows {
|
for rowIndex, row := range rows {
|
||||||
t.Run(fmt.Sprintf("%d/%s", rowIndex, row.description), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%d/%s", rowIndex, row.description), func(t *testing.T) {
|
||||||
|
23
sqlite_version_test.go
Normal file
23
sqlite_version_test.go
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package sqlite
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSQLiteVersion(t *testing.T) {
|
||||||
|
var version string
|
||||||
|
|
||||||
|
db, err := sql.Open(DriverName, ":memory:")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
row := db.QueryRow("select sqlite_version()")
|
||||||
|
if row.Scan(&version) != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Log(version)
|
||||||
|
}
|
Reference in New Issue
Block a user