2015-04-28 08:25:04 +00:00
|
|
|
// Copyright 2015 The Xorm Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
2020-03-08 06:10:05 +00:00
|
|
|
// +build go1.11
|
2018-09-07 03:01:18 +00:00
|
|
|
|
2013-05-03 07:26:51 +00:00
|
|
|
package xorm
|
|
|
|
|
|
|
|
import (
|
2019-01-20 03:01:14 +00:00
|
|
|
"context"
|
2013-12-18 03:31:32 +00:00
|
|
|
"os"
|
|
|
|
"runtime"
|
2014-04-17 15:21:42 +00:00
|
|
|
"time"
|
2014-04-18 10:39:07 +00:00
|
|
|
|
2020-02-24 08:53:18 +00:00
|
|
|
"xorm.io/xorm/caches"
|
|
|
|
"xorm.io/xorm/dialects"
|
|
|
|
"xorm.io/xorm/log"
|
|
|
|
"xorm.io/xorm/names"
|
|
|
|
"xorm.io/xorm/schemas"
|
2020-02-27 03:58:31 +00:00
|
|
|
"xorm.io/xorm/tags"
|
2013-05-03 07:26:51 +00:00
|
|
|
)
|
|
|
|
|
2013-09-26 07:19:39 +00:00
|
|
|
func close(engine *Engine) {
|
2013-12-18 03:31:32 +00:00
|
|
|
engine.Close()
|
2013-09-26 07:19:39 +00:00
|
|
|
}
|
|
|
|
|
2016-03-29 01:17:06 +00:00
|
|
|
// NewEngine new a db manager according to the parameter. Currently support four
|
2013-09-28 15:14:42 +00:00
|
|
|
// drivers
|
2013-06-16 03:05:16 +00:00
|
|
|
func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
2020-03-06 06:43:49 +00:00
|
|
|
dialect, err := dialects.OpenDialect(driverName, dataSourceName)
|
2014-04-15 03:39:29 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2020-02-28 02:00:21 +00:00
|
|
|
cacherMgr := caches.NewManager()
|
|
|
|
mapper := names.NewCacheMapper(new(names.SnakeMapper))
|
|
|
|
tagParser := tags.NewParser("xorm", dialect, mapper, mapper, cacherMgr)
|
|
|
|
|
2014-02-11 17:35:26 +00:00
|
|
|
engine := &Engine{
|
2019-01-20 03:01:14 +00:00
|
|
|
dialect: dialect,
|
|
|
|
TZLocation: time.Local,
|
|
|
|
defaultContext: context.Background(),
|
2020-02-28 02:00:21 +00:00
|
|
|
cacherMgr: cacherMgr,
|
|
|
|
tagParser: tagParser,
|
2020-03-06 06:43:49 +00:00
|
|
|
driverName: driverName,
|
|
|
|
dataSourceName: dataSourceName,
|
2014-04-11 07:37:27 +00:00
|
|
|
}
|
2014-01-07 09:33:27 +00:00
|
|
|
|
2020-03-06 06:43:49 +00:00
|
|
|
if dialect.URI().DBType == schemas.SQLITE {
|
2017-06-02 08:12:50 +00:00
|
|
|
engine.DatabaseTZ = time.UTC
|
|
|
|
} else {
|
|
|
|
engine.DatabaseTZ = time.Local
|
|
|
|
}
|
|
|
|
|
2020-02-24 08:53:18 +00:00
|
|
|
logger := log.NewSimpleLogger(os.Stdout)
|
|
|
|
logger.SetLevel(log.LOG_INFO)
|
2020-02-29 08:59:59 +00:00
|
|
|
engine.SetLogger(log.NewLoggerAdapter(logger))
|
2013-12-18 03:31:32 +00:00
|
|
|
|
|
|
|
runtime.SetFinalizer(engine, close)
|
2014-12-15 02:50:34 +00:00
|
|
|
|
|
|
|
return engine, nil
|
2013-05-03 07:26:51 +00:00
|
|
|
}
|
2014-01-25 02:07:11 +00:00
|
|
|
|
2020-02-24 08:53:18 +00:00
|
|
|
// NewEngineWithParams new a db manager with params. The params will be passed to dialects.
|
2018-03-08 01:30:38 +00:00
|
|
|
func NewEngineWithParams(driverName string, dataSourceName string, params map[string]string) (*Engine, error) {
|
|
|
|
engine, err := NewEngine(driverName, dataSourceName)
|
|
|
|
engine.dialect.SetParams(params)
|
|
|
|
return engine, err
|
|
|
|
}
|
|
|
|
|
2016-03-29 01:17:06 +00:00
|
|
|
// Clone clone an engine
|
2014-04-15 03:39:29 +00:00
|
|
|
func (engine *Engine) Clone() (*Engine, error) {
|
2015-02-11 08:51:18 +00:00
|
|
|
return NewEngine(engine.DriverName(), engine.DataSourceName())
|
2014-04-15 03:39:29 +00:00
|
|
|
}
|