/
schema_common.go
53 lines (49 loc) · 1.82 KB
/
schema_common.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package app
import (
"database/sql"
"fmt"
_ "github.com/jinzhu/gorm/dialects/mssql"
_ "github.com/jinzhu/gorm/dialects/mysql"
_ "github.com/jinzhu/gorm/dialects/postgres"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"strings"
)
func newDb(dbType, addr, user, password, database, charset string) (*sql.DB, error) {
hostPort := strings.Split(addr, ":")
if len(hostPort) != 2 && dbType != "sqlite" {
return nil, fmt.Errorf("flag addr [%s] is a wrong format string, must be like host:port", addr)
}
host := hostPort[0]
port := hostPort[1]
var dbConn string
switch dbType {
case "mysql":
dbConn = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", user, password, host, port, database, charset)
case "postgres":
dbConn = fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s sslmode=disable", host, port, user, database, password)
case "mssql":
dbConn = fmt.Sprintf("sqlserver://%s:%s@%s:%s?database=%s", user, password, host, port, database)
case "sqlite3":
dbConn = addr
default:
return nil, fmt.Errorf("felix rest doesn't support %s database", dbType)
}
return sql.Open(dbType, dbConn)
}
func FetchDbColumn(gb GinPlay) ([]ColumnSchema, error) {
addr := fmt.Sprintf("%s:%d", gb.DbAddr, gb.DbPort)
switch gb.DbType {
case "mysql":
return fetchSchemaMysql(addr, gb.DbUser, gb.DbPassword, gb.DbName, gb.DbChar)
case "postgres":
return fetchSchemaPg(addr, gb.DbUser, gb.DbPassword, gb.DbName, gb.DbChar)
case "mssql":
//TODO:: mssql
return nil, fmt.Errorf("to do support and test mssql database %s", "!!!sorry!!!")
//returdbConn = fmt.Sprintf("sqlserver://%s:%s@%s:%s?database=%s", user, password, host, port, database)
case "sqlite", "sqlite3":
return fetchSchemaSQLite(addr, gb.DbUser, gb.DbPassword, gb.DbName, gb.DbChar)
default:
return nil, fmt.Errorf("felix rest doesn't support %s type DB", gb.DbType)
}
}