https://github.com/proost/dbresolver
The sqlx resolver and wrapper for database cluster
https://github.com/proost/dbresolver
database go golang mysql postgresql rdbms sqlx
Last synced: 5 months ago
JSON representation
The sqlx resolver and wrapper for database cluster
- Host: GitHub
- URL: https://github.com/proost/dbresolver
- Owner: proost
- License: mit
- Created: 2022-12-17T08:04:23.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-10-27T03:32:26.000Z (over 2 years ago)
- Last Synced: 2024-06-21T13:40:20.026Z (about 2 years ago)
- Topics: database, go, golang, mysql, postgresql, rdbms, sqlx
- Language: Go
- Homepage:
- Size: 63.5 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# dbresolver
dbresolver is [sqlx](https://github.com/jmoiron/sqlx) resolver and wrapper for database cluster.
[](https://github.com/proost/dbresolver/actions/workflows/ci.yml)
[](https://pkg.go.dev/github.com/proost/dbresolver)
## Install
```shell
go get github.com/proost/dbresolver
```
## Usage
```go
package main
import (
"context"
"fmt"
"log"
"github.com/jmoiron/sqlx"
"github.com/proost/dbresolver"
)
func main() {
var (
primaryHost = "localhost"
primaryPort = 3306
primaryUser = "primary"
primaryPassword = ""
secondaryHost = "localhost"
secondaryPort = 3307
secondaryUser = "secondary"
secondaryPassword = ""
dbname = ""
)
// DSNs
primaryDSN := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s",
primaryUser,
primaryPassword,
primaryHost,
primaryPort,
dbname,
)
secondaryDSN := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s",
secondaryUser,
secondaryPassword,
secondaryHost,
secondaryPort,
dbname,
)
// connect to primary
primaryDB := sqlx.MustOpen("mysql", primaryDSN)
// connect to secondary
secondaryDB := sqlx.MustOpen("mysql", secondaryDSN)
primaryDBsCfg := &dbresolver.PrimaryDBsConfig{
DBs: []*sqlx.DB{primaryDB},
ReadWritePolicy: dbresolver.ReadWrite,
}
resolver := dbresolver.MustNewDBResolver(primaryDBsCfg, dbresolver.WithSecondaryDBs(secondaryDB))
defer resolver.Close()
resolver.MustExecContext(context.Background(), "INSERT INTO users (name) VALUES (?)", "foo")
result, err := resolver.QueryxContext(context.Background(), `SELECT * FROM users WHERE name = "foo"`)
if err != nil {
log.Panic(err)
}
fmt.Println(result)
}
```
## Important Notes
- Primary Database will be used when you call these functions
- `Begin`
- `BeginTx`
- `BeginTxx`
- `Beginx`
- `Conn`
- `Connx`
- `Exec`
- `ExecContext`
- `MustBegin`
- `MustBeginTx`
- `MustExec`
- `MustExecContext`
- `NamedExec`
- `NamedExecContext`
- Readable Database(Secondary Database or Primary Database depending on configuration) will be used when you call these functions
- `Get`
- `GetContext`
- `NamedQuery`
- `NamedQueryContext`
- `Query`
- `QueryContext`
- `QueryRow`
- `QueryRowContext`
- `QueryRowx`
- `QueryRowxContext`
- `Select`
- `SelectContext`
## Contribution
To contribute to this project, you can open a PR or an issue.