mirror of
https://github.com/Icinga/icingadb.git
synced 2026-06-03 22:04:28 -04:00
parent
53c0aa431f
commit
d898681d3c
3 changed files with 16 additions and 11 deletions
|
|
@ -5,6 +5,7 @@ import (
|
|||
"github.com/go-redis/redis/v8"
|
||||
"github.com/icinga/icingadb/internal/command"
|
||||
"github.com/icinga/icingadb/pkg/common"
|
||||
"github.com/icinga/icingadb/pkg/driver"
|
||||
"github.com/icinga/icingadb/pkg/icingadb"
|
||||
"github.com/icinga/icingadb/pkg/icingadb/history"
|
||||
"github.com/icinga/icingadb/pkg/icingadb/overdue"
|
||||
|
|
@ -320,9 +321,9 @@ func run() int {
|
|||
func checkDbSchema(ctx context.Context, db *icingadb.DB) error {
|
||||
var expectedDbSchemaVersion uint16
|
||||
switch db.DriverName() {
|
||||
case "icingadb-mysql":
|
||||
case driver.MySQL:
|
||||
expectedDbSchemaVersion = expectedMysqlSchemaVersion
|
||||
case "icingadb-pgsql":
|
||||
case driver.PostgreSQL:
|
||||
expectedDbSchemaVersion = expectedPostgresSchemaVersion
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
const MySQL = "icingadb-mysql"
|
||||
const PostgreSQL = "icingadb-pgsql"
|
||||
|
||||
var timeout = time.Minute * 5
|
||||
|
||||
// RetryConnector wraps driver.Connector with retry logic.
|
||||
|
|
@ -78,10 +81,10 @@ func (d Driver) OpenConnector(name string) (driver.Connector, error) {
|
|||
|
||||
// Register makes our database Driver available under the name "icingadb-*sql".
|
||||
func Register(logger *logging.Logger) {
|
||||
sql.Register("icingadb-mysql", &Driver{ctxDriver: &mysql.MySQLDriver{}, Logger: logger})
|
||||
sql.Register("icingadb-pgsql", &Driver{ctxDriver: PgSQLDriver{}, Logger: logger})
|
||||
sql.Register(MySQL, &Driver{ctxDriver: &mysql.MySQLDriver{}, Logger: logger})
|
||||
sql.Register(PostgreSQL, &Driver{ctxDriver: PgSQLDriver{}, Logger: logger})
|
||||
_ = mysql.SetLogger(mysqlLogger(func(v ...interface{}) { logger.Debug(v...) }))
|
||||
sqlx.BindDriver("icingadb-pgsql", sqlx.DOLLAR)
|
||||
sqlx.BindDriver(PostgreSQL, sqlx.DOLLAR)
|
||||
}
|
||||
|
||||
// ctxDriver helps ensure that we only support drivers that implement driver.Driver and driver.DriverContext.
|
||||
|
|
|
|||
|
|
@ -2,13 +2,14 @@ package icingadb
|
|||
|
||||
import (
|
||||
"context"
|
||||
"database/sql/driver"
|
||||
sqlDriver "database/sql/driver"
|
||||
"fmt"
|
||||
"github.com/go-sql-driver/mysql"
|
||||
"github.com/icinga/icingadb/internal"
|
||||
"github.com/icinga/icingadb/pkg/backoff"
|
||||
"github.com/icinga/icingadb/pkg/com"
|
||||
"github.com/icinga/icingadb/pkg/contracts"
|
||||
"github.com/icinga/icingadb/pkg/driver"
|
||||
"github.com/icinga/icingadb/pkg/logging"
|
||||
"github.com/icinga/icingadb/pkg/periodic"
|
||||
"github.com/icinga/icingadb/pkg/retry"
|
||||
|
|
@ -128,10 +129,10 @@ func (db *DB) BuildInsertIgnoreStmt(into interface{}) (string, int) {
|
|||
var clause string
|
||||
|
||||
switch db.DriverName() {
|
||||
case "icingadb-mysql":
|
||||
case driver.MySQL:
|
||||
// MySQL treats UPDATE id = id as a no-op.
|
||||
clause = "ON DUPLICATE KEY UPDATE id = id"
|
||||
case "icingadb-pgsql":
|
||||
case driver.PostgreSQL:
|
||||
clause = fmt.Sprintf("ON CONFLICT ON CONSTRAINT pk_%s DO NOTHING", table)
|
||||
}
|
||||
|
||||
|
|
@ -191,10 +192,10 @@ func (db *DB) BuildUpsertStmt(subject interface{}) (stmt string, placeholders in
|
|||
|
||||
var clause, setFormat string
|
||||
switch db.DriverName() {
|
||||
case "icingadb-mysql":
|
||||
case driver.MySQL:
|
||||
clause = "ON DUPLICATE KEY UPDATE"
|
||||
setFormat = "%[1]s = VALUES(%[1]s)"
|
||||
case "icingadb-pgsql":
|
||||
case driver.PostgreSQL:
|
||||
clause = fmt.Sprintf("ON CONFLICT ON CONSTRAINT pk_%s DO UPDATE SET", table)
|
||||
setFormat = "%[1]s = EXCLUDED.%[1]s"
|
||||
}
|
||||
|
|
@ -584,7 +585,7 @@ func (db *DB) log(ctx context.Context, query string, counter *com.Counter) perio
|
|||
|
||||
// IsRetryable checks whether the given error is retryable.
|
||||
func IsRetryable(err error) bool {
|
||||
if errors.Is(err, driver.ErrBadConn) {
|
||||
if errors.Is(err, sqlDriver.ErrBadConn) {
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue