database: remove an useless query in FindLayer

pull/71/head
Quentin Machu 9 years ago committed by Jimmy Zelinskie
parent bd17dfb5e1
commit 92b734d0a4

@ -43,7 +43,7 @@ func (pgSQL *pgSQL) FindLayer(name string, withFeatures, withVulnerabilities boo
// Find its features // Find its features
if withFeatures || withVulnerabilities { if withFeatures || withVulnerabilities {
featureVersions, err := pgSQL.getLayerFeatureVersions(layer.ID, !withFeatures) featureVersions, err := pgSQL.getLayerFeatureVersions(layer.ID)
if err != nil { if err != nil {
return layer, err 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. // 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, func (pgSQL *pgSQL) getLayerFeatureVersions(layerID int) ([]database.FeatureVersion, error) {
// it also gets their versions, feature's names, feature's namespace's names.
func (pgSQL *pgSQL) getLayerFeatureVersions(layerID int, idOnly bool) ([]database.FeatureVersion, error) {
var featureVersions []database.FeatureVersion var featureVersions []database.FeatureVersion
// Build query // Query.
var query string rows, err := pgSQL.Query(getQuery("s_layer_featureversion"), layerID)
if idOnly {
query = getQuery("s_layer_featureversion_id_only")
} else {
query = getQuery("s_layer_featureversion")
}
// Query
rows, err := pgSQL.Query(query, layerID)
if err != nil { if err != nil {
return featureVersions, handleError(query, err) return featureVersions, handleError("s_layer_featureversion", err)
} }
defer rows.Close() defer rows.Close()
// Scan query // Scan query.
var modification string var modification string
mapFeatureVersions := make(map[int]database.FeatureVersion) mapFeatureVersions := make(map[int]database.FeatureVersion)
for rows.Next() { for rows.Next() {
var featureVersion database.FeatureVersion var featureVersion database.FeatureVersion
if idOnly { err = rows.Scan(&featureVersion.ID, &modification, &featureVersion.Feature.Namespace.ID,
err = rows.Scan(&featureVersion.ID, &modification) &featureVersion.Feature.Namespace.Name, &featureVersion.Feature.ID,
if err != nil { &featureVersion.Feature.Name, &featureVersion.ID, &featureVersion.Version)
return featureVersions, handleError(query+".Scan()", err) if err != nil {
} return featureVersions, handleError("s_layer_featureversion.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)
}
} }
// Do transitive closure // Do transitive closure.
switch modification { switch modification {
case "add": case "add":
mapFeatureVersions[featureVersion.ID] = featureVersion mapFeatureVersions[featureVersion.ID] = featureVersion
@ -114,10 +97,10 @@ func (pgSQL *pgSQL) getLayerFeatureVersions(layerID int, idOnly bool) ([]databas
} }
} }
if err = rows.Err(); err != nil { 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 { for _, featureVersion := range mapFeatureVersions {
featureVersions = append(featureVersions, featureVersion) featureVersions = append(featureVersions, featureVersion)
} }

@ -69,23 +69,6 @@ func init() {
LEFT JOIN Namespace n ON l.namespace_id = n.id LEFT JOIN Namespace n ON l.namespace_id = n.id
WHERE l.name = $1;` 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"] = ` queries["s_layer_featureversion"] = `
WITH RECURSIVE layer_tree(id, parent_id, depth, path, cycle) AS( WITH RECURSIVE layer_tree(id, parent_id, depth, path, cycle) AS(
SELECT l.id, l.parent_id, 1, ARRAY[l.id], false SELECT l.id, l.parent_id, 1, ARRAY[l.id], false

Loading…
Cancel
Save