You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

xorm.go 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2015 The Xorm Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // +build go1.11
  5. package xorm
  6. import (
  7. "context"
  8. "os"
  9. "runtime"
  10. "time"
  11. "xorm.io/xorm/caches"
  12. "xorm.io/xorm/core"
  13. "xorm.io/xorm/dialects"
  14. "xorm.io/xorm/log"
  15. "xorm.io/xorm/names"
  16. "xorm.io/xorm/schemas"
  17. "xorm.io/xorm/tags"
  18. )
  19. func close(engine *Engine) {
  20. engine.Close()
  21. }
  22. // NewEngine new a db manager according to the parameter. Currently support four
  23. // drivers
  24. func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
  25. dialect, err := dialects.OpenDialect(driverName, dataSourceName)
  26. if err != nil {
  27. return nil, err
  28. }
  29. db, err := core.Open(driverName, dataSourceName)
  30. if err != nil {
  31. return nil, err
  32. }
  33. cacherMgr := caches.NewManager()
  34. mapper := names.NewCacheMapper(new(names.SnakeMapper))
  35. tagParser := tags.NewParser("xorm", dialect, mapper, mapper, cacherMgr)
  36. engine := &Engine{
  37. dialect: dialect,
  38. TZLocation: time.Local,
  39. defaultContext: context.Background(),
  40. cacherMgr: cacherMgr,
  41. tagParser: tagParser,
  42. driverName: driverName,
  43. dataSourceName: dataSourceName,
  44. db: db,
  45. }
  46. if dialect.URI().DBType == schemas.SQLITE {
  47. engine.DatabaseTZ = time.UTC
  48. } else {
  49. engine.DatabaseTZ = time.Local
  50. }
  51. logger := log.NewSimpleLogger(os.Stdout)
  52. logger.SetLevel(log.LOG_INFO)
  53. engine.SetLogger(log.NewLoggerAdapter(logger))
  54. runtime.SetFinalizer(engine, close)
  55. return engine, nil
  56. }
  57. // NewEngineWithParams new a db manager with params. The params will be passed to dialects.
  58. func NewEngineWithParams(driverName string, dataSourceName string, params map[string]string) (*Engine, error) {
  59. engine, err := NewEngine(driverName, dataSourceName)
  60. engine.dialect.SetParams(params)
  61. return engine, err
  62. }
  63. // Clone clone an engine
  64. func (engine *Engine) Clone() (*Engine, error) {
  65. return NewEngine(engine.DriverName(), engine.DataSourceName())
  66. }