From 2bce26854fa671d87a1a5871bcfd7a34a3957394 Mon Sep 17 00:00:00 2001 From: Tim <0xtimc@gmail.com> Date: Tue, 17 Sep 2019 15:29:43 +0100 Subject: [PATCH 1/2] Add function for sort by distance --- .../Queries/QueryBuilder+Sort.swift | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift diff --git a/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift b/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift new file mode 100644 index 0000000..8757334 --- /dev/null +++ b/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift @@ -0,0 +1,29 @@ +import FluentPostgreSQL + +extension QueryBuilder where + Database: QuerySupporting, + Database.QuerySort: SQLOrderBy, + Database.QueryFilter: SQLExpression, + Database.QueryFilterValue == Database.QueryFilter +{ + @discardableResult + public func sortByDistance(between key: KeyPath, _ filter: V) -> Self + where T: GeometryConvertible, V: GeometryConvertible { + return self.sort(Database.distanceSort(between: Database.queryField(.keyPath(key)), Database.queryFilterValueGeographic(filter))) + } + +} + +extension QuerySupporting where + QuerySort: SQLOrderBy +{ + public static func distanceSort(between field: QueryField, _ filter: QueryFilterValue) -> QuerySort { + let args: [QuerySort.Expression.Function.Argument] = [ + GenericSQLFunctionArgument.expression(PostgreSQLExpression.column(field as! PostgreSQLColumnIdentifier)), + GenericSQLFunctionArgument.expression(filter as! PostgreSQLExpression), + ] as! [QuerySort.Expression.Function.Argument] + return .orderBy(.function("ST Distance", args), .ascending) + } +} + + From a4fa1d2abcd64e143828cb169a8b3d32534afa5f Mon Sep 17 00:00:00 2001 From: Tim <0xtimc@gmail.com> Date: Tue, 17 Sep 2019 16:21:03 +0100 Subject: [PATCH 2/2] Tit --- Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift b/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift index 8757334..c1ef5f6 100644 --- a/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift +++ b/Sources/FluentPostGIS/Queries/QueryBuilder+Sort.swift @@ -22,7 +22,7 @@ extension QuerySupporting where GenericSQLFunctionArgument.expression(PostgreSQLExpression.column(field as! PostgreSQLColumnIdentifier)), GenericSQLFunctionArgument.expression(filter as! PostgreSQLExpression), ] as! [QuerySort.Expression.Function.Argument] - return .orderBy(.function("ST Distance", args), .ascending) + return .orderBy(.function("ST_Distance", args), .ascending) } }