aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go20
1 files changed, 11 insertions, 9 deletions
diff --git a/main.go b/main.go
index f6d4231..0df453e 100644
--- a/main.go
+++ b/main.go
@@ -845,15 +845,17 @@ type webSimilarImage struct {
func getSimilar(sha1 string, dhash int64, pixels int64, distance int) (
result []webSimilarImage, err error) {
- // For distance ∈ {0, 1}, this query is quite inefficient.
- // In exchange, it's generic.
- //
- // If there's a dhash, there should also be thumbnail dimensions,
- // so not bothering with IFNULL on them.
- rows, err := db.Query(`
- SELECT sha1, width * height, IFNULL(thumbw, 0), IFNULL(thumbh, 0)
- FROM image WHERE sha1 <> ? AND dhash IS NOT NULL
- AND hamming(dhash, ?) = ?`, sha1, dhash, distance)
+ // If there's a dhash, there should also be thumbnail dimensions.
+ var rows *sql.Rows
+ common := `SELECT sha1, width * height, IFNULL(thumbw, 0), IFNULL(thumbh, 0)
+ FROM image WHERE sha1 <> ? AND `
+ if distance == 0 {
+ rows, err = db.Query(common+`dhash = ?`, sha1, dhash)
+ } else {
+ // This is generic, but quite inefficient for distance ∈ {0, 1}.
+ rows, err = db.Query(common+`dhash IS NOT NULL
+ AND hamming(dhash, ?) = ?`, sha1, dhash, distance)
+ }
if err != nil {
return nil, err
}