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

adapter.go 1.8 kB

3 years ago
3 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package object
  2. import (
  3. "fmt"
  4. "runtime"
  5. "github.com/astaxie/beego"
  6. _ "github.com/go-sql-driver/mysql"
  7. "xorm.io/xorm"
  8. )
  9. var adapter *Adapter
  10. func InitConfig() {
  11. err := beego.LoadAppConfig("ini", "../conf/app.conf")
  12. if err != nil {
  13. panic(err)
  14. }
  15. InitAdapter()
  16. }
  17. func InitAdapter() {
  18. adapter = NewAdapter(beego.AppConfig.String("driverName"), beego.AppConfig.String("dataSourceName"))
  19. }
  20. // Adapter represents the MySQL adapter for policy storage.
  21. type Adapter struct {
  22. driverName string
  23. dataSourceName string
  24. engine *xorm.Engine
  25. }
  26. // finalizer is the destructor for Adapter.
  27. func finalizer(a *Adapter) {
  28. err := a.engine.Close()
  29. if err != nil {
  30. panic(err)
  31. }
  32. }
  33. // NewAdapter is the constructor for Adapter.
  34. func NewAdapter(driverName string, dataSourceName string) *Adapter {
  35. a := &Adapter{}
  36. a.driverName = driverName
  37. a.dataSourceName = dataSourceName
  38. // Open the DB, create it if not existed.
  39. a.open()
  40. // Call the destructor when the object is released.
  41. runtime.SetFinalizer(a, finalizer)
  42. return a
  43. }
  44. func (a *Adapter) createDatabase() error {
  45. engine, err := xorm.NewEngine(a.driverName, a.dataSourceName)
  46. if err != nil {
  47. return err
  48. }
  49. defer engine.Close()
  50. _, err = engine.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s default charset utf8 COLLATE utf8_general_ci", beego.AppConfig.String("dbName")))
  51. return err
  52. }
  53. func (a *Adapter) open() {
  54. if err := a.createDatabase(); err != nil {
  55. panic(err)
  56. }
  57. engine, err := xorm.NewEngine(a.driverName, a.dataSourceName+beego.AppConfig.String("dbName"))
  58. if err != nil {
  59. panic(err)
  60. }
  61. a.engine = engine
  62. a.createTable()
  63. }
  64. func (a *Adapter) close() {
  65. a.engine.Close()
  66. a.engine = nil
  67. }
  68. func (a *Adapter) createTable() {
  69. err := a.engine.Sync2(new(Dataset))
  70. if err != nil {
  71. panic(err)
  72. }
  73. }

No Description

Contributors (1)