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.
Files changed (243) hide show
  1. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/CHANGELOG.md +31 -1
  2. {snowflake_snowpark_python-1.53.0/src/snowflake_snowpark_python.egg-info → snowflake_snowpark_python-1.54.0}/PKG-INFO +1 -1
  3. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/analyzer_utils.py +17 -72
  4. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/expression.py +11 -2
  5. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/select_statement.py +0 -13
  6. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +1 -8
  7. snowflake_snowpark_python-1.54.0/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +609 -0
  8. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.pyi +216 -22
  9. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/utils.py +67 -24
  10. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/column.py +11 -2
  11. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_ai_functions.py +372 -38
  12. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_reader.py +77 -23
  13. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/functions.py +564 -124
  14. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/query_history.py +95 -0
  15. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/relational_grouped_dataframe.py +0 -2
  16. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/session.py +18 -0
  17. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/table.py +4 -0
  18. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/version.py +1 -1
  19. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0/src/snowflake_snowpark_python.egg-info}/PKG-INFO +1 -1
  20. snowflake_snowpark_python-1.53.0/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +0 -603
  21. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/LICENSE.txt +0 -0
  22. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/MANIFEST.in +0 -0
  23. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/README.md +0 -0
  24. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/pyproject.toml +0 -0
  25. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/setup.cfg +0 -0
  26. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/setup.py +0 -0
  27. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/__init__.py +0 -0
  28. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_functions/__init__.py +0 -0
  29. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_functions/general_functions.py +0 -0
  30. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_functions/scalar_functions.py +0 -0
  31. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/__init__.py +0 -0
  32. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/__init__.py +0 -0
  33. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/analyzer.py +0 -0
  34. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/binary_expression.py +0 -0
  35. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/binary_plan_node.py +0 -0
  36. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +0 -0
  37. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/grouping_set.py +0 -0
  38. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/metadata_utils.py +0 -0
  39. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/query_plan_analysis_utils.py +0 -0
  40. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/schema_utils.py +0 -0
  41. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan_node.py +0 -0
  42. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/sort_expression.py +0 -0
  43. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/table_function.py +0 -0
  44. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/table_merge_expression.py +0 -0
  45. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/unary_expression.py +0 -0
  46. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/unary_plan_node.py +0 -0
  47. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/analyzer/window_expression.py +0 -0
  48. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/__init__.py +0 -0
  49. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/batch.py +0 -0
  50. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/builder.py +0 -0
  51. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/ast/utils.py +0 -0
  52. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/code_generation.py +0 -0
  53. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/__init__.py +0 -0
  54. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/cte_utils.py +0 -0
  55. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/large_query_breakdown.py +0 -0
  56. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/plan_compiler.py +0 -0
  57. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/query_generator.py +0 -0
  58. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/repeated_subquery_elimination.py +0 -0
  59. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/telemetry_constants.py +0 -0
  60. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/compiler/utils.py +0 -0
  61. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/__init__.py +0 -0
  62. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/datasource_partitioner.py +0 -0
  63. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/datasource_reader.py +0 -0
  64. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/datasource_typing.py +0 -0
  65. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/__init__.py +0 -0
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/__init__.py +0 -0
  74. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/base_driver.py +0 -0
  75. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/databricks_driver.py +0 -0
  76. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/oracledb_driver.py +0 -0
  77. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/psycopg2_driver.py +0 -0
  78. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/pymsql_driver.py +0 -0
  79. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/pyodbc_driver.py +0 -0
  80. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/drivers/sqlite_driver.py +0 -0
  81. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/jdbc.py +0 -0
  82. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/data_source/utils.py +0 -0
  83. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/debug_utils.py +0 -0
  84. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/error_message.py +0 -0
  85. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/event_table_telemetry.py +0 -0
  86. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/open_telemetry.py +0 -0
  87. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/packaging_utils.py +0 -0
  88. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/proto/generated/__init__.py +0 -0
  89. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/select_projection_complexity_utils.py +0 -0
  90. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/server_connection.py +0 -0
  91. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/snowpark_profiler.py +0 -0
  92. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/telemetry.py +0 -0
  93. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/temp_table_auto_cleaner.py +0 -0
  94. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/type_utils.py +0 -0
  95. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/udf_utils.py +0 -0
  96. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/xml_reader.py +0 -0
  97. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/xml_schema_inference.py +0 -0
  98. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/_internal/xpath_handlers.py +0 -0
  99. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/async_job.py +0 -0
  100. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/catalog.py +0 -0
  101. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/context.py +0 -0
  102. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe.py +0 -0
  103. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_analytics_functions.py +0 -0
  104. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_na_functions.py +0 -0
  105. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_profiler.py +0 -0
  106. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_stat_functions.py +0 -0
  107. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/dataframe_writer.py +0 -0
  108. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/exceptions.py +0 -0
  109. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/file_operation.py +0 -0
  110. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/files.py +0 -0
  111. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/lineage.py +0 -0
  112. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/__init__.py +0 -0
  113. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_analyzer.py +0 -0
  114. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_connection.py +0 -0
  115. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_constants.py +0 -0
  116. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_functions.py +0 -0
  117. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_nop_analyzer.py +0 -0
  118. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_nop_connection.py +0 -0
  119. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_nop_plan.py +0 -0
  120. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_options.py +0 -0
  121. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_pandas_util.py +0 -0
  122. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_plan.py +0 -0
  123. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_plan_builder.py +0 -0
  124. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_select_statement.py +0 -0
  125. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_snowflake_data_type.py +0 -0
  126. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_snowflake_to_pandas_converter.py +0 -0
  127. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_stage_registry.py +0 -0
  128. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_stored_procedure.py +0 -0
  129. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_telemetry.py +0 -0
  130. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udaf.py +0 -0
  131. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udf.py +0 -0
  132. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udf_utils.py +0 -0
  133. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_udtf.py +0 -0
  134. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_util.py +0 -0
  135. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/_window_utils.py +0 -0
  136. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/mock/exceptions.py +0 -0
  137. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/__init__.py +0 -0
  138. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/__init__.py +0 -0
  139. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/__main__.py +0 -0
  140. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/envvars.py +0 -0
  141. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/config/pubsub.py +0 -0
  142. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/conftest.py +0 -0
  143. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/__init__.py +0 -0
  144. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/__init__.py +0 -0
  145. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/aggregation_utils.py +0 -0
  146. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/align_utils.py +0 -0
  147. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py +0 -0
  148. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/binary_op_utils.py +0 -0
  149. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/concat_utils.py +0 -0
  150. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/cumulative_utils.py +0 -0
  151. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/cut_utils.py +0 -0
  152. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/frame.py +0 -0
  153. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/generator_utils.py +0 -0
  154. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/get_dummies_utils.py +0 -0
  155. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/groupby_utils.py +0 -0
  156. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/indexing_utils.py +0 -0
  157. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/io_utils.py +0 -0
  158. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/isin_utils.py +0 -0
  159. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/join_utils.py +0 -0
  160. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/ordered_dataframe.py +0 -0
  161. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/pivot_utils.py +0 -0
  162. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/resample_utils.py +0 -0
  163. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/row_count_estimation.py +0 -0
  164. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/session.py +0 -0
  165. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/snowpark_pandas_types.py +0 -0
  166. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/statement_params_constants.py +0 -0
  167. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/telemetry.py +0 -0
  168. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/timestamp_utils.py +0 -0
  169. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/transpose_utils.py +0 -0
  170. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/type_utils.py +0 -0
  171. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/unpivot_utils.py +0 -0
  172. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/utils.py +0 -0
  173. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/where_utils.py +0 -0
  174. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_internal/window_utils.py +0 -0
  175. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/_typing.py +0 -0
  176. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/__init__.py +0 -0
  177. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/doc_utils.py +0 -0
  178. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/ray_utils.py +0 -0
  179. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/compiler/snowflake_query_compiler.py +0 -0
  180. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/__init__.py +0 -0
  181. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/base.py +0 -0
  182. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/dataframe.py +0 -0
  183. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/datetime_index.py +0 -0
  184. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/general.py +0 -0
  185. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/groupby.py +0 -0
  186. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/index.py +0 -0
  187. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/io.py +0 -0
  188. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/resample.py +0 -0
  189. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/series.py +0 -0
  190. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/series_utils.py +0 -0
  191. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/shared_docs.py +0 -0
  192. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/timedelta_index.py +0 -0
  193. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/docstrings/window.py +0 -0
  194. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/__init__.py +0 -0
  195. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/base_overrides.py +0 -0
  196. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_extensions.py +0 -0
  197. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_groupby_overrides.py +0 -0
  198. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_overrides.py +0 -0
  199. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/datetime_index.py +0 -0
  200. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/general_overrides.py +0 -0
  201. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/index.py +0 -0
  202. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/indexing_overrides.py +0 -0
  203. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/io_overrides.py +0 -0
  204. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/pd_extensions.py +0 -0
  205. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/resample_overrides.py +0 -0
  206. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/resampler_groupby_overrides.py +0 -0
  207. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/rolling_groupby_overrides.py +0 -0
  208. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/series_extensions.py +0 -0
  209. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/series_groupby_overrides.py +0 -0
  210. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/series_overrides.py +0 -0
  211. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/snow_partition_iterator.py +0 -0
  212. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/timedelta_index.py +0 -0
  213. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/utils.py +0 -0
  214. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/extensions/window_overrides.py +0 -0
  215. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/io/__init__.py +0 -0
  216. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/io/factories.py +0 -0
  217. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/io/snow_io.py +0 -0
  218. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/__init__.py +0 -0
  219. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/error_message.py +0 -0
  220. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/exceptions.py +0 -0
  221. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/frontend_constants.py +0 -0
  222. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/numpy_to_pandas.py +0 -0
  223. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/plugin/utils/warning_message.py +0 -0
  224. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/modin/utils.py +0 -0
  225. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/py.typed +0 -0
  226. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/row.py +0 -0
  227. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/secrets.py +0 -0
  228. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/stored_procedure.py +0 -0
  229. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/stored_procedure_profiler.py +0 -0
  230. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/table_function.py +0 -0
  231. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/testing.py +0 -0
  232. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/types.py +0 -0
  233. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udaf.py +0 -0
  234. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udf.py +0 -0
  235. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udf_profiler.py +0 -0
  236. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/udtf.py +0 -0
  237. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake/snowpark/window.py +0 -0
  238. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/SOURCES.txt +0 -0
  239. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/dependency_links.txt +0 -0
  240. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/namespace_packages.txt +0 -0
  241. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/not-zip-safe +0 -0
  242. {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.54.0}/src/snowflake_snowpark_python.egg-info/requires.txt +0 -0
  243. {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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-snowpark-python
3
- Version: 1.53.0
3
+ Version: 1.54.0
4
4
  Summary: Snowflake Snowpark for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -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
- # If left is the output of a previous join, flatten into a multi-way join
1036
- # by unwrapping the SELECT * FROM (...) envelope and appending the new
1037
- # right operand directly to the existing join source. This avoids nested
1038
- # SELECT * layers that inflate query text without changing semantics.
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 and unwrapped_left is None
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
- left_expr
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, name: str, is_sql_text: bool = False, df_alias: Optional[str] = None
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
- if "$" in name:
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
- left_is_join = left._is_join_output
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,