sqlframe 3.9.1__tar.gz → 3.9.2__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 (369) hide show
  1. {sqlframe-3.9.1 → sqlframe-3.9.2}/.github/workflows/publish.workflow.yaml +7 -4
  2. {sqlframe-3.9.1 → sqlframe-3.9.2}/PKG-INFO +1 -1
  3. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/_version.py +2 -2
  4. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/dataframe.py +24 -7
  5. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/PKG-INFO +1 -1
  6. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_dataframe.py +4 -3
  7. {sqlframe-3.9.1 → sqlframe-3.9.2}/.github/CODEOWNERS +0 -0
  8. {sqlframe-3.9.1 → sqlframe-3.9.2}/.github/workflows/main.workflow.yaml +0 -0
  9. {sqlframe-3.9.1 → sqlframe-3.9.2}/.gitignore +0 -0
  10. {sqlframe-3.9.1 → sqlframe-3.9.2}/.pre-commit-config.yaml +0 -0
  11. {sqlframe-3.9.1 → sqlframe-3.9.2}/.readthedocs.yaml +0 -0
  12. {sqlframe-3.9.1 → sqlframe-3.9.2}/LICENSE +0 -0
  13. {sqlframe-3.9.1 → sqlframe-3.9.2}/Makefile +0 -0
  14. {sqlframe-3.9.1 → sqlframe-3.9.2}/README.md +0 -0
  15. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/add_chatgpt_support.md +0 -0
  16. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  17. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  18. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  19. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  20. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  21. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  22. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  23. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  24. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/but_wait_theres_more.gif +0 -0
  25. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/cake.gif +0 -0
  26. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/you_get_pyspark_api.gif +0 -0
  27. {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  28. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/bigquery.md +0 -0
  29. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/configuration.md +0 -0
  30. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/databricks.md +0 -0
  31. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/bigquery.md +0 -0
  32. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/duckdb.md +0 -0
  33. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/SF.png +0 -0
  34. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/favicon.png +0 -0
  35. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/favicon_old.png +0 -0
  36. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/sqlframe_diagram.png +0 -0
  37. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/sqlframe_logo.png +0 -0
  38. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/postgres.md +0 -0
  39. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/duckdb.md +0 -0
  40. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/SF.png +0 -0
  41. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/favicon.png +0 -0
  42. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/favicon_old.png +0 -0
  43. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/sqlframe_diagram.png +0 -0
  44. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/sqlframe_logo.png +0 -0
  45. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/index.md +0 -0
  46. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/postgres.md +0 -0
  47. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/redshift.md +0 -0
  48. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/requirements.txt +0 -0
  49. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/snowflake.md +0 -0
  50. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/spark.md +0 -0
  51. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/standalone.md +0 -0
  52. {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/stylesheets/extra.css +0 -0
  53. {sqlframe-3.9.1 → sqlframe-3.9.2}/mkdocs.yml +0 -0
  54. {sqlframe-3.9.1 → sqlframe-3.9.2}/pytest.ini +0 -0
  55. {sqlframe-3.9.1 → sqlframe-3.9.2}/renovate.json +0 -0
  56. {sqlframe-3.9.1 → sqlframe-3.9.2}/setup.cfg +0 -0
  57. {sqlframe-3.9.1 → sqlframe-3.9.2}/setup.py +0 -0
  58. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/LICENSE +0 -0
  59. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/__init__.py +0 -0
  60. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/__init__.py +0 -0
  61. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/_typing.py +0 -0
  62. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/catalog.py +0 -0
  63. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/column.py +0 -0
  64. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/decorators.py +0 -0
  65. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/exceptions.py +0 -0
  66. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/function_alternatives.py +0 -0
  67. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/functions.py +0 -0
  68. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/group.py +0 -0
  69. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/__init__.py +0 -0
  70. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  71. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  72. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  73. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/normalize.py +0 -0
  74. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/operations.py +0 -0
  75. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/readerwriter.py +0 -0
  76. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/session.py +0 -0
  77. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/transforms.py +0 -0
  78. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/types.py +0 -0
  79. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/udf.py +0 -0
  80. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/util.py +0 -0
  81. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/window.py +0 -0
  82. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/__init__.py +0 -0
  83. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/catalog.py +0 -0
  84. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/column.py +0 -0
  85. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/dataframe.py +0 -0
  86. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/functions.py +0 -0
  87. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/functions.pyi +0 -0
  88. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/group.py +0 -0
  89. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/readwriter.py +0 -0
  90. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/session.py +0 -0
  91. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/types.py +0 -0
  92. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/udf.py +0 -0
  93. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/window.py +0 -0
  94. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/__init__.py +0 -0
  95. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/catalog.py +0 -0
  96. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/column.py +0 -0
  97. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/dataframe.py +0 -0
  98. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/functions.py +0 -0
  99. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/functions.pyi +0 -0
  100. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/group.py +0 -0
  101. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/readwriter.py +0 -0
  102. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/session.py +0 -0
  103. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/types.py +0 -0
  104. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/udf.py +0 -0
  105. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/window.py +0 -0
  106. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/__init__.py +0 -0
  107. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/catalog.py +0 -0
  108. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/column.py +0 -0
  109. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/dataframe.py +0 -0
  110. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/functions.py +0 -0
  111. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/functions.pyi +0 -0
  112. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/group.py +0 -0
  113. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/readwriter.py +0 -0
  114. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/session.py +0 -0
  115. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/types.py +0 -0
  116. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/udf.py +0 -0
  117. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/window.py +0 -0
  118. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/__init__.py +0 -0
  119. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/catalog.py +0 -0
  120. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/column.py +0 -0
  121. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/dataframe.py +0 -0
  122. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/functions.py +0 -0
  123. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/functions.pyi +0 -0
  124. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/group.py +0 -0
  125. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/readwriter.py +0 -0
  126. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/session.py +0 -0
  127. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/types.py +0 -0
  128. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/udf.py +0 -0
  129. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/window.py +0 -0
  130. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/__init__.py +0 -0
  131. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/catalog.py +0 -0
  132. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/column.py +0 -0
  133. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/dataframe.py +0 -0
  134. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/functions.py +0 -0
  135. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/group.py +0 -0
  136. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/readwriter.py +0 -0
  137. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/session.py +0 -0
  138. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/types.py +0 -0
  139. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/udf.py +0 -0
  140. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/window.py +0 -0
  141. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/__init__.py +0 -0
  142. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/catalog.py +0 -0
  143. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/column.py +0 -0
  144. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/dataframe.py +0 -0
  145. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/functions.py +0 -0
  146. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/functions.pyi +0 -0
  147. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/group.py +0 -0
  148. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/readwriter.py +0 -0
  149. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/session.py +0 -0
  150. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/types.py +0 -0
  151. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/udf.py +0 -0
  152. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/window.py +0 -0
  153. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/__init__.py +0 -0
  154. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/catalog.py +0 -0
  155. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/column.py +0 -0
  156. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/dataframe.py +0 -0
  157. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/functions.py +0 -0
  158. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/functions.pyi +0 -0
  159. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/group.py +0 -0
  160. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/readwriter.py +0 -0
  161. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/session.py +0 -0
  162. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/types.py +0 -0
  163. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/udf.py +0 -0
  164. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/window.py +0 -0
  165. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/__init__.py +0 -0
  166. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/catalog.py +0 -0
  167. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/column.py +0 -0
  168. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/dataframe.py +0 -0
  169. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/functions.py +0 -0
  170. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/group.py +0 -0
  171. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/readwriter.py +0 -0
  172. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/session.py +0 -0
  173. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/types.py +0 -0
  174. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/udf.py +0 -0
  175. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/window.py +0 -0
  176. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/testing/__init__.py +0 -0
  177. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/testing/utils.py +0 -0
  178. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/SOURCES.txt +0 -0
  179. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/dependency_links.txt +0 -0
  180. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/requires.txt +0 -0
  181. {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/top_level.txt +0 -0
  182. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/__init__.py +0 -0
  183. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/common_fixtures.py +0 -0
  184. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/conftest.py +0 -0
  185. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee.csv +0 -0
  186. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee.json +0 -0
  187. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee.parquet +0 -0
  188. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  189. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  190. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  191. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  192. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  193. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  194. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  195. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  196. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  197. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  198. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  199. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  200. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  201. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  202. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_extra_line.csv +0 -0
  203. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  204. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  205. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  206. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  207. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  208. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  209. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  210. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  211. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  212. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  213. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  214. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  215. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  216. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  217. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  218. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  219. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  220. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  221. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  222. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  223. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  224. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  225. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  226. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  227. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  228. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  229. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  230. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  231. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  232. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  233. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  234. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  235. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  236. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  237. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  238. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  239. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  240. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  241. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  242. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  243. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  244. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  245. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  246. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  247. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  248. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  249. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  250. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  251. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  252. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  253. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  254. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  255. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  256. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  257. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  258. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  259. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  260. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  261. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  262. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  263. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  264. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  265. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  266. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  267. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  268. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  269. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  270. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  271. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  272. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  273. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  274. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  275. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  276. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  277. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  278. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  279. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  280. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  281. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  282. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  283. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  284. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  285. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  286. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  287. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  288. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  289. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  290. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  291. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  292. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  293. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  294. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  295. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  296. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  297. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  298. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  299. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  300. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  301. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  302. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/__init__.py +0 -0
  303. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/__init__.py +0 -0
  304. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/__init__.py +0 -0
  305. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  306. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  307. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  308. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/__init__.py +0 -0
  309. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  310. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  311. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  312. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  313. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  314. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  315. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_tpcds.py +0 -0
  316. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/__init__.py +0 -0
  317. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  318. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  319. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  320. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  321. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/redshift/__init__.py +0 -0
  322. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  323. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  324. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/__init__.py +0 -0
  325. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  326. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  327. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  328. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/spark/__init__.py +0 -0
  329. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  330. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  331. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_column.py +0 -0
  332. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_dataframe.py +0 -0
  333. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_reader.py +0 -0
  334. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_session.py +0 -0
  335. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_writer.py +0 -0
  336. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_int_functions.py +0 -0
  337. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_int_testing.py +0 -0
  338. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/fixtures.py +0 -0
  339. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_dataframe_stats.py +0 -0
  340. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_grouped_data.py +0 -0
  341. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_session.py +0 -0
  342. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/types.py +0 -0
  343. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/__init__.py +0 -0
  344. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/bigquery/__init__.py +0 -0
  345. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/bigquery/test_activate.py +0 -0
  346. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/conftest.py +0 -0
  347. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/duck/__init__.py +0 -0
  348. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/duck/test_activate.py +0 -0
  349. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/postgres/__init__.py +0 -0
  350. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/postgres/test_activate.py +0 -0
  351. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/redshift/__init__.py +0 -0
  352. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/redshift/test_activate.py +0 -0
  353. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/snowflake/__init__.py +0 -0
  354. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/snowflake/test_activate.py +0 -0
  355. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/spark/__init__.py +0 -0
  356. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/spark/test_activate.py +0 -0
  357. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/__init__.py +0 -0
  358. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/fixtures.py +0 -0
  359. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_activate.py +0 -0
  360. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_column.py +0 -0
  361. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_dataframe.py +0 -0
  362. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  363. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_functions.py +0 -0
  364. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_session.py +0 -0
  365. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  366. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_types.py +0 -0
  367. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_window.py +0 -0
  368. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/test_activate.py +0 -0
  369. {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/test_util.py +0 -0
@@ -5,17 +5,20 @@ on:
5
5
  - 'v[0-9]+.[0-9]+.[0-9]+'
6
6
  permissions:
7
7
  contents: write
8
+ id-token: write
8
9
  jobs:
9
10
  deploy:
10
11
  runs-on: ubuntu-latest
11
- env:
12
- TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
13
- TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
12
+ environment:
13
+ name: publish
14
+ url: https://pypi.org/p/sqlframe
14
15
  steps:
15
16
  - name: Checkout
16
17
  uses: actions/checkout@v4
18
+ - name: Package
19
+ run: make package
17
20
  - name: Publish
18
- run: make publish
21
+ uses: pypa/gh-action-pypi-publish@release/v1
19
22
  - name: Create release
20
23
  env:
21
24
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.9.1
3
+ Version: 3.9.2
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.9.1'
16
- __version_tuple__ = version_tuple = (3, 9, 1)
15
+ __version__ = version = '3.9.2'
16
+ __version_tuple__ = version_tuple = (3, 9, 2)
@@ -12,6 +12,7 @@ import typing as t
12
12
  import zlib
13
13
  from copy import copy
14
14
  from dataclasses import dataclass
15
+ from uuid import uuid4
15
16
 
16
17
  import sqlglot
17
18
  from prettytable import PrettyTable
@@ -208,6 +209,8 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
208
209
  expression: exp.Select,
209
210
  branch_id: t.Optional[str] = None,
210
211
  sequence_id: t.Optional[str] = None,
212
+ join_on_uuid: t.Optional[str] = None,
213
+ known_uuids: t.Optional[t.Set[str]] = None,
211
214
  last_op: Operation = Operation.INIT,
212
215
  pending_hints: t.Optional[t.List[exp.Expression]] = None,
213
216
  output_expression_container: t.Optional[OutputExpressionContainer] = None,
@@ -217,6 +220,9 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
217
220
  self.expression: exp.Select = expression
218
221
  self.branch_id = branch_id or self.session._random_branch_id
219
222
  self.sequence_id = sequence_id or self.session._random_sequence_id
223
+ self.join_on_uuid = join_on_uuid or str(uuid4())
224
+ self.known_uuids = known_uuids or set()
225
+ self.known_uuids.add(self.join_on_uuid)
220
226
  self.last_op = last_op
221
227
  self.pending_hints = pending_hints or []
222
228
  self.output_expression_container = output_expression_container or exp.Select()
@@ -228,10 +234,12 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
228
234
  def __getitem__(self, column_name: str) -> Column:
229
235
  from sqlframe.base.util import get_func_from_session
230
236
 
231
- col = get_func_from_session("col", self.session)
237
+ col_func = get_func_from_session("col", self.session)
232
238
 
233
239
  column_name = f"{self.branch_id}.{column_name}"
234
- return col(column_name)
240
+ col = col_func(column_name)
241
+ col.expression.meta["join_on_uuid"] = self.join_on_uuid
242
+ return col
235
243
 
236
244
  def __copy__(self):
237
245
  return self.copy()
@@ -715,6 +723,7 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
715
723
  return ";\n".join(results)
716
724
 
717
725
  def copy(self, **kwargs) -> Self:
726
+ kwargs["join_on_uuid"] = str(uuid4())
718
727
  return self.__class__(**object_to_dict(self, **kwargs))
719
728
 
720
729
  @operation(Operation.SELECT)
@@ -876,13 +885,21 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
876
885
  self_columns = self._get_outer_select_columns(join_expression)
877
886
  other_columns = self._get_outer_select_columns(other_df.expression)
878
887
  join_columns = self._ensure_and_normalize_cols(on)
879
- # If the two dataframes being joined come from the same branch and reference the same table,
880
- # then really one of the tables was supposed to reference the other dataframe so we update it to do that.
888
+ # If the two dataframes being joined come from the same branch, we then check if they have any columns that
889
+ # were created using the "branch_id" (df["column_name"]). If so, we know that we need to differentiate
890
+ # the two columns since they would end up with the same table name. We do this by checking for the unique
891
+ # uuids in the other df and finding columns that have metadata on them that match the uuids. If so, we know
892
+ # it comes from the other df and we change the table name to the other df's table name.
893
+ # See `test_self_join` for an example of this.
881
894
  if self.branch_id == other_df.branch_id:
895
+ other_df_unique_uuids = other_df.known_uuids - self.known_uuids
882
896
  for col in join_columns:
883
- for eq in col.expression.find_all(exp.EQ):
884
- if eq.this.table == eq.expression.table:
885
- eq.expression.set("table", exp.to_identifier(other_df.latest_cte_name))
897
+ for col_expr in col.expression.find_all(exp.Column):
898
+ if (
899
+ "join_on_uuid" in col_expr.meta
900
+ and col_expr.meta["join_on_uuid"] in other_df_unique_uuids
901
+ ):
902
+ col_expr.set("table", exp.to_identifier(other_df.latest_cte_name))
886
903
  # Determines the join clause and select columns to be used passed on what type of columns were provided for
887
904
  # the join. The columns returned changes based on how the on expression is provided.
888
905
  if how != "cross":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.9.1
3
+ Version: 3.9.2
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -2250,6 +2250,7 @@ def test_chaining_joins_with_selects(
2250
2250
 
2251
2251
 
2252
2252
  # https://github.com/eakmanrq/sqlframe/issues/210
2253
+ # https://github.com/eakmanrq/sqlframe/issues/212
2253
2254
  def test_self_join(
2254
2255
  pyspark_employee: PySparkDataFrame,
2255
2256
  get_df: t.Callable[[str], _BaseDataFrame],
@@ -2263,16 +2264,16 @@ def test_self_join(
2263
2264
  df_filtered = pyspark_employee.where(F.col("age") > 40)
2264
2265
  df_joined = pyspark_employee.join(
2265
2266
  df_filtered,
2266
- pyspark_employee["employee_id"] == df_filtered["employee_id"],
2267
+ pyspark_employee["employee_id"].eqNullSafe(df_filtered["employee_id"]),
2267
2268
  how="inner",
2268
2269
  )
2269
2270
 
2270
2271
  employee = get_df("employee")
2271
2272
 
2272
- dfs_filtered = employee.where(SF.col("age") > 40)
2273
+ dfs_filtered = employee.alias("dfs_filtered").where(SF.col("age") > 40)
2273
2274
  dfs_joined = employee.join(
2274
2275
  dfs_filtered,
2275
- employee["employee_id"] == dfs_filtered["employee_id"],
2276
+ employee["employee_id"].eqNullSafe(dfs_filtered["employee_id"]),
2276
2277
  how="inner",
2277
2278
  )
2278
2279
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes