xorm/xorm.go

102 lines
2.4 KiB
Go
Raw Normal View History

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.
// +build go1.8
2013-05-03 07:26:51 +00:00
package xorm
import (
"context"
2013-12-18 03:31:32 +00:00
"fmt"
"os"
"reflect"
"runtime"
"sync"
"time"
2014-04-18 10:39:07 +00:00
"xorm.io/xorm/caches"
"xorm.io/xorm/core"
"xorm.io/xorm/dialects"
"xorm.io/xorm/log"
"xorm.io/xorm/names"
"xorm.io/xorm/schemas"
"xorm.io/xorm/tags"
2013-05-03 07:26:51 +00:00
)
const (
// Version show the xorm's version
2019-10-16 06:55:10 +00:00
Version string = "0.8.0.1015"
)
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
}
// NewEngine new a db manager according to the parameter. Currently support four
// drivers
2013-06-16 03:05:16 +00:00
func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
driver := dialects.QueryDriver(driverName)
2014-01-07 09:33:27 +00:00
if driver == nil {
return nil, fmt.Errorf("Unsupported driver name: %v", driverName)
2013-12-18 03:31:32 +00:00
}
2014-01-07 09:33:27 +00:00
uri, err := driver.Parse(driverName, dataSourceName)
2013-12-18 03:31:32 +00:00
if err != nil {
return nil, err
}
dialect := dialects.QueryDialect(uri.DBType)
2014-01-07 09:33:27 +00:00
if dialect == nil {
return nil, fmt.Errorf("Unsupported dialect type: %v", uri.DBType)
2014-01-07 09:33:27 +00:00
}
2013-12-18 03:31:32 +00:00
2014-04-18 10:39:07 +00:00
db, err := core.Open(driverName, dataSourceName)
2013-12-18 03:31:32 +00:00
if err != nil {
return nil, err
}
2014-04-18 10:39:07 +00:00
err = dialect.Init(db, uri, driverName, dataSourceName)
if err != nil {
return nil, err
}
engine := &Engine{
db: db,
dialect: dialect,
Tables: make(map[reflect.Type]*schemas.Table),
mutex: &sync.RWMutex{},
TZLocation: time.Local,
defaultContext: context.Background(),
cacherMgr: caches.NewManager(),
}
2014-01-07 09:33:27 +00:00
if uri.DBType == schemas.SQLITE {
engine.DatabaseTZ = time.UTC
} else {
engine.DatabaseTZ = time.Local
}
logger := log.NewSimpleLogger(os.Stdout)
logger.SetLevel(log.LOG_INFO)
engine.SetLogger(logger)
mapper := names.NewCacheMapper(new(names.SnakeMapper))
engine.tagParser = tags.NewParser("xorm", dialect, mapper, mapper, engine.cacherMgr)
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
}
// NewEngineWithParams new a db manager with params. The params will be passed to dialects.
func NewEngineWithParams(driverName string, dataSourceName string, params map[string]string) (*Engine, error) {
engine, err := NewEngine(driverName, dataSourceName)
engine.dialect.SetParams(params)
return engine, err
}
// Clone clone an engine
func (engine *Engine) Clone() (*Engine, error) {
2015-02-11 08:51:18 +00:00
return NewEngine(engine.DriverName(), engine.DataSourceName())
}