Commit 4008bbe
authored
Add general-purpose SQL Statement Execution engine (#5416)
## Summary
Adds `libs/sqlexec`, a general-purpose, non-interactive engine for
running SQL through the Databricks SQL Statement Execution API, and
refactors the experimental aitools query commands to use it instead of
each re-implementing the submit/poll/fetch loop.
A `Client` binds to a single SQL warehouse and exposes the full
lifecycle: `Submit` (async, returns immediately with a statement ID so
callers can wire up cancellation), `Poll` (additive backoff between
status checks), `Get`, `Cancel`, `Results`, and the convenience wrappers
`Execute` and `ExecuteScalar`. Failures surface as a typed
`*StatementError` carrying the terminal `State`, `Code`, and `Message`,
so callers compare with `errors.As` rather than string-matching. The
`Client` holds no mutable state and is safe for concurrent use — aitools
fans many statements out through one instance.
The engine speaks only the INLINE disposition with JSON_ARRAY format
(the API caps this at 25 MiB per result set), which covers every caller
today; EXTERNAL_LINKS is intentionally left out as a separate concern.
It exists to be shared by programmatic callers such as bundle deploy
resources (e.g. metric views, which have no REST API and are managed via
SQL DDL) and the aitools commands.
The aitools consumers (`query.go`, `batch.go`, `discover_schema.go`,
`statement*.go`) are reworked to delegate to the engine, removing the
duplicated polling and result-assembly code (net ~549 lines deleted from
those files).
## Test plan
- Hermetic unit + HTTP tests in `libs/sqlexec` covering path/response
decoding, polling, cancellation, parameters, and error mapping.
- Live integration coverage in `integration/libs/sqlexec` (skips without
`CLOUD_ENV` / `TEST_DEFAULT_WAREHOUSE_ID`); all 6 tests verified green
against a real workspace.
This pull request and its description were written by Isaac.1 parent 520ab83 commit 4008bbe
17 files changed
Lines changed: 1192 additions & 549 deletions
File tree
- experimental/aitools/cmd
- integration/libs/sqlexec
- libs/sqlexec
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
58 | 59 | | |
59 | 60 | | |
60 | 61 | | |
| 62 | + | |
| 63 | + | |
61 | 64 | | |
62 | 65 | | |
63 | 66 | | |
| |||
101 | 104 | | |
102 | 105 | | |
103 | 106 | | |
104 | | - | |
| 107 | + | |
105 | 108 | | |
106 | 109 | | |
107 | 110 | | |
108 | 111 | | |
109 | 112 | | |
110 | 113 | | |
111 | | - | |
112 | | - | |
| 114 | + | |
| 115 | + | |
113 | 116 | | |
114 | | - | |
| 117 | + | |
115 | 118 | | |
116 | 119 | | |
117 | 120 | | |
118 | 121 | | |
119 | 122 | | |
120 | 123 | | |
121 | 124 | | |
122 | | - | |
| 125 | + | |
123 | 126 | | |
124 | 127 | | |
125 | 128 | | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
| 129 | + | |
133 | 130 | | |
134 | 131 | | |
135 | 132 | | |
136 | 133 | | |
137 | 134 | | |
138 | 135 | | |
139 | | - | |
| 136 | + | |
140 | 137 | | |
141 | 138 | | |
142 | 139 | | |
143 | 140 | | |
144 | 141 | | |
145 | | - | |
146 | | - | |
| 142 | + | |
| 143 | + | |
147 | 144 | | |
148 | | - | |
| 145 | + | |
149 | 146 | | |
150 | 147 | | |
151 | 148 | | |
| |||
158 | 155 | | |
159 | 156 | | |
160 | 157 | | |
161 | | - | |
162 | | - | |
163 | | - | |
| 158 | + | |
164 | 159 | | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
172 | 165 | | |
173 | 166 | | |
174 | 167 | | |
175 | 168 | | |
176 | 169 | | |
177 | | - | |
178 | | - | |
| 170 | + | |
179 | 171 | | |
180 | 172 | | |
181 | 173 | | |
182 | 174 | | |
183 | 175 | | |
184 | | - | |
| 176 | + | |
| 177 | + | |
185 | 178 | | |
186 | 179 | | |
187 | 180 | | |
188 | 181 | | |
189 | 182 | | |
190 | 183 | | |
191 | 184 | | |
192 | | - | |
| 185 | + | |
193 | 186 | | |
194 | 187 | | |
195 | 188 | | |
| |||
208 | 201 | | |
209 | 202 | | |
210 | 203 | | |
211 | | - | |
| 204 | + | |
212 | 205 | | |
213 | 206 | | |
214 | 207 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
48 | | - | |
49 | | - | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
50 | 53 | | |
51 | 54 | | |
52 | 55 | | |
| |||
61 | 64 | | |
62 | 65 | | |
63 | 66 | | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
70 | 70 | | |
71 | | - | |
| 71 | + | |
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
75 | | - | |
| 75 | + | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
| 78 | + | |
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
| 82 | + | |
83 | 83 | | |
84 | 84 | | |
85 | | - | |
| 85 | + | |
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
| |||
235 | 235 | | |
236 | 236 | | |
237 | 237 | | |
| 238 | + | |
| 239 | + | |
238 | 240 | | |
239 | 241 | | |
240 | | - | |
| 242 | + | |
241 | 243 | | |
242 | 244 | | |
243 | 245 | | |
| |||
252 | 254 | | |
253 | 255 | | |
254 | 256 | | |
255 | | - | |
| 257 | + | |
256 | 258 | | |
257 | 259 | | |
258 | 260 | | |
259 | 261 | | |
260 | | - | |
| 262 | + | |
261 | 263 | | |
262 | 264 | | |
263 | 265 | | |
| |||
281 | 283 | | |
282 | 284 | | |
283 | 285 | | |
284 | | - | |
| 286 | + | |
285 | 287 | | |
286 | 288 | | |
287 | 289 | | |
288 | 290 | | |
289 | | - | |
| 291 | + | |
290 | 292 | | |
291 | 293 | | |
292 | 294 | | |
293 | | - | |
| 295 | + | |
294 | 296 | | |
295 | 297 | | |
296 | 298 | | |
| |||
306 | 308 | | |
307 | 309 | | |
308 | 310 | | |
309 | | - | |
| 311 | + | |
310 | 312 | | |
311 | 313 | | |
312 | 314 | | |
313 | 315 | | |
314 | 316 | | |
315 | 317 | | |
316 | | - | |
| 318 | + | |
317 | 319 | | |
318 | 320 | | |
319 | 321 | | |
320 | 322 | | |
321 | 323 | | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
| 324 | + | |
| 325 | + | |
328 | 326 | | |
329 | 327 | | |
330 | 328 | | |
| |||
340 | 338 | | |
341 | 339 | | |
342 | 340 | | |
343 | | - | |
344 | | - | |
| 341 | + | |
| 342 | + | |
345 | 343 | | |
346 | 344 | | |
347 | 345 | | |
348 | 346 | | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | | - | |
354 | | - | |
| 347 | + | |
355 | 348 | | |
356 | | - | |
| 349 | + | |
357 | 350 | | |
358 | 351 | | |
359 | 352 | | |
| |||
366 | 359 | | |
367 | 360 | | |
368 | 361 | | |
369 | | - | |
370 | | - | |
| 362 | + | |
| 363 | + | |
371 | 364 | | |
372 | 365 | | |
373 | 366 | | |
374 | | - | |
| 367 | + | |
375 | 368 | | |
376 | 369 | | |
377 | 370 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
53 | | - | |
54 | | - | |
| 54 | + | |
| 55 | + | |
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
58 | 59 | | |
59 | 60 | | |
60 | | - | |
| 61 | + | |
61 | 62 | | |
62 | 63 | | |
63 | | - | |
| 64 | + | |
64 | 65 | | |
65 | 66 | | |
66 | 67 | | |
| |||
82 | 83 | | |
83 | 84 | | |
84 | 85 | | |
85 | | - | |
| 86 | + | |
86 | 87 | | |
87 | | - | |
| 88 | + | |
88 | 89 | | |
89 | 90 | | |
90 | 91 | | |
| |||
0 commit comments