From 96452715225cabbbbc9063d06ed2c6eb97da51cc Mon Sep 17 00:00:00 2001 From: Emilio Lahr-Vivaz Date: Fri, 6 Oct 2023 14:11:41 +0000 Subject: [PATCH] GEOMESA-3297 Fix parsing of date splits --- .../index/conf/splitter/SplitPatternParser.scala | 4 ++-- .../index/conf/splitter/DefaultSplitterTest.scala | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/geomesa-index-api/src/main/scala/org/locationtech/geomesa/index/conf/splitter/SplitPatternParser.scala b/geomesa-index-api/src/main/scala/org/locationtech/geomesa/index/conf/splitter/SplitPatternParser.scala index 10669eed60b5..95432a8d31d3 100644 --- a/geomesa-index-api/src/main/scala/org/locationtech/geomesa/index/conf/splitter/SplitPatternParser.scala +++ b/geomesa-index-api/src/main/scala/org/locationtech/geomesa/index/conf/splitter/SplitPatternParser.scala @@ -151,7 +151,7 @@ private class SplitPatternParser extends BasicParser { private def year: Rule0 = rule { nTimes(4, "0" - "9") } - private def month: Rule0 = rule { ("0" - "1") ~ ("1" - "9") } + private def month: Rule0 = rule { ("0" ~ ("1" - "9")) | ("1" ~ ("0" - "2")) } - private def day: Rule0 = rule { ("0" - "3") ~ ("0" - "9") } + private def day: Rule0 = rule { (("0" - "2") ~ ("0" - "9")) | ("3" ~ ("0" - "1")) } } diff --git a/geomesa-index-api/src/test/scala/org/locationtech/geomesa/index/conf/splitter/DefaultSplitterTest.scala b/geomesa-index-api/src/test/scala/org/locationtech/geomesa/index/conf/splitter/DefaultSplitterTest.scala index 1ccf9b442a3e..29378b0aeec7 100644 --- a/geomesa-index-api/src/test/scala/org/locationtech/geomesa/index/conf/splitter/DefaultSplitterTest.scala +++ b/geomesa-index-api/src/test/scala/org/locationtech/geomesa/index/conf/splitter/DefaultSplitterTest.scala @@ -111,6 +111,21 @@ class DefaultSplitterTest extends Specification { splits.toSeq must containAllOf(dates) } + "produce correct string tiered date splits for all dates" in { + foreach(Seq("2023-01-01", "2023-10-04", "2023-11-11", "2023-12-31")) { date => + val opts = + "attr.myString.pattern:[A][B][C],attr.myString.pattern2:[B-Z]," + + s"attr.myString.date-range:2023-09-15/$date/4" + splitter.getSplits(sft, attrString, opts) must not(throwAn[Exception]) + } + foreach(Seq("2023-01-32", "2023-13-04", "2023-00-11", "2023-12-00")) { date => + val opts = + "attr.myString.pattern:[A][B][C],attr.myString.pattern2:[B-Z]," + + s"attr.myString.date-range:2023-09-15/$date/4" + splitter.getSplits(sft, attrString, opts) must throwAn[Exception] + } + } + "produce correct int splits" in { val opts = "attr.myInt.pattern:[0-9]" val splits = splitter.getSplits(sft, attrInt, opts)