Skip to content

Commit 07e4b92

Browse files
committed
新增支持 SQLite 数据库。
1 parent ac10225 commit 07e4b92

9 files changed

Lines changed: 1421 additions & 11 deletions

File tree

README.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
## 功能简介
99

10-
一个面向原生 SQL 的数据库操作库,在保持 SQL 语句灵活性的同时,通过统一的接口设计、便捷的参数处理和轻量级的 ORM 映射能力,让数据库操作更加优雅高效。目前支持 MySQL SQL Server。
10+
一个面向原生 SQL 的数据库操作库,在保持 SQL 语句灵活性的同时,通过统一的接口设计、便捷的参数处理和轻量级的 ORM 映射能力,让数据库操作更加优雅高效。目前支持 MySQL / SQLite / SQL Server
1111

1212
### 核心特性
1313

@@ -35,7 +35,7 @@ go get github.com/bunnier/sqlmer
3535

3636
### 连接数据库
3737

38-
首先,让我们创建一个数据库连接。sqlmer 提供了统一的接口设计,无论是 MySQL 还是 SQL Server,都可以使用相同的 API 进行操作。
38+
首先,让我们创建一个数据库连接。sqlmer 提供了统一的接口设计,无论是 MySQL / SQLite / SQL Server,都可以使用相同的 API 进行操作。
3939

4040
```go
4141
var (
@@ -49,7 +49,7 @@ var (
4949
)
5050

5151
func init() {
52-
// 这里使用 MySQL (mysql 包)做示范,SQL Server (mssql 包)也提供了一致的 API 和相应的参数解析逻辑。
52+
// 这里使用 MySQL (mysql 包)做示范,其它支持的数据库也提供了一致的 API 和相应的参数解析逻辑。
5353
var err error
5454
if dbClient, err = mysql.NewMySqlDbClient(
5555
"test:testpwd@tcp(127.0.0.1:3306)/test",
@@ -318,6 +318,16 @@ func decoratedDemo() {
318318
| date / datetime / timestamp | time.Time |
319319
| bit | []byte |
320320

321+
### SQLite
322+
323+
| DB datatype | Go datatype |
324+
|--------------------------------|-------------|
325+
| text / varchar / char / clob | string |
326+
| integer / int / tiny int / ... | int64 |
327+
| real / double / float | float64 |
328+
| time / date / datetime | time.Time |
329+
| blob | []byte |
330+
321331
### SQL Server
322332

323333
| DB datatype | Go datatype |
@@ -338,7 +348,8 @@ func decoratedDemo() {
338348

339349
{
340350
"mysql": "testuser:testuser@tcp(127.0.0.1:3306)/test",
341-
"sqlserver": "server=127.0.0.1; database=test; user id=testuser;password=testuser;"
351+
"sqlserver": "server=127.0.0.1; database=test; user id=testuser;password=testuser;",
352+
"sqlite": "test.db"
342353
}
343354

344355
2. 如果第 1 步配置的连接字符串有 DDL 权限,可通过调用 `go run ./internal/testcmd/main.go -a PREPARE` 来同时准备 MySQL / SQL Server 环境,如果没有 DDL 权限可自行直接执行 `internal/testenv/*_prepare.sql` 准备环境;

go.mod

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
module github.com/bunnier/sqlmer
22

3-
go 1.20
3+
go 1.24.0
44

55
require (
66
github.com/cmstar/go-conv v0.6.3
77
github.com/denisenkom/go-mssqldb v0.12.3
88
github.com/go-sql-driver/mysql v1.6.0
9-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
9+
golang.org/x/sync v0.16.0
10+
modernc.org/sqlite v1.41.0
1011
)
1112

1213
require (
14+
github.com/dustin/go-humanize v1.0.1 // indirect
1315
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
1416
github.com/golang-sql/sqlexp v0.1.0 // indirect
17+
github.com/google/uuid v1.6.0 // indirect
18+
github.com/mattn/go-isatty v0.0.20 // indirect
19+
github.com/ncruces/go-strftime v0.1.9 // indirect
20+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
1521
golang.org/x/crypto v0.35.0 // indirect
22+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
23+
golang.org/x/sys v0.36.0 // indirect
24+
modernc.org/libc v1.66.10 // indirect
25+
modernc.org/mathutil v1.7.1 // indirect
26+
modernc.org/memory v1.11.0 // indirect
1627
)

go.sum

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,39 +8,86 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
88
github.com/denisenkom/go-mssqldb v0.12.3 h1:pBSGx9Tq67pBOTLmxNuirNTeB8Vjmf886Kx+8Y+8shw=
99
github.com/denisenkom/go-mssqldb v0.12.3/go.mod h1:k0mtMFOnU+AihqFxPMiF05rtiDrorD1Vrm1KEz5hxDo=
1010
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
11+
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
12+
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
1113
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
1214
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
1315
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
1416
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
1517
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
1618
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
1719
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
20+
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
21+
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
22+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
23+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
24+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
25+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
1826
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
27+
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
28+
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
1929
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
2030
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
31+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
32+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
2133
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
2234
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
2335
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
2436
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
2537
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
2638
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
2739
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
40+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
41+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
42+
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
43+
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
2844
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
2945
golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
3046
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
31-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
32-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
47+
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
48+
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
3349
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
3450
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3551
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3652
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3753
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
54+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
55+
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
56+
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
3857
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
3958
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
4059
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
4160
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
61+
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
62+
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
4263
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
4364
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
4465
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
4566
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
4667
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
68+
modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4=
69+
modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
70+
modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A=
71+
modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q=
72+
modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA=
73+
modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc=
74+
modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
75+
modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
76+
modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
77+
modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
78+
modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A=
79+
modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I=
80+
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
81+
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
82+
modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
83+
modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
84+
modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
85+
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
86+
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
87+
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
88+
modernc.org/sqlite v1.41.0 h1:bJXddp4ZpsqMsNN1vS0jWo4IJTZzb8nWpcgvyCFG9Ck=
89+
modernc.org/sqlite v1.41.0/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE=
90+
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
91+
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
92+
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
93+
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=

internal/testenv/conf.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/bunnier/sqlmer"
1111
"github.com/bunnier/sqlmer/mssql"
1212
"github.com/bunnier/sqlmer/mysql"
13+
"github.com/bunnier/sqlmer/sqlite"
1314
)
1415

1516
type schema struct {
@@ -18,19 +19,22 @@ type schema struct {
1819
}
1920

2021
const (
21-
DefaultMysqlConnection = "testuser:testuser@tcp(127.0.0.1:3306)/test"
22-
DefaultMssqlConnection = "server=127.0.0.1.124; database=test; user id=testuser;password=testuser;"
23-
DefaultTimeout = 15 * time.Second
22+
DefaultMysqlConnection = "testuser:testuser@tcp(127.0.0.1:3306)/test"
23+
DefaultMssqlConnection = "server=127.0.0.1.124; database=test; user id=testuser;password=testuser;"
24+
DefaultSqliteConnection = "test.db"
25+
DefaultTimeout = 15 * time.Second
2426
)
2527

2628
type Conf struct {
2729
Mysql string
2830
SqlServer string
31+
Sqlite string
2932
}
3033

3134
var TestConf Conf = Conf{
3235
Mysql: DefaultMysqlConnection,
3336
SqlServer: DefaultMssqlConnection,
37+
Sqlite: DefaultSqliteConnection,
3438
}
3539

3640
// 加载自定义配置。若给定一个 .json 文件,则读取该文件;否则认为给定的是一个目录,读取该目录下的 .db.json 文件。
@@ -48,6 +52,7 @@ func TryInitConfig(path string) {
4852
var conf struct {
4953
Mysql string `json:"mysql"`
5054
SqlServer string `json:"sqlserver"`
55+
Sqlite string `json:"sqlite"`
5156
}
5257
err = json.Unmarshal(content, &conf)
5358
if err != nil {
@@ -57,6 +62,9 @@ func TryInitConfig(path string) {
5762

5863
TestConf.Mysql = conf.Mysql
5964
TestConf.SqlServer = conf.SqlServer
65+
if conf.Sqlite != "" {
66+
TestConf.Sqlite = conf.Sqlite
67+
}
6068
}
6169

6270
func NewMysqlClient() (sqlmer.DbClient, error) {
@@ -74,3 +82,11 @@ func NewSqlServerClient() (sqlmer.DbClient, error) {
7482
sqlmer.WithExecTimeout(DefaultTimeout),
7583
)
7684
}
85+
86+
func NewSqliteClient() (sqlmer.DbClient, error) {
87+
return sqlite.NewSqliteDbClient(
88+
TestConf.Sqlite,
89+
sqlmer.WithConnTimeout(DefaultTimeout),
90+
sqlmer.WithExecTimeout(DefaultTimeout),
91+
)
92+
}

internal/testenv/sqlite_schema.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package testenv
2+
3+
import "database/sql"
4+
5+
var sqliteSchemas []schema = []schema{
6+
{
7+
Create: `
8+
CREATE TABLE go_TypeTest (
9+
id INTEGER PRIMARY KEY AUTOINCREMENT,
10+
intTest INTEGER NOT NULL,
11+
tinyintTest INTEGER NOT NULL,
12+
smallIntTest INTEGER NOT NULL,
13+
bigIntTest INTEGER NOT NULL,
14+
unsignedTest INTEGER NOT NULL,
15+
varcharTest VARCHAR(10) NOT NULL,
16+
charTest CHAR(10) NOT NULL,
17+
charTextTest TEXT NOT NULL,
18+
dateTest DATE NOT NULL,
19+
dateTimeTest DATETIME NOT NULL,
20+
timestampTest TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
21+
floatTest FLOAT NOT NULL,
22+
doubleTest DOUBLE NOT NULL,
23+
decimalTest DECIMAL(15, 10) NOT NULL,
24+
bitTest INTEGER NOT NULL,
25+
26+
nullIntTest INTEGER NULL,
27+
nullTinyintTest INTEGER NULL,
28+
nullSmallIntTest INTEGER NULL,
29+
nullBigIntTest INTEGER NULL,
30+
nullUnsignedTest INTEGER NULL,
31+
nullVarcharTest VARCHAR(10) NULL,
32+
nullCharTest CHAR(10) NULL,
33+
nullTextTest TEXT NULL,
34+
nullDateTest DATE NULL,
35+
nullDateTimeTest DATETIME NULL,
36+
nullTimestampTest TIMESTAMP NULL,
37+
nullFloatTest FLOAT NULL,
38+
nullDoubleTest DOUBLE NULL,
39+
40+
nullDecimalTest DECIMAL(15, 10) NULL,
41+
nullBitTest INTEGER NULL
42+
);
43+
`,
44+
Drop: `DROP TABLE go_TypeTest`,
45+
},
46+
{
47+
Create: `
48+
INSERT INTO go_TypeTest(intTest, tinyintTest, smallIntTest, bigIntTest, unsignedTest, varcharTest, charTest, charTextTest, dateTest, dateTimeTest, timestampTest, floatTest, doubleTest, decimalTest, bitTest)
49+
VALUES (1, 1, 1, 1, 1, '行1', '行1char', '行1text','2021-07-01','2021-07-01 15:38:50.425','2021-07-01 15:38:50.425', 1.456, 1.15678, '1.4567899900', 1);
50+
`, Drop: ``,
51+
},
52+
{
53+
Create: `
54+
INSERT INTO go_TypeTest(intTest, tinyintTest, smallIntTest, bigIntTest, unsignedTest, varcharTest, charTest, charTextTest, dateTest, dateTimeTest, timestampTest, floatTest, doubleTest, decimalTest, bitTest)
55+
VALUES (2, 2, 2, 2, 2, '行2', '行2char', '行2text', '2021-07-02', '2021-07-02 15:38:50.425','2021-07-02 15:38:50.425', 2.456, 2.15678, '2.4567899900', 1);
56+
`,
57+
Drop: ``,
58+
},
59+
{
60+
Create: `
61+
INSERT INTO go_TypeTest(intTest, tinyintTest, smallIntTest, bigIntTest, unsignedTest, varcharTest, charTest, charTextTest, dateTest, dateTimeTest, timestampTest, floatTest, doubleTest, decimalTest, bitTest,
62+
nullIntTest, nullTinyintTest, nullSmallIntTest, nullBigIntTest, nullUnsignedTest, nullVarcharTest, nullCharTest, nullTextTest, nullDateTest, nullDateTimeTest, nullTimestampTest, nullFloatTest, nullDoubleTest, nullDecimalTest, nullBitTest)
63+
VALUES (3, 3, 3, 3, 3, '行3', '行3char', '行3text', '2021-07-03', '2021-07-03 15:38:50.425','2021-07-03 15:38:50.425', 3.456, 3.15678, '3.4567899900', 1,
64+
3, 3, 3, 3, 3, '行3', '行3char', '行3text', '2021-07-03', '2021-07-03 15:38:50.425','2021-07-03 15:38:50.425', 3.456, 3.15678, '3.4567899900', 1);
65+
`,
66+
Drop: ``,
67+
},
68+
{
69+
Create: `
70+
INSERT INTO go_TypeTest(intTest, tinyintTest, smallIntTest, bigIntTest, unsignedTest, varcharTest, charTest, charTextTest, dateTest, dateTimeTest, timestampTest, floatTest, doubleTest, decimalTest, bitTest,
71+
nullIntTest, nullTinyintTest, nullSmallIntTest, nullBigIntTest, nullUnsignedTest, nullVarcharTest, nullCharTest, nullTextTest, nullDateTest, nullDateTimeTest, nullTimestampTest, nullFloatTest, nullDoubleTest, nullDecimalTest, nullBitTest)
72+
VALUES (4, 4, 4, 4, 4, '行4', '行4char', '行4text', '2021-07-04', '2021-07-04 15:38:50.425','2021-07-04 15:38:50.425', 4.456, 4.15678, '4.4567899900', 0,
73+
4, 4, 4, 4, 4, '行4', '行4char', '行4text', '2021-07-04', '2021-07-04 15:38:50.425','2021-07-04 15:38:50.425', 4.456, 4.15678, '4.4567899900', 0);
74+
`,
75+
Drop: ``,
76+
},
77+
}
78+
79+
// CreateSqliteSchema 用于初始化 Sqlite 的测试用表结构。
80+
func CreateSqliteSchema(db *sql.DB) error {
81+
for _, schema := range sqliteSchemas {
82+
_, err := db.Exec(schema.Create)
83+
if err != nil {
84+
return err
85+
}
86+
}
87+
return nil
88+
}
89+
90+
// DropSqliteSchema 用于初始化 Sqlite 的测试用表结构。
91+
func DropSqliteSchema(db *sql.DB) error {
92+
for _, schema := range sqliteSchemas {
93+
if schema.Drop == "" {
94+
continue
95+
}
96+
_, err := db.Exec(schema.Drop)
97+
if err != nil {
98+
return err
99+
}
100+
}
101+
return nil
102+
}

0 commit comments

Comments
 (0)