diff --git a/ibis-server/justfile b/ibis-server/justfile index 58de6d878..5b1f03f3e 100644 --- a/ibis-server/justfile +++ b/ibis-server/justfile @@ -21,7 +21,7 @@ pre-commit-install: port := "8000" run: - poetry run fastapi run --port {{ port }} + poetry run python -m fastapi run --port {{ port }} workers := "2" @@ -45,7 +45,7 @@ run-trace-otlp: --service_name wren-engine \ fastapi run --port {{ port }} dev: - poetry run fastapi dev --port {{ port }} + poetry run python -m fastapi dev --port {{ port }} # run the pytest tests for the given marker test MARKER: diff --git a/ibis-server/tests/routers/v3/connector/snowflake/conftest.py b/ibis-server/tests/routers/v3/connector/snowflake/conftest.py index ef11b761d..29ccd4690 100644 --- a/ibis-server/tests/routers/v3/connector/snowflake/conftest.py +++ b/ibis-server/tests/routers/v3/connector/snowflake/conftest.py @@ -2,10 +2,15 @@ import pathlib import pytest +import snowflake.connector + +from app.config import get_config +from tests.conftest import file_path pytestmark = pytest.mark.snowflake base_url = "/v3/connector/snowflake" +function_list_path = file_path("../resources/function_list") def pytest_collection_modifyitems(items): @@ -15,8 +20,87 @@ def pytest_collection_modifyitems(items): item.add_marker(pytestmark) +@pytest.fixture(scope="module", autouse=True) +def init_snowflake(): + user = os.getenv("SNOWFLAKE_USER") + account = os.getenv("SNOWFLAKE_ACCOUNT") + private_key = os.getenv("SNOWFLAKE_PRIVATE_KEY") + if not user or not account or not private_key: + pytest.skip("Snowflake credentials are not set", allow_module_level=True) + + conn = snowflake.connector.connect( + user=user, + account=account, + private_key=private_key, + warehouse="COMPUTE_WH", + ) + try: + cs = conn.cursor() + try: + cs.execute("USE WREN") + except Exception: + cs.execute("CREATE DATABASE IF NOT EXISTS WREN") + cs.execute("USE WREN") + try: + cs.execute("USE SCHEMA PUBLIC") + except Exception: + cs.execute("CREATE SCHEMA IF NOT EXISTS PUBLIC") + cs.execute("USE SCHEMA PUBLIC") + # prepare table with variant column + cs.execute( + """ + CREATE OR REPLACE TABLE car_sales + ( + src variant + ) + AS + SELECT PARSE_JSON(column1) AS src + FROM VALUES + ('{ + "date" : "2017-04-28", + "dealership" : "Valley View Auto Sales", + "salesperson" : { + "id": "55", + "name": "Frank Beasley" + }, + "customer" : [ + {"name": "Joyce Ridgely", "phone": "16504378889", "address": "San Francisco, CA"} + ], + "vehicle" : [ + {"make": "Honda", "model": "Civic", "year": "2017", "price": "20275", "extras":["ext warranty", "paint protection"]} + ] + }'), + ('{ + "date" : "2017-04-28", + "dealership" : "Tindel Toyota", + "salesperson" : { + "id": "274", + "name": "Greg Northrup" + }, + "customer" : [ + {"name": "Bradley Greenbloom", "phone": "12127593751", "address": "New York, NY"} + ], + "vehicle" : [ + {"make": "Toyota", "model": "Camry", "year": "2017", "price": "23500", "extras":["ext warranty", "rust proofing", "fabric protection"]} + ] + }') v; + """ + ) + finally: + cs.close() + conn.close() + + +@pytest.fixture(scope="module", autouse=True) +def set_remote_function_list_path(): + config = get_config() + config.set_remote_function_list_path(function_list_path) + yield + config.set_remote_function_list_path(None) + + @pytest.fixture(scope="module") -def connection_info() -> dict[str, str]: +def tpch_connection_info() -> dict[str, str]: return { "user": os.getenv("SNOWFLAKE_USER"), "account": os.getenv("SNOWFLAKE_ACCOUNT"), @@ -25,3 +109,15 @@ def connection_info() -> dict[str, str]: "warehouse": "COMPUTE_WH", "private_key": os.getenv("SNOWFLAKE_PRIVATE_KEY"), } + + +@pytest.fixture(scope="module") +def snowflake_connection_info() -> dict[str, str]: + return { + "user": os.getenv("SNOWFLAKE_USER"), + "account": os.getenv("SNOWFLAKE_ACCOUNT"), + "database": "WREN", + "schema": "PUBLIC", + "warehouse": "COMPUTE_WH", + "private_key": os.getenv("SNOWFLAKE_PRIVATE_KEY"), + } diff --git a/ibis-server/tests/routers/v3/connector/snowflake/test_functions.py b/ibis-server/tests/routers/v3/connector/snowflake/test_functions.py index 02e304c65..812c03b99 100644 --- a/ibis-server/tests/routers/v3/connector/snowflake/test_functions.py +++ b/ibis-server/tests/routers/v3/connector/snowflake/test_functions.py @@ -4,8 +4,8 @@ import pytest from app.config import get_config -from tests.conftest import DATAFUSION_FUNCTION_COUNT, file_path -from tests.routers.v3.connector.snowflake.conftest import base_url +from tests.conftest import DATAFUSION_FUNCTION_COUNT +from tests.routers.v3.connector.snowflake.conftest import base_url, function_list_path manifest = { "catalog": "my_catalog", @@ -24,22 +24,12 @@ ], } -function_list_path = file_path("../resources/function_list") - @pytest.fixture(scope="module") def manifest_str(): return base64.b64encode(orjson.dumps(manifest)).decode("utf-8") -@pytest.fixture(autouse=True) -def set_remote_function_list_path(): - config = get_config() - config.set_remote_function_list_path(function_list_path) - yield - config.set_remote_function_list_path(None) - - async def test_function_list(client): config = get_config() @@ -71,11 +61,11 @@ async def test_function_list(client): assert len(result) == DATAFUSION_FUNCTION_COUNT -async def test_scalar_function(client, manifest_str: str, connection_info): +async def test_scalar_function(client, manifest_str: str, tpch_connection_info): response = await client.post( url=f"{base_url}/query", json={ - "connectionInfo": connection_info, + "connectionInfo": tpch_connection_info, "manifestStr": manifest_str, "sql": "SELECT ABS(-1) AS col", }, @@ -89,11 +79,11 @@ async def test_scalar_function(client, manifest_str: str, connection_info): } -async def test_aggregate_function(client, manifest_str: str, connection_info): +async def test_aggregate_function(client, manifest_str: str, tpch_connection_info): response = await client.post( url=f"{base_url}/query", json={ - "connectionInfo": connection_info, + "connectionInfo": tpch_connection_info, "manifestStr": manifest_str, "sql": "SELECT COUNT(*) AS col FROM (SELECT 1) AS temp_table", }, diff --git a/ibis-server/tests/routers/v3/connector/snowflake/test_query.py b/ibis-server/tests/routers/v3/connector/snowflake/test_query.py new file mode 100644 index 000000000..a52b7c500 --- /dev/null +++ b/ibis-server/tests/routers/v3/connector/snowflake/test_query.py @@ -0,0 +1,56 @@ +import base64 + +import orjson +import pytest + +from app.dependencies import X_WREN_FALLBACK_DISABLE +from tests.routers.v3.connector.snowflake.conftest import base_url + +manifest = { + "catalog": "wren", + "schema": "public", + "models": [ + { + "name": "car_sales", + "tableReference": { + "catalog": "wren", + "schema": "PUBLIC", + "table": "car_sales", + }, + "columns": [ + {"name": "src", "type": "variant"}, + ], + }, + ], + "dataSource": "snowflake", +} + + +@pytest.fixture(scope="module") +def manifest_str(): + return base64.b64encode(orjson.dumps(manifest)).decode("utf-8") + + +async def test_qeury(client, manifest_str, snowflake_connection_info): + response = await client.post( + url=f"{base_url}/query", + json={ + "connectionInfo": snowflake_connection_info, + "manifestStr": manifest_str, + "sql": "select t.a from car_sales c, UNNEST(to_array(get_path(c.src, 'customer'))) t(a)", + }, + headers={ + X_WREN_FALLBACK_DISABLE: "true", + }, + ) + assert response.status_code == 200 + result = response.json() + assert len(result["data"]) == 2 + assert result["data"] == [ + [ + '{"address":"San Francisco, CA","name":"Joyce Ridgely","phone":"16504378889"}' + ], + [ + '{"address":"New York, NY","name":"Bradley Greenbloom","phone":"12127593751"}' + ], + ] diff --git a/wren-core-py/Cargo.lock b/wren-core-py/Cargo.lock index 9ec17f1d4..271b99a87 100644 --- a/wren-core-py/Cargo.lock +++ b/wren-core-py/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -25,7 +16,7 @@ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "const-random", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -33,9 +24,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -72,9 +63,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -120,6 +111,15 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "ar_archive_writer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c269894b6fe5e9d7ada0cf69b5bf847ff35bc25fc271f08e1d080fce80339a" +dependencies = [ + "object", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -271,7 +271,7 @@ dependencies = [ "arrow-schema", "chrono", "half", - "indexmap 2.11.4", + "indexmap 2.12.0", "lexical-core", "memchr", "num", @@ -390,21 +390,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", -] - [[package]] name = "base64" version = "0.22.1" @@ -413,9 +398,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bigdecimal" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" +checksum = "560f42649de9fa436b73517378a147ec21f6c997a546581df4b4b31677828934" dependencies = [ "autocfg", "libm", @@ -426,9 +411,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "blake2" @@ -511,9 +496,9 @@ dependencies = [ [[package]] name = "bzip2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ "libbz2-rs-sys", ] @@ -530,9 +515,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.39" +version = "1.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" +checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" dependencies = [ "find-msvc-tools", "jobserver", @@ -542,9 +527,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" @@ -658,21 +643,21 @@ dependencies = [ [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -729,14 +714,14 @@ dependencies = [ [[package]] name = "datafusion" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "arrow-ipc", "arrow-schema", "async-trait", "bytes", - "bzip2 0.6.0", + "bzip2 0.6.1", "chrono", "datafusion-catalog", "datafusion-catalog-listing", @@ -783,7 +768,7 @@ dependencies = [ [[package]] name = "datafusion-catalog" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -808,7 +793,7 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -830,7 +815,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "ahash", "arrow", @@ -840,7 +825,7 @@ dependencies = [ "half", "hashbrown 0.14.5", "hex", - "indexmap 2.11.4", + "indexmap 2.12.0", "libc", "log", "object_store", @@ -855,7 +840,7 @@ dependencies = [ [[package]] name = "datafusion-common-runtime" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "futures", "log", @@ -865,13 +850,13 @@ dependencies = [ [[package]] name = "datafusion-datasource" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-compression", "async-trait", "bytes", - "bzip2 0.6.0", + "bzip2 0.6.1", "chrono", "datafusion-common", "datafusion-common-runtime", @@ -900,7 +885,7 @@ dependencies = [ [[package]] name = "datafusion-datasource-csv" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -924,7 +909,7 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -948,7 +933,7 @@ dependencies = [ [[package]] name = "datafusion-datasource-parquet" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -980,12 +965,12 @@ dependencies = [ [[package]] name = "datafusion-doc" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" [[package]] name = "datafusion-execution" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "dashmap", @@ -1003,7 +988,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -1014,7 +999,7 @@ dependencies = [ "datafusion-functions-aggregate-common", "datafusion-functions-window-common", "datafusion-physical-expr-common", - "indexmap 2.11.4", + "indexmap 2.12.0", "paste", "recursive", "serde_json", @@ -1024,11 +1009,11 @@ dependencies = [ [[package]] name = "datafusion-expr-common" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "datafusion-common", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools", "paste", ] @@ -1036,7 +1021,7 @@ dependencies = [ [[package]] name = "datafusion-functions" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "arrow-buffer", @@ -1064,7 +1049,7 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "ahash", "arrow", @@ -1084,7 +1069,7 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "ahash", "arrow", @@ -1096,7 +1081,7 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "arrow-ord", @@ -1117,7 +1102,7 @@ dependencies = [ [[package]] name = "datafusion-functions-table" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -1132,7 +1117,7 @@ dependencies = [ [[package]] name = "datafusion-functions-window" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "datafusion-common", @@ -1149,7 +1134,7 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -1158,7 +1143,7 @@ dependencies = [ [[package]] name = "datafusion-macros" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "datafusion-expr", "quote", @@ -1168,7 +1153,7 @@ dependencies = [ [[package]] name = "datafusion-optimizer" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "chrono", @@ -1176,7 +1161,7 @@ dependencies = [ "datafusion-expr", "datafusion-expr-common", "datafusion-physical-expr", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools", "log", "recursive", @@ -1187,7 +1172,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "ahash", "arrow", @@ -1198,7 +1183,7 @@ dependencies = [ "datafusion-physical-expr-common", "half", "hashbrown 0.14.5", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools", "log", "paste", @@ -1208,7 +1193,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "ahash", "arrow", @@ -1221,7 +1206,7 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "datafusion-common", @@ -1240,7 +1225,7 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "ahash", "arrow", @@ -1258,7 +1243,7 @@ dependencies = [ "futures", "half", "hashbrown 0.14.5", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools", "log", "parking_lot", @@ -1269,7 +1254,7 @@ dependencies = [ [[package]] name = "datafusion-pruning" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "arrow-schema", @@ -1286,7 +1271,7 @@ dependencies = [ [[package]] name = "datafusion-session" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "async-trait", @@ -1309,13 +1294,13 @@ dependencies = [ [[package]] name = "datafusion-sql" version = "49.0.1" -source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#50edc43a4c09a7e546fb04c6cea77d25e05a8152" +source = "git+https://github.com/Canner/datafusion.git?branch=canner%2Fv49.0.1#afff2bb587eeb002737d05688b0c6d7548179edc" dependencies = [ "arrow", "bigdecimal", "datafusion-common", "datafusion-expr", - "indexmap 2.11.4", + "indexmap 2.12.0", "log", "recursive", "regex", @@ -1324,9 +1309,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", "serde_core", @@ -1368,9 +1353,9 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -1402,7 +1387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -1413,9 +1398,9 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "find-msvc-tools" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fixedbitset" @@ -1435,9 +1420,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "libz-rs-sys", @@ -1562,9 +1547,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -1579,28 +1564,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "wasip2", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "glob" version = "0.3.3" @@ -1609,13 +1588,14 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "half" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", "num-traits", + "zerocopy", ] [[package]] @@ -1704,9 +1684,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1717,9 +1697,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1730,11 +1710,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1745,42 +1724,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1828,9 +1803,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -1840,9 +1815,12 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "integer-encoding" @@ -1850,22 +1828,11 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags", - "cfg-if", - "libc", -] - [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -1912,15 +1879,15 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -1991,9 +1958,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.176" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libm" @@ -2018,17 +1985,16 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -2090,17 +2056,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "simd-adler32", ] [[package]] @@ -2185,9 +2141,9 @@ dependencies = [ [[package]] name = "object" -version = "0.37.3" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -2224,9 +2180,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "ordered-float" @@ -2239,9 +2195,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -2249,15 +2205,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -2317,7 +2273,7 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", ] @@ -2384,9 +2340,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -2417,19 +2373,20 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" +checksum = "d11f2fedc3b7dafdc2851bc52f277377c5473d378859be234bc7ebb593144d01" dependencies = [ + "ar_archive_writer", "cc", ] @@ -2545,7 +2502,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -2570,9 +2527,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] @@ -2599,9 +2556,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.3" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -2611,9 +2568,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -2622,9 +2579,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "relative-path" @@ -2676,12 +2633,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc_version" version = "0.4.1" @@ -2701,7 +2652,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -2812,19 +2763,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.1" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.12.0", "schemars 0.9.0", "schemars 1.0.4", - "serde", - "serde_derive", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -2832,9 +2782,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.1" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ "darling", "proc-macro2", @@ -2859,6 +2809,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "simdutf8" version = "0.1.5" @@ -2924,15 +2880,15 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cddb07e32ddb770749da91081d8d0ac3a16f1a569a18b20348cd371f5dead06b" +checksum = "e1f8b29fb42aafcea4edeeb6b2f2d7ecd0d969c48b4cf0d2e64aafc471dd6e59" dependencies = [ "cc", "cfg-if", @@ -2955,9 +2911,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.106" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -2994,10 +2950,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -3073,9 +3029,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -3083,25 +3039,20 @@ dependencies = [ [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", - "libc", - "mio", "pin-project-lite", - "slab", "tokio-macros", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", @@ -3123,20 +3074,20 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.6" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "toml_datetime", "toml_parser", "winnow", @@ -3144,9 +3095,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow", ] @@ -3196,9 +3147,9 @@ checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-segmentation" @@ -3208,9 +3159,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unindent" @@ -3254,7 +3205,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -3281,15 +3232,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -3301,9 +3243,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -3312,25 +3254,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -3341,9 +3269,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3351,31 +3279,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -3397,14 +3325,14 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "windows-core" -version = "0.62.1" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", @@ -3415,9 +3343,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.1" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -3426,9 +3354,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.2" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -3437,24 +3365,24 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] @@ -3483,14 +3411,14 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.4", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] @@ -3513,19 +3441,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -3536,9 +3464,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -3548,9 +3476,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -3560,9 +3488,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -3572,9 +3500,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -3584,9 +3512,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -3596,9 +3524,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -3608,9 +3536,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -3620,9 +3548,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -3701,9 +3629,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "xz2" @@ -3716,11 +3644,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -3728,9 +3655,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", @@ -3781,9 +3708,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -3792,9 +3719,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -3803,9 +3730,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", diff --git a/wren-core/core/src/mdl/dialect/inner_dialect.rs b/wren-core/core/src/mdl/dialect/inner_dialect.rs index 872dbf27e..91d47f3fc 100644 --- a/wren-core/core/src/mdl/dialect/inner_dialect.rs +++ b/wren-core/core/src/mdl/dialect/inner_dialect.rs @@ -21,12 +21,15 @@ use crate::mdl::dialect::utils::scalar_function_to_sql_internal; use crate::mdl::manifest::DataSource; use datafusion::common::{plan_err, Result}; use datafusion::logical_expr::sqlparser::keywords::ALL_KEYWORDS; -use datafusion::logical_expr::Expr; +use datafusion::logical_expr::{Expr, LogicalPlan}; use datafusion::scalar::ScalarValue; use datafusion::sql::sqlparser::ast::{ self, ExtractSyntax, Function, Ident, ObjectName, ObjectNamePart, WindowFrameBound, }; +use datafusion::sql::unparser::ast::{ + RelationBuilder, TableFactorBuilder, TableFunctionRelationBuilder, +}; use datafusion::sql::unparser::Unparser; use regex::Regex; @@ -68,6 +71,23 @@ pub trait InnerDialect: Send + Sync { fn to_unicode_string_literal(&self, _s: &str) -> Option { None } + + fn unparse_unnest_table_factor( + &self, + _unnest: &datafusion::logical_expr::Unnest, + _columns: &[ast::Ident], + _unparser: &Unparser, + ) -> Result> { + Ok(None) + } + + fn relation_alias_overrides( + &self, + _relation_builder: &mut datafusion::sql::unparser::ast::RelationBuilder, + _alias: Option<&ast::TableAlias>, + ) -> bool { + false + } } /// [get_inner_dialect] returns the suitable InnerDialect for the given data source. @@ -77,6 +97,7 @@ pub fn get_inner_dialect(data_source: &DataSource) -> Box { DataSource::BigQuery => Box::new(BigQueryDialect {}), DataSource::Oracle => Box::new(OracleDialect {}), DataSource::MSSQL => Box::new(MsSqlDialect {}), + DataSource::Snowflake => Box::new(SnowflakeDialect {}), _ => Box::new(GenericDialect {}), } } @@ -326,3 +347,131 @@ impl InnerDialect for MsSqlDialect { } } } + +pub static UNNAMED_SNOWFLAKE_FLATTEN_SUBQUERY_PREFIX: &str = "__unnamed_flatten_subquery"; + +pub struct SnowflakeDialect {} + +impl InnerDialect for SnowflakeDialect { + fn unnest_as_table_factor(&self) -> bool { + true + } + + fn unparse_unnest_table_factor( + &self, + unnest: &datafusion::logical_expr::Unnest, + columns: &[ast::Ident], + unparser: &Unparser, + ) -> Result> { + let LogicalPlan::Projection(projection) = unnest.input.as_ref() else { + return Ok(None); + }; + + if !matches!(projection.input.as_ref(), LogicalPlan::EmptyRelation(_)) { + // It may be possible that UNNEST is used as a source for the query. + // However, at this point, we don't yet know if it is just a single expression + // from another source or if it's from UNNEST. + // + // Unnest(Projection(EmptyRelation)) denotes a case with `UNNEST([...])`, + // which is normally safe to unnest as a table factor. + // However, in the future, more comprehensive checks can be added here. + return Ok(None); + }; + + let mut table_function_relation = TableFunctionRelationBuilder::default(); + let exprs = projection + .expr + .iter() + .map(|e| unparser.expr_to_sql(e)) + .collect::>>()?; + + if exprs.len() != 1 { + // Snowflake FLATTEN function only supports a single argument. + return plan_err!( + "Only support one argument for Snowflake FLATTEN, found {}", + exprs.len() + ); + } + + if columns.len() != 1 { + // Snowflake FLATTEN function only supports a single output column. + return plan_err!( + "Only support one output column for Snowflake FLATTEN, found {}", + columns.len() + ); + } + + // To get the flattened result, we need to override the output columns of the FLATTEN function. + // The 4th column corresponds to the flattened value, which we will alias to the desired output column name. + // https://docs.snowflake.com/en/sql-reference/functions/flatten#output + let column_alias = vec![ + unparser.new_ident_quoted_if_needs("SEQ".to_string()), + unparser.new_ident_quoted_if_needs("KEY".to_string()), + unparser.new_ident_quoted_if_needs("PATH".to_string()), + unparser.new_ident_quoted_if_needs("INDEX".to_string()), + columns[0].clone(), + unparser.new_ident_quoted_if_needs("THIS".to_string()), + ]; + + let func_expr = ast::Expr::Function(Function { + name: vec![Ident::new("FLATTEN")].into(), + uses_odbc_syntax: false, + parameters: ast::FunctionArguments::None, + args: ast::FunctionArguments::List(ast::FunctionArgumentList { + args: exprs + .into_iter() + .map(|e| ast::FunctionArg::Unnamed(ast::FunctionArgExpr::Expr(e))) + .collect(), + duplicate_treatment: None, + clauses: vec![], + }), + filter: None, + null_treatment: None, + over: None, + within_group: vec![], + }); + table_function_relation.expr(func_expr); + table_function_relation.alias(Some( + unparser.new_table_alias( + unparser + .alias_generator + .next(UNNAMED_SNOWFLAKE_FLATTEN_SUBQUERY_PREFIX), + column_alias, + ), + )); + Ok(Some(TableFactorBuilder::TableFunction( + table_function_relation, + ))) + } + + fn relation_alias_overrides( + &self, + relation_builder: &mut RelationBuilder, + alias: Option<&ast::TableAlias>, + ) -> bool { + if let Some(TableFactorBuilder::TableFunction(rel_builder)) = + relation_builder.relation.as_mut() + { + if let Some(value) = &alias { + if let Some(alias) = rel_builder.alias.as_mut() { + if alias + .name + .value + .starts_with(UNNAMED_SNOWFLAKE_FLATTEN_SUBQUERY_PREFIX) + && value.columns.len() == 1 + { + let mut new_columns = alias.columns.clone(); + new_columns[4] = value.columns[0].clone(); + let new_alias = ast::TableAlias { + name: value.name.clone(), + columns: new_columns, + }; + rel_builder.alias = Some(new_alias); + return true; + } + } + } + } + false + } +} diff --git a/wren-core/core/src/mdl/dialect/wren_dialect.rs b/wren-core/core/src/mdl/dialect/wren_dialect.rs index c63077d0f..4f7e2ab68 100644 --- a/wren-core/core/src/mdl/dialect/wren_dialect.rs +++ b/wren-core/core/src/mdl/dialect/wren_dialect.rs @@ -100,6 +100,25 @@ impl Dialect for WrenDialect { fn to_unicode_string_literal(&self, s: &str) -> Option { self.inner_dialect.to_unicode_string_literal(s) } + + fn unparse_unnest_table_factor( + &self, + _unnest: &datafusion::logical_expr::Unnest, + _columns: &[ast::Ident], + _unparser: &Unparser, + ) -> Result> { + self.inner_dialect + .unparse_unnest_table_factor(_unnest, _columns, _unparser) + } + + fn relation_alias_overrides( + &self, + _relation_builder: &mut datafusion::sql::unparser::ast::RelationBuilder, + _alias: Option<&ast::TableAlias>, + ) -> bool { + self.inner_dialect + .relation_alias_overrides(_relation_builder, _alias) + } } impl Default for WrenDialect { diff --git a/wren-core/core/src/mdl/mod.rs b/wren-core/core/src/mdl/mod.rs index 6ed9c2870..df215b3e1 100644 --- a/wren-core/core/src/mdl/mod.rs +++ b/wren-core/core/src/mdl/mod.rs @@ -3811,6 +3811,34 @@ mod test { Ok(()) } + #[tokio::test] + async fn test_snowflake_unnest() -> Result<()> { + let ctx = create_wren_ctx(None); + let manifest = ManifestBuilder::new() + .catalog("wren") + .schema("test") + .model( + ModelBuilder::new("orders") + .table_reference("orders") + .column(ColumnBuilder::new("o_items", "array").build()) + .build(), + ) + .data_source(DataSource::Snowflake) + .build(); + let analyzed_mdl = Arc::new(AnalyzedWrenMDL::analyze( + manifest, + Arc::new(HashMap::default()), + Mode::Unparse, + )?); + let headers = Arc::new(HashMap::default()); + let sql = "SELECT item FROM orders o, unnest(o.o_items) as t(item)"; + assert_snapshot!( + transform_sql_with_ctx(&ctx, Arc::clone(&analyzed_mdl), &[], Arc::clone(&headers), sql).await?, + @r#"SELECT t.item FROM (SELECT orders.o_items FROM (SELECT __source.o_items AS o_items FROM orders AS __source) AS orders) AS o CROSS JOIN TABLE(FLATTEN(o.o_items)) AS t ("SEQ", "KEY", "PATH", "INDEX", item, "THIS")"# + ); + Ok(()) + } + /// Return a RecordBatch with made up data about customer fn customer() -> RecordBatch { let custkey: ArrayRef = Arc::new(Int64Array::from(vec![1, 2, 3]));