diff --git a/api.go b/api.go index e33cfbf9a7..49e39e9ede 100644 --- a/api.go +++ b/api.go @@ -1088,6 +1088,9 @@ func postContainerLink(srv *Server, version float64, w http.ResponseWriter, r *h } if err := srv.runtime.RenameLink(currentName, newName); err != nil { + if strings.HasSuffix(err.Error(), "name are not unique") { + return fmt.Errorf("Conflict, %s already exists", newName) + } return err } diff --git a/gograph/gograph.go b/gograph/gograph.go index 21f2966e2d..38de5f4a59 100644 --- a/gograph/gograph.go +++ b/gograph/gograph.go @@ -288,7 +288,7 @@ func (db *Database) Delete(name string) error { return err } - if _, err := conn.Exec("DELETE FROM edge WHERE parent_id = ? AND name = ?;", parent.id, n); err != nil { + if _, err := conn.Exec("DELETE FROM edge WHERE parent_id = ? AND name LIKE ?;", parent.id, n+"%"); err != nil { return err } return nil @@ -356,7 +356,7 @@ func (db *Database) Rename(currentName, newName string) error { return err } - rows, err := conn.Exec("UPDATE edge SET name = ? WHERE parent_id = ? AND name = ?;", newEdgeName, parent.id, name) + rows, err := conn.Exec("UPDATE edge SET name = ? WHERE parent_id = ? AND name LIKE ?;", newEdgeName, parent.id, name+"%") if err != nil { return err } @@ -433,7 +433,7 @@ func (db *Database) children(conn *sql.DB, name string, depth int) <-chan WalkMe // Return the entity based on the parent path and name func (db *Database) child(conn *sql.DB, parent *Entity, name string) *Entity { var id string - if err := conn.QueryRow("SELECT entity_id FROM edge WHERE parent_id = ? AND name = ?;", parent.id, name).Scan(&id); err != nil { + if err := conn.QueryRow("SELECT entity_id FROM edge WHERE parent_id = ? AND name LIKE ?;", parent.id, name+"%").Scan(&id); err != nil { return nil } return &Entity{id} diff --git a/runtime.go b/runtime.go index 565802fa1d..7127f72999 100644 --- a/runtime.go +++ b/runtime.go @@ -518,7 +518,7 @@ func (runtime *Runtime) RenameLink(oldName, newName string) error { // This is not rename but adding a new link for the default name // Strip the leading '/' - if entity.ID() == oldName[1:] { + if strings.HasPrefix(entity.ID(), oldName[1:]) { _, err := runtime.containerGraph.Set(newName, entity.ID()) return err }