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.3 kB

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

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