runtime: Fix unique constraint error checks
The sqlite3 version in fedora (3.8) returns a different error string in the unique constraints failure case than the one in hack/ (3.7). This updates the check to detect both, fixing one integration check failure on Fedora. Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
This commit is contained in:
parent
98f0a748a7
commit
48cfa0fbdf
1 changed files with 16 additions and 0 deletions
|
@ -4,6 +4,7 @@ import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -51,6 +52,21 @@ type Database struct {
|
||||||
mux sync.RWMutex
|
mux sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsNonUniqueNameError(err error) bool {
|
||||||
|
str := err.Error()
|
||||||
|
// sqlite 3.7.17-1ubuntu1 returns:
|
||||||
|
// Set failure: Abort due to constraint violation: columns parent_id, name are not unique
|
||||||
|
if strings.HasSuffix(str, "name are not unique") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// sqlite-3.8.3-1.fc20 returns:
|
||||||
|
// Set failure: Abort due to constraint violation: UNIQUE constraint failed: edge.parent_id, edge.name
|
||||||
|
if strings.Contains(str, "UNIQUE constraint failed") && strings.Contains(str, "edge.name") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new graph database initialized with a root entity
|
// Create a new graph database initialized with a root entity
|
||||||
func NewDatabase(conn *sql.DB, init bool) (*Database, error) {
|
func NewDatabase(conn *sql.DB, init bool) (*Database, error) {
|
||||||
if conn == nil {
|
if conn == nil {
|
||||||
|
|
Loading…
Reference in a new issue