sqlframe 4.2.0__tar.gz → 4.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.
- sqlframe-4.4.0/.github/workflows/main.workflow.yaml +95 -0
- sqlframe-4.4.0/.superset/config.json +5 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/PKG-INFO +2 -2
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/bigquery.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/docs/bigquery.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/docs/duckdb.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/docs/postgres.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/duckdb.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/postgres.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/snowflake.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/spark.md +1 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/pyproject.toml +1 -1
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/_version.py +3 -3
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/functions.py +9 -1
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/readerwriter.py +71 -27
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/readwriter.py +0 -11
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/readwriter.py +1 -13
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe.egg-info/PKG-INFO +2 -2
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe.egg-info/SOURCES.txt +4 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe.egg-info/requires.txt +1 -1
- sqlframe-4.4.0/sqlframe.egg-info/scm_file_list.json +390 -0
- sqlframe-4.4.0/sqlframe.egg-info/scm_version.json +8 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_engine_writer.py +32 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_functions.py +57 -0
- sqlframe-4.4.0/tests/unit/test_base_writer_options.py +90 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/uv.lock +4 -4
- sqlframe-4.2.0/.github/workflows/main.workflow.yaml +0 -44
- {sqlframe-4.2.0 → sqlframe-4.4.0}/.claude/skills/sqlglot-upgrade/SKILL.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/.github/CODEOWNERS +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/.github/workflows/publish.workflow.yaml +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/.gitignore +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/.pre-commit-config.yaml +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/.readthedocs.yaml +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/CLAUDE.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/LICENSE +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/Makefile +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/README.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/cake.gif +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/configuration.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/databricks.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/docs/images/SF.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/docs/images/favicon.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/images/SF.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/images/favicon.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/index.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/redshift.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/requirements.txt +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/standalone.md +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/docs/stylesheets/extra.css +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/mkdocs.yml +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/renovate.json +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/setup.cfg +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/LICENSE +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/_typing.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/decorators.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/mixins/table_mixins.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/normalize.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/operations.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/transforms.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/util.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/base/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/functions.pyi +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/databricks/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/postgres/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/py.typed +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/redshift/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/spark/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/group.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/standalone/window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe/testing/utils.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/common_fixtures.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/conftest.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee.csv +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee.json +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/issue_219.csv +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/netflix_daily_top_10.parquet +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/databricks/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_engine_column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_engine_table.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_int_functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/fixtures.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/test_int_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/integration/test_int_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/conftest.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/databricks/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/databricks/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/duck/test_functions.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/duck/test_reader_options.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/spark/test_reader_options.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_column.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_types.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/test_activate.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/test_base_reader_options.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/test_catalog.py +0 -0
- {sqlframe-4.2.0 → sqlframe-4.4.0}/tests/unit/test_util.py +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: SQLFrame
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
paths:
|
|
7
|
+
- 'sqlframe/**'
|
|
8
|
+
- 'tests/**'
|
|
9
|
+
- 'Makefile'
|
|
10
|
+
- 'pyproject.toml'
|
|
11
|
+
pull_request:
|
|
12
|
+
types:
|
|
13
|
+
- synchronize
|
|
14
|
+
- opened
|
|
15
|
+
paths:
|
|
16
|
+
- 'sqlframe/**'
|
|
17
|
+
- 'tests/**'
|
|
18
|
+
- 'Makefile'
|
|
19
|
+
- 'pyproject.toml'
|
|
20
|
+
- 'uv.lock'
|
|
21
|
+
jobs:
|
|
22
|
+
run-tests:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
env:
|
|
25
|
+
PYTEST_XDIST_AUTO_NUM_WORKERS: 4
|
|
26
|
+
strategy:
|
|
27
|
+
matrix:
|
|
28
|
+
python-version: ['3.10', '3.11', '3.12', '3.13']
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout
|
|
31
|
+
uses: actions/checkout@v6
|
|
32
|
+
- name: Install uv
|
|
33
|
+
uses: astral-sh/setup-uv@v7
|
|
34
|
+
with:
|
|
35
|
+
python-version: ${{ matrix.python-version }}
|
|
36
|
+
enable-cache: true
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --all-extras
|
|
39
|
+
- name: Run Style
|
|
40
|
+
run: uv run make style
|
|
41
|
+
- name: Configure Postgres
|
|
42
|
+
run: |
|
|
43
|
+
echo "/usr/lib/postgresql/16/bin" >> "$GITHUB_PATH"
|
|
44
|
+
/usr/lib/postgresql/16/bin/postgres --version
|
|
45
|
+
- name: Run tests
|
|
46
|
+
run: uv run make local-test
|
|
47
|
+
minimum-sqlglot:
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
env:
|
|
50
|
+
PYTEST_XDIST_AUTO_NUM_WORKERS: 4
|
|
51
|
+
steps:
|
|
52
|
+
- name: Checkout
|
|
53
|
+
uses: actions/checkout@v6
|
|
54
|
+
- name: Install uv
|
|
55
|
+
uses: astral-sh/setup-uv@v7
|
|
56
|
+
with:
|
|
57
|
+
python-version: '3.12'
|
|
58
|
+
enable-cache: true
|
|
59
|
+
- name: Resolve SQLGlot minimum from project metadata
|
|
60
|
+
id: resolve_sqlglot
|
|
61
|
+
shell: bash
|
|
62
|
+
run: |
|
|
63
|
+
set -euo pipefail
|
|
64
|
+
requirements_file="$(mktemp)"
|
|
65
|
+
uv pip compile pyproject.toml --resolution lowest-direct --no-deps --quiet --output-file "$requirements_file"
|
|
66
|
+
|
|
67
|
+
sqlglot_pin_count=0
|
|
68
|
+
sqlglot_pin=""
|
|
69
|
+
while IFS= read -r pin; do
|
|
70
|
+
sqlglot_pin_count=$((sqlglot_pin_count + 1))
|
|
71
|
+
sqlglot_pin="$pin"
|
|
72
|
+
done < <(grep -iE '^sqlglot==[^[:space:]]+$' "$requirements_file" || true)
|
|
73
|
+
if [[ "$sqlglot_pin_count" -ne 1 ]]; then
|
|
74
|
+
echo "Expected exactly one SQLGlot pin, found $sqlglot_pin_count" >&2
|
|
75
|
+
cat "$requirements_file" >&2
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
echo "Resolved SQLGlot minimum from pyproject.toml: $sqlglot_pin"
|
|
80
|
+
echo "sqlglot_pin=$sqlglot_pin" >> "$GITHUB_OUTPUT"
|
|
81
|
+
{
|
|
82
|
+
echo "### SQLGlot minimum compatibility"
|
|
83
|
+
echo
|
|
84
|
+
echo "Resolved from pyproject.toml: $sqlglot_pin."
|
|
85
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
86
|
+
- name: Install normal dependencies
|
|
87
|
+
run: uv sync --all-extras --locked
|
|
88
|
+
- name: Layer resolved SQLGlot minimum
|
|
89
|
+
env:
|
|
90
|
+
SQLGLOT_PIN: ${{ steps.resolve_sqlglot.outputs.sqlglot_pin }}
|
|
91
|
+
run: |
|
|
92
|
+
uv pip install --python .venv/bin/python "$SQLGLOT_PIN"
|
|
93
|
+
.venv/bin/python -c 'import sqlglot; print(f"Testing SQLGlot {sqlglot.__version__}")'
|
|
94
|
+
- name: Run unit tests at resolved SQLGlot minimum
|
|
95
|
+
run: uv run --no-sync pytest -n 0 tests/unit
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlframe
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: Turning PySpark Into a Universal DataFrame API
|
|
5
5
|
Author-email: Ryan Eakman <eakmanrq@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -16,7 +16,7 @@ Requires-Python: >=3.10
|
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: prettytable<4
|
|
19
|
-
Requires-Dist: sqlglot<30.
|
|
19
|
+
Requires-Dist: sqlglot<30.13,>=30.0.0
|
|
20
20
|
Requires-Dist: typing_extensions
|
|
21
21
|
Requires-Dist: more-itertools
|
|
22
22
|
Provides-Extra: bigquery
|
|
@@ -585,6 +585,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
|
585
585
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
586
586
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
587
587
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
588
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
588
589
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
589
590
|
* sql
|
|
590
591
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -426,6 +426,7 @@ print(session.catalog.listColumns(table_path))
|
|
|
426
426
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
427
427
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
428
428
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
429
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
429
430
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
430
431
|
* sql
|
|
431
432
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -417,6 +417,7 @@ df_store = session.createDataFrame(
|
|
|
417
417
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
418
418
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
419
419
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
420
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
420
421
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
421
422
|
* sql
|
|
422
423
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -378,6 +378,7 @@ df_store = session.createDataFrame(
|
|
|
378
378
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
379
379
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
380
380
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
381
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
381
382
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
382
383
|
* sql
|
|
383
384
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -562,6 +562,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
|
562
562
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
563
563
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
564
564
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
565
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
565
566
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
566
567
|
* sql
|
|
567
568
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -527,6 +527,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
|
527
527
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
528
528
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
529
529
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
530
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
530
531
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
531
532
|
* sql
|
|
532
533
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -593,6 +593,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
|
593
593
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
594
594
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
595
595
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
596
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
596
597
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
597
598
|
* sql
|
|
598
599
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -210,6 +210,7 @@ All functions through 4.0 are supported. Please [open an issue](https://github.c
|
|
|
210
210
|
* [json](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.json.html)
|
|
211
211
|
* [mode](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.mode.html)
|
|
212
212
|
* [parquet](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.parquet.html)
|
|
213
|
+
* [save](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.save.html)
|
|
213
214
|
* [saveAsTable](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrameWriter.saveAsTable.html)
|
|
214
215
|
* sql
|
|
215
216
|
* SQLFrame Specific: Get the SQL representation of the DataFrame
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '4.
|
|
22
|
-
__version_tuple__ = version_tuple = (4,
|
|
21
|
+
__version__ = version = '4.4.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (4, 4, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g7c98f85ae'
|
|
@@ -1731,7 +1731,7 @@ def concat_ws(sep: str, *cols: ColumnOrName) -> Column:
|
|
|
1731
1731
|
expression.ConcatWs(
|
|
1732
1732
|
expressions=[lit(sep).column_expression]
|
|
1733
1733
|
+ [Column.ensure_col(col).column_expression for col in cols],
|
|
1734
|
-
coalesce=
|
|
1734
|
+
coalesce=getattr(session.execution_dialect, "CONCAT_WS_COALESCE", False),
|
|
1735
1735
|
)
|
|
1736
1736
|
)
|
|
1737
1737
|
|
|
@@ -2937,6 +2937,14 @@ def try_avg(col: ColumnOrName) -> Column:
|
|
|
2937
2937
|
|
|
2938
2938
|
@meta()
|
|
2939
2939
|
def try_divide(left: ColumnOrName, right: ColumnOrName) -> Column:
|
|
2940
|
+
session = _get_session()
|
|
2941
|
+
generator = session.execution_dialect.generator_class
|
|
2942
|
+
if (
|
|
2943
|
+
session.execution_dialect_name in {"spark", "databricks"}
|
|
2944
|
+
and expression.SafeDivide not in generator.TRANSFORMS
|
|
2945
|
+
):
|
|
2946
|
+
return Column.invoke_anonymous_function(left, "TRY_DIVIDE", right)
|
|
2947
|
+
|
|
2940
2948
|
return Column.invoke_expression_over_column(
|
|
2941
2949
|
left, expression.SafeDivide, expression=Column.ensure_col(right).column_expression
|
|
2942
2950
|
)
|
|
@@ -485,11 +485,13 @@ class _BaseDataFrameWriter(t.Generic[SESSION, DF]):
|
|
|
485
485
|
mode: t.Optional[str] = None,
|
|
486
486
|
by_name: bool = False,
|
|
487
487
|
state_format_to_write: t.Optional[str] = None,
|
|
488
|
+
state_options: t.Optional[t.Dict[str, OptionalPrimitiveType]] = None,
|
|
488
489
|
):
|
|
489
490
|
self._df = df
|
|
490
491
|
self._mode = mode
|
|
491
492
|
self._by_name = by_name
|
|
492
493
|
self._state_format_to_write = state_format_to_write
|
|
494
|
+
self.state_options = dict(state_options or {})
|
|
493
495
|
|
|
494
496
|
@property
|
|
495
497
|
def _session(self) -> SESSION:
|
|
@@ -513,6 +515,14 @@ class _BaseDataFrameWriter(t.Generic[SESSION, DF]):
|
|
|
513
515
|
def byName(self) -> Self:
|
|
514
516
|
return self.copy(by_name=True)
|
|
515
517
|
|
|
518
|
+
def options(self, **options: OptionalPrimitiveType) -> Self:
|
|
519
|
+
self.state_options = {**self.state_options, **options}
|
|
520
|
+
return self
|
|
521
|
+
|
|
522
|
+
def option(self, key: str, value: OptionalPrimitiveType) -> Self:
|
|
523
|
+
self.state_options[key] = value
|
|
524
|
+
return self
|
|
525
|
+
|
|
516
526
|
def insertInto(self, tableName: str, overwrite: t.Optional[bool] = None) -> Self:
|
|
517
527
|
from sqlframe.base.session import _BaseSession
|
|
518
528
|
|
|
@@ -580,6 +590,20 @@ class _BaseDataFrameWriter(t.Generic[SESSION, DF]):
|
|
|
580
590
|
def _write(self, path: str, mode: t.Optional[str], format: str, **options) -> None:
|
|
581
591
|
raise NotImplementedError
|
|
582
592
|
|
|
593
|
+
def save(
|
|
594
|
+
self,
|
|
595
|
+
path: t.Optional[str] = None,
|
|
596
|
+
format: t.Optional[str] = None,
|
|
597
|
+
mode: t.Optional[str] = None,
|
|
598
|
+
partitionBy: t.Optional[t.Union[str, t.List[str]]] = None,
|
|
599
|
+
**options: OptionalPrimitiveType,
|
|
600
|
+
) -> None:
|
|
601
|
+
assert path is not None, "path is required"
|
|
602
|
+
format = format or self._state_format_to_write or "parquet"
|
|
603
|
+
mode = mode or self._mode
|
|
604
|
+
all_options = {**self.state_options, **{k: v for k, v in options.items() if v is not None}}
|
|
605
|
+
self._write(path=path, mode=mode, format=format, partitionBy=partitionBy, **all_options)
|
|
606
|
+
|
|
583
607
|
def format(self, source: str) -> "Self":
|
|
584
608
|
"""Specifies the input data source format.
|
|
585
609
|
|
|
@@ -679,16 +703,23 @@ class _BaseDataFrameWriter(t.Generic[SESSION, DF]):
|
|
|
679
703
|
|100|Hyukjin Kwon|
|
|
680
704
|
+---+------------+
|
|
681
705
|
"""
|
|
706
|
+
method_options = {
|
|
707
|
+
"compression": compression,
|
|
708
|
+
"dateFormat": dateFormat,
|
|
709
|
+
"timestampFormat": timestampFormat,
|
|
710
|
+
"lineSep": lineSep,
|
|
711
|
+
"encoding": encoding,
|
|
712
|
+
"ignoreNullFields": ignoreNullFields,
|
|
713
|
+
}
|
|
714
|
+
all_options = {
|
|
715
|
+
**self.state_options,
|
|
716
|
+
**{k: v for k, v in method_options.items() if v is not None},
|
|
717
|
+
}
|
|
682
718
|
self._write(
|
|
683
719
|
path=path,
|
|
684
|
-
mode=mode,
|
|
720
|
+
mode=mode or self._mode,
|
|
685
721
|
format="json",
|
|
686
|
-
|
|
687
|
-
dateFormat=dateFormat,
|
|
688
|
-
timestampFormat=timestampFormat,
|
|
689
|
-
lineSep=lineSep,
|
|
690
|
-
encoding=encoding,
|
|
691
|
-
ignoreNullFields=ignoreNullFields,
|
|
722
|
+
**all_options,
|
|
692
723
|
)
|
|
693
724
|
|
|
694
725
|
def parquet(
|
|
@@ -748,9 +779,15 @@ class _BaseDataFrameWriter(t.Generic[SESSION, DF]):
|
|
|
748
779
|
|100|Hyukjin Kwon|
|
|
749
780
|
+---+------------+
|
|
750
781
|
"""
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
782
|
+
method_options = {
|
|
783
|
+
"compression": compression,
|
|
784
|
+
"partitionBy": partitionBy,
|
|
785
|
+
}
|
|
786
|
+
all_options = {
|
|
787
|
+
**self.state_options,
|
|
788
|
+
**{k: v for k, v in method_options.items() if v is not None},
|
|
789
|
+
}
|
|
790
|
+
self._write(path=path, mode=mode or self._mode, format="parquet", **all_options)
|
|
754
791
|
|
|
755
792
|
def csv(
|
|
756
793
|
self,
|
|
@@ -821,26 +858,33 @@ class _BaseDataFrameWriter(t.Generic[SESSION, DF]):
|
|
|
821
858
|
|100|NULL|
|
|
822
859
|
+---+----+
|
|
823
860
|
"""
|
|
861
|
+
method_options = {
|
|
862
|
+
"compression": compression,
|
|
863
|
+
"sep": sep,
|
|
864
|
+
"quote": quote,
|
|
865
|
+
"escape": escape,
|
|
866
|
+
"header": header,
|
|
867
|
+
"nullValue": nullValue,
|
|
868
|
+
"escapeQuotes": escapeQuotes,
|
|
869
|
+
"quoteAll": quoteAll,
|
|
870
|
+
"dateFormat": dateFormat,
|
|
871
|
+
"timestampFormat": timestampFormat,
|
|
872
|
+
"ignoreLeadingWhiteSpace": ignoreLeadingWhiteSpace,
|
|
873
|
+
"ignoreTrailingWhiteSpace": ignoreTrailingWhiteSpace,
|
|
874
|
+
"charToEscapeQuoteEscaping": charToEscapeQuoteEscaping,
|
|
875
|
+
"encoding": encoding,
|
|
876
|
+
"emptyValue": emptyValue,
|
|
877
|
+
"lineSep": lineSep,
|
|
878
|
+
}
|
|
879
|
+
all_options = {
|
|
880
|
+
**self.state_options,
|
|
881
|
+
**{k: v for k, v in method_options.items() if v is not None},
|
|
882
|
+
}
|
|
824
883
|
self._write(
|
|
825
884
|
path=path,
|
|
826
|
-
mode=mode,
|
|
885
|
+
mode=mode or self._mode,
|
|
827
886
|
format="csv",
|
|
828
|
-
|
|
829
|
-
sep=sep,
|
|
830
|
-
quote=quote,
|
|
831
|
-
escape=escape,
|
|
832
|
-
header=header,
|
|
833
|
-
nullValue=nullValue,
|
|
834
|
-
escapeQuotes=escapeQuotes,
|
|
835
|
-
quoteAll=quoteAll,
|
|
836
|
-
dateFormat=dateFormat,
|
|
837
|
-
timestampFormat=timestampFormat,
|
|
838
|
-
ignoreLeadingWhiteSpace=ignoreLeadingWhiteSpace,
|
|
839
|
-
ignoreTrailingWhiteSpace=ignoreTrailingWhiteSpace,
|
|
840
|
-
charToEscapeQuoteEscaping=charToEscapeQuoteEscaping,
|
|
841
|
-
encoding=encoding,
|
|
842
|
-
emptyValue=emptyValue,
|
|
843
|
-
lineSep=lineSep,
|
|
887
|
+
**all_options,
|
|
844
888
|
)
|
|
845
889
|
|
|
846
890
|
|
|
@@ -148,17 +148,6 @@ class DatabricksDataFrameWriter(
|
|
|
148
148
|
PandasWriterMixin["DatabricksSession", "DatabricksDataFrame"],
|
|
149
149
|
_BaseDataFrameWriter["DatabricksSession", "DatabricksDataFrame"],
|
|
150
150
|
):
|
|
151
|
-
def save(
|
|
152
|
-
self,
|
|
153
|
-
path: str,
|
|
154
|
-
mode: t.Optional[str] = None,
|
|
155
|
-
format: t.Optional[str] = None,
|
|
156
|
-
partitionBy: t.Optional[t.Union[str, t.List[str]]] = None,
|
|
157
|
-
**options,
|
|
158
|
-
):
|
|
159
|
-
format = str(format or self._state_format_to_write)
|
|
160
|
-
self._write(path, mode, format, partitionBy=partitionBy, **options)
|
|
161
|
-
|
|
162
151
|
def _write(self, path: str, mode: t.Optional[str], format: str, **options):
|
|
163
152
|
fs_prefix, filepath = split_filepath(path)
|
|
164
153
|
if fs_prefix == "":
|
|
@@ -134,17 +134,6 @@ class SparkDataFrameReader(
|
|
|
134
134
|
class SparkDataFrameWriter(
|
|
135
135
|
_BaseDataFrameWriter["SparkSession", "SparkDataFrame"],
|
|
136
136
|
):
|
|
137
|
-
def save(
|
|
138
|
-
self,
|
|
139
|
-
path: str,
|
|
140
|
-
mode: t.Optional[str] = None,
|
|
141
|
-
format: t.Optional[str] = None,
|
|
142
|
-
partitionBy: t.Optional[t.Union[str, t.List[str]]] = None,
|
|
143
|
-
**options,
|
|
144
|
-
):
|
|
145
|
-
format = str(format or self._state_format_to_write)
|
|
146
|
-
self._write(path, mode, format, partitionBy=partitionBy, **options)
|
|
147
|
-
|
|
148
137
|
def _write(self, path: str, mode: t.Optional[str], format: str, **options):
|
|
149
138
|
spark_df = None
|
|
150
139
|
expressions = self._df._get_expressions()
|
|
@@ -161,8 +150,7 @@ class SparkDataFrameWriter(
|
|
|
161
150
|
partition_columns = options.pop("partitionBy", None)
|
|
162
151
|
compression = options.pop("compression", None)
|
|
163
152
|
if partition_columns:
|
|
164
|
-
|
|
165
|
-
spark_writer = spark_writer.partitionBy(*partition_columns)
|
|
153
|
+
spark_writer = spark_writer.partitionBy(*ensure_list(partition_columns))
|
|
166
154
|
if compression:
|
|
167
155
|
spark_writer = spark_writer.option("compression", compression)
|
|
168
156
|
spark_writer.save(path=path, **options)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlframe
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: Turning PySpark Into a Universal DataFrame API
|
|
5
5
|
Author-email: Ryan Eakman <eakmanrq@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -16,7 +16,7 @@ Requires-Python: >=3.10
|
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: prettytable<4
|
|
19
|
-
Requires-Dist: sqlglot<30.
|
|
19
|
+
Requires-Dist: sqlglot<30.13,>=30.0.0
|
|
20
20
|
Requires-Dist: typing_extensions
|
|
21
21
|
Requires-Dist: more-itertools
|
|
22
22
|
Provides-Extra: bigquery
|
|
@@ -13,6 +13,7 @@ uv.lock
|
|
|
13
13
|
.github/CODEOWNERS
|
|
14
14
|
.github/workflows/main.workflow.yaml
|
|
15
15
|
.github/workflows/publish.workflow.yaml
|
|
16
|
+
.superset/config.json
|
|
16
17
|
blogs/add_chatgpt_support.md
|
|
17
18
|
blogs/sqlframe_universal_dataframe_api.md
|
|
18
19
|
blogs/images/but_wait_theres_more.gif
|
|
@@ -55,6 +56,8 @@ sqlframe.egg-info/PKG-INFO
|
|
|
55
56
|
sqlframe.egg-info/SOURCES.txt
|
|
56
57
|
sqlframe.egg-info/dependency_links.txt
|
|
57
58
|
sqlframe.egg-info/requires.txt
|
|
59
|
+
sqlframe.egg-info/scm_file_list.json
|
|
60
|
+
sqlframe.egg-info/scm_version.json
|
|
58
61
|
sqlframe.egg-info/top_level.txt
|
|
59
62
|
sqlframe/base/__init__.py
|
|
60
63
|
sqlframe/base/_typing.py
|
|
@@ -358,6 +361,7 @@ tests/unit/__init__.py
|
|
|
358
361
|
tests/unit/conftest.py
|
|
359
362
|
tests/unit/test_activate.py
|
|
360
363
|
tests/unit/test_base_reader_options.py
|
|
364
|
+
tests/unit/test_base_writer_options.py
|
|
361
365
|
tests/unit/test_catalog.py
|
|
362
366
|
tests/unit/test_util.py
|
|
363
367
|
tests/unit/bigquery/__init__.py
|