--- android/TrainInfoService/src/dk/thoerup/traininfoservice/StationDAO.java 2010/04/19 19:04:34 650 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/StationDAO.java 2010/05/18 20:39:22 734 @@ -63,11 +63,16 @@ return result; } - + /* + * this code requires theses statements are run on database in order to do ILIKE searches against aliases (which is defines as array of varchar(64) ) + * create function rlike(text,text) returns bool as + * 'select $2 ilike $1' language sql strict immutable; + * create operator ~~~ (procedure = rlike, leftarg = text, rightarg = text, commutator = ~~); + */ public List getByName(String name) throws SQLException { String SQL = "SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog, stationcode_metro, address, 0.0 " + "FROM trainstations " + - "WHERE name ILIKE ? AND enabled = true " + + "WHERE (name ILIKE ? OR ? ~~~ ANY(aliases)) AND enabled = true " + "ORDER BY name "; @@ -80,6 +85,7 @@ stmt = conn.prepareStatement(SQL); stmt.setString(1, name + "%"); + stmt.setString(2, name + "%"); res = stmt.executeQuery(); result = convertResultset(res); @@ -96,14 +102,12 @@ } public List getByLocation(double latitude, double longitude) throws SQLException { - String SQL = "SELECT * FROM ( "+ - " SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog, stationcode_metro, address," + - " earth_distance( ll_to_earth(latitude,longitude), ll_to_earth(?,?))::int AS calcdist " + - " FROM trainstations " + - " WHERE enabled = true " + - " ) AS trainstations2 " + - "ORDER BY calcdist ASC " + - "LIMIT 4 "; + String SQL = "SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog, stationcode_metro, address," + + " earth_distance( earth_coord, ll_to_earth(?,?))::int AS calcdist " + + "FROM trainstations " + + "WHERE enabled = true " + + "ORDER BY calcdist ASC " + + "LIMIT 4 "; List result; Connection conn = null; PreparedStatement stmt = null;