sqlframe 1.6.1__tar.gz → 1.6.2__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 (197) hide show
  1. {sqlframe-1.6.1 → sqlframe-1.6.2}/PKG-INFO +1 -1
  2. {sqlframe-1.6.1 → sqlframe-1.6.2}/setup.py +1 -1
  3. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/_version.py +2 -2
  4. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/dataframe.py +15 -2
  5. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/PKG-INFO +1 -1
  6. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/requires.txt +1 -1
  7. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_dataframe.py +45 -0
  8. {sqlframe-1.6.1 → sqlframe-1.6.2}/.github/CODEOWNERS +0 -0
  9. {sqlframe-1.6.1 → sqlframe-1.6.2}/.github/workflows/main.workflow.yaml +0 -0
  10. {sqlframe-1.6.1 → sqlframe-1.6.2}/.github/workflows/publish.workflow.yaml +0 -0
  11. {sqlframe-1.6.1 → sqlframe-1.6.2}/.gitignore +0 -0
  12. {sqlframe-1.6.1 → sqlframe-1.6.2}/.pre-commit-config.yaml +0 -0
  13. {sqlframe-1.6.1 → sqlframe-1.6.2}/.readthedocs.yaml +0 -0
  14. {sqlframe-1.6.1 → sqlframe-1.6.2}/LICENSE +0 -0
  15. {sqlframe-1.6.1 → sqlframe-1.6.2}/Makefile +0 -0
  16. {sqlframe-1.6.1 → sqlframe-1.6.2}/README.md +0 -0
  17. {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/images/but_wait_theres_more.gif +0 -0
  18. {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/images/cake.gif +0 -0
  19. {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/images/you_get_pyspark_api.gif +0 -0
  20. {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/sqlframe_universal_dataframe_api.md +0 -0
  21. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/bigquery.md +0 -0
  22. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/configuration.md +0 -0
  23. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/bigquery.md +0 -0
  24. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/duckdb.md +0 -0
  25. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/SF.png +0 -0
  26. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/favicon.png +0 -0
  27. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/favicon_old.png +0 -0
  28. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/sqlframe_diagram.png +0 -0
  29. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/sqlframe_logo.png +0 -0
  30. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/postgres.md +0 -0
  31. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/duckdb.md +0 -0
  32. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/SF.png +0 -0
  33. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/favicon.png +0 -0
  34. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/favicon_old.png +0 -0
  35. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/sqlframe_diagram.png +0 -0
  36. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/sqlframe_logo.png +0 -0
  37. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/index.md +0 -0
  38. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/postgres.md +0 -0
  39. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/requirements.txt +0 -0
  40. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/snowflake.md +0 -0
  41. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/standalone.md +0 -0
  42. {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/stylesheets/extra.css +0 -0
  43. {sqlframe-1.6.1 → sqlframe-1.6.2}/mkdocs.yml +0 -0
  44. {sqlframe-1.6.1 → sqlframe-1.6.2}/pytest.ini +0 -0
  45. {sqlframe-1.6.1 → sqlframe-1.6.2}/renovate.json +0 -0
  46. {sqlframe-1.6.1 → sqlframe-1.6.2}/setup.cfg +0 -0
  47. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/LICENSE +0 -0
  48. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/__init__.py +0 -0
  49. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/__init__.py +0 -0
  50. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/_typing.py +0 -0
  51. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/catalog.py +0 -0
  52. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/column.py +0 -0
  53. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/decorators.py +0 -0
  54. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/exceptions.py +0 -0
  55. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/function_alternatives.py +0 -0
  56. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/functions.py +0 -0
  57. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/group.py +0 -0
  58. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/__init__.py +0 -0
  59. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/catalog_mixins.py +0 -0
  60. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
  61. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
  62. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/normalize.py +0 -0
  63. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/operations.py +0 -0
  64. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/readerwriter.py +0 -0
  65. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/session.py +0 -0
  66. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/transforms.py +0 -0
  67. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/types.py +0 -0
  68. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/util.py +0 -0
  69. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/window.py +0 -0
  70. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/__init__.py +0 -0
  71. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/catalog.py +0 -0
  72. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/column.py +0 -0
  73. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/dataframe.py +0 -0
  74. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/functions.py +0 -0
  75. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/functions.pyi +0 -0
  76. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/group.py +0 -0
  77. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/readwriter.py +0 -0
  78. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/session.py +0 -0
  79. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/types.py +0 -0
  80. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/window.py +0 -0
  81. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/__init__.py +0 -0
  82. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/catalog.py +0 -0
  83. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/column.py +0 -0
  84. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/dataframe.py +0 -0
  85. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/functions.py +0 -0
  86. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/functions.pyi +0 -0
  87. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/group.py +0 -0
  88. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/readwriter.py +0 -0
  89. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/session.py +0 -0
  90. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/types.py +0 -0
  91. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/window.py +0 -0
  92. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/__init__.py +0 -0
  93. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/catalog.py +0 -0
  94. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/column.py +0 -0
  95. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/dataframe.py +0 -0
  96. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/functions.py +0 -0
  97. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/functions.pyi +0 -0
  98. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/group.py +0 -0
  99. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/readwriter.py +0 -0
  100. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/session.py +0 -0
  101. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/types.py +0 -0
  102. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/window.py +0 -0
  103. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/__init__.py +0 -0
  104. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/catalog.py +0 -0
  105. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/column.py +0 -0
  106. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/dataframe.py +0 -0
  107. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/functions.py +0 -0
  108. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/group.py +0 -0
  109. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/readwriter.py +0 -0
  110. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/session.py +0 -0
  111. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/types.py +0 -0
  112. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/window.py +0 -0
  113. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/__init__.py +0 -0
  114. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/catalog.py +0 -0
  115. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/column.py +0 -0
  116. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/dataframe.py +0 -0
  117. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/functions.py +0 -0
  118. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/functions.pyi +0 -0
  119. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/group.py +0 -0
  120. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/readwriter.py +0 -0
  121. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/session.py +0 -0
  122. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/types.py +0 -0
  123. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/window.py +0 -0
  124. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/__init__.py +0 -0
  125. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/catalog.py +0 -0
  126. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/column.py +0 -0
  127. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/dataframe.py +0 -0
  128. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/functions.py +0 -0
  129. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/group.py +0 -0
  130. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/readwriter.py +0 -0
  131. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/session.py +0 -0
  132. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/types.py +0 -0
  133. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/window.py +0 -0
  134. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/__init__.py +0 -0
  135. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/catalog.py +0 -0
  136. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/column.py +0 -0
  137. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/dataframe.py +0 -0
  138. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/functions.py +0 -0
  139. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/group.py +0 -0
  140. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/readwriter.py +0 -0
  141. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/session.py +0 -0
  142. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/types.py +0 -0
  143. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/window.py +0 -0
  144. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/SOURCES.txt +0 -0
  145. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/dependency_links.txt +0 -0
  146. {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/top_level.txt +0 -0
  147. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/__init__.py +0 -0
  148. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/common_fixtures.py +0 -0
  149. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/conftest.py +0 -0
  150. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee.csv +0 -0
  151. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee.json +0 -0
  152. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee.parquet +0 -0
  153. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee_extra_line.csv +0 -0
  154. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/__init__.py +0 -0
  155. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/__init__.py +0 -0
  156. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/__init__.py +0 -0
  157. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
  158. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
  159. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/__init__.py +0 -0
  160. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
  161. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
  162. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
  163. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
  164. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/__init__.py +0 -0
  165. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
  166. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
  167. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
  168. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/__init__.py +0 -0
  169. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
  170. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
  171. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/__init__.py +0 -0
  172. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
  173. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
  174. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/spark/__init__.py +0 -0
  175. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
  176. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_dataframe.py +0 -0
  177. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_reader.py +0 -0
  178. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_session.py +0 -0
  179. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_writer.py +0 -0
  180. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_int_functions.py +0 -0
  181. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/fixtures.py +0 -0
  182. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_dataframe_stats.py +0 -0
  183. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_grouped_data.py +0 -0
  184. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_session.py +0 -0
  185. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/types.py +0 -0
  186. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/__init__.py +0 -0
  187. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/__init__.py +0 -0
  188. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/fixtures.py +0 -0
  189. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_column.py +0 -0
  190. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_dataframe.py +0 -0
  191. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_dataframe_writer.py +0 -0
  192. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_functions.py +0 -0
  193. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_session.py +0 -0
  194. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
  195. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_types.py +0 -0
  196. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_window.py +0 -0
  197. {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: Taking the Spark out of PySpark by converting to SQL
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -20,7 +20,7 @@ setup(
20
20
  python_requires=">=3.8",
21
21
  install_requires=[
22
22
  "prettytable<3.11.0",
23
- "sqlglot>=24.0.0,<24.2",
23
+ "sqlglot>=24.0.0,<25.1",
24
24
  ],
25
25
  extras_require={
26
26
  "bigquery": [
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.6.1'
16
- __version_tuple__ = version_tuple = (1, 6, 1)
15
+ __version__ = version = '1.6.2'
16
+ __version_tuple__ = version_tuple = (1, 6, 2)
@@ -776,6 +776,8 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
776
776
  how: str = "inner",
777
777
  **kwargs,
778
778
  ) -> Self:
779
+ from sqlframe.base.functions import coalesce
780
+
779
781
  if on is None:
780
782
  logger.warning("Got no value for on. This appears change the join to a cross join.")
781
783
  how = "cross"
@@ -835,7 +837,15 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
835
837
  for left_column, right_column in join_column_pairs
836
838
  ],
837
839
  )
838
- join_column_names = [left_col.alias_or_name for left_col, _ in join_column_pairs]
840
+ join_column_names = [
841
+ coalesce(
842
+ left_col.sql(dialect=self.session.input_dialect),
843
+ right_col.sql(dialect=self.session.input_dialect),
844
+ ).alias(left_col.alias_or_name)
845
+ if how == "full"
846
+ else left_col.alias_or_name
847
+ for left_col, right_col in join_column_pairs
848
+ ]
839
849
  # To match spark behavior only the join clause gets deduplicated and it gets put in the front of the column list
840
850
  select_column_names = [
841
851
  (
@@ -848,7 +858,10 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
848
858
  select_column_names = [
849
859
  column_name
850
860
  for column_name in select_column_names
851
- if column_name not in join_column_names
861
+ if column_name
862
+ not in [
863
+ x.alias_or_name if not isinstance(x, str) else x for x in join_column_names
864
+ ]
852
865
  ]
853
866
  select_column_names = join_column_names + select_column_names
854
867
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: Taking the Spark out of PySpark by converting to SQL
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -1,5 +1,5 @@
1
1
  prettytable<3.11.0
2
- sqlglot<24.2,>=24.0.0
2
+ sqlglot<25.1,>=24.0.0
3
3
 
4
4
  [bigquery]
5
5
  google-cloud-bigquery-storage<3,>=2
@@ -2057,3 +2057,48 @@ def test_transform(
2057
2057
  df = pyspark_employee.transform(cast_all_to_int_pyspark).transform(sort_columns_asc)
2058
2058
  dfs = employee.transform(cast_all_to_int_sqlframe).transform(sort_columns_asc)
2059
2059
  compare_frames(df, dfs)
2060
+
2061
+
2062
+ # https://github.com/eakmanrq/sqlframe/issues/51
2063
+ def test_join_full_outer_no_match(
2064
+ pyspark_employee: PySparkDataFrame,
2065
+ get_df: t.Callable[[str], _BaseDataFrame],
2066
+ compare_frames: t.Callable,
2067
+ ):
2068
+ spark = pyspark_employee._session
2069
+ initial = spark.createDataFrame(
2070
+ [
2071
+ (1, "data"),
2072
+ (2, "data"),
2073
+ ],
2074
+ ["id", "data"],
2075
+ )
2076
+ for_join = spark.createDataFrame(
2077
+ [
2078
+ (1, "other_data"),
2079
+ (2, "other_data"),
2080
+ (3, "other_data"),
2081
+ ],
2082
+ ["id", "other_data"],
2083
+ )
2084
+ df = initial.join(for_join, on="id", how="full")
2085
+
2086
+ session = get_df("employee").session
2087
+ dfs_initial = session.createDataFrame(
2088
+ [
2089
+ (1, "data"),
2090
+ (2, "data"),
2091
+ ],
2092
+ ["id", "data"],
2093
+ )
2094
+ dfs_for_join = session.createDataFrame(
2095
+ [
2096
+ (1, "other_data"),
2097
+ (2, "other_data"),
2098
+ (3, "other_data"),
2099
+ ],
2100
+ ["id", "other_data"],
2101
+ )
2102
+ dfs = dfs_initial.join(dfs_for_join, on="id", how="full")
2103
+
2104
+ compare_frames(df, dfs)
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