From ec0aad9b7a4e8021b633f983f2e1d9ef496bf49c Mon Sep 17 00:00:00 2001 From: Quentin Machu Date: Sat, 12 Nov 2016 15:42:59 +0100 Subject: [PATCH] pgsql: Use booleans instead of varchar to return creation status --- database/pgsql/feature.go | 9 +++++---- database/pgsql/queries.go | 8 ++++---- database/pgsql/vulnerability.go | 8 ++++---- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/database/pgsql/feature.go b/database/pgsql/feature.go index a2f2abe873..c0b5a3504e 100644 --- a/database/pgsql/feature.go +++ b/database/pgsql/feature.go @@ -129,11 +129,11 @@ func (pgSQL *pgSQL) insertFeatureVersion(featureVersion database.FeatureVersion) } // Find or create FeatureVersion. - var newOrExisting string + var created bool t = time.Now() err = tx.QueryRow(soiFeatureVersion, featureID, &featureVersion.Version). - Scan(&newOrExisting, &featureVersion.ID) + Scan(&created, &featureVersion.ID) observeQueryTime("insertFeatureVersion", "soiFeatureVersion", t) if err != nil { @@ -141,8 +141,9 @@ func (pgSQL *pgSQL) insertFeatureVersion(featureVersion database.FeatureVersion) return 0, handleError("soiFeatureVersion", err) } - if newOrExisting == "exi" { - // That featureVersion already exists, return its id. + if !created { + // The featureVersion already existed, no need to link it to + // vulnerabilities. tx.Commit() if pgSQL.cache != nil { diff --git a/database/pgsql/queries.go b/database/pgsql/queries.go index a7d04ca113..99dec448c5 100644 --- a/database/pgsql/queries.go +++ b/database/pgsql/queries.go @@ -63,9 +63,9 @@ const ( WHERE NOT EXISTS (SELECT id FROM FeatureVersion WHERE feature_id = $1 AND version = $2) RETURNING id ) - SELECT 'exi', id FROM FeatureVersion WHERE feature_id = $1 AND version = $2 + SELECT false, id FROM FeatureVersion WHERE feature_id = $1 AND version = $2 UNION - SELECT 'new', id FROM new_featureversion` + SELECT true, id FROM new_featureversion` searchVulnerabilityFixedInFeature = ` SELECT id, vulnerability_id, version FROM Vulnerability_FixedIn_Feature @@ -167,9 +167,9 @@ const ( WHERE NOT EXISTS (SELECT id FROM Vulnerability_FixedIn_Feature WHERE vulnerability_id = $1 AND feature_id = $2) RETURNING id ) - SELECT 'exi', id FROM Vulnerability_FixedIn_Feature WHERE vulnerability_id = $1 AND feature_id = $2 + SELECT false, id FROM Vulnerability_FixedIn_Feature WHERE vulnerability_id = $1 AND feature_id = $2 UNION - SELECT 'new', id FROM new_fixedinfeature` + SELECT true, id FROM new_fixedinfeature` searchFeatureVersionByFeature = `SELECT id, version FROM FeatureVersion WHERE feature_id = $1` diff --git a/database/pgsql/vulnerability.go b/database/pgsql/vulnerability.go index 6fbb725118..022aafecc4 100644 --- a/database/pgsql/vulnerability.go +++ b/database/pgsql/vulnerability.go @@ -433,22 +433,22 @@ func (pgSQL *pgSQL) insertVulnerabilityFixedInFeatureVersions(tx *sql.Tx, vulner for _, fv := range fixedIn { var fixedInID int - var newOrExisting string + var created bool // Find or create entry in Vulnerability_FixedIn_Feature. err = tx.QueryRow( soiVulnerabilityFixedInFeature, vulnerabilityID, fv.Feature.ID, &fv.Version, - ).Scan(&newOrExisting, &fixedInID) + ).Scan(&created, &fixedInID) if err != nil { return handleError("insertVulnerabilityFixedInFeature", err) } - if newOrExisting == "exi" { + if !created { // The relationship between the feature and the vulnerability already - // exists, there's no need to update Vulnerability_Affects_FeatureVersion. + // existed, no need to update Vulnerability_Affects_FeatureVersion. continue }