sqlframe 3.22.0__tar.gz → 3.23.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-3.22.0 → sqlframe-3.23.0}/PKG-INFO +1 -1
- {sqlframe-3.22.0 → sqlframe-3.23.0}/setup.py +5 -5
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/_version.py +9 -4
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/catalog.py +6 -3
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/functions.py +14 -8
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/util.py +0 -9
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/window.py +19 -30
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/session.py +1 -3
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe.egg-info/requires.txt +5 -5
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_duckdb_catalog.py +2 -12
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_duckdb_reader.py +8 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_int_functions.py +21 -6
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/test_int_dataframe.py +86 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_column.py +4 -2
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_functions.py +7 -4
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_window.py +18 -6
- {sqlframe-3.22.0 → sqlframe-3.23.0}/.github/CODEOWNERS +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/.github/workflows/main.workflow.yaml +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/.github/workflows/publish.workflow.yaml +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/.gitignore +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/.pre-commit-config.yaml +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/.readthedocs.yaml +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/LICENSE +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/Makefile +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/README.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/cake.gif +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/bigquery.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/configuration.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/databricks.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/bigquery.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/duckdb.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/images/SF.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/images/favicon.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/images/favicon_old.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/docs/postgres.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/duckdb.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/images/SF.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/images/favicon.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/images/favicon_old.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/index.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/postgres.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/redshift.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/requirements.txt +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/snowflake.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/spark.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/standalone.md +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/docs/stylesheets/extra.css +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/mkdocs.yml +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/pytest.ini +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/renovate.json +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/setup.cfg +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/LICENSE +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/_typing.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/decorators.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/mixins/table_mixins.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/normalize.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/operations.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/transforms.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/base/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/functions.pyi +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/databricks/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/postgres/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/redshift/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/spark/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/group.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/standalone/window.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe/testing/utils.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/common_fixtures.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/conftest.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee.csv +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee.json +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/issue_219.csv +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/databricks/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_engine_column.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_engine_table.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/fixtures.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/integration/test_int_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/conftest.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/databricks/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/databricks/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/standalone/test_types.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/test_activate.py +0 -0
- {sqlframe-3.22.0 → sqlframe-3.23.0}/tests/unit/test_util.py +0 -0
|
@@ -20,7 +20,7 @@ setup(
|
|
|
20
20
|
python_requires=">=3.9",
|
|
21
21
|
install_requires=[
|
|
22
22
|
"prettytable<4",
|
|
23
|
-
"sqlglot>=24.0.0,<26.
|
|
23
|
+
"sqlglot>=24.0.0,<26.9",
|
|
24
24
|
"typing_extensions",
|
|
25
25
|
],
|
|
26
26
|
extras_require={
|
|
@@ -29,7 +29,7 @@ setup(
|
|
|
29
29
|
"google-cloud-bigquery-storage>=2,<3",
|
|
30
30
|
],
|
|
31
31
|
"dev": [
|
|
32
|
-
"duckdb>=
|
|
32
|
+
"duckdb>=1.2,<1.3",
|
|
33
33
|
"findspark>=2,<3",
|
|
34
34
|
"mypy>=1.10.0,<1.16",
|
|
35
35
|
"openai>=1.30,<2",
|
|
@@ -40,7 +40,7 @@ setup(
|
|
|
40
40
|
"pyspark>=2,<3.6",
|
|
41
41
|
"pytest>=8.2.0,<8.4",
|
|
42
42
|
"pytest-forked",
|
|
43
|
-
"pytest-postgresql>=6,<
|
|
43
|
+
"pytest-postgresql>=6,<8",
|
|
44
44
|
"pytest-xdist>=3.6,<3.7",
|
|
45
45
|
"pre-commit>=3.7,<5",
|
|
46
46
|
"ruff>=0.4.4,<0.10",
|
|
@@ -54,7 +54,7 @@ setup(
|
|
|
54
54
|
"pymdown-extensions",
|
|
55
55
|
],
|
|
56
56
|
"duckdb": [
|
|
57
|
-
"duckdb>=
|
|
57
|
+
"duckdb>=1.2,<1.3",
|
|
58
58
|
"pandas>=2,<3",
|
|
59
59
|
],
|
|
60
60
|
"openai": [
|
|
@@ -70,7 +70,7 @@ setup(
|
|
|
70
70
|
"redshift_connector>=2.1.1,<2.2.0",
|
|
71
71
|
],
|
|
72
72
|
"snowflake": [
|
|
73
|
-
"snowflake-connector-python[secure-local-storage]>=3.10.0,<3.
|
|
73
|
+
"snowflake-connector-python[secure-local-storage]>=3.10.0,<3.15",
|
|
74
74
|
],
|
|
75
75
|
"spark": [
|
|
76
76
|
"pyspark>=2,<3.6",
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
# file generated by
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
|
|
5
|
+
|
|
3
6
|
TYPE_CHECKING = False
|
|
4
7
|
if TYPE_CHECKING:
|
|
5
|
-
from typing import Tuple
|
|
8
|
+
from typing import Tuple
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
6
11
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
7
12
|
else:
|
|
8
13
|
VERSION_TUPLE = object
|
|
@@ -12,5 +17,5 @@ __version__: str
|
|
|
12
17
|
__version_tuple__: VERSION_TUPLE
|
|
13
18
|
version_tuple: VERSION_TUPLE
|
|
14
19
|
|
|
15
|
-
__version__ = version = '3.
|
|
16
|
-
__version_tuple__ = version_tuple = (3,
|
|
20
|
+
__version__ = version = '3.23.0'
|
|
21
|
+
__version_tuple__ = version_tuple = (3, 23, 0)
|
|
@@ -70,13 +70,16 @@ class _BaseCatalog(t.Generic[SESSION, DF]):
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
def add_table(
|
|
73
|
-
self,
|
|
73
|
+
self,
|
|
74
|
+
table: exp.Table | str,
|
|
75
|
+
column_mapping: t.Optional[ColumnMapping] = None,
|
|
76
|
+
**kwargs: t.Any,
|
|
74
77
|
) -> None:
|
|
75
78
|
# TODO: Making this an update or add
|
|
76
79
|
table = self.ensure_table(table)
|
|
77
80
|
if self._schema.find(table):
|
|
78
81
|
return
|
|
79
|
-
if
|
|
82
|
+
if column_mapping is None:
|
|
80
83
|
try:
|
|
81
84
|
column_mapping = {
|
|
82
85
|
normalize_string(
|
|
@@ -100,7 +103,7 @@ class _BaseCatalog(t.Generic[SESSION, DF]):
|
|
|
100
103
|
if column.this.quoted:
|
|
101
104
|
self._quoted_columns[table].append(column.this.name)
|
|
102
105
|
|
|
103
|
-
self._schema.add_table(table, column_mapping, dialect=self.session.input_dialect)
|
|
106
|
+
self._schema.add_table(table, column_mapping, dialect=self.session.input_dialect, **kwargs)
|
|
104
107
|
|
|
105
108
|
def getDatabase(self, dbName: str) -> Database:
|
|
106
109
|
"""Get the database with the specified name.
|
|
@@ -856,15 +856,21 @@ def expr(str: str) -> Column:
|
|
|
856
856
|
|
|
857
857
|
@meta(unsupported_engines=["postgres"])
|
|
858
858
|
def struct(col: t.Union[ColumnOrName, t.Iterable[ColumnOrName]], *cols: ColumnOrName) -> Column:
|
|
859
|
-
from sqlframe.base.function_alternatives import struct_with_eq
|
|
860
|
-
|
|
861
859
|
session = _get_session()
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
860
|
+
col_func = get_func_from_session("col")
|
|
861
|
+
|
|
862
|
+
columns = [col_func(x) for x in ensure_list(col) + list(cols)]
|
|
863
|
+
expressions = []
|
|
864
|
+
for column in columns:
|
|
865
|
+
expressions.append(
|
|
866
|
+
expression.PropertyEQ(
|
|
867
|
+
this=expression.parse_identifier(
|
|
868
|
+
column.alias_or_name, dialect=session.input_dialect
|
|
869
|
+
),
|
|
870
|
+
expression=column.column_expression,
|
|
871
|
+
)
|
|
872
|
+
)
|
|
873
|
+
return Column(expression.Struct(expressions=expressions))
|
|
868
874
|
|
|
869
875
|
|
|
870
876
|
@meta(unsupported_engines=["bigquery", "duckdb", "postgres", "snowflake"])
|
|
@@ -279,15 +279,6 @@ def verify_openai_installed():
|
|
|
279
279
|
)
|
|
280
280
|
|
|
281
281
|
|
|
282
|
-
def verify_numpy_installed():
|
|
283
|
-
try:
|
|
284
|
-
import numpy # noqa
|
|
285
|
-
except ImportError:
|
|
286
|
-
raise ImportError(
|
|
287
|
-
"""Numpy is required for this functionality. `pip install "sqlframe[pandas]"` (also include your engine if needed) to install pandas/numpy."""
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
|
|
291
282
|
def quote_preserving_alias_or_name(col: t.Union[exp.Column, exp.Alias]) -> str:
|
|
292
283
|
from sqlframe.base.session import _BaseSession
|
|
293
284
|
|
|
@@ -82,37 +82,26 @@ class WindowSpec:
|
|
|
82
82
|
def _calc_start_end(
|
|
83
83
|
self, start: int, end: int
|
|
84
84
|
) -> t.Dict[str, t.Optional[t.Union[str, exp.Expression]]]:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
def get_value_and_side(x: int) -> t.Tuple[t.Union[str, exp.Expression], t.Optional[str]]:
|
|
86
|
+
if x == Window.currentRow:
|
|
87
|
+
return "CURRENT ROW", None
|
|
88
|
+
if x < 0:
|
|
89
|
+
side = "PRECEDING"
|
|
90
|
+
value = "UNBOUNDED" if x <= Window.unboundedPreceding else F.lit(abs(x)).expression
|
|
91
|
+
return value, side
|
|
92
|
+
else:
|
|
93
|
+
side = "FOLLOWING"
|
|
94
|
+
value = "UNBOUNDED" if x >= Window.unboundedFollowing else F.lit(x).expression
|
|
95
|
+
return value, side
|
|
96
|
+
|
|
97
|
+
start, start_side = get_value_and_side(start) # type: ignore
|
|
98
|
+
end, end_side = get_value_and_side(end) # type: ignore
|
|
99
|
+
return {
|
|
100
|
+
"start": start, # type: ignore
|
|
101
|
+
"start_side": start_side,
|
|
102
|
+
"end": end, # type: ignore
|
|
103
|
+
"end_side": end_side,
|
|
88
104
|
}
|
|
89
|
-
if start == Window.currentRow:
|
|
90
|
-
kwargs["start"] = "CURRENT ROW"
|
|
91
|
-
else:
|
|
92
|
-
kwargs = {
|
|
93
|
-
**kwargs,
|
|
94
|
-
**{
|
|
95
|
-
"start_side": "PRECEDING",
|
|
96
|
-
"start": (
|
|
97
|
-
"UNBOUNDED"
|
|
98
|
-
if start <= Window.unboundedPreceding
|
|
99
|
-
else F.lit(start).expression
|
|
100
|
-
),
|
|
101
|
-
},
|
|
102
|
-
}
|
|
103
|
-
if end == Window.currentRow:
|
|
104
|
-
kwargs["end"] = "CURRENT ROW"
|
|
105
|
-
else:
|
|
106
|
-
kwargs = {
|
|
107
|
-
**kwargs,
|
|
108
|
-
**{
|
|
109
|
-
"end_side": "FOLLOWING",
|
|
110
|
-
"end": (
|
|
111
|
-
"UNBOUNDED" if end >= Window.unboundedFollowing else F.lit(end).expression
|
|
112
|
-
),
|
|
113
|
-
},
|
|
114
|
-
}
|
|
115
|
-
return kwargs
|
|
116
105
|
|
|
117
106
|
def rowsBetween(self, start: int, end: int) -> WindowSpec:
|
|
118
107
|
window_spec = self.copy()
|
|
@@ -4,7 +4,7 @@ import typing as t
|
|
|
4
4
|
from functools import cached_property
|
|
5
5
|
|
|
6
6
|
from sqlframe.base.session import _BaseSession
|
|
7
|
-
from sqlframe.base.util import soundex
|
|
7
|
+
from sqlframe.base.util import soundex
|
|
8
8
|
from sqlframe.duckdb.catalog import DuckDBCatalog
|
|
9
9
|
from sqlframe.duckdb.dataframe import DuckDBDataFrame
|
|
10
10
|
from sqlframe.duckdb.readwriter import (
|
|
@@ -46,8 +46,6 @@ class DuckDBSession(
|
|
|
46
46
|
if not hasattr(self, "_conn"):
|
|
47
47
|
conn = conn or duckdb.connect()
|
|
48
48
|
try:
|
|
49
|
-
# Creating a function requires numpy to be installed so if they don't have it, we'll just skip it
|
|
50
|
-
verify_numpy_installed()
|
|
51
49
|
conn.create_function("SOUNDEX", lambda x: soundex(x), return_type=VARCHAR)
|
|
52
50
|
except ImportError:
|
|
53
51
|
pass
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
prettytable<4
|
|
2
|
-
sqlglot<26.
|
|
2
|
+
sqlglot<26.9,>=24.0.0
|
|
3
3
|
typing_extensions
|
|
4
4
|
|
|
5
5
|
[bigquery]
|
|
@@ -10,7 +10,7 @@ google-cloud-bigquery[pandas]<4,>=3
|
|
|
10
10
|
databricks-sql-connector<5,>=3.6
|
|
11
11
|
|
|
12
12
|
[dev]
|
|
13
|
-
duckdb<1.
|
|
13
|
+
duckdb<1.3,>=1.2
|
|
14
14
|
findspark<3,>=2
|
|
15
15
|
mypy<1.16,>=1.10.0
|
|
16
16
|
openai<2,>=1.30
|
|
@@ -21,7 +21,7 @@ psycopg<4,>=3.1
|
|
|
21
21
|
pyarrow<20,>=10
|
|
22
22
|
pyspark<3.6,>=2
|
|
23
23
|
pytest-forked
|
|
24
|
-
pytest-postgresql<
|
|
24
|
+
pytest-postgresql<8,>=6
|
|
25
25
|
pytest-xdist<3.7,>=3.6
|
|
26
26
|
pytest<8.4,>=8.2.0
|
|
27
27
|
ruff<0.10,>=0.4.4
|
|
@@ -35,7 +35,7 @@ mkdocs==1.4.2
|
|
|
35
35
|
pymdown-extensions
|
|
36
36
|
|
|
37
37
|
[duckdb]
|
|
38
|
-
duckdb<1.
|
|
38
|
+
duckdb<1.3,>=1.2
|
|
39
39
|
pandas<3,>=2
|
|
40
40
|
|
|
41
41
|
[openai]
|
|
@@ -51,7 +51,7 @@ psycopg2<3,>=2.8
|
|
|
51
51
|
redshift_connector<2.2.0,>=2.1.1
|
|
52
52
|
|
|
53
53
|
[snowflake]
|
|
54
|
-
snowflake-connector-python[secure-local-storage]<3.
|
|
54
|
+
snowflake-connector-python[secure-local-storage]<3.15,>=3.10.0
|
|
55
55
|
|
|
56
56
|
[spark]
|
|
57
57
|
pyspark<3.6,>=2
|
|
@@ -57,25 +57,15 @@ def test_set_current_database(duckdb_session: DuckDBSession):
|
|
|
57
57
|
|
|
58
58
|
def test_list_databases(duckdb_session: DuckDBSession):
|
|
59
59
|
assert sorted(duckdb_session.catalog.listDatabases(), key=lambda x: (x.catalog, x.name)) == [
|
|
60
|
-
Database(name="information_schema", catalog="catalog1", description=None, locationUri=""),
|
|
61
60
|
Database(name="main", catalog="catalog1", description=None, locationUri=""),
|
|
62
|
-
Database(name="pg_catalog", catalog="catalog1", description=None, locationUri=""),
|
|
63
|
-
Database(name="information_schema", catalog="catalog2", description=None, locationUri=""),
|
|
64
61
|
Database(name="main", catalog="catalog2", description=None, locationUri=""),
|
|
65
|
-
Database(name="pg_catalog", catalog="catalog2", description=None, locationUri=""),
|
|
66
62
|
Database(name="db1", catalog="default", description=None, locationUri=""),
|
|
67
|
-
Database(name="information_schema", catalog="default", description=None, locationUri=""),
|
|
68
63
|
Database(name="main", catalog="default", description=None, locationUri=""),
|
|
69
|
-
Database(name="pg_catalog", catalog="default", description=None, locationUri=""),
|
|
70
|
-
Database(name="information_schema", catalog="memory", description=None, locationUri=""),
|
|
71
64
|
Database(name="main", catalog="memory", description=None, locationUri=""),
|
|
72
|
-
Database(name="pg_catalog", catalog="memory", description=None, locationUri=""),
|
|
73
65
|
Database(name="information_schema", catalog="system", description=None, locationUri=""),
|
|
74
66
|
Database(name="main", catalog="system", description=None, locationUri=""),
|
|
75
67
|
Database(name="pg_catalog", catalog="system", description=None, locationUri=""),
|
|
76
|
-
Database(name="information_schema", catalog="temp", description=None, locationUri=""),
|
|
77
68
|
Database(name="main", catalog="temp", description=None, locationUri=""),
|
|
78
|
-
Database(name="pg_catalog", catalog="temp", description=None, locationUri=""),
|
|
79
69
|
]
|
|
80
70
|
|
|
81
71
|
|
|
@@ -99,8 +89,8 @@ def test_get_database_name_only(duckdb_session: DuckDBSession):
|
|
|
99
89
|
|
|
100
90
|
|
|
101
91
|
def test_get_database_name_and_catalog(duckdb_session: DuckDBSession):
|
|
102
|
-
assert duckdb_session.catalog.getDatabase("
|
|
103
|
-
name="information_schema", catalog="
|
|
92
|
+
assert duckdb_session.catalog.getDatabase("system.information_schema") == Database(
|
|
93
|
+
name="information_schema", catalog="system", description=None, locationUri=""
|
|
104
94
|
)
|
|
105
95
|
|
|
106
96
|
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
1
5
|
from sqlframe.base.types import Row
|
|
2
6
|
from sqlframe.duckdb import DuckDBSession
|
|
3
7
|
from sqlframe.duckdb import functions as F
|
|
@@ -102,6 +106,10 @@ def test_employee_extra_line_csv_multiple(duckdb_session: DuckDBSession):
|
|
|
102
106
|
|
|
103
107
|
|
|
104
108
|
def test_employee_delta(duckdb_session: DuckDBSession):
|
|
109
|
+
if os.environ.get("CI"):
|
|
110
|
+
pytest.skip(
|
|
111
|
+
"DuckDB Delta is not working in CI with DuckDB 1.2.1. Error: `duckdb.duckdb.Error: An error occurred while trying to automatically install the required extension 'delta'`"
|
|
112
|
+
)
|
|
105
113
|
df = duckdb_session.read.load(
|
|
106
114
|
"tests/fixtures/employee_delta",
|
|
107
115
|
format="delta",
|
|
@@ -1062,8 +1062,23 @@ def test_struct(get_session_and_func):
|
|
|
1062
1062
|
if not isinstance(session, SnowflakeSession)
|
|
1063
1063
|
else [Row(value={"age": 2, "name": "Alice"}), Row(value={"age": 5, "name": "Bob"})]
|
|
1064
1064
|
)
|
|
1065
|
-
|
|
1066
|
-
|
|
1065
|
+
expected_field_names = ["age", "name"]
|
|
1066
|
+
result = df.select(struct("age", "name").alias("struct")).collect()
|
|
1067
|
+
assert result == expected
|
|
1068
|
+
if isinstance(session, (SparkSession, PySparkSession)):
|
|
1069
|
+
pass
|
|
1070
|
+
elif isinstance(session, SnowflakeSession):
|
|
1071
|
+
assert list(result[0][0]) == expected_field_names
|
|
1072
|
+
else:
|
|
1073
|
+
assert result[0][0]._unique_field_names == expected_field_names
|
|
1074
|
+
result = df.select(struct([df.age, df.name]).alias("struct")).collect()
|
|
1075
|
+
assert result == expected
|
|
1076
|
+
if isinstance(session, (SparkSession, PySparkSession)):
|
|
1077
|
+
pass
|
|
1078
|
+
elif isinstance(session, SnowflakeSession):
|
|
1079
|
+
assert list(result[0][0]) == expected_field_names
|
|
1080
|
+
else:
|
|
1081
|
+
assert result[0][0]._unique_field_names == expected_field_names
|
|
1067
1082
|
|
|
1068
1083
|
|
|
1069
1084
|
def test_greatest(get_session_and_func):
|
|
@@ -1576,7 +1591,7 @@ def test_hash(get_session_and_func):
|
|
|
1576
1591
|
df = session.createDataFrame([("ABC", "DEF")], ["c1", "c2"])
|
|
1577
1592
|
if isinstance(session, DuckDBSession):
|
|
1578
1593
|
assert df.select(hash("c1").alias("hash")).first()[0] == 1241521928161919141
|
|
1579
|
-
assert df.select(hash("c1", "c2").alias("hash")).first()[0] ==
|
|
1594
|
+
assert df.select(hash("c1", "c2").alias("hash")).first()[0] == 7524280102280623017
|
|
1580
1595
|
# Bigquery only supports hashing a single column
|
|
1581
1596
|
elif isinstance(session, BigQuerySession):
|
|
1582
1597
|
assert df.select(hash("c1").alias("hash")).first()[0] == 228873345217803866
|
|
@@ -4879,9 +4894,9 @@ def test_try_element_at(get_session_and_func, get_func):
|
|
|
4879
4894
|
else:
|
|
4880
4895
|
assert df.select(try_element_at(df.data, lit(-1)).alias("r")).first()[0] == "c"
|
|
4881
4896
|
df = session.createDataFrame([({"a": 1.0, "b": 2.0},)], ["data"])
|
|
4882
|
-
if isinstance(session, DuckDBSession):
|
|
4883
|
-
|
|
4884
|
-
|
|
4897
|
+
# if isinstance(session, DuckDBSession):
|
|
4898
|
+
# assert df.select(try_element_at(df.data, lit("a")).alias("r")).first()[0] == [1.0]
|
|
4899
|
+
if isinstance(session, PostgresSession):
|
|
4885
4900
|
pass
|
|
4886
4901
|
else:
|
|
4887
4902
|
assert df.select(try_element_at(df.data, lit("a")).alias("r")).first()[0] == 1.0
|
|
@@ -6,8 +6,10 @@ import pandas as pd
|
|
|
6
6
|
import pytest
|
|
7
7
|
from _pytest.fixtures import FixtureRequest
|
|
8
8
|
from pyspark.sql import DataFrame as PySparkDataFrame
|
|
9
|
+
from pyspark.sql import Window
|
|
9
10
|
from pyspark.sql import functions as F
|
|
10
11
|
|
|
12
|
+
from sqlframe.standalone import Window as SWindow
|
|
11
13
|
from sqlframe.standalone import functions as SF
|
|
12
14
|
from sqlframe.standalone.dataframe import StandaloneDataFrame
|
|
13
15
|
from tests.integration.fixtures import StandaloneSession, is_snowflake
|
|
@@ -2548,3 +2550,87 @@ def test_full_outer_nulls_no_match(
|
|
|
2548
2550
|
dfs = dfs_concept_1.join(dfs_concept_2, on="col1", how="outer")
|
|
2549
2551
|
|
|
2550
2552
|
compare_frames(df, dfs, compare_schema=False)
|
|
2553
|
+
|
|
2554
|
+
|
|
2555
|
+
# https://github.com/eakmanrq/sqlframe/issues/317
|
|
2556
|
+
def test_rows_between_negative_start(
|
|
2557
|
+
pyspark_employee: PySparkDataFrame,
|
|
2558
|
+
get_df: t.Callable[[str], BaseDataFrame],
|
|
2559
|
+
compare_frames: t.Callable,
|
|
2560
|
+
):
|
|
2561
|
+
session = pyspark_employee.sparkSession
|
|
2562
|
+
df = session.createDataFrame(
|
|
2563
|
+
pd.DataFrame(
|
|
2564
|
+
{"store": [1, 1, 1, 2, 2, 2, 2], "price": [1, 2, 3, 4, 3, 2, 1], "date": list(range(7))}
|
|
2565
|
+
)
|
|
2566
|
+
)
|
|
2567
|
+
window = Window().partitionBy("store").orderBy("date").rowsBetween(-1, 1)
|
|
2568
|
+
df = df.withColumn("rolling_price", F.mean("price").over(window))
|
|
2569
|
+
|
|
2570
|
+
employee = get_df("employee")
|
|
2571
|
+
sf_session = employee.session
|
|
2572
|
+
dfs = sf_session.createDataFrame(
|
|
2573
|
+
pd.DataFrame(
|
|
2574
|
+
{"store": [1, 1, 1, 2, 2, 2, 2], "price": [1, 2, 3, 4, 3, 2, 1], "date": list(range(7))}
|
|
2575
|
+
)
|
|
2576
|
+
)
|
|
2577
|
+
swindow = SWindow().partitionBy("store").orderBy("date").rowsBetween(-1, 1)
|
|
2578
|
+
dfs = dfs.withColumn("rolling_price", SF.mean("price").over(swindow))
|
|
2579
|
+
|
|
2580
|
+
compare_frames(df, dfs, compare_schema=False)
|
|
2581
|
+
|
|
2582
|
+
|
|
2583
|
+
# https://github.com/eakmanrq/sqlframe/issues/317
|
|
2584
|
+
def test_rows_between_negative_end(
|
|
2585
|
+
pyspark_employee: PySparkDataFrame,
|
|
2586
|
+
get_df: t.Callable[[str], BaseDataFrame],
|
|
2587
|
+
compare_frames: t.Callable,
|
|
2588
|
+
):
|
|
2589
|
+
session = pyspark_employee.sparkSession
|
|
2590
|
+
df = session.createDataFrame(
|
|
2591
|
+
pd.DataFrame(
|
|
2592
|
+
{"store": [1, 1, 1, 2, 2, 2, 2], "price": [1, 2, 3, 4, 3, 2, 1], "date": list(range(7))}
|
|
2593
|
+
)
|
|
2594
|
+
)
|
|
2595
|
+
window = Window().partitionBy("store").orderBy("date").rowsBetween(-2, -1)
|
|
2596
|
+
df = df.withColumn("rolling_price", F.mean("price").over(window))
|
|
2597
|
+
|
|
2598
|
+
employee = get_df("employee")
|
|
2599
|
+
sf_session = employee.session
|
|
2600
|
+
dfs = sf_session.createDataFrame(
|
|
2601
|
+
pd.DataFrame(
|
|
2602
|
+
{"store": [1, 1, 1, 2, 2, 2, 2], "price": [1, 2, 3, 4, 3, 2, 1], "date": list(range(7))}
|
|
2603
|
+
)
|
|
2604
|
+
)
|
|
2605
|
+
swindow = SWindow().partitionBy("store").orderBy("date").rowsBetween(-2, -1)
|
|
2606
|
+
dfs = dfs.withColumn("rolling_price", SF.mean("price").over(swindow))
|
|
2607
|
+
|
|
2608
|
+
compare_frames(df, dfs, compare_schema=False)
|
|
2609
|
+
|
|
2610
|
+
|
|
2611
|
+
# https://github.com/eakmanrq/sqlframe/issues/317
|
|
2612
|
+
def test_rows_between_positive_both_start_end(
|
|
2613
|
+
pyspark_employee: PySparkDataFrame,
|
|
2614
|
+
get_df: t.Callable[[str], BaseDataFrame],
|
|
2615
|
+
compare_frames: t.Callable,
|
|
2616
|
+
):
|
|
2617
|
+
session = pyspark_employee.sparkSession
|
|
2618
|
+
df = session.createDataFrame(
|
|
2619
|
+
pd.DataFrame(
|
|
2620
|
+
{"store": [1, 1, 1, 2, 2, 2, 2], "price": [1, 2, 3, 4, 3, 2, 1], "date": list(range(7))}
|
|
2621
|
+
)
|
|
2622
|
+
)
|
|
2623
|
+
window = Window().partitionBy("store").orderBy("date").rowsBetween(1, 2)
|
|
2624
|
+
df = df.withColumn("rolling_price", F.mean("price").over(window))
|
|
2625
|
+
|
|
2626
|
+
employee = get_df("employee")
|
|
2627
|
+
sf_session = employee.session
|
|
2628
|
+
dfs = sf_session.createDataFrame(
|
|
2629
|
+
pd.DataFrame(
|
|
2630
|
+
{"store": [1, 1, 1, 2, 2, 2, 2], "price": [1, 2, 3, 4, 3, 2, 1], "date": list(range(7))}
|
|
2631
|
+
)
|
|
2632
|
+
)
|
|
2633
|
+
swindow = SWindow().partitionBy("store").orderBy("date").rowsBetween(1, 2)
|
|
2634
|
+
dfs = dfs.withColumn("rolling_price", SF.mean("price").over(swindow))
|
|
2635
|
+
|
|
2636
|
+
compare_frames(df, dfs, compare_schema=False)
|
|
@@ -207,7 +207,9 @@ def test_over():
|
|
|
207
207
|
assert (
|
|
208
208
|
(
|
|
209
209
|
F.sum("cola").over(
|
|
210
|
-
Window.partitionBy("colb")
|
|
210
|
+
Window.partitionBy("colb")
|
|
211
|
+
.orderBy("colc")
|
|
212
|
+
.rowsBetween(-1, Window.unboundedFollowing)
|
|
211
213
|
)
|
|
212
214
|
).sql()
|
|
213
215
|
== "SUM(cola) OVER (PARTITION BY colb ORDER BY colc ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)"
|
|
@@ -217,7 +219,7 @@ def test_over():
|
|
|
217
219
|
F.sum("cola").over(
|
|
218
220
|
Window.partitionBy("colb")
|
|
219
221
|
.orderBy("colc")
|
|
220
|
-
.rangeBetween(1, Window.unboundedFollowing)
|
|
222
|
+
.rangeBetween(-1, Window.unboundedFollowing)
|
|
221
223
|
)
|
|
222
224
|
).sql()
|
|
223
225
|
== "SUM(cola) OVER (PARTITION BY colb ORDER BY colc RANGE BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING)"
|
|
@@ -1070,10 +1070,13 @@ def test_expr():
|
|
|
1070
1070
|
@pytest.mark.parametrize(
|
|
1071
1071
|
"expression, expected",
|
|
1072
1072
|
[
|
|
1073
|
-
(SF.struct("cola", "colb", "colc"), "STRUCT(cola, colb, colc)"),
|
|
1074
|
-
(
|
|
1075
|
-
|
|
1076
|
-
|
|
1073
|
+
(SF.struct("cola", "colb", "colc"), "STRUCT(cola AS cola, colb AS colb, colc AS colc)"),
|
|
1074
|
+
(
|
|
1075
|
+
SF.struct(SF.col("cola"), SF.col("colb"), SF.col("colc")),
|
|
1076
|
+
"STRUCT(cola AS cola, colb AS colb, colc AS colc)",
|
|
1077
|
+
),
|
|
1078
|
+
(SF.struct("cola"), "STRUCT(cola AS cola)"),
|
|
1079
|
+
(SF.struct(["cola", "colb", "colc"]), "STRUCT(cola AS cola, colb AS colb, colc AS colc)"),
|
|
1077
1080
|
],
|
|
1078
1081
|
)
|
|
1079
1082
|
def test_struct(expression, expected):
|
|
@@ -11,29 +11,41 @@ from sqlframe.standalone.window import Window, WindowSpec
|
|
|
11
11
|
(Window.partitionBy(F.col("cola"), F.col("colb")), "OVER (PARTITION BY cola, colb)"),
|
|
12
12
|
(WindowSpec().orderBy("cola", "colb"), "OVER (ORDER BY cola, colb)"),
|
|
13
13
|
(Window.orderBy("cola", "colb"), "OVER (ORDER BY cola, colb)"),
|
|
14
|
-
(WindowSpec().rowsBetween(3, 5), "OVER (ROWS BETWEEN 3
|
|
15
|
-
(Window.rowsBetween(3, 5), "OVER (ROWS BETWEEN 3
|
|
16
|
-
(WindowSpec().rangeBetween(3, 5), "OVER (RANGE BETWEEN 3
|
|
17
|
-
(Window.rangeBetween(3, 5), "OVER (RANGE BETWEEN 3
|
|
14
|
+
(WindowSpec().rowsBetween(3, 5), "OVER (ROWS BETWEEN 3 FOLLOWING AND 5 FOLLOWING)"),
|
|
15
|
+
(Window.rowsBetween(3, 5), "OVER (ROWS BETWEEN 3 FOLLOWING AND 5 FOLLOWING)"),
|
|
16
|
+
(WindowSpec().rangeBetween(3, 5), "OVER (RANGE BETWEEN 3 FOLLOWING AND 5 FOLLOWING)"),
|
|
17
|
+
(Window.rangeBetween(3, 5), "OVER (RANGE BETWEEN 3 FOLLOWING AND 5 FOLLOWING)"),
|
|
18
18
|
(
|
|
19
19
|
Window.rowsBetween(Window.unboundedPreceding, 2),
|
|
20
20
|
"OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING)",
|
|
21
21
|
),
|
|
22
22
|
(
|
|
23
23
|
Window.rowsBetween(1, Window.unboundedFollowing),
|
|
24
|
-
"OVER (ROWS BETWEEN 1
|
|
24
|
+
"OVER (ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)",
|
|
25
25
|
),
|
|
26
26
|
(
|
|
27
27
|
Window.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing),
|
|
28
28
|
"OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)",
|
|
29
29
|
),
|
|
30
|
+
(
|
|
31
|
+
Window.rowsBetween(-1, Window.currentRow),
|
|
32
|
+
"OVER (ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)",
|
|
33
|
+
),
|
|
34
|
+
(
|
|
35
|
+
Window.rowsBetween(-1, 2),
|
|
36
|
+
"OVER (ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING)",
|
|
37
|
+
),
|
|
38
|
+
(
|
|
39
|
+
Window.rowsBetween(-2, -1),
|
|
40
|
+
"OVER (ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING)",
|
|
41
|
+
),
|
|
30
42
|
(
|
|
31
43
|
Window.rangeBetween(Window.unboundedPreceding, 2),
|
|
32
44
|
"OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING)",
|
|
33
45
|
),
|
|
34
46
|
(
|
|
35
47
|
Window.rangeBetween(1, Window.unboundedFollowing),
|
|
36
|
-
"OVER (RANGE BETWEEN 1
|
|
48
|
+
"OVER (RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)",
|
|
37
49
|
),
|
|
38
50
|
(
|
|
39
51
|
Window.rangeBetween(Window.unboundedPreceding, Window.unboundedFollowing),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif
RENAMED
|
File without changes
|
|
File without changes
|
{sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png
RENAMED
|
File without changes
|
{sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png
RENAMED
|
File without changes
|
{sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png
RENAMED
|
File without changes
|
{sqlframe-3.22.0 → sqlframe-3.23.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif
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
|