sqlframe 3.17.0__tar.gz → 3.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. {sqlframe-3.17.0 → sqlframe-3.18.0}/PKG-INFO +1 -1
  2. {sqlframe-3.17.0 → sqlframe-3.18.0}/setup.py +2 -2
  3. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/_version.py +2 -2
  4. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/dataframe.py +19 -7
  5. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/session.py +33 -9
  6. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/session.py +1 -1
  7. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/session.py +1 -1
  8. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/session.py +1 -1
  9. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/session.py +1 -1
  10. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/session.py +1 -1
  11. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/session.py +1 -1
  12. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/session.py +1 -1
  13. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe.egg-info/PKG-INFO +1 -1
  14. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe.egg-info/requires.txt +2 -2
  15. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/test_int_dataframe.py +37 -0
  16. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_dataframe.py +8 -0
  17. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_functions.py +2 -2
  18. {sqlframe-3.17.0 → sqlframe-3.18.0}/.github/CODEOWNERS +0 -0
  19. {sqlframe-3.17.0 → sqlframe-3.18.0}/.github/workflows/main.workflow.yaml +0 -0
  20. {sqlframe-3.17.0 → sqlframe-3.18.0}/.github/workflows/publish.workflow.yaml +0 -0
  21. {sqlframe-3.17.0 → sqlframe-3.18.0}/.gitignore +0 -0
  22. {sqlframe-3.17.0 → sqlframe-3.18.0}/.pre-commit-config.yaml +0 -0
  23. {sqlframe-3.17.0 → sqlframe-3.18.0}/.readthedocs.yaml +0 -0
  24. {sqlframe-3.17.0 → sqlframe-3.18.0}/LICENSE +0 -0
  25. {sqlframe-3.17.0 → sqlframe-3.18.0}/Makefile +0 -0
  26. {sqlframe-3.17.0 → sqlframe-3.18.0}/README.md +0 -0
  27. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/add_chatgpt_support.md +0 -0
  28. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  29. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  30. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  31. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  32. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  33. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  34. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  35. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  36. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/but_wait_theres_more.gif +0 -0
  37. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/cake.gif +0 -0
  38. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/images/you_get_pyspark_api.gif +0 -0
  39. {sqlframe-3.17.0 → sqlframe-3.18.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  40. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/bigquery.md +0 -0
  41. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/configuration.md +0 -0
  42. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/databricks.md +0 -0
  43. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/bigquery.md +0 -0
  44. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/duckdb.md +0 -0
  45. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/images/SF.png +0 -0
  46. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/images/favicon.png +0 -0
  47. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/images/favicon_old.png +0 -0
  48. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/images/sqlframe_diagram.png +0 -0
  49. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/images/sqlframe_logo.png +0 -0
  50. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/docs/postgres.md +0 -0
  51. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/duckdb.md +0 -0
  52. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/images/SF.png +0 -0
  53. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/images/favicon.png +0 -0
  54. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/images/favicon_old.png +0 -0
  55. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/images/sqlframe_diagram.png +0 -0
  56. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/images/sqlframe_logo.png +0 -0
  57. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/index.md +0 -0
  58. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/postgres.md +0 -0
  59. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/redshift.md +0 -0
  60. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/requirements.txt +0 -0
  61. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/snowflake.md +0 -0
  62. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/spark.md +0 -0
  63. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/standalone.md +0 -0
  64. {sqlframe-3.17.0 → sqlframe-3.18.0}/docs/stylesheets/extra.css +0 -0
  65. {sqlframe-3.17.0 → sqlframe-3.18.0}/mkdocs.yml +0 -0
  66. {sqlframe-3.17.0 → sqlframe-3.18.0}/pytest.ini +0 -0
  67. {sqlframe-3.17.0 → sqlframe-3.18.0}/renovate.json +0 -0
  68. {sqlframe-3.17.0 → sqlframe-3.18.0}/setup.cfg +0 -0
  69. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/LICENSE +0 -0
  70. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/__init__.py +0 -0
  71. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/__init__.py +0 -0
  72. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/_typing.py +0 -0
  73. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/catalog.py +0 -0
  74. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/column.py +0 -0
  75. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/decorators.py +0 -0
  76. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/exceptions.py +0 -0
  77. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/function_alternatives.py +0 -0
  78. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/functions.py +0 -0
  79. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/group.py +0 -0
  80. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/mixins/__init__.py +0 -0
  81. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  82. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  83. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  84. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/mixins/table_mixins.py +0 -0
  85. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/normalize.py +0 -0
  86. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/operations.py +0 -0
  87. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/readerwriter.py +0 -0
  88. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/table.py +0 -0
  89. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/transforms.py +0 -0
  90. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/types.py +0 -0
  91. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/udf.py +0 -0
  92. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/util.py +0 -0
  93. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/base/window.py +0 -0
  94. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/__init__.py +0 -0
  95. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/catalog.py +0 -0
  96. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/column.py +0 -0
  97. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/dataframe.py +0 -0
  98. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/functions.py +0 -0
  99. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/functions.pyi +0 -0
  100. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/group.py +0 -0
  101. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/readwriter.py +0 -0
  102. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/table.py +0 -0
  103. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/types.py +0 -0
  104. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/udf.py +0 -0
  105. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/bigquery/window.py +0 -0
  106. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/__init__.py +0 -0
  107. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/catalog.py +0 -0
  108. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/column.py +0 -0
  109. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/dataframe.py +0 -0
  110. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/functions.py +0 -0
  111. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/functions.pyi +0 -0
  112. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/group.py +0 -0
  113. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/readwriter.py +0 -0
  114. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/table.py +0 -0
  115. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/types.py +0 -0
  116. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/udf.py +0 -0
  117. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/databricks/window.py +0 -0
  118. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/__init__.py +0 -0
  119. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/catalog.py +0 -0
  120. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/column.py +0 -0
  121. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/dataframe.py +0 -0
  122. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/functions.py +0 -0
  123. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/functions.pyi +0 -0
  124. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/group.py +0 -0
  125. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/readwriter.py +0 -0
  126. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/table.py +0 -0
  127. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/types.py +0 -0
  128. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/udf.py +0 -0
  129. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/duckdb/window.py +0 -0
  130. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/__init__.py +0 -0
  131. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/catalog.py +0 -0
  132. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/column.py +0 -0
  133. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/dataframe.py +0 -0
  134. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/functions.py +0 -0
  135. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/functions.pyi +0 -0
  136. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/group.py +0 -0
  137. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/readwriter.py +0 -0
  138. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/table.py +0 -0
  139. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/types.py +0 -0
  140. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/udf.py +0 -0
  141. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/postgres/window.py +0 -0
  142. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/__init__.py +0 -0
  143. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/catalog.py +0 -0
  144. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/column.py +0 -0
  145. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/dataframe.py +0 -0
  146. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/functions.py +0 -0
  147. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/group.py +0 -0
  148. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/readwriter.py +0 -0
  149. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/session.py +0 -0
  150. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/table.py +0 -0
  151. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/types.py +0 -0
  152. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/udf.py +0 -0
  153. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/redshift/window.py +0 -0
  154. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/__init__.py +0 -0
  155. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/catalog.py +0 -0
  156. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/column.py +0 -0
  157. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/dataframe.py +0 -0
  158. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/functions.py +0 -0
  159. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/functions.pyi +0 -0
  160. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/group.py +0 -0
  161. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/readwriter.py +0 -0
  162. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/table.py +0 -0
  163. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/types.py +0 -0
  164. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/udf.py +0 -0
  165. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/snowflake/window.py +0 -0
  166. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/__init__.py +0 -0
  167. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/catalog.py +0 -0
  168. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/column.py +0 -0
  169. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/dataframe.py +0 -0
  170. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/functions.py +0 -0
  171. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/functions.pyi +0 -0
  172. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/group.py +0 -0
  173. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/readwriter.py +0 -0
  174. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/table.py +0 -0
  175. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/types.py +0 -0
  176. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/udf.py +0 -0
  177. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/spark/window.py +0 -0
  178. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/__init__.py +0 -0
  179. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/catalog.py +0 -0
  180. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/column.py +0 -0
  181. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/dataframe.py +0 -0
  182. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/functions.py +0 -0
  183. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/group.py +0 -0
  184. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/readwriter.py +0 -0
  185. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/table.py +0 -0
  186. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/types.py +0 -0
  187. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/udf.py +0 -0
  188. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/standalone/window.py +0 -0
  189. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/testing/__init__.py +0 -0
  190. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe/testing/utils.py +0 -0
  191. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe.egg-info/SOURCES.txt +0 -0
  192. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe.egg-info/dependency_links.txt +0 -0
  193. {sqlframe-3.17.0 → sqlframe-3.18.0}/sqlframe.egg-info/top_level.txt +0 -0
  194. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/__init__.py +0 -0
  195. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/common_fixtures.py +0 -0
  196. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/conftest.py +0 -0
  197. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee.csv +0 -0
  198. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee.json +0 -0
  199. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee.parquet +0 -0
  200. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  201. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  202. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  203. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  204. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  205. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  206. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  207. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
  208. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  209. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  210. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  211. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  212. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  213. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  214. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/employee_extra_line.csv +0 -0
  215. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/issue_219.csv +0 -0
  216. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
  217. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
  218. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
  219. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
  220. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
  221. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
  222. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
  223. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
  224. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
  225. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
  226. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
  227. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
  228. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
  229. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
  230. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
  231. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
  232. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
  233. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
  234. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
  235. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
  236. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
  237. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
  238. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
  239. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
  240. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
  241. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
  242. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
  243. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
  244. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
  245. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
  246. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
  247. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
  248. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
  249. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
  250. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
  251. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
  252. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
  253. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
  254. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
  255. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
  256. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
  257. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
  258. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
  259. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
  260. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
  261. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
  262. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
  263. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
  264. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
  265. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
  266. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
  267. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
  268. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
  269. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
  270. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
  271. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
  272. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
  273. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
  274. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
  275. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
  276. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
  277. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
  278. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
  279. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
  280. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
  281. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
  282. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
  283. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
  284. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
  285. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
  286. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
  287. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
  288. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
  289. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
  290. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
  291. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
  292. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
  293. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
  294. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
  295. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
  296. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
  297. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
  298. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
  299. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
  300. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
  301. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
  302. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
  303. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
  304. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
  305. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
  306. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
  307. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
  308. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
  309. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
  310. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
  311. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
  312. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
  313. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
  314. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
  315. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/__init__.py +0 -0
  316. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/__init__.py +0 -0
  317. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/bigquery/__init__.py +0 -0
  318. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  319. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  320. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  321. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/databricks/__init__.py +0 -0
  322. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
  323. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
  324. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
  325. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/__init__.py +0 -0
  326. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  327. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  328. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  329. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  330. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  331. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  332. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
  333. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/postgres/__init__.py +0 -0
  334. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  335. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  336. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  337. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  338. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/redshift/__init__.py +0 -0
  339. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  340. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  341. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/snowflake/__init__.py +0 -0
  342. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  343. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  344. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  345. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/spark/__init__.py +0 -0
  346. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  347. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  348. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_engine_column.py +0 -0
  349. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
  350. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_engine_reader.py +0 -0
  351. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_engine_session.py +0 -0
  352. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_engine_table.py +0 -0
  353. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_engine_writer.py +0 -0
  354. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_int_functions.py +0 -0
  355. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/engines/test_int_testing.py +0 -0
  356. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/fixtures.py +0 -0
  357. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/test_int_dataframe_stats.py +0 -0
  358. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/test_int_grouped_data.py +0 -0
  359. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/integration/test_int_session.py +0 -0
  360. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/types.py +0 -0
  361. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/__init__.py +0 -0
  362. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/bigquery/__init__.py +0 -0
  363. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/bigquery/test_activate.py +0 -0
  364. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/conftest.py +0 -0
  365. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/databricks/__init__.py +0 -0
  366. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/databricks/test_activate.py +0 -0
  367. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/duck/__init__.py +0 -0
  368. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/duck/test_activate.py +0 -0
  369. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/postgres/__init__.py +0 -0
  370. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/postgres/test_activate.py +0 -0
  371. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/redshift/__init__.py +0 -0
  372. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/redshift/test_activate.py +0 -0
  373. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/snowflake/__init__.py +0 -0
  374. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/snowflake/test_activate.py +0 -0
  375. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/spark/__init__.py +0 -0
  376. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/spark/test_activate.py +0 -0
  377. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/__init__.py +0 -0
  378. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/fixtures.py +0 -0
  379. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_activate.py +0 -0
  380. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_column.py +0 -0
  381. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  382. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_session.py +0 -0
  383. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  384. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_types.py +0 -0
  385. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/standalone/test_window.py +0 -0
  386. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/test_activate.py +0 -0
  387. {sqlframe-3.17.0 → sqlframe-3.18.0}/tests/unit/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.17.0
3
+ Version: 3.18.0
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -20,7 +20,7 @@ setup(
20
20
  python_requires=">=3.9",
21
21
  install_requires=[
22
22
  "prettytable<4",
23
- "sqlglot>=24.0.0,<26.4",
23
+ "sqlglot>=24.0.0,<26.5",
24
24
  "typing_extensions",
25
25
  ],
26
26
  extras_require={
@@ -31,7 +31,7 @@ setup(
31
31
  "dev": [
32
32
  "duckdb>=0.9,<1.2",
33
33
  "findspark>=2,<3",
34
- "mypy>=1.10.0,<1.15",
34
+ "mypy>=1.10.0,<1.16",
35
35
  "openai>=1.30,<2",
36
36
  "pandas>=2,<3",
37
37
  "pandas-stubs>=2,<3",
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.17.0'
16
- __version_tuple__ = version_tuple = (3, 17, 0)
15
+ __version__ = version = '3.18.0'
16
+ __version_tuple__ = version_tuple = (3, 18, 0)
@@ -23,7 +23,6 @@ from sqlglot import lineage as sqlglot_lineage
23
23
  from sqlglot.helper import ensure_list, flatten, object_to_dict, seq_get
24
24
  from sqlglot.optimizer.pushdown_projections import pushdown_projections
25
25
  from sqlglot.optimizer.qualify import qualify
26
- from sqlglot.optimizer.qualify_columns import quote_identifiers
27
26
 
28
27
  from sqlframe.base.catalog import Column as CatalogColumn
29
28
  from sqlframe.base.operations import Operation, operation
@@ -616,6 +615,7 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
616
615
  self,
617
616
  optimize: bool = True,
618
617
  openai_config: t.Optional[t.Union[t.Dict[str, t.Any], OpenAIConfig]] = None,
618
+ quote_identifiers: bool = True,
619
619
  ) -> t.List[exp.Expression]:
620
620
  df = self._resolve_pending_hints()
621
621
  select_expressions = df._get_select_expressions()
@@ -644,7 +644,7 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
644
644
  if optimize:
645
645
  select_expression = t.cast(
646
646
  exp.Select,
647
- self.session._optimize(select_expression),
647
+ self.session._optimize(select_expression, quote_identifiers=quote_identifiers),
648
648
  )
649
649
  elif openai_config:
650
650
  qualify(
@@ -713,8 +713,9 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
713
713
  dialect: DialectType = ...,
714
714
  optimize: bool = ...,
715
715
  pretty: bool = ...,
716
+ quote_identifiers: bool = ...,
716
717
  *,
717
- as_list: t.Literal[False],
718
+ as_list: t.Literal[False] = False,
718
719
  **kwargs: t.Any,
719
720
  ) -> str: ...
720
721
 
@@ -724,6 +725,7 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
724
725
  dialect: DialectType = ...,
725
726
  optimize: bool = ...,
726
727
  pretty: bool = ...,
728
+ quote_identifiers: bool = ...,
727
729
  *,
728
730
  as_list: t.Literal[True],
729
731
  **kwargs: t.Any,
@@ -734,14 +736,23 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
734
736
  dialect: DialectType = None,
735
737
  optimize: bool = True,
736
738
  pretty: bool = True,
739
+ quote_identifiers: bool = True,
737
740
  openai_config: t.Optional[t.Union[t.Dict[str, t.Any], OpenAIConfig]] = None,
738
741
  as_list: bool = False,
739
742
  **kwargs,
740
743
  ) -> t.Union[str, t.List[str]]:
741
744
  dialect = Dialect.get_or_raise(dialect) if dialect else self.session.output_dialect
742
745
  results = []
743
- for expression in self._get_expressions(optimize=optimize, openai_config=openai_config):
744
- sql = self.session._to_sql(expression, dialect=dialect, pretty=pretty, **kwargs)
746
+ for expression in self._get_expressions(
747
+ optimize=optimize, openai_config=openai_config, quote_identifiers=quote_identifiers
748
+ ):
749
+ sql = self.session._to_sql(
750
+ expression,
751
+ dialect=dialect,
752
+ pretty=pretty,
753
+ quote_identifiers=quote_identifiers,
754
+ **kwargs,
755
+ )
745
756
  if openai_config:
746
757
  assert isinstance(openai_config, OpenAIConfig)
747
758
  verify_openai_installed()
@@ -822,8 +833,9 @@ class BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
822
833
  if cte:
823
834
  resolved_column_position[ambiguous_col] += 1
824
835
  else:
825
- cte = ctes_with_column[resolved_column_position[ambiguous_col]]
826
- ambiguous_col.set("table", exp.to_identifier(cte.alias_or_name))
836
+ cte = seq_get(ctes_with_column, resolved_column_position[ambiguous_col])
837
+ if cte:
838
+ ambiguous_col.set("table", exp.to_identifier(cte.alias_or_name))
827
839
 
828
840
  @operation(Operation.SELECT)
829
841
  def select(self, *cols, **kwargs) -> Self:
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import contextlib
5
6
  import datetime
6
7
  import logging
7
8
  import sys
@@ -15,6 +16,7 @@ from sqlglot import Dialect, exp
15
16
  from sqlglot.dialects.dialect import DialectType, NormalizationStrategy
16
17
  from sqlglot.expressions import parse_identifier
17
18
  from sqlglot.helper import ensure_list, seq_get
19
+ from sqlglot.optimizer import RULES as OPTIMIZER_RULES
18
20
  from sqlglot.optimizer import optimize
19
21
  from sqlglot.optimizer.normalize_identifiers import normalize_identifiers
20
22
  from sqlglot.optimizer.qualify import qualify as qualify_func
@@ -213,13 +215,16 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
213
215
 
214
216
  def createDataFrame(
215
217
  self,
216
- data: t.Sequence[
217
- t.Union[
218
- t.Dict[str, ColumnLiterals],
219
- t.List[ColumnLiterals],
220
- t.Tuple[ColumnLiterals, ...],
221
- ColumnLiterals,
222
- ]
218
+ data: t.Union[
219
+ t.Sequence[
220
+ t.Union[
221
+ t.Dict[str, ColumnLiterals],
222
+ t.List[ColumnLiterals],
223
+ t.Tuple[ColumnLiterals, ...],
224
+ ColumnLiterals,
225
+ ],
226
+ ],
227
+ pd.DataFrame,
223
228
  ],
224
229
  schema: t.Optional[SchemaInput] = None,
225
230
  samplingRatio: t.Optional[float] = None,
@@ -240,11 +245,18 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
240
245
  ):
241
246
  raise NotImplementedError("Only schema of either list or string of list supported")
242
247
 
248
+ with contextlib.suppress(ImportError):
249
+ from pandas import DataFrame as pd_DataFrame
250
+
251
+ if isinstance(data, pd_DataFrame):
252
+ data = data.to_dict("records") # type: ignore
253
+
243
254
  column_mapping: t.Mapping[str, t.Optional[exp.DataType]]
244
255
  if schema is not None:
245
256
  column_mapping = get_column_mapping_from_schema_input(
246
257
  schema, dialect=self.input_dialect
247
258
  )
259
+
248
260
  elif data:
249
261
  if isinstance(data[0], Row):
250
262
  column_mapping = {col_name.strip(): None for col_name in data[0].__fields__}
@@ -386,7 +398,8 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
386
398
  dialect = Dialect.get_or_raise(dialect or self.input_dialect)
387
399
  expression = (
388
400
  sqlglot.parse_one(
389
- normalize_string(sqlQuery, from_dialect=dialect, is_query=True), read=dialect
401
+ normalize_string(sqlQuery, from_dialect=dialect, is_query=True),
402
+ read=dialect,
390
403
  )
391
404
  if isinstance(sqlQuery, str)
392
405
  else sqlQuery
@@ -544,6 +557,7 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
544
557
  dialect: DialectType = None,
545
558
  quote_identifiers: bool = True,
546
559
  pretty: bool = False,
560
+ **kwargs,
547
561
  ) -> str:
548
562
  return normalize_string(
549
563
  sql,
@@ -562,9 +576,19 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
562
576
  ) -> exp.Expression:
563
577
  dialect = dialect or self.input_dialect
564
578
  normalize_identifiers(expression, dialect=dialect)
579
+ rules = list(OPTIMIZER_RULES)
565
580
  if quote_identifiers:
566
581
  quote_identifiers_func(expression, dialect=dialect)
567
- return optimize(expression, dialect=dialect, schema=self.catalog._schema, infer_schema=True)
582
+ else:
583
+ rules.remove(quote_identifiers_func)
584
+ return optimize(
585
+ expression,
586
+ dialect=dialect,
587
+ schema=self.catalog._schema,
588
+ infer_schema=True,
589
+ quote_identifiers=quote_identifiers,
590
+ rules=rules, # type: ignore
591
+ )
568
592
 
569
593
  def _execute(self, sql: str) -> None:
570
594
  self._cur.execute(sql)
@@ -27,7 +27,7 @@ class BigQuerySession(
27
27
  BigQueryDataFrameWriter,
28
28
  BigQueryDataFrame,
29
29
  BigQueryTable,
30
- BigQueryConnection,
30
+ BigQueryConnection, # type: ignore
31
31
  BigQueryUDFRegistration,
32
32
  ],
33
33
  ):
@@ -26,7 +26,7 @@ class DatabricksSession(
26
26
  DatabricksDataFrameWriter,
27
27
  DatabricksDataFrame,
28
28
  DatabricksTable,
29
- DatabricksConnection,
29
+ DatabricksConnection, # type: ignore
30
30
  DatabricksUDFRegistration,
31
31
  ],
32
32
  ):
@@ -28,7 +28,7 @@ class DuckDBSession(
28
28
  DuckDBDataFrameWriter,
29
29
  DuckDBDataFrame,
30
30
  DuckDBTable,
31
- DuckDBPyConnection,
31
+ DuckDBPyConnection, # type: ignore
32
32
  DuckDBUDFRegistration,
33
33
  ]
34
34
  ):
@@ -29,7 +29,7 @@ class PostgresSession(
29
29
  PostgresDataFrameWriter,
30
30
  PostgresDataFrame,
31
31
  PostgresTable,
32
- psycopg2_connection,
32
+ psycopg2_connection, # type: ignore
33
33
  PostgresUDFRegistration,
34
34
  ],
35
35
  ):
@@ -53,7 +53,7 @@ class SnowflakeSession(
53
53
  SnowflakeDataFrameWriter,
54
54
  SnowflakeDataFrame,
55
55
  SnowflakeTable,
56
- SnowflakeConnection,
56
+ SnowflakeConnection, # type: ignore
57
57
  SnowflakeUDFRegistration,
58
58
  ],
59
59
  ):
@@ -34,7 +34,7 @@ class SparkSession(
34
34
  SparkDataFrameWriter,
35
35
  SparkDataFrame,
36
36
  SparkTable,
37
- PySparkSession,
37
+ PySparkSession, # type: ignore
38
38
  SparkUDFRegistration,
39
39
  ],
40
40
  ):
@@ -20,7 +20,7 @@ class StandaloneSession(
20
20
  StandaloneDataFrameWriter,
21
21
  StandaloneDataFrame,
22
22
  StandaloneTable,
23
- object,
23
+ object, # type: ignore
24
24
  StandaloneUDFRegistration,
25
25
  ]
26
26
  ): # type: ignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.17.0
3
+ Version: 3.18.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.4,>=24.0.0
2
+ sqlglot<26.5,>=24.0.0
3
3
  typing_extensions
4
4
 
5
5
  [bigquery]
@@ -12,7 +12,7 @@ databricks-sql-connector<5,>=3.6
12
12
  [dev]
13
13
  duckdb<1.2,>=0.9
14
14
  findspark<3,>=2
15
- mypy<1.15,>=1.10.0
15
+ mypy<1.16,>=1.10.0
16
16
  openai<2,>=1.30
17
17
  pandas-stubs<3,>=2
18
18
  pandas<3,>=2
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import typing as t
4
4
 
5
+ import pandas as pd
5
6
  import pytest
6
7
  from _pytest.fixtures import FixtureRequest
7
8
  from pyspark.sql import DataFrame as PySparkDataFrame
@@ -29,6 +30,20 @@ def test_empty_df(
29
30
  compare_frames(df_empty, dfs_empty, no_empty=False)
30
31
 
31
32
 
33
+ def test_dataframe_from_pandas(
34
+ pyspark_employee: PySparkDataFrame,
35
+ get_df: t.Callable[[str], BaseDataFrame],
36
+ compare_frames: t.Callable,
37
+ ):
38
+ employee = get_df("employee")
39
+ compare_frames(
40
+ pyspark_employee,
41
+ employee.session.createDataFrame(
42
+ pyspark_employee.toPandas(), schema=pyspark_employee.schema.simpleString()
43
+ ),
44
+ )
45
+
46
+
32
47
  def test_simple_select(
33
48
  pyspark_employee: PySparkDataFrame,
34
49
  get_df: t.Callable[[str], BaseDataFrame],
@@ -2414,3 +2429,25 @@ def test_filtering_join_key(
2414
2429
  ).filter(SF.col("store_id") > 1)
2415
2430
 
2416
2431
  compare_frames(df, dfs, compare_schema=False, sort=True)
2432
+
2433
+
2434
+ # https://github.com/eakmanrq/sqlframe/issues/281
2435
+ def test_create_column_after_join(
2436
+ pyspark_employee: PySparkDataFrame,
2437
+ pyspark_store: PySparkDataFrame,
2438
+ get_df: t.Callable[[str], BaseDataFrame],
2439
+ compare_frames: t.Callable,
2440
+ ):
2441
+ df = pyspark_employee.join(
2442
+ pyspark_store,
2443
+ on="store_id",
2444
+ ).withColumn("new_col", F.lit(1))
2445
+
2446
+ employee = get_df("employee")
2447
+ store = get_df("store")
2448
+ dfs = employee.join(
2449
+ store,
2450
+ on="store_id",
2451
+ ).withColumn("new_col", SF.lit(1))
2452
+
2453
+ compare_frames(df, dfs, compare_schema=False, sort=True)
@@ -148,3 +148,11 @@ def test_lineage(standalone_employee: StandaloneDataFrame):
148
148
  standalone_employee.session.sql("SELECT * FROM employee").lineage("age").source.sql()
149
149
  == "SELECT employee.age AS age FROM employee AS employee"
150
150
  )
151
+
152
+
153
+ # Issue: https://github.com/eakmanrq/sqlframe/issues/286
154
+ def test_unquoted_identifiers(standalone_employee: StandaloneDataFrame):
155
+ assert (
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)"
158
+ )
@@ -1197,10 +1197,10 @@ def test_current_timestamp():
1197
1197
  @pytest.mark.parametrize(
1198
1198
  "expression, expected",
1199
1199
  [
1200
- (SF.date_format("cola", "MM/dd/yyy"), "DATE_FORMAT(CAST(cola AS TIMESTAMP), 'MM/dd/yyy')"),
1200
+ (SF.date_format("cola", "MM/dd/yyy"), "DATE_FORMAT(cola, 'MM/dd/yyy')"),
1201
1201
  (
1202
1202
  SF.date_format(SF.col("cola"), "MM/dd/yyy"),
1203
- "DATE_FORMAT(CAST(cola AS TIMESTAMP), 'MM/dd/yyy')",
1203
+ "DATE_FORMAT(cola, 'MM/dd/yyy')",
1204
1204
  ),
1205
1205
  ],
1206
1206
  )
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