Merge pull request #89 from Quentin-M/fv_find_before_lock
database: Find the FeatureVersion we try to insert before doing any lock
This commit is contained in:
commit
1202a25b46
@ -91,6 +91,23 @@ func (pgSQL *pgSQL) insertFeatureVersion(featureVersion database.FeatureVersion)
|
|||||||
|
|
||||||
featureVersion.Feature.ID = featureID
|
featureVersion.Feature.ID = featureID
|
||||||
|
|
||||||
|
// Try to find the FeatureVersion.
|
||||||
|
//
|
||||||
|
// In a populated database, the likelihood of the FeatureVersion already being there is high.
|
||||||
|
// If we can find it here, we then avoid using a transaction and locking the database.
|
||||||
|
err = pgSQL.QueryRow(searchFeatureVersion, featureID, &featureVersion.Version).
|
||||||
|
Scan(&featureVersion.ID)
|
||||||
|
if err != nil && err != sql.ErrNoRows {
|
||||||
|
return 0, handleError("searchFeatureVersion", err)
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
if pgSQL.cache != nil {
|
||||||
|
pgSQL.cache.Add(cacheIndex, featureVersion.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return featureVersion.ID, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Begin transaction.
|
// Begin transaction.
|
||||||
tx, err := pgSQL.Begin()
|
tx, err := pgSQL.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -52,6 +52,9 @@ const (
|
|||||||
UNION
|
UNION
|
||||||
SELECT id FROM new_feature`
|
SELECT id FROM new_feature`
|
||||||
|
|
||||||
|
searchFeatureVersion = `
|
||||||
|
SELECT id FROM FeatureVersion WHERE feature_id = $1 AND version = $2`
|
||||||
|
|
||||||
soiFeatureVersion = `
|
soiFeatureVersion = `
|
||||||
WITH new_featureversion AS (
|
WITH new_featureversion AS (
|
||||||
INSERT INTO FeatureVersion(feature_id, version)
|
INSERT INTO FeatureVersion(feature_id, version)
|
||||||
|
Loading…
Reference in New Issue
Block a user