/
engine.go
60 lines (52 loc) · 1.36 KB
/
engine.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
54
55
56
57
58
59
60
package engine
import (
"database/sql"
"fmt"
"time"
"github.com/seerx/gpa/engine/constants"
"github.com/seerx/gpa/engine/sql/dialect"
"github.com/seerx/gpa/engine/sql/dialect/intf"
"github.com/seerx/gpa/engine/sql/metas/rflt"
"github.com/seerx/gpa/logger"
"github.com/seerx/gpa/rt"
)
type Engine struct {
db *sql.DB
provider rt.Provider
dialect intf.Dialect
propsParser *rflt.PropsParser
TZLocation *time.Location // The timezone of the application
DatabaseTZ *time.Location // The timezone of the database
logger logger.GpaLogger
}
func (e *Engine) GetProvider() *rt.Provider {
return &e.provider
}
// func New
func New(dialectName constants.DIALECT, source string) (e *Engine, err error) {
driver := dialectName.GetDRIVER()
if driver == constants.DB_UNKNOWN {
return nil, fmt.Errorf("unkown databse driver of dialect %s", dialectName)
}
log := logger.GetLogger()
dial, err := dialect.OpenDialect(dialectName, source)
if err != nil {
return nil, err
}
propsParser := rflt.NewPropsParser(dial)
db, err := sql.Open(string(driver), source)
if err != nil {
log.WithError(err).Error("connect database error")
return nil, err
}
prvd := rt.NewProvider(driver, db, nil)
e = &Engine{
db: db,
provider: *prvd,
dialect: dial,
propsParser: propsParser,
DatabaseTZ: time.Local,
logger: log,
}
return
}