Skip to content

Commit d180f41

Browse files
author
XieBiao
committed
framework
1 parent de5582f commit d180f41

File tree

8 files changed

+126
-0
lines changed

8 files changed

+126
-0
lines changed

drivers/base.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package drivers
2+
3+
import (
4+
"database/sql"
5+
_ "github.com/go-sql-driver/mysql"
6+
"errors"
7+
)
8+
9+
type base struct {
10+
Type string
11+
dsn string
12+
db *sql.DB
13+
}
14+
15+
func (b *base) Open() error {
16+
db, err := sql.Open(b.Type, b.dsn)
17+
if err != nil {
18+
return err
19+
}
20+
b.db = db
21+
return nil
22+
}
23+
24+
func (b base) Query(q string) ([]map[string]interface{}) {
25+
if b.db == nil {
26+
panic(errors.New("need call Open() before Query()"))
27+
}
28+
29+
rows, err := b.db.Query(q)
30+
31+
columns, err := rows.Columns()
32+
if err != nil {
33+
panic(err.Error())
34+
}
35+
36+
// Make a slice for the values
37+
values := make([]sql.RawBytes, len(columns))
38+
39+
// rows.Scan wants '[]interface{}' as an argument, so we must copy the
40+
// references into such a slice
41+
// See http://code.google.com/p/go-wiki/wiki/InterfaceSlice for details
42+
scanArgs := make([]interface{}, len(values))
43+
for i := range values {
44+
scanArgs[i] = &values[i]
45+
}
46+
47+
//result
48+
var rs = make([]map[string]interface{}, 1)
49+
50+
// Fetch rows
51+
for rows.Next() {
52+
// get RawBytes from data
53+
err = rows.Scan(scanArgs...)
54+
if err != nil {
55+
panic(err.Error()) // proper error handling instead of panic in your app
56+
}
57+
58+
// Now do something with the data.
59+
// Here we just print each column as a string.
60+
var row = map[string]interface{}{}
61+
for i, col := range values {
62+
if col == nil {
63+
row[columns[i]] = nil
64+
} else {
65+
row[columns[i]] = string(col)
66+
}
67+
68+
}
69+
rs = append(rs, row)
70+
}
71+
72+
return rs
73+
}
74+
75+
func (b *base) Close() {
76+
if b.db == nil {
77+
panic(errors.New("need call Open() before Close()"))
78+
}
79+
b.db.Close()
80+
}
81+
82+
func newBase(t string, dsn string) *base {
83+
return &base{t, dsn, nil}
84+
}

drivers/database.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package drivers
2+
3+
type Database interface {
4+
Open() error
5+
Query(q string) ([]map[string]interface{})
6+
Close()
7+
}

drivers/mysql.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package drivers
2+
3+
type MySQL struct {
4+
base
5+
}
6+
7+
func NewMySQL(dsn string) (*MySQL) {
8+
b := newBase("mysql", dsn)
9+
return &MySQL{*b}
10+
}

examples/main.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package main
2+
3+
import (
4+
"github.com/hhxsv5/go-db-proxy-api/drivers"
5+
"fmt"
6+
)
7+
8+
func main() {
9+
m := drivers.NewMySQL("user:password@tcp(120.0.0.1:3306)/dbname")
10+
err := m.Open()
11+
if err != nil {
12+
panic(err.Error())
13+
}
14+
defer m.Close()
15+
16+
rows := m.Query("select id,cellphone from user order by id desc limit 5")
17+
18+
fmt.Println(rows)
19+
20+
}

http/request.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package http

http/response.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package http

http/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package http

proxy.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
package godpa
2+

0 commit comments

Comments
 (0)