Commit 7660486
feat(doris, starrocks): support two-argument DATE_ADD/DATE_SUB (#7514)
* feat(doris, starrocks): support two-argument DATE_ADD/DATE_SUB
Doris and StarRocks natively accept DATE_ADD(date, N) and DATE_SUB(date, N)
as shorthand for INTERVAL N DAY. Both dialects inherit from MySQL, which
binds these functions to build_date_delta_with_interval and requires a
strict INTERVAL expression, so the shorthand previously raised ParseError.
- Add an optional `default_unit` parameter to build_date_delta_with_interval.
When the second argument is not an Interval and default_unit is set, the
builder falls back to a bare-literal AST with the default unit. The default
value is None, preserving the existing strict behavior for MySQL, BigQuery,
and any other existing callers.
- Override DATE_ADD / DATE_SUB / ADDDATE / SUBDATE in DorisParser and
StarRocksParser with default_unit="DAY". The resulting AST shape matches
the explicit INTERVAL form, so existing generators (mysql.date_add_sql)
emit DATE_ADD(date, INTERVAL N DAY) without further changes.
- Add tests covering both the shorthand and the INTERVAL forms to guard
round-trip correctness for DAY and non-DAY units.
Closes #6341
* Update tests/dialects/test_doris.py
* Update tests/dialects/test_starrocks.py
---------
Co-authored-by: Jo <46752250+georgesittas@users.noreply.github.com>1 parent cb91d91 commit 7660486
5 files changed
Lines changed: 44 additions & 2 deletions
File tree
- sqlglot
- dialects
- parsers
- tests/dialects
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1598 | 1598 | | |
1599 | 1599 | | |
1600 | 1600 | | |
| 1601 | + | |
1601 | 1602 | | |
1602 | 1603 | | |
1603 | 1604 | | |
| |||
1606 | 1607 | | |
1607 | 1608 | | |
1608 | 1609 | | |
1609 | | - | |
| 1610 | + | |
| 1611 | + | |
| 1612 | + | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + | |
| 1616 | + | |
1610 | 1617 | | |
1611 | 1618 | | |
1612 | 1619 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
| 30 | + | |
29 | 31 | | |
| 32 | + | |
| 33 | + | |
30 | 34 | | |
31 | 35 | | |
32 | 36 | | |
33 | 37 | | |
| 38 | + | |
34 | 39 | | |
35 | 40 | | |
36 | 41 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
108 | 121 | | |
109 | 122 | | |
110 | 123 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
145 | 158 | | |
146 | 159 | | |
147 | 160 | | |
| |||
0 commit comments