Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions Sources/ElasticsearchQueryBuilder/Components.swift
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,22 @@ extension esb {
}
}

/// Adds `sort` block to the query syntax.
public struct Sort<Component: ArrayComponent>: DictComponent {
var component: Component
public init(@QueryArrayBuilder component: () -> Component) {
self.component = component()
}
public func makeDict() -> QueryDict {
let values: [QueryDict] = self.component.makeCompactArray()
if values.isEmpty {
return [:]
} else {
return [ "sort" : .array(values.map(QueryValue.dict)) ]
}
}
}

/// Adds `term` block to the query syntax.
///
/// Excludes the component if value is nil.
Expand Down
85 changes: 61 additions & 24 deletions Tests/ElasticsearchQueryBuilderTests/ComponentTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ final class NothingTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Nothing()
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -17,7 +17,7 @@ final class KeyTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Key("boost", .float(1.2))
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"boost": 1.2
])
}
Expand All @@ -29,7 +29,7 @@ final class KeyTests: XCTestCase {
]
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"match_bool_prefix": [
"message": "quick brown f"
]
Expand All @@ -39,7 +39,7 @@ final class KeyTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Key("match", .dict([:]))
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -57,7 +57,7 @@ final class ComposableBuilderTests: XCTestCase {
makeKey()
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"query": [
"match_bool_prefix": [
"message": "quick brown f"
Expand All @@ -80,7 +80,7 @@ final class ComposableBuilderTests: XCTestCase {
makeKey(true)
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"filter": [
[
"match_bool_prefix": [
Expand All @@ -107,7 +107,7 @@ final class ComposableBuilderTests: XCTestCase {
makeKey(true, 3)
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"filter": [
[
"match_bool_prefix": [
Expand Down Expand Up @@ -135,7 +135,7 @@ final class QueryTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"query": [
"match_bool_prefix": [
"message": "quick brown f"
Expand All @@ -149,7 +149,7 @@ final class QueryTests: XCTestCase {
esb.Key("match", .dict([:]))
}
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand Down Expand Up @@ -196,7 +196,7 @@ final class BoolTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build(true).makeQuery(), [
expectNoDifference(build(true).makeQuery(), [
"bool": [
"minimum_should_match": 1,
"should": [
Expand Down Expand Up @@ -229,7 +229,7 @@ final class BoolTests: XCTestCase {
]
]
])
XCTAssertNoDifference(build(false).makeQuery(), [
expectNoDifference(build(false).makeQuery(), [
"bool": [
"minimum_should_match": 1
]
Expand All @@ -252,7 +252,44 @@ final class BoolTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

final class SortTests: XCTestCase {
func testBuild() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Sort {
esb.Key("_score") {
[ "order": "desc" ]
}
esb.Key("name") {
[ "order": "asc" ]
}
}
}
expectNoDifference(build().makeQuery(), [
"sort": [
[
"_score": [ "order": "desc" ]
],
[
"name": [ "order": "asc" ]
]
]
])
}
func testBuildEmpty() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Sort {
if false {
esb.Key("_score") {
[ "order": "desc" ]
}
}
}
}
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -261,15 +298,15 @@ final class TermTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Term("name", "joe")
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"term": [ "name": "joe" ]
])
}
func testBuildEmpty() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Term("name", nil)
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -278,15 +315,15 @@ final class TermsORTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.TermsOR("name", ["joe", "mary"])
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"terms": [ "name": ["joe", "mary"] ]
])
}
func testBuildEmpty() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.TermsOR("name", [])
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -297,7 +334,7 @@ final class TermsANDTests: XCTestCase {
esb.TermsAND("name", ["joe", "mary"])
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"filter": [
[ "term": [ "name": "joe" ] ],
[ "term": [ "name": "mary" ] ],
Expand All @@ -310,7 +347,7 @@ final class TermsANDTests: XCTestCase {
esb.TermsAND("name", [])
}
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -319,7 +356,7 @@ final class KNearestNeighborTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.kNearestNeighbor("vector_field", [1,2,3])
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"knn": [
"field": "vector_field",
"query_vector": [1.0, 2.0, 3.0],
Expand All @@ -341,7 +378,7 @@ final class KNearestNeighborTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"knn": [
"field": "vector_field",
"query_vector": [1.0, 2.0, 3.0],
Expand Down Expand Up @@ -385,7 +422,7 @@ final class FunctionScoreTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"function_score": [
"bool": [
"should": [
Expand Down Expand Up @@ -415,21 +452,21 @@ final class SearchPaginationTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Pagination()
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
func testBuildFirst() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Pagination(from: 10)
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"from": 10
])
}
func testBuildFirstSize() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Pagination(from: 10, size: 20)
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"from": 10,
"size": 20,
])
Expand Down
Loading