sqlframe 3.4.0__tar.gz → 3.5.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.4.0 → sqlframe-3.5.0}/PKG-INFO +1 -1
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/duckdb.md +1 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/snowflake.md +1 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/setup.py +5 -5
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/_version.py +2 -2
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/column.py +4 -1
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/dataframe.py +33 -9
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/function_alternatives.py +2 -2
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/functions.py +6 -4
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/functions.pyi +1 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/functions.pyi +1 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe.egg-info/requires.txt +5 -5
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_engine_column.py +18 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/test_int_dataframe.py +67 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/.github/CODEOWNERS +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/.github/workflows/main.workflow.yaml +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/.github/workflows/publish.workflow.yaml +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/.gitignore +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/.pre-commit-config.yaml +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/.readthedocs.yaml +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/LICENSE +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/Makefile +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/README.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/cake.gif +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/bigquery.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/configuration.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/bigquery.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/duckdb.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/images/SF.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/images/favicon.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/images/favicon_old.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/docs/postgres.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/images/SF.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/images/favicon.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/images/favicon_old.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/images/sqlframe_diagram.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/index.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/postgres.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/requirements.txt +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/spark.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/standalone.md +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/docs/stylesheets/extra.css +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/mkdocs.yml +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/pytest.ini +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/renovate.json +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/setup.cfg +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/LICENSE +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/_typing.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/decorators.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/normalize.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/operations.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/transforms.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/util.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/base/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/postgres/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/redshift/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/spark/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/group.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/standalone/window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe/testing/utils.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/common_fixtures.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/conftest.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee.csv +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee.json +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_int_functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/fixtures.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/integration/test_int_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/conftest.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_column.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_functions.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_types.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/test_activate.py +0 -0
- {sqlframe-3.4.0 → sqlframe-3.5.0}/tests/unit/test_util.py +0 -0
|
@@ -443,6 +443,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
|
443
443
|
* [sort_array](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sort_array.html)
|
|
444
444
|
* [soundex](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.soundex.html)
|
|
445
445
|
* [split](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split.html)
|
|
446
|
+
* [split_part](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split_part.html)
|
|
446
447
|
* [sqrt](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sqrt.html)
|
|
447
448
|
* [stddev](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.stddev.html)
|
|
448
449
|
* [stddev_pop](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.stddev_pop.html)
|
|
@@ -484,6 +484,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
|
484
484
|
* [soundex](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.soundex.html)
|
|
485
485
|
* [split](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split.html)
|
|
486
486
|
* Regular expressions not supported
|
|
487
|
+
* [split_part](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split_part.html)
|
|
487
488
|
* [sqrt](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sqrt.html)
|
|
488
489
|
* [stddev](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.stddev.html)
|
|
489
490
|
* [stddev_pop](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.stddev_pop.html)
|
|
@@ -20,7 +20,7 @@ setup(
|
|
|
20
20
|
python_requires=">=3.8",
|
|
21
21
|
install_requires=[
|
|
22
22
|
"prettytable<3.11.1",
|
|
23
|
-
"sqlglot>=24.0.0,<25.
|
|
23
|
+
"sqlglot>=24.0.0,<25.26",
|
|
24
24
|
"typing_extensions>=4.8,<5",
|
|
25
25
|
],
|
|
26
26
|
extras_require={
|
|
@@ -31,8 +31,8 @@ setup(
|
|
|
31
31
|
"dev": [
|
|
32
32
|
"duckdb>=0.9,<1.2",
|
|
33
33
|
"findspark>=2,<3",
|
|
34
|
-
"mypy>=1.10.0,<1.
|
|
35
|
-
"openai>=1.30,<1.
|
|
34
|
+
"mypy>=1.10.0,<1.13",
|
|
35
|
+
"openai>=1.30,<1.53",
|
|
36
36
|
"pandas>=2,<3",
|
|
37
37
|
"pandas-stubs>=2,<3",
|
|
38
38
|
"psycopg>=3.1,<4",
|
|
@@ -43,7 +43,7 @@ setup(
|
|
|
43
43
|
"pytest-xdist>=3.6,<3.7",
|
|
44
44
|
"pre-commit>=3.5;python_version=='3.8'",
|
|
45
45
|
"pre-commit>=3.7,<4.1;python_version>='3.9'",
|
|
46
|
-
"ruff>=0.4.4,<0.
|
|
46
|
+
"ruff>=0.4.4,<0.8",
|
|
47
47
|
"types-psycopg2>=2.9,<3",
|
|
48
48
|
],
|
|
49
49
|
"docs": [
|
|
@@ -58,7 +58,7 @@ setup(
|
|
|
58
58
|
"pandas>=2,<3",
|
|
59
59
|
],
|
|
60
60
|
"openai": [
|
|
61
|
-
"openai>=1.30,<1.
|
|
61
|
+
"openai>=1.30,<1.53",
|
|
62
62
|
],
|
|
63
63
|
"pandas": [
|
|
64
64
|
"pandas>=2,<3",
|
|
@@ -338,6 +338,9 @@ class Column:
|
|
|
338
338
|
new_expression = exp.Not(this=exp.Is(this=self.column_expression, expression=exp.Null()))
|
|
339
339
|
return Column(new_expression)
|
|
340
340
|
|
|
341
|
+
def eqNullSafe(self, other: ColumnOrLiteral) -> Column:
|
|
342
|
+
return self.binary_op(exp.NullSafeEQ, other)
|
|
343
|
+
|
|
341
344
|
def cast(
|
|
342
345
|
self,
|
|
343
346
|
dataType: t.Union[str, DataType, exp.DataType, exp.DataType.Type],
|
|
@@ -385,7 +388,7 @@ class Column:
|
|
|
385
388
|
|
|
386
389
|
def isin(self, *cols: t.Union[ColumnOrLiteral, t.Iterable[ColumnOrLiteral]]):
|
|
387
390
|
columns = flatten(cols) if isinstance(cols[0], (list, set, tuple)) else cols # type: ignore
|
|
388
|
-
expressions = [self._lit(x).expression for x in columns]
|
|
391
|
+
expressions = [self._lit(x).expression for x in columns] # type: ignore
|
|
389
392
|
return Column.invoke_expression_over_column(self, exp.In, expressions=expressions) # type: ignore
|
|
390
393
|
|
|
391
394
|
def between(
|
|
@@ -15,7 +15,7 @@ from dataclasses import dataclass
|
|
|
15
15
|
|
|
16
16
|
import sqlglot
|
|
17
17
|
from prettytable import PrettyTable
|
|
18
|
-
from sqlglot import Dialect
|
|
18
|
+
from sqlglot import Dialect, maybe_parse
|
|
19
19
|
from sqlglot import expressions as exp
|
|
20
20
|
from sqlglot import lineage as sqlglot_lineage
|
|
21
21
|
from sqlglot.helper import ensure_list, flatten, object_to_dict, seq_get
|
|
@@ -460,16 +460,40 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
460
460
|
df.expression.ctes[-1].set("cache_storage_level", storage_level)
|
|
461
461
|
return df
|
|
462
462
|
|
|
463
|
-
|
|
464
|
-
def _add_ctes_to_expression(cls, expression: exp.Select, ctes: t.List[exp.CTE]) -> exp.Select:
|
|
463
|
+
def _add_ctes_to_expression(self, expression: exp.Select, ctes: t.List[exp.CTE]) -> exp.Select:
|
|
465
464
|
expression = expression.copy()
|
|
466
465
|
with_expression = expression.args.get("with")
|
|
467
466
|
if with_expression:
|
|
468
467
|
existing_ctes = with_expression.expressions
|
|
469
|
-
|
|
468
|
+
existing_cte_counts = {x.alias_or_name: 0 for x in existing_ctes}
|
|
469
|
+
replaced_cte_names = {} # type: ignore
|
|
470
470
|
for cte in ctes:
|
|
471
|
-
if
|
|
472
|
-
|
|
471
|
+
if replaced_cte_names:
|
|
472
|
+
cte = cte.transform(replace_id_value, replaced_cte_names) # type: ignore
|
|
473
|
+
if cte.alias_or_name in existing_cte_counts:
|
|
474
|
+
existing_cte_counts[cte.alias_or_name] += 10
|
|
475
|
+
cte.set(
|
|
476
|
+
"this",
|
|
477
|
+
cte.this.where(
|
|
478
|
+
exp.EQ(
|
|
479
|
+
this=exp.Literal.number(existing_cte_counts[cte.alias_or_name]),
|
|
480
|
+
expression=exp.Literal.number(
|
|
481
|
+
existing_cte_counts[cte.alias_or_name]
|
|
482
|
+
),
|
|
483
|
+
)
|
|
484
|
+
),
|
|
485
|
+
)
|
|
486
|
+
new_cte_alias = self._create_hash_from_expression(cte.this)
|
|
487
|
+
replaced_cte_names[cte.args["alias"].this] = maybe_parse(
|
|
488
|
+
new_cte_alias, dialect=self.session.input_dialect, into=exp.Identifier
|
|
489
|
+
)
|
|
490
|
+
cte.set(
|
|
491
|
+
"alias",
|
|
492
|
+
maybe_parse(
|
|
493
|
+
new_cte_alias, dialect=self.session.input_dialect, into=exp.TableAlias
|
|
494
|
+
),
|
|
495
|
+
)
|
|
496
|
+
existing_ctes.append(cte)
|
|
473
497
|
else:
|
|
474
498
|
existing_ctes = ctes
|
|
475
499
|
expression.set("with", exp.With(expressions=existing_ctes))
|
|
@@ -843,11 +867,11 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
843
867
|
logger.warning("Got no value for on. This appears to change the join to a cross join.")
|
|
844
868
|
how = "cross"
|
|
845
869
|
other_df = other_df._convert_leaf_to_cte()
|
|
870
|
+
join_expression = self._add_ctes_to_expression(self.expression, other_df.expression.ctes)
|
|
846
871
|
# We will determine actual "join on" expression later so we don't provide it at first
|
|
847
|
-
join_expression =
|
|
848
|
-
|
|
872
|
+
join_expression = join_expression.join(
|
|
873
|
+
join_expression.ctes[-1].alias, join_type=how.replace("_", " ")
|
|
849
874
|
)
|
|
850
|
-
join_expression = self._add_ctes_to_expression(join_expression, other_df.expression.ctes)
|
|
851
875
|
self_columns = self._get_outer_select_columns(join_expression)
|
|
852
876
|
other_columns = self._get_outer_select_columns(other_df.expression)
|
|
853
877
|
join_columns = self._ensure_and_normalize_cols(on)
|
|
@@ -1320,8 +1320,8 @@ def flatten_using_array_flatten(col: ColumnOrName) -> Column:
|
|
|
1320
1320
|
def map_concat_using_map_cat(*cols: t.Union[ColumnOrName, t.Iterable[ColumnOrName]]) -> Column:
|
|
1321
1321
|
columns = list(flatten(cols)) if not isinstance(cols[0], (str, Column)) else cols # type: ignore
|
|
1322
1322
|
if len(columns) == 1:
|
|
1323
|
-
return Column.invoke_anonymous_function(columns[0], "MAP_CAT")
|
|
1324
|
-
return Column.invoke_anonymous_function(columns[0], "MAP_CAT", *columns[1:])
|
|
1323
|
+
return Column.invoke_anonymous_function(columns[0], "MAP_CAT") # type: ignore
|
|
1324
|
+
return Column.invoke_anonymous_function(columns[0], "MAP_CAT", *columns[1:]) # type: ignore
|
|
1325
1325
|
|
|
1326
1326
|
|
|
1327
1327
|
def sequence_from_generate_series(
|
|
@@ -1652,8 +1652,8 @@ def arrays_zip(*cols: ColumnOrName) -> Column:
|
|
|
1652
1652
|
def map_concat(*cols: t.Union[ColumnOrName, t.Iterable[ColumnOrName]]) -> Column:
|
|
1653
1653
|
columns = list(flatten(cols)) if not isinstance(cols[0], (str, Column)) else cols # type: ignore
|
|
1654
1654
|
if len(columns) == 1:
|
|
1655
|
-
return Column.invoke_anonymous_function(columns[0], "MAP_CONCAT")
|
|
1656
|
-
return Column.invoke_anonymous_function(columns[0], "MAP_CONCAT", *columns[1:])
|
|
1655
|
+
return Column.invoke_anonymous_function(columns[0], "MAP_CONCAT") # type: ignore
|
|
1656
|
+
return Column.invoke_anonymous_function(columns[0], "MAP_CONCAT", *columns[1:]) # type: ignore
|
|
1657
1657
|
|
|
1658
1658
|
|
|
1659
1659
|
@meta(unsupported_engines="postgres")
|
|
@@ -4697,7 +4697,7 @@ def spark_partition_id() -> Column:
|
|
|
4697
4697
|
return Column.invoke_anonymous_function(None, "spark_partition_id")
|
|
4698
4698
|
|
|
4699
4699
|
|
|
4700
|
-
@meta(unsupported_engines="
|
|
4700
|
+
@meta(unsupported_engines=["bigquery", "postgres"])
|
|
4701
4701
|
def split_part(src: ColumnOrName, delimiter: ColumnOrName, partNum: ColumnOrName) -> Column:
|
|
4702
4702
|
"""
|
|
4703
4703
|
Splits `str` by delimiter and return requested part of the split (1-based).
|
|
@@ -4723,7 +4723,9 @@ def split_part(src: ColumnOrName, delimiter: ColumnOrName, partNum: ColumnOrName
|
|
|
4723
4723
|
>>> df.select(split_part(df.a, df.b, df.c).alias('r')).collect()
|
|
4724
4724
|
[Row(r='13')]
|
|
4725
4725
|
"""
|
|
4726
|
-
return Column.
|
|
4726
|
+
return Column.invoke_expression_over_column(
|
|
4727
|
+
src, expression.SplitPart, delimiter=delimiter, part_index=partNum
|
|
4728
|
+
)
|
|
4727
4729
|
|
|
4728
4730
|
|
|
4729
4731
|
@meta()
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
prettytable<3.11.1
|
|
2
|
-
sqlglot<25.
|
|
2
|
+
sqlglot<25.26,>=24.0.0
|
|
3
3
|
typing_extensions<5,>=4.8
|
|
4
4
|
|
|
5
5
|
[bigquery]
|
|
@@ -9,8 +9,8 @@ google-cloud-bigquery[pandas]<4,>=3
|
|
|
9
9
|
[dev]
|
|
10
10
|
duckdb<1.2,>=0.9
|
|
11
11
|
findspark<3,>=2
|
|
12
|
-
mypy<1.
|
|
13
|
-
openai<1.
|
|
12
|
+
mypy<1.13,>=1.10.0
|
|
13
|
+
openai<1.53,>=1.30
|
|
14
14
|
pandas-stubs<3,>=2
|
|
15
15
|
pandas<3,>=2
|
|
16
16
|
psycopg<4,>=3.1
|
|
@@ -19,7 +19,7 @@ pyspark<3.6,>=2
|
|
|
19
19
|
pytest-postgresql<7,>=6
|
|
20
20
|
pytest-xdist<3.7,>=3.6
|
|
21
21
|
pytest<8.4,>=8.2.0
|
|
22
|
-
ruff<0.
|
|
22
|
+
ruff<0.8,>=0.4.4
|
|
23
23
|
types-psycopg2<3,>=2.9
|
|
24
24
|
|
|
25
25
|
[dev:python_version == "3.8"]
|
|
@@ -40,7 +40,7 @@ duckdb<1.2,>=0.9
|
|
|
40
40
|
pandas<3,>=2
|
|
41
41
|
|
|
42
42
|
[openai]
|
|
43
|
-
openai<1.
|
|
43
|
+
openai<1.53,>=1.30
|
|
44
44
|
|
|
45
45
|
[pandas]
|
|
46
46
|
pandas<3,>=2
|
|
@@ -5,6 +5,7 @@ import typing as t
|
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
7
7
|
from sqlframe.base import types
|
|
8
|
+
from sqlframe.base.types import Row
|
|
8
9
|
from sqlframe.bigquery import BigQuerySession
|
|
9
10
|
from sqlframe.postgres import PostgresSession
|
|
10
11
|
|
|
@@ -14,6 +15,23 @@ if t.TYPE_CHECKING:
|
|
|
14
15
|
pytest_plugins = ["tests.integration.fixtures"]
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
def test_columnt_eq_null_safe(get_session: t.Callable[[], _BaseSession], get_func):
|
|
19
|
+
session = get_session()
|
|
20
|
+
df1 = session.createDataFrame([Row(id=1, value="foo"), Row(id=2, value=None)])
|
|
21
|
+
lit = get_func("lit", session)
|
|
22
|
+
values = df1.select(
|
|
23
|
+
df1["value"] == "foo",
|
|
24
|
+
df1["value"].eqNullSafe("foo"),
|
|
25
|
+
df1["value"].eqNullSafe(None),
|
|
26
|
+
df1["id"].eqNullSafe(1),
|
|
27
|
+
df1["id"] == lit(None),
|
|
28
|
+
df1["id"].eqNullSafe(None),
|
|
29
|
+
).collect()
|
|
30
|
+
|
|
31
|
+
assert values[0] == (True, True, False, True, None, False)
|
|
32
|
+
assert values[1] == (None, False, True, False, None, False)
|
|
33
|
+
|
|
34
|
+
|
|
17
35
|
def test_column_get_item_array(get_session: t.Callable[[], _BaseSession], get_func):
|
|
18
36
|
session = get_session()
|
|
19
37
|
lit = get_func("lit", session)
|
|
@@ -231,6 +231,17 @@ def test_where_clause_single(
|
|
|
231
231
|
compare_frames(df_employee, dfs_employee)
|
|
232
232
|
|
|
233
233
|
|
|
234
|
+
def test_where_clause_eq_nullsafe(
|
|
235
|
+
pyspark_employee: PySparkDataFrame,
|
|
236
|
+
get_df: t.Callable[[str], _BaseDataFrame],
|
|
237
|
+
compare_frames: t.Callable,
|
|
238
|
+
):
|
|
239
|
+
employee = get_df("employee")
|
|
240
|
+
df_employee = pyspark_employee.where(F.col("age").eqNullSafe(F.lit(37)))
|
|
241
|
+
dfs_employee = employee.where(SF.col("age") == SF.lit(37))
|
|
242
|
+
compare_frames(df_employee, dfs_employee)
|
|
243
|
+
|
|
244
|
+
|
|
234
245
|
def test_where_clause_multiple_and(
|
|
235
246
|
pyspark_employee: PySparkDataFrame,
|
|
236
247
|
get_df: t.Callable[[str], _BaseDataFrame],
|
|
@@ -2180,3 +2191,59 @@ def test_chained_join_common_key(
|
|
|
2180
2191
|
dfs = dfs.join(dfs_height, how="left", on="name").join(dfs_location, how="left", on="name")
|
|
2181
2192
|
|
|
2182
2193
|
compare_frames(df, dfs, compare_schema=False)
|
|
2194
|
+
|
|
2195
|
+
|
|
2196
|
+
# https://github.com/eakmanrq/sqlframe/issues/185
|
|
2197
|
+
def test_chaining_joins_with_selects(
|
|
2198
|
+
pyspark_employee: PySparkDataFrame,
|
|
2199
|
+
pyspark_store: PySparkDataFrame,
|
|
2200
|
+
pyspark_district: PySparkDataFrame,
|
|
2201
|
+
get_df: t.Callable[[str], _BaseDataFrame],
|
|
2202
|
+
compare_frames: t.Callable,
|
|
2203
|
+
is_spark: t.Callable,
|
|
2204
|
+
):
|
|
2205
|
+
if is_spark():
|
|
2206
|
+
pytest.skip(
|
|
2207
|
+
"This test is not supported in Spark. This is related to how duplicate columns are handled in Spark"
|
|
2208
|
+
)
|
|
2209
|
+
df = (
|
|
2210
|
+
pyspark_employee.alias("employee")
|
|
2211
|
+
.join(
|
|
2212
|
+
pyspark_store.filter(F.col("store_name") != "test").alias("store"),
|
|
2213
|
+
on=F.col("employee.employee_id") == F.col("store.store_id"),
|
|
2214
|
+
)
|
|
2215
|
+
.join(
|
|
2216
|
+
pyspark_district.alias("district"),
|
|
2217
|
+
on=F.col("store.store_id") == F.col("district.district_id"),
|
|
2218
|
+
)
|
|
2219
|
+
.join(
|
|
2220
|
+
pyspark_district.alias("district2"),
|
|
2221
|
+
on=(F.col("store.store_id") + 1) == F.col("district2.district_id"),
|
|
2222
|
+
how="left",
|
|
2223
|
+
)
|
|
2224
|
+
.select("*")
|
|
2225
|
+
)
|
|
2226
|
+
|
|
2227
|
+
employee = get_df("employee")
|
|
2228
|
+
store = get_df("store")
|
|
2229
|
+
district = get_df("district")
|
|
2230
|
+
|
|
2231
|
+
dfs = (
|
|
2232
|
+
employee.alias("employee")
|
|
2233
|
+
.join(
|
|
2234
|
+
store.filter(SF.col("store_name") != "test").alias("store"),
|
|
2235
|
+
on=SF.col("employee.employee_id") == SF.col("store.store_id"),
|
|
2236
|
+
)
|
|
2237
|
+
.join(
|
|
2238
|
+
district.alias("district"),
|
|
2239
|
+
on=SF.col("store.store_id") == SF.col("district.district_id"),
|
|
2240
|
+
)
|
|
2241
|
+
.join(
|
|
2242
|
+
district.alias("district2"),
|
|
2243
|
+
on=(SF.col("store.store_id") + 1) == SF.col("district2.district_id"),
|
|
2244
|
+
how="left",
|
|
2245
|
+
)
|
|
2246
|
+
.select("*")
|
|
2247
|
+
)
|
|
2248
|
+
|
|
2249
|
+
compare_frames(df, dfs, compare_schema=False)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png
RENAMED
|
File without changes
|
{sqlframe-3.4.0 → sqlframe-3.5.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|