Skip to content

Commit fc24915

Browse files
authored
Fix for BETWEEN queries. (#47)
1 parent dc7318a commit fc24915

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

Sources/StructuredQueriesCore/Operators.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ extension QueryExpression where QueryValue: QueryBindable {
861861
BinaryOperator(
862862
lhs: self,
863863
operator: "BETWEEN",
864-
rhs: BinaryOperator<Void>(lhs: lowerBound, operator: "AND", rhs: upperBound)
864+
rhs: SQLQueryExpression("\(lowerBound) AND \(upperBound)")
865865
)
866866
}
867867
}

Tests/StructuredQueriesTests/OperatorsTests.swift

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,15 +405,74 @@ extension SnapshotTests {
405405
as: .sql
406406
) {
407407
"""
408-
("rows"."c" BETWEEN (0 AND 10))
408+
("rows"."c" BETWEEN 0 AND 10)
409409
"""
410410
}
411411
assertInlineSnapshot(
412412
of: Row.columns.c.between(0, and: 10),
413413
as: .sql
414414
) {
415415
"""
416-
("rows"."c" BETWEEN (0 AND 10))
416+
("rows"."c" BETWEEN 0 AND 10)
417+
"""
418+
}
419+
assertQuery(
420+
Reminder.where {
421+
$0.id.between(
422+
Reminder.select { $0.id.min() } ?? 0,
423+
and: (Reminder.select { $0.id.max() } ?? 0) / 3
424+
)
425+
}) {
426+
"""
427+
SELECT "reminders"."id", "reminders"."assignedUserID", "reminders"."dueDate", "reminders"."isCompleted", "reminders"."isFlagged", "reminders"."notes", "reminders"."priority", "reminders"."remindersListID", "reminders"."title"
428+
FROM "reminders"
429+
WHERE ("reminders"."id" BETWEEN coalesce((
430+
SELECT min("reminders"."id")
431+
FROM "reminders"
432+
), 0) AND (coalesce((
433+
SELECT max("reminders"."id")
434+
FROM "reminders"
435+
), 0) / 3))
436+
"""
437+
}results: {
438+
"""
439+
┌────────────────────────────────────────────┐
440+
│ Reminder( │
441+
│ id: 1, │
442+
│ assignedUserID: 1, │
443+
│ dueDate: Date(2001-01-01T00:00:00.000Z), │
444+
│ isCompleted: false, │
445+
│ isFlagged: false, │
446+
│ notes: "Milk, Eggs, Apples", │
447+
│ priority: nil, │
448+
│ remindersListID: 1, │
449+
│ title: "Groceries"
450+
│ ) │
451+
├────────────────────────────────────────────┤
452+
│ Reminder( │
453+
│ id: 2, │
454+
│ assignedUserID: nil, │
455+
│ dueDate: Date(2000-12-30T00:00:00.000Z), │
456+
│ isCompleted: false, │
457+
│ isFlagged: true, │
458+
│ notes: "", │
459+
│ priority: nil, │
460+
│ remindersListID: 1, │
461+
│ title: "Haircut"
462+
│ ) │
463+
├────────────────────────────────────────────┤
464+
│ Reminder( │
465+
│ id: 3, │
466+
│ assignedUserID: nil, │
467+
│ dueDate: Date(2001-01-01T00:00:00.000Z), │
468+
│ isCompleted: false, │
469+
│ isFlagged: false, │
470+
│ notes: "Ask about diet", │
471+
│ priority: .high, │
472+
│ remindersListID: 1, │
473+
│ title: "Doctor appointment"
474+
│ ) │
475+
└────────────────────────────────────────────┘
417476
"""
418477
}
419478
}

0 commit comments

Comments
 (0)