Skip to content

Commit 327df67

Browse files
c-wtimfpark
authored andcommitted
Improve performance of by-name lookup (#8)
* Improve performance of by-name lookup * Consistency fix: make array handling like getById * Remove unnecessary like condition
1 parent 45ba2a3 commit 327df67

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

controllers/features.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ exports.getByPoint = function(req, res) {
5353

5454
exports.getByName = function(req, res) {
5555
let query = {
56-
name: req.params.name,
56+
name: req.params.name.split(','),
5757
include: req.query.include
5858
};
5959

schema.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ CREATE TABLE features
2424
);
2525

2626
CREATE INDEX features_hull_index ON features USING gist (hull);
27+
CREATE INDEX features_name_lower_index ON features(lower(name));
2728

2829
GRANT SELECT, UPDATE, INSERT, DELETE ON features TO frontend;
2930

services/features.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ function getByPoint(query, callback) {
133133
}
134134

135135
function getByName(query, callback) {
136-
let namesDisjunction = query.name.split(',').map(function(name) { return `name ilike ${escapeSql(name)}`; }).join(" OR ");
136+
const names = query.name.constructor === Array ? query.name : [query.name];
137+
138+
let namesDisjunction = names.map(function(name) {
139+
return `lower(name) = ${escapeSql(name.toLowerCase())}`;
140+
}).join(" OR ");
137141
let nameQuery = `SELECT ${buildQueryColumns(query)} FROM features WHERE ${namesDisjunction}`;
138142

139143
if (query.layer) {

0 commit comments

Comments
 (0)