sqlframe 3.18.1__tar.gz → 3.20.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (387) hide show
  1. {sqlframe-3.18.1 → sqlframe-3.20.0}/PKG-INFO +1 -1
  2. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/bigquery.md +2 -0
  3. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/duckdb.md +3 -1
  4. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/postgres.md +2 -0
  5. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/snowflake.md +2 -0
  6. {sqlframe-3.18.1 → sqlframe-3.20.0}/setup.py +1 -1
  7. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/_version.py +2 -2
  8. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/functions.py +53 -16
  9. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/session.py +8 -7
  10. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/util.py +1 -0
  11. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/session.py +1 -1
  12. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe.egg-info/PKG-INFO +1 -1
  13. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe.egg-info/requires.txt +1 -1
  14. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_engine_dataframe.py +66 -0
  15. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_int_functions.py +22 -23
  16. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_dataframe.py +3 -3
  17. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_functions.py +2 -2
  18. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/test_util.py +1 -0
  19. {sqlframe-3.18.1 → sqlframe-3.20.0}/.github/CODEOWNERS +0 -0
  20. {sqlframe-3.18.1 → sqlframe-3.20.0}/.github/workflows/main.workflow.yaml +0 -0
  21. {sqlframe-3.18.1 → sqlframe-3.20.0}/.github/workflows/publish.workflow.yaml +0 -0
  22. {sqlframe-3.18.1 → sqlframe-3.20.0}/.gitignore +0 -0
  23. {sqlframe-3.18.1 → sqlframe-3.20.0}/.pre-commit-config.yaml +0 -0
  24. {sqlframe-3.18.1 → sqlframe-3.20.0}/.readthedocs.yaml +0 -0
  25. {sqlframe-3.18.1 → sqlframe-3.20.0}/LICENSE +0 -0
  26. {sqlframe-3.18.1 → sqlframe-3.20.0}/Makefile +0 -0
  27. {sqlframe-3.18.1 → sqlframe-3.20.0}/README.md +0 -0
  28. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/add_chatgpt_support.md +0 -0
  29. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  30. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  31. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  32. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  33. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  34. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  35. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  36. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  37. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/but_wait_theres_more.gif +0 -0
  38. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/cake.gif +0 -0
  39. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/images/you_get_pyspark_api.gif +0 -0
  40. {sqlframe-3.18.1 → sqlframe-3.20.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  41. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/configuration.md +0 -0
  42. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/databricks.md +0 -0
  43. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/bigquery.md +0 -0
  44. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/duckdb.md +0 -0
  45. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/images/SF.png +0 -0
  46. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/images/favicon.png +0 -0
  47. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/images/favicon_old.png +0 -0
  48. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/images/sqlframe_diagram.png +0 -0
  49. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/images/sqlframe_logo.png +0 -0
  50. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/docs/postgres.md +0 -0
  51. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/images/SF.png +0 -0
  52. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/images/favicon.png +0 -0
  53. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/images/favicon_old.png +0 -0
  54. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/images/sqlframe_diagram.png +0 -0
  55. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/images/sqlframe_logo.png +0 -0
  56. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/index.md +0 -0
  57. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/redshift.md +0 -0
  58. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/requirements.txt +0 -0
  59. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/spark.md +0 -0
  60. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/standalone.md +0 -0
  61. {sqlframe-3.18.1 → sqlframe-3.20.0}/docs/stylesheets/extra.css +0 -0
  62. {sqlframe-3.18.1 → sqlframe-3.20.0}/mkdocs.yml +0 -0
  63. {sqlframe-3.18.1 → sqlframe-3.20.0}/pytest.ini +0 -0
  64. {sqlframe-3.18.1 → sqlframe-3.20.0}/renovate.json +0 -0
  65. {sqlframe-3.18.1 → sqlframe-3.20.0}/setup.cfg +0 -0
  66. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/LICENSE +0 -0
  67. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/__init__.py +0 -0
  68. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/__init__.py +0 -0
  69. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/_typing.py +0 -0
  70. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/catalog.py +0 -0
  71. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/column.py +0 -0
  72. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/dataframe.py +0 -0
  73. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/decorators.py +0 -0
  74. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/exceptions.py +0 -0
  75. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/function_alternatives.py +0 -0
  76. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/group.py +0 -0
  77. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/mixins/__init__.py +0 -0
  78. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  79. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  80. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  81. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/mixins/table_mixins.py +0 -0
  82. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/normalize.py +0 -0
  83. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/operations.py +0 -0
  84. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/readerwriter.py +0 -0
  85. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/table.py +0 -0
  86. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/transforms.py +0 -0
  87. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/types.py +0 -0
  88. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/udf.py +0 -0
  89. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/base/window.py +0 -0
  90. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/__init__.py +0 -0
  91. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/catalog.py +0 -0
  92. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/column.py +0 -0
  93. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/dataframe.py +0 -0
  94. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/functions.py +0 -0
  95. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/functions.pyi +0 -0
  96. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/group.py +0 -0
  97. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/readwriter.py +0 -0
  98. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/session.py +0 -0
  99. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/table.py +0 -0
  100. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/types.py +0 -0
  101. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/udf.py +0 -0
  102. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/bigquery/window.py +0 -0
  103. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/__init__.py +0 -0
  104. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/catalog.py +0 -0
  105. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/column.py +0 -0
  106. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/dataframe.py +0 -0
  107. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/functions.py +0 -0
  108. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/functions.pyi +0 -0
  109. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/group.py +0 -0
  110. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/readwriter.py +0 -0
  111. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/session.py +0 -0
  112. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/table.py +0 -0
  113. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/types.py +0 -0
  114. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/udf.py +0 -0
  115. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/databricks/window.py +0 -0
  116. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/__init__.py +0 -0
  117. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/catalog.py +0 -0
  118. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/column.py +0 -0
  119. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/dataframe.py +0 -0
  120. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/functions.py +0 -0
  121. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/functions.pyi +0 -0
  122. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/group.py +0 -0
  123. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/readwriter.py +0 -0
  124. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/session.py +0 -0
  125. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/table.py +0 -0
  126. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/types.py +0 -0
  127. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/udf.py +0 -0
  128. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/duckdb/window.py +0 -0
  129. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/__init__.py +0 -0
  130. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/catalog.py +0 -0
  131. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/column.py +0 -0
  132. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/dataframe.py +0 -0
  133. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/functions.py +0 -0
  134. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/functions.pyi +0 -0
  135. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/group.py +0 -0
  136. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/readwriter.py +0 -0
  137. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/session.py +0 -0
  138. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/table.py +0 -0
  139. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/types.py +0 -0
  140. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/udf.py +0 -0
  141. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/postgres/window.py +0 -0
  142. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/__init__.py +0 -0
  143. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/catalog.py +0 -0
  144. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/column.py +0 -0
  145. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/dataframe.py +0 -0
  146. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/functions.py +0 -0
  147. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/group.py +0 -0
  148. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/readwriter.py +0 -0
  149. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/session.py +0 -0
  150. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/table.py +0 -0
  151. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/types.py +0 -0
  152. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/udf.py +0 -0
  153. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/redshift/window.py +0 -0
  154. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/__init__.py +0 -0
  155. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/catalog.py +0 -0
  156. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/column.py +0 -0
  157. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/dataframe.py +0 -0
  158. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/functions.py +0 -0
  159. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/functions.pyi +0 -0
  160. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/group.py +0 -0
  161. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/readwriter.py +0 -0
  162. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/session.py +0 -0
  163. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/table.py +0 -0
  164. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/types.py +0 -0
  165. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/udf.py +0 -0
  166. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/snowflake/window.py +0 -0
  167. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/__init__.py +0 -0
  168. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/catalog.py +0 -0
  169. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/column.py +0 -0
  170. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/dataframe.py +0 -0
  171. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/functions.py +0 -0
  172. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/functions.pyi +0 -0
  173. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/group.py +0 -0
  174. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/readwriter.py +0 -0
  175. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/table.py +0 -0
  176. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/types.py +0 -0
  177. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/udf.py +0 -0
  178. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/spark/window.py +0 -0
  179. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/__init__.py +0 -0
  180. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/catalog.py +0 -0
  181. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/column.py +0 -0
  182. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/dataframe.py +0 -0
  183. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/functions.py +0 -0
  184. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/group.py +0 -0
  185. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/readwriter.py +0 -0
  186. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/session.py +0 -0
  187. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/table.py +0 -0
  188. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/types.py +0 -0
  189. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/udf.py +0 -0
  190. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/standalone/window.py +0 -0
  191. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/testing/__init__.py +0 -0
  192. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe/testing/utils.py +0 -0
  193. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe.egg-info/SOURCES.txt +0 -0
  194. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe.egg-info/dependency_links.txt +0 -0
  195. {sqlframe-3.18.1 → sqlframe-3.20.0}/sqlframe.egg-info/top_level.txt +0 -0
  196. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/__init__.py +0 -0
  197. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/common_fixtures.py +0 -0
  198. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/conftest.py +0 -0
  199. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee.csv +0 -0
  200. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee.json +0 -0
  201. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee.parquet +0 -0
  202. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  203. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  204. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  205. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  206. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  207. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  208. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  209. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  210. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  211. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  212. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  213. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  214. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  215. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  216. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/employee_extra_line.csv +0 -0
  217. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/issue_219.csv +0 -0
  218. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  219. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  220. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  221. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  222. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  223. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  224. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  225. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  226. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  227. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  228. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  229. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  230. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  231. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  232. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  233. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  234. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  235. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  236. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  237. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  238. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  239. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  240. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  241. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  242. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  243. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  244. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  245. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  246. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  247. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  248. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  249. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  250. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  251. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  252. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  253. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  254. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  255. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  256. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  257. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  258. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  259. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  260. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  261. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  262. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  263. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  264. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  265. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  266. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  267. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  268. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  269. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  270. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  271. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  272. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  273. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  274. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  275. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  276. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  277. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  278. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  279. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  280. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  281. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  282. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  283. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  284. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  285. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  286. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  287. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  288. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  289. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  290. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  291. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  292. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  293. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  294. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  295. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  296. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  297. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  298. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  299. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  300. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  301. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  302. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  303. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  304. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  305. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  306. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  307. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  308. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  309. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  310. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  311. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  312. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  313. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  314. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  315. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  316. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  317. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/__init__.py +0 -0
  318. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/__init__.py +0 -0
  319. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/bigquery/__init__.py +0 -0
  320. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  321. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  322. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  323. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/databricks/__init__.py +0 -0
  324. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
  325. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
  326. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
  327. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/__init__.py +0 -0
  328. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  329. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  330. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  331. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  332. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  333. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  334. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
  335. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/postgres/__init__.py +0 -0
  336. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  337. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  338. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  339. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  340. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/redshift/__init__.py +0 -0
  341. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  342. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  343. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/snowflake/__init__.py +0 -0
  344. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  345. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  346. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  347. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/spark/__init__.py +0 -0
  348. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  349. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  350. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_engine_column.py +0 -0
  351. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_engine_reader.py +0 -0
  352. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_engine_session.py +0 -0
  353. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_engine_table.py +0 -0
  354. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_engine_writer.py +0 -0
  355. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/engines/test_int_testing.py +0 -0
  356. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/fixtures.py +0 -0
  357. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/test_int_dataframe.py +0 -0
  358. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/test_int_dataframe_stats.py +0 -0
  359. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/test_int_grouped_data.py +0 -0
  360. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/integration/test_int_session.py +0 -0
  361. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/types.py +0 -0
  362. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/__init__.py +0 -0
  363. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/bigquery/__init__.py +0 -0
  364. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/bigquery/test_activate.py +0 -0
  365. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/conftest.py +0 -0
  366. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/databricks/__init__.py +0 -0
  367. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/databricks/test_activate.py +0 -0
  368. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/duck/__init__.py +0 -0
  369. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/duck/test_activate.py +0 -0
  370. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/postgres/__init__.py +0 -0
  371. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/postgres/test_activate.py +0 -0
  372. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/redshift/__init__.py +0 -0
  373. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/redshift/test_activate.py +0 -0
  374. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/snowflake/__init__.py +0 -0
  375. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/snowflake/test_activate.py +0 -0
  376. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/spark/__init__.py +0 -0
  377. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/spark/test_activate.py +0 -0
  378. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/__init__.py +0 -0
  379. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/fixtures.py +0 -0
  380. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_activate.py +0 -0
  381. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_column.py +0 -0
  382. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  383. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_session.py +0 -0
  384. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  385. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_types.py +0 -0
  386. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/standalone/test_window.py +0 -0
  387. {sqlframe-3.18.1 → sqlframe-3.20.0}/tests/unit/test_activate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.18.1
3
+ Version: 3.20.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
@@ -312,6 +312,7 @@ See something that you would like to see supported? [Open an issue](https://gith
312
312
  * [array_min](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_min.html)
313
313
  * [array_position](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_position.html)
314
314
  * [array_remove](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_remove.html)
315
+ * [array_size](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_size.html)
315
316
  * [array_sort](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_sort.html)
316
317
  * Arrays are not allowed to have None (NULL) values
317
318
  * [array_union](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_union.html)
@@ -505,6 +506,7 @@ See something that you would like to see supported? [Open an issue](https://gith
505
506
  * [toRadians](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toRadians.html)
506
507
  * [to_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_date.html)
507
508
  * [to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp.html)
509
+ * [to_timestamp_ntz](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp_ntz.html)
508
510
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
509
511
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
510
512
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.html)
@@ -266,7 +266,7 @@ See something that you would like to see supported? [Open an issue](https://gith
266
266
  * [acos](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.acos.html)
267
267
  * [add_months](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.add_months.html)
268
268
  * [any_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.any_value.html)
269
- * Always ignores nulls
269
+ * Always ignores nulls
270
270
  * [approxCountDistinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.approxCountDistinct.html)
271
271
  * [approx_count_distinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.approx_count_distinct.html)
272
272
  * [array](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array.html)
@@ -278,6 +278,7 @@ See something that you would like to see supported? [Open an issue](https://gith
278
278
  * [array_min](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_min.html)
279
279
  * [array_position](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_position.html)
280
280
  * [array_remove](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_remove.html)
281
+ * [array_size](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_size.html)
281
282
  * [array_sort](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_sort.html)
282
283
  * [array_union](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_union.html)
283
284
  * [arrays_overlap](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.arrays_overlap.html)
@@ -467,6 +468,7 @@ See something that you would like to see supported? [Open an issue](https://gith
467
468
  * [toRadians](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toRadians.html)
468
469
  * [to_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_date.html)
469
470
  * [to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp.html)
471
+ * [to_timestamp_ntz](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp_ntz.html)
470
472
  * [to_unix_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_unix_timestamp.html)
471
473
  * The values must match the format string (null will not be returned if they do not)
472
474
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
@@ -289,6 +289,7 @@ See something that you would like to see supported? [Open an issue](https://gith
289
289
  * [array_min](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_min.html)
290
290
  * [array_position](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_position.html)
291
291
  * [array_remove](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_remove.html)
292
+ * [array_size](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_size.html)
292
293
  * [arrays_overlap](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.arrays_overlap.html)
293
294
  * [asc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.asc.html)
294
295
  * [asc_nulls_first](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.asc_nulls_first.html)
@@ -458,6 +459,7 @@ See something that you would like to see supported? [Open an issue](https://gith
458
459
  * [to_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_date.html)
459
460
  * [to_number](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_number.html)
460
461
  * [to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp.html)
462
+ * [to_timestamp_ntz](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp_ntz.html)
461
463
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
462
464
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
463
465
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.html)
@@ -311,6 +311,7 @@ See something that you would like to see supported? [Open an issue](https://gith
311
311
  * [array_min](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_min.html)
312
312
  * [array_position](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_position.html)
313
313
  * [array_remove](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_remove.html)
314
+ * [array_size](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_size.html)
314
315
  * [array_sort](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_sort.html)
315
316
  * [array_union](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.array_union.html)
316
317
  * [arrays_overlap](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.arrays_overlap.html)
@@ -509,6 +510,7 @@ See something that you would like to see supported? [Open an issue](https://gith
509
510
  * [to_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_date.html)
510
511
  * [to_number](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_number.html)
511
512
  * [to_timestamp](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp.html)
513
+ * [to_timestamp_ntz](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.to_timestamp_ntz.html)
512
514
  * [translate](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.translate.html)
513
515
  * [trim](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trim.html)
514
516
  * [trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.trunc.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.5",
23
+ "sqlglot>=24.0.0,<26.7",
24
24
  "typing_extensions",
25
25
  ],
26
26
  extras_require={
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.18.1'
16
- __version_tuple__ = version_tuple = (3, 18, 1)
15
+ __version__ = version = '3.20.0'
16
+ __version_tuple__ = version_tuple = (3, 20, 0)
@@ -8,6 +8,7 @@ import typing as t
8
8
 
9
9
  from sqlglot import Dialect
10
10
  from sqlglot import exp as expression
11
+ from sqlglot.dialects.dialect import time_format
11
12
  from sqlglot.helper import ensure_list
12
13
  from sqlglot.helper import flatten as _flatten
13
14
 
@@ -2016,9 +2017,12 @@ def array_prepend(col: ColumnOrName, value: ColumnOrLiteral) -> Column:
2016
2017
  return Column.invoke_anonymous_function(col, "ARRAY_PREPEND", value)
2017
2018
 
2018
2019
 
2019
- @meta(unsupported_engines="*")
2020
+ @meta()
2020
2021
  def array_size(col: ColumnOrName) -> Column:
2021
- return Column.invoke_anonymous_function(col, "ARRAY_SIZE")
2022
+ session = _get_session()
2023
+ if session._is_spark or session._is_databricks:
2024
+ return Column.invoke_anonymous_function(col, "ARRAY_SIZE")
2025
+ return Column.invoke_expression_over_column(col, expression.ArraySize)
2022
2026
 
2023
2027
 
2024
2028
  @meta(unsupported_engines="*")
@@ -3129,20 +3133,14 @@ def datepart(field: ColumnOrName, source: ColumnOrName) -> Column:
3129
3133
 
3130
3134
  @meta(unsupported_engines=["bigquery", "postgres", "snowflake"])
3131
3135
  def day(col: ColumnOrName) -> Column:
3132
- from sqlframe.base.function_alternatives import day_with_try_to_timestamp
3133
-
3134
3136
  session = _get_session()
3135
3137
 
3136
3138
  if session._is_duckdb:
3137
3139
  try_to_timestamp = get_func_from_session("try_to_timestamp")
3138
3140
  to_date = get_func_from_session("to_date")
3139
- when = get_func_from_session("when")
3140
3141
  _is_string = get_func_from_session("_is_string")
3141
3142
  coalesce = get_func_from_session("coalesce")
3142
- col = when(
3143
- _is_string(col),
3144
- coalesce(try_to_timestamp(col), to_date(col)),
3145
- ).otherwise(col)
3143
+ col = coalesce(try_to_timestamp(Column.ensure_col(col).cast("VARCHAR")), to_date(col))
3146
3144
 
3147
3145
  return Column.invoke_expression_over_column(col, expression.Day)
3148
3146
 
@@ -6088,7 +6086,7 @@ def to_timestamp_ltz(
6088
6086
  return Column.invoke_anonymous_function(timestamp, "to_timestamp_ltz")
6089
6087
 
6090
6088
 
6091
- @meta(unsupported_engines="*")
6089
+ @meta()
6092
6090
  def to_timestamp_ntz(
6093
6091
  timestamp: ColumnOrName,
6094
6092
  format: t.Optional[ColumnOrName] = None,
@@ -6118,6 +6116,32 @@ def to_timestamp_ntz(
6118
6116
  ... # doctest: +SKIP
6119
6117
  [Row(r=datetime.datetime(2016, 4, 8, 0, 0))]
6120
6118
  """
6119
+ session = _get_session()
6120
+
6121
+ if session._is_duckdb:
6122
+ to_timestamp_func = get_func_from_session("to_timestamp")
6123
+ return to_timestamp_func(timestamp, format)
6124
+
6125
+ if session._is_bigquery:
6126
+ if format is not None:
6127
+ return Column.invoke_anonymous_function(
6128
+ session.format_execution_time(format), # type: ignore
6129
+ "parse_datetime",
6130
+ timestamp,
6131
+ )
6132
+ else:
6133
+ return Column.ensure_col(timestamp).cast("datetime", dialect="bigquery")
6134
+
6135
+ if session._is_postgres:
6136
+ if format is not None:
6137
+ return Column.invoke_anonymous_function(
6138
+ timestamp,
6139
+ "to_timestamp",
6140
+ session.format_execution_time(format), # type: ignore
6141
+ )
6142
+ else:
6143
+ return Column.ensure_col(timestamp).cast("timestamp", dialect="postgres")
6144
+
6121
6145
  if format is not None:
6122
6146
  return Column.invoke_anonymous_function(timestamp, "to_timestamp_ntz", format)
6123
6147
  else:
@@ -6442,12 +6466,25 @@ def unix_micros(col: ColumnOrName) -> Column:
6442
6466
  """
6443
6467
  from sqlframe.base.function_alternatives import unix_micros_multiply_epoch
6444
6468
 
6445
- if (
6446
- _get_session()._is_bigquery
6447
- or _get_session()._is_duckdb
6448
- or _get_session()._is_postgres
6449
- or _get_session()._is_snowflake
6450
- ):
6469
+ if _get_session()._is_duckdb:
6470
+ return Column.invoke_anonymous_function(col, "epoch_us")
6471
+
6472
+ if _get_session()._is_bigquery:
6473
+ return Column(
6474
+ expression.Anonymous(
6475
+ this="UNIX_MICROS",
6476
+ expressions=[
6477
+ expression.Anonymous(
6478
+ this="TIMESTAMP",
6479
+ expressions=[
6480
+ Column.ensure_col(col).column_expression,
6481
+ ],
6482
+ )
6483
+ ],
6484
+ )
6485
+ )
6486
+
6487
+ if _get_session()._is_postgres or _get_session()._is_snowflake:
6451
6488
  return unix_micros_multiply_epoch(col)
6452
6489
 
6453
6490
  return Column.invoke_anonymous_function(col, "unix_micros")
@@ -267,10 +267,6 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
267
267
  else:
268
268
  column_mapping = {}
269
269
 
270
- column_mapping = {
271
- normalize_identifiers(k, self.input_dialect).sql(dialect=self.input_dialect): v
272
- for k, v in column_mapping.items()
273
- }
274
270
  empty_df = not data
275
271
  rows = [[None] * len(column_mapping)] if empty_df else list(data) # type: ignore
276
272
 
@@ -327,7 +323,6 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
327
323
  if isinstance(sample_row, Row):
328
324
  sample_row = sample_row.asDict()
329
325
  if isinstance(sample_row, dict):
330
- sample_row = normalize_dict(self, sample_row)
331
326
  default_data_type = get_default_data_type(sample_row[name])
332
327
  updated_mapping[name] = (
333
328
  exp.DataType.build(default_data_type, dialect="spark")
@@ -387,7 +382,11 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
387
382
  sel_expression = exp.Select(**select_kwargs)
388
383
  if empty_df:
389
384
  sel_expression = sel_expression.where(exp.false())
390
- return self._create_df(sel_expression)
385
+ df = self._create_df(sel_expression)
386
+ df._update_display_name_mapping(
387
+ df._ensure_and_normalize_cols(list(column_mapping.keys())), list(column_mapping.keys())
388
+ )
389
+ return df
391
390
 
392
391
  def sql(
393
392
  self,
@@ -526,7 +525,9 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
526
525
  col_id._meta = {"case_sensitive": True, **(col_id._meta or {})}
527
526
  case_sensitive_cols.append(col_id)
528
527
  columns = [
529
- normalize_string(x, from_dialect="execution", to_dialect="output")
528
+ normalize_string(
529
+ x, from_dialect="execution", to_dialect="output", to_string_literal=True
530
+ )
530
531
  for x in case_sensitive_cols
531
532
  ]
532
533
  return [self._to_row(columns, row) for row in result]
@@ -316,6 +316,7 @@ def sqlglot_to_spark(sqlglot_dtype: exp.DataType) -> types.DataType:
316
316
  exp.DataType.Type.INT: types.IntegerType,
317
317
  exp.DataType.Type.BIGINT: types.LongType,
318
318
  exp.DataType.Type.SMALLINT: types.ShortType,
319
+ exp.DataType.Type.TINYINT: types.ByteType,
319
320
  exp.DataType.Type.FLOAT: types.FloatType,
320
321
  exp.DataType.Type.DOUBLE: types.DoubleType,
321
322
  exp.DataType.Type.DECIMAL: types.DecimalType,
@@ -86,7 +86,7 @@ class SparkSession(
86
86
  col_id = exp.parse_identifier(k, dialect=self.execution_dialect)
87
87
  col_id._meta = {"case_sensitive": True, **(col_id._meta or {})}
88
88
  col_name = normalize_string(
89
- col_id, from_dialect="execution", to_dialect="output", is_column=True
89
+ col_id, from_dialect="execution", to_dialect="output", to_string_literal=True
90
90
  )
91
91
  rows_normalized[col_name] = v
92
92
  results.append(Row(**rows_normalized))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.18.1
3
+ Version: 3.20.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.5,>=24.0.0
2
+ sqlglot<26.7,>=24.0.0
3
3
  typing_extensions
4
4
 
5
5
  [bigquery]
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import typing as t
4
4
 
5
+ from sqlframe.base.session import _BaseSession
5
6
  from sqlframe.base.types import Row
6
7
  from sqlframe.snowflake import SnowflakeSession
7
8
  from sqlframe.spark import SparkSession
@@ -88,3 +89,68 @@ def test_show_limit(
88
89
  | 1 | Jack | Shephard | 37 | 1 |
89
90
  +-------------+-------+----------+-----+----------+\n"""
90
91
  )
92
+
93
+
94
+ # https://github.com/eakmanrq/sqlframe/issues/294
95
+ def test_show_from_create_version_1(get_session: t.Callable[[], _BaseSession], capsys):
96
+ session = get_session()
97
+ df = session.createDataFrame([(1, 4), (2, 5), (3, 6)], schema=["foo", "BAR"])
98
+ df.show()
99
+ captured = capsys.readouterr()
100
+ assert (
101
+ captured.out.strip()
102
+ == """
103
+ +-----+-----+
104
+ | foo | BAR |
105
+ +-----+-----+
106
+ | 1 | 4 |
107
+ | 2 | 5 |
108
+ | 3 | 6 |
109
+ +-----+-----+
110
+ """.strip()
111
+ )
112
+
113
+
114
+ # https://github.com/eakmanrq/sqlframe/issues/294
115
+ def test_show_from_create_version_2(get_session: t.Callable[[], _BaseSession], capsys):
116
+ session = get_session()
117
+ df = session.createDataFrame(
118
+ [
119
+ {"a": 1, "BAR": 1},
120
+ {"a": 1, "BAR": 2},
121
+ ]
122
+ )
123
+ df.show()
124
+ captured = capsys.readouterr()
125
+ assert (
126
+ captured.out.strip()
127
+ == """
128
+ +---+-----+
129
+ | a | BAR |
130
+ +---+-----+
131
+ | 1 | 1 |
132
+ | 1 | 2 |
133
+ +---+-----+
134
+ """.strip()
135
+ )
136
+
137
+
138
+ def test_show_from_create_with_space(get_session: t.Callable[[], _BaseSession], capsys):
139
+ session = get_session()
140
+ df = session.createDataFrame(
141
+ [
142
+ {"zor ro": 1},
143
+ ]
144
+ )
145
+ df.show()
146
+ captured = capsys.readouterr()
147
+ assert (
148
+ captured.out.strip()
149
+ == """
150
+ +--------+
151
+ | zor ro |
152
+ +--------+
153
+ | 1 |
154
+ +--------+
155
+ """.strip()
156
+ )
@@ -150,13 +150,11 @@ def test_lit(get_session_and_func, arg, expected):
150
150
  "input, output",
151
151
  [
152
152
  ("employee_id", "employee_id"),
153
- ("employee id", "`employee id`"),
153
+ ("employee id", "employee id"),
154
154
  ],
155
155
  )
156
156
  def test_col(get_session_and_func, input, output):
157
157
  session, col = get_session_and_func("col")
158
- if isinstance(session, PySparkSession):
159
- output = output.replace("`", "")
160
158
  df = session.createDataFrame([(1,)], schema=[input])
161
159
  result = df.select(col(input)).first()
162
160
  assert result[0] == 1
@@ -230,20 +228,7 @@ def test_alias(get_session_and_func):
230
228
  df = session.createDataFrame([(1,)], schema=["employee_id"])
231
229
  assert df.select(col("employee_id").alias("test")).first().__fields__[0] == "test"
232
230
  space_result = df.select(col("employee_id").alias("A Space In New Name")).first().__fields__[0]
233
- if isinstance(
234
- session,
235
- (
236
- DuckDBSession,
237
- BigQuerySession,
238
- PostgresSession,
239
- SnowflakeSession,
240
- SparkSession,
241
- DatabricksSession,
242
- ),
243
- ):
244
- assert space_result == "`A Space In New Name`"
245
- else:
246
- assert space_result == "A Space In New Name"
231
+ assert space_result == "A Space In New Name"
247
232
 
248
233
 
249
234
  def test_asc(get_session_and_func):
@@ -2072,13 +2057,20 @@ def test_array_prepend(get_session_and_func):
2072
2057
  ]
2073
2058
 
2074
2059
 
2075
- def test_array_size(get_session_and_func):
2060
+ def test_array_size(get_session_and_func, get_func):
2076
2061
  session, array_size = get_session_and_func("array_size")
2077
- df = session.createDataFrame([([2, 1, 3],), (None,)], ["data"])
2078
- assert df.select(array_size(df.data).alias("r")).collect() == [
2079
- Row(r=3),
2080
- Row(r=None),
2081
- ]
2062
+ # Snowflake doesn't support arrays in VALUES so we need to do it in select
2063
+ if isinstance(session, SnowflakeSession):
2064
+ lit = get_func("lit", session)
2065
+ assert session.range(1).select(
2066
+ array_size(lit(["a", "b", "c"])), array_size(lit(None))
2067
+ ).collect() == [Row(value=3, value2=None)]
2068
+ else:
2069
+ df = session.createDataFrame([([2, 1, 3],), (None,)], ["data"])
2070
+ assert df.select(array_size(df.data).alias("r")).collect() == [
2071
+ Row(r=3),
2072
+ Row(r=None),
2073
+ ]
2082
2074
 
2083
2075
 
2084
2076
  def test_create_map(get_session_and_func, get_func):
@@ -3648,6 +3640,10 @@ def test_day(get_session_and_func, get_func):
3648
3640
  session, day = get_session_and_func("day")
3649
3641
  df = session.createDataFrame([("2015-04-08",)], ["dt"])
3650
3642
  assert df.select(day("dt").alias("day")).first()[0] == 8
3643
+ df = session.createDataFrame([(datetime.datetime(2025, 4, 8),)], ["dt"])
3644
+ assert df.select(day("dt").alias("day")).first()[0] == 8
3645
+ df = session.createDataFrame([("2015-04-08 01:00:00",)], ["dt"])
3646
+ assert df.select(day("dt").alias("day")).first()[0] == 8
3651
3647
 
3652
3648
 
3653
3649
  def test_elt(get_session_and_func, get_func):
@@ -4923,6 +4919,9 @@ def test_unix_micros(get_session_and_func, get_func):
4923
4919
  to_timestamp = get_func("to_timestamp", session)
4924
4920
  df = session.createDataFrame([("2015-07-22 10:00:00",)], ["t"])
4925
4921
  assert df.select(unix_micros(to_timestamp(df.t)).alias("n")).first()[0] == 1437559200000000
4922
+ if not isinstance(session, SnowflakeSession):
4923
+ df = session.createDataFrame([(datetime.datetime(2021, 3, 1, 12, 34, 56, 49000),)], ["t"])
4924
+ assert df.select(unix_micros(df.t).alias("n")).first()[0] == 1614602096049000
4926
4925
 
4927
4926
 
4928
4927
  def test_unix_millis(get_session_and_func, get_func):
@@ -128,14 +128,14 @@ def test_missing_method(standalone_employee: StandaloneDataFrame):
128
128
  def test_expand_star(standalone_employee: StandaloneDataFrame):
129
129
  assert (
130
130
  standalone_employee.select("*").sql(pretty=False, optimize=False)
131
- == "WITH `t51718876` AS (SELECT CAST(`employee_id` AS INT) AS `employee_id`, CAST(`fname` AS STRING) AS `fname`, CAST(`lname` AS STRING) AS `lname`, CAST(`age` AS INT) AS `age`, CAST(`store_id` AS INT) AS `store_id` FROM VALUES (1, 'Jack', 'Shephard', 37, 1), (2, 'John', 'Locke', 65, 1), (3, 'Kate', 'Austen', 37, 2), (4, 'Claire', 'Littleton', 27, 2), (5, 'Hugo', 'Reyes', 29, 100) AS `a1`(`employee_id`, `fname`, `lname`, `age`, `store_id`)) SELECT `employee_id`, `fname`, `lname`, `age`, `store_id` FROM `t51718876`"
131
+ == "WITH `t51718876` AS (SELECT CAST(`employee_id` AS INT) AS `employee_id`, CAST(`fname` AS STRING) AS `fname`, CAST(`lname` AS STRING) AS `lname`, CAST(`age` AS INT) AS `age`, CAST(`store_id` AS INT) AS `store_id` FROM VALUES (1, 'Jack', 'Shephard', 37, 1), (2, 'John', 'Locke', 65, 1), (3, 'Kate', 'Austen', 37, 2), (4, 'Claire', 'Littleton', 27, 2), (5, 'Hugo', 'Reyes', 29, 100) AS `a1`(`employee_id`, `fname`, `lname`, `age`, `store_id`)) SELECT `employee_id` AS `employee_id`, `fname` AS `fname`, `lname` AS `lname`, `age` AS `age`, `store_id` AS `store_id` FROM `t51718876`"
132
132
  )
133
133
 
134
134
 
135
135
  def test_expand_star_table_alias(standalone_employee: StandaloneDataFrame):
136
136
  assert (
137
137
  standalone_employee.alias("blah").select("blah.*").sql(pretty=False, optimize=False)
138
- == "WITH `t51718876` AS (SELECT CAST(`employee_id` AS INT) AS `employee_id`, CAST(`fname` AS STRING) AS `fname`, CAST(`lname` AS STRING) AS `lname`, CAST(`age` AS INT) AS `age`, CAST(`store_id` AS INT) AS `store_id` FROM VALUES (1, 'Jack', 'Shephard', 37, 1), (2, 'John', 'Locke', 65, 1), (3, 'Kate', 'Austen', 37, 2), (4, 'Claire', 'Littleton', 27, 2), (5, 'Hugo', 'Reyes', 29, 100) AS `a1`(`employee_id`, `fname`, `lname`, `age`, `store_id`)), `t37842204` AS (SELECT `employee_id`, `fname`, `lname`, `age`, `store_id` FROM `t51718876`) SELECT `t37842204`.`employee_id`, `t37842204`.`fname`, `t37842204`.`lname`, `t37842204`.`age`, `t37842204`.`store_id` FROM `t37842204`"
138
+ == "WITH `t51718876` AS (SELECT CAST(`employee_id` AS INT) AS `employee_id`, CAST(`fname` AS STRING) AS `fname`, CAST(`lname` AS STRING) AS `lname`, CAST(`age` AS INT) AS `age`, CAST(`store_id` AS INT) AS `store_id` FROM VALUES (1, 'Jack', 'Shephard', 37, 1), (2, 'John', 'Locke', 65, 1), (3, 'Kate', 'Austen', 37, 2), (4, 'Claire', 'Littleton', 27, 2), (5, 'Hugo', 'Reyes', 29, 100) AS `a1`(`employee_id`, `fname`, `lname`, `age`, `store_id`)), `t37842204` AS (SELECT `employee_id`, `fname`, `lname`, `age`, `store_id` FROM `t51718876`) SELECT `t37842204`.`employee_id` AS `employee_id`, `t37842204`.`fname` AS `fname`, `t37842204`.`lname` AS `lname`, `t37842204`.`age` AS `age`, `t37842204`.`store_id` AS `store_id` FROM `t37842204`"
139
139
  )
140
140
 
141
141
 
@@ -154,5 +154,5 @@ def test_lineage(standalone_employee: StandaloneDataFrame):
154
154
  def test_unquoted_identifiers(standalone_employee: StandaloneDataFrame):
155
155
  assert (
156
156
  standalone_employee.sql(dialect="snowflake", pretty=False, quote_identifiers=False)
157
- == "SELECT A1.EMPLOYEE_ID AS EMPLOYEE_ID, CAST(A1.FNAME AS TEXT) AS FNAME, CAST(A1.LNAME AS TEXT) AS LNAME, A1.AGE AS AGE, A1.STORE_ID AS STORE_ID FROM (VALUES (1, 'Jack', 'Shephard', 37, 1), (2, 'John', 'Locke', 65, 1), (3, 'Kate', 'Austen', 37, 2), (4, 'Claire', 'Littleton', 27, 2), (5, 'Hugo', 'Reyes', 29, 100)) AS A1(EMPLOYEE_ID, FNAME, LNAME, AGE, STORE_ID)"
157
+ == """SELECT A1.EMPLOYEE_ID AS "employee_id", CAST(A1.FNAME AS TEXT) AS "fname", CAST(A1.LNAME AS TEXT) AS "lname", A1.AGE AS "age", A1.STORE_ID AS "store_id" FROM (VALUES (1, 'Jack', 'Shephard', 37, 1), (2, 'John', 'Locke', 65, 1), (3, 'Kate', 'Austen', 37, 2), (4, 'Claire', 'Littleton', 27, 2), (5, 'Hugo', 'Reyes', 29, 100)) AS A1(EMPLOYEE_ID, FNAME, LNAME, AGE, STORE_ID)"""
158
158
  )
@@ -2152,8 +2152,8 @@ def test_array_prepend(expression, expected):
2152
2152
  @pytest.mark.parametrize(
2153
2153
  "expression, expected",
2154
2154
  [
2155
- (SF.array_size("cola"), "ARRAY_SIZE(cola)"),
2156
- (SF.array_size(SF.col("cola")), "ARRAY_SIZE(cola)"),
2155
+ (SF.array_size("cola"), "SIZE(cola)"),
2156
+ (SF.array_size(SF.col("cola")), "SIZE(cola)"),
2157
2157
  ],
2158
2158
  )
2159
2159
  def test_array_size(expression, expected):
@@ -39,6 +39,7 @@ def test_quote_preserving_alias_or_name(expression: t.Union[exp.Column, exp.Alia
39
39
  ("INTEGER", types.IntegerType()),
40
40
  ("BIGINT", types.LongType()),
41
41
  ("SMALLINT", types.ShortType()),
42
+ ("TINYINT", types.ByteType()),
42
43
  ("FLOAT", types.FloatType()),
43
44
  ("DOUBLE", types.DoubleType()),
44
45
  ("BOOLEAN", types.BooleanType()),
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