Wrap "icingadb-*sql" in constants

refs #136
This commit is contained in:
Alexander A. Klimov 2022-02-04 12:11:46 +01:00
parent 53c0aa431f
commit d898681d3c
3 changed files with 16 additions and 11 deletions

View file

@ -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
}

View file

@ -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.

View file

@ -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
}