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.

db.go 1.1 kB

2 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package db
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. _ "github.com/go-sql-driver/mysql"
  7. "github.com/jmoiron/sqlx"
  8. "gitlink.org.cn/cloudream/storage/common/pkgs/db/config"
  9. )
  10. type DB struct {
  11. d *sqlx.DB
  12. }
  13. type SQLContext interface {
  14. sqlx.Queryer
  15. sqlx.Execer
  16. sqlx.Ext
  17. }
  18. func NewDB(cfg *config.Config) (*DB, error) {
  19. db, err := sqlx.Open("mysql", cfg.MakeSourceString())
  20. if err != nil {
  21. return nil, fmt.Errorf("open database connection failed, err: %w", err)
  22. }
  23. // 尝试连接一下数据库,如果数据库配置有错误在这里就能报出来
  24. err = db.Ping()
  25. if err != nil {
  26. return nil, err
  27. }
  28. return &DB{
  29. d: db,
  30. }, nil
  31. }
  32. func (db *DB) DoTx(isolation sql.IsolationLevel, fn func(tx *sqlx.Tx) error) error {
  33. tx, err := db.d.BeginTxx(context.Background(), &sql.TxOptions{Isolation: isolation})
  34. if err != nil {
  35. return err
  36. }
  37. if err := fn(tx); err != nil {
  38. tx.Rollback()
  39. return err
  40. }
  41. if err := tx.Commit(); err != nil {
  42. tx.Rollback()
  43. return err
  44. }
  45. return nil
  46. }
  47. func (db *DB) SQLCtx() SQLContext {
  48. return db.d
  49. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。