Skip to content

Commit d2fd17f

Browse files
authored
fix: the range_of_ranges should check the Range end is smaller than its start (#946)
1 parent 9ba8374 commit d2fd17f

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# PRQL Changelog
22

3+
## [unreleased]
4+
5+
### Fixes
6+
7+
- `range_of_ranges` checks the Range end is smaller than its start (@shuozeli, #946)
8+
39
## 0.2.6 — 2022-08-05
410

511
### Fixes

prql-compiler/src/lib.rs

+12
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,18 @@ select `first name`
759759
employees OFFSET 4
760760
"###);
761761

762+
assert_display_snapshot!((compile(r###"
763+
from employees
764+
take 5..5
765+
"###)?), @r###"
766+
SELECT
767+
employees.*
768+
FROM
769+
employees
770+
LIMIT
771+
1 OFFSET 4
772+
"###);
773+
762774
// should be one SELECT
763775
assert_display_snapshot!((compile(r###"
764776
from employees

prql-compiler/src/sql/translator.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ fn range_of_ranges(ranges: Vec<Range>) -> Result<Range<i64>> {
406406
if current
407407
.start
408408
.zip(current.end)
409-
.map(|(s, e)| e <= s)
409+
.map(|(s, e)| e < s)
410410
.unwrap_or(false)
411411
{
412412
bail!("Range end is before its start.");
@@ -936,6 +936,7 @@ mod test {
936936
let range2 = Range::from_ints(Some(5), Some(6));
937937
let range3 = Range::from_ints(Some(5), None);
938938
let range4 = Range::from_ints(None, Some(8));
939+
let range5 = Range::from_ints(Some(5), Some(5));
939940

940941
assert!(range_of_ranges(vec![range1.clone()])?.end.is_some());
941942

@@ -990,6 +991,12 @@ mod test {
990991
end: 8
991992
"###);
992993

994+
assert_yaml_snapshot!(range_of_ranges(vec![range5])?, @r###"
995+
---
996+
start: 5
997+
end: 5
998+
"###);
999+
9931000
Ok(())
9941001
}
9951002

0 commit comments

Comments
 (0)