Commit 779b245
authored
# Which issue does this PR close?
Part of #1863. Not `Closes`, because the issue description also covers
the 0-input form, which this PR does not implement.
This is the Flink Java side of `UNIX_TIMESTAMP`. The native function it
calls merged in #2409. Together they cover the 1-input and 2-input forms
from the issue description.
The 0-input form is still outstanding. It is a different function rather
than a missing branch: Flink binds the niladic form to
`DateTimeUtils.unixTimestamp()`, which reads the clock per record and
parses nothing, so it needs its own design pass. The converter rejects
it explicitly and falls back to Flink's engine, and #1863 stays open to
track it.
# Rationale for this change
This completes native support for Flink's `UNIX_TIMESTAMP` by wiring the
Flink Calc converter to emit the native function added in #2409. Without
it the native function is unreachable, and any Calc containing
`UNIX_TIMESTAMP` falls back to Flink's engine for the whole Calc.
# What changes are included in this PR?
The converter recognizes `UNIX_TIMESTAMP` and lowers the 1-argument and
2-argument forms to the native `Flink_UnixTimestamp` node.
`UNIX_TIMESTAMP` resolves to `SqlKind.OTHER_FUNCTION`, so it is matched
by reference identity on the operator before the supported-kinds switch,
the same way `TRY_CAST` is handled.
A format scanner translates the supported subset of Java date-format
letters (`yyyy MM dd HH mm ss` and literals) to the native format.
Anything outside that subset falls back: other pattern letters,
unsupported run-lengths, a non-literal format argument, the 0-argument
form, and a numeric field adjacent to another numeric field where the
run-length would not survive translation (for example `yyyyMd`). Falling
back keeps results correct rather than risking a silent divergence.
The session time zone is resolved at plan time and passed into the node.
This required completing the config threading in the standalone-Calc
path, which passed a persisted config that does not carry
`table.local-time-zone`. That gap had no effect until now:
`UNIX_TIMESTAMP` is the first time-zone-sensitive expression the
converter supports, and the earlier ones (arithmetic, comparison,
logical, cast) never read the session zone. The effective node config is
threaded through instead, so the configured zone reaches the native
evaluation.
# Are there any user-facing changes?
Yes. `UNIX_TIMESTAMP(string)` and `UNIX_TIMESTAMP(string, format)` now
execute on the native engine when the format is a supported literal
pattern. Unsupported patterns and the 0-argument form continue to run on
Flink's engine, with the same results as before.
# How was this patch tested?
Unit tests for the scanner (accept/reject, quote escaping, the adjacency
rule), the converter (node shape, format translation, time-zone
propagation), and the operator-identity invariant. Fallback tests assert
that unsupported inputs actually fall back rather than silently
producing a native plan.
An end-to-end ITCase runs `UNIX_TIMESTAMP(ts)` with a non-UTC session
zone and confirms the native result matches the expected epoch values.
The executed native plan shows the function and the resolved zone,
confirming the query runs natively rather than falling back.
160 tests pass in `auron-flink-planner` on the rebased branch, with
spotless clean and 0 checkstyle violations.
# Was this patch authored or co-authored using generative AI tooling?
- [x] Yes
- [ ] No
Generated-by: Claude Code (Claude Opus 5)
1 parent 14d17f7 commit 779b245
11 files changed
Lines changed: 875 additions & 10 deletions
File tree
- auron-flink-extension/auron-flink-planner/src
- main/java/org/apache
- auron/flink/table/planner/converter
- flink/table/planner/plan/nodes/exec/stream
- test/java/org/apache
- auron/flink/table
- planner/converter
- runtime
- flink/table/planner/plan/nodes/exec/stream
Lines changed: 234 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
Lines changed: 25 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
19 | 20 | | |
| 21 | + | |
20 | 22 | | |
21 | 23 | | |
| 24 | + | |
22 | 25 | | |
| 26 | + | |
23 | 27 | | |
24 | 28 | | |
25 | 29 | | |
| |||
140 | 144 | | |
141 | 145 | | |
142 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
143 | 168 | | |
144 | 169 | | |
145 | 170 | | |
| |||
0 commit comments