Skip to content

Commit e2a1a1d

Browse files
committed
fix db fatory build
1 parent 171639d commit e2a1a1d

9 files changed

Lines changed: 422 additions & 272 deletions

File tree

README.md

Lines changed: 146 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,47 @@ https://github.com/jmoiron/sqlx
99
# Example:
1010
More example see the [example](./example) directory.
1111

12+
## Using a manual cache
13+
``` text
14+
package db
15+
16+
import (
17+
"github.com/gwaylib/conf"
18+
"github.com/gwaylib/errors"
19+
"github.com/gwaylib/qsql"
20+
_ "github.com/go-sql-driver/mysql"
21+
)
22+
23+
func init() {
24+
db, err := qsql.Open(qsql.DRV_NAME_MYSQL, dsn)
25+
if err != nil{
26+
panic(err)
27+
}
28+
qsql.RegCache("main", db)
29+
}
30+
```
31+
32+
1233
## Using etc cache
1334
Assume that the configuration file path is: './etc/db.cfg'
1435

1536
The etc file content
1637
```
17-
[master]
38+
[main]
1839
driver: mysql
1940
dsn: username:passwd@tcp(127.0.0.1:3306)/main?timeout=30s&strict=true&loc=Local&parseTime=true&allowOldPasswords=1
20-
life_time:7200
41+
max_life_time:7200 # seconds
42+
max_idle_time:0 # seconds
43+
max_idle_conns:0 # num
44+
max_open_conns:0 # num
2145
2246
[log]
2347
driver: mysql
2448
dsn: username:passwd@tcp(127.0.0.1:3306)/log?timeout=30s&strict=true&loc=Local&parseTime=true&allowOldPasswords=1
25-
life_time:7200
49+
max_life_time:7200
2650
```
2751

28-
Make a package for connection cache
52+
Make a package for connection cache with ini
2953
``` text
3054
package db
3155
@@ -39,31 +63,23 @@ import (
3963
var dbFile = conf.RootDir() + "/etc/db.cfg"
4064
4165
func init() {
42-
qsql.REFLECT_DRV_NAME = qsql.DRV_NAME_MYSQL
43-
}
44-
45-
func GetCache(section string) *qsql.DB {
46-
return qsql.GetCache(dbFile, section)
47-
}
48-
49-
func HasCache(section string) (*qsql.DB, error) {
50-
return qsql.HasCache(dbFile, section)
51-
}
52-
53-
func CloseCache() {
54-
qsql.CloseCache()
66+
if err := qsql.RegCacheWithIni(dbFile, "main"); err != nil{
67+
panic(err)
68+
}
69+
if err := qsql.RegCacheWithIni(dbFile, "log"); err != nil{
70+
panic(err)
71+
}
5572
}
5673
```
5774

5875
Call a cache
5976
``` text
60-
mdb := db.GetCache("master")
77+
mdb := qsql.GetCache("main")
6178
```
6279

6380
## Call standar sql
6481
``` text
65-
mdb := db.GetCache("master")
66-
// or mdb = <sql.Tx>
82+
mdb := qsql.GetCache("main")
6783
6884
row := mdb.QueryRow("SELECT * ...")
6985
// ...
@@ -83,21 +99,20 @@ type User struct{
8399
Ignore string `db:"-"` // ignore flag: "-"
84100
}
85101
86-
var u = &User{
87-
Name:"testing",
88-
}
102+
func main() {
103+
mdb := qsql.GetCache("main")
89104
90-
// Insert data with default driver.
91-
if _, err := qsql.InsertStruct(mdb, u, "testing"); err != nil{
92-
// ...
93-
}
94-
// ...
105+
var u = &User{
106+
Name:"testing",
107+
}
95108
96-
// Or Insert data with designated driver.
97-
if _, err := qsql.InsertStruct(mdb, u, "testing", qsql.DRV_NAME_MYSQL); err != nil{
98-
// ...
109+
// Insert data with driver.
110+
if _, err := mdb.InsertStruct(u, "testing"); err != nil{
111+
// ...
112+
}
113+
// ...
99114
}
100-
// ...
115+
101116
```
102117

103118
## Quick query way
@@ -109,120 +124,128 @@ type User struct{
109124
Name string `db:"name"`
110125
}
111126
112-
mdb := db.GetCache("master")
113-
// or mdb = <sql.Tx>
114-
var u = *User{}
115-
if err := qsql.QueryStruct(mdb, u, "SELECT id, name FROM a WHERE id = ?", id)
116-
if err != nil{
117-
// sql.ErrNoRows has been replace by errors.ErrNoData
118-
if errors.ErrNoData.Equal(err) {
119-
// no data
127+
func main() {
128+
mdb := qsql.GetCache("main")
129+
var u = *User{}
130+
if err := mdb.QueryStruct(u, "SELECT id, name FROM a WHERE id = ?", id)
131+
if err != nil{
132+
// sql.ErrNoRows has been replace by errors.ErrNoData
133+
if errors.ErrNoData.Equal(err) {
134+
// no data
135+
}
136+
// ...
120137
}
121-
// ...
122-
}
123-
// ..
124-
125-
// Way 2: query row to struct
126-
mdb := db.GetCache("master")
127-
// or mdb = <sql.Tx>
128-
var u = *User{}
129-
if err := qsql.ScanStruct(qsql.QueryRow(mdb, "SELECT id, name FROM a WHERE id = ?", id), u); err != nil {
130-
// sql.ErrNoRows has been replace by errors.ErrNoData
131-
if errors.ErrNoData.Equal(err) {
132-
// no data
138+
// ..
139+
140+
// Way 2: query row to struct
141+
mdb := qsql.GetCache("main")
142+
var u = *User{}
143+
if err := mdb.ScanStruct(mdb.QueryRow("SELECT id, name FROM a WHERE id = ?", id), u); err != nil {
144+
// sql.ErrNoRows has been replace by errors.ErrNoData
145+
if errors.ErrNoData.Equal(err) {
146+
// no data
147+
}
148+
// ...
149+
}
150+
151+
// Way 3: query result to structs
152+
mdb := qsql.GetCache("main")
153+
var u = []*User{}
154+
if err := mdb.QueryStructs(&u, "SELECT id, name FROM a WHERE id = ?", id); err != nil {
155+
// ...
156+
}
157+
if len(u) == 0{
158+
// data not found
159+
// ...
160+
}
161+
// ..
162+
163+
// Way 4: query rows to structs
164+
mdb := qsql.GetCache("main")
165+
rows, err := mdb.Query("SELECT id, name FROM a WHERE id = ?", id)
166+
if err != nil {
167+
// ...
168+
}
169+
defer qsql.Close(rows)
170+
var u = []*User{}
171+
if err := mdb.ScanStructs(rows, &u); err != nil{
172+
// ...
173+
}
174+
if len(u) == 0{
175+
// data not found
176+
// ...
133177
}
134-
// ...
135-
}
136-
137-
// Way 3: query result to structs
138-
mdb := db.GetCache("master")
139-
// or mdb = <sql.Tx>
140-
var u = []*User{}
141-
if err := qsql.QueryStructs(mdb, &u, "SELECT id, name FROM a WHERE id = ?", id); err != nil {
142-
// ...
143-
}
144-
if len(u) == 0{
145-
// data not found
146-
// ...
147-
}
148-
// ..
149178
150-
// Way 4: query rows to structs
151-
mdb := db.GetCache("master")
152-
// or mdb = <sql.Tx>
153-
rows, err := qsql.Query(mdb, "SELECT id, name FROM a WHERE id = ?", id)
154-
if err != nil {
155-
// ...
156-
}
157-
defer qsql.Close(rows)
158-
var u = []*User{}
159-
if err := qsql.ScanStructs(rows, &u); err != nil{
160-
// ...
161-
}
162-
if len(u) == 0{
163-
// data not found
164-
// ...
165179
}
166180
167181
```
168182

169183
## Query an element which is implemented sql.Scanner
170184

171185
```text
172-
mdb := db.GetCache("master")
173-
// or mdb = <sql.Tx>
174-
count := 0
175-
if err := qsql.QueryElem(mdb, &count, "SELECT count(*) FROM a WHERE id = ?", id); err != nil{
176-
// sql.ErrNoRows has been replace by errors.ErrNoData
177-
if errors.ErrNoData.Equal(err) {
178-
// no data
186+
func main() {
187+
mdb := qsql.GetCache("main")
188+
count := 0
189+
if err := mdb.QueryElem(&count, "SELECT count(*) FROM a WHERE id = ?", id); err != nil{
190+
// sql.ErrNoRows has been replace by errors.ErrNoData
191+
if errors.ErrNoData.Equal(err) {
192+
// no data
193+
}
194+
// ...
179195
}
180-
// ...
181196
}
182197
```
183198
## Extend the where in stmt
199+
```text
184200
// Example for the first input:
185-
mdb := db.GetCache("master")
186-
args:=[]int{1,2,3}
187-
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", qsql.StmtWhereIn(0,len(args))), qsql.StmtSliceArgs(args)...)
188-
// Or
189-
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", qsql.StmtWhereIn(0,len(args), qsql.DRV_NAME_MYSQL), qsql.StmtSliceArgs(args)...)
190-
191-
// Example for the second input:
192-
mdb.Query(fmt.Sprintf("select * from table_name where id=? in (%s)", qsql.StmtWhereIn(1,len(args)), qsql.StmtSliceArgs(id, args)...)
201+
func main() {
202+
mdb := qsql.GetCache("main")
203+
args:=[]int{1,2,3}
204+
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", mdb.StmtWhereIn(0, len(args))), qsql.StmtSliceArgs(args)...)
205+
// Or
206+
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", mdb.StmtWhereIn(0, len(args), qsql.DRV_NAME_MYSQL), qsql.StmtSliceArgs(args)...)
207+
208+
// Example for the second input:
209+
mdb.Query(fmt.Sprintf("select * from table_name where id=? in (%s)", qsql.StmtWhereIn(1,len(args)), qsql.StmtSliceArgs(id, args)...)
210+
}
211+
```
193212

194213
## Mass query.
195214
```text
196-
mdb := db.GetCache("master")
197-
qSql = &qsql.Page{
198-
CountSql:`SELECT count(1) FROM user_info WHERE create_time >= ? AND create_time <= ?`,
199-
DataSql:`SELECT mobile, balance FROM user_info WHERE create_time >= ? AND create_time <= ?`
200-
}
201-
count, titles, result, err := qSql.QueryPageArray(db, true, condition, 0, 10)
202-
// ...
203-
// Or
204-
count, titles, result, err := qSql.QueryPageMap(db, true, condtion, 0, 10)
205-
// ...
206-
if err != nil {
207-
// ...
215+
func main() {
216+
mdb := qsql.GetCache("main")
217+
qSql = &qsql.Page{
218+
CountSql:`SELECT count(1) FROM user_info WHERE create_time >= ? AND create_time <= ?`,
219+
DataSql:`SELECT mobile, balance FROM user_info WHERE create_time >= ? AND create_time <= ?`
220+
}
221+
count, titles, result, err := qSql.QueryPageArray(db, true, condition, 0, 10)
222+
// ...
223+
// Or
224+
count, titles, result, err := qSql.QueryPageMap(db, true, condtion, 0, 10)
225+
// ...
226+
if err != nil {
227+
// ...
228+
}
208229
}
209230
```
210231

211232
## Make a lazy tx commit
212233
``` text
213234
// commit the tx
214-
mdb := db.GetCache("master")
215-
tx, err := mdb.Begin()
216-
if err != nil{
217-
// ...
218-
}
219-
fn := func() error {
220-
if err := tx.Exec("UPDATE testing SET name = ? WHERE id = ?", id); err != nil{
221-
return err
222-
}
223-
return nil
224-
}
225-
if err := qsql.Commit(tx, fn); err != nil {
226-
// ...
235+
func main() {
236+
mdb := qsql.GetCache("main")
237+
tx, err := mdb.Begin()
238+
if err != nil{
239+
// ...
240+
}
241+
fn := func() error {
242+
if err := tx.Exec("UPDATE testing SET name = ? WHERE id = ?", id); err != nil{
243+
return err
244+
}
245+
return nil
246+
}
247+
if err := qsql.Commit(tx, fn); err != nil {
248+
// ...
249+
}
227250
}
228251
```

0 commit comments

Comments
 (0)