sqlframe 3.32.1__tar.gz → 3.33.1__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 (388) hide show
  1. {sqlframe-3.32.1 → sqlframe-3.33.1}/PKG-INFO +1 -1
  2. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/bigquery.md +5 -0
  3. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/duckdb.md +2 -0
  4. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/postgres.md +1 -0
  5. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/snowflake.md +2 -0
  6. {sqlframe-3.32.1 → sqlframe-3.33.1}/setup.py +3 -3
  7. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/_version.py +2 -2
  8. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/column.py +4 -0
  9. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/function_alternatives.py +0 -11
  10. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/functions.py +9 -38
  11. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/session.py +4 -1
  12. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe.egg-info/PKG-INFO +1 -1
  13. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe.egg-info/requires.txt +3 -3
  14. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_duckdb_dataframe.py +4 -4
  15. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/spark/test_spark_dataframe.py +4 -4
  16. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_engine_column.py +20 -0
  17. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_int_functions.py +25 -10
  18. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_column.py +4 -0
  19. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_functions.py +7 -4
  20. {sqlframe-3.32.1 → sqlframe-3.33.1}/.github/CODEOWNERS +0 -0
  21. {sqlframe-3.32.1 → sqlframe-3.33.1}/.github/workflows/main.workflow.yaml +0 -0
  22. {sqlframe-3.32.1 → sqlframe-3.33.1}/.github/workflows/publish.workflow.yaml +0 -0
  23. {sqlframe-3.32.1 → sqlframe-3.33.1}/.gitignore +0 -0
  24. {sqlframe-3.32.1 → sqlframe-3.33.1}/.pre-commit-config.yaml +0 -0
  25. {sqlframe-3.32.1 → sqlframe-3.33.1}/.readthedocs.yaml +0 -0
  26. {sqlframe-3.32.1 → sqlframe-3.33.1}/LICENSE +0 -0
  27. {sqlframe-3.32.1 → sqlframe-3.33.1}/Makefile +0 -0
  28. {sqlframe-3.32.1 → sqlframe-3.33.1}/README.md +0 -0
  29. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/add_chatgpt_support.md +0 -0
  30. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  31. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  32. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  33. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  34. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  35. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  36. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  37. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  38. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/but_wait_theres_more.gif +0 -0
  39. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/cake.gif +0 -0
  40. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/images/you_get_pyspark_api.gif +0 -0
  41. {sqlframe-3.32.1 → sqlframe-3.33.1}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  42. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/configuration.md +0 -0
  43. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/databricks.md +0 -0
  44. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/docs/bigquery.md +0 -0
  45. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/docs/duckdb.md +0 -0
  46. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/docs/images/SF.png +0 -0
  47. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/docs/images/favicon.png +0 -0
  48. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/docs/images/sqlframe_logo.png +0 -0
  49. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/docs/postgres.md +0 -0
  50. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/images/SF.png +0 -0
  51. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/images/favicon.png +0 -0
  52. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/images/sqlframe_logo.png +0 -0
  53. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/index.md +0 -0
  54. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/redshift.md +0 -0
  55. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/requirements.txt +0 -0
  56. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/spark.md +0 -0
  57. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/standalone.md +0 -0
  58. {sqlframe-3.32.1 → sqlframe-3.33.1}/docs/stylesheets/extra.css +0 -0
  59. {sqlframe-3.32.1 → sqlframe-3.33.1}/mkdocs.yml +0 -0
  60. {sqlframe-3.32.1 → sqlframe-3.33.1}/pytest.ini +0 -0
  61. {sqlframe-3.32.1 → sqlframe-3.33.1}/renovate.json +0 -0
  62. {sqlframe-3.32.1 → sqlframe-3.33.1}/setup.cfg +0 -0
  63. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/LICENSE +0 -0
  64. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/__init__.py +0 -0
  65. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/__init__.py +0 -0
  66. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/_typing.py +0 -0
  67. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/catalog.py +0 -0
  68. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/dataframe.py +0 -0
  69. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/decorators.py +0 -0
  70. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/exceptions.py +0 -0
  71. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/group.py +0 -0
  72. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/mixins/__init__.py +0 -0
  73. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  74. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  75. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  76. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/mixins/table_mixins.py +0 -0
  77. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/normalize.py +0 -0
  78. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/operations.py +0 -0
  79. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/readerwriter.py +0 -0
  80. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/table.py +0 -0
  81. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/transforms.py +0 -0
  82. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/types.py +0 -0
  83. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/udf.py +0 -0
  84. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/util.py +0 -0
  85. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/base/window.py +0 -0
  86. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/__init__.py +0 -0
  87. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/catalog.py +0 -0
  88. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/column.py +0 -0
  89. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/dataframe.py +0 -0
  90. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/functions.py +0 -0
  91. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/functions.pyi +0 -0
  92. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/group.py +0 -0
  93. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/readwriter.py +0 -0
  94. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/session.py +0 -0
  95. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/table.py +0 -0
  96. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/types.py +0 -0
  97. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/udf.py +0 -0
  98. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/bigquery/window.py +0 -0
  99. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/__init__.py +0 -0
  100. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/catalog.py +0 -0
  101. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/column.py +0 -0
  102. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/dataframe.py +0 -0
  103. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/functions.py +0 -0
  104. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/functions.pyi +0 -0
  105. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/group.py +0 -0
  106. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/readwriter.py +0 -0
  107. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/session.py +0 -0
  108. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/table.py +0 -0
  109. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/types.py +0 -0
  110. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/udf.py +0 -0
  111. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/databricks/window.py +0 -0
  112. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/__init__.py +0 -0
  113. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/catalog.py +0 -0
  114. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/column.py +0 -0
  115. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/dataframe.py +0 -0
  116. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/functions.py +0 -0
  117. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/functions.pyi +0 -0
  118. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/group.py +0 -0
  119. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/readwriter.py +0 -0
  120. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/session.py +0 -0
  121. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/table.py +0 -0
  122. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/types.py +0 -0
  123. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/udf.py +0 -0
  124. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/duckdb/window.py +0 -0
  125. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/__init__.py +0 -0
  126. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/catalog.py +0 -0
  127. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/column.py +0 -0
  128. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/dataframe.py +0 -0
  129. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/functions.py +0 -0
  130. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/functions.pyi +0 -0
  131. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/group.py +0 -0
  132. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/readwriter.py +0 -0
  133. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/session.py +0 -0
  134. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/table.py +0 -0
  135. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/types.py +0 -0
  136. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/udf.py +0 -0
  137. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/postgres/window.py +0 -0
  138. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/py.typed +0 -0
  139. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/__init__.py +0 -0
  140. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/catalog.py +0 -0
  141. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/column.py +0 -0
  142. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/dataframe.py +0 -0
  143. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/functions.py +0 -0
  144. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/group.py +0 -0
  145. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/readwriter.py +0 -0
  146. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/session.py +0 -0
  147. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/table.py +0 -0
  148. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/types.py +0 -0
  149. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/udf.py +0 -0
  150. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/redshift/window.py +0 -0
  151. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/__init__.py +0 -0
  152. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/catalog.py +0 -0
  153. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/column.py +0 -0
  154. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/dataframe.py +0 -0
  155. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/functions.py +0 -0
  156. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/functions.pyi +0 -0
  157. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/group.py +0 -0
  158. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/readwriter.py +0 -0
  159. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/session.py +0 -0
  160. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/table.py +0 -0
  161. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/types.py +0 -0
  162. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/udf.py +0 -0
  163. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/snowflake/window.py +0 -0
  164. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/__init__.py +0 -0
  165. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/catalog.py +0 -0
  166. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/column.py +0 -0
  167. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/dataframe.py +0 -0
  168. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/functions.py +0 -0
  169. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/functions.pyi +0 -0
  170. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/group.py +0 -0
  171. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/readwriter.py +0 -0
  172. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/session.py +0 -0
  173. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/table.py +0 -0
  174. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/types.py +0 -0
  175. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/udf.py +0 -0
  176. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/spark/window.py +0 -0
  177. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/__init__.py +0 -0
  178. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/catalog.py +0 -0
  179. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/column.py +0 -0
  180. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/dataframe.py +0 -0
  181. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/functions.py +0 -0
  182. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/group.py +0 -0
  183. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/readwriter.py +0 -0
  184. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/session.py +0 -0
  185. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/table.py +0 -0
  186. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/types.py +0 -0
  187. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/udf.py +0 -0
  188. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/standalone/window.py +0 -0
  189. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/testing/__init__.py +0 -0
  190. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe/testing/utils.py +0 -0
  191. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe.egg-info/SOURCES.txt +0 -0
  192. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe.egg-info/dependency_links.txt +0 -0
  193. {sqlframe-3.32.1 → sqlframe-3.33.1}/sqlframe.egg-info/top_level.txt +0 -0
  194. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/__init__.py +0 -0
  195. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/common_fixtures.py +0 -0
  196. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/conftest.py +0 -0
  197. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee.csv +0 -0
  198. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee.json +0 -0
  199. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee.parquet +0 -0
  200. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  201. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  202. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  203. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  204. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  205. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  206. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  207. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  208. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  209. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  210. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  211. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  212. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  213. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  214. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/employee_extra_line.csv +0 -0
  215. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/issue_219.csv +0 -0
  216. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  217. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  218. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  219. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  220. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  221. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  222. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  223. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  224. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  225. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  226. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  227. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  228. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  229. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  230. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  231. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  232. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  233. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  234. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  235. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  236. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  237. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  238. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  239. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  240. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  241. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  242. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  243. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  244. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  245. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  246. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  247. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  248. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  249. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  250. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  251. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  252. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  253. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  254. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  255. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  256. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  257. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  258. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  259. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  260. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  261. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  262. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  263. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  264. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  265. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  266. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  267. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  268. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  269. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  270. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  271. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  272. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  273. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  274. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  275. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  276. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  277. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  278. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  279. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  280. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  281. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  282. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  283. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  284. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  285. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  286. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  287. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  288. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  289. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  290. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  291. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  292. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  293. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  294. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  295. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  296. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  297. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  298. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  299. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  300. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  301. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  302. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  303. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  304. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  305. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  306. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  307. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  308. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  309. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  310. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  311. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  312. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  313. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  314. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  315. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/__init__.py +0 -0
  316. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/__init__.py +0 -0
  317. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/bigquery/__init__.py +0 -0
  318. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  319. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  320. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  321. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/databricks/__init__.py +0 -0
  322. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
  323. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
  324. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
  325. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/__init__.py +0 -0
  326. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  327. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  328. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  329. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  330. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  331. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/duck/test_tpcds.py +0 -0
  332. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/postgres/__init__.py +0 -0
  333. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  334. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  335. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  336. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  337. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/redshift/__init__.py +0 -0
  338. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  339. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  340. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/snowflake/__init__.py +0 -0
  341. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  342. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  343. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  344. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/spark/__init__.py +0 -0
  345. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  346. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_engine_dataframe.py +0 -0
  347. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_engine_reader.py +0 -0
  348. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_engine_session.py +0 -0
  349. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_engine_table.py +0 -0
  350. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_engine_writer.py +0 -0
  351. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/engines/test_int_testing.py +0 -0
  352. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/fixtures.py +0 -0
  353. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/test_int_dataframe.py +0 -0
  354. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/test_int_dataframe_stats.py +0 -0
  355. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/test_int_grouped_data.py +0 -0
  356. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/integration/test_int_session.py +0 -0
  357. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/types.py +0 -0
  358. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/__init__.py +0 -0
  359. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/bigquery/__init__.py +0 -0
  360. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/bigquery/test_activate.py +0 -0
  361. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/conftest.py +0 -0
  362. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/databricks/__init__.py +0 -0
  363. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/databricks/test_activate.py +0 -0
  364. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/duck/__init__.py +0 -0
  365. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/duck/test_activate.py +0 -0
  366. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/duck/test_reader_options.py +0 -0
  367. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/postgres/__init__.py +0 -0
  368. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/postgres/test_activate.py +0 -0
  369. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/redshift/__init__.py +0 -0
  370. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/redshift/test_activate.py +0 -0
  371. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/snowflake/__init__.py +0 -0
  372. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/snowflake/test_activate.py +0 -0
  373. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/spark/__init__.py +0 -0
  374. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/spark/test_activate.py +0 -0
  375. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/spark/test_reader_options.py +0 -0
  376. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/__init__.py +0 -0
  377. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/fixtures.py +0 -0
  378. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_activate.py +0 -0
  379. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_dataframe.py +0 -0
  380. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  381. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_session.py +0 -0
  382. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  383. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_types.py +0 -0
  384. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/standalone/test_window.py +0 -0
  385. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/test_activate.py +0 -0
  386. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/test_base_reader_options.py +0 -0
  387. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/test_catalog.py +0 -0
  388. {sqlframe-3.32.1 → sqlframe-3.33.1}/tests/unit/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.32.1
3
+ Version: 3.33.1
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -219,6 +219,8 @@ See something that you would like to see supported? [Open an issue](https://gith
219
219
  * [asc_nulls_last](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.asc_nulls_last.html)
220
220
  * [between](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.between.html)
221
221
  * [cast](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.cast.html)
222
+ * [contains](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.contains.html)
223
+ * The argument to `contains` must be a string
222
224
  * [desc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc.html)
223
225
  * [desc_nulls_first](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc_nulls_first.html)
224
226
  * [desc_nulls_last](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc_nulls_last.html)
@@ -351,6 +353,8 @@ See something that you would like to see supported? [Open an issue](https://gith
351
353
  * [concat](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.concat.html)
352
354
  * Only works on strings (does not work on arrays)
353
355
  * [concat_ws](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.concat_ws.html)
356
+ * [contains](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.contains.html)
357
+ * The argument to `contains` must be a string
354
358
  * [corr](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.corr.html)
355
359
  * [cos](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.cos.html)
356
360
  * [cosh](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.cosh.html)
@@ -512,6 +516,7 @@ See something that you would like to see supported? [Open an issue](https://gith
512
516
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
513
517
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.html)
514
518
  * Shorthand expressions not supported. Ex: Use `month` instead of `mon`
519
+ * [try_divide](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_divide.html)
515
520
  * [try_to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_to_timestamp.html)
516
521
  * [typeof](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.typeof.html)
517
522
  * [ucase](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.ucase.html)
@@ -183,6 +183,7 @@ See something that you would like to see supported? [Open an issue](https://gith
183
183
  * [asc_nulls_last](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.asc_nulls_last.html)
184
184
  * [between](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.between.html)
185
185
  * [cast](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.cast.html)
186
+ * [contains](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.contains.html)
186
187
  * [desc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc.html)
187
188
  * [desc_nulls_first](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc_nulls_first.html)
188
189
  * [desc_nulls_last](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc_nulls_last.html)
@@ -477,6 +478,7 @@ See something that you would like to see supported? [Open an issue](https://gith
477
478
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
478
479
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
479
480
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.html)
481
+ * [try_divide](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_divide.html)
480
482
  * [try_element_at](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_element_at.html)
481
483
  * [try_to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_to_timestamp.html)
482
484
  * [typeof](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.typeof.html)
@@ -464,6 +464,7 @@ See something that you would like to see supported? [Open an issue](https://gith
464
464
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
465
465
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
466
466
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.html)
467
+ * [try_divide](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_divide.html)
467
468
  * [try_element_at](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_element_at.html)
468
469
  * Negative index returns null and cannot lookup elements in maps
469
470
  * [try_to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_to_timestamp.html)
@@ -215,6 +215,7 @@ See something that you would like to see supported? [Open an issue](https://gith
215
215
  * [asc_nulls_last](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.asc_nulls_last.html)
216
216
  * [between](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.between.html)
217
217
  * [cast](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.cast.html)
218
+ * [contains](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.contains.html)
218
219
  * [desc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc.html)
219
220
  * [desc_nulls_first](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc_nulls_first.html)
220
221
  * [desc_nulls_last](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.desc_nulls_last.html)
@@ -515,6 +516,7 @@ See something that you would like to see supported? [Open an issue](https://gith
515
516
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
516
517
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
517
518
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.html)
519
+ * [try_divide](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_divide.html)
518
520
  * [try_to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.try_to_timestamp.html)
519
521
  * [typeof](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.typeof.html)
520
522
  * [ucase](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.ucase.html)
@@ -20,7 +20,7 @@ setup(
20
20
  python_requires=">=3.9",
21
21
  install_requires=[
22
22
  "prettytable<4",
23
- "sqlglot>=24.0.0,<26.18",
23
+ "sqlglot>=24.0.0,<26.20",
24
24
  "typing_extensions",
25
25
  ],
26
26
  extras_require={
@@ -29,7 +29,7 @@ setup(
29
29
  "google-cloud-bigquery-storage>=2,<3",
30
30
  ],
31
31
  "dev": [
32
- "duckdb>=1.2,<1.3",
32
+ "duckdb>=1.2,<1.4",
33
33
  "findspark>=2,<3",
34
34
  "mypy>=1.10.0,<1.16",
35
35
  "openai>=1.30,<2",
@@ -54,7 +54,7 @@ setup(
54
54
  "pymdown-extensions",
55
55
  ],
56
56
  "duckdb": [
57
- "duckdb>=1.2,<1.3",
57
+ "duckdb>=1.2,<1.4",
58
58
  "pandas>=2,<3",
59
59
  ],
60
60
  "openai": [
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '3.32.1'
21
- __version_tuple__ = version_tuple = (3, 32, 1)
20
+ __version__ = version = '3.33.1'
21
+ __version_tuple__ = version_tuple = (3, 33, 1)
@@ -517,3 +517,7 @@ class Column:
517
517
  +---+
518
518
  """
519
519
  return self.getItem(name)
520
+
521
+ def contains(self, value: t.Union[str, Column]) -> Column:
522
+ value = self._lit(value) if not isinstance(value, Column) else value
523
+ return self.invoke_expression_over_column(self, exp.Contains, expression=value.expression)
@@ -78,17 +78,6 @@ def to_timestamp_tz(col: ColumnOrName, format: t.Optional[str] = None) -> Column
78
78
  return Column.ensure_col(col).cast("timestamptz", dialect="duckdb")
79
79
 
80
80
 
81
- def to_timestamp_just_timestamp(col: ColumnOrName, format: t.Optional[str] = None) -> Column:
82
- from sqlframe.base.session import _BaseSession
83
-
84
- if format is not None:
85
- return Column.invoke_expression_over_column(
86
- col, expression.StrToTime, format=_BaseSession().format_time(format)
87
- )
88
-
89
- return Column.ensure_col(col).cast("datetime", dialect="bigquery")
90
-
91
-
92
81
  def bitwise_not_from_bitnot(col: ColumnOrName) -> Column:
93
82
  return Column.invoke_anonymous_function(col, "BITNOT")
94
83
 
@@ -1356,7 +1356,6 @@ def to_date(col: ColumnOrName, format: t.Optional[str] = None) -> Column:
1356
1356
  @meta()
1357
1357
  def to_timestamp(col: ColumnOrName, format: t.Optional[str] = None) -> Column:
1358
1358
  from sqlframe.base.function_alternatives import (
1359
- to_timestamp_just_timestamp,
1360
1359
  to_timestamp_tz,
1361
1360
  to_timestamp_with_time_zone,
1362
1361
  )
@@ -1366,9 +1365,6 @@ def to_timestamp(col: ColumnOrName, format: t.Optional[str] = None) -> Column:
1366
1365
  if session._is_duckdb:
1367
1366
  return to_timestamp_tz(col, format)
1368
1367
 
1369
- if session._is_bigquery:
1370
- return to_timestamp_just_timestamp(col, format)
1371
-
1372
1368
  if session._is_postgres:
1373
1369
  return to_timestamp_with_time_zone(col, format)
1374
1370
 
@@ -2805,9 +2801,11 @@ def try_avg(col: ColumnOrName) -> Column:
2805
2801
  return Column.invoke_anonymous_function(col, "TRY_AVG")
2806
2802
 
2807
2803
 
2808
- @meta(unsupported_engines="*")
2804
+ @meta()
2809
2805
  def try_divide(left: ColumnOrName, right: ColumnOrName) -> Column:
2810
- return Column.invoke_anonymous_function(left, "TRY_DIVIDE", right)
2806
+ return Column.invoke_expression_over_column(
2807
+ left, expression.SafeDivide, expression=Column.ensure_col(right).column_expression
2808
+ )
2811
2809
 
2812
2810
 
2813
2811
  @meta(unsupported_engines="*")
@@ -3068,7 +3066,7 @@ def character_length(str: ColumnOrName) -> Column:
3068
3066
  return Column.invoke_expression_over_column(str, expression.Length)
3069
3067
 
3070
3068
 
3071
- @meta(unsupported_engines=["bigquery", "postgres"])
3069
+ @meta(unsupported_engines=["postgres"])
3072
3070
  def contains(left: ColumnOrName, right: ColumnOrName) -> Column:
3073
3071
  return Column.invoke_expression_over_column(
3074
3072
  left, expression.Contains, expression=Column.ensure_col(right).column_expression
@@ -6594,27 +6592,16 @@ def unix_micros(col: ColumnOrName) -> Column:
6594
6592
  """
6595
6593
  from sqlframe.base.function_alternatives import unix_micros_multiply_epoch
6596
6594
 
6595
+ to_timestamp = get_func_from_session("to_timestamp")
6596
+
6597
6597
  if _get_session()._is_duckdb:
6598
6598
  return Column.invoke_anonymous_function(col, "epoch_us")
6599
6599
 
6600
- if _get_session()._is_bigquery:
6601
- return Column(
6602
- expression.Anonymous(
6603
- this="UNIX_MICROS",
6604
- expressions=[
6605
- expression.Anonymous(
6606
- this="TIMESTAMP",
6607
- expressions=[
6608
- Column.ensure_col(col).column_expression,
6609
- ],
6610
- )
6611
- ],
6612
- )
6613
- )
6614
-
6615
6600
  if _get_session()._is_postgres or _get_session()._is_snowflake:
6616
6601
  return unix_micros_multiply_epoch(col)
6617
6602
 
6603
+ col = to_timestamp(col)
6604
+
6618
6605
  return Column.invoke_anonymous_function(col, "unix_micros")
6619
6606
 
6620
6607
 
@@ -6666,22 +6653,6 @@ def unix_seconds(col: ColumnOrName) -> Column:
6666
6653
  if _get_session()._is_postgres:
6667
6654
  return unix_seconds_extract_epoch(col)
6668
6655
 
6669
- if _get_session()._is_bigquery:
6670
- return Column(
6671
- expression.Anonymous(
6672
- this="UNIX_SECONDS",
6673
- expressions=[
6674
- expression.Anonymous(
6675
- this="TIMESTAMP",
6676
- expressions=[
6677
- Column.ensure_col(col).column_expression,
6678
- expression.Literal.string("UTC"),
6679
- ],
6680
- )
6681
- ],
6682
- )
6683
- )
6684
-
6685
6656
  return Column.invoke_expression_over_column(col, expression.UnixSeconds)
6686
6657
 
6687
6658
 
@@ -304,7 +304,10 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
304
304
  elif isinstance(value, float):
305
305
  return "double"
306
306
  elif isinstance(value, datetime.datetime):
307
- return "timestamp"
307
+ if value.tzinfo:
308
+ # Spark defaults `timestamp` to be a timestamp with timezone
309
+ return "timestamp"
310
+ return "timestampntz"
308
311
  elif isinstance(value, datetime.date):
309
312
  return "date"
310
313
  elif isinstance(value, str):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.32.1
3
+ Version: 3.33.1
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -1,5 +1,5 @@
1
1
  prettytable<4
2
- sqlglot<26.18,>=24.0.0
2
+ sqlglot<26.20,>=24.0.0
3
3
  typing_extensions
4
4
 
5
5
  [bigquery]
@@ -10,7 +10,7 @@ google-cloud-bigquery[pandas]<4,>=3
10
10
  databricks-sql-connector[pyarrow]<5,>=3.6
11
11
 
12
12
  [dev]
13
- duckdb<1.3,>=1.2
13
+ duckdb<1.4,>=1.2
14
14
  findspark<3,>=2
15
15
  mypy<1.16,>=1.10.0
16
16
  openai<2,>=1.30
@@ -35,7 +35,7 @@ mkdocs==1.4.2
35
35
  pymdown-extensions
36
36
 
37
37
  [duckdb]
38
- duckdb<1.3,>=1.2
38
+ duckdb<1.4,>=1.2
39
39
  pandas<3,>=2
40
40
 
41
41
  [openai]
@@ -35,7 +35,7 @@ def duckdb_datatypes(duckdb_session: DuckDBSession) -> DuckDBDataFrame:
35
35
  "array<bigint>_col",
36
36
  "struct<a:bigint>_col",
37
37
  "date_col",
38
- "timestamp_col",
38
+ "timestampntz_col",
39
39
  "timestamptz_col",
40
40
  "boolean_col",
41
41
  ],
@@ -79,7 +79,7 @@ root
79
79
  |-- struct<a:bigint>_col: struct<a: bigint> (nullable = true)
80
80
  | |-- a: bigint (nullable = true)
81
81
  |-- date_col: date (nullable = true)
82
- |-- timestamp_col: timestamp (nullable = true)
82
+ |-- timestampntz_col: timestamp_ntz (nullable = true)
83
83
  |-- timestamptz_col: timestamp (nullable = true)
84
84
  |-- boolean_col: boolean (nullable = true)""".strip()
85
85
  )
@@ -157,8 +157,8 @@ def test_schema_nested(duckdb_datatypes: DuckDBDataFrame):
157
157
  )
158
158
  assert struct_fields[7].name == "date_col"
159
159
  assert struct_fields[7].dataType == types.DateType()
160
- assert struct_fields[8].name == "timestamp_col"
161
- assert struct_fields[8].dataType == types.TimestampType()
160
+ assert struct_fields[8].name == "timestampntz_col"
161
+ assert struct_fields[8].dataType == types.TimestampNTZType()
162
162
  assert struct_fields[9].name == "timestamptz_col"
163
163
  assert struct_fields[9].dataType == types.TimestampType()
164
164
  assert struct_fields[10].name == "boolean_col"
@@ -35,7 +35,7 @@ def spark_datatypes(spark_session: SparkSession) -> SparkDataFrame:
35
35
  "array<bigint>_col",
36
36
  "struct<a:bigint>_col",
37
37
  "date_col",
38
- "timestamp_col",
38
+ "timestampntz_col",
39
39
  "timestamptz_col",
40
40
  "boolean_col",
41
41
  ],
@@ -79,7 +79,7 @@ root
79
79
  |-- struct<a:bigint>_col: struct<a: bigint> (nullable = false)
80
80
  | |-- a: bigint (nullable = true)
81
81
  |-- date_col: date (nullable = true)
82
- |-- timestamp_col: timestamp (nullable = true)
82
+ |-- timestampntz_col: timestamp_ntz (nullable = true)
83
83
  |-- timestamptz_col: timestamp (nullable = true)
84
84
  |-- boolean_col: boolean (nullable = false)""".strip()
85
85
  )
@@ -157,8 +157,8 @@ def test_schema_nested(spark_datatypes: SparkDataFrame):
157
157
  )
158
158
  assert struct_fields[7].name == "date_col"
159
159
  assert struct_fields[7].dataType == types.DateType()
160
- assert struct_fields[8].name == "timestamp_col"
161
- assert struct_fields[8].dataType == types.TimestampType()
160
+ assert struct_fields[8].name == "timestampntz_col"
161
+ assert struct_fields[8].dataType == types.TimestampNTZType()
162
162
  assert struct_fields[9].name == "timestamptz_col"
163
163
  assert struct_fields[9].dataType == types.TimestampType()
164
164
  assert struct_fields[10].name == "boolean_col"
@@ -68,3 +68,23 @@ def test_column_get_field_struct(get_session: t.Callable[[], _BaseSession]):
68
68
  result3 = df.select(df.r.a.alias("a_dot")).collect()
69
69
  assert result3[0][0] == 1
70
70
  assert result3[1][0] == 2
71
+
72
+
73
+ def test_contains(get_session: t.Callable[[], _BaseSession], get_func):
74
+ session = get_session()
75
+ if session._is_postgres:
76
+ pytest.skip("Postgres does not support the contains function")
77
+ lit = get_func("lit", session)
78
+ df = session.createDataFrame([Row(a="foo"), Row(a="bar")])
79
+ df_foo = df.select(df.a.contains("foo")).collect()
80
+ assert df_foo[0][0] is True
81
+ assert df_foo[1][0] is False
82
+ df_foo_lit = df.select(df.a.contains(lit("foo"))).collect()
83
+ assert df_foo_lit[0][0] is True
84
+ assert df_foo_lit[1][0] is False
85
+ df_bar = df.select(df.a.contains("bar")).collect()
86
+ assert df_bar[0][0] is False
87
+ assert df_bar[1][0] is True
88
+ df_bar_lit = df.select(df.a.contains(lit("bar"))).collect()
89
+ assert df_bar_lit[0][0] is False
90
+ assert df_bar_lit[1][0] is True
@@ -172,7 +172,7 @@ def test_col(get_session_and_func, input, output):
172
172
  ([1, 2, 3], "array<bigint>"),
173
173
  (Row(a=1), "struct<a:bigint>"),
174
174
  (datetime.date(2022, 1, 1), "date"),
175
- (datetime.datetime(2022, 1, 1, 0, 0, 0), "timestamptz"),
175
+ (datetime.datetime(2022, 1, 1, 0, 0, 0), "timestampntz"),
176
176
  (datetime.datetime(2022, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc), "timestamptz"),
177
177
  (True, "boolean"),
178
178
  (bytes("test", "utf-8"), "binary"),
@@ -188,9 +188,15 @@ def test_typeof(get_session_and_func, get_types, arg, expected):
188
188
  if isinstance(session, PySparkSession)
189
189
  else dialect_to_string(session.execution_dialect)
190
190
  )
191
- if isinstance(session, (SparkSession, PySparkSession, DatabricksSession)):
191
+ if isinstance(session, (SparkSession, PySparkSession, DatabricksSession, BigQuerySession)):
192
192
  if expected == "timestamptz":
193
193
  expected = "timestamp"
194
+ if isinstance(session, PostgresSession):
195
+ if expected == "timestampntz":
196
+ expected = "timestamp"
197
+ if isinstance(session, BigQuerySession):
198
+ if expected == "timestampntz":
199
+ expected = "datetime"
194
200
  if isinstance(session, DuckDBSession):
195
201
  if expected == "binary":
196
202
  pytest.skip("DuckDB doesn't support binary")
@@ -218,6 +224,10 @@ def test_typeof(get_session_and_func, get_types, arg, expected):
218
224
  expected = "object"
219
225
  elif expected.startswith("array"):
220
226
  pytest.skip("Snowflake doesn't handle arrays properly in values clause")
227
+ # https://github.com/eakmanrq/sqlframe/issues/383#issuecomment-2870750972
228
+ if isinstance(session, PySparkSession):
229
+ if expected == "timestampntz":
230
+ expected = "timestamp"
221
231
  result = df.select(typeof("col").alias("test")).first()[0]
222
232
  assert exp.DataType.build(result, dialect=dialect) == exp.DataType.build(
223
233
  expected, dialect=dialect
@@ -1600,8 +1610,8 @@ def test_hash(get_session_and_func):
1600
1610
  session, hash = get_session_and_func("hash")
1601
1611
  df = session.createDataFrame([("ABC", "DEF")], ["c1", "c2"])
1602
1612
  if isinstance(session, DuckDBSession):
1603
- assert df.select(hash("c1").alias("hash")).first()[0] == 1241521928161919141
1604
- assert df.select(hash("c1", "c2").alias("hash")).first()[0] == 7524280102280623017
1613
+ assert df.select(hash("c1").alias("hash")).first()[0] == 14760980515311954005
1614
+ assert df.select(hash("c1", "c2").alias("hash")).first()[0] == 3670181680252885023
1605
1615
  # Bigquery only supports hashing a single column
1606
1616
  elif isinstance(session, BigQuerySession):
1607
1617
  assert df.select(hash("c1").alias("hash")).first()[0] == 228873345217803866
@@ -3102,10 +3112,11 @@ def test_try_divide(get_session_and_func, get_func):
3102
3112
  session, try_divide = get_session_and_func("try_divide")
3103
3113
  make_interval = get_func("make_interval", session)
3104
3114
  lit = get_func("lit", session)
3105
- df = session.createDataFrame([(6000, 15), (1990, 2)], ["a", "b"])
3115
+ df = session.createDataFrame([(6000, 15), (1990, 2), (100, 0)], ["a", "b"])
3106
3116
  assert df.select(try_divide(df.a, df.b).alias("r")).collect() == [
3107
3117
  Row(r=400.0),
3108
3118
  Row(r=995.0),
3119
+ Row(r=None),
3109
3120
  ]
3110
3121
  df = session.createDataFrame([(1, 2)], ["year", "month"])
3111
3122
  assert (
@@ -3505,9 +3516,11 @@ def test_character_length(get_session_and_func, get_func):
3505
3516
 
3506
3517
  def test_contains(get_session_and_func, get_func):
3507
3518
  session, contains = get_session_and_func("contains")
3508
- to_binary = get_func("to_binary", session)
3519
+ if isinstance(session, BigQuerySession):
3520
+ pytest.skip("BigQuery just supports constaints for the contains function")
3509
3521
  df = session.createDataFrame([("Spark SQL", "Spark")], ["a", "b"])
3510
3522
  assert df.select(contains(df.a, df.b).alias("r")).collect() == [Row(r=True)]
3523
+ to_binary = get_func("to_binary", session)
3511
3524
  df = session.createDataFrame(
3512
3525
  [
3513
3526
  (
@@ -4205,10 +4218,12 @@ def test_median(get_session_and_func, get_func):
4205
4218
  ],
4206
4219
  schema=("course", "year", "earnings"),
4207
4220
  )
4208
- assert df.groupby("course").agg(median("earnings")).collect() == [
4209
- Row(value1="Java", value2=22000.0),
4210
- Row(value1="dotNET", value2=10000.0),
4211
- ]
4221
+ assert sorted(df.groupby("course").agg(median("earnings")).collect()) == sorted(
4222
+ [
4223
+ Row(value1="Java", value2=22000.0),
4224
+ Row(value1="dotNET", value2=10000.0),
4225
+ ]
4226
+ )
4212
4227
 
4213
4228
 
4214
4229
  def test_mode(get_session_and_func, get_func):
@@ -228,3 +228,7 @@ def test_over():
228
228
 
229
229
  def test_get_item():
230
230
  assert F.col("cola").getItem(1).sql() == "ELEMENT_AT(cola, (1 + 1)) AS element_at__cola__"
231
+
232
+
233
+ def test_contains():
234
+ assert F.col("cola").contains("foo").sql() == "CONTAINS(cola, 'foo')"
@@ -3012,8 +3012,11 @@ def test_try_avg(expression, expected):
3012
3012
  @pytest.mark.parametrize(
3013
3013
  "expression, expected",
3014
3014
  [
3015
- (SF.try_divide("cola", "colb"), "TRY_DIVIDE(cola, colb)"),
3016
- (SF.try_divide(SF.col("cola"), SF.col("colb")), "TRY_DIVIDE(cola, colb)"),
3015
+ (SF.try_divide("cola", "colb"), "IF(colb <> 0, cola / colb, NULL)"),
3016
+ (
3017
+ SF.try_divide(SF.col("cola"), SF.col("colb")),
3018
+ "IF(colb <> 0, cola / colb, NULL)",
3019
+ ),
3017
3020
  ],
3018
3021
  )
3019
3022
  def test_try_divide(expression, expected):
@@ -4701,8 +4704,8 @@ def test_unix_date(expression, expected):
4701
4704
  @pytest.mark.parametrize(
4702
4705
  "expression, expected",
4703
4706
  [
4704
- (SF.unix_micros("cola"), "UNIX_MICROS(cola)"),
4705
- (SF.unix_micros(SF.col("cola")), "UNIX_MICROS(cola)"),
4707
+ (SF.unix_micros("cola"), "UNIX_MICROS(CAST(cola AS TIMESTAMP_LTZ))"),
4708
+ (SF.unix_micros(SF.col("cola")), "UNIX_MICROS(CAST(cola AS TIMESTAMP_LTZ))"),
4706
4709
  ],
4707
4710
  )
4708
4711
  def test_unix_micros(expression, expected):
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