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.
- {sqlframe-1.6.1 → sqlframe-1.6.2}/PKG-INFO +1 -1
- {sqlframe-1.6.1 → sqlframe-1.6.2}/setup.py +1 -1
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/_version.py +2 -2
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/dataframe.py +15 -2
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/requires.txt +1 -1
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_dataframe.py +45 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/.github/CODEOWNERS +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/.github/workflows/main.workflow.yaml +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/.github/workflows/publish.workflow.yaml +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/.gitignore +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/.pre-commit-config.yaml +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/.readthedocs.yaml +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/LICENSE +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/Makefile +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/README.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/images/cake.gif +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/bigquery.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/configuration.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/bigquery.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/duckdb.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/SF.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/favicon.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/favicon_old.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/docs/postgres.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/duckdb.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/SF.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/favicon.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/favicon_old.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/index.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/postgres.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/requirements.txt +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/snowflake.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/standalone.md +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/docs/stylesheets/extra.css +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/mkdocs.yml +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/pytest.ini +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/renovate.json +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/setup.cfg +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/LICENSE +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/_typing.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/decorators.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/normalize.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/operations.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/transforms.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/util.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/base/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/postgres/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/redshift/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/spark/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/group.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe/standalone/window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/common_fixtures.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/conftest.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee.csv +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee.json +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/test_int_functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/fixtures.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/test_int_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_column.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_functions.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_types.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-1.6.1 → sqlframe-1.6.2}/tests/unit/test_util.py +0 -0
|
@@ -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 = [
|
|
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
|
|
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:
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/test_bigquery_catalog.py
RENAMED
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/bigquery/test_bigquery_session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_catalog.py
RENAMED
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_dataframe.py
RENAMED
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/postgres/test_postgres_session.py
RENAMED
|
File without changes
|
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/test_redshift_catalog.py
RENAMED
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/redshift/test_redshift_session.py
RENAMED
|
File without changes
|
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/test_snowflake_catalog.py
RENAMED
|
File without changes
|
{sqlframe-1.6.1 → sqlframe-1.6.2}/tests/integration/engines/snowflake/test_snowflake_session.py
RENAMED
|
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
|