sqlframe 3.39.2__tar.gz → 3.39.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. {sqlframe-3.39.2 → sqlframe-3.39.4}/PKG-INFO +1 -1
  2. {sqlframe-3.39.2 → sqlframe-3.39.4}/setup.py +2 -1
  3. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/_version.py +3 -3
  4. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/dataframe.py +25 -8
  5. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/functions.py +9 -12
  6. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/session.py +6 -1
  7. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/util.py +15 -0
  8. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe.egg-info/PKG-INFO +1 -1
  9. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe.egg-info/requires.txt +2 -1
  10. sqlframe-3.39.4/tests/integration/engines/duck/test_duckdb_session.py +38 -0
  11. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_int_functions.py +11 -1
  12. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_session.py +0 -21
  13. sqlframe-3.39.2/tests/integration/engines/duck/test_duckdb_session.py +0 -14
  14. {sqlframe-3.39.2 → sqlframe-3.39.4}/.github/CODEOWNERS +0 -0
  15. {sqlframe-3.39.2 → sqlframe-3.39.4}/.github/workflows/main.workflow.yaml +0 -0
  16. {sqlframe-3.39.2 → sqlframe-3.39.4}/.github/workflows/publish.workflow.yaml +0 -0
  17. {sqlframe-3.39.2 → sqlframe-3.39.4}/.gitignore +0 -0
  18. {sqlframe-3.39.2 → sqlframe-3.39.4}/.pre-commit-config.yaml +0 -0
  19. {sqlframe-3.39.2 → sqlframe-3.39.4}/.readthedocs.yaml +0 -0
  20. {sqlframe-3.39.2 → sqlframe-3.39.4}/LICENSE +0 -0
  21. {sqlframe-3.39.2 → sqlframe-3.39.4}/Makefile +0 -0
  22. {sqlframe-3.39.2 → sqlframe-3.39.4}/README.md +0 -0
  23. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/add_chatgpt_support.md +0 -0
  24. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  25. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  26. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  27. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  28. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  29. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  30. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  31. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  32. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/but_wait_theres_more.gif +0 -0
  33. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/cake.gif +0 -0
  34. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/images/you_get_pyspark_api.gif +0 -0
  35. {sqlframe-3.39.2 → sqlframe-3.39.4}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  36. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/bigquery.md +0 -0
  37. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/configuration.md +0 -0
  38. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/databricks.md +0 -0
  39. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/docs/bigquery.md +0 -0
  40. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/docs/duckdb.md +0 -0
  41. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/docs/images/SF.png +0 -0
  42. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/docs/images/favicon.png +0 -0
  43. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/docs/images/sqlframe_logo.png +0 -0
  44. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/docs/postgres.md +0 -0
  45. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/duckdb.md +0 -0
  46. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/images/SF.png +0 -0
  47. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/images/favicon.png +0 -0
  48. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/images/sqlframe_logo.png +0 -0
  49. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/index.md +0 -0
  50. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/postgres.md +0 -0
  51. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/redshift.md +0 -0
  52. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/requirements.txt +0 -0
  53. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/snowflake.md +0 -0
  54. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/spark.md +0 -0
  55. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/standalone.md +0 -0
  56. {sqlframe-3.39.2 → sqlframe-3.39.4}/docs/stylesheets/extra.css +0 -0
  57. {sqlframe-3.39.2 → sqlframe-3.39.4}/mkdocs.yml +0 -0
  58. {sqlframe-3.39.2 → sqlframe-3.39.4}/pytest.ini +0 -0
  59. {sqlframe-3.39.2 → sqlframe-3.39.4}/renovate.json +0 -0
  60. {sqlframe-3.39.2 → sqlframe-3.39.4}/setup.cfg +0 -0
  61. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/LICENSE +0 -0
  62. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/__init__.py +0 -0
  63. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/__init__.py +0 -0
  64. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/_typing.py +0 -0
  65. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/catalog.py +0 -0
  66. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/column.py +0 -0
  67. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/decorators.py +0 -0
  68. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/exceptions.py +0 -0
  69. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/function_alternatives.py +0 -0
  70. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/group.py +0 -0
  71. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/mixins/__init__.py +0 -0
  72. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  73. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  74. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  75. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/mixins/table_mixins.py +0 -0
  76. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/normalize.py +0 -0
  77. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/operations.py +0 -0
  78. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/readerwriter.py +0 -0
  79. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/table.py +0 -0
  80. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/transforms.py +0 -0
  81. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/types.py +0 -0
  82. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/udf.py +0 -0
  83. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/base/window.py +0 -0
  84. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/__init__.py +0 -0
  85. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/catalog.py +0 -0
  86. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/column.py +0 -0
  87. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/dataframe.py +0 -0
  88. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/functions.py +0 -0
  89. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/functions.pyi +0 -0
  90. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/group.py +0 -0
  91. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/readwriter.py +0 -0
  92. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/session.py +0 -0
  93. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/table.py +0 -0
  94. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/types.py +0 -0
  95. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/udf.py +0 -0
  96. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/bigquery/window.py +0 -0
  97. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/__init__.py +0 -0
  98. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/catalog.py +0 -0
  99. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/column.py +0 -0
  100. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/dataframe.py +0 -0
  101. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/functions.py +0 -0
  102. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/functions.pyi +0 -0
  103. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/group.py +0 -0
  104. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/readwriter.py +0 -0
  105. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/session.py +0 -0
  106. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/table.py +0 -0
  107. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/types.py +0 -0
  108. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/udf.py +0 -0
  109. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/databricks/window.py +0 -0
  110. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/__init__.py +0 -0
  111. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/catalog.py +0 -0
  112. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/column.py +0 -0
  113. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/dataframe.py +0 -0
  114. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/functions.py +0 -0
  115. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/functions.pyi +0 -0
  116. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/group.py +0 -0
  117. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/readwriter.py +0 -0
  118. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/session.py +0 -0
  119. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/table.py +0 -0
  120. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/types.py +0 -0
  121. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/udf.py +0 -0
  122. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/duckdb/window.py +0 -0
  123. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/__init__.py +0 -0
  124. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/catalog.py +0 -0
  125. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/column.py +0 -0
  126. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/dataframe.py +0 -0
  127. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/functions.py +0 -0
  128. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/functions.pyi +0 -0
  129. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/group.py +0 -0
  130. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/readwriter.py +0 -0
  131. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/session.py +0 -0
  132. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/table.py +0 -0
  133. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/types.py +0 -0
  134. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/udf.py +0 -0
  135. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/postgres/window.py +0 -0
  136. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/py.typed +0 -0
  137. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/__init__.py +0 -0
  138. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/catalog.py +0 -0
  139. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/column.py +0 -0
  140. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/dataframe.py +0 -0
  141. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/functions.py +0 -0
  142. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/group.py +0 -0
  143. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/readwriter.py +0 -0
  144. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/session.py +0 -0
  145. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/table.py +0 -0
  146. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/types.py +0 -0
  147. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/udf.py +0 -0
  148. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/redshift/window.py +0 -0
  149. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/__init__.py +0 -0
  150. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/catalog.py +0 -0
  151. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/column.py +0 -0
  152. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/dataframe.py +0 -0
  153. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/functions.py +0 -0
  154. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/functions.pyi +0 -0
  155. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/group.py +0 -0
  156. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/readwriter.py +0 -0
  157. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/session.py +0 -0
  158. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/table.py +0 -0
  159. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/types.py +0 -0
  160. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/udf.py +0 -0
  161. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/snowflake/window.py +0 -0
  162. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/__init__.py +0 -0
  163. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/catalog.py +0 -0
  164. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/column.py +0 -0
  165. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/dataframe.py +0 -0
  166. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/functions.py +0 -0
  167. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/functions.pyi +0 -0
  168. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/group.py +0 -0
  169. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/readwriter.py +0 -0
  170. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/session.py +0 -0
  171. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/table.py +0 -0
  172. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/types.py +0 -0
  173. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/udf.py +0 -0
  174. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/spark/window.py +0 -0
  175. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/__init__.py +0 -0
  176. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/catalog.py +0 -0
  177. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/column.py +0 -0
  178. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/dataframe.py +0 -0
  179. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/functions.py +0 -0
  180. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/group.py +0 -0
  181. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/readwriter.py +0 -0
  182. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/session.py +0 -0
  183. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/table.py +0 -0
  184. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/types.py +0 -0
  185. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/udf.py +0 -0
  186. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/standalone/window.py +0 -0
  187. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/testing/__init__.py +0 -0
  188. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe/testing/utils.py +0 -0
  189. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe.egg-info/SOURCES.txt +0 -0
  190. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe.egg-info/dependency_links.txt +0 -0
  191. {sqlframe-3.39.2 → sqlframe-3.39.4}/sqlframe.egg-info/top_level.txt +0 -0
  192. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/__init__.py +0 -0
  193. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/common_fixtures.py +0 -0
  194. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/conftest.py +0 -0
  195. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee.csv +0 -0
  196. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee.json +0 -0
  197. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee.parquet +0 -0
  198. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  199. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  200. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  201. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  202. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  203. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  204. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  205. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  206. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  207. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  208. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  209. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  210. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  211. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  212. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/employee_extra_line.csv +0 -0
  213. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/issue_219.csv +0 -0
  214. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  215. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  216. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  217. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  218. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  219. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  220. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  221. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  222. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  223. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  224. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  225. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  226. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  227. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  228. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  229. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  230. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  231. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  232. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  233. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  234. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  235. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  236. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  237. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  238. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  239. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  240. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  241. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  242. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  243. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  244. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  245. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  246. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  247. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  248. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  249. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  250. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  251. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  252. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  253. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  254. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  255. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  256. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  257. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  258. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  259. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  260. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  261. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  262. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  263. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  264. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  265. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  266. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  267. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  268. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  269. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  270. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  271. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  272. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  273. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  274. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  275. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  276. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  277. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  278. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  279. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  280. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  281. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  282. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  283. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  284. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  285. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  286. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  287. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  288. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  289. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  290. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  291. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  292. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  293. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  294. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  295. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  296. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  297. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  298. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  299. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  300. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  301. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  302. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  303. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  304. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  305. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  306. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  307. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  308. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  309. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  310. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  311. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  312. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  313. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/__init__.py +0 -0
  314. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/__init__.py +0 -0
  315. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/bigquery/__init__.py +0 -0
  316. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  317. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  318. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  319. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/databricks/__init__.py +0 -0
  320. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
  321. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
  322. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
  323. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/__init__.py +0 -0
  324. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  325. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  326. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  327. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  328. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  329. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/duck/test_tpcds.py +0 -0
  330. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/postgres/__init__.py +0 -0
  331. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  332. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  333. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  334. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  335. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/redshift/__init__.py +0 -0
  336. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  337. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  338. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/snowflake/__init__.py +0 -0
  339. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  340. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  341. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  342. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/spark/__init__.py +0 -0
  343. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  344. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  345. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_engine_column.py +0 -0
  346. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_engine_dataframe.py +0 -0
  347. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_engine_reader.py +0 -0
  348. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_engine_session.py +0 -0
  349. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_engine_table.py +0 -0
  350. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_engine_writer.py +0 -0
  351. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/engines/test_int_testing.py +0 -0
  352. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/fixtures.py +0 -0
  353. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/test_int_dataframe.py +0 -0
  354. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/test_int_dataframe_stats.py +0 -0
  355. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/test_int_grouped_data.py +0 -0
  356. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/integration/test_int_session.py +0 -0
  357. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/types.py +0 -0
  358. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/__init__.py +0 -0
  359. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/bigquery/__init__.py +0 -0
  360. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/bigquery/test_activate.py +0 -0
  361. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/conftest.py +0 -0
  362. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/databricks/__init__.py +0 -0
  363. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/databricks/test_activate.py +0 -0
  364. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/duck/__init__.py +0 -0
  365. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/duck/test_activate.py +0 -0
  366. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/duck/test_reader_options.py +0 -0
  367. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/postgres/__init__.py +0 -0
  368. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/postgres/test_activate.py +0 -0
  369. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/redshift/__init__.py +0 -0
  370. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/redshift/test_activate.py +0 -0
  371. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/snowflake/__init__.py +0 -0
  372. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/snowflake/test_activate.py +0 -0
  373. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/spark/__init__.py +0 -0
  374. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/spark/test_activate.py +0 -0
  375. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/spark/test_reader_options.py +0 -0
  376. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/__init__.py +0 -0
  377. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/fixtures.py +0 -0
  378. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_activate.py +0 -0
  379. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_column.py +0 -0
  380. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_dataframe.py +0 -0
  381. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  382. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_functions.py +0 -0
  383. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  384. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_types.py +0 -0
  385. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/standalone/test_window.py +0 -0
  386. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/test_activate.py +0 -0
  387. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/test_base_reader_options.py +0 -0
  388. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/test_catalog.py +0 -0
  389. {sqlframe-3.39.2 → sqlframe-3.39.4}/tests/unit/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.39.2
3
+ Version: 3.39.4
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -20,8 +20,9 @@ setup(
20
20
  python_requires=">=3.9",
21
21
  install_requires=[
22
22
  "prettytable<4",
23
- "sqlglot>=24.0.0,<27.9",
23
+ "sqlglot>=24.0.0,<27.10",
24
24
  "typing_extensions",
25
+ "more-itertools",
25
26
  ],
26
27
  extras_require={
27
28
  "bigquery": [
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '3.39.2'
32
- __version_tuple__ = version_tuple = (3, 39, 2)
31
+ __version__ = version = '3.39.4'
32
+ __version_tuple__ = version_tuple = (3, 39, 4)
33
33
 
34
- __commit_id__ = commit_id = 'g772b3a6bf'
34
+ __commit_id__ = commit_id = 'g7103a1e73'
@@ -31,6 +31,7 @@ from sqlframe.base.util import (
31
31
  get_func_from_session,
32
32
  get_tables_from_expression_with_join,
33
33
  normalize_string,
34
+ partition_to,
34
35
  quote_preserving_alias_or_name,
35
36
  sqlglot_to_spark,
36
37
  verify_openai_installed,
@@ -1633,14 +1634,30 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1633
1634
 
1634
1635
  @operation(Operation.SELECT)
1635
1636
  def drop(self, *cols: t.Union[str, Column]) -> Self:
1636
- all_columns = self._get_outer_select_columns(self.expression)
1637
- drop_cols = self._ensure_and_normalize_cols(cols)
1638
- new_columns = [
1639
- col
1640
- for col in all_columns
1641
- if col.alias_or_name not in [drop_column.alias_or_name for drop_column in drop_cols]
1642
- ]
1643
- return self.copy().select(*new_columns, append=False)
1637
+ # Separate string column names from Column objects for different handling
1638
+ column_objs, column_names = partition_to(lambda x: isinstance(x, str), cols, list, set)
1639
+
1640
+ # Normalize only the Column objects (strings will be handled as unqualified)
1641
+ drop_cols = self._ensure_and_normalize_cols(column_objs) if column_objs else []
1642
+
1643
+ # Work directly with the expression's select columns to preserve table qualifiers
1644
+ current_expressions = self.expression.expressions
1645
+ drop_sql = {drop_col.expression.sql() for drop_col in drop_cols}
1646
+
1647
+ # Create a more sophisticated matching function that considers table qualifiers
1648
+ def should_drop_expression(expr: exp.Expression) -> bool:
1649
+ # Check against fully qualified Column objects and
1650
+ # Check against unqualified string column names (drop ALL columns with this name)
1651
+ if expr.sql() in drop_sql or (
1652
+ isinstance(expr, exp.Column) and expr.alias_or_name in column_names
1653
+ ):
1654
+ return True
1655
+ return False
1656
+
1657
+ new_expressions = [expr for expr in current_expressions if not should_drop_expression(expr)]
1658
+ return self.select.__wrapped__( # type: ignore
1659
+ self, *new_expressions, skip_update_display_name_mapping=True
1660
+ )
1644
1661
 
1645
1662
  @operation(Operation.LIMIT)
1646
1663
  def limit(self, num: int) -> Self:
@@ -37,9 +37,7 @@ def _get_session() -> _BaseSession:
37
37
 
38
38
  @meta()
39
39
  def col(column_name: t.Union[ColumnOrName, t.Any]) -> Column:
40
- from sqlframe.base.session import _BaseSession
41
-
42
- dialect = _BaseSession().input_dialect
40
+ dialect = _get_session().input_dialect
43
41
  if isinstance(column_name, str):
44
42
  col_expression = expression.to_column(column_name, dialect=dialect).transform(
45
43
  dialect.normalize_identifier
@@ -662,9 +660,7 @@ def grouping_id(*cols: ColumnOrName) -> Column:
662
660
 
663
661
  @meta()
664
662
  def input_file_name() -> Column:
665
- from sqlframe.base.session import _BaseSession
666
-
667
- return Column(expression.Literal.string(_BaseSession()._last_loaded_file or ""))
663
+ return Column(expression.Literal.string(_get_session()._last_loaded_file or ""))
668
664
 
669
665
 
670
666
  @meta()
@@ -959,12 +955,10 @@ def current_timestamp() -> Column:
959
955
 
960
956
  @meta()
961
957
  def date_format(col: ColumnOrName, format: str) -> Column:
962
- from sqlframe.base.session import _BaseSession
963
-
964
958
  return Column.invoke_expression_over_column(
965
959
  Column(expression.TimeStrToTime(this=Column.ensure_col(col).column_expression)),
966
960
  expression.TimeToStr,
967
- format=_BaseSession().format_time(format),
961
+ format=_get_session().format_time(format),
968
962
  )
969
963
 
970
964
 
@@ -1450,6 +1444,9 @@ def unix_timestamp(
1450
1444
 
1451
1445
  session = _get_session()
1452
1446
 
1447
+ if session._is_duckdb or session._is_postgres or session._is_snowflake or session._is_bigquery:
1448
+ timestamp = Column.ensure_col(timestamp).cast("string")
1449
+
1453
1450
  if session._is_bigquery:
1454
1451
  return unix_timestamp_bgutil(timestamp, format)
1455
1452
 
@@ -3375,10 +3372,9 @@ def get(col: ColumnOrName, index: t.Union[ColumnOrName, int]) -> Column:
3375
3372
  def get_active_spark_context() -> SparkContext:
3376
3373
  """Raise RuntimeError if SparkContext is not initialized,
3377
3374
  otherwise, returns the active SparkContext."""
3378
- from sqlframe.base.session import _BaseSession
3379
3375
  from sqlframe.spark.session import SparkSession
3380
3376
 
3381
- session: _BaseSession = _BaseSession()
3377
+ session = _get_session()
3382
3378
  if not isinstance(session, SparkSession):
3383
3379
  raise RuntimeError("This function is only available in SparkSession.")
3384
3380
  return session.spark_session.sparkContext
@@ -6341,7 +6337,8 @@ def to_unix_timestamp(
6341
6337
  session = _get_session()
6342
6338
 
6343
6339
  if session._is_duckdb:
6344
- format = format or _BaseSession().default_time_format
6340
+ format = format or session.default_time_format
6341
+ timestamp = Column.ensure_col(timestamp).cast("string")
6345
6342
 
6346
6343
  if format is not None:
6347
6344
  return Column.invoke_expression_over_column(
@@ -179,7 +179,7 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
179
179
  return self._table(self, *args, **kwargs)
180
180
 
181
181
  def __new__(cls, *args, **kwargs):
182
- if _BaseSession._instance is None:
182
+ if _BaseSession._instance is None or not isinstance(_BaseSession._instance, cls):
183
183
  _BaseSession._instance = super().__new__(cls)
184
184
  return _BaseSession._instance
185
185
 
@@ -194,6 +194,11 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
194
194
  def getActiveSession(self) -> Self:
195
195
  return self
196
196
 
197
+ def stop(self) -> None:
198
+ if connection := getattr(self, "_connection", None):
199
+ connection.close()
200
+ _BaseSession._instance = None
201
+
197
202
  def range(
198
203
  self,
199
204
  start: int,
@@ -6,6 +6,7 @@ import string
6
6
  import typing as t
7
7
  import unicodedata
8
8
 
9
+ from more_itertools import partition
9
10
  from sqlglot import expressions as exp
10
11
  from sqlglot import parse_one, to_table
11
12
  from sqlglot.dialects import DuckDB
@@ -537,3 +538,17 @@ def is_relativedelta_like(value: t.Any) -> bool:
537
538
  and hasattr(value, "weeks")
538
539
  and hasattr(value, "leapdays")
539
540
  )
541
+
542
+
543
+ T = t.TypeVar("T")
544
+ R1 = t.TypeVar("R1")
545
+ R2 = t.TypeVar("R2")
546
+
547
+
548
+ def partition_to(
549
+ pred: t.Callable[[T], bool],
550
+ iterable: t.Iterable[T],
551
+ result1: t.Type[R1],
552
+ result2: t.Type[R2],
553
+ ) -> tuple[R1, R2]:
554
+ return (lambda x, y: (result1(x), result2(y)))(*partition(pred, iterable)) # type: ignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.39.2
3
+ Version: 3.39.4
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,6 @@
1
+ more-itertools
1
2
  prettytable<4
2
- sqlglot<27.9,>=24.0.0
3
+ sqlglot<27.10,>=24.0.0
3
4
  typing_extensions
4
5
 
5
6
  [bigquery]
@@ -0,0 +1,38 @@
1
+ import pytest
2
+ from duckdb.duckdb import ConnectionException
3
+ from sqlglot import exp
4
+
5
+ from sqlframe.base.types import Row
6
+ from sqlframe.duckdb.session import DuckDBSession
7
+
8
+ pytest_plugins = ["tests.common_fixtures"]
9
+
10
+
11
+ def test_session_from_config():
12
+ import duckdb
13
+
14
+ conn = duckdb.connect()
15
+ conn.execute("CREATE TABLE test_table (cola INT, colb STRING)")
16
+ session = DuckDBSession.builder.config("sqlframe.conn", conn).getOrCreate()
17
+ columns = session.catalog.get_columns("test_table")
18
+ assert columns == {"cola": exp.DataType.build("INT"), "colb": exp.DataType.build("TEXT")}
19
+ assert session.execution_dialect_name == "duckdb"
20
+
21
+
22
+ @pytest.mark.forked
23
+ def test_session_stop(duckdb_session: DuckDBSession):
24
+ assert duckdb_session.range(1, 2).collect() == [Row(id=1)]
25
+ duckdb_session.stop()
26
+ with pytest.raises(ConnectionException):
27
+ duckdb_session.range(1, 10).collect()
28
+
29
+
30
+ @pytest.mark.forked
31
+ def test_session_new_session(duckdb_session: DuckDBSession):
32
+ # Remove old session
33
+ assert duckdb_session.range(1, 2).collect() == [Row(id=1)]
34
+ duckdb_session.stop()
35
+ new_session = DuckDBSession.builder.getOrCreate()
36
+ assert new_session is not duckdb_session
37
+ assert isinstance(new_session, DuckDBSession)
38
+ assert new_session.range(1, 2).collect() == [Row(id=1)]
@@ -1502,11 +1502,15 @@ def test_from_unixtime(get_session_and_func):
1502
1502
  assert df.select(from_unixtime("unix_time").alias("ts")).first()[0] == expected
1503
1503
 
1504
1504
 
1505
- def test_unix_timestamp(get_session_and_func):
1505
+ def test_unix_timestamp(get_session_and_func, get_func):
1506
1506
  session, unix_timestamp = get_session_and_func("unix_timestamp")
1507
1507
  df = session.createDataFrame([("2015-04-08",)], ["dt"])
1508
1508
  result = df.select(unix_timestamp("dt", "yyyy-MM-dd").alias("unix_time")).first()[0]
1509
1509
  assert result == 1428451200
1510
+ ts_type = "TIMESTAMP" if isinstance(session, PySparkSession) else "TIMESTAMPNTZ"
1511
+ df = session.createDataFrame([(datetime.datetime(2015, 4, 8),)], schema=f"ts {ts_type}")
1512
+ result = df.select(unix_timestamp("ts").alias("unix_time")).first()[0]
1513
+ assert result == 1428451200
1510
1514
 
1511
1515
 
1512
1516
  def test_from_utc_timestamp(get_session_and_func):
@@ -5003,6 +5007,12 @@ def test_to_unix_timestamp(get_session_and_func, get_func):
5003
5007
  else:
5004
5008
  df = session.createDataFrame([("2016-04-08",)], ["e"])
5005
5009
  assert df.select(to_unix_timestamp(df.e).alias("r")).collect() == [Row(r=None)]
5010
+ ts_type = "TIMESTAMP" if isinstance(session, PySparkSession) else "TIMESTAMPNTZ"
5011
+ df = session.createDataFrame([(datetime.datetime(2015, 4, 8),)], schema=f"ts {ts_type}")
5012
+ result = df.select(
5013
+ to_unix_timestamp("ts", lit("yyyy-MM-dd HH:mm:ss")).alias("unix_time")
5014
+ ).first()[0]
5015
+ assert result == 1428451200
5006
5016
 
5007
5017
 
5008
5018
  def test_to_varchar(get_session_and_func, get_func):
@@ -136,24 +136,3 @@ def test_sql_insert(standalone_session: StandaloneSession, compare_sql: t.Callab
136
136
 
137
137
  def test_session_create_builder_patterns():
138
138
  assert StandaloneSession.builder.appName("abc").getOrCreate() == StandaloneSession()
139
-
140
-
141
- # @pytest.mark.parametrize(
142
- # "input, expected",
143
- # [
144
- # (
145
- # StandaloneSession._to_row(["a"], [1]),
146
- # types.Row(a=1),
147
- # ),
148
- # (
149
- # StandaloneSession._to_row(["a", "b"], [1, 2]),
150
- # types.Row(a=1, b=2),
151
- # ),
152
- # (
153
- # StandaloneSession._to_row(["a", "a"], [1, 2]),
154
- # types.Row(a=1, a=2),
155
- # ),
156
- # ],
157
- # )
158
- # def test_to_row(input, expected):
159
- # assert input == expected
@@ -1,14 +0,0 @@
1
- from sqlglot import exp
2
-
3
- from sqlframe.duckdb.session import DuckDBSession
4
-
5
-
6
- def test_session_from_config():
7
- import duckdb
8
-
9
- conn = duckdb.connect()
10
- conn.execute("CREATE TABLE test_table (cola INT, colb STRING)")
11
- session = DuckDBSession.builder.config("sqlframe.conn", conn).getOrCreate()
12
- columns = session.catalog.get_columns("test_table")
13
- assert columns == {"cola": exp.DataType.build("INT"), "colb": exp.DataType.build("TEXT")}
14
- assert session.execution_dialect_name == "duckdb"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes