snowflake-snowpark-python 1.53.0__tar.gz → 1.54.0__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.
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/CHANGELOG.md +31 -1
- {snowflake_snowpark_python-1.53.0/src/snowflake_snowpark_python.egg-info → snowflake_snowpark_python-1.54.0}/PKG-INFO +1 -1
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/analyzer_utils.py +17 -72
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/expression.py +11 -2
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/select_statement.py +0 -13
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +1 -8
- snowflake_snowpark_python-1.54.0/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +609 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.pyi +216 -22
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/utils.py +67 -24
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/column.py +11 -2
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_ai_functions.py +372 -38
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_reader.py +77 -23
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/functions.py +564 -124
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/query_history.py +95 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/relational_grouped_dataframe.py +0 -2
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/session.py +18 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/table.py +4 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/version.py +1 -1
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0/src/snowflake_snowpark_python.egg-info}/PKG-INFO +1 -1
- snowflake_snowpark_python-1.53.0/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +0 -603
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/LICENSE.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/MANIFEST.in +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/README.md +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/pyproject.toml +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/setup.cfg +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/setup.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_functions/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_functions/general_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_functions/scalar_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/analyzer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/binary_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/binary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/grouping_set.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/metadata_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/query_plan_analysis_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/schema_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan_node.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/sort_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/table_function.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/table_merge_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/unary_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/unary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/window_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/batch.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/builder.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/code_generation.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/cte_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/large_query_breakdown.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/plan_compiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/query_generator.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/repeated_subquery_elimination.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/telemetry_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/datasource_partitioner.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/datasource_reader.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/datasource_typing.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/base_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/databricks_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/mysql_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/oracledb_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/postgresql_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlite3_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlserver_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/base_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/databricks_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/oracledb_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/psycopg2_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/pymsql_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/pyodbc_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/sqlite_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/jdbc.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/debug_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/error_message.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/event_table_telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/open_telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/packaging_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/proto/generated/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/select_projection_complexity_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/server_connection.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/snowpark_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/temp_table_auto_cleaner.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/type_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/udf_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/xml_reader.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/xml_schema_inference.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/xpath_handlers.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/async_job.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/catalog.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/context.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_analytics_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_na_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_stat_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_writer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/exceptions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/file_operation.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/files.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/lineage.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_analyzer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_connection.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_nop_analyzer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_nop_connection.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_nop_plan.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_options.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_pandas_util.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_plan.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_plan_builder.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_select_statement.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_snowflake_data_type.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_snowflake_to_pandas_converter.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_stage_registry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_stored_procedure.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udaf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udf_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udtf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_util.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_window_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/exceptions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/__main__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/envvars.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/pubsub.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/conftest.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/aggregation_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/align_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/binary_op_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/concat_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/cumulative_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/cut_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/frame.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/generator_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/get_dummies_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/groupby_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/indexing_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/io_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/isin_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/join_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/ordered_dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/pivot_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/resample_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/row_count_estimation.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/session.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/snowpark_pandas_types.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/statement_params_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/timestamp_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/transpose_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/type_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/unpivot_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/where_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/window_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_typing.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/doc_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/ray_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/snowflake_query_compiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/base.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/general.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/groupby.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/io.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/resample.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/series.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/series_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/shared_docs.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/window.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/base_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_extensions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/general_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/indexing_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/io_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/pd_extensions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/resample_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/resampler_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/rolling_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/series_extensions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/series_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/series_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/snow_partition_iterator.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/window_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/io/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/io/factories.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/io/snow_io.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/error_message.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/exceptions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/frontend_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/numpy_to_pandas.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/warning_message.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/py.typed +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/row.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/secrets.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/stored_procedure.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/stored_procedure_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/table_function.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/testing.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/types.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udaf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udf_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udtf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/window.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/SOURCES.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/dependency_links.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/namespace_packages.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/not-zip-safe +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/requires.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/top_level.txt +0 -0
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
## 1.54.0 (2026-07-29)
|
|
4
|
+
|
|
5
|
+
### Snowpark Python API updates
|
|
6
|
+
|
|
7
|
+
#### New Features
|
|
8
|
+
|
|
9
|
+
- Added `ai_count_tokens` function to `snowflake.snowpark.functions` to estimate token counts for AI function calls.
|
|
10
|
+
- Added `ai_multi_embed` function to `snowflake.snowpark.functions` to generate multimodal embeddings from text, images, audio, or video files.
|
|
11
|
+
- Added `ai_redact` function to `snowflake.snowpark.functions` to detect and redact personally identifiable information (PII) from text.
|
|
12
|
+
- Added `DataFrame.ai.multi_embed` method to generate multimodal embeddings via the DataFrame API.
|
|
13
|
+
- Added `DataFrame.ai.redact` method to detect and redact PII from text columns via the DataFrame API.
|
|
14
|
+
- Added `DataFrame.ai.translate` method to translate text columns between languages via the DataFrame API.
|
|
15
|
+
|
|
16
|
+
#### Improvements
|
|
17
|
+
|
|
18
|
+
- Removed the `experimental` tag from all AI SQL functions in `DataFrameAIFunctions` (`complete`, `filter`, `agg`, `classify`, `similarity`, `sentiment`, `embed`, `summarize_agg`, `transcribe`, `parse_document`, `extract`, `count_tokens`, `split_text_markdown_header`, `split_text_recursive_character`) and `RelationalGroupedDataFrame.ai_agg`.
|
|
19
|
+
- Updated `DataFrame.ai.count_tokens` to match the standalone `ai_count_tokens` function: `function_name` is now the required first parameter, and `model` is optional. Also added `options` and `return_error_details` parameters.
|
|
20
|
+
|
|
21
|
+
#### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- Fixed `DataFrame.ai.count_tokens` to call the `AI_COUNT_TOKENS` SQL function instead of the deprecated `SNOWFLAKE.CORTEX.COUNT_TOKENS`. Token counts may differ slightly due to the updated tokenizer.
|
|
24
|
+
- Reverted the change introduced in 1.53.0 to eliminate unnecessary `SELECT *` from joins, which was causing performance regressions. This has no functional impact.
|
|
25
|
+
|
|
26
|
+
## 1.53.1 (2026-07-14)
|
|
27
|
+
|
|
28
|
+
No user-facing changes in this release.
|
|
29
|
+
|
|
3
30
|
## 1.53.0 (2026-07-09)
|
|
4
31
|
|
|
5
32
|
### Snowpark Python API Updates
|
|
@@ -19,6 +46,10 @@
|
|
|
19
46
|
- Fixed a bug where single quotes and backslashes in `comment` (`create_or_replace_view` / dynamic table / `save_as_table`), collation specs (`Column.collate`), VARIANT/OBJECT subfield keys (`Column[...]`), and `DataFrame`/`Session.flatten` paths were not correctly escaped when generating SQL, which could produce malformed statements. Backslash sequences (e.g. `\t`, `\n`) in these values are now applied literally rather than interpreted.
|
|
20
47
|
- Fixed a bug where string values in the AI functions (`ai_extract`, `ai_classify`, `ai_similarity`, `ai_parse_document`, `ai_transcribe`, `ai_complete`) configuration and `response_format` were not correctly escaped when generating the SQL object literal, which could produce malformed statements when a value contained single quotes or backslashes (for example, an apostrophe in a natural-language question).
|
|
21
48
|
|
|
49
|
+
#### Improvements
|
|
50
|
+
|
|
51
|
+
- Reduced the size of generated query text for repeated join operations.
|
|
52
|
+
|
|
22
53
|
#### Dependency Updates
|
|
23
54
|
|
|
24
55
|
- Lifted `protobuf` restriction for Python 3.14 from `==5.29.3` to `>=5.29.3,<6.34`.
|
|
@@ -41,7 +72,6 @@
|
|
|
41
72
|
#### Improvements
|
|
42
73
|
|
|
43
74
|
- Improved CTE optimization to deduplicate identical subtrees in self-joins, which were previously emitted as repeated subqueries.
|
|
44
|
-
- Reduced the size of generated query text for repeated join operations.
|
|
45
75
|
|
|
46
76
|
#### Deprecations
|
|
47
77
|
|
|
@@ -990,33 +990,6 @@ def lateral_join_statement(
|
|
|
990
990
|
)
|
|
991
991
|
|
|
992
992
|
|
|
993
|
-
_SELECT_STAR_FROM_PREFIX = SELECT + STAR + NEW_LINE + FROM + LEFT_PARENTHESIS + NEW_LINE
|
|
994
|
-
_SELECT_STAR_FROM_SUFFIX = NEW_LINE + RIGHT_PARENTHESIS
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
def _unwrap_select_star_from(sql: str) -> Optional[str]:
|
|
998
|
-
"""If sql is a join-produced `SELECT * FROM (\n<join_source>\n)` (the
|
|
999
|
-
output of project_statement([], join_source)), return <join_source>.
|
|
1000
|
-
Only unwraps when the inner content starts with '(' (possibly preceded
|
|
1001
|
-
by UUID trace comments) which indicates a parenthesized join operand
|
|
1002
|
-
rather than a wrapped SELECT statement."""
|
|
1003
|
-
if sql.startswith(_SELECT_STAR_FROM_PREFIX) and sql.endswith(
|
|
1004
|
-
_SELECT_STAR_FROM_SUFFIX
|
|
1005
|
-
):
|
|
1006
|
-
inner = sql[len(_SELECT_STAR_FROM_PREFIX) : -len(_SELECT_STAR_FROM_SUFFIX)]
|
|
1007
|
-
# In trace-SQL mode, UUID comments (\n-- <uuid>\n) may precede the
|
|
1008
|
-
# opening parenthesis. Strip them before checking.
|
|
1009
|
-
check = inner.lstrip("\n")
|
|
1010
|
-
if check.startswith("--"):
|
|
1011
|
-
# Skip the comment line and any trailing newline
|
|
1012
|
-
newline_pos = check.find("\n")
|
|
1013
|
-
if newline_pos != -1:
|
|
1014
|
-
check = check[newline_pos + 1 :]
|
|
1015
|
-
if check.startswith(LEFT_PARENTHESIS) or inner.startswith(LEFT_PARENTHESIS):
|
|
1016
|
-
return inner
|
|
1017
|
-
return None
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
993
|
def snowflake_supported_join_statement(
|
|
1021
994
|
left: str,
|
|
1022
995
|
right: str,
|
|
@@ -1027,30 +1000,17 @@ def snowflake_supported_join_statement(
|
|
|
1027
1000
|
left_uuid: Optional[str] = None,
|
|
1028
1001
|
right_uuid: Optional[str] = None,
|
|
1029
1002
|
directed: bool = False,
|
|
1030
|
-
left_is_join: bool = False,
|
|
1031
1003
|
) -> str:
|
|
1032
1004
|
LEFT_UUID = format_uuid(left_uuid)
|
|
1033
1005
|
RIGHT_UUID = format_uuid(right_uuid)
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
#
|
|
1040
|
-
# Though it is technically less efficient than constructing the join sub-queries
|
|
1041
|
-
# without the SELECT in the first place, the structure of our SQL processing code
|
|
1042
|
-
# needs top-level projections to be wrapped by a select to be well-formed, so we
|
|
1043
|
-
# must strip it here instead.
|
|
1044
|
-
#
|
|
1045
|
-
# We only unwrap the left side because it is simpler to deal with than unwrapping
|
|
1046
|
-
# both left and right, and left-deep chains are more common, as they're produced
|
|
1047
|
-
# by calls like df1.join(df2).join(df3) etc.
|
|
1048
|
-
unwrapped_left = _unwrap_select_star_from(left) if left_is_join else None
|
|
1006
|
+
left_alias = (
|
|
1007
|
+
"SNOWPARK_LEFT"
|
|
1008
|
+
if use_constant_subquery_alias
|
|
1009
|
+
else random_name_for_temp_object(TempObjectType.TABLE)
|
|
1010
|
+
)
|
|
1049
1011
|
right_alias = (
|
|
1050
1012
|
"SNOWPARK_RIGHT"
|
|
1051
|
-
if use_constant_subquery_alias
|
|
1052
|
-
# Multi-way join: right alias must be unique to avoid collisions
|
|
1053
|
-
# with aliases already present in the flattened join source.
|
|
1013
|
+
if use_constant_subquery_alias
|
|
1054
1014
|
else random_name_for_temp_object(TempObjectType.TABLE)
|
|
1055
1015
|
)
|
|
1056
1016
|
|
|
@@ -1086,31 +1046,18 @@ def snowflake_supported_join_statement(
|
|
|
1086
1046
|
|
|
1087
1047
|
maybe_directed_sql = DIRECTED_JOIN if directed else JOIN
|
|
1088
1048
|
|
|
1089
|
-
if unwrapped_left is not None:
|
|
1090
|
-
# No need for additional parentheses around the left expression here, since it
|
|
1091
|
-
# should already be parenthesized
|
|
1092
|
-
left_expr = LEFT_UUID + unwrapped_left + NEW_LINE + LEFT_UUID
|
|
1093
|
-
else:
|
|
1094
|
-
left_alias = (
|
|
1095
|
-
"SNOWPARK_LEFT"
|
|
1096
|
-
if use_constant_subquery_alias
|
|
1097
|
-
else random_name_for_temp_object(TempObjectType.TABLE)
|
|
1098
|
-
)
|
|
1099
|
-
left_expr = (
|
|
1100
|
-
LEFT_PARENTHESIS
|
|
1101
|
-
+ NEW_LINE
|
|
1102
|
-
+ LEFT_UUID
|
|
1103
|
-
+ left
|
|
1104
|
-
+ NEW_LINE
|
|
1105
|
-
+ LEFT_UUID
|
|
1106
|
-
+ RIGHT_PARENTHESIS
|
|
1107
|
-
+ AS
|
|
1108
|
-
+ left_alias
|
|
1109
|
-
+ SPACE
|
|
1110
|
-
+ NEW_LINE
|
|
1111
|
-
)
|
|
1112
1049
|
source = (
|
|
1113
|
-
|
|
1050
|
+
LEFT_PARENTHESIS
|
|
1051
|
+
+ NEW_LINE
|
|
1052
|
+
+ LEFT_UUID
|
|
1053
|
+
+ left
|
|
1054
|
+
+ NEW_LINE
|
|
1055
|
+
+ LEFT_UUID
|
|
1056
|
+
+ RIGHT_PARENTHESIS
|
|
1057
|
+
+ AS
|
|
1058
|
+
+ left_alias
|
|
1059
|
+
+ SPACE
|
|
1060
|
+
+ NEW_LINE
|
|
1114
1061
|
+ join_sql
|
|
1115
1062
|
+ maybe_directed_sql
|
|
1116
1063
|
+ NEW_LINE
|
|
@@ -1142,7 +1089,6 @@ def join_statement(
|
|
|
1142
1089
|
left_uuid: Optional[str] = None,
|
|
1143
1090
|
right_uuid: Optional[str] = None,
|
|
1144
1091
|
directed: bool = False,
|
|
1145
|
-
left_is_join: bool = False,
|
|
1146
1092
|
) -> str:
|
|
1147
1093
|
if isinstance(join_type, (LeftSemi, LeftAnti)):
|
|
1148
1094
|
return left_semi_or_anti_join_statement(
|
|
@@ -1170,7 +1116,6 @@ def join_statement(
|
|
|
1170
1116
|
left_uuid=left_uuid,
|
|
1171
1117
|
right_uuid=right_uuid,
|
|
1172
1118
|
directed=directed,
|
|
1173
|
-
left_is_join=left_is_join,
|
|
1174
1119
|
)
|
|
1175
1120
|
|
|
1176
1121
|
|
|
@@ -295,13 +295,22 @@ class Star(Expression):
|
|
|
295
295
|
|
|
296
296
|
class UnresolvedAttribute(Expression, NamedExpression):
|
|
297
297
|
def __init__(
|
|
298
|
-
self,
|
|
298
|
+
self,
|
|
299
|
+
name: str,
|
|
300
|
+
is_sql_text: bool = False,
|
|
301
|
+
df_alias: Optional[str] = None,
|
|
302
|
+
is_constant: bool = False,
|
|
299
303
|
) -> None:
|
|
300
304
|
super().__init__()
|
|
301
305
|
self.df_alias = df_alias
|
|
302
306
|
self.name = name
|
|
303
307
|
self.is_sql_text = is_sql_text
|
|
304
|
-
|
|
308
|
+
self.is_constant = is_constant
|
|
309
|
+
if is_constant:
|
|
310
|
+
# Constant SQL text (e.g. object/array literals) does not reference
|
|
311
|
+
# any columns from the input relation.
|
|
312
|
+
self._dependent_column_names = COLUMN_DEPENDENCY_EMPTY
|
|
313
|
+
elif "$" in name:
|
|
305
314
|
# $n refers to a column by index. We don't consider column index yet.
|
|
306
315
|
# even though "$" isn't necessarily used to refer to a column by index. We're conservative here.
|
|
307
316
|
self._dependent_column_names = COLUMN_DEPENDENCY_DOLLAR
|
|
@@ -445,19 +445,6 @@ class Selectable(LogicalPlan, ABC):
|
|
|
445
445
|
# Add the last df ast id to the snowflake plan as the most recent
|
|
446
446
|
# dataframe operation to create this plan.
|
|
447
447
|
self._snowflake_plan.df_ast_ids = self.df_ast_ids
|
|
448
|
-
# Propagate join output flag through passthrough SelectStatements
|
|
449
|
-
# so chained joins can flatten into multi-way joins.
|
|
450
|
-
# Only SelectStatement has has_clause/has_projection; other
|
|
451
|
-
# Selectable subclasses (SelectSQL, SetStatement, etc.) skip this.
|
|
452
|
-
if (
|
|
453
|
-
isinstance(self, SelectStatement)
|
|
454
|
-
and not self.has_clause
|
|
455
|
-
and not self.has_projection
|
|
456
|
-
and isinstance(self.from_, SelectSnowflakePlan)
|
|
457
|
-
):
|
|
458
|
-
self._snowflake_plan._is_join_output = (
|
|
459
|
-
self.from_._snowflake_plan._is_join_output
|
|
460
|
-
)
|
|
461
448
|
return self._snowflake_plan
|
|
462
449
|
|
|
463
450
|
@property
|
|
@@ -458,7 +458,6 @@ class SnowflakePlan(LogicalPlan):
|
|
|
458
458
|
self.session = session
|
|
459
459
|
self.source_plan = source_plan
|
|
460
460
|
self.is_ddl_on_temp_object = is_ddl_on_temp_object
|
|
461
|
-
self._is_join_output = False
|
|
462
461
|
# We need to copy this list since we don't want to change it for the
|
|
463
462
|
# previous SnowflakePlan objects
|
|
464
463
|
self.api_calls = api_calls.copy() if api_calls else []
|
|
@@ -770,7 +769,6 @@ class SnowflakePlan(LogicalPlan):
|
|
|
770
769
|
referenced_ctes=self.referenced_ctes,
|
|
771
770
|
)
|
|
772
771
|
plan.df_ast_ids = self.df_ast_ids
|
|
773
|
-
plan._is_join_output = self._is_join_output
|
|
774
772
|
return plan
|
|
775
773
|
|
|
776
774
|
def __deepcopy__(self, memodict={}) -> "SnowflakePlan": # noqa: B006
|
|
@@ -810,7 +808,6 @@ class SnowflakePlan(LogicalPlan):
|
|
|
810
808
|
if copied_source_plan:
|
|
811
809
|
copied_source_plan._is_valid_for_replacement = True
|
|
812
810
|
copied_plan.df_ast_ids = self.df_ast_ids
|
|
813
|
-
copied_plan._is_join_output = self._is_join_output
|
|
814
811
|
|
|
815
812
|
return copied_plan
|
|
816
813
|
|
|
@@ -1239,8 +1236,7 @@ class SnowflakePlanBuilder:
|
|
|
1239
1236
|
use_constant_subquery_alias: bool,
|
|
1240
1237
|
directed: bool = False,
|
|
1241
1238
|
):
|
|
1242
|
-
|
|
1243
|
-
result = self.build_binary(
|
|
1239
|
+
return self.build_binary(
|
|
1244
1240
|
lambda x, y: join_statement(
|
|
1245
1241
|
x,
|
|
1246
1242
|
y,
|
|
@@ -1257,14 +1253,11 @@ class SnowflakePlanBuilder:
|
|
|
1257
1253
|
else None
|
|
1258
1254
|
),
|
|
1259
1255
|
directed=directed,
|
|
1260
|
-
left_is_join=left_is_join,
|
|
1261
1256
|
),
|
|
1262
1257
|
left,
|
|
1263
1258
|
right,
|
|
1264
1259
|
source_plan,
|
|
1265
1260
|
)
|
|
1266
|
-
result._is_join_output = True
|
|
1267
|
-
return result
|
|
1268
1261
|
|
|
1269
1262
|
def save_as_table(
|
|
1270
1263
|
self,
|