arrowbricks 3.0.2__tar.gz → 3.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/PKG-INFO +28 -1
  2. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/README.md +27 -0
  3. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/pyproject.toml +1 -1
  4. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/Cargo.lock +88 -306
  5. arrowbricks-3.0.3/rust/arrowbricks_core/Cargo.toml +108 -0
  6. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/src/client.rs +14 -0
  7. arrowbricks-3.0.2/rust/arrowbricks_core/Cargo.toml +0 -79
  8. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/LICENSE +0 -0
  9. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/.gitignore +0 -0
  10. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/README.md +0 -0
  11. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/examples/duckdb_query.py +0 -0
  12. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/examples/fastapi_sse.py +0 -0
  13. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/rustfmt.toml +0 -0
  14. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/src/heartbeat.rs +0 -0
  15. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/src/json_convert.rs +0 -0
  16. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/src/lib.rs +0 -0
  17. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/src/pipeline.rs +0 -0
  18. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/src/thrift.rs +0 -0
  19. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests/wiremock_pipeline.rs +0 -0
  20. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests/wiremock_thrift.rs +0 -0
  21. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests/wiremock_volume_files.rs +0 -0
  22. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/conftest.py +0 -0
  23. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_ipc_stream.py +0 -0
  24. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_parameters.py +0 -0
  25. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_stream_ndjson_lines.py +0 -0
  26. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_streaming.py +0 -0
  27. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_thrift.py +0 -0
  28. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_token_provider.py +0 -0
  29. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/test_volume_files.py +0 -0
  30. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/rust/arrowbricks_core/tests_py/thrift_mock.py +0 -0
  31. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/src/arrowbricks/__init__.py +0 -0
  32. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/src/arrowbricks/_core.pyi +0 -0
  33. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/src/arrowbricks/_streaming.py +0 -0
  34. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/src/arrowbricks/client.py +0 -0
  35. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/src/arrowbricks/cursor.py +0 -0
  36. {arrowbricks-3.0.2 → arrowbricks-3.0.3}/src/arrowbricks/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arrowbricks
3
- Version: 3.0.2
3
+ Version: 3.0.3
4
4
  Requires-Dist: arro3-core>=0.8 ; extra == 'arro3'
5
5
  Provides-Extra: arro3
6
6
  License-File: LICENSE
@@ -210,6 +210,33 @@ con.sql("SELECT * FROM my_table WHERE id = 42").show()
210
210
 
211
211
  The [official driver](https://github.com/databricks/databricks-sql-python) is the right choice if you need full DB-API 2.0 compatibility. If you just want a query result as Arrow/JSON in your own async app, it drags in a lot for that: `pandas`, `thrift`, `openpyxl`, `pybreaker`, `pyjwt`, `oauthlib`, `lz4`, `requests`, `urllib3` as hard dependencies. arrowbricks speaks the same wire protocols (Thrift by default, or the REST Statement Execution API via `protocol="sea"`) with a hand-rolled Rust implementation instead, and zero required dependencies of its own. The `Cursor` API is deliberately shaped like the official driver's so switching between them is mostly a constructor change, but arrowbricks is async throughout (`execute`, `fetchone`, etc. are all coroutines) -- there's no sync escape hatch.
212
212
 
213
+ ## Benchmarks
214
+
215
+ Measured against a real Databricks SQL warehouse (Azure Databricks, `2X-Small` **Pro** serverless warehouse, Photon on, 1-4 auto-scaling clusters -- the smallest/cheapest warehouse tier, deliberately: a bigger warehouse would narrow the gap by making the query itself slower and the client-side overhead this compares proportionally smaller). Query: `SELECT id, id * 2 AS doubled, CAST(id AS STRING) AS label FROM range(200000)` (200k rows, 3 columns), 3 timed runs after 1 discarded warm-up run, one connection reused per library:
216
+
217
+ | | avg | stdev | range | peak RSS during the query |
218
+ |---|---|---|---|---|
219
+ | `databricks-sql-connector` | 0.88s | 0.06s | 0.83s - 0.95s | 16 MB |
220
+ | arrowbricks | 0.50s | 0.02s | 0.48s - 0.52s | 16 MB |
221
+
222
+ **arrowbricks: ~1.8x faster**, same order-of-magnitude peak memory *for this query size* -- at 200k rows the Python interpreter's own baseline footprint dominates over the actual result data for both libraries, so this particular number doesn't show a difference. The real memory/footprint difference is in what gets installed, not what a single small query allocates:
223
+
224
+ | | installed size (package + all required deps) |
225
+ |---|---|
226
+ | `databricks-sql-connector` | 71 MB (pulls in `pandas`, `numpy`, `thrift`, `oauthlib`, `lz4`, `requests`, `urllib3`, `openpyxl`, ... as hard dependencies -- `pandas`+`numpy` alone are 61 MB of that) |
227
+ | arrowbricks | 9 MB (zero required runtime dependencies -- the whole thing is one compiled Rust extension, built with `opt-level="s"`, `ring` instead of the heavier default TLS crypto backend, and no unused HTTP/2 support -- see `rust/arrowbricks_core/Cargo.toml`'s own `[profile.release]` and `rustls`/`hyper-rustls` comments for the measurements behind those choices) |
228
+
229
+ Run it yourself: [`examples/benchmark_vs_connector.py`](examples/benchmark_vs_connector.py) (needs both packages installed: `pip install arrowbricks databricks-sql-connector`). Reads `DATABRICKS_HOST`/`DATABRICKS_WAREHOUSE_ID`/`DATABRICKS_TOKEN` from the environment or a `.env` file (never commit one with a real token in it) and runs each library in its own subprocess so peak memory reflects that library alone:
230
+
231
+ ```bash
232
+ DATABRICKS_HOST=adb-1234567890.1.azuredatabricks.net \
233
+ DATABRICKS_WAREHOUSE_ID=abcd1234efgh5678 \
234
+ DATABRICKS_TOKEN=dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
235
+ python examples/benchmark_vs_connector.py
236
+ ```
237
+
238
+ `BENCHMARK_SQL` overrides the query, `BENCHMARK_RUNS` (default 3) controls how many timed runs to average.
239
+
213
240
  ## A note on Arrow IPC compression
214
241
 
215
242
  `write_ipc_stream` (and everything in this package that serializes Arrow-IPC bytes) always writes **uncompressed** bodies. A compressed body (arro3's own default is `compression="LZ4"`) is transparently decompressed by some Arrow readers (e.g. DuckDB's) but not necessarily by every other Arrow IPC reader -- notably, `duckdb-wasm`'s browser-side decoder silently fails to parse LZ4-compressed bodies. Since arrowbricks' bytes might end up read by anything, plain uncompressed is the safe default.
@@ -198,6 +198,33 @@ con.sql("SELECT * FROM my_table WHERE id = 42").show()
198
198
 
199
199
  The [official driver](https://github.com/databricks/databricks-sql-python) is the right choice if you need full DB-API 2.0 compatibility. If you just want a query result as Arrow/JSON in your own async app, it drags in a lot for that: `pandas`, `thrift`, `openpyxl`, `pybreaker`, `pyjwt`, `oauthlib`, `lz4`, `requests`, `urllib3` as hard dependencies. arrowbricks speaks the same wire protocols (Thrift by default, or the REST Statement Execution API via `protocol="sea"`) with a hand-rolled Rust implementation instead, and zero required dependencies of its own. The `Cursor` API is deliberately shaped like the official driver's so switching between them is mostly a constructor change, but arrowbricks is async throughout (`execute`, `fetchone`, etc. are all coroutines) -- there's no sync escape hatch.
200
200
 
201
+ ## Benchmarks
202
+
203
+ Measured against a real Databricks SQL warehouse (Azure Databricks, `2X-Small` **Pro** serverless warehouse, Photon on, 1-4 auto-scaling clusters -- the smallest/cheapest warehouse tier, deliberately: a bigger warehouse would narrow the gap by making the query itself slower and the client-side overhead this compares proportionally smaller). Query: `SELECT id, id * 2 AS doubled, CAST(id AS STRING) AS label FROM range(200000)` (200k rows, 3 columns), 3 timed runs after 1 discarded warm-up run, one connection reused per library:
204
+
205
+ | | avg | stdev | range | peak RSS during the query |
206
+ |---|---|---|---|---|
207
+ | `databricks-sql-connector` | 0.88s | 0.06s | 0.83s - 0.95s | 16 MB |
208
+ | arrowbricks | 0.50s | 0.02s | 0.48s - 0.52s | 16 MB |
209
+
210
+ **arrowbricks: ~1.8x faster**, same order-of-magnitude peak memory *for this query size* -- at 200k rows the Python interpreter's own baseline footprint dominates over the actual result data for both libraries, so this particular number doesn't show a difference. The real memory/footprint difference is in what gets installed, not what a single small query allocates:
211
+
212
+ | | installed size (package + all required deps) |
213
+ |---|---|
214
+ | `databricks-sql-connector` | 71 MB (pulls in `pandas`, `numpy`, `thrift`, `oauthlib`, `lz4`, `requests`, `urllib3`, `openpyxl`, ... as hard dependencies -- `pandas`+`numpy` alone are 61 MB of that) |
215
+ | arrowbricks | 9 MB (zero required runtime dependencies -- the whole thing is one compiled Rust extension, built with `opt-level="s"`, `ring` instead of the heavier default TLS crypto backend, and no unused HTTP/2 support -- see `rust/arrowbricks_core/Cargo.toml`'s own `[profile.release]` and `rustls`/`hyper-rustls` comments for the measurements behind those choices) |
216
+
217
+ Run it yourself: [`examples/benchmark_vs_connector.py`](examples/benchmark_vs_connector.py) (needs both packages installed: `pip install arrowbricks databricks-sql-connector`). Reads `DATABRICKS_HOST`/`DATABRICKS_WAREHOUSE_ID`/`DATABRICKS_TOKEN` from the environment or a `.env` file (never commit one with a real token in it) and runs each library in its own subprocess so peak memory reflects that library alone:
218
+
219
+ ```bash
220
+ DATABRICKS_HOST=adb-1234567890.1.azuredatabricks.net \
221
+ DATABRICKS_WAREHOUSE_ID=abcd1234efgh5678 \
222
+ DATABRICKS_TOKEN=dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
223
+ python examples/benchmark_vs_connector.py
224
+ ```
225
+
226
+ `BENCHMARK_SQL` overrides the query, `BENCHMARK_RUNS` (default 3) controls how many timed runs to average.
227
+
201
228
  ## A note on Arrow IPC compression
202
229
 
203
230
  `write_ipc_stream` (and everything in this package that serializes Arrow-IPC bytes) always writes **uncompressed** bodies. A compressed body (arro3's own default is `compression="LZ4"`) is transparently decompressed by some Arrow readers (e.g. DuckDB's) but not necessarily by every other Arrow IPC reader -- notably, `duckdb-wasm`'s browser-side decoder silently fails to parse LZ4-compressed bodies. Since arrowbricks' bytes might end up read by anything, plain uncompressed is the safe default.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arrowbricks"
3
- version = "3.0.2"
3
+ version = "3.0.3"
4
4
  description = "Runs SQL against a Databricks SQL warehouse via the Statement Execution API and hands you the result as Arrow -- a DB-API-ish Cursor (fetchone/fetchmany/fetchall/fetchall_arrow) or NDJSON streaming. Rust/PyO3 core throughout -- zero required runtime dependencies."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -27,18 +27,18 @@ dependencies = [
27
27
 
28
28
  [[package]]
29
29
  name = "android_system_properties"
30
- version = "0.1.5"
30
+ version = "0.1.6"
31
31
  source = "registry+https://github.com/rust-lang/crates.io-index"
32
- checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
32
+ checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc"
33
33
  dependencies = [
34
34
  "libc",
35
35
  ]
36
36
 
37
37
  [[package]]
38
38
  name = "arrow"
39
- version = "59.1.0"
39
+ version = "59.2.0"
40
40
  source = "registry+https://github.com/rust-lang/crates.io-index"
41
- checksum = "b952ca5a8046ad741b60f142d6eca4aeebcad615694202bc64c5341f23e32c5b"
41
+ checksum = "61d285d16bce7d0be61912f7928342b673067b6b7d7ef6cc179258ba7de1fecf"
42
42
  dependencies = [
43
43
  "arrow-arith",
44
44
  "arrow-array",
@@ -55,9 +55,9 @@ dependencies = [
55
55
 
56
56
  [[package]]
57
57
  name = "arrow-arith"
58
- version = "59.1.0"
58
+ version = "59.2.0"
59
59
  source = "registry+https://github.com/rust-lang/crates.io-index"
60
- checksum = "64a13b8d3008c4e9063c597a08f46446fe3fd5789277127672d6c0bdbb43b1ff"
60
+ checksum = "757ef1836251e88222542a7da2623bc1c9cb9e20afefa6db2c41e79991cd91d4"
61
61
  dependencies = [
62
62
  "arrow-array",
63
63
  "arrow-buffer",
@@ -69,9 +69,9 @@ dependencies = [
69
69
 
70
70
  [[package]]
71
71
  name = "arrow-array"
72
- version = "59.1.0"
72
+ version = "59.2.0"
73
73
  source = "registry+https://github.com/rust-lang/crates.io-index"
74
- checksum = "9486151b2f0785bafc6fa04fc5c99fcb4495455662e58787ea32eaaed33c4192"
74
+ checksum = "bc9a4a4b2b5ecd0e04df03471661cb61f28bed3c7fd50994715129b01b2edb97"
75
75
  dependencies = [
76
76
  "ahash",
77
77
  "arrow-buffer",
@@ -81,6 +81,7 @@ dependencies = [
81
81
  "chrono-tz",
82
82
  "half",
83
83
  "hashbrown",
84
+ "libc",
84
85
  "num-complex",
85
86
  "num-integer",
86
87
  "num-traits",
@@ -88,9 +89,9 @@ dependencies = [
88
89
 
89
90
  [[package]]
90
91
  name = "arrow-buffer"
91
- version = "59.1.0"
92
+ version = "59.2.0"
92
93
  source = "registry+https://github.com/rust-lang/crates.io-index"
93
- checksum = "c4776577a87794bfdf0b4e90e2ea12454fa7738ea2823c4be5b9d1851da7b434"
94
+ checksum = "c12b576ef18c1deb80925a248b25ad84f419198d791b8e293fc6aaa60441fe90"
94
95
  dependencies = [
95
96
  "bytes",
96
97
  "half",
@@ -100,9 +101,9 @@ dependencies = [
100
101
 
101
102
  [[package]]
102
103
  name = "arrow-cast"
103
- version = "59.1.0"
104
+ version = "59.2.0"
104
105
  source = "registry+https://github.com/rust-lang/crates.io-index"
105
- checksum = "a9ad451ce4f98710828a455b96991b8f031deb2e67f5fcad6773f017e4a69c3a"
106
+ checksum = "68338a9096a5dc9bc11927c58c43a8526d96bf6abd2012ef6c0c9f505991cc79"
106
107
  dependencies = [
107
108
  "arrow-array",
108
109
  "arrow-buffer",
@@ -111,7 +112,7 @@ dependencies = [
111
112
  "arrow-schema",
112
113
  "arrow-select",
113
114
  "atoi",
114
- "base64",
115
+ "base64 0.23.1",
115
116
  "chrono",
116
117
  "comfy-table",
117
118
  "half",
@@ -122,9 +123,9 @@ dependencies = [
122
123
 
123
124
  [[package]]
124
125
  name = "arrow-data"
125
- version = "59.1.0"
126
+ version = "59.2.0"
126
127
  source = "registry+https://github.com/rust-lang/crates.io-index"
127
- checksum = "b38fe43e2e8704360f1464e6e8cc4fc381ef02cc4fb0192afa8df1aaa0115c66"
128
+ checksum = "723fe4aeed7604e00b9883a465af4ff0a0e6c44c03e41a68c3d1cbc403e0e44d"
128
129
  dependencies = [
129
130
  "arrow-buffer",
130
131
  "arrow-schema",
@@ -135,9 +136,9 @@ dependencies = [
135
136
 
136
137
  [[package]]
137
138
  name = "arrow-ipc"
138
- version = "59.1.0"
139
+ version = "59.2.0"
139
140
  source = "registry+https://github.com/rust-lang/crates.io-index"
140
- checksum = "29dac499fcbc6ba74ee0324057821d381929a48526a3966bd9dffb44aa06d98c"
141
+ checksum = "149437b14371f5b9ec60f5ddc751483ae99d7a7072653c0075e5e469156eea7b"
141
142
  dependencies = [
142
143
  "arrow-array",
143
144
  "arrow-buffer",
@@ -149,9 +150,9 @@ dependencies = [
149
150
 
150
151
  [[package]]
151
152
  name = "arrow-json"
152
- version = "59.1.0"
153
+ version = "59.2.0"
153
154
  source = "registry+https://github.com/rust-lang/crates.io-index"
154
- checksum = "0fe05e916ddc50f4c7a363cd69c0ef5894fcee063517e9a0b8582f0c56746af6"
155
+ checksum = "f18b9123ccfec418a663f821c9a034af339711678c11ffe00d3ec07da5ff9f7e"
155
156
  dependencies = [
156
157
  "arrow-array",
157
158
  "arrow-buffer",
@@ -174,9 +175,9 @@ dependencies = [
174
175
 
175
176
  [[package]]
176
177
  name = "arrow-ord"
177
- version = "59.1.0"
178
+ version = "59.2.0"
178
179
  source = "registry+https://github.com/rust-lang/crates.io-index"
179
- checksum = "0e13dbdc2a9c053c10c7baa6e30faee04a180aa7ce88e471835850ce37abd20b"
180
+ checksum = "e6c08dff0686cf23ca4f562803f191ccbeb726dbae6309cd4b4aaf65e0f2c979"
180
181
  dependencies = [
181
182
  "arrow-array",
182
183
  "arrow-buffer",
@@ -187,9 +188,9 @@ dependencies = [
187
188
 
188
189
  [[package]]
189
190
  name = "arrow-row"
190
- version = "59.1.0"
191
+ version = "59.2.0"
191
192
  source = "registry+https://github.com/rust-lang/crates.io-index"
192
- checksum = "4d5a1f8c733d15260b305683472ee8ad89c62cbd706703ca873b90d051b41592"
193
+ checksum = "bbec439386df71ad570e6758a946111322b9e9dc8db83b5527321f0b4c9119c2"
193
194
  dependencies = [
194
195
  "arrow-array",
195
196
  "arrow-buffer",
@@ -200,18 +201,18 @@ dependencies = [
200
201
 
201
202
  [[package]]
202
203
  name = "arrow-schema"
203
- version = "59.1.0"
204
+ version = "59.2.0"
204
205
  source = "registry+https://github.com/rust-lang/crates.io-index"
205
- checksum = "d9e4969dc350d571766247143ab36a5187d095d3d3690970408bc630d47c69e5"
206
+ checksum = "e6fed2ca0d1eade57e811cbe73b98ad50cc08a1183e13b2d2aa43a7df593f40e"
206
207
  dependencies = [
207
208
  "bitflags",
208
209
  ]
209
210
 
210
211
  [[package]]
211
212
  name = "arrow-select"
212
- version = "59.1.0"
213
+ version = "59.2.0"
213
214
  source = "registry+https://github.com/rust-lang/crates.io-index"
214
- checksum = "402770dba90865359d98d1ef92ef16e23d75c0cca9c2c880c8a05468b7743bf9"
215
+ checksum = "466b19cf75130b891dc1b23a84b343c714c62c64c9c62e365c76aa0ff90a53fb"
215
216
  dependencies = [
216
217
  "ahash",
217
218
  "arrow-array",
@@ -223,9 +224,9 @@ dependencies = [
223
224
 
224
225
  [[package]]
225
226
  name = "arrow-string"
226
- version = "59.1.0"
227
+ version = "59.2.0"
227
228
  source = "registry+https://github.com/rust-lang/crates.io-index"
228
- checksum = "a2b0afbb8b9016700938291123df30838b89decc3213dba00852021988b170d3"
229
+ checksum = "c838a25bb3691e919e0f617616ac51a4ff8517a952e29ca133cf0c22b2ce65b1"
229
230
  dependencies = [
230
231
  "arrow-array",
231
232
  "arrow-buffer",
@@ -240,18 +241,20 @@ dependencies = [
240
241
 
241
242
  [[package]]
242
243
  name = "arrowbricks_core"
243
- version = "3.0.2"
244
+ version = "3.0.3"
244
245
  dependencies = [
245
246
  "arrow",
246
247
  "arrow-json",
247
248
  "bytes",
248
249
  "chrono",
250
+ "hyper-rustls",
249
251
  "lz4_flex",
250
252
  "pyo3",
251
253
  "pyo3-arrow",
252
254
  "pyo3-async-runtimes",
253
255
  "pythonize",
254
256
  "reqwest",
257
+ "rustls",
255
258
  "serde",
256
259
  "serde_json",
257
260
  "tokio",
@@ -290,33 +293,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
290
293
  checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
291
294
 
292
295
  [[package]]
293
- name = "aws-lc-rs"
294
- version = "1.17.3"
295
- source = "registry+https://github.com/rust-lang/crates.io-index"
296
- checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1"
297
- dependencies = [
298
- "aws-lc-sys",
299
- "zeroize",
300
- ]
301
-
302
- [[package]]
303
- name = "aws-lc-sys"
304
- version = "0.43.0"
296
+ name = "base64"
297
+ version = "0.22.1"
305
298
  source = "registry+https://github.com/rust-lang/crates.io-index"
306
- checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c"
307
- dependencies = [
308
- "cc",
309
- "cmake",
310
- "dunce",
311
- "fs_extra",
312
- "pkg-config",
313
- ]
299
+ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
314
300
 
315
301
  [[package]]
316
302
  name = "base64"
317
- version = "0.22.1"
303
+ version = "0.23.1"
318
304
  source = "registry+https://github.com/rust-lang/crates.io-index"
319
- checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
305
+ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
320
306
 
321
307
  [[package]]
322
308
  name = "bitflags"
@@ -338,13 +324,11 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
338
324
 
339
325
  [[package]]
340
326
  name = "cc"
341
- version = "1.4.0"
327
+ version = "1.4.2"
342
328
  source = "registry+https://github.com/rust-lang/crates.io-index"
343
- checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9"
329
+ checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e"
344
330
  dependencies = [
345
331
  "find-msvc-tools",
346
- "jobserver",
347
- "libc",
348
332
  "shlex",
349
333
  ]
350
334
 
@@ -354,23 +338,6 @@ version = "1.0.4"
354
338
  source = "registry+https://github.com/rust-lang/crates.io-index"
355
339
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
356
340
 
357
- [[package]]
358
- name = "cfg_aliases"
359
- version = "0.2.2"
360
- source = "registry+https://github.com/rust-lang/crates.io-index"
361
- checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
362
-
363
- [[package]]
364
- name = "chacha20"
365
- version = "0.10.1"
366
- source = "registry+https://github.com/rust-lang/crates.io-index"
367
- checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
368
- dependencies = [
369
- "cfg-if",
370
- "cpufeatures",
371
- "rand_core",
372
- ]
373
-
374
341
  [[package]]
375
342
  name = "chrono"
376
343
  version = "0.4.45"
@@ -394,15 +361,6 @@ dependencies = [
394
361
  "phf",
395
362
  ]
396
363
 
397
- [[package]]
398
- name = "cmake"
399
- version = "0.1.58"
400
- source = "registry+https://github.com/rust-lang/crates.io-index"
401
- checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
402
- dependencies = [
403
- "cc",
404
- ]
405
-
406
364
  [[package]]
407
365
  name = "combine"
408
366
  version = "4.6.7"
@@ -459,15 +417,6 @@ version = "0.8.7"
459
417
  source = "registry+https://github.com/rust-lang/crates.io-index"
460
418
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
461
419
 
462
- [[package]]
463
- name = "cpufeatures"
464
- version = "0.3.0"
465
- source = "registry+https://github.com/rust-lang/crates.io-index"
466
- checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
467
- dependencies = [
468
- "libc",
469
- ]
470
-
471
420
  [[package]]
472
421
  name = "crunchy"
473
422
  version = "0.2.4"
@@ -503,12 +452,6 @@ dependencies = [
503
452
  "syn 3.0.3",
504
453
  ]
505
454
 
506
- [[package]]
507
- name = "dunce"
508
- version = "1.0.5"
509
- source = "registry+https://github.com/rust-lang/crates.io-index"
510
- checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
511
-
512
455
  [[package]]
513
456
  name = "equivalent"
514
457
  version = "1.0.2"
@@ -517,9 +460,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
517
460
 
518
461
  [[package]]
519
462
  name = "find-msvc-tools"
520
- version = "0.1.9"
463
+ version = "0.1.10"
521
464
  source = "registry+https://github.com/rust-lang/crates.io-index"
522
- checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
465
+ checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de"
523
466
 
524
467
  [[package]]
525
468
  name = "flatbuffers"
@@ -546,12 +489,6 @@ dependencies = [
546
489
  "percent-encoding",
547
490
  ]
548
491
 
549
- [[package]]
550
- name = "fs_extra"
551
- version = "1.3.0"
552
- source = "registry+https://github.com/rust-lang/crates.io-index"
553
- checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
554
-
555
492
  [[package]]
556
493
  name = "futures"
557
494
  version = "0.3.33"
@@ -647,10 +584,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
647
584
  checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
648
585
  dependencies = [
649
586
  "cfg-if",
650
- "js-sys",
651
587
  "libc",
652
588
  "wasi",
653
- "wasm-bindgen",
654
589
  ]
655
590
 
656
591
  [[package]]
@@ -661,24 +596,10 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
661
596
  dependencies = [
662
597
  "cfg-if",
663
598
  "libc",
664
- "r-efi 5.3.0",
599
+ "r-efi",
665
600
  "wasip2",
666
601
  ]
667
602
 
668
- [[package]]
669
- name = "getrandom"
670
- version = "0.4.3"
671
- source = "registry+https://github.com/rust-lang/crates.io-index"
672
- checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
673
- dependencies = [
674
- "cfg-if",
675
- "js-sys",
676
- "libc",
677
- "r-efi 6.0.0",
678
- "rand_core",
679
- "wasm-bindgen",
680
- ]
681
-
682
603
  [[package]]
683
604
  name = "h2"
684
605
  version = "0.4.15"
@@ -816,7 +737,7 @@ version = "0.1.20"
816
737
  source = "registry+https://github.com/rust-lang/crates.io-index"
817
738
  checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
818
739
  dependencies = [
819
- "base64",
740
+ "base64 0.22.1",
820
741
  "bytes",
821
742
  "futures-channel",
822
743
  "futures-util",
@@ -994,7 +915,7 @@ dependencies = [
994
915
  "jni-sys",
995
916
  "log",
996
917
  "simd_cesu8",
997
- "thiserror 2.0.19",
918
+ "thiserror 2.0.20",
998
919
  "walkdir",
999
920
  "windows-link",
1000
921
  ]
@@ -1031,21 +952,11 @@ dependencies = [
1031
952
  "syn 2.0.119",
1032
953
  ]
1033
954
 
1034
- [[package]]
1035
- name = "jobserver"
1036
- version = "0.1.35"
1037
- source = "registry+https://github.com/rust-lang/crates.io-index"
1038
- checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3"
1039
- dependencies = [
1040
- "getrandom 0.4.3",
1041
- "libc",
1042
- ]
1043
-
1044
955
  [[package]]
1045
956
  name = "js-sys"
1046
- version = "0.3.103"
957
+ version = "0.3.104"
1047
958
  source = "registry+https://github.com/rust-lang/crates.io-index"
1048
- checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
959
+ checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a"
1049
960
  dependencies = [
1050
961
  "cfg-if",
1051
962
  "futures-util",
@@ -1139,17 +1050,11 @@ version = "0.4.33"
1139
1050
  source = "registry+https://github.com/rust-lang/crates.io-index"
1140
1051
  checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
1141
1052
 
1142
- [[package]]
1143
- name = "lru-slab"
1144
- version = "0.1.2"
1145
- source = "registry+https://github.com/rust-lang/crates.io-index"
1146
- checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
1147
-
1148
1053
  [[package]]
1149
1054
  name = "lz4_flex"
1150
- version = "0.11.6"
1055
+ version = "0.14.0"
1151
1056
  source = "registry+https://github.com/rust-lang/crates.io-index"
1152
- checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a"
1057
+ checksum = "ecbdfe44b1bd960b68170b417450a628c43f7cf56bb3c5317e61cb230ee7f226"
1153
1058
  dependencies = [
1154
1059
  "twox-hash",
1155
1060
  ]
@@ -1198,9 +1103,9 @@ dependencies = [
1198
1103
 
1199
1104
  [[package]]
1200
1105
  name = "num-bigint"
1201
- version = "0.4.8"
1106
+ version = "0.5.1"
1202
1107
  source = "registry+https://github.com/rust-lang/crates.io-index"
1203
- checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
1108
+ checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0"
1204
1109
  dependencies = [
1205
1110
  "num-integer",
1206
1111
  "num-traits",
@@ -1303,12 +1208,6 @@ version = "0.2.17"
1303
1208
  source = "registry+https://github.com/rust-lang/crates.io-index"
1304
1209
  checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
1305
1210
 
1306
- [[package]]
1307
- name = "pkg-config"
1308
- version = "0.3.33"
1309
- source = "registry+https://github.com/rust-lang/crates.io-index"
1310
- checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
1311
-
1312
1211
  [[package]]
1313
1212
  name = "portable-atomic"
1314
1213
  version = "1.14.0"
@@ -1344,9 +1243,9 @@ dependencies = [
1344
1243
 
1345
1244
  [[package]]
1346
1245
  name = "pyo3"
1347
- version = "0.29.1"
1246
+ version = "0.29.2"
1348
1247
  source = "registry+https://github.com/rust-lang/crates.io-index"
1349
- checksum = "fc153f5fd745cc038b5eed86622125969f8a39834a57bc96beaaf2512b1da729"
1248
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
1350
1249
  dependencies = [
1351
1250
  "chrono",
1352
1251
  "chrono-tz",
@@ -1396,18 +1295,18 @@ dependencies = [
1396
1295
 
1397
1296
  [[package]]
1398
1297
  name = "pyo3-build-config"
1399
- version = "0.29.1"
1298
+ version = "0.29.2"
1400
1299
  source = "registry+https://github.com/rust-lang/crates.io-index"
1401
- checksum = "bb77d9aa6d647507b55c69ee714d266d84c526c78ff0bc6dd8757f58591e64d1"
1300
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
1402
1301
  dependencies = [
1403
1302
  "target-lexicon",
1404
1303
  ]
1405
1304
 
1406
1305
  [[package]]
1407
1306
  name = "pyo3-ffi"
1408
- version = "0.29.1"
1307
+ version = "0.29.2"
1409
1308
  source = "registry+https://github.com/rust-lang/crates.io-index"
1410
- checksum = "3160087aa5733bce7d9a729f8c55f85a2a53b74742a09613178eeebff0722253"
1309
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
1411
1310
  dependencies = [
1412
1311
  "libc",
1413
1312
  "pyo3-build-config",
@@ -1415,9 +1314,9 @@ dependencies = [
1415
1314
 
1416
1315
  [[package]]
1417
1316
  name = "pyo3-macros"
1418
- version = "0.29.1"
1317
+ version = "0.29.2"
1419
1318
  source = "registry+https://github.com/rust-lang/crates.io-index"
1420
- checksum = "91f9d455db760a9a0b0ddeaac25f1390b8a36ba73dfbda9f127cac6fc340d4d5"
1319
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
1421
1320
  dependencies = [
1422
1321
  "proc-macro2",
1423
1322
  "pyo3-macros-backend",
@@ -1427,9 +1326,9 @@ dependencies = [
1427
1326
 
1428
1327
  [[package]]
1429
1328
  name = "pyo3-macros-backend"
1430
- version = "0.29.1"
1329
+ version = "0.29.2"
1431
1330
  source = "registry+https://github.com/rust-lang/crates.io-index"
1432
- checksum = "e343bcec300ff262f5806a33a4e51b6d097a8a46435f512fcb83e95592581625"
1331
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
1433
1332
  dependencies = [
1434
1333
  "heck",
1435
1334
  "proc-macro2",
@@ -1447,63 +1346,6 @@ dependencies = [
1447
1346
  "serde",
1448
1347
  ]
1449
1348
 
1450
- [[package]]
1451
- name = "quinn"
1452
- version = "0.11.11"
1453
- source = "registry+https://github.com/rust-lang/crates.io-index"
1454
- checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8"
1455
- dependencies = [
1456
- "bytes",
1457
- "cfg_aliases",
1458
- "pin-project-lite",
1459
- "quinn-proto",
1460
- "quinn-udp",
1461
- "rustc-hash",
1462
- "rustls",
1463
- "socket2",
1464
- "thiserror 2.0.19",
1465
- "tokio",
1466
- "tracing",
1467
- "web-time",
1468
- ]
1469
-
1470
- [[package]]
1471
- name = "quinn-proto"
1472
- version = "0.11.16"
1473
- source = "registry+https://github.com/rust-lang/crates.io-index"
1474
- checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560"
1475
- dependencies = [
1476
- "aws-lc-rs",
1477
- "bytes",
1478
- "getrandom 0.4.3",
1479
- "lru-slab",
1480
- "rand",
1481
- "rand_pcg",
1482
- "ring",
1483
- "rustc-hash",
1484
- "rustls",
1485
- "rustls-pki-types",
1486
- "slab",
1487
- "thiserror 2.0.19",
1488
- "tinyvec",
1489
- "tracing",
1490
- "web-time",
1491
- ]
1492
-
1493
- [[package]]
1494
- name = "quinn-udp"
1495
- version = "0.5.15"
1496
- source = "registry+https://github.com/rust-lang/crates.io-index"
1497
- checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694"
1498
- dependencies = [
1499
- "cfg_aliases",
1500
- "libc",
1501
- "once_cell",
1502
- "socket2",
1503
- "tracing",
1504
- "windows-sys 0.61.2",
1505
- ]
1506
-
1507
1349
  [[package]]
1508
1350
  name = "quote"
1509
1351
  version = "1.0.47"
@@ -1519,38 +1361,6 @@ version = "5.3.0"
1519
1361
  source = "registry+https://github.com/rust-lang/crates.io-index"
1520
1362
  checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1521
1363
 
1522
- [[package]]
1523
- name = "r-efi"
1524
- version = "6.0.0"
1525
- source = "registry+https://github.com/rust-lang/crates.io-index"
1526
- checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1527
-
1528
- [[package]]
1529
- name = "rand"
1530
- version = "0.10.2"
1531
- source = "registry+https://github.com/rust-lang/crates.io-index"
1532
- checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
1533
- dependencies = [
1534
- "chacha20",
1535
- "getrandom 0.4.3",
1536
- "rand_core",
1537
- ]
1538
-
1539
- [[package]]
1540
- name = "rand_core"
1541
- version = "0.10.1"
1542
- source = "registry+https://github.com/rust-lang/crates.io-index"
1543
- checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
1544
-
1545
- [[package]]
1546
- name = "rand_pcg"
1547
- version = "0.10.2"
1548
- source = "registry+https://github.com/rust-lang/crates.io-index"
1549
- checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
1550
- dependencies = [
1551
- "rand_core",
1552
- ]
1553
-
1554
1364
  [[package]]
1555
1365
  name = "rawpointer"
1556
1366
  version = "0.2.1"
@@ -1571,9 +1381,9 @@ dependencies = [
1571
1381
 
1572
1382
  [[package]]
1573
1383
  name = "regex-automata"
1574
- version = "0.4.16"
1384
+ version = "0.4.18"
1575
1385
  source = "registry+https://github.com/rust-lang/crates.io-index"
1576
- checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad"
1386
+ checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2"
1577
1387
  dependencies = [
1578
1388
  "aho-corasick",
1579
1389
  "memchr",
@@ -1592,10 +1402,9 @@ version = "0.13.4"
1592
1402
  source = "registry+https://github.com/rust-lang/crates.io-index"
1593
1403
  checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3"
1594
1404
  dependencies = [
1595
- "base64",
1405
+ "base64 0.22.1",
1596
1406
  "bytes",
1597
1407
  "futures-core",
1598
- "h2",
1599
1408
  "http",
1600
1409
  "http-body",
1601
1410
  "http-body-util",
@@ -1606,7 +1415,6 @@ dependencies = [
1606
1415
  "log",
1607
1416
  "percent-encoding",
1608
1417
  "pin-project-lite",
1609
- "quinn",
1610
1418
  "rustls",
1611
1419
  "rustls-pki-types",
1612
1420
  "rustls-platform-verifier",
@@ -1660,8 +1468,9 @@ version = "0.23.43"
1660
1468
  source = "registry+https://github.com/rust-lang/crates.io-index"
1661
1469
  checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06"
1662
1470
  dependencies = [
1663
- "aws-lc-rs",
1471
+ "log",
1664
1472
  "once_cell",
1473
+ "ring",
1665
1474
  "rustls-pki-types",
1666
1475
  "rustls-webpki",
1667
1476
  "subtle",
@@ -1686,7 +1495,6 @@ version = "1.15.1"
1686
1495
  source = "registry+https://github.com/rust-lang/crates.io-index"
1687
1496
  checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96"
1688
1497
  dependencies = [
1689
- "web-time",
1690
1498
  "zeroize",
1691
1499
  ]
1692
1500
 
@@ -1723,7 +1531,6 @@ version = "0.103.13"
1723
1531
  source = "registry+https://github.com/rust-lang/crates.io-index"
1724
1532
  checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
1725
1533
  dependencies = [
1726
- "aws-lc-rs",
1727
1534
  "ring",
1728
1535
  "rustls-pki-types",
1729
1536
  "untrusted",
@@ -1964,11 +1771,11 @@ dependencies = [
1964
1771
 
1965
1772
  [[package]]
1966
1773
  name = "thiserror"
1967
- version = "2.0.19"
1774
+ version = "2.0.20"
1968
1775
  source = "registry+https://github.com/rust-lang/crates.io-index"
1969
- checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9"
1776
+ checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
1970
1777
  dependencies = [
1971
- "thiserror-impl 2.0.19",
1778
+ "thiserror-impl 2.0.20",
1972
1779
  ]
1973
1780
 
1974
1781
  [[package]]
@@ -1984,9 +1791,9 @@ dependencies = [
1984
1791
 
1985
1792
  [[package]]
1986
1793
  name = "thiserror-impl"
1987
- version = "2.0.19"
1794
+ version = "2.0.20"
1988
1795
  source = "registry+https://github.com/rust-lang/crates.io-index"
1989
- checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd"
1796
+ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
1990
1797
  dependencies = [
1991
1798
  "proc-macro2",
1992
1799
  "quote",
@@ -2012,21 +1819,6 @@ dependencies = [
2012
1819
  "zerovec",
2013
1820
  ]
2014
1821
 
2015
- [[package]]
2016
- name = "tinyvec"
2017
- version = "1.12.0"
2018
- source = "registry+https://github.com/rust-lang/crates.io-index"
2019
- checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f"
2020
- dependencies = [
2021
- "tinyvec_macros",
2022
- ]
2023
-
2024
- [[package]]
2025
- name = "tinyvec_macros"
2026
- version = "0.1.1"
2027
- source = "registry+https://github.com/rust-lang/crates.io-index"
2028
- checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
2029
-
2030
1822
  [[package]]
2031
1823
  name = "tokio"
2032
1824
  version = "1.53.1"
@@ -2237,9 +2029,9 @@ dependencies = [
2237
2029
 
2238
2030
  [[package]]
2239
2031
  name = "wasm-bindgen"
2240
- version = "0.2.126"
2032
+ version = "0.2.127"
2241
2033
  source = "registry+https://github.com/rust-lang/crates.io-index"
2242
- checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
2034
+ checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70"
2243
2035
  dependencies = [
2244
2036
  "cfg-if",
2245
2037
  "once_cell",
@@ -2250,9 +2042,9 @@ dependencies = [
2250
2042
 
2251
2043
  [[package]]
2252
2044
  name = "wasm-bindgen-futures"
2253
- version = "0.4.76"
2045
+ version = "0.4.77"
2254
2046
  source = "registry+https://github.com/rust-lang/crates.io-index"
2255
- checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d"
2047
+ checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950"
2256
2048
  dependencies = [
2257
2049
  "js-sys",
2258
2050
  "wasm-bindgen",
@@ -2260,9 +2052,9 @@ dependencies = [
2260
2052
 
2261
2053
  [[package]]
2262
2054
  name = "wasm-bindgen-macro"
2263
- version = "0.2.126"
2055
+ version = "0.2.127"
2264
2056
  source = "registry+https://github.com/rust-lang/crates.io-index"
2265
- checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
2057
+ checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1"
2266
2058
  dependencies = [
2267
2059
  "quote",
2268
2060
  "wasm-bindgen-macro-support",
@@ -2270,9 +2062,9 @@ dependencies = [
2270
2062
 
2271
2063
  [[package]]
2272
2064
  name = "wasm-bindgen-macro-support"
2273
- version = "0.2.126"
2065
+ version = "0.2.127"
2274
2066
  source = "registry+https://github.com/rust-lang/crates.io-index"
2275
- checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
2067
+ checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284"
2276
2068
  dependencies = [
2277
2069
  "bumpalo",
2278
2070
  "proc-macro2",
@@ -2283,28 +2075,18 @@ dependencies = [
2283
2075
 
2284
2076
  [[package]]
2285
2077
  name = "wasm-bindgen-shared"
2286
- version = "0.2.126"
2078
+ version = "0.2.127"
2287
2079
  source = "registry+https://github.com/rust-lang/crates.io-index"
2288
- checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
2080
+ checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf"
2289
2081
  dependencies = [
2290
2082
  "unicode-ident",
2291
2083
  ]
2292
2084
 
2293
2085
  [[package]]
2294
2086
  name = "web-sys"
2295
- version = "0.3.103"
2296
- source = "registry+https://github.com/rust-lang/crates.io-index"
2297
- checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141"
2298
- dependencies = [
2299
- "js-sys",
2300
- "wasm-bindgen",
2301
- ]
2302
-
2303
- [[package]]
2304
- name = "web-time"
2305
- version = "1.1.0"
2087
+ version = "0.3.104"
2306
2088
  source = "registry+https://github.com/rust-lang/crates.io-index"
2307
- checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
2089
+ checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30"
2308
2090
  dependencies = [
2309
2091
  "js-sys",
2310
2092
  "wasm-bindgen",
@@ -2476,7 +2258,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2476
2258
  checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031"
2477
2259
  dependencies = [
2478
2260
  "assert-json-diff",
2479
- "base64",
2261
+ "base64 0.22.1",
2480
2262
  "deadpool",
2481
2263
  "futures",
2482
2264
  "http",
@@ -2529,18 +2311,18 @@ dependencies = [
2529
2311
 
2530
2312
  [[package]]
2531
2313
  name = "zerocopy"
2532
- version = "0.8.55"
2314
+ version = "0.8.56"
2533
2315
  source = "registry+https://github.com/rust-lang/crates.io-index"
2534
- checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb"
2316
+ checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb"
2535
2317
  dependencies = [
2536
2318
  "zerocopy-derive",
2537
2319
  ]
2538
2320
 
2539
2321
  [[package]]
2540
2322
  name = "zerocopy-derive"
2541
- version = "0.8.55"
2323
+ version = "0.8.56"
2542
2324
  source = "registry+https://github.com/rust-lang/crates.io-index"
2543
- checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb"
2325
+ checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1"
2544
2326
  dependencies = [
2545
2327
  "proc-macro2",
2546
2328
  "quote",
@@ -0,0 +1,108 @@
1
+ [package]
2
+ name = "arrowbricks_core"
3
+ version = "3.0.3"
4
+ edition = "2024"
5
+ readme = "README.md"
6
+
7
+ [lib]
8
+ name = "arrowbricks_core"
9
+ crate-type = ["cdylib", "rlib"]
10
+
11
+ [dependencies]
12
+ # default-features off: arrow's defaults are csv+ipc+json, and we only ever
13
+ # decode Arrow-IPC chunks -- csv/json parsing (plus their transitive deps)
14
+ # would just be dead weight in the shipped .so.
15
+ arrow = { version = "59.1.0", default-features = false, features = ["ipc"] }
16
+ arrow-json = "59.1.0"
17
+ bytes = "1.12.1"
18
+ # Already an unconditional transitive dependency of pyo3-arrow (see its own
19
+ # comment below) -- declared directly here too so json_convert.rs can parse
20
+ # DATE/TIMESTAMP/TIMESTAMP_NTZ strings without hand-rolling calendar
21
+ # arithmetic. No new code ships that wasn't already linked in.
22
+ chrono = { version = "0.4", default-features = false, features = ["std"] }
23
+ # Decompresses cloud-fetch chunk bytes when the server honors our
24
+ # `result_compression: LZ4_FRAME` request (see client.rs's execute_statement)
25
+ # -- the same LZ4 Frame format databricks-sql-python's `lz4.frame` decodes.
26
+ # Pure Rust, no C toolchain dependency -- unlike reqwest's TLS stack below.
27
+ lz4_flex = { version = "0.14", default-features = false, features = ["frame", "std"] }
28
+ pyo3 = { version = "0.29.1", features = ["abi3-py311"] }
29
+ # pyo3-arrow's only optional feature is buffer_protocol (on by default),
30
+ # which we don't use -- numpy/chrono/chrono-tz/arrow-cast(prettyprint) below
31
+ # it are unconditional dependencies of the crate itself, not features, so
32
+ # they ship regardless; not worth dropping pyo3-arrow over that (reimplementing
33
+ # the Arrow C Data Interface ourselves is a much bigger risk than the MBs saved).
34
+ pyo3-arrow = { version = "0.19.0", default-features = false }
35
+ pyo3-async-runtimes = { version = "0.29.0", features = ["tokio-runtime"] }
36
+ pythonize = "0.29.0"
37
+ # reqwest's own `rustls` feature is hardcoded to `__rustls-aws-lc-rs`, no way
38
+ # to opt out from that alias alone -- `rustls-no-provider` instead pulls in
39
+ # rustls/hyper-rustls with *no* crypto backend wired in, and we supply our
40
+ # own via the two direct deps below (`ring`, not `aws-lc-rs`: smaller
41
+ # compiled footprint, confirmed by direct measurement -- both still need a C
42
+ # compiler for their own hand-optimized assembly, so this isn't a "no C
43
+ # toolchain" win the way `lz4_flex` above is) -- see
44
+ # `install_default_crypto_provider` in client.rs, the one place that backend
45
+ # choice actually has to be wired up. No "http2": every request this crate
46
+ # makes is a plain, independent HTTPS call from its own connection pool (no
47
+ # client-side multiplexing to gain from HTTP/2's stream interleaving), and
48
+ # reqwest/hyper transparently fall back to HTTP/1.1 when a peer doesn't offer
49
+ # h2 via ALPN -- dropping this feature is a binary-size cut (the h2 crate,
50
+ # plus hyper's own HTTP/2 code paths), not a functional change, *if* the real
51
+ # Databricks endpoints this crate talks to actually serve HTTP/1.1 --
52
+ # confirmed against a real workspace before landing this (see AGENTS.md).
53
+ reqwest = { version = "0.13.4", default-features = false, features = ["json", "query", "rustls-no-provider"] }
54
+ # Pinned to the same instance reqwest/hyper-rustls already resolve to
55
+ # (feature unification, not a second copy) purely to turn on their "ring"
56
+ # feature instead of the default aws-lc-rs -- see reqwest's own comment
57
+ # above. `prefer-post-quantum` (rustls' own default) needs aws-lc-rs
58
+ # specifically (ring has no ML-KEM support), so it's dropped along with it;
59
+ # not required to talk to Databricks.
60
+ rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12", "logging"] }
61
+ hyper-rustls = { version = "0.27", default-features = false, features = ["ring"] }
62
+ serde = { version = "1.0.229", features = ["derive"] }
63
+ serde_json = "1.0.151"
64
+ tokio = { version = "1.53.1", features = ["rt-multi-thread", "macros"] }
65
+
66
+ [features]
67
+ default = ["extension-module"]
68
+ # `extension-module` skips linking against libpython -- correct for the
69
+ # cdylib maturin actually ships (Python provides those symbols at import
70
+ # time), but it breaks a plain `cargo test`/`cargo bench` binary, which does
71
+ # need to link libpython itself. Tests/benches build with
72
+ # `--no-default-features` to get a normal link.
73
+ extension-module = ["pyo3/extension-module"]
74
+
75
+ [dev-dependencies]
76
+ tokio = { version = "1.53.1", features = ["rt-multi-thread", "macros", "test-util", "net", "io-util"] }
77
+ wiremock = "0.6.5"
78
+
79
+ # Currently clean on all three by luck, not enforcement -- pinning them here
80
+ # so a future PR that introduces one fails CI instead of silently landing.
81
+ [lints.clippy]
82
+ redundant_clone = "warn"
83
+ large_enum_variant = "warn"
84
+ needless_collect = "warn"
85
+
86
+ [profile.release]
87
+ # opt-level="s" over the implicit default (3) or "z" -- a size-vs-speed
88
+ # tradeoff previously rejected here on the reasoning that "3" was what the
89
+ # perf benchmarks were run against and hadn't been re-measured against "s"/
90
+ # "z". Actually measured, both ends of that tradeoff: a 400k-row/41-column
91
+ # local decode (no network, isolates CPU cost) averaged 35.4ms at
92
+ # opt-level=3, 34.3ms at "s" (noise-level difference, not a real cost), and
93
+ # 70.7ms at "z" (a real ~2x regression) -- confirmed via a real-warehouse
94
+ # benchmark too, where opt-level made no measurable difference at all
95
+ # (network/warehouse time dominates wall-clock there regardless). "s" is a
96
+ # free ~20% .so size cut (12.8 MiB -> 10.3 MiB after also dropping
97
+ # reqwest's `http2` feature below) with no measured speed cost anywhere
98
+ # tested; "z" trades real decode speed for a further cut and isn't worth
99
+ # it for a crate whose whole selling point is decode speed. strip + lto +
100
+ # codegen-units=1 remain pure wins with no tradeoff at all: less debuginfo
101
+ # and better cross-crate dead-code elimination, not slower code.
102
+ # panic = "abort" is NOT an option here even though it'd shrink the binary --
103
+ # pyo3 relies on unwinding (catch_unwind) to turn a Rust panic into a Python
104
+ # exception at the FFI boundary instead of aborting the whole interpreter.
105
+ opt-level = "s"
106
+ strip = true
107
+ lto = true
108
+ codegen-units = 1
@@ -698,12 +698,26 @@ impl<T> Pool<T> {
698
698
 
699
699
  pub const MAX_SESSIONS_PER_KEY: usize = 8;
700
700
 
701
+ /// rustls (via reqwest's `rustls-no-provider` feature, see this crate's own
702
+ /// Cargo.toml comment on why) has no crypto backend wired in until one is
703
+ /// installed process-wide, and building a `reqwest::Client` panics if none
704
+ /// has been -- called from every `DbClient` constructor rather than from
705
+ /// the PyO3 module's own init, since a plain `cargo test`/pure-Rust caller
706
+ /// never runs that init at all. `install_default` only errors if a
707
+ /// provider was already installed (a second `DbClient`, or another
708
+ /// extension in the same interpreter already installed one) -- not a real
709
+ /// failure for us either way, so ignored.
710
+ fn install_default_crypto_provider() {
711
+ let _ = rustls::crypto::ring::default_provider().install_default();
712
+ }
713
+
701
714
  impl DbClient {
702
715
  pub fn new(host: &str, warehouse_id: &str, token: &str) -> Self {
703
716
  Self::with_token_provider(host, warehouse_id, Arc::new(StaticToken(token.to_string())))
704
717
  }
705
718
 
706
719
  pub fn with_token_provider(host: &str, warehouse_id: &str, token_provider: Arc<dyn TokenProvider>) -> Self {
720
+ install_default_crypto_provider();
707
721
  let host = host.trim_end_matches('/');
708
722
  // Only force https:// when no scheme was given at all -- same as
709
723
  // Python's check, but relaxed to not clobber an explicit http://
@@ -1,79 +0,0 @@
1
- [package]
2
- name = "arrowbricks_core"
3
- version = "3.0.2"
4
- edition = "2024"
5
- readme = "README.md"
6
-
7
- [lib]
8
- name = "arrowbricks_core"
9
- crate-type = ["cdylib", "rlib"]
10
-
11
- [dependencies]
12
- # default-features off: arrow's defaults are csv+ipc+json, and we only ever
13
- # decode Arrow-IPC chunks -- csv/json parsing (plus their transitive deps)
14
- # would just be dead weight in the shipped .so.
15
- arrow = { version = "59.1.0", default-features = false, features = ["ipc"] }
16
- arrow-json = "59.1.0"
17
- bytes = "1.12.1"
18
- # Already an unconditional transitive dependency of pyo3-arrow (see its own
19
- # comment below) -- declared directly here too so json_convert.rs can parse
20
- # DATE/TIMESTAMP/TIMESTAMP_NTZ strings without hand-rolling calendar
21
- # arithmetic. No new code ships that wasn't already linked in.
22
- chrono = { version = "0.4", default-features = false, features = ["std"] }
23
- # Decompresses cloud-fetch chunk bytes when the server honors our
24
- # `result_compression: LZ4_FRAME` request (see client.rs's execute_statement)
25
- # -- the same LZ4 Frame format databricks-sql-python's `lz4.frame` decodes.
26
- # Pure Rust, no C toolchain dependency -- unlike reqwest's `rustls` feature
27
- # below, which *does* pull one in (`__rustls-aws-lc-rs` -> aws-lc-rs ->
28
- # aws-lc-sys, confirmed via `cargo tree -i aws-lc-sys`; this crate has no
29
- # `ring` feature available in reqwest 0.13 to avoid it with). A previous
30
- # version of this comment claimed the opposite -- that this crate avoids
31
- # aws-lc-sys-style native-build pain elsewhere too -- found wrong on review;
32
- # see AGENTS.md's build-prerequisites note.
33
- lz4_flex = { version = "0.11", default-features = false, features = ["frame", "std"] }
34
- pyo3 = { version = "0.29.1", features = ["abi3-py311"] }
35
- # pyo3-arrow's only optional feature is buffer_protocol (on by default),
36
- # which we don't use -- numpy/chrono/chrono-tz/arrow-cast(prettyprint) below
37
- # it are unconditional dependencies of the crate itself, not features, so
38
- # they ship regardless; not worth dropping pyo3-arrow over that (reimplementing
39
- # the Arrow C Data Interface ourselves is a much bigger risk than the MBs saved).
40
- pyo3-arrow = { version = "0.19.0", default-features = false }
41
- pyo3-async-runtimes = { version = "0.29.0", features = ["tokio-runtime"] }
42
- pythonize = "0.29.0"
43
- reqwest = { version = "0.13.4", default-features = false, features = ["json", "query", "rustls", "http2"] }
44
- serde = { version = "1.0.229", features = ["derive"] }
45
- serde_json = "1.0.151"
46
- tokio = { version = "1.53.1", features = ["rt-multi-thread", "macros"] }
47
-
48
- [features]
49
- default = ["extension-module"]
50
- # `extension-module` skips linking against libpython -- correct for the
51
- # cdylib maturin actually ships (Python provides those symbols at import
52
- # time), but it breaks a plain `cargo test`/`cargo bench` binary, which does
53
- # need to link libpython itself. Tests/benches build with
54
- # `--no-default-features` to get a normal link.
55
- extension-module = ["pyo3/extension-module"]
56
-
57
- [dev-dependencies]
58
- tokio = { version = "1.53.1", features = ["rt-multi-thread", "macros", "test-util", "net", "io-util"] }
59
- wiremock = "0.6.5"
60
-
61
- # Currently clean on all three by luck, not enforcement -- pinning them here
62
- # so a future PR that introduces one fails CI instead of silently landing.
63
- [lints.clippy]
64
- redundant_clone = "warn"
65
- large_enum_variant = "warn"
66
- needless_collect = "warn"
67
-
68
- [profile.release]
69
- # opt-level stays at the implicit default (3, speed) rather than "s"/"z" --
70
- # perf was the original ask and the benchmarks were run against opt-level 3;
71
- # trading hot-path speed for a smaller .so wasn't asked for. strip + lto +
72
- # codegen-units=1 are pure wins with no such tradeoff: less debuginfo and
73
- # better cross-crate dead-code elimination, not slower code.
74
- # panic = "abort" is NOT an option here even though it'd shrink the binary --
75
- # pyo3 relies on unwinding (catch_unwind) to turn a Rust panic into a Python
76
- # exception at the FFI boundary instead of aborting the whole interpreter.
77
- strip = true
78
- lto = true
79
- codegen-units = 1
File without changes