mirror of
https://github.com/databasus/databasus.git
synced 2026-04-06 00:32:03 +02:00
FIX (databases): Improve support of minor DBs versions
This commit is contained in:
@@ -345,6 +345,7 @@ func (m *MariadbDatabase) buildDSN(password string, database string) string {
|
||||
|
||||
// detectMariadbVersion parses VERSION() output to detect MariaDB version
|
||||
// MariaDB returns strings like "10.11.6-MariaDB" or "11.4.2-MariaDB-1:11.4.2+maria~ubu2204"
|
||||
// Minor versions are mapped to the closest supported version (e.g., 12.1 → 12.0)
|
||||
func detectMariadbVersion(ctx context.Context, db *sql.DB) (tools.MariadbVersion, error) {
|
||||
var versionStr string
|
||||
err := db.QueryRowContext(ctx, "SELECT VERSION()").Scan(&versionStr)
|
||||
@@ -367,39 +368,58 @@ func detectMariadbVersion(ctx context.Context, db *sql.DB) (tools.MariadbVersion
|
||||
|
||||
major := matches[1]
|
||||
minor := matches[2]
|
||||
versionKey := fmt.Sprintf("%s.%s", major, minor)
|
||||
|
||||
switch versionKey {
|
||||
case "5.5":
|
||||
return mapMariadbVersion(major, minor)
|
||||
}
|
||||
|
||||
func mapMariadbVersion(major, minor string) (tools.MariadbVersion, error) {
|
||||
switch major {
|
||||
case "5":
|
||||
return tools.MariadbVersion55, nil
|
||||
case "10.1":
|
||||
return tools.MariadbVersion101, nil
|
||||
case "10.2":
|
||||
return tools.MariadbVersion102, nil
|
||||
case "10.3":
|
||||
return tools.MariadbVersion103, nil
|
||||
case "10.4":
|
||||
return tools.MariadbVersion104, nil
|
||||
case "10.5":
|
||||
return tools.MariadbVersion105, nil
|
||||
case "10.6":
|
||||
return tools.MariadbVersion106, nil
|
||||
case "10.11":
|
||||
return tools.MariadbVersion1011, nil
|
||||
case "11.4":
|
||||
return tools.MariadbVersion114, nil
|
||||
case "11.8":
|
||||
return tools.MariadbVersion118, nil
|
||||
case "12.0":
|
||||
case "10":
|
||||
return mapMariadb10xVersion(minor)
|
||||
case "11":
|
||||
return mapMariadb11xVersion(minor)
|
||||
case "12":
|
||||
return tools.MariadbVersion120, nil
|
||||
default:
|
||||
return "", fmt.Errorf(
|
||||
"unsupported MariaDB version: %s (supported: 5.5, 10.1-10.6, 10.11, 11.4, 11.8, 12.0)",
|
||||
versionKey,
|
||||
"unsupported MariaDB major version: %s (supported: 5.x, 10.x, 11.x, 12.x)",
|
||||
major,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func mapMariadb10xVersion(minor string) (tools.MariadbVersion, error) {
|
||||
switch minor {
|
||||
case "1":
|
||||
return tools.MariadbVersion101, nil
|
||||
case "2":
|
||||
return tools.MariadbVersion102, nil
|
||||
case "3":
|
||||
return tools.MariadbVersion103, nil
|
||||
case "4":
|
||||
return tools.MariadbVersion104, nil
|
||||
case "5":
|
||||
return tools.MariadbVersion105, nil
|
||||
case "6", "7", "8", "9", "10":
|
||||
return tools.MariadbVersion106, nil
|
||||
default:
|
||||
return tools.MariadbVersion1011, nil
|
||||
}
|
||||
}
|
||||
|
||||
func mapMariadb11xVersion(minor string) (tools.MariadbVersion, error) {
|
||||
switch minor {
|
||||
case "0", "1", "2", "3", "4":
|
||||
return tools.MariadbVersion114, nil
|
||||
case "5", "6", "7", "8":
|
||||
return tools.MariadbVersion118, nil
|
||||
default:
|
||||
return tools.MariadbVersion118, nil
|
||||
}
|
||||
}
|
||||
|
||||
func decryptPasswordIfNeeded(
|
||||
password string,
|
||||
encryptor encryption.FieldEncryptor,
|
||||
|
||||
@@ -342,6 +342,8 @@ func (m *MysqlDatabase) buildDSN(password string, database string) string {
|
||||
)
|
||||
}
|
||||
|
||||
// detectMysqlVersion parses VERSION() output to detect MySQL version
|
||||
// Minor versions are mapped to the closest supported version (e.g., 8.1 → 8.0, 8.4+ → 8.4)
|
||||
func detectMysqlVersion(ctx context.Context, db *sql.DB) (tools.MysqlVersion, error) {
|
||||
var versionStr string
|
||||
err := db.QueryRowContext(ctx, "SELECT VERSION()").Scan(&versionStr)
|
||||
@@ -358,15 +360,31 @@ func detectMysqlVersion(ctx context.Context, db *sql.DB) (tools.MysqlVersion, er
|
||||
major := matches[1]
|
||||
minor := matches[2]
|
||||
|
||||
switch {
|
||||
case major == "5" && minor == "7":
|
||||
return mapMysqlVersion(major, minor)
|
||||
}
|
||||
|
||||
func mapMysqlVersion(major, minor string) (tools.MysqlVersion, error) {
|
||||
switch major {
|
||||
case "5":
|
||||
return tools.MysqlVersion57, nil
|
||||
case major == "8" && minor == "0":
|
||||
return tools.MysqlVersion80, nil
|
||||
case major == "8" && minor == "4":
|
||||
case "8":
|
||||
return mapMysql8xVersion(minor), nil
|
||||
case "9":
|
||||
return tools.MysqlVersion84, nil
|
||||
default:
|
||||
return "", fmt.Errorf("unsupported MySQL version: %s.%s", major, minor)
|
||||
return "", fmt.Errorf(
|
||||
"unsupported MySQL major version: %s (supported: 5.x, 8.x, 9.x)",
|
||||
major,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func mapMysql8xVersion(minor string) tools.MysqlVersion {
|
||||
switch minor {
|
||||
case "0", "1", "2", "3":
|
||||
return tools.MysqlVersion80
|
||||
default:
|
||||
return tools.MysqlVersion84
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user