diff --git a/database/pgsql/migrations/00004_ldfv_index.go b/database/pgsql/migrations/00004_ldfv_index.go new file mode 100644 index 00000000..97a5cf6f --- /dev/null +++ b/database/pgsql/migrations/00004_ldfv_index.go @@ -0,0 +1,29 @@ +// Copyright 2016 clair authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package migrations + +import "github.com/remind101/migrate" + +func init() { + RegisterMigration(migrate.Migration{ + ID: 4, + Up: migrate.Queries([]string{ + `CREATE INDEX layer_diff_featureversion_layer_id_modification_idx ON Layer_diff_FeatureVersion (layer_id, modification);`, + }), + Down: migrate.Queries([]string{ + `DROP INDEX layer_diff_featureversion_layer_id_modification_idx;`, + }), + }) +} diff --git a/database/pgsql/queries.go b/database/pgsql/queries.go index 99dec448..311a1196 100644 --- a/database/pgsql/queries.go +++ b/database/pgsql/queries.go @@ -211,23 +211,21 @@ const ( WHERE name = $1` searchNotificationLayerIntroducingVulnerability = ` - WITH subquery AS ( - SELECT l.ID, l.name - FROM Vulnerability_Affects_FeatureVersion vafv, FeatureVersion fv, Layer_diff_FeatureVersion ldfv, Layer l - WHERE l.id >= $2 - AND vafv.vulnerability_id = $1 - AND vafv.featureversion_id = fv.id - AND ldfv.featureversion_id = fv.id - AND ldfv.modification = 'add' - AND ldfv.layer_id = l.id - ORDER BY l.ID - ) - - SELECT * - FROM subquery - LIMIT $3; -` - + WITH LDFV AS ( + SELECT ldfv.layer_id + FROM Vulnerability_Affects_FeatureVersion vafv, FeatureVersion fv, Layer_diff_FeatureVersion ldfv + WHERE ldfv.layer_id >= $2 + AND vafv.vulnerability_id = $1 + AND vafv.featureversion_id = fv.id + AND ldfv.featureversion_id = fv.id + AND ldfv.modification = 'add' + ORDER BY ldfv.ID + ) + SELECT l.id, l.name + FROM LDFV, Layer l + WHERE LDFV.layer_id = l.id + LIMIT $3` + // complex_test.go searchComplexTestFeatureVersionAffects = ` SELECT v.name