move parent namespace query from insert to find
Signed-off-by: liang chenye <liangchenye@huawei.com>
This commit is contained in:
parent
850b6f30f5
commit
6d2f462d06
@ -53,6 +53,26 @@ func (pgSQL *pgSQL) FindLayer(name string, withFeatures, withVulnerabilities boo
|
||||
Model: database.Model{ID: int(parentID.Int64)},
|
||||
Name: parentName.String,
|
||||
}
|
||||
|
||||
// Find its parent's namespaces
|
||||
rows, err := pgSQL.Query(searchLayerNamespace, parentID)
|
||||
if err != nil {
|
||||
return layer, handleError("searchLayerNamespace", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var pn database.Namespace
|
||||
|
||||
err = rows.Scan(&pn.ID, &pn.Name)
|
||||
if err != nil {
|
||||
return layer, handleError("searchLayerNamespace.Scan()", err)
|
||||
}
|
||||
layer.Parent.Namespaces = append(layer.Parent.Namespaces, pn)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return layer, handleError("searchLayerNamespace.Rows()", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Find its namespaces
|
||||
@ -248,9 +268,26 @@ func (pgSQL *pgSQL) InsertLayer(layer database.Layer) error {
|
||||
// We do `defer observeQueryTime` here because we don't want to observe existing layers.
|
||||
defer observeQueryTime("InsertLayer", "all", tf)
|
||||
|
||||
// Insert Namespaces
|
||||
mapNamespaceIDs := make(map[string]int)
|
||||
for i, _ := range layer.Namespaces {
|
||||
id, err := pgSQL.insertNamespace(layer.Namespaces[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if layer.Namespaces[i].ID == 0 {
|
||||
layer.Namespaces[i].ID = id
|
||||
}
|
||||
|
||||
// Layer's namespaces has high priority than its parent.
|
||||
// Once a layer has a 'same' namespace (the content before ':' is the same)
|
||||
// with its parent, it will only keep its namespace.
|
||||
name := strings.Split(layer.Namespaces[i].Name, ":")
|
||||
mapNamespaceIDs[name[0]] = id
|
||||
}
|
||||
|
||||
// Get parent ID.
|
||||
var parentID zero.Int
|
||||
mapNamespaceIDs := make(map[string]int)
|
||||
if layer.Parent != nil {
|
||||
if layer.Parent.ID == 0 {
|
||||
log.Warning("Parent is expected to be retrieved from database when inserting a layer.")
|
||||
@ -259,42 +296,14 @@ func (pgSQL *pgSQL) InsertLayer(layer database.Layer) error {
|
||||
|
||||
parentID = zero.IntFrom(int64(layer.Parent.ID))
|
||||
|
||||
// Find its parent's namespaces
|
||||
rows, err := pgSQL.Query(searchLayerNamespace, parentID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var pn database.Namespace
|
||||
|
||||
err = rows.Scan(&pn.ID, &pn.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, pn := range layer.Parent.Namespaces {
|
||||
name := strings.Split(pn.Name, ":")
|
||||
if _, ok := mapNamespaceIDs[name[0]]; !ok {
|
||||
// Layer will inherit its parent's namespace
|
||||
mapNamespaceIDs[name[0]] = pn.ID
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return err
|
||||
layer.Namespaces = append(layer.Namespaces, pn)
|
||||
}
|
||||
}
|
||||
|
||||
// Insert Namespaces
|
||||
for _, n := range layer.Namespaces {
|
||||
id, err := pgSQL.insertNamespace(n)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Layer's namespaces has high priority than its parent.
|
||||
// Once a layer has a 'same' namespace (the content before ':' is the same)
|
||||
// with its parent, it will only keep its namespace.
|
||||
name := strings.Split(n.Name, ":")
|
||||
mapNamespaceIDs[name[0]] = id
|
||||
}
|
||||
|
||||
// Begin transaction.
|
||||
|
Loading…
Reference in New Issue
Block a user