sqlframe 3.9.1__tar.gz → 3.9.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-3.9.1 → sqlframe-3.9.2}/.github/workflows/publish.workflow.yaml +7 -4
- {sqlframe-3.9.1 → sqlframe-3.9.2}/PKG-INFO +1 -1
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/_version.py +2 -2
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/dataframe.py +24 -7
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_dataframe.py +4 -3
- {sqlframe-3.9.1 → sqlframe-3.9.2}/.github/CODEOWNERS +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/.github/workflows/main.workflow.yaml +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/.gitignore +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/.pre-commit-config.yaml +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/.readthedocs.yaml +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/LICENSE +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/Makefile +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/README.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/cake.gif +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/bigquery.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/configuration.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/databricks.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/bigquery.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/duckdb.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/SF.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/favicon.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/favicon_old.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/docs/postgres.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/duckdb.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/SF.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/favicon.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/favicon_old.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/index.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/postgres.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/redshift.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/requirements.txt +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/snowflake.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/spark.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/standalone.md +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/docs/stylesheets/extra.css +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/mkdocs.yml +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/pytest.ini +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/renovate.json +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/setup.cfg +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/setup.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/LICENSE +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/_typing.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/decorators.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/normalize.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/operations.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/transforms.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/util.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/base/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/functions.pyi +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/databricks/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/postgres/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/redshift/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/spark/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/group.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/standalone/window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe/testing/utils.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/requires.txt +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/common_fixtures.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/conftest.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee.csv +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee.json +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_int_functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/fixtures.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/integration/test_int_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/conftest.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_column.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_functions.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_types.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/test_activate.py +0 -0
- {sqlframe-3.9.1 → sqlframe-3.9.2}/tests/unit/test_util.py +0 -0
|
@@ -5,17 +5,20 @@ on:
|
|
|
5
5
|
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
6
6
|
permissions:
|
|
7
7
|
contents: write
|
|
8
|
+
id-token: write
|
|
8
9
|
jobs:
|
|
9
10
|
deploy:
|
|
10
11
|
runs-on: ubuntu-latest
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
environment:
|
|
13
|
+
name: publish
|
|
14
|
+
url: https://pypi.org/p/sqlframe
|
|
14
15
|
steps:
|
|
15
16
|
- name: Checkout
|
|
16
17
|
uses: actions/checkout@v4
|
|
18
|
+
- name: Package
|
|
19
|
+
run: make package
|
|
17
20
|
- name: Publish
|
|
18
|
-
|
|
21
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
19
22
|
- name: Create release
|
|
20
23
|
env:
|
|
21
24
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -12,6 +12,7 @@ import typing as t
|
|
|
12
12
|
import zlib
|
|
13
13
|
from copy import copy
|
|
14
14
|
from dataclasses import dataclass
|
|
15
|
+
from uuid import uuid4
|
|
15
16
|
|
|
16
17
|
import sqlglot
|
|
17
18
|
from prettytable import PrettyTable
|
|
@@ -208,6 +209,8 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
208
209
|
expression: exp.Select,
|
|
209
210
|
branch_id: t.Optional[str] = None,
|
|
210
211
|
sequence_id: t.Optional[str] = None,
|
|
212
|
+
join_on_uuid: t.Optional[str] = None,
|
|
213
|
+
known_uuids: t.Optional[t.Set[str]] = None,
|
|
211
214
|
last_op: Operation = Operation.INIT,
|
|
212
215
|
pending_hints: t.Optional[t.List[exp.Expression]] = None,
|
|
213
216
|
output_expression_container: t.Optional[OutputExpressionContainer] = None,
|
|
@@ -217,6 +220,9 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
217
220
|
self.expression: exp.Select = expression
|
|
218
221
|
self.branch_id = branch_id or self.session._random_branch_id
|
|
219
222
|
self.sequence_id = sequence_id or self.session._random_sequence_id
|
|
223
|
+
self.join_on_uuid = join_on_uuid or str(uuid4())
|
|
224
|
+
self.known_uuids = known_uuids or set()
|
|
225
|
+
self.known_uuids.add(self.join_on_uuid)
|
|
220
226
|
self.last_op = last_op
|
|
221
227
|
self.pending_hints = pending_hints or []
|
|
222
228
|
self.output_expression_container = output_expression_container or exp.Select()
|
|
@@ -228,10 +234,12 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
228
234
|
def __getitem__(self, column_name: str) -> Column:
|
|
229
235
|
from sqlframe.base.util import get_func_from_session
|
|
230
236
|
|
|
231
|
-
|
|
237
|
+
col_func = get_func_from_session("col", self.session)
|
|
232
238
|
|
|
233
239
|
column_name = f"{self.branch_id}.{column_name}"
|
|
234
|
-
|
|
240
|
+
col = col_func(column_name)
|
|
241
|
+
col.expression.meta["join_on_uuid"] = self.join_on_uuid
|
|
242
|
+
return col
|
|
235
243
|
|
|
236
244
|
def __copy__(self):
|
|
237
245
|
return self.copy()
|
|
@@ -715,6 +723,7 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
715
723
|
return ";\n".join(results)
|
|
716
724
|
|
|
717
725
|
def copy(self, **kwargs) -> Self:
|
|
726
|
+
kwargs["join_on_uuid"] = str(uuid4())
|
|
718
727
|
return self.__class__(**object_to_dict(self, **kwargs))
|
|
719
728
|
|
|
720
729
|
@operation(Operation.SELECT)
|
|
@@ -876,13 +885,21 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
876
885
|
self_columns = self._get_outer_select_columns(join_expression)
|
|
877
886
|
other_columns = self._get_outer_select_columns(other_df.expression)
|
|
878
887
|
join_columns = self._ensure_and_normalize_cols(on)
|
|
879
|
-
# If the two dataframes being joined come from the same branch
|
|
880
|
-
#
|
|
888
|
+
# If the two dataframes being joined come from the same branch, we then check if they have any columns that
|
|
889
|
+
# were created using the "branch_id" (df["column_name"]). If so, we know that we need to differentiate
|
|
890
|
+
# the two columns since they would end up with the same table name. We do this by checking for the unique
|
|
891
|
+
# uuids in the other df and finding columns that have metadata on them that match the uuids. If so, we know
|
|
892
|
+
# it comes from the other df and we change the table name to the other df's table name.
|
|
893
|
+
# See `test_self_join` for an example of this.
|
|
881
894
|
if self.branch_id == other_df.branch_id:
|
|
895
|
+
other_df_unique_uuids = other_df.known_uuids - self.known_uuids
|
|
882
896
|
for col in join_columns:
|
|
883
|
-
for
|
|
884
|
-
if
|
|
885
|
-
|
|
897
|
+
for col_expr in col.expression.find_all(exp.Column):
|
|
898
|
+
if (
|
|
899
|
+
"join_on_uuid" in col_expr.meta
|
|
900
|
+
and col_expr.meta["join_on_uuid"] in other_df_unique_uuids
|
|
901
|
+
):
|
|
902
|
+
col_expr.set("table", exp.to_identifier(other_df.latest_cte_name))
|
|
886
903
|
# Determines the join clause and select columns to be used passed on what type of columns were provided for
|
|
887
904
|
# the join. The columns returned changes based on how the on expression is provided.
|
|
888
905
|
if how != "cross":
|
|
@@ -2250,6 +2250,7 @@ def test_chaining_joins_with_selects(
|
|
|
2250
2250
|
|
|
2251
2251
|
|
|
2252
2252
|
# https://github.com/eakmanrq/sqlframe/issues/210
|
|
2253
|
+
# https://github.com/eakmanrq/sqlframe/issues/212
|
|
2253
2254
|
def test_self_join(
|
|
2254
2255
|
pyspark_employee: PySparkDataFrame,
|
|
2255
2256
|
get_df: t.Callable[[str], _BaseDataFrame],
|
|
@@ -2263,16 +2264,16 @@ def test_self_join(
|
|
|
2263
2264
|
df_filtered = pyspark_employee.where(F.col("age") > 40)
|
|
2264
2265
|
df_joined = pyspark_employee.join(
|
|
2265
2266
|
df_filtered,
|
|
2266
|
-
pyspark_employee["employee_id"]
|
|
2267
|
+
pyspark_employee["employee_id"].eqNullSafe(df_filtered["employee_id"]),
|
|
2267
2268
|
how="inner",
|
|
2268
2269
|
)
|
|
2269
2270
|
|
|
2270
2271
|
employee = get_df("employee")
|
|
2271
2272
|
|
|
2272
|
-
dfs_filtered = employee.where(SF.col("age") > 40)
|
|
2273
|
+
dfs_filtered = employee.alias("dfs_filtered").where(SF.col("age") > 40)
|
|
2273
2274
|
dfs_joined = employee.join(
|
|
2274
2275
|
dfs_filtered,
|
|
2275
|
-
employee["employee_id"]
|
|
2276
|
+
employee["employee_id"].eqNullSafe(dfs_filtered["employee_id"]),
|
|
2276
2277
|
how="inner",
|
|
2277
2278
|
)
|
|
2278
2279
|
|
|
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-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png
RENAMED
|
File without changes
|
{sqlframe-3.9.1 → sqlframe-3.9.2}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png
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
|
|
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
|