sqlframe 2.2.0__tar.gz → 2.4.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 (224) hide show
  1. {sqlframe-2.2.0 → sqlframe-2.4.0}/PKG-INFO +1 -1
  2. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/duckdb.md +0 -1
  3. {sqlframe-2.2.0 → sqlframe-2.4.0}/setup.py +5 -5
  4. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/_version.py +2 -2
  5. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/column.py +3 -1
  6. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/function_alternatives.py +24 -1
  7. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/functions.py +1 -0
  8. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/functions.pyi +1 -1
  9. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/functions.py +1 -0
  10. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/functions.pyi +1 -1
  11. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe.egg-info/PKG-INFO +1 -1
  12. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe.egg-info/requires.txt +5 -5
  13. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_int_functions.py +5 -17
  14. {sqlframe-2.2.0 → sqlframe-2.4.0}/.github/CODEOWNERS +0 -0
  15. {sqlframe-2.2.0 → sqlframe-2.4.0}/.github/workflows/main.workflow.yaml +0 -0
  16. {sqlframe-2.2.0 → sqlframe-2.4.0}/.github/workflows/publish.workflow.yaml +0 -0
  17. {sqlframe-2.2.0 → sqlframe-2.4.0}/.gitignore +0 -0
  18. {sqlframe-2.2.0 → sqlframe-2.4.0}/.pre-commit-config.yaml +0 -0
  19. {sqlframe-2.2.0 → sqlframe-2.4.0}/.readthedocs.yaml +0 -0
  20. {sqlframe-2.2.0 → sqlframe-2.4.0}/LICENSE +0 -0
  21. {sqlframe-2.2.0 → sqlframe-2.4.0}/Makefile +0 -0
  22. {sqlframe-2.2.0 → sqlframe-2.4.0}/README.md +0 -0
  23. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/add_chatgpt_support.md +0 -0
  24. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
  25. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
  26. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
  27. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
  28. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
  29. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
  30. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
  31. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
  32. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/but_wait_theres_more.gif +0 -0
  33. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/cake.gif +0 -0
  34. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/images/you_get_pyspark_api.gif +0 -0
  35. {sqlframe-2.2.0 → sqlframe-2.4.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  36. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/bigquery.md +0 -0
  37. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/configuration.md +0 -0
  38. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/bigquery.md +0 -0
  39. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/duckdb.md +0 -0
  40. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/images/SF.png +0 -0
  41. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/images/favicon.png +0 -0
  42. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/images/favicon_old.png +0 -0
  43. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/images/sqlframe_diagram.png +0 -0
  44. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/images/sqlframe_logo.png +0 -0
  45. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/docs/postgres.md +0 -0
  46. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/images/SF.png +0 -0
  47. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/images/favicon.png +0 -0
  48. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/images/favicon_old.png +0 -0
  49. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/images/sqlframe_diagram.png +0 -0
  50. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/images/sqlframe_logo.png +0 -0
  51. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/index.md +0 -0
  52. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/postgres.md +0 -0
  53. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/requirements.txt +0 -0
  54. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/snowflake.md +0 -0
  55. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/spark.md +0 -0
  56. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/standalone.md +0 -0
  57. {sqlframe-2.2.0 → sqlframe-2.4.0}/docs/stylesheets/extra.css +0 -0
  58. {sqlframe-2.2.0 → sqlframe-2.4.0}/mkdocs.yml +0 -0
  59. {sqlframe-2.2.0 → sqlframe-2.4.0}/pytest.ini +0 -0
  60. {sqlframe-2.2.0 → sqlframe-2.4.0}/renovate.json +0 -0
  61. {sqlframe-2.2.0 → sqlframe-2.4.0}/setup.cfg +0 -0
  62. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/LICENSE +0 -0
  63. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/__init__.py +0 -0
  64. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/__init__.py +0 -0
  65. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/_typing.py +0 -0
  66. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/catalog.py +0 -0
  67. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/dataframe.py +0 -0
  68. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/decorators.py +0 -0
  69. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/exceptions.py +0 -0
  70. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/functions.py +0 -0
  71. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/group.py +0 -0
  72. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/mixins/__init__.py +0 -0
  73. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  74. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  75. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  76. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/normalize.py +0 -0
  77. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/operations.py +0 -0
  78. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/readerwriter.py +0 -0
  79. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/session.py +0 -0
  80. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/transforms.py +0 -0
  81. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/types.py +0 -0
  82. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/udf.py +0 -0
  83. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/util.py +0 -0
  84. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/base/window.py +0 -0
  85. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/__init__.py +0 -0
  86. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/catalog.py +0 -0
  87. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/column.py +0 -0
  88. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/dataframe.py +0 -0
  89. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/functions.py +0 -0
  90. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/functions.pyi +0 -0
  91. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/group.py +0 -0
  92. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/readwriter.py +0 -0
  93. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/session.py +0 -0
  94. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/types.py +0 -0
  95. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/udf.py +0 -0
  96. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/bigquery/window.py +0 -0
  97. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/__init__.py +0 -0
  98. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/catalog.py +0 -0
  99. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/column.py +0 -0
  100. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/dataframe.py +0 -0
  101. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/group.py +0 -0
  102. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/readwriter.py +0 -0
  103. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/session.py +0 -0
  104. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/types.py +0 -0
  105. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/udf.py +0 -0
  106. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/duckdb/window.py +0 -0
  107. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/__init__.py +0 -0
  108. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/catalog.py +0 -0
  109. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/column.py +0 -0
  110. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/dataframe.py +0 -0
  111. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/group.py +0 -0
  112. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/readwriter.py +0 -0
  113. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/session.py +0 -0
  114. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/types.py +0 -0
  115. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/udf.py +0 -0
  116. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/postgres/window.py +0 -0
  117. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/__init__.py +0 -0
  118. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/catalog.py +0 -0
  119. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/column.py +0 -0
  120. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/dataframe.py +0 -0
  121. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/functions.py +0 -0
  122. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/group.py +0 -0
  123. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/readwriter.py +0 -0
  124. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/session.py +0 -0
  125. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/types.py +0 -0
  126. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/udf.py +0 -0
  127. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/redshift/window.py +0 -0
  128. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/__init__.py +0 -0
  129. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/catalog.py +0 -0
  130. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/column.py +0 -0
  131. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/dataframe.py +0 -0
  132. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/functions.py +0 -0
  133. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/functions.pyi +0 -0
  134. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/group.py +0 -0
  135. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/readwriter.py +0 -0
  136. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/session.py +0 -0
  137. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/types.py +0 -0
  138. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/udf.py +0 -0
  139. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/snowflake/window.py +0 -0
  140. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/__init__.py +0 -0
  141. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/catalog.py +0 -0
  142. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/column.py +0 -0
  143. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/dataframe.py +0 -0
  144. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/functions.py +0 -0
  145. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/functions.pyi +0 -0
  146. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/group.py +0 -0
  147. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/readwriter.py +0 -0
  148. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/session.py +0 -0
  149. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/types.py +0 -0
  150. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/udf.py +0 -0
  151. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/spark/window.py +0 -0
  152. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/__init__.py +0 -0
  153. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/catalog.py +0 -0
  154. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/column.py +0 -0
  155. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/dataframe.py +0 -0
  156. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/functions.py +0 -0
  157. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/group.py +0 -0
  158. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/readwriter.py +0 -0
  159. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/session.py +0 -0
  160. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/types.py +0 -0
  161. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/udf.py +0 -0
  162. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/standalone/window.py +0 -0
  163. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/testing/__init__.py +0 -0
  164. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe/testing/utils.py +0 -0
  165. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe.egg-info/SOURCES.txt +0 -0
  166. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe.egg-info/dependency_links.txt +0 -0
  167. {sqlframe-2.2.0 → sqlframe-2.4.0}/sqlframe.egg-info/top_level.txt +0 -0
  168. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/__init__.py +0 -0
  169. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/common_fixtures.py +0 -0
  170. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/conftest.py +0 -0
  171. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/fixtures/employee.csv +0 -0
  172. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/fixtures/employee.json +0 -0
  173. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/fixtures/employee.parquet +0 -0
  174. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/fixtures/employee_extra_line.csv +0 -0
  175. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/__init__.py +0 -0
  176. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/__init__.py +0 -0
  177. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/bigquery/__init__.py +0 -0
  178. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  179. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
  180. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  181. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/duck/__init__.py +0 -0
  182. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  183. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  184. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  185. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  186. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
  187. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/postgres/__init__.py +0 -0
  188. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  189. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  190. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  191. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/redshift/__init__.py +0 -0
  192. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  193. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  194. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/snowflake/__init__.py +0 -0
  195. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  196. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
  197. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  198. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/spark/__init__.py +0 -0
  199. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  200. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
  201. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_engine_column.py +0 -0
  202. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
  203. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_engine_reader.py +0 -0
  204. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_engine_session.py +0 -0
  205. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_engine_writer.py +0 -0
  206. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/engines/test_int_testing.py +0 -0
  207. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/fixtures.py +0 -0
  208. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/test_int_dataframe.py +0 -0
  209. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/test_int_dataframe_stats.py +0 -0
  210. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/test_int_grouped_data.py +0 -0
  211. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/integration/test_int_session.py +0 -0
  212. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/types.py +0 -0
  213. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/__init__.py +0 -0
  214. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/__init__.py +0 -0
  215. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/fixtures.py +0 -0
  216. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_column.py +0 -0
  217. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_dataframe.py +0 -0
  218. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  219. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_functions.py +0 -0
  220. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_session.py +0 -0
  221. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  222. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_types.py +0 -0
  223. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/standalone/test_window.py +0 -0
  224. {sqlframe-2.2.0 → sqlframe-2.4.0}/tests/unit/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 2.2.0
3
+ Version: 2.4.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
@@ -369,7 +369,6 @@ See something that you would like to see supported? [Open an issue](https://gith
369
369
  * [regexp_extract](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.regexp_extract.html)
370
370
  * [regexp_like](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.regexp_like.html)
371
371
  * [regexp_replace](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.regexp_replace.html)
372
- * Replaces first match only
373
372
  * [repeat](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.repeat.html)
374
373
  * [reverse](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.reverse.html)
375
374
  * Only works on strings (does not work on arrays)
@@ -19,8 +19,8 @@ setup(
19
19
  setup_requires=["setuptools_scm"],
20
20
  python_requires=">=3.8",
21
21
  install_requires=[
22
- "prettytable<3.11.0",
23
- "sqlglot>=24.0.0,<25.11",
22
+ "prettytable<3.11.1",
23
+ "sqlglot>=24.0.0,<25.17",
24
24
  "typing_extensions>=4.8,<5",
25
25
  ],
26
26
  extras_require={
@@ -31,7 +31,7 @@ setup(
31
31
  "dev": [
32
32
  "duckdb>=0.9,<1.1",
33
33
  "mypy>=1.10.0,<1.12",
34
- "openai>=1.30,<1.41",
34
+ "openai>=1.30,<1.43",
35
35
  "pandas>=2,<3",
36
36
  "pandas-stubs>=2,<3",
37
37
  "psycopg>=3.1,<4",
@@ -42,7 +42,7 @@ setup(
42
42
  "pytest-xdist>=3.6,<3.7",
43
43
  "pre-commit>=3.5;python_version=='3.8'",
44
44
  "pre-commit>=3.7,<3.9;python_version>='3.9'",
45
- "ruff>=0.4.4,<0.6",
45
+ "ruff>=0.4.4,<0.7",
46
46
  "types-psycopg2>=2.9,<3",
47
47
  ],
48
48
  "docs": [
@@ -57,7 +57,7 @@ setup(
57
57
  "pandas>=2,<3",
58
58
  ],
59
59
  "openai": [
60
- "openai>=1.30,<1.41",
60
+ "openai>=1.30,<1.43",
61
61
  ],
62
62
  "pandas": [
63
63
  "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 = '2.2.0'
16
- __version_tuple__ = version_tuple = (2, 2, 0)
15
+ __version__ = version = '2.4.0'
16
+ __version_tuple__ = version_tuple = (2, 4, 0)
@@ -339,7 +339,9 @@ class Column:
339
339
  return Column(new_expression)
340
340
 
341
341
  def cast(
342
- self, dataType: t.Union[str, DataType], dialect: t.Optional[t.Union[str, Dialect]] = None
342
+ self,
343
+ dataType: t.Union[str, DataType, exp.DataType, exp.DataType.Type],
344
+ dialect: t.Optional[t.Union[str, Dialect]] = None,
343
345
  ) -> Column:
344
346
  from sqlframe.base.session import _BaseSession
345
347
 
@@ -1593,7 +1593,7 @@ def try_to_timestamp_pgtemp(col: ColumnOrName, format: t.Optional[ColumnOrName]
1593
1593
  def typeof_pg_typeof(col: ColumnOrName) -> Column:
1594
1594
  return (
1595
1595
  Column.invoke_anonymous_function(col, "pg_typeof")
1596
- .cast("regtype", dialect="postgres")
1596
+ .cast(expression.DataType.build("regtype", dialect="postgres"))
1597
1597
  .cast("text")
1598
1598
  )
1599
1599
 
@@ -1603,6 +1603,29 @@ def typeof_from_variant(col: ColumnOrName) -> Column:
1603
1603
  return Column.invoke_anonymous_function(col, "TYPEOF")
1604
1604
 
1605
1605
 
1606
+ def regexp_replace_global_option(
1607
+ str: ColumnOrName, pattern: str, replacement: str, position: t.Optional[int] = None
1608
+ ) -> Column:
1609
+ lit = get_func_from_session("lit")
1610
+
1611
+ if position is not None:
1612
+ return Column.invoke_expression_over_column(
1613
+ str,
1614
+ expression.RegexpReplace,
1615
+ expression=lit(pattern),
1616
+ replacement=lit(replacement),
1617
+ position=lit(position),
1618
+ modifiers=lit("g"),
1619
+ )
1620
+ return Column.invoke_expression_over_column(
1621
+ str,
1622
+ expression.RegexpReplace,
1623
+ expression=lit(pattern),
1624
+ replacement=lit(replacement),
1625
+ modifiers=lit("g"),
1626
+ )
1627
+
1628
+
1606
1629
  def _is_string_using_typeof_varchar(col: ColumnOrName) -> Column:
1607
1630
  typeof = get_func_from_session("typeof")
1608
1631
  lit = get_func_from_session("lit")
@@ -52,4 +52,5 @@ from sqlframe.base.function_alternatives import ( # noqa
52
52
  array_append_list_append as array_append,
53
53
  endswith_with_underscore as endswith,
54
54
  last_day_with_cast as last_day,
55
+ regexp_replace_global_option as regexp_replace,
55
56
  )
@@ -28,6 +28,7 @@ from sqlframe.base.function_alternatives import ( # noqa
28
28
  sequence_from_generate_series as sequence,
29
29
  try_element_at_zero_based as try_element_at,
30
30
  to_unix_timestamp_include_default_format as to_unix_timestamp,
31
+ regexp_replace_global_option as regexp_replace,
31
32
  )
32
33
  from sqlframe.base.functions import (
33
34
  abs as abs,
@@ -156,7 +157,6 @@ from sqlframe.base.functions import (
156
157
  rank as rank,
157
158
  regexp_extract as regexp_extract,
158
159
  regexp_like as regexp_like,
159
- regexp_replace as regexp_replace,
160
160
  repeat as repeat,
161
161
  reverse as reverse,
162
162
  right as right,
@@ -69,4 +69,5 @@ from sqlframe.base.function_alternatives import ( # noqa
69
69
  _is_string_using_typeof_char_varying as _is_string,
70
70
  endswith_using_like as endswith,
71
71
  last_day_with_cast as last_day,
72
+ regexp_replace_global_option as regexp_replace,
72
73
  )
@@ -47,6 +47,7 @@ from sqlframe.base.function_alternatives import ( # noqa
47
47
  right_cast_len as right,
48
48
  position_cast_start as position,
49
49
  try_element_at_zero_based as try_element_at,
50
+ regexp_replace_global_option as regexp_replace,
50
51
  )
51
52
  from sqlframe.base.functions import (
52
53
  abs as abs,
@@ -148,7 +149,6 @@ from sqlframe.base.functions import (
148
149
  radians as radians,
149
150
  rank as rank,
150
151
  regexp_like as regexp_like,
151
- regexp_replace as regexp_replace,
152
152
  repeat as repeat,
153
153
  reverse as reverse,
154
154
  rlike as rlike,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 2.2.0
3
+ Version: 2.4.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
- prettytable<3.11.0
2
- sqlglot<25.11,>=24.0.0
1
+ prettytable<3.11.1
2
+ sqlglot<25.17,>=24.0.0
3
3
  typing_extensions<5,>=4.8
4
4
 
5
5
  [bigquery]
@@ -9,7 +9,7 @@ google-cloud-bigquery[pandas]<4,>=3
9
9
  [dev]
10
10
  duckdb<1.1,>=0.9
11
11
  mypy<1.12,>=1.10.0
12
- openai<1.41,>=1.30
12
+ openai<1.43,>=1.30
13
13
  pandas-stubs<3,>=2
14
14
  pandas<3,>=2
15
15
  psycopg<4,>=3.1
@@ -18,7 +18,7 @@ pyspark<3.6,>=2
18
18
  pytest-postgresql<7,>=6
19
19
  pytest-xdist<3.7,>=3.6
20
20
  pytest<8.4,>=8.2.0
21
- ruff<0.6,>=0.4.4
21
+ ruff<0.7,>=0.4.4
22
22
  types-psycopg2<3,>=2.9
23
23
 
24
24
  [dev:python_version == "3.8"]
@@ -39,7 +39,7 @@ duckdb<1.1,>=0.9
39
39
  pandas<3,>=2
40
40
 
41
41
  [openai]
42
- openai<1.41,>=1.30
42
+ openai<1.43,>=1.30
43
43
 
44
44
  [pandas]
45
45
  pandas<3,>=2
@@ -1944,23 +1944,11 @@ def test_regexp_replace(get_session_and_func, get_func):
1944
1944
  session, regexp_replace = get_session_and_func("regexp_replace")
1945
1945
  col = get_func("col", session)
1946
1946
  df = session.createDataFrame([("100-200", r"(\d+)", "--")], ["str", "pattern", "replacement"])
1947
- # Spark replaces all matches while most just replace the first
1948
- if isinstance(session, (BigQuerySession, PySparkSession, SparkSession, SnowflakeSession)):
1949
- assert df.select(regexp_replace("str", r"(\d+)", "--").alias("d")).first()[0] == "-----"
1950
- assert (
1951
- df.select(regexp_replace("str", col("pattern"), col("replacement")).alias("d")).first()[
1952
- 0
1953
- ]
1954
- == "-----"
1955
- )
1956
- else:
1957
- assert df.select(regexp_replace("str", r"(\d+)", "--").alias("d")).first()[0] == "---200"
1958
- assert (
1959
- df.select(regexp_replace("str", col("pattern"), col("replacement")).alias("d")).first()[
1960
- 0
1961
- ]
1962
- == "---200"
1963
- )
1947
+ assert df.select(regexp_replace("str", r"(\d+)", "--").alias("d")).first()[0] == "-----"
1948
+ assert (
1949
+ df.select(regexp_replace("str", col("pattern"), col("replacement")).alias("d")).first()[0]
1950
+ == "-----"
1951
+ )
1964
1952
 
1965
1953
 
1966
1954
  def test_initcap(get_session_and_func):
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
File without changes
File without changes
File without changes
File without changes