New creates a new database provider based on the configuration
(config *config.Config, deps *Dependencies)
| 178 | |
| 179 | // New creates a new database provider based on the configuration |
| 180 | func New(config *config.Config, deps *Dependencies) (Provider, error) { |
| 181 | var provider Provider |
| 182 | var err error |
| 183 | if config.DatabaseType == "" { |
| 184 | return nil, fmt.Errorf("database type is required") |
| 185 | } |
| 186 | |
| 187 | switch config.DatabaseType { |
| 188 | case constants.DbTypePostgres, |
| 189 | constants.DbTypeSqlite, |
| 190 | constants.DbTypeLibSQL, |
| 191 | constants.DbTypeMysql, |
| 192 | constants.DbTypeSqlserver, |
| 193 | constants.DbTypeYugabyte, |
| 194 | constants.DbTypeMariaDB, |
| 195 | constants.DbTypeCockroachDB, |
| 196 | constants.DbTypePlanetScaleDB: |
| 197 | provider, err = sql.NewProvider(config, &sql.Dependencies{ |
| 198 | Log: deps.Log, |
| 199 | }) |
| 200 | case constants.DbTypeMongoDB: |
| 201 | provider, err = mongodb.NewProvider(config, &mongodb.Dependencies{ |
| 202 | Log: deps.Log, |
| 203 | }) |
| 204 | case constants.DbTypeArangoDB: |
| 205 | provider, err = arangodb.NewProvider(config, &arangodb.Dependencies{ |
| 206 | Log: deps.Log, |
| 207 | }) |
| 208 | case constants.DbTypeCassandraDB, |
| 209 | constants.DbTypeScyllaDB: |
| 210 | provider, err = cassandradb.NewProvider(config, &cassandradb.Dependencies{ |
| 211 | Log: deps.Log, |
| 212 | }) |
| 213 | case constants.DbTypeCouchbaseDB: |
| 214 | provider, err = couchbase.NewProvider(config, &couchbase.Dependencies{ |
| 215 | Log: deps.Log, |
| 216 | }) |
| 217 | case constants.DbTypeDynamoDB: |
| 218 | provider, err = dynamodb.NewProvider(config, &dynamodb.Dependencies{ |
| 219 | Log: deps.Log, |
| 220 | }) |
| 221 | default: |
| 222 | err = fmt.Errorf("unsupported database type: %s", config.DatabaseType) |
| 223 | |
| 224 | } |
| 225 | if err != nil { |
| 226 | return nil, err |
| 227 | } |
| 228 | return provider, nil |
| 229 | } |