Skip to content

Commit 4a21809

Browse files
authored
Merge pull request #2 from gwaylib/shu.dev
Remove unused code and rebuild page sql
2 parents bcc0a3a + 64e9189 commit 4a21809

6 files changed

Lines changed: 37 additions & 198 deletions

File tree

api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ type QuickSql interface {
8181
// fmt.Sprintf("select * from table_name where id=? in (%s)", qsql.StmtWhereIn(1,len(args))
8282
//
8383
// Return "?,?,?,?..." for default, or "@p1,@p2,@p3..." for mssql, or ":1,:2,:3..." for pgsql when paramStartIdx is 0.
84-
MakeStmtIn(paramStartIdx, paramLen int) string
84+
StmtIn(paramStartIdx, paramLen int) string
8585

8686
// auto commit when the func is return nil, or auto rollback when the func is error
8787
Commit(tx *sql.Tx, fn func() error) error

api_page.go

Lines changed: 35 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,69 @@
1-
//
21
// Example:
32
//
4-
// qSql = &qsql.Page{
5-
// CountSql:`SELECT count(1) FROM user_info WHERE create_time >= ? AND create_time <= ?`,
6-
// DataSql:`SELECT mobile, balance FROM user_info WHERE create_time >= ? AND create_time <= ?`
7-
// }
8-
// count, titles, result, err := qSql.QueryPageArray(db, true, condition, 0, 10)
3+
// mdb := db.GetCache("main")
4+
//
5+
// // count sql
6+
// cbd := NewSqlBuilder(mdb.DriverName())
7+
// cbd.Select("COUNT(*)")
8+
// cbd.Add("FROM tmp")
9+
// cbd.Add("WHERE")
10+
// cbd.AddTab("create_at BETWEEN ? AND ?", time.Now().AddDate(-1,0,0), time.Now())
11+
//
12+
// // copy condition
13+
// qbd := cbd.Copy()
14+
// qbd.Select("id", "created_at", "name")
15+
// qbd.Add("OFFSET ?", 0)
16+
// qbd.Add("LIMIT ?", 20)
17+
//
18+
// pSql := NewPageSql(cbd, qbd)
19+
// count, err := pSql.QueryCount(db)
920
// ...
1021
// Or
11-
// count, titles, result, err := qSql.QueryPageMap(db, true, condtion, 0, 10)
22+
// titles, result, err := pSql.QueryPageArray(db)
1223
// ...
13-
// if err != nil {
24+
// Or
25+
// titles, result, err := pSql.QueryPageMap(db)
1426
// ...
15-
// }
16-
//
1727
package qsql
1828

1929
import (
2030
"context"
21-
"fmt"
2231

2332
"github.com/gwaylib/errors"
2433
)
2534

26-
type PageArgs struct {
27-
args []interface{}
28-
offset int64
29-
limit int64
30-
}
31-
32-
func NewPageArgs(args ...interface{}) *PageArgs {
33-
return &PageArgs{
34-
args: args,
35-
}
36-
}
37-
38-
// using offset and limit when limit is set.
39-
func (p *PageArgs) Limit(offset, limit int64) *PageArgs {
40-
p.offset = offset
41-
p.limit = limit
42-
return p
43-
}
44-
4535
type PageSql struct {
46-
countSql string
47-
dataSql string
36+
countBD *SqlBuilder
37+
queryBD *SqlBuilder
4838
}
4939

50-
func NewPageSql(countSql, dataSql string) *PageSql {
51-
if len(countSql) == 0 {
52-
panic("countSql not set")
53-
}
54-
if len(dataSql) == 0 {
55-
panic("dataSql not set")
56-
}
40+
func NewPageSql(countBD, queryBD *SqlBuilder) *PageSql {
5741
return &PageSql{
58-
countSql: countSql,
59-
dataSql: dataSql,
42+
countBD: countBD,
43+
queryBD: queryBD,
6044
}
6145
}
6246

63-
func (p PageSql) CountSql() string {
64-
return p.countSql
65-
}
66-
func (p PageSql) DataSql() string {
67-
return p.dataSql
68-
}
69-
70-
// fill the page sql with fmt arg, and return a new page
71-
// Typically used for table name formatting
72-
func (p PageSql) FmtPage(args ...interface{}) PageSql {
73-
countSql := p.countSql
74-
if len(countSql) > 0 {
75-
countSql = fmt.Sprintf(p.countSql, args...)
76-
}
77-
dataSql := p.dataSql
78-
if len(dataSql) > 0 {
79-
dataSql = fmt.Sprintf(p.dataSql, args...)
80-
}
81-
82-
return PageSql{
83-
countSql: countSql,
84-
dataSql: dataSql,
85-
}
86-
}
87-
88-
func (p *PageSql) QueryCount(db *DB, args ...interface{}) (int64, error) {
47+
func (p *PageSql) QueryCount(db *DB) (int64, error) {
8948
count := int64(0)
90-
if err := queryElem(db, context.TODO(), &count, p.countSql, args...); err != nil {
49+
if err := queryElem(db, context.TODO(), &count, p.countBD.String(), p.countBD.Args()...); err != nil {
9150
return 0, errors.As(err)
9251
}
9352
return count, nil
9453
}
9554

96-
func (p *PageSql) QueryPageArr(db *DB, doCount bool, args *PageArgs) (int64, []string, [][]interface{}, error) {
97-
total := int64(0)
98-
dataArgs := args.args
99-
if args.limit > 0 {
100-
dataArgs = append(dataArgs, []interface{}{args.offset, args.limit}...)
101-
}
102-
titles, data, err := queryPageArr(db, context.TODO(), p.dataSql, dataArgs...)
55+
func (p *PageSql) QueryPageArr(db *DB) ([]string, [][]interface{}, error) {
56+
titles, data, err := queryPageArr(db, context.TODO(), p.queryBD.String(), p.queryBD.Args()...)
10357
if err != nil {
104-
return total, nil, nil, errors.As(err)
105-
} else if doCount {
106-
count, err := p.QueryCount(db, args.args...)
107-
if err != nil {
108-
return total, nil, nil, errors.As(err)
109-
}
110-
total = count
58+
return nil, nil, errors.As(err)
11159
}
112-
return total, titles, data, nil
60+
return titles, data, nil
11361
}
11462

115-
func (p *PageSql) QueryPageMap(db *DB, doCount bool, args *PageArgs) (int64, []string, []map[string]interface{}, error) {
116-
total := int64(0)
117-
dataArgs := args.args
118-
if args.limit > 0 {
119-
dataArgs = append(dataArgs, []interface{}{args.offset, args.limit}...)
120-
}
121-
title, data, err := queryPageMap(db, context.TODO(), p.dataSql, dataArgs...)
63+
func (p *PageSql) QueryPageMap(db *DB) ([]string, []map[string]interface{}, error) {
64+
titles, data, err := queryPageMap(db, context.TODO(), p.queryBD.String(), p.queryBD.Args()...)
12265
if err != nil {
123-
return total, nil, nil, errors.As(err)
124-
} else if doCount {
125-
count, err := p.QueryCount(db, args.args...)
126-
if err != nil {
127-
return total, nil, nil, errors.As(err)
128-
}
129-
total = count
66+
return nil, nil, errors.As(err)
13067
}
131-
return total, title, data, nil
68+
return titles, data, nil
13269
}

db.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func (db *DB) QueryPageMapContext(ctx context.Context, querySql string, args ...
112112

113113
// Return "?,?,?,?..." for default, or "@p1,@p2,@p3..." for mssql, or ":1,:2,:3..." for pgsql.
114114
// paramStartIdx default is 0, but you need count it when the driver is mssq, pgsql etc. .
115-
func (db *DB) MakeStmtIn(paramStartIdx, paramsLen int) string {
115+
func (db *DB) StmtIn(paramStartIdx, paramsLen int) string {
116116
return stmtIn(paramStartIdx, paramsLen, db.DriverName())
117117
}
118118

stmt_in.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package qsql
22

33
import (
44
"fmt"
5-
"reflect"
65
)
76

87
func stmtIn(paramIdx, paramsLen int, driverNames ...string) string {
@@ -46,20 +45,3 @@ func stmtIn(paramIdx, paramsLen int, driverNames ...string) string {
4645
return string(result)
4746
}
4847
}
49-
50-
func StmtSliceArgs(args ...interface{}) []interface{} {
51-
result := []interface{}{}
52-
for _, arg := range args {
53-
val := reflect.ValueOf(arg)
54-
switch val.Kind() {
55-
case reflect.Array, reflect.Slice:
56-
arrLen := val.Len()
57-
for i := 0; i < arrLen; i++ {
58-
result = append(result, val.Index(i).Interface())
59-
}
60-
default:
61-
result = append(result, arg)
62-
}
63-
}
64-
return result
65-
}

stmt_in_test.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,3 @@ func TestStmtIn(t *testing.T) {
2424
t.Fatalf("expect '@p1,@p2,@p3', but@ %s", msOutput1)
2525
}
2626
}
27-
28-
func TestStmtSliceArgs(t *testing.T) {
29-
in := []string{"a", "b", "c"}
30-
out := StmtSliceArgs(in)
31-
if len(out) != 3 {
32-
t.Fatalf("expect 3, but:%d", len(out))
33-
}
34-
arg1, ok := out[0].(string)
35-
if !ok {
36-
t.Fatal("expect string, but not")
37-
}
38-
if arg1 != "a" {
39-
t.Fatalf("expect 'a' , but: %s ", arg1)
40-
}
41-
}

type.go

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,11 @@
11
package qsql
22

33
import (
4-
"database/sql"
5-
"database/sql/driver"
64
"fmt"
75
"strconv"
86
"time"
97
)
108

11-
// Bool type
12-
type Bool bool
13-
14-
func (v *Bool) Scan(i interface{}) error {
15-
b := sql.NullBool{}
16-
if err := b.Scan(i); err != nil {
17-
return err
18-
}
19-
*v = Bool(b.Bool)
20-
return nil
21-
}
22-
func (v *Bool) Value() (driver.Value, error) {
23-
return v, nil
24-
}
25-
26-
// Int64 type
27-
type Int64 int64
28-
29-
func (v *Int64) Scan(i interface{}) error {
30-
b := sql.NullInt64{}
31-
if err := b.Scan(i); err != nil {
32-
return err
33-
}
34-
*v = Int64(b.Int64)
35-
return nil
36-
}
37-
func (v Int64) Value() (driver.Value, error) {
38-
return int64(v), nil
39-
}
40-
41-
// Float64 type
42-
type Float64 float64
43-
44-
func (v *Float64) Scan(i interface{}) error {
45-
b := sql.NullFloat64{}
46-
if err := b.Scan(i); err != nil {
47-
return err
48-
}
49-
*v = Float64(b.Float64)
50-
return nil
51-
}
52-
func (v Float64) Value() (driver.Value, error) {
53-
return float64(v), nil
54-
}
55-
56-
// String type
57-
type String string
58-
59-
func (v *String) Scan(i interface{}) error {
60-
b := sql.NullString{}
61-
if err := b.Scan(i); err != nil {
62-
return err
63-
}
64-
*v = String(b.String)
65-
return nil
66-
}
67-
func (v String) Value() (driver.Value, error) {
68-
return string(v), nil
69-
}
70-
func (v *String) String() string {
71-
return string(*v)
72-
}
73-
749
// 通用的字符串查询
7510
type DBData string
7611

0 commit comments

Comments
 (0)