spark-instrumented-optimizer/common
Maxim Gekk da576a737c [SPARK-29369][SQL] Support string intervals without the interval prefix
### What changes were proposed in this pull request?
In the PR, I propose to move interval parsing to `CalendarInterval.fromCaseInsensitiveString()` which throws an `IllegalArgumentException` for invalid strings, and reuse it from `CalendarInterval.fromString()`. The former one handles `IllegalArgumentException` only and returns `NULL` for invalid interval strings. This will allow to support interval strings without the `interval` prefix in casting strings to intervals and in interval type constructor because they use `fromString()` for parsing string intervals.

For example:
```sql
spark-sql> select cast('1 year 10 days' as interval);
interval 1 years 1 weeks 3 days
spark-sql> SELECT INTERVAL '1 YEAR 10 DAYS';
interval 1 years 1 weeks 3 days
```

### Why are the changes needed?
To maintain feature parity with PostgreSQL which supports interval strings without prefix:
```sql
# select interval '2 months 1 microsecond';
        interval
------------------------
 2 mons 00:00:00.000001
```
and to improve Spark SQL UX.

### Does this PR introduce any user-facing change?
Yes, previously parsing of interval strings without `interval` gives `NULL`:
```sql
spark-sql> select interval '2 months 1 microsecond';
NULL
```
After:
```sql
spark-sql> select interval '2 months 1 microsecond';
interval 2 months 1 microseconds
```

### How was this patch tested?
- Added new tests to `CalendarIntervalSuite.java`
- A test for casting strings to intervals in `CastSuite`
- Test for interval type constructor from strings in `ExpressionParserSuite`

Closes #26079 from MaxGekk/interval-str-without-prefix.

Authored-by: Maxim Gekk <max.gekk@gmail.com>
Signed-off-by: Wenchen Fan <wenchen@databricks.com>
2019-10-14 23:34:18 +08:00
..
kvstore [MINOR][BUILD] Fix about 15 misc build warnings 2019-09-19 11:37:42 -07:00
network-common [SPARK-25341][CORE] Support rolling back a shuffle map stage and re-generate the shuffle files 2019-09-23 16:16:52 +08:00
network-shuffle [SPARK-25341][CORE] Support rolling back a shuffle map stage and re-generate the shuffle files 2019-09-23 16:16:52 +08:00
network-yarn [SPARK-28593][CORE] Rename ShuffleClient to BlockStoreClient which more close to its usage 2019-08-05 14:54:45 +08:00
sketch [SPARK-28604][ML] Use log1p(x) over log(1+x) and expm1(x) over exp(x)-1 for accuracy 2019-08-04 17:04:01 -05:00
tags [SPARK-29191][TESTS][SQL] Add tag ExtendedSQLTest for SQLQueryTestSuite 2019-09-22 13:53:21 -07:00
unsafe [SPARK-29369][SQL] Support string intervals without the interval prefix 2019-10-14 23:34:18 +08:00