sqlframe 3.39.3__tar.gz → 3.40.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 (389) hide show
  1. {sqlframe-3.39.3 → sqlframe-3.40.0}/.github/workflows/main.workflow.yaml +1 -1
  2. {sqlframe-3.39.3 → sqlframe-3.40.0}/Makefile +9 -3
  3. {sqlframe-3.39.3 → sqlframe-3.40.0}/PKG-INFO +1 -1
  4. {sqlframe-3.39.3 → sqlframe-3.40.0}/setup.py +1 -1
  5. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/_version.py +3 -3
  6. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/dataframe.py +37 -32
  7. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/functions.py +25 -34
  8. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/mixins/table_mixins.py +6 -2
  9. sqlframe-3.40.0/sqlframe/base/normalize.py +282 -0
  10. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/operations.py +3 -4
  11. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe.egg-info/PKG-INFO +1 -1
  12. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe.egg-info/requires.txt +1 -1
  13. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/fixtures.py +8 -0
  14. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/test_int_dataframe.py +162 -95
  15. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_functions.py +2 -0
  16. sqlframe-3.39.3/sqlframe/base/normalize.py +0 -93
  17. {sqlframe-3.39.3 → sqlframe-3.40.0}/.github/CODEOWNERS +0 -0
  18. {sqlframe-3.39.3 → sqlframe-3.40.0}/.github/workflows/publish.workflow.yaml +0 -0
  19. {sqlframe-3.39.3 → sqlframe-3.40.0}/.gitignore +0 -0
  20. {sqlframe-3.39.3 → sqlframe-3.40.0}/.pre-commit-config.yaml +0 -0
  21. {sqlframe-3.39.3 → sqlframe-3.40.0}/.readthedocs.yaml +0 -0
  22. {sqlframe-3.39.3 → sqlframe-3.40.0}/LICENSE +0 -0
  23. {sqlframe-3.39.3 → sqlframe-3.40.0}/README.md +0 -0
  24. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/add_chatgpt_support.md +0 -0
  25. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  26. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  27. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  28. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  29. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  30. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  31. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  32. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  33. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/but_wait_theres_more.gif +0 -0
  34. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/cake.gif +0 -0
  35. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/images/you_get_pyspark_api.gif +0 -0
  36. {sqlframe-3.39.3 → sqlframe-3.40.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  37. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/bigquery.md +0 -0
  38. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/configuration.md +0 -0
  39. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/databricks.md +0 -0
  40. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/docs/bigquery.md +0 -0
  41. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/docs/duckdb.md +0 -0
  42. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/docs/images/SF.png +0 -0
  43. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/docs/images/favicon.png +0 -0
  44. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/docs/images/sqlframe_logo.png +0 -0
  45. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/docs/postgres.md +0 -0
  46. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/duckdb.md +0 -0
  47. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/images/SF.png +0 -0
  48. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/images/favicon.png +0 -0
  49. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/images/sqlframe_logo.png +0 -0
  50. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/index.md +0 -0
  51. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/postgres.md +0 -0
  52. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/redshift.md +0 -0
  53. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/requirements.txt +0 -0
  54. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/snowflake.md +0 -0
  55. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/spark.md +0 -0
  56. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/standalone.md +0 -0
  57. {sqlframe-3.39.3 → sqlframe-3.40.0}/docs/stylesheets/extra.css +0 -0
  58. {sqlframe-3.39.3 → sqlframe-3.40.0}/mkdocs.yml +0 -0
  59. {sqlframe-3.39.3 → sqlframe-3.40.0}/pytest.ini +0 -0
  60. {sqlframe-3.39.3 → sqlframe-3.40.0}/renovate.json +0 -0
  61. {sqlframe-3.39.3 → sqlframe-3.40.0}/setup.cfg +0 -0
  62. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/LICENSE +0 -0
  63. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/__init__.py +0 -0
  64. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/__init__.py +0 -0
  65. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/_typing.py +0 -0
  66. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/catalog.py +0 -0
  67. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/column.py +0 -0
  68. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/decorators.py +0 -0
  69. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/exceptions.py +0 -0
  70. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/function_alternatives.py +0 -0
  71. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/group.py +0 -0
  72. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/mixins/__init__.py +0 -0
  73. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  74. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  75. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  76. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/readerwriter.py +0 -0
  77. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/session.py +0 -0
  78. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/table.py +0 -0
  79. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/transforms.py +0 -0
  80. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/types.py +0 -0
  81. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/udf.py +0 -0
  82. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/util.py +0 -0
  83. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/base/window.py +0 -0
  84. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/__init__.py +0 -0
  85. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/catalog.py +0 -0
  86. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/column.py +0 -0
  87. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/dataframe.py +0 -0
  88. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/functions.py +0 -0
  89. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/functions.pyi +0 -0
  90. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/group.py +0 -0
  91. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/readwriter.py +0 -0
  92. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/session.py +0 -0
  93. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/table.py +0 -0
  94. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/types.py +0 -0
  95. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/udf.py +0 -0
  96. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/bigquery/window.py +0 -0
  97. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/__init__.py +0 -0
  98. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/catalog.py +0 -0
  99. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/column.py +0 -0
  100. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/dataframe.py +0 -0
  101. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/functions.py +0 -0
  102. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/functions.pyi +0 -0
  103. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/group.py +0 -0
  104. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/readwriter.py +0 -0
  105. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/session.py +0 -0
  106. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/table.py +0 -0
  107. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/types.py +0 -0
  108. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/udf.py +0 -0
  109. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/databricks/window.py +0 -0
  110. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/__init__.py +0 -0
  111. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/catalog.py +0 -0
  112. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/column.py +0 -0
  113. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/dataframe.py +0 -0
  114. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/functions.py +0 -0
  115. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/functions.pyi +0 -0
  116. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/group.py +0 -0
  117. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/readwriter.py +0 -0
  118. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/session.py +0 -0
  119. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/table.py +0 -0
  120. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/types.py +0 -0
  121. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/udf.py +0 -0
  122. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/duckdb/window.py +0 -0
  123. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/__init__.py +0 -0
  124. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/catalog.py +0 -0
  125. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/column.py +0 -0
  126. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/dataframe.py +0 -0
  127. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/functions.py +0 -0
  128. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/functions.pyi +0 -0
  129. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/group.py +0 -0
  130. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/readwriter.py +0 -0
  131. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/session.py +0 -0
  132. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/table.py +0 -0
  133. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/types.py +0 -0
  134. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/udf.py +0 -0
  135. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/postgres/window.py +0 -0
  136. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/py.typed +0 -0
  137. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/__init__.py +0 -0
  138. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/catalog.py +0 -0
  139. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/column.py +0 -0
  140. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/dataframe.py +0 -0
  141. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/functions.py +0 -0
  142. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/group.py +0 -0
  143. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/readwriter.py +0 -0
  144. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/session.py +0 -0
  145. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/table.py +0 -0
  146. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/types.py +0 -0
  147. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/udf.py +0 -0
  148. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/redshift/window.py +0 -0
  149. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/__init__.py +0 -0
  150. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/catalog.py +0 -0
  151. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/column.py +0 -0
  152. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/dataframe.py +0 -0
  153. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/functions.py +0 -0
  154. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/functions.pyi +0 -0
  155. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/group.py +0 -0
  156. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/readwriter.py +0 -0
  157. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/session.py +0 -0
  158. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/table.py +0 -0
  159. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/types.py +0 -0
  160. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/udf.py +0 -0
  161. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/snowflake/window.py +0 -0
  162. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/__init__.py +0 -0
  163. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/catalog.py +0 -0
  164. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/column.py +0 -0
  165. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/dataframe.py +0 -0
  166. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/functions.py +0 -0
  167. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/functions.pyi +0 -0
  168. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/group.py +0 -0
  169. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/readwriter.py +0 -0
  170. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/session.py +0 -0
  171. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/table.py +0 -0
  172. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/types.py +0 -0
  173. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/udf.py +0 -0
  174. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/spark/window.py +0 -0
  175. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/__init__.py +0 -0
  176. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/catalog.py +0 -0
  177. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/column.py +0 -0
  178. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/dataframe.py +0 -0
  179. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/functions.py +0 -0
  180. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/group.py +0 -0
  181. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/readwriter.py +0 -0
  182. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/session.py +0 -0
  183. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/table.py +0 -0
  184. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/types.py +0 -0
  185. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/udf.py +0 -0
  186. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/standalone/window.py +0 -0
  187. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/testing/__init__.py +0 -0
  188. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe/testing/utils.py +0 -0
  189. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe.egg-info/SOURCES.txt +0 -0
  190. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe.egg-info/dependency_links.txt +0 -0
  191. {sqlframe-3.39.3 → sqlframe-3.40.0}/sqlframe.egg-info/top_level.txt +0 -0
  192. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/__init__.py +0 -0
  193. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/common_fixtures.py +0 -0
  194. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/conftest.py +0 -0
  195. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee.csv +0 -0
  196. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee.json +0 -0
  197. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee.parquet +0 -0
  198. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  199. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  200. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  201. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  202. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  203. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  204. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  205. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  206. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  207. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  208. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  209. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  210. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  211. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  212. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/employee_extra_line.csv +0 -0
  213. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/issue_219.csv +0 -0
  214. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  215. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  216. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  217. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  218. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  219. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  220. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  221. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  222. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  223. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  224. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  225. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  226. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  227. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  228. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  229. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  230. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  231. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  232. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  233. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  234. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  235. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  236. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  237. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  238. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  239. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  240. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  241. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  242. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  243. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  244. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  245. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  246. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  247. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  248. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  249. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  250. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  251. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  252. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  253. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  254. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  255. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  256. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  257. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  258. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  259. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  260. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  261. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  262. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  263. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  264. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  265. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  266. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  267. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  268. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  269. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  270. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  271. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  272. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  273. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  274. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  275. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  276. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  277. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  278. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  279. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  280. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  281. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  282. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  283. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  284. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  285. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  286. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  287. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  288. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  289. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  290. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  291. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  292. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  293. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  294. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  295. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  296. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  297. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  298. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  299. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  300. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  301. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  302. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  303. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  304. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  305. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  306. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  307. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  308. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  309. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  310. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  311. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  312. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  313. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/__init__.py +0 -0
  314. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/__init__.py +0 -0
  315. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/bigquery/__init__.py +0 -0
  316. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  317. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  318. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  319. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/databricks/__init__.py +0 -0
  320. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
  321. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
  322. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
  323. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/__init__.py +0 -0
  324. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  325. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  326. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  327. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  328. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  329. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  330. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
  331. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/postgres/__init__.py +0 -0
  332. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  333. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  334. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  335. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  336. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/redshift/__init__.py +0 -0
  337. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  338. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  339. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/snowflake/__init__.py +0 -0
  340. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  341. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  342. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  343. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/spark/__init__.py +0 -0
  344. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  345. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  346. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_engine_column.py +0 -0
  347. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
  348. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_engine_reader.py +0 -0
  349. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_engine_session.py +0 -0
  350. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_engine_table.py +0 -0
  351. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_engine_writer.py +0 -0
  352. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_int_functions.py +0 -0
  353. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/engines/test_int_testing.py +0 -0
  354. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/test_int_dataframe_stats.py +0 -0
  355. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/test_int_grouped_data.py +0 -0
  356. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/integration/test_int_session.py +0 -0
  357. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/types.py +0 -0
  358. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/__init__.py +0 -0
  359. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/bigquery/__init__.py +0 -0
  360. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/bigquery/test_activate.py +0 -0
  361. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/conftest.py +0 -0
  362. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/databricks/__init__.py +0 -0
  363. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/databricks/test_activate.py +0 -0
  364. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/duck/__init__.py +0 -0
  365. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/duck/test_activate.py +0 -0
  366. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/duck/test_reader_options.py +0 -0
  367. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/postgres/__init__.py +0 -0
  368. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/postgres/test_activate.py +0 -0
  369. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/redshift/__init__.py +0 -0
  370. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/redshift/test_activate.py +0 -0
  371. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/snowflake/__init__.py +0 -0
  372. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/snowflake/test_activate.py +0 -0
  373. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/spark/__init__.py +0 -0
  374. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/spark/test_activate.py +0 -0
  375. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/spark/test_reader_options.py +0 -0
  376. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/__init__.py +0 -0
  377. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/fixtures.py +0 -0
  378. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_activate.py +0 -0
  379. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_column.py +0 -0
  380. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_dataframe.py +0 -0
  381. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  382. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_session.py +0 -0
  383. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  384. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_types.py +0 -0
  385. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/standalone/test_window.py +0 -0
  386. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/test_activate.py +0 -0
  387. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/test_base_reader_options.py +0 -0
  388. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/test_catalog.py +0 -0
  389. {sqlframe-3.39.3 → sqlframe-3.40.0}/tests/unit/test_util.py +0 -0
@@ -29,7 +29,7 @@ jobs:
29
29
  - name: Checkout
30
30
  uses: actions/checkout@v5
31
31
  - name: Install Python
32
- uses: actions/setup-python@v5
32
+ uses: actions/setup-python@v6
33
33
  with:
34
34
  python-version: ${{ matrix.python-version }}
35
35
  - name: Install dependencies
@@ -1,5 +1,11 @@
1
+ ifdef UV
2
+ PIP := uv pip
3
+ else
4
+ PIP := pip3
5
+ endif
6
+
1
7
  install-dev:
2
- pip install -e ".[bigquery,dev,docs,duckdb,pandas,postgres,redshift,snowflake,databricks,spark]"
8
+ $(PIP) install -e ".[bigquery,dev,docs,duckdb,pandas,postgres,redshift,snowflake,databricks,spark]"
3
9
 
4
10
  install-pre-commit:
5
11
  pre-commit install
@@ -31,7 +37,7 @@ stubs:
31
37
  stubgen sqlframe/spark/functions.py --output ./ --inspect-mode
32
38
 
33
39
  package:
34
- pip3 install wheel && python3 setup.py sdist bdist_wheel
40
+ $(PIP) install wheel && python3 setup.py sdist bdist_wheel
35
41
 
36
42
  publish: package
37
- pip3 install twine && python3 -m twine upload dist/*
43
+ $(PIP) install twine && python3 -m twine upload dist/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.39.3
3
+ Version: 3.40.0
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -20,7 +20,7 @@ setup(
20
20
  python_requires=">=3.9",
21
21
  install_requires=[
22
22
  "prettytable<4",
23
- "sqlglot>=24.0.0,<27.9",
23
+ "sqlglot>=24.0.0,<27.13",
24
24
  "typing_extensions",
25
25
  "more-itertools",
26
26
  ],
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '3.39.3'
32
- __version_tuple__ = version_tuple = (3, 39, 3)
31
+ __version__ = version = '3.40.0'
32
+ __version_tuple__ = version_tuple = (3, 40, 0)
33
33
 
34
- __commit_id__ = commit_id = 'g9d915cb1e'
34
+ __commit_id__ = commit_id = 'g93abcd907'
@@ -16,7 +16,6 @@ from dataclasses import dataclass
16
16
  from uuid import uuid4
17
17
 
18
18
  import sqlglot
19
- from more_itertools import partition
20
19
  from prettytable import PrettyTable
21
20
  from sqlglot import Dialect, maybe_parse
22
21
  from sqlglot import expressions as exp
@@ -397,12 +396,21 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
397
396
  return Column.ensure_cols(ensure_list(cols)) # type: ignore
398
397
 
399
398
  def _ensure_and_normalize_cols(
400
- self, cols, expression: t.Optional[exp.Select] = None, skip_star_expansion: bool = False
399
+ self,
400
+ cols,
401
+ expression: t.Optional[exp.Select] = None,
402
+ skip_star_expansion: bool = False,
403
+ remove_identifier_if_possible: bool = True,
401
404
  ) -> t.List[Column]:
402
405
  from sqlframe.base.normalize import normalize
403
406
 
404
407
  cols = self._ensure_list_of_columns(cols)
405
- normalize(self.session, expression or self.expression, cols)
408
+ normalize(
409
+ self.session,
410
+ expression or self.expression,
411
+ cols,
412
+ remove_identifier_if_possible=remove_identifier_if_possible,
413
+ )
406
414
  if not skip_star_expansion:
407
415
  cols = list(flatten([self._expand_star(col) for col in cols]))
408
416
  self._resolve_ambiguous_columns(cols)
@@ -542,23 +550,16 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
542
550
  expression.set("with", exp.With(expressions=existing_ctes))
543
551
  return expression
544
552
 
545
- @classmethod
546
- def _get_outer_select_expressions(
547
- cls, item: exp.Expression
548
- ) -> t.List[t.Union[exp.Column, exp.Alias]]:
549
- outer_select = item.find(exp.Select)
550
- if outer_select:
551
- return outer_select.expressions
552
- return []
553
-
554
553
  @classmethod
555
554
  def _get_outer_select_columns(cls, item: exp.Expression) -> t.List[Column]:
556
555
  from sqlframe.base.session import _BaseSession
557
556
 
558
557
  col = get_func_from_session("col", _BaseSession())
559
558
 
560
- outer_expressions = cls._get_outer_select_expressions(item)
561
- return [col(quote_preserving_alias_or_name(x)) for x in outer_expressions]
559
+ outer_select = item.find(exp.Select)
560
+ if outer_select:
561
+ return [col(quote_preserving_alias_or_name(x)) for x in outer_select.expressions]
562
+ return []
562
563
 
563
564
  def _create_hash_from_expression(self, expression: exp.Expression) -> str:
564
565
  from sqlframe.base.session import _BaseSession
@@ -1025,9 +1026,17 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1025
1026
  return join_column_pairs, join_clause
1026
1027
 
1027
1028
  def _normalize_join_clause(
1028
- self, join_columns: t.List[Column], join_expression: t.Optional[exp.Select]
1029
+ self,
1030
+ join_columns: t.List[Column],
1031
+ join_expression: t.Optional[exp.Select],
1032
+ *,
1033
+ remove_identifier_if_possible: bool = True,
1029
1034
  ) -> Column:
1030
- join_columns = self._ensure_and_normalize_cols(join_columns, join_expression)
1035
+ join_columns = self._ensure_and_normalize_cols(
1036
+ join_columns,
1037
+ join_expression,
1038
+ remove_identifier_if_possible=remove_identifier_if_possible,
1039
+ )
1031
1040
  if len(join_columns) > 1:
1032
1041
  join_columns = [functools.reduce(lambda x, y: x & y, join_columns)]
1033
1042
  join_clause = join_columns[0]
@@ -1512,23 +1521,20 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1512
1521
  """
1513
1522
  return func(self, *args, **kwargs) # type: ignore
1514
1523
 
1515
- @operation(Operation.SELECT_CONSTRAINED)
1524
+ @operation(Operation.SELECT)
1516
1525
  def withColumn(self, colName: str, col: Column) -> Self:
1517
1526
  return self.withColumns.__wrapped__(self, {colName: col}) # type: ignore
1518
1527
 
1519
- @operation(Operation.SELECT_CONSTRAINED)
1528
+ @operation(Operation.SELECT)
1520
1529
  def withColumnRenamed(self, existing: str, new: str) -> Self:
1521
- col_func = get_func_from_session("col", self.session)
1522
1530
  expression = self.expression.copy()
1523
1531
  existing = self.session._normalize_string(existing)
1524
- outer_expressions = self._get_outer_select_expressions(expression)
1532
+ columns = self._get_outer_select_columns(expression)
1525
1533
  results = []
1526
1534
  found_match = False
1527
- for expr in outer_expressions:
1528
- column = col_func(expr.copy())
1529
- if existing == quote_preserving_alias_or_name(expr):
1530
- if isinstance(column.expression, exp.Alias):
1531
- column.expression.set("alias", exp.to_identifier(new))
1535
+ for column in columns:
1536
+ if column.alias_or_name == existing:
1537
+ column = column.alias(new)
1532
1538
  self._update_display_name_mapping([column], [new])
1533
1539
  found_match = True
1534
1540
  results.append(column)
@@ -1536,7 +1542,7 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1536
1542
  raise ValueError("Tried to rename a column that doesn't exist")
1537
1543
  return self.select.__wrapped__(self, *results, skip_update_display_name_mapping=True) # type: ignore
1538
1544
 
1539
- @operation(Operation.SELECT_CONSTRAINED)
1545
+ @operation(Operation.SELECT)
1540
1546
  def withColumnsRenamed(self, colsMap: t.Dict[str, str]) -> Self:
1541
1547
  """
1542
1548
  Returns a new :class:`DataFrame` by renaming multiple columns. If a non-existing column is
@@ -1582,7 +1588,7 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1582
1588
 
1583
1589
  return self.select.__wrapped__(self, *results, skip_update_display_name_mapping=True) # type: ignore
1584
1590
 
1585
- @operation(Operation.SELECT_CONSTRAINED)
1591
+ @operation(Operation.SELECT)
1586
1592
  def withColumns(self, *colsMap: t.Dict[str, Column]) -> Self:
1587
1593
  """
1588
1594
  Returns a new :class:`DataFrame` by adding multiple columns or replacing the
@@ -1620,14 +1626,13 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1620
1626
  """
1621
1627
  if len(colsMap) != 1:
1622
1628
  raise ValueError("Only a single map is supported")
1623
- col_func = get_func_from_session("col")
1624
1629
  col_map = {
1625
1630
  self._ensure_and_normalize_col(k): (self._ensure_and_normalize_col(v), k)
1626
1631
  for k, v in colsMap[0].items()
1627
1632
  }
1628
- existing_expr = self._get_outer_select_expressions(self.expression)
1629
- existing_col_names = [x.alias_or_name for x in existing_expr]
1630
- select_columns = [col_func(x) for x in existing_expr]
1633
+ existing_cols = self._get_outer_select_columns(self.expression)
1634
+ existing_col_names = [x.alias_or_name for x in existing_cols]
1635
+ select_columns = existing_cols
1631
1636
  for col, (col_value, display_name) in col_map.items():
1632
1637
  column_name = col.alias_or_name
1633
1638
  existing_col_index = (
@@ -1644,7 +1649,7 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1644
1649
  )
1645
1650
  return self.select.__wrapped__(self, *select_columns, skip_update_display_name_mapping=True) # type: ignore
1646
1651
 
1647
- @operation(Operation.SELECT_CONSTRAINED)
1652
+ @operation(Operation.SELECT)
1648
1653
  def drop(self, *cols: t.Union[str, Column]) -> Self:
1649
1654
  # Separate string column names from Column objects for different handling
1650
1655
  column_objs, column_names = partition_to(lambda x: isinstance(x, str), cols, list, set)
@@ -37,9 +37,7 @@ def _get_session() -> _BaseSession:
37
37
 
38
38
  @meta()
39
39
  def col(column_name: t.Union[ColumnOrName, t.Any]) -> Column:
40
- from sqlframe.base.session import _BaseSession
41
-
42
- dialect = _BaseSession().input_dialect
40
+ dialect = _get_session().input_dialect
43
41
  if isinstance(column_name, str):
44
42
  col_expression = expression.to_column(column_name, dialect=dialect).transform(
45
43
  dialect.normalize_identifier
@@ -192,27 +190,27 @@ sum_distinct = sumDistinct
192
190
 
193
191
  @meta()
194
192
  def acos(col: ColumnOrName) -> Column:
195
- return Column.invoke_anonymous_function(col, "ACOS")
193
+ return Column.invoke_expression_over_column(col, expression.Acos)
196
194
 
197
195
 
198
196
  @meta(unsupported_engines="duckdb")
199
197
  def acosh(col: ColumnOrName) -> Column:
200
- return Column.invoke_anonymous_function(col, "ACOSH")
198
+ return Column.invoke_expression_over_column(col, expression.Acosh)
201
199
 
202
200
 
203
201
  @meta()
204
202
  def asin(col: ColumnOrName) -> Column:
205
- return Column.invoke_anonymous_function(col, "ASIN")
203
+ return Column.invoke_expression_over_column(col, expression.Asin)
206
204
 
207
205
 
208
206
  @meta(unsupported_engines="duckdb")
209
207
  def asinh(col: ColumnOrName) -> Column:
210
- return Column.invoke_anonymous_function(col, "ASINH")
208
+ return Column.invoke_expression_over_column(col, expression.Asinh)
211
209
 
212
210
 
213
211
  @meta()
214
212
  def atan(col: ColumnOrName) -> Column:
215
- return Column.invoke_anonymous_function(col, "ATAN")
213
+ return Column.invoke_expression_over_column(col, expression.Atan)
216
214
 
217
215
 
218
216
  @meta()
@@ -220,12 +218,12 @@ def atan2(col1: t.Union[ColumnOrName, float], col2: t.Union[ColumnOrName, float]
220
218
  col1_value = lit(col1) if isinstance(col1, (int, float)) else col1
221
219
  col2_value = lit(col2) if isinstance(col2, (int, float)) else col2
222
220
 
223
- return Column.invoke_anonymous_function(col1_value, "ATAN2", col2_value)
221
+ return Column.invoke_expression_over_column(col1_value, expression.Atan2, expression=col2_value)
224
222
 
225
223
 
226
224
  @meta(unsupported_engines="duckdb")
227
225
  def atanh(col: ColumnOrName) -> Column:
228
- return Column.invoke_anonymous_function(col, "ATANH")
226
+ return Column.invoke_expression_over_column(col, expression.Atanh)
229
227
 
230
228
 
231
229
  @meta()
@@ -253,12 +251,12 @@ def cosh(col: ColumnOrName) -> Column:
253
251
 
254
252
  @meta()
255
253
  def cot(col: ColumnOrName) -> Column:
256
- return Column.invoke_anonymous_function(col, "COT")
254
+ return Column.invoke_expression_over_column(col, expression.Cot)
257
255
 
258
256
 
259
257
  @meta(unsupported_engines=["duckdb", "postgres", "snowflake"])
260
258
  def csc(col: ColumnOrName) -> Column:
261
- return Column.invoke_anonymous_function(col, "CSC")
259
+ return Column.invoke_expression_over_column(col, expression.Csc)
262
260
 
263
261
 
264
262
  @meta()
@@ -364,7 +362,7 @@ def rint(col: ColumnOrName) -> Column:
364
362
 
365
363
  @meta(unsupported_engines=["duckdb", "postgres", "snowflake"])
366
364
  def sec(col: ColumnOrName) -> Column:
367
- return Column.invoke_anonymous_function(col, "SEC")
365
+ return Column.invoke_expression_over_column(col, expression.Sec)
368
366
 
369
367
 
370
368
  @meta()
@@ -374,12 +372,12 @@ def signum(col: ColumnOrName) -> Column:
374
372
 
375
373
  @meta()
376
374
  def sin(col: ColumnOrName) -> Column:
377
- return Column.invoke_anonymous_function(col, "SIN")
375
+ return Column.invoke_expression_over_column(col, expression.Sin)
378
376
 
379
377
 
380
378
  @meta(unsupported_engines="duckdb")
381
379
  def sinh(col: ColumnOrName) -> Column:
382
- return Column.invoke_anonymous_function(col, "SINH")
380
+ return Column.invoke_expression_over_column(col, expression.Sinh)
383
381
 
384
382
 
385
383
  @meta()
@@ -662,9 +660,7 @@ def grouping_id(*cols: ColumnOrName) -> Column:
662
660
 
663
661
  @meta()
664
662
  def input_file_name() -> Column:
665
- from sqlframe.base.session import _BaseSession
666
-
667
- return Column(expression.Literal.string(_BaseSession()._last_loaded_file or ""))
663
+ return Column(expression.Literal.string(_get_session()._last_loaded_file or ""))
668
664
 
669
665
 
670
666
  @meta()
@@ -944,7 +940,7 @@ def nth_value(
944
940
 
945
941
  @meta()
946
942
  def ntile(n: int) -> Column:
947
- return Column.invoke_anonymous_function(None, "NTILE", lit(n))
943
+ return Column.invoke_expression_over_column(lit(n), expression.Ntile)
948
944
 
949
945
 
950
946
  @meta()
@@ -959,12 +955,10 @@ def current_timestamp() -> Column:
959
955
 
960
956
  @meta()
961
957
  def date_format(col: ColumnOrName, format: str) -> Column:
962
- from sqlframe.base.session import _BaseSession
963
-
964
958
  return Column.invoke_expression_over_column(
965
959
  Column(expression.TimeStrToTime(this=Column.ensure_col(col).column_expression)),
966
960
  expression.TimeToStr,
967
- format=_BaseSession().format_time(format),
961
+ format=_get_session().format_time(format),
968
962
  )
969
963
 
970
964
 
@@ -2832,7 +2826,7 @@ def make_interval(
2832
2826
 
2833
2827
  @meta(unsupported_engines="*")
2834
2828
  def try_add(left: ColumnOrName, right: ColumnOrName) -> Column:
2835
- return Column.invoke_anonymous_function(left, "TRY_ADD", right)
2829
+ return Column.invoke_expression_over_column(left, expression.SafeAdd, expression=right)
2836
2830
 
2837
2831
 
2838
2832
  @meta(unsupported_engines="*")
@@ -2849,12 +2843,12 @@ def try_divide(left: ColumnOrName, right: ColumnOrName) -> Column:
2849
2843
 
2850
2844
  @meta(unsupported_engines="*")
2851
2845
  def try_multiply(left: ColumnOrName, right: ColumnOrName) -> Column:
2852
- return Column.invoke_anonymous_function(left, "TRY_MULTIPLY", right)
2846
+ return Column.invoke_expression_over_column(left, expression.SafeMultiply, expression=right)
2853
2847
 
2854
2848
 
2855
2849
  @meta(unsupported_engines="*")
2856
2850
  def try_subtract(left: ColumnOrName, right: ColumnOrName) -> Column:
2857
- return Column.invoke_anonymous_function(left, "TRY_SUBTRACT", right)
2851
+ return Column.invoke_expression_over_column(left, expression.SafeSubtract, expression=right)
2858
2852
 
2859
2853
 
2860
2854
  @meta(unsupported_engines="*")
@@ -3378,10 +3372,9 @@ def get(col: ColumnOrName, index: t.Union[ColumnOrName, int]) -> Column:
3378
3372
  def get_active_spark_context() -> SparkContext:
3379
3373
  """Raise RuntimeError if SparkContext is not initialized,
3380
3374
  otherwise, returns the active SparkContext."""
3381
- from sqlframe.base.session import _BaseSession
3382
3375
  from sqlframe.spark.session import SparkSession
3383
3376
 
3384
- session: _BaseSession = _BaseSession()
3377
+ session = _get_session()
3385
3378
  if not isinstance(session, SparkSession):
3386
3379
  raise RuntimeError("This function is only available in SparkSession.")
3387
3380
  return session.spark_session.sparkContext
@@ -5263,7 +5256,7 @@ def regexp_extract_all(
5263
5256
  )
5264
5257
 
5265
5258
 
5266
- @meta(unsupported_engines="*")
5259
+ @meta(unsupported_engines=["duckdb", "bigquery", "postgres", "snowflake"])
5267
5260
  def regexp_instr(
5268
5261
  str: ColumnOrName, regexp: ColumnOrName, idx: t.Optional[t.Union[int, Column]] = None
5269
5262
  ) -> Column:
@@ -5298,11 +5291,9 @@ def regexp_instr(
5298
5291
  >>> df.select(regexp_instr('str', col("regexp")).alias('d')).collect()
5299
5292
  [Row(d=1)]
5300
5293
  """
5301
- if idx is None:
5302
- return Column.invoke_anonymous_function(str, "regexp_instr", regexp)
5303
- else:
5304
- idx = lit(idx) if isinstance(idx, int) else idx
5305
- return Column.invoke_anonymous_function(str, "regexp_instr", regexp, idx)
5294
+ return Column.invoke_expression_over_column(
5295
+ str, expression.RegexpInstr, expression=regexp, group=idx
5296
+ )
5306
5297
 
5307
5298
 
5308
5299
  @meta(unsupported_engines="snowflake")
@@ -6344,7 +6335,7 @@ def to_unix_timestamp(
6344
6335
  session = _get_session()
6345
6336
 
6346
6337
  if session._is_duckdb:
6347
- format = format or _BaseSession().default_time_format
6338
+ format = format or session.default_time_format
6348
6339
  timestamp = Column.ensure_col(timestamp).cast("string")
6349
6340
 
6350
6341
  if format is not None:
@@ -275,7 +275,9 @@ class MergeSupportMixin(_BaseTable, t.Generic[DF]):
275
275
  join_expression = self._add_ctes_to_expression(
276
276
  self.expression, other_df.expression.copy().ctes
277
277
  )
278
- condition = self._ensure_and_normalize_cols(condition, self.expression)
278
+ condition = self._ensure_and_normalize_cols(
279
+ condition, self.expression, remove_identifier_if_possible=False
280
+ )
279
281
  self._handle_self_join(other_df, condition)
280
282
 
281
283
  if isinstance(condition[0].expression, exp.Column) and not clause:
@@ -291,7 +293,9 @@ class MergeSupportMixin(_BaseTable, t.Generic[DF]):
291
293
  condition, join_expression, other_df, table_names
292
294
  )
293
295
  else:
294
- join_clause = self._normalize_join_clause(condition, join_expression)
296
+ join_clause = self._normalize_join_clause(
297
+ condition, join_expression, remove_identifier_if_possible=False
298
+ )
295
299
  return join_clause
296
300
 
297
301
  def _ensure_and_normalize_assignments(