Skip to content

Commit dbaa5f5

Browse files
committed
fix: the range_of_ranges should check the Range end is smaller than its start
1 parent 66cf225 commit dbaa5f5

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

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.clone()])?, @r###"
995+
---
996+
start: 5
997+
end: 5
998+
"###);
999+
9931000
Ok(())
9941001
}
9951002

0 commit comments

Comments
 (0)