sqlframe 3.1.0__tar.gz → 3.2.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 (255) hide show
  1. {sqlframe-3.1.0 → sqlframe-3.2.0}/PKG-INFO +1 -1
  2. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/configuration.md +1 -1
  3. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/standalone.md +1 -1
  4. {sqlframe-3.1.0 → sqlframe-3.2.0}/setup.py +3 -3
  5. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/_version.py +2 -2
  6. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/group.py +1 -1
  7. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/readwriter.py +3 -1
  8. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe.egg-info/PKG-INFO +1 -1
  9. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe.egg-info/SOURCES.txt +14 -0
  10. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe.egg-info/requires.txt +3 -3
  11. sqlframe-3.2.0/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
  12. sqlframe-3.2.0/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
  13. sqlframe-3.2.0/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
  14. sqlframe-3.2.0/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
  15. sqlframe-3.2.0/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
  16. sqlframe-3.2.0/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
  17. sqlframe-3.2.0/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
  18. sqlframe-3.2.0/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +8 -0
  19. sqlframe-3.2.0/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
  20. sqlframe-3.2.0/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
  21. sqlframe-3.2.0/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
  22. sqlframe-3.2.0/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
  23. sqlframe-3.2.0/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
  24. sqlframe-3.2.0/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
  25. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/test_duckdb_reader.py +16 -0
  26. {sqlframe-3.1.0 → sqlframe-3.2.0}/.github/CODEOWNERS +0 -0
  27. {sqlframe-3.1.0 → sqlframe-3.2.0}/.github/workflows/main.workflow.yaml +0 -0
  28. {sqlframe-3.1.0 → sqlframe-3.2.0}/.github/workflows/publish.workflow.yaml +0 -0
  29. {sqlframe-3.1.0 → sqlframe-3.2.0}/.gitignore +0 -0
  30. {sqlframe-3.1.0 → sqlframe-3.2.0}/.pre-commit-config.yaml +0 -0
  31. {sqlframe-3.1.0 → sqlframe-3.2.0}/.readthedocs.yaml +0 -0
  32. {sqlframe-3.1.0 → sqlframe-3.2.0}/LICENSE +0 -0
  33. {sqlframe-3.1.0 → sqlframe-3.2.0}/Makefile +0 -0
  34. {sqlframe-3.1.0 → sqlframe-3.2.0}/README.md +0 -0
  35. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/add_chatgpt_support.md +0 -0
  36. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  37. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  38. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  39. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  40. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  41. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  42. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  43. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  44. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/but_wait_theres_more.gif +0 -0
  45. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/cake.gif +0 -0
  46. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/images/you_get_pyspark_api.gif +0 -0
  47. {sqlframe-3.1.0 → sqlframe-3.2.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  48. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/bigquery.md +0 -0
  49. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/bigquery.md +0 -0
  50. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/duckdb.md +0 -0
  51. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/images/SF.png +0 -0
  52. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/images/favicon.png +0 -0
  53. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/images/favicon_old.png +0 -0
  54. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/images/sqlframe_diagram.png +0 -0
  55. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/images/sqlframe_logo.png +0 -0
  56. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/docs/postgres.md +0 -0
  57. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/duckdb.md +0 -0
  58. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/images/SF.png +0 -0
  59. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/images/favicon.png +0 -0
  60. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/images/favicon_old.png +0 -0
  61. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/images/sqlframe_diagram.png +0 -0
  62. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/images/sqlframe_logo.png +0 -0
  63. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/index.md +0 -0
  64. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/postgres.md +0 -0
  65. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/requirements.txt +0 -0
  66. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/snowflake.md +0 -0
  67. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/spark.md +0 -0
  68. {sqlframe-3.1.0 → sqlframe-3.2.0}/docs/stylesheets/extra.css +0 -0
  69. {sqlframe-3.1.0 → sqlframe-3.2.0}/mkdocs.yml +0 -0
  70. {sqlframe-3.1.0 → sqlframe-3.2.0}/pytest.ini +0 -0
  71. {sqlframe-3.1.0 → sqlframe-3.2.0}/renovate.json +0 -0
  72. {sqlframe-3.1.0 → sqlframe-3.2.0}/setup.cfg +0 -0
  73. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/LICENSE +0 -0
  74. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/__init__.py +0 -0
  75. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/__init__.py +0 -0
  76. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/_typing.py +0 -0
  77. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/catalog.py +0 -0
  78. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/column.py +0 -0
  79. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/dataframe.py +0 -0
  80. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/decorators.py +0 -0
  81. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/exceptions.py +0 -0
  82. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/function_alternatives.py +0 -0
  83. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/functions.py +0 -0
  84. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/mixins/__init__.py +0 -0
  85. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  86. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  87. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  88. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/normalize.py +0 -0
  89. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/operations.py +0 -0
  90. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/readerwriter.py +0 -0
  91. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/session.py +0 -0
  92. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/transforms.py +0 -0
  93. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/types.py +0 -0
  94. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/udf.py +0 -0
  95. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/util.py +0 -0
  96. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/base/window.py +0 -0
  97. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/__init__.py +0 -0
  98. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/catalog.py +0 -0
  99. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/column.py +0 -0
  100. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/dataframe.py +0 -0
  101. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/functions.py +0 -0
  102. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/functions.pyi +0 -0
  103. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/group.py +0 -0
  104. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/readwriter.py +0 -0
  105. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/session.py +0 -0
  106. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/types.py +0 -0
  107. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/udf.py +0 -0
  108. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/bigquery/window.py +0 -0
  109. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/__init__.py +0 -0
  110. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/catalog.py +0 -0
  111. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/column.py +0 -0
  112. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/dataframe.py +0 -0
  113. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/functions.py +0 -0
  114. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/functions.pyi +0 -0
  115. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/group.py +0 -0
  116. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/session.py +0 -0
  117. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/types.py +0 -0
  118. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/udf.py +0 -0
  119. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/duckdb/window.py +0 -0
  120. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/__init__.py +0 -0
  121. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/catalog.py +0 -0
  122. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/column.py +0 -0
  123. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/dataframe.py +0 -0
  124. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/functions.py +0 -0
  125. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/functions.pyi +0 -0
  126. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/group.py +0 -0
  127. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/readwriter.py +0 -0
  128. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/session.py +0 -0
  129. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/types.py +0 -0
  130. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/udf.py +0 -0
  131. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/postgres/window.py +0 -0
  132. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/__init__.py +0 -0
  133. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/catalog.py +0 -0
  134. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/column.py +0 -0
  135. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/dataframe.py +0 -0
  136. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/functions.py +0 -0
  137. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/group.py +0 -0
  138. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/readwriter.py +0 -0
  139. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/session.py +0 -0
  140. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/types.py +0 -0
  141. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/udf.py +0 -0
  142. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/redshift/window.py +0 -0
  143. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/__init__.py +0 -0
  144. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/catalog.py +0 -0
  145. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/column.py +0 -0
  146. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/dataframe.py +0 -0
  147. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/functions.py +0 -0
  148. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/functions.pyi +0 -0
  149. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/group.py +0 -0
  150. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/readwriter.py +0 -0
  151. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/session.py +0 -0
  152. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/types.py +0 -0
  153. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/udf.py +0 -0
  154. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/snowflake/window.py +0 -0
  155. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/__init__.py +0 -0
  156. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/catalog.py +0 -0
  157. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/column.py +0 -0
  158. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/dataframe.py +0 -0
  159. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/functions.py +0 -0
  160. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/functions.pyi +0 -0
  161. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/group.py +0 -0
  162. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/readwriter.py +0 -0
  163. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/session.py +0 -0
  164. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/types.py +0 -0
  165. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/udf.py +0 -0
  166. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/spark/window.py +0 -0
  167. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/__init__.py +0 -0
  168. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/catalog.py +0 -0
  169. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/column.py +0 -0
  170. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/dataframe.py +0 -0
  171. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/functions.py +0 -0
  172. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/group.py +0 -0
  173. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/readwriter.py +0 -0
  174. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/session.py +0 -0
  175. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/types.py +0 -0
  176. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/udf.py +0 -0
  177. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/standalone/window.py +0 -0
  178. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/testing/__init__.py +0 -0
  179. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe/testing/utils.py +0 -0
  180. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe.egg-info/dependency_links.txt +0 -0
  181. {sqlframe-3.1.0 → sqlframe-3.2.0}/sqlframe.egg-info/top_level.txt +0 -0
  182. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/__init__.py +0 -0
  183. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/common_fixtures.py +0 -0
  184. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/conftest.py +0 -0
  185. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/fixtures/employee.csv +0 -0
  186. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/fixtures/employee.json +0 -0
  187. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/fixtures/employee.parquet +0 -0
  188. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/fixtures/employee_extra_line.csv +0 -0
  189. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/__init__.py +0 -0
  190. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/__init__.py +0 -0
  191. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/bigquery/__init__.py +0 -0
  192. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  193. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  194. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  195. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/__init__.py +0 -0
  196. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
  197. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  198. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  199. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  200. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  201. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/postgres/__init__.py +0 -0
  202. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
  203. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  204. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  205. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  206. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/redshift/__init__.py +0 -0
  207. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  208. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  209. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/snowflake/__init__.py +0 -0
  210. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  211. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  212. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  213. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/spark/__init__.py +0 -0
  214. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  215. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  216. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_engine_column.py +0 -0
  217. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
  218. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_engine_reader.py +0 -0
  219. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_engine_session.py +0 -0
  220. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_engine_writer.py +0 -0
  221. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_int_functions.py +0 -0
  222. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/engines/test_int_testing.py +0 -0
  223. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/fixtures.py +0 -0
  224. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/test_int_dataframe.py +0 -0
  225. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/test_int_dataframe_stats.py +0 -0
  226. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/test_int_grouped_data.py +0 -0
  227. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/integration/test_int_session.py +0 -0
  228. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/types.py +0 -0
  229. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/__init__.py +0 -0
  230. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/bigquery/__init__.py +0 -0
  231. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/bigquery/test_activate.py +0 -0
  232. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/conftest.py +0 -0
  233. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/duck/__init__.py +0 -0
  234. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/duck/test_activate.py +0 -0
  235. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/postgres/__init__.py +0 -0
  236. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/postgres/test_activate.py +0 -0
  237. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/redshift/__init__.py +0 -0
  238. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/redshift/test_activate.py +0 -0
  239. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/snowflake/__init__.py +0 -0
  240. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/snowflake/test_activate.py +0 -0
  241. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/spark/__init__.py +0 -0
  242. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/spark/test_activate.py +0 -0
  243. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/__init__.py +0 -0
  244. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/fixtures.py +0 -0
  245. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_activate.py +0 -0
  246. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_column.py +0 -0
  247. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_dataframe.py +0 -0
  248. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  249. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_functions.py +0 -0
  250. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_session.py +0 -0
  251. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  252. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_types.py +0 -0
  253. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/standalone/test_window.py +0 -0
  254. {sqlframe-3.1.0 → sqlframe-3.2.0}/tests/unit/test_activate.py +0 -0
  255. {sqlframe-3.1.0 → sqlframe-3.2.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.1.0
3
+ Version: 3.2.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
@@ -71,7 +71,7 @@ spark = SparkSession.builder.getOrCreate()
71
71
  # "spark" is a SQLFrame DuckDBSession and will run directly on DuckDB with input dialect set to DuckDB
72
72
  ```
73
73
 
74
- #### Deactivating
74
+ ### Deactivating
75
75
 
76
76
  If you want to deactivate SQLFrame and revert back to PySpark, you can use the `deactivate` function.
77
77
 
@@ -84,7 +84,7 @@ from sqlframe.standalone import StandaloneSession
84
84
  session = StandaloneSession()
85
85
 
86
86
  session.catalog.add_table("test_table", column_mapping={"a": "int", "b": "int", "c": "int"})
87
- df = session.read.table("my_table")
87
+ df = session.read.table("test_table")
88
88
  df.sql()
89
89
  ```
90
90
 
@@ -20,7 +20,7 @@ setup(
20
20
  python_requires=">=3.8",
21
21
  install_requires=[
22
22
  "prettytable<3.11.1",
23
- "sqlglot>=24.0.0,<25.18",
23
+ "sqlglot>=24.0.0,<25.19",
24
24
  "typing_extensions>=4.8,<5",
25
25
  ],
26
26
  extras_require={
@@ -32,7 +32,7 @@ setup(
32
32
  "duckdb>=0.9,<1.1",
33
33
  "findspark>=2,<3",
34
34
  "mypy>=1.10.0,<1.12",
35
- "openai>=1.30,<1.43",
35
+ "openai>=1.30,<1.44",
36
36
  "pandas>=2,<3",
37
37
  "pandas-stubs>=2,<3",
38
38
  "psycopg>=3.1,<4",
@@ -58,7 +58,7 @@ setup(
58
58
  "pandas>=2,<3",
59
59
  ],
60
60
  "openai": [
61
- "openai>=1.30,<1.43",
61
+ "openai>=1.30,<1.44",
62
62
  ],
63
63
  "pandas": [
64
64
  "pandas>=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.1.0'
16
- __version_tuple__ = version_tuple = (3, 1, 0)
15
+ __version__ = version = '3.2.0'
16
+ __version_tuple__ = version_tuple = (3, 2, 0)
@@ -68,7 +68,7 @@ class _BaseGroupedData(t.Generic[DF]):
68
68
  )
69
69
  group_by_cols.extend(grouping_set) # type: ignore
70
70
  group_by_cols = list(dict.fromkeys(group_by_cols))
71
- group_by = exp.Group(grouping_sets=all_grouping_sets)
71
+ group_by = exp.Group(grouping_sets=[exp.GroupingSets(expressions=all_grouping_sets)])
72
72
  expression.set("group", group_by)
73
73
  for col in cols:
74
74
  # Spark supports having an empty grouping_id which means all of the columns but other dialects
@@ -85,7 +85,9 @@ class DuckDBDataFrameReader(_BaseDataFrameReader["DuckDBSession", "DuckDBDataFra
85
85
  options["columns"] = "{" + duckdb_columns + "}"
86
86
  else:
87
87
  select_columns = [exp.Star()]
88
- if format:
88
+ if format == "delta":
89
+ from_clause = f"delta_scan('{path}')"
90
+ elif format:
89
91
  paths = ",".join([f"'{path}'" for path in ensure_list(path)])
90
92
  from_clause = f"read_{format}([{paths}], {to_csv(options)})"
91
93
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.1.0
3
+ Version: 3.2.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
@@ -171,6 +171,20 @@ tests/fixtures/employee.csv
171
171
  tests/fixtures/employee.json
172
172
  tests/fixtures/employee.parquet
173
173
  tests/fixtures/employee_extra_line.csv
174
+ tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc
175
+ tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc
176
+ tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc
177
+ tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc
178
+ tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc
179
+ tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc
180
+ tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet
181
+ tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet
182
+ tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet
183
+ tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet
184
+ tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet
185
+ tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet
186
+ tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc
187
+ tests/fixtures/employee_delta/_delta_log/00000000000000000000.json
174
188
  tests/integration/__init__.py
175
189
  tests/integration/fixtures.py
176
190
  tests/integration/test_int_dataframe.py
@@ -1,5 +1,5 @@
1
1
  prettytable<3.11.1
2
- sqlglot<25.18,>=24.0.0
2
+ sqlglot<25.19,>=24.0.0
3
3
  typing_extensions<5,>=4.8
4
4
 
5
5
  [bigquery]
@@ -10,7 +10,7 @@ google-cloud-bigquery[pandas]<4,>=3
10
10
  duckdb<1.1,>=0.9
11
11
  findspark<3,>=2
12
12
  mypy<1.12,>=1.10.0
13
- openai<1.43,>=1.30
13
+ openai<1.44,>=1.30
14
14
  pandas-stubs<3,>=2
15
15
  pandas<3,>=2
16
16
  psycopg<4,>=3.1
@@ -40,7 +40,7 @@ duckdb<1.1,>=0.9
40
40
  pandas<3,>=2
41
41
 
42
42
  [openai]
43
- openai<1.43,>=1.30
43
+ openai<1.44,>=1.30
44
44
 
45
45
  [pandas]
46
46
  pandas<3,>=2
@@ -0,0 +1,8 @@
1
+ {"commitInfo":{"timestamp":1725137989496,"operation":"WRITE","operationParameters":{"mode":"ErrorIfExists","partitionBy":"[]"},"isolationLevel":"Serializable","isBlindAppend":true,"operationMetrics":{"numFiles":"6","numOutputRows":"5","numOutputBytes":"7800"},"engineInfo":"Apache-Spark/3.5.2 Delta-Lake/3.2.0","txnId":"17633aa0-b065-49d6-9893-022103f7364e"}}
2
+ {"metaData":{"id":"73709a6c-bb75-4ac7-a78e-635400886d74","format":{"provider":"parquet","options":{}},"schemaString":"{\"type\":\"struct\",\"fields\":[{\"name\":\"employee_id\",\"type\":\"integer\",\"nullable\":true,\"metadata\":{}},{\"name\":\"fname\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"lname\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"age\",\"type\":\"integer\",\"nullable\":true,\"metadata\":{}},{\"name\":\"store_id\",\"type\":\"integer\",\"nullable\":true,\"metadata\":{}}]}","partitionColumns":[],"configuration":{},"createdTime":1725137987547}}
3
+ {"protocol":{"minReaderVersion":1,"minWriterVersion":2}}
4
+ {"add":{"path":"part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet","partitionValues":{},"size":1437,"modificationTime":1725137989427,"dataChange":true,"stats":"{\"numRecords\":1,\"minValues\":{\"employee_id\":1,\"fname\":\"Jack\",\"lname\":\"Shephard\",\"age\":37,\"store_id\":1},\"maxValues\":{\"employee_id\":1,\"fname\":\"Jack\",\"lname\":\"Shephard\",\"age\":37,\"store_id\":1},\"nullCount\":{\"employee_id\":0,\"fname\":0,\"lname\":0,\"age\":0,\"store_id\":0}}"}}
5
+ {"add":{"path":"part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet","partitionValues":{},"size":1417,"modificationTime":1725137989428,"dataChange":true,"stats":"{\"numRecords\":1,\"minValues\":{\"employee_id\":2,\"fname\":\"John\",\"lname\":\"Locke\",\"age\":65,\"store_id\":1},\"maxValues\":{\"employee_id\":2,\"fname\":\"John\",\"lname\":\"Locke\",\"age\":65,\"store_id\":1},\"nullCount\":{\"employee_id\":0,\"fname\":0,\"lname\":0,\"age\":0,\"store_id\":0}}"}}
6
+ {"add":{"path":"part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet","partitionValues":{},"size":1424,"modificationTime":1725137989428,"dataChange":true,"stats":"{\"numRecords\":1,\"minValues\":{\"employee_id\":3,\"fname\":\"Kate\",\"lname\":\"Austen\",\"age\":37,\"store_id\":2},\"maxValues\":{\"employee_id\":3,\"fname\":\"Kate\",\"lname\":\"Austen\",\"age\":37,\"store_id\":2},\"nullCount\":{\"employee_id\":0,\"fname\":0,\"lname\":0,\"age\":0,\"store_id\":0}}"}}
7
+ {"add":{"path":"part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet","partitionValues":{},"size":1459,"modificationTime":1725137989427,"dataChange":true,"stats":"{\"numRecords\":1,\"minValues\":{\"employee_id\":4,\"fname\":\"Claire\",\"lname\":\"Littleton\",\"age\":27,\"store_id\":2},\"maxValues\":{\"employee_id\":4,\"fname\":\"Claire\",\"lname\":\"Littleton\",\"age\":27,\"store_id\":2},\"nullCount\":{\"employee_id\":0,\"fname\":0,\"lname\":0,\"age\":0,\"store_id\":0}}"}}
8
+ {"add":{"path":"part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet","partitionValues":{},"size":1417,"modificationTime":1725137989428,"dataChange":true,"stats":"{\"numRecords\":1,\"minValues\":{\"employee_id\":5,\"fname\":\"Hugo\",\"lname\":\"Reyes\",\"age\":29,\"store_id\":100},\"maxValues\":{\"employee_id\":5,\"fname\":\"Hugo\",\"lname\":\"Reyes\",\"age\":29,\"store_id\":100},\"nullCount\":{\"employee_id\":0,\"fname\":0,\"lname\":0,\"age\":0,\"store_id\":0}}"}}
@@ -98,3 +98,19 @@ def test_employee_extra_line_csv_multiple(duckdb_session: DuckDBSession):
98
98
  ),
99
99
  Row(**{"employee_id": 5, "fname": "Hugo", "lname": "Reyes", "age": 29, "store_id": 100}),
100
100
  ]
101
+
102
+
103
+ def test_employee_delta(duckdb_session: DuckDBSession):
104
+ df = duckdb_session.read.load(
105
+ "tests/fixtures/employee_delta",
106
+ format="delta",
107
+ )
108
+ assert df.collect() == [
109
+ Row(**{"employee_id": 1, "fname": "Jack", "lname": "Shephard", "age": 37, "store_id": 1}),
110
+ Row(**{"employee_id": 2, "fname": "John", "lname": "Locke", "age": 65, "store_id": 1}),
111
+ Row(**{"employee_id": 3, "fname": "Kate", "lname": "Austen", "age": 37, "store_id": 2}),
112
+ Row(
113
+ **{"employee_id": 4, "fname": "Claire", "lname": "Littleton", "age": 27, "store_id": 2}
114
+ ),
115
+ Row(**{"employee_id": 5, "fname": "Hugo", "lname": "Reyes", "age": 29, "store_id": 100}),
116
+ ]
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
File without changes
File without changes
File without changes
File without changes
File without changes