database: remove an useless query in FindLayer
This commit is contained in:
parent
bd17dfb5e1
commit
92b734d0a4
@ -43,7 +43,7 @@ func (pgSQL *pgSQL) FindLayer(name string, withFeatures, withVulnerabilities boo
|
||||
|
||||
// Find its features
|
||||
if withFeatures || withVulnerabilities {
|
||||
featureVersions, err := pgSQL.getLayerFeatureVersions(layer.ID, !withFeatures)
|
||||
featureVersions, err := pgSQL.getLayerFeatureVersions(layer.ID)
|
||||
if err != nil {
|
||||
return layer, err
|
||||
}
|
||||
@ -62,47 +62,30 @@ func (pgSQL *pgSQL) FindLayer(name string, withFeatures, withVulnerabilities boo
|
||||
}
|
||||
|
||||
// getLayerFeatureVersions returns list of database.FeatureVersion that a database.Layer has.
|
||||
// if idOnly is specified, the returned structs will only have their ID filled. Otherwise,
|
||||
// it also gets their versions, feature's names, feature's namespace's names.
|
||||
func (pgSQL *pgSQL) getLayerFeatureVersions(layerID int, idOnly bool) ([]database.FeatureVersion, error) {
|
||||
func (pgSQL *pgSQL) getLayerFeatureVersions(layerID int) ([]database.FeatureVersion, error) {
|
||||
var featureVersions []database.FeatureVersion
|
||||
|
||||
// Build query
|
||||
var query string
|
||||
if idOnly {
|
||||
query = getQuery("s_layer_featureversion_id_only")
|
||||
} else {
|
||||
query = getQuery("s_layer_featureversion")
|
||||
}
|
||||
|
||||
// Query
|
||||
rows, err := pgSQL.Query(query, layerID)
|
||||
// Query.
|
||||
rows, err := pgSQL.Query(getQuery("s_layer_featureversion"), layerID)
|
||||
if err != nil {
|
||||
return featureVersions, handleError(query, err)
|
||||
return featureVersions, handleError("s_layer_featureversion", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
// Scan query
|
||||
// Scan query.
|
||||
var modification string
|
||||
mapFeatureVersions := make(map[int]database.FeatureVersion)
|
||||
for rows.Next() {
|
||||
var featureVersion database.FeatureVersion
|
||||
|
||||
if idOnly {
|
||||
err = rows.Scan(&featureVersion.ID, &modification)
|
||||
if err != nil {
|
||||
return featureVersions, handleError(query+".Scan()", err)
|
||||
}
|
||||
} else {
|
||||
err = rows.Scan(&featureVersion.ID, &modification, &featureVersion.Feature.Namespace.ID,
|
||||
&featureVersion.Feature.Namespace.Name, &featureVersion.Feature.ID,
|
||||
&featureVersion.Feature.Name, &featureVersion.ID, &featureVersion.Version)
|
||||
if err != nil {
|
||||
return featureVersions, handleError(query+".Scan()", err)
|
||||
}
|
||||
err = rows.Scan(&featureVersion.ID, &modification, &featureVersion.Feature.Namespace.ID,
|
||||
&featureVersion.Feature.Namespace.Name, &featureVersion.Feature.ID,
|
||||
&featureVersion.Feature.Name, &featureVersion.ID, &featureVersion.Version)
|
||||
if err != nil {
|
||||
return featureVersions, handleError("s_layer_featureversion.Scan()", err)
|
||||
}
|
||||
|
||||
// Do transitive closure
|
||||
// Do transitive closure.
|
||||
switch modification {
|
||||
case "add":
|
||||
mapFeatureVersions[featureVersion.ID] = featureVersion
|
||||
@ -114,10 +97,10 @@ func (pgSQL *pgSQL) getLayerFeatureVersions(layerID int, idOnly bool) ([]databas
|
||||
}
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return featureVersions, handleError(query+".Rows()", err)
|
||||
return featureVersions, handleError("s_layer_featureversion.Rows()", err)
|
||||
}
|
||||
|
||||
// Build result by converting our map to a slice
|
||||
// Build result by converting our map to a slice.
|
||||
for _, featureVersion := range mapFeatureVersions {
|
||||
featureVersions = append(featureVersions, featureVersion)
|
||||
}
|
||||
|
@ -69,23 +69,6 @@ func init() {
|
||||
LEFT JOIN Namespace n ON l.namespace_id = n.id
|
||||
WHERE l.name = $1;`
|
||||
|
||||
queries["s_layer_featureversion_id_only"] = `
|
||||
WITH RECURSIVE layer_tree(id, parent_id, depth, path, cycle) AS(
|
||||
SELECT l.id, l.parent_id, 1, ARRAY[l.id], false
|
||||
FROM Layer l
|
||||
WHERE l.id = $1
|
||||
UNION ALL
|
||||
SELECT l.id, l.parent_id, lt.depth + 1, path || l.id, l.id = ANY(path)
|
||||
FROM Layer l, layer_tree lt
|
||||
WHERE l.id = lt.parent_id
|
||||
)
|
||||
SELECT ldf.featureversion_id, ldf.modification
|
||||
FROM Layer_diff_FeatureVersion ldf
|
||||
JOIN (
|
||||
SELECT row_number() over (ORDER BY depth DESC), id FROM layer_tree
|
||||
) AS ltree (ordering, id) ON ldf.layer_id = ltree.id
|
||||
ORDER BY ltree.ordering`
|
||||
|
||||
queries["s_layer_featureversion"] = `
|
||||
WITH RECURSIVE layer_tree(id, parent_id, depth, path, cycle) AS(
|
||||
SELECT l.id, l.parent_id, 1, ARRAY[l.id], false
|
||||
|
Loading…
Reference in New Issue
Block a user