sqlframe 3.36.3__tar.gz → 3.38.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 (388) hide show
  1. {sqlframe-3.36.3 → sqlframe-3.38.0}/PKG-INFO +1 -1
  2. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/bigquery.md +6 -0
  3. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/duckdb.md +4 -0
  4. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/postgres.md +3 -0
  5. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/snowflake.md +4 -0
  6. {sqlframe-3.36.3 → sqlframe-3.38.0}/setup.py +3 -3
  7. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/_version.py +2 -2
  8. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/column.py +8 -1
  9. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/functions.py +10 -10
  10. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/session.py +6 -0
  11. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/types.py +1 -1
  12. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/PKG-INFO +1 -1
  13. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/requires.txt +3 -3
  14. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_column.py +18 -0
  15. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_int_functions.py +37 -17
  16. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_column.py +1 -1
  17. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_functions.py +8 -8
  18. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_types.py +2 -2
  19. {sqlframe-3.36.3 → sqlframe-3.38.0}/.github/CODEOWNERS +0 -0
  20. {sqlframe-3.36.3 → sqlframe-3.38.0}/.github/workflows/main.workflow.yaml +0 -0
  21. {sqlframe-3.36.3 → sqlframe-3.38.0}/.github/workflows/publish.workflow.yaml +0 -0
  22. {sqlframe-3.36.3 → sqlframe-3.38.0}/.gitignore +0 -0
  23. {sqlframe-3.36.3 → sqlframe-3.38.0}/.pre-commit-config.yaml +0 -0
  24. {sqlframe-3.36.3 → sqlframe-3.38.0}/.readthedocs.yaml +0 -0
  25. {sqlframe-3.36.3 → sqlframe-3.38.0}/LICENSE +0 -0
  26. {sqlframe-3.36.3 → sqlframe-3.38.0}/Makefile +0 -0
  27. {sqlframe-3.36.3 → sqlframe-3.38.0}/README.md +0 -0
  28. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/add_chatgpt_support.md +0 -0
  29. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  30. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  31. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  32. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  33. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  34. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  35. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  36. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  37. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/but_wait_theres_more.gif +0 -0
  38. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/cake.gif +0 -0
  39. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/you_get_pyspark_api.gif +0 -0
  40. {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  41. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/configuration.md +0 -0
  42. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/databricks.md +0 -0
  43. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/bigquery.md +0 -0
  44. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/duckdb.md +0 -0
  45. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/images/SF.png +0 -0
  46. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/images/favicon.png +0 -0
  47. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/images/sqlframe_logo.png +0 -0
  48. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/postgres.md +0 -0
  49. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/images/SF.png +0 -0
  50. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/images/favicon.png +0 -0
  51. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/images/sqlframe_logo.png +0 -0
  52. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/index.md +0 -0
  53. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/redshift.md +0 -0
  54. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/requirements.txt +0 -0
  55. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/spark.md +0 -0
  56. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/standalone.md +0 -0
  57. {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/stylesheets/extra.css +0 -0
  58. {sqlframe-3.36.3 → sqlframe-3.38.0}/mkdocs.yml +0 -0
  59. {sqlframe-3.36.3 → sqlframe-3.38.0}/pytest.ini +0 -0
  60. {sqlframe-3.36.3 → sqlframe-3.38.0}/renovate.json +0 -0
  61. {sqlframe-3.36.3 → sqlframe-3.38.0}/setup.cfg +0 -0
  62. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/LICENSE +0 -0
  63. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/__init__.py +0 -0
  64. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/__init__.py +0 -0
  65. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/_typing.py +0 -0
  66. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/catalog.py +0 -0
  67. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/dataframe.py +0 -0
  68. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/decorators.py +0 -0
  69. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/exceptions.py +0 -0
  70. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/function_alternatives.py +0 -0
  71. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/group.py +0 -0
  72. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/__init__.py +0 -0
  73. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  74. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  75. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  76. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/table_mixins.py +0 -0
  77. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/normalize.py +0 -0
  78. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/operations.py +0 -0
  79. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/readerwriter.py +0 -0
  80. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/table.py +0 -0
  81. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/transforms.py +0 -0
  82. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/udf.py +0 -0
  83. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/util.py +0 -0
  84. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/window.py +0 -0
  85. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/__init__.py +0 -0
  86. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/catalog.py +0 -0
  87. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/column.py +0 -0
  88. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/dataframe.py +0 -0
  89. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/functions.py +0 -0
  90. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/functions.pyi +0 -0
  91. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/group.py +0 -0
  92. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/readwriter.py +0 -0
  93. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/session.py +0 -0
  94. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/table.py +0 -0
  95. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/types.py +0 -0
  96. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/udf.py +0 -0
  97. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/window.py +0 -0
  98. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/__init__.py +0 -0
  99. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/catalog.py +0 -0
  100. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/column.py +0 -0
  101. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/dataframe.py +0 -0
  102. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/functions.py +0 -0
  103. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/functions.pyi +0 -0
  104. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/group.py +0 -0
  105. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/readwriter.py +0 -0
  106. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/session.py +0 -0
  107. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/table.py +0 -0
  108. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/types.py +0 -0
  109. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/udf.py +0 -0
  110. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/window.py +0 -0
  111. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/__init__.py +0 -0
  112. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/catalog.py +0 -0
  113. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/column.py +0 -0
  114. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/dataframe.py +0 -0
  115. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/functions.py +0 -0
  116. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/functions.pyi +0 -0
  117. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/group.py +0 -0
  118. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/readwriter.py +0 -0
  119. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/session.py +0 -0
  120. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/table.py +0 -0
  121. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/types.py +0 -0
  122. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/udf.py +0 -0
  123. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/window.py +0 -0
  124. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/__init__.py +0 -0
  125. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/catalog.py +0 -0
  126. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/column.py +0 -0
  127. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/dataframe.py +0 -0
  128. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/functions.py +0 -0
  129. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/functions.pyi +0 -0
  130. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/group.py +0 -0
  131. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/readwriter.py +0 -0
  132. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/session.py +0 -0
  133. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/table.py +0 -0
  134. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/types.py +0 -0
  135. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/udf.py +0 -0
  136. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/window.py +0 -0
  137. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/py.typed +0 -0
  138. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/__init__.py +0 -0
  139. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/catalog.py +0 -0
  140. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/column.py +0 -0
  141. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/dataframe.py +0 -0
  142. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/functions.py +0 -0
  143. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/group.py +0 -0
  144. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/readwriter.py +0 -0
  145. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/session.py +0 -0
  146. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/table.py +0 -0
  147. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/types.py +0 -0
  148. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/udf.py +0 -0
  149. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/window.py +0 -0
  150. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/__init__.py +0 -0
  151. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/catalog.py +0 -0
  152. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/column.py +0 -0
  153. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/dataframe.py +0 -0
  154. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/functions.py +0 -0
  155. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/functions.pyi +0 -0
  156. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/group.py +0 -0
  157. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/readwriter.py +0 -0
  158. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/session.py +0 -0
  159. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/table.py +0 -0
  160. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/types.py +0 -0
  161. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/udf.py +0 -0
  162. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/window.py +0 -0
  163. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/__init__.py +0 -0
  164. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/catalog.py +0 -0
  165. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/column.py +0 -0
  166. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/dataframe.py +0 -0
  167. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/functions.py +0 -0
  168. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/functions.pyi +0 -0
  169. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/group.py +0 -0
  170. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/readwriter.py +0 -0
  171. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/session.py +0 -0
  172. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/table.py +0 -0
  173. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/types.py +0 -0
  174. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/udf.py +0 -0
  175. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/window.py +0 -0
  176. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/__init__.py +0 -0
  177. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/catalog.py +0 -0
  178. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/column.py +0 -0
  179. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/dataframe.py +0 -0
  180. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/functions.py +0 -0
  181. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/group.py +0 -0
  182. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/readwriter.py +0 -0
  183. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/session.py +0 -0
  184. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/table.py +0 -0
  185. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/types.py +0 -0
  186. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/udf.py +0 -0
  187. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/window.py +0 -0
  188. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/testing/__init__.py +0 -0
  189. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/testing/utils.py +0 -0
  190. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/SOURCES.txt +0 -0
  191. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/dependency_links.txt +0 -0
  192. {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/top_level.txt +0 -0
  193. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/__init__.py +0 -0
  194. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/common_fixtures.py +0 -0
  195. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/conftest.py +0 -0
  196. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee.csv +0 -0
  197. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee.json +0 -0
  198. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee.parquet +0 -0
  199. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  200. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  201. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  202. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  203. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  204. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  205. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  206. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  207. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  208. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  209. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  210. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  211. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  212. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  213. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_extra_line.csv +0 -0
  214. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/issue_219.csv +0 -0
  215. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  216. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  217. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  218. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  219. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  220. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  221. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  222. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  223. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  224. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  225. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  226. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  227. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  228. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  229. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  230. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  231. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  232. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  233. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  234. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  235. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  236. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  237. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  238. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  239. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  240. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  241. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  242. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  243. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  244. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  245. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  246. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  247. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  248. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  249. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  250. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  251. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  252. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  253. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  254. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  255. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  256. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  257. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  258. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  259. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  260. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  261. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  262. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  263. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  264. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  265. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  266. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  267. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  268. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  269. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  270. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  271. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  272. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  273. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  274. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  275. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  276. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  277. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  278. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  279. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  280. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  281. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  282. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  283. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  284. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  285. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  286. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  287. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  288. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  289. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  290. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  291. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  292. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  293. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  294. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  295. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  296. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  297. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  298. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  299. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  300. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  301. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  302. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  303. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  304. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  305. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  306. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  307. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  308. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  309. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  310. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  311. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  312. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  313. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  314. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/__init__.py +0 -0
  315. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/__init__.py +0 -0
  316. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/__init__.py +0 -0
  317. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  318. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  319. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  320. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/__init__.py +0 -0
  321. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
  322. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
  323. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
  324. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/__init__.py +0 -0
  325. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  326. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  327. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  328. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  329. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  330. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  331. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
  332. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/__init__.py +0 -0
  333. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  334. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  335. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  336. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  337. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/redshift/__init__.py +0 -0
  338. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  339. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  340. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/__init__.py +0 -0
  341. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  342. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  343. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  344. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/spark/__init__.py +0 -0
  345. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  346. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  347. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
  348. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_reader.py +0 -0
  349. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_session.py +0 -0
  350. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_table.py +0 -0
  351. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_writer.py +0 -0
  352. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_int_testing.py +0 -0
  353. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/fixtures.py +0 -0
  354. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_dataframe.py +0 -0
  355. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_dataframe_stats.py +0 -0
  356. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_grouped_data.py +0 -0
  357. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_session.py +0 -0
  358. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/types.py +0 -0
  359. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/__init__.py +0 -0
  360. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/bigquery/__init__.py +0 -0
  361. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/bigquery/test_activate.py +0 -0
  362. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/conftest.py +0 -0
  363. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/databricks/__init__.py +0 -0
  364. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/databricks/test_activate.py +0 -0
  365. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/duck/__init__.py +0 -0
  366. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/duck/test_activate.py +0 -0
  367. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/duck/test_reader_options.py +0 -0
  368. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/postgres/__init__.py +0 -0
  369. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/postgres/test_activate.py +0 -0
  370. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/redshift/__init__.py +0 -0
  371. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/redshift/test_activate.py +0 -0
  372. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/snowflake/__init__.py +0 -0
  373. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/snowflake/test_activate.py +0 -0
  374. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/spark/__init__.py +0 -0
  375. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/spark/test_activate.py +0 -0
  376. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/spark/test_reader_options.py +0 -0
  377. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/__init__.py +0 -0
  378. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/fixtures.py +0 -0
  379. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_activate.py +0 -0
  380. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_dataframe.py +0 -0
  381. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  382. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_session.py +0 -0
  383. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  384. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_window.py +0 -0
  385. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_activate.py +0 -0
  386. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_base_reader_options.py +0 -0
  387. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_catalog.py +0 -0
  388. {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.36.3
3
+ Version: 3.38.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
@@ -332,8 +332,12 @@ See something that you would like to see supported? [Open an issue](https://gith
332
332
  * [avg](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.avg.html)
333
333
  * [base64](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.base64.html)
334
334
  * [bin](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bin.html)
335
+ * [bit_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_and.html)
336
+ * [bit_count](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_count.html)
335
337
  * [bit_length](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_length.html)
336
338
  * Symbols are not supported
339
+ * [bit_or](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_or.html)
340
+ * [bit_xor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_xor.html)
337
341
  * [bitwiseNOT](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwiseNOT.html)
338
342
  * [bitwise_not](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwise_not.html)
339
343
  * [bool_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bool_and.html)
@@ -416,6 +420,8 @@ See something that you would like to see supported? [Open an issue](https://gith
416
420
  * [isnull](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.isnull.html)
417
421
  * [lag](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lag.html)
418
422
  * [last_day](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_day.html)
423
+ * [last_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_value.html)
424
+ * Must be used with a window function
419
425
  * [lcase](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lcase.html)
420
426
  * [lead](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lead.html)
421
427
  * [least](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.least.html)
@@ -295,7 +295,11 @@ See something that you would like to see supported? [Open an issue](https://gith
295
295
  * [avg](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.avg.html)
296
296
  * [base64](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.base64.html)
297
297
  * [bin](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bin.html)
298
+ * [bit_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_and.html)
299
+ * [bit_count](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_count.html)
298
300
  * [bit_length](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_length.html)
301
+ * [bit_or](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_or.html)
302
+ * [bit_xor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_xor.html)
299
303
  * [bitwiseNOT](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwiseNOT.html)
300
304
  * [bitwise_not](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwise_not.html)
301
305
  * [bool_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bool_and.html)
@@ -304,7 +304,10 @@ See something that you would like to see supported? [Open an issue](https://gith
304
304
  * [atanh](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.atanh.html)
305
305
  * [avg](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.avg.html)
306
306
  * [base64](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.base64.html)
307
+ * [bit_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_and.html)
307
308
  * [bit_length](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_length.html)
309
+ * [bit_or](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_or.html)
310
+ * [bit_xor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_xor.html)
308
311
  * [bitwiseNOT](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwiseNOT.html)
309
312
  * [bitwise_not](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwise_not.html)
310
313
  * [bool_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bool_and.html)
@@ -394,6 +394,8 @@ See something that you would like to see supported? [Open an issue](https://gith
394
394
  * [expr](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.expr.html)
395
395
  * [extract](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.extract.html)
396
396
  * [factorial](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.factorial.html)
397
+ * [first_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.first_value.html)
398
+ * Must be used with a window function and `ignoreNulls` can behave slightly different in certain situations
397
399
  * [flatten](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.flatten.html)
398
400
  * [floor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.floor.html)
399
401
  * [format_number](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.format_number.html)
@@ -414,6 +416,8 @@ See something that you would like to see supported? [Open an issue](https://gith
414
416
  * [kurtosis](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.kurtosis.html)
415
417
  * [lag](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lag.html)
416
418
  * [last_day](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_day.html)
419
+ * [last_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_value.html)
420
+ * Must be used with a window function
417
421
  * [lead](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lead.html)
418
422
  * [least](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.least.html)
419
423
  * [left](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.left.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.34",
23
+ "sqlglot>=24.0.0,<27.4",
24
24
  "typing_extensions",
25
25
  ],
26
26
  extras_require={
@@ -31,12 +31,12 @@ setup(
31
31
  "dev": [
32
32
  "duckdb>=1.2,<1.4",
33
33
  "findspark>=2,<3",
34
- "mypy>=1.10.0,<1.17",
34
+ "mypy>=1.10.0,<1.18",
35
35
  "openai>=1.30,<2",
36
36
  "pandas>=2,<3",
37
37
  "pandas-stubs>=2,<3",
38
38
  "psycopg>=3.1,<4",
39
- "pyarrow>=10,<21",
39
+ "pyarrow>=10,<22",
40
40
  "pyspark>=2,<3.6",
41
41
  "pytest>=8.2.0,<8.5",
42
42
  "pytest-forked",
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '3.36.3'
21
- __version_tuple__ = version_tuple = (3, 36, 3)
20
+ __version__ = version = '3.38.0'
21
+ __version_tuple__ = version_tuple = (3, 38, 0)
@@ -222,6 +222,12 @@ class Column:
222
222
  else:
223
223
  value = value.astimezone(datetime.timezone.utc).isoformat(sep=" ")
224
224
  return cls(exp.cast(exp.Literal.string(value), exp.DataType.Type.TIMESTAMPTZ))
225
+ elif isinstance(value, datetime.timedelta):
226
+ return cls(
227
+ exp.Interval(
228
+ this=exp.Literal.string(int(value.total_seconds())), unit=exp.Var(this="SECOND")
229
+ )
230
+ )
225
231
  return cls(exp.convert(value))
226
232
 
227
233
  @classmethod
@@ -413,8 +419,9 @@ class Column:
413
419
  return self.invoke_expression_over_column(self, exp.StartsWith, expression=value.expression)
414
420
 
415
421
  def endswith(self, value: t.Union[str, Column]) -> Column:
422
+ ends_with_func = get_func_from_session("endswith")
416
423
  value = self._lit(value) if not isinstance(value, Column) else value
417
- return self.invoke_anonymous_function(self, "ENDSWITH", value)
424
+ return ends_with_func(self, value)
418
425
 
419
426
  def rlike(self, regexp: str) -> Column:
420
427
  return self.invoke_expression_over_column(
@@ -2110,24 +2110,24 @@ def array_size(col: ColumnOrName) -> Column:
2110
2110
  return Column.invoke_expression_over_column(col, expression.ArraySize)
2111
2111
 
2112
2112
 
2113
- @meta(unsupported_engines="*")
2113
+ @meta(unsupported_engines="snowflake")
2114
2114
  def bit_and(col: ColumnOrName) -> Column:
2115
- return Column.invoke_anonymous_function(col, "BIT_AND")
2115
+ return Column.invoke_expression_over_column(col, expression.BitwiseAndAgg)
2116
2116
 
2117
2117
 
2118
- @meta(unsupported_engines="*")
2118
+ @meta(unsupported_engines="snowflake")
2119
2119
  def bit_or(col: ColumnOrName) -> Column:
2120
- return Column.invoke_anonymous_function(col, "BIT_OR")
2120
+ return Column.invoke_expression_over_column(col, expression.BitwiseOrAgg)
2121
2121
 
2122
2122
 
2123
- @meta(unsupported_engines="*")
2123
+ @meta(unsupported_engines="snowflake")
2124
2124
  def bit_xor(col: ColumnOrName) -> Column:
2125
- return Column.invoke_anonymous_function(col, "BIT_XOR")
2125
+ return Column.invoke_expression_over_column(col, expression.BitwiseXorAgg)
2126
2126
 
2127
2127
 
2128
- @meta(unsupported_engines="*")
2128
+ @meta(unsupported_engines=["postgres", "snowflake"])
2129
2129
  def bit_count(col: ColumnOrName) -> Column:
2130
- return Column.invoke_anonymous_function(col, "BIT_COUNT")
2130
+ return Column.invoke_expression_over_column(col, expression.BitwiseCountAgg)
2131
2131
 
2132
2132
 
2133
2133
  @meta(unsupported_engines="*")
@@ -3293,7 +3293,7 @@ def find_in_set(str: ColumnOrName, str_array: ColumnOrName) -> Column:
3293
3293
  return Column.invoke_anonymous_function(str, "find_in_set", str_array)
3294
3294
 
3295
3295
 
3296
- @meta(unsupported_engines=["bigquery", "postgres", "snowflake"])
3296
+ @meta(unsupported_engines=["bigquery", "postgres"])
3297
3297
  def first_value(col: ColumnOrName, ignoreNulls: t.Optional[t.Union[bool, Column]] = None) -> Column:
3298
3298
  """Returns the first value of `col` for a group of rows. It will return the first non-null
3299
3299
  value it sees when `ignoreNulls` is set to true. If all values are null, then null is returned.
@@ -3959,7 +3959,7 @@ def json_object_keys(col: ColumnOrName) -> Column:
3959
3959
  return Column.invoke_anonymous_function(col, "json_object_keys")
3960
3960
 
3961
3961
 
3962
- @meta(unsupported_engines=["bigquery", "postgres", "snowflake"])
3962
+ @meta(unsupported_engines="postgres")
3963
3963
  def last_value(col: ColumnOrName, ignoreNulls: t.Optional[t.Union[bool, Column]] = None) -> Column:
3964
3964
  """Returns the last value of `col` for a group of rows. It will return the last non-null
3965
3965
  value it sees when `ignoreNulls` is set to true. If all values are null, then null is returned.
@@ -12,6 +12,7 @@ from collections import defaultdict
12
12
  from functools import cached_property
13
13
 
14
14
  import sqlglot
15
+ from dateutil.relativedelta import relativedelta
15
16
  from sqlglot import Dialect, exp
16
17
  from sqlglot.dialects.dialect import DialectType, NormalizationStrategy
17
18
  from sqlglot.expressions import parse_identifier
@@ -613,6 +614,11 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
613
614
  return [cls._to_value(x) for x in value]
614
615
  elif isinstance(value, datetime.datetime):
615
616
  return value.replace(tzinfo=None)
617
+ elif isinstance(value, relativedelta):
618
+ return datetime.timedelta(
619
+ days=value.days, hours=value.hours, minutes=value.minutes, seconds=value.seconds
620
+ )
621
+
616
622
  return value
617
623
 
618
624
  @classmethod
@@ -42,7 +42,7 @@ class DataTypeWithLength(DataType):
42
42
  def __repr__(self) -> str:
43
43
  return f"{self.__class__.__name__}({self.length})"
44
44
 
45
- def __str__(self) -> str:
45
+ def simpleString(self) -> str:
46
46
  return f"{self.typeName()}({self.length})"
47
47
 
48
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.36.3
3
+ Version: 3.38.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
@@ -1,5 +1,5 @@
1
1
  prettytable<4
2
- sqlglot<26.34,>=24.0.0
2
+ sqlglot<27.4,>=24.0.0
3
3
  typing_extensions
4
4
 
5
5
  [bigquery]
@@ -12,13 +12,13 @@ databricks-sql-connector[pyarrow]<5,>=3.6
12
12
  [dev]
13
13
  duckdb<1.4,>=1.2
14
14
  findspark<3,>=2
15
- mypy<1.17,>=1.10.0
15
+ mypy<1.18,>=1.10.0
16
16
  openai<2,>=1.30
17
17
  pandas-stubs<3,>=2
18
18
  pandas<3,>=2
19
19
  pre-commit<5,>=3.7
20
20
  psycopg<4,>=3.1
21
- pyarrow<21,>=10
21
+ pyarrow<22,>=10
22
22
  pyspark<3.6,>=2
23
23
  pytest-forked
24
24
  pytest-postgresql<8,>=6
@@ -90,3 +90,21 @@ def test_contains(get_session: t.Callable[[], _BaseSession], get_func):
90
90
  df_bar_lit = df.select(df.a.contains(lit("bar"))).collect()
91
91
  assert df_bar_lit[0][0] is False
92
92
  assert df_bar_lit[1][0] is True
93
+
94
+
95
+ def test_endswith(get_session: t.Callable[[], _BaseSession], get_func):
96
+ session = get_session()
97
+ lit = get_func("lit", session)
98
+ df = session.createDataFrame([Row(a="abc"), Row(a="def")])
99
+ df_endswith_c = df.select(df.a.endswith("c")).collect()
100
+ assert df_endswith_c[0][0] is True
101
+ assert df_endswith_c[1][0] is False
102
+ df_endswith_c_lit = df.select(df.a.endswith(lit("c"))).collect()
103
+ assert df_endswith_c_lit[0][0] is True
104
+ assert df_endswith_c_lit[1][0] is False
105
+ df_endswith_f = df.select(df.a.endswith("f")).collect()
106
+ assert df_endswith_f[0][0] is False
107
+ assert df_endswith_f[1][0] is True
108
+ df_endswith_f_lit = df.select(df.a.endswith(lit("f"))).collect()
109
+ assert df_endswith_f_lit[0][0] is False
110
+ assert df_endswith_f_lit[1][0] is True
@@ -121,6 +121,7 @@ def get_types() -> t.Callable:
121
121
  ),
122
122
  ({"cola": 1}, {"cola": 1}),
123
123
  (Row(**{"cola": 1, "colb": "test"}), Row(**{"cola": 1, "colb": "test"})),
124
+ (datetime.timedelta(1), datetime.timedelta(1)),
124
125
  ],
125
126
  )
126
127
  def test_lit(get_session_and_func, arg, expected):
@@ -141,6 +142,11 @@ def test_lit(get_session_and_func, arg, expected):
141
142
  if isinstance(session, SnowflakeSession):
142
143
  if isinstance(arg, Row):
143
144
  pytest.skip("Snowflake doesn't support literal row types")
145
+ if isinstance(arg, datetime.timedelta):
146
+ pytest.skip("Snowflake doesn't support literal timedelta types")
147
+ if isinstance(session, DatabricksSession):
148
+ if isinstance(arg, datetime.timedelta):
149
+ pytest.skip("Databricks doesn't support literal timedelta types")
144
150
  if isinstance(session, DuckDBSession):
145
151
  if isinstance(arg, dict):
146
152
  expected = Row(**expected)
@@ -1572,6 +1578,16 @@ def test_timestamp_add(get_session_and_func, get_func):
1572
1578
  actual = row[0].replace(tzinfo=None) if row[0] else None
1573
1579
  assert actual == expected_days[i], f"Day subtraction failed for row {i}"
1574
1580
 
1581
+ # Test adding quarters
1582
+ result = df.select(timestamp_add("quarter", lit(2), "ts")).collect()
1583
+ expected_quarters = [
1584
+ datetime.datetime(2016, 9, 11, 9, 0, 7),
1585
+ datetime.datetime(2024, 10, 2, 9, 0, 7),
1586
+ ]
1587
+ for i, row in enumerate(result):
1588
+ actual = row[0].replace(tzinfo=None) if row[0] else None
1589
+ assert actual == expected_quarters[i], f"Quarter addition failed for row {i}"
1590
+
1575
1591
 
1576
1592
  def test_window(get_session_and_func, get_func):
1577
1593
  session, window = get_session_and_func("window")
@@ -3738,7 +3754,6 @@ def test_elt(get_session_and_func, get_func):
3738
3754
 
3739
3755
  def test_endswith(get_session_and_func, get_func):
3740
3756
  session, endswith = get_session_and_func("endswith")
3741
- to_binary = get_func("to_binary", session)
3742
3757
  df = session.createDataFrame(
3743
3758
  [
3744
3759
  (
@@ -3758,6 +3773,7 @@ def test_endswith(get_session_and_func, get_func):
3758
3773
  ],
3759
3774
  ["e", "f"],
3760
3775
  )
3776
+ to_binary = get_func("to_binary", session)
3761
3777
  df = df.select(to_binary("e").alias("e"), to_binary("f").alias("f"))
3762
3778
  assert df.select(endswith("e", "f"), endswith("f", "e")).collect() == [
3763
3779
  Row(value1=True, value2=False)
@@ -3825,14 +3841,15 @@ def test_first_value(get_session_and_func, get_func, get_window):
3825
3841
  session, first_value = get_session_and_func("first_value")
3826
3842
  col = get_func("col", session)
3827
3843
  Window = get_window(session)
3828
- assert session.createDataFrame(
3829
- [(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
3830
- ).select(first_value("a"), first_value("b")).collect() == [Row(value1=None, value2=1)]
3831
- assert session.createDataFrame(
3832
- [(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
3833
- ).select(first_value("a", True), first_value("b", True)).collect() == [
3834
- Row(value1="a", value2=1)
3835
- ]
3844
+ if not isinstance(session, (BigQuerySession, SnowflakeSession)):
3845
+ assert session.createDataFrame(
3846
+ [(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
3847
+ ).select(first_value("a"), first_value("b")).collect() == [Row(value1=None, value2=1)]
3848
+ assert session.createDataFrame(
3849
+ [(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
3850
+ ).select(first_value("a", True), first_value("b", True)).collect() == [
3851
+ Row(value1="a", value2=1)
3852
+ ]
3836
3853
  data = {
3837
3854
  "b": [None, None, "a", None, "b", "c", None, None, None, "d"],
3838
3855
  "idx": list(range(10)),
@@ -3843,8 +3860,8 @@ def test_first_value(get_session_and_func, get_func, get_window):
3843
3860
  assert session.createDataFrame(pd.DataFrame(data)).withColumn(
3844
3861
  "bf", first_value("b", ignoreNulls=True).over(window)
3845
3862
  ).collect() == [
3846
- Row(b=None, idx=0, bf=None),
3847
- Row(b=None, idx=1, bf=None),
3863
+ Row(b=None, idx=0, bf=None if not isinstance(session, SnowflakeSession) else "a"),
3864
+ Row(b=None, idx=1, bf=None if not isinstance(session, SnowflakeSession) else "a"),
3848
3865
  Row(b="a", idx=2, bf="a"),
3849
3866
  Row(b=None, idx=3, bf="a"),
3850
3867
  Row(b="b", idx=4, bf="a"),
@@ -4069,12 +4086,15 @@ def test_last_value(get_session_and_func, get_func, get_window):
4069
4086
  session, last_value = get_session_and_func("last_value")
4070
4087
  col = get_func("col", session)
4071
4088
  Window = get_window(session)
4072
- assert session.createDataFrame(
4073
- [("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
4074
- ).select(last_value("a"), last_value("b")).collect() == [Row(value1=None, value2=2)]
4075
- assert session.createDataFrame(
4076
- [("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
4077
- ).select(last_value("a", True), last_value("b", True)).collect() == [Row(value1="b", value2=2)]
4089
+ if not isinstance(session, (BigQuerySession, SnowflakeSession)):
4090
+ assert session.createDataFrame(
4091
+ [("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
4092
+ ).select(last_value("a"), last_value("b")).collect() == [Row(value1=None, value2=2)]
4093
+ assert session.createDataFrame(
4094
+ [("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
4095
+ ).select(last_value("a", True), last_value("b", True)).collect() == [
4096
+ Row(value1="b", value2=2)
4097
+ ]
4078
4098
  data = {
4079
4099
  "b": ["a", None, None, None, "b", "c", None, None, None, "d"],
4080
4100
  "idx": list(range(10)),
@@ -105,7 +105,7 @@ def test_startswith():
105
105
 
106
106
 
107
107
  def test_endswith():
108
- assert (F.col("cola").endswith("test")).sql() == "ENDSWITH(cola, 'test')"
108
+ assert (F.col("cola").endswith("test")).sql() == "ENDSWITH(cola, 'test') AS endswith__cola__"
109
109
 
110
110
 
111
111
  def test_rlike():
@@ -1256,8 +1256,8 @@ def test_month(expression, expected):
1256
1256
  @pytest.mark.parametrize(
1257
1257
  "expression, expected",
1258
1258
  [
1259
- (SF.dayofweek("cola"), "DAYOFWEEK(TO_DATE(cola))"),
1260
- (SF.dayofweek(SF.col("cola")), "DAYOFWEEK(TO_DATE(cola))"),
1259
+ (SF.dayofweek("cola"), "DAYOFWEEK(cola)"),
1260
+ (SF.dayofweek(SF.col("cola")), "DAYOFWEEK(cola)"),
1261
1261
  ],
1262
1262
  )
1263
1263
  def test_dayofweek(expression, expected):
@@ -1267,8 +1267,8 @@ def test_dayofweek(expression, expected):
1267
1267
  @pytest.mark.parametrize(
1268
1268
  "expression, expected",
1269
1269
  [
1270
- (SF.dayofmonth("cola"), "DAYOFMONTH(TO_DATE(cola))"),
1271
- (SF.dayofmonth(SF.col("cola")), "DAYOFMONTH(TO_DATE(cola))"),
1270
+ (SF.dayofmonth("cola"), "DAYOFMONTH(cola)"),
1271
+ (SF.dayofmonth(SF.col("cola")), "DAYOFMONTH(cola)"),
1272
1272
  ],
1273
1273
  )
1274
1274
  def test_dayofmonth(expression, expected):
@@ -1278,8 +1278,8 @@ def test_dayofmonth(expression, expected):
1278
1278
  @pytest.mark.parametrize(
1279
1279
  "expression, expected",
1280
1280
  [
1281
- (SF.dayofyear("cola"), "DAYOFYEAR(TO_DATE(cola))"),
1282
- (SF.dayofyear(SF.col("cola")), "DAYOFYEAR(TO_DATE(cola))"),
1281
+ (SF.dayofyear("cola"), "DAYOFYEAR(cola)"),
1282
+ (SF.dayofyear(SF.col("cola")), "DAYOFYEAR(cola)"),
1283
1283
  ],
1284
1284
  )
1285
1285
  def test_dayofyear(expression, expected):
@@ -1322,8 +1322,8 @@ def test_second(expression, expected):
1322
1322
  @pytest.mark.parametrize(
1323
1323
  "expression, expected",
1324
1324
  [
1325
- (SF.weekofyear("cola"), "WEEKOFYEAR(TO_DATE(cola))"),
1326
- (SF.weekofyear(SF.col("cola")), "WEEKOFYEAR(TO_DATE(cola))"),
1325
+ (SF.weekofyear("cola"), "WEEKOFYEAR(cola)"),
1326
+ (SF.weekofyear(SF.col("cola")), "WEEKOFYEAR(cola)"),
1327
1327
  ],
1328
1328
  )
1329
1329
  def test_weekofyear(expression, expected):
@@ -7,8 +7,8 @@ from sqlframe.standalone import types
7
7
  "dtype, expected",
8
8
  [
9
9
  (types.StringType(), "string"),
10
- (types.CharType(100), "char"),
11
- (types.VarcharType(65), "varchar"),
10
+ (types.CharType(100), "char(100)"),
11
+ (types.VarcharType(65), "varchar(65)"),
12
12
  (types.BinaryType(), "binary"),
13
13
  (types.BooleanType(), "boolean"),
14
14
  (types.DateType(), "date"),
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