package mysql import ( "database/sql" "fmt" "time" ) // Config defines the config for storage. type Config struct { // DB Will override ConnectionURI and all other authentication values if used // // Optional. Default is nil Db *sql.DB // Connection string to use for DB. Will override all other authentication values if used // // Optional. Default is "" ConnectionURI string // Host name where the DB is hosted // // Optional. Default is "127.0.0.1" Host string // Port where the DB is listening on // // Optional. Default is 3306 Port int // Server username // // Optional. Default is "" Username string // Server password // // Optional. Default is "" Password string // Database name // // Optional. Default is "fiber" Database string // Table name // // Optional. Default is "fiber_storage" Table string // Reset clears any existing keys in existing Table // // Optional. Default is false Reset bool // Time before deleting expired keys // // Optional. Default is 10 * time.Second GCInterval time.Duration //////////////////////////////////// // Adaptor related config options // //////////////////////////////////// maxIdleConns int maxOpenConns int connMaxLifetime time.Duration } // ConfigDefault is the default config var ConfigDefault = Config{ Db: nil, ConnectionURI: "", Host: "127.0.0.1", Port: 3306, Database: "fiber", Table: "fiber_storage", Reset: false, GCInterval: 10 * time.Second, maxOpenConns: 100, maxIdleConns: 100, connMaxLifetime: 1 * time.Second, } func (c Config) dsn() string { if c.ConnectionURI != "" { return c.ConnectionURI } return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", c.Username, c.Password, c.Host, c.Port, c.Database) } // Helper function to set default values func configDefault(config ...Config) Config { // Return default config if nothing provided if len(config) < 1 { return ConfigDefault } // Override default config cfg := config[0] // Set default values if cfg.Host == "" { cfg.Host = ConfigDefault.Host } if cfg.Port <= 0 { cfg.Port = ConfigDefault.Port } if cfg.Database == "" { cfg.Database = ConfigDefault.Database } if cfg.Table == "" { cfg.Table = ConfigDefault.Table } if int(cfg.GCInterval.Seconds()) <= 0 { cfg.GCInterval = ConfigDefault.GCInterval } return cfg }