sqlframe 3.36.2__tar.gz → 3.37.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.36.2 → sqlframe-3.37.0}/Makefile +1 -1
- {sqlframe-3.36.2 → sqlframe-3.37.0}/PKG-INFO +1 -1
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/bigquery.md +7 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/duckdb.md +5 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/postgres.md +5 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/snowflake.md +5 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/setup.py +4 -3
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/_version.py +2 -2
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/functions.py +36 -10
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/types.py +1 -1
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe.egg-info/requires.txt +4 -3
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_int_functions.py +72 -16
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_functions.py +26 -8
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_types.py +2 -2
- {sqlframe-3.36.2 → sqlframe-3.37.0}/.github/CODEOWNERS +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/.github/workflows/main.workflow.yaml +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/.github/workflows/publish.workflow.yaml +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/.gitignore +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/.pre-commit-config.yaml +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/.readthedocs.yaml +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/LICENSE +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/README.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/cake.gif +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/configuration.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/databricks.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/docs/bigquery.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/docs/duckdb.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/docs/images/SF.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/docs/images/favicon.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/docs/postgres.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/images/SF.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/images/favicon.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/index.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/redshift.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/requirements.txt +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/spark.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/standalone.md +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/docs/stylesheets/extra.css +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/mkdocs.yml +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/pytest.ini +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/renovate.json +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/setup.cfg +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/LICENSE +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/_typing.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/decorators.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/mixins/table_mixins.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/normalize.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/operations.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/transforms.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/util.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/base/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/functions.pyi +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/databricks/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/postgres/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/py.typed +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/redshift/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/spark/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/group.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/standalone/window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe/testing/utils.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/common_fixtures.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/conftest.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee.csv +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee.json +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/issue_219.csv +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/databricks/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_engine_column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_engine_table.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/fixtures.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/test_int_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/integration/test_int_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/types.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/conftest.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/databricks/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/databricks/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/duck/test_reader_options.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/spark/test_reader_options.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_column.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/test_activate.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/test_base_reader_options.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/test_catalog.py +0 -0
- {sqlframe-3.36.2 → sqlframe-3.37.0}/tests/unit/test_util.py +0 -0
@@ -332,8 +332,12 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
332
332
|
* [avg](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.avg.html)
|
333
333
|
* [base64](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.base64.html)
|
334
334
|
* [bin](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bin.html)
|
335
|
+
* [bit_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_and.html)
|
336
|
+
* [bit_count](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_count.html)
|
335
337
|
* [bit_length](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_length.html)
|
336
338
|
* Symbols are not supported
|
339
|
+
* [bit_or](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_or.html)
|
340
|
+
* [bit_xor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_xor.html)
|
337
341
|
* [bitwiseNOT](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwiseNOT.html)
|
338
342
|
* [bitwise_not](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwise_not.html)
|
339
343
|
* [bool_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bool_and.html)
|
@@ -416,6 +420,8 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
416
420
|
* [isnull](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.isnull.html)
|
417
421
|
* [lag](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lag.html)
|
418
422
|
* [last_day](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_day.html)
|
423
|
+
* [last_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_value.html)
|
424
|
+
* Must be used with a window function
|
419
425
|
* [lcase](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lcase.html)
|
420
426
|
* [lead](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lead.html)
|
421
427
|
* [least](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.least.html)
|
@@ -507,6 +513,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
507
513
|
* [sum_distinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sum_distinct.html)
|
508
514
|
* [tan](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tan.html)
|
509
515
|
* [tanh](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tanh.html)
|
516
|
+
* [timestamp_add](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_add.html)
|
510
517
|
* [timestamp_seconds](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_seconds.html)
|
511
518
|
* [toDegrees](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toDegrees.html)
|
512
519
|
* [toRadians](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toRadians.html)
|
@@ -295,7 +295,11 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
295
295
|
* [avg](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.avg.html)
|
296
296
|
* [base64](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.base64.html)
|
297
297
|
* [bin](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bin.html)
|
298
|
+
* [bit_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_and.html)
|
299
|
+
* [bit_count](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_count.html)
|
298
300
|
* [bit_length](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_length.html)
|
301
|
+
* [bit_or](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_or.html)
|
302
|
+
* [bit_xor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_xor.html)
|
299
303
|
* [bitwiseNOT](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwiseNOT.html)
|
300
304
|
* [bitwise_not](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwise_not.html)
|
301
305
|
* [bool_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bool_and.html)
|
@@ -468,6 +472,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
468
472
|
* [sumDistinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sumDistinct.html)
|
469
473
|
* [sum_distinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sum_distinct.html)
|
470
474
|
* [tan](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tan.html)
|
475
|
+
* [timestamp_add](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_add.html)
|
471
476
|
* [timestamp_seconds](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_seconds.html)
|
472
477
|
* [toDegrees](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toDegrees.html)
|
473
478
|
* [toRadians](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toRadians.html)
|
@@ -304,7 +304,10 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
304
304
|
* [atanh](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.atanh.html)
|
305
305
|
* [avg](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.avg.html)
|
306
306
|
* [base64](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.base64.html)
|
307
|
+
* [bit_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_and.html)
|
307
308
|
* [bit_length](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_length.html)
|
309
|
+
* [bit_or](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_or.html)
|
310
|
+
* [bit_xor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bit_xor.html)
|
308
311
|
* [bitwiseNOT](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwiseNOT.html)
|
309
312
|
* [bitwise_not](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bitwise_not.html)
|
310
313
|
* [bool_and](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.bool_and.html)
|
@@ -455,6 +458,8 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
455
458
|
* [sum_distinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sum_distinct.html)
|
456
459
|
* [tan](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tan.html)
|
457
460
|
* [tanh](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tanh.html)
|
461
|
+
* [timestamp_add](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_add.html)
|
462
|
+
* The quantity argument must be literal, not a column
|
458
463
|
* [timestamp_seconds](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_seconds.html)
|
459
464
|
* [toDegrees](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toDegrees.html)
|
460
465
|
* [toRadians](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toRadians.html)
|
@@ -394,6 +394,8 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
394
394
|
* [expr](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.expr.html)
|
395
395
|
* [extract](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.extract.html)
|
396
396
|
* [factorial](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.factorial.html)
|
397
|
+
* [first_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.first_value.html)
|
398
|
+
* Must be used with a window function and `ignoreNulls` can behave slightly different in certain situations
|
397
399
|
* [flatten](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.flatten.html)
|
398
400
|
* [floor](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.floor.html)
|
399
401
|
* [format_number](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.format_number.html)
|
@@ -414,6 +416,8 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
414
416
|
* [kurtosis](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.kurtosis.html)
|
415
417
|
* [lag](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lag.html)
|
416
418
|
* [last_day](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_day.html)
|
419
|
+
* [last_value](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.last_value.html)
|
420
|
+
* Must be used with a window function
|
417
421
|
* [lead](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.lead.html)
|
418
422
|
* [least](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.least.html)
|
419
423
|
* [left](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.left.html)
|
@@ -507,6 +511,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
507
511
|
* [sum_distinct](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.sum_distinct.html)
|
508
512
|
* [tan](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tan.html)
|
509
513
|
* [tanh](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.tanh.html)
|
514
|
+
* [timestamp_add](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_add.html)
|
510
515
|
* [timestamp_seconds](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.timestamp_seconds.html)
|
511
516
|
* [toDegrees](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toDegrees.html)
|
512
517
|
* [toRadians](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.toRadians.html)
|
@@ -20,7 +20,7 @@ setup(
|
|
20
20
|
python_requires=">=3.9",
|
21
21
|
install_requires=[
|
22
22
|
"prettytable<4",
|
23
|
-
"sqlglot>=24.0.0,<
|
23
|
+
"sqlglot>=24.0.0,<27.2",
|
24
24
|
"typing_extensions",
|
25
25
|
],
|
26
26
|
extras_require={
|
@@ -31,16 +31,17 @@ setup(
|
|
31
31
|
"dev": [
|
32
32
|
"duckdb>=1.2,<1.4",
|
33
33
|
"findspark>=2,<3",
|
34
|
-
"mypy>=1.10.0,<1.
|
34
|
+
"mypy>=1.10.0,<1.18",
|
35
35
|
"openai>=1.30,<2",
|
36
36
|
"pandas>=2,<3",
|
37
37
|
"pandas-stubs>=2,<3",
|
38
38
|
"psycopg>=3.1,<4",
|
39
|
-
"pyarrow>=10,<
|
39
|
+
"pyarrow>=10,<22",
|
40
40
|
"pyspark>=2,<3.6",
|
41
41
|
"pytest>=8.2.0,<8.5",
|
42
42
|
"pytest-forked",
|
43
43
|
"pytest-postgresql>=6,<8",
|
44
|
+
"pytest-rerunfailures",
|
44
45
|
"pytest-xdist>=3.6,<3.9",
|
45
46
|
"pre-commit>=3.7,<5",
|
46
47
|
"ruff>=0.4.4,<0.13",
|
@@ -1475,6 +1475,32 @@ def timestamp_seconds(col: ColumnOrName) -> Column:
|
|
1475
1475
|
return Column.invoke_expression_over_column(col, expression.UnixToTime)
|
1476
1476
|
|
1477
1477
|
|
1478
|
+
@meta()
|
1479
|
+
def timestamp_add(unit: str, quantity: ColumnOrName, ts: ColumnOrName) -> Column:
|
1480
|
+
session = _get_session()
|
1481
|
+
|
1482
|
+
if session._is_duckdb or session._is_postgres:
|
1483
|
+
quantity = lit(quantity) if isinstance(quantity, int) else quantity
|
1484
|
+
if (
|
1485
|
+
isinstance(quantity, Column)
|
1486
|
+
and isinstance(quantity.expression, expression.Literal)
|
1487
|
+
and quantity.expression.is_number
|
1488
|
+
and int(quantity.expression.this) < 0
|
1489
|
+
):
|
1490
|
+
# If quantity is a negative literal, we use DateSub
|
1491
|
+
expr = expression.DateSub
|
1492
|
+
quantity.expression.set("this", str(-int(quantity.expression.this)))
|
1493
|
+
else:
|
1494
|
+
expr = expression.DateAdd # type: ignore
|
1495
|
+
return Column.invoke_expression_over_column(
|
1496
|
+
ts, expr, expression=quantity, unit=expression.Var(this=unit.upper())
|
1497
|
+
)
|
1498
|
+
|
1499
|
+
return Column.invoke_expression_over_column(
|
1500
|
+
ts, expression.TimestampAdd, expression=quantity, unit=expression.Var(this=unit.upper())
|
1501
|
+
)
|
1502
|
+
|
1503
|
+
|
1478
1504
|
@meta(unsupported_engines=["*", "spark"])
|
1479
1505
|
def window(
|
1480
1506
|
timeColumn: ColumnOrName,
|
@@ -2084,24 +2110,24 @@ def array_size(col: ColumnOrName) -> Column:
|
|
2084
2110
|
return Column.invoke_expression_over_column(col, expression.ArraySize)
|
2085
2111
|
|
2086
2112
|
|
2087
|
-
@meta(unsupported_engines="
|
2113
|
+
@meta(unsupported_engines="snowflake")
|
2088
2114
|
def bit_and(col: ColumnOrName) -> Column:
|
2089
|
-
return Column.
|
2115
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseAndAgg)
|
2090
2116
|
|
2091
2117
|
|
2092
|
-
@meta(unsupported_engines="
|
2118
|
+
@meta(unsupported_engines="snowflake")
|
2093
2119
|
def bit_or(col: ColumnOrName) -> Column:
|
2094
|
-
return Column.
|
2120
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseOrAgg)
|
2095
2121
|
|
2096
2122
|
|
2097
|
-
@meta(unsupported_engines="
|
2123
|
+
@meta(unsupported_engines="snowflake")
|
2098
2124
|
def bit_xor(col: ColumnOrName) -> Column:
|
2099
|
-
return Column.
|
2125
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseXorAgg)
|
2100
2126
|
|
2101
2127
|
|
2102
|
-
@meta(unsupported_engines="
|
2128
|
+
@meta(unsupported_engines=["postgres", "snowflake"])
|
2103
2129
|
def bit_count(col: ColumnOrName) -> Column:
|
2104
|
-
return Column.
|
2130
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseCountAgg)
|
2105
2131
|
|
2106
2132
|
|
2107
2133
|
@meta(unsupported_engines="*")
|
@@ -3267,7 +3293,7 @@ def find_in_set(str: ColumnOrName, str_array: ColumnOrName) -> Column:
|
|
3267
3293
|
return Column.invoke_anonymous_function(str, "find_in_set", str_array)
|
3268
3294
|
|
3269
3295
|
|
3270
|
-
@meta(unsupported_engines=["bigquery", "postgres"
|
3296
|
+
@meta(unsupported_engines=["bigquery", "postgres"])
|
3271
3297
|
def first_value(col: ColumnOrName, ignoreNulls: t.Optional[t.Union[bool, Column]] = None) -> Column:
|
3272
3298
|
"""Returns the first value of `col` for a group of rows. It will return the first non-null
|
3273
3299
|
value it sees when `ignoreNulls` is set to true. If all values are null, then null is returned.
|
@@ -3933,7 +3959,7 @@ def json_object_keys(col: ColumnOrName) -> Column:
|
|
3933
3959
|
return Column.invoke_anonymous_function(col, "json_object_keys")
|
3934
3960
|
|
3935
3961
|
|
3936
|
-
@meta(unsupported_engines=
|
3962
|
+
@meta(unsupported_engines="postgres")
|
3937
3963
|
def last_value(col: ColumnOrName, ignoreNulls: t.Optional[t.Union[bool, Column]] = None) -> Column:
|
3938
3964
|
"""Returns the last value of `col` for a group of rows. It will return the last non-null
|
3939
3965
|
value it sees when `ignoreNulls` is set to true. If all values are null, then null is returned.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
prettytable<4
|
2
|
-
sqlglot<
|
2
|
+
sqlglot<27.2,>=24.0.0
|
3
3
|
typing_extensions
|
4
4
|
|
5
5
|
[bigquery]
|
@@ -12,16 +12,17 @@ databricks-sql-connector[pyarrow]<5,>=3.6
|
|
12
12
|
[dev]
|
13
13
|
duckdb<1.4,>=1.2
|
14
14
|
findspark<3,>=2
|
15
|
-
mypy<1.
|
15
|
+
mypy<1.18,>=1.10.0
|
16
16
|
openai<2,>=1.30
|
17
17
|
pandas-stubs<3,>=2
|
18
18
|
pandas<3,>=2
|
19
19
|
pre-commit<5,>=3.7
|
20
20
|
psycopg<4,>=3.1
|
21
|
-
pyarrow<
|
21
|
+
pyarrow<22,>=10
|
22
22
|
pyspark<3.6,>=2
|
23
23
|
pytest-forked
|
24
24
|
pytest-postgresql<8,>=6
|
25
|
+
pytest-rerunfailures
|
25
26
|
pytest-xdist<3.9,>=3.6
|
26
27
|
pytest<8.5,>=8.2.0
|
27
28
|
ruff<0.13,>=0.4.4
|
@@ -1531,6 +1531,58 @@ def test_timestamp_seconds(get_session_and_func):
|
|
1531
1531
|
)
|
1532
1532
|
|
1533
1533
|
|
1534
|
+
def test_timestamp_add(get_session_and_func, get_func):
|
1535
|
+
session, timestamp_add = get_session_and_func("timestamp_add")
|
1536
|
+
lit = get_func("lit", session)
|
1537
|
+
|
1538
|
+
# Test data from PySpark examples
|
1539
|
+
df = session.createDataFrame(
|
1540
|
+
[(datetime.datetime(2016, 3, 11, 9, 0, 7), 2), (datetime.datetime(2024, 4, 2, 9, 0, 7), 3)],
|
1541
|
+
["ts", "quantity"],
|
1542
|
+
)
|
1543
|
+
|
1544
|
+
# Test adding years
|
1545
|
+
if not session._is_postgres:
|
1546
|
+
result = df.select(timestamp_add("year", "quantity", "ts")).collect()
|
1547
|
+
expected_years = [
|
1548
|
+
datetime.datetime(2018, 3, 11, 9, 0, 7),
|
1549
|
+
datetime.datetime(2027, 4, 2, 9, 0, 7),
|
1550
|
+
]
|
1551
|
+
for i, row in enumerate(result):
|
1552
|
+
actual = row[0].replace(tzinfo=None) if row[0] else None
|
1553
|
+
assert actual == expected_years[i], f"Year addition failed for row {i}"
|
1554
|
+
|
1555
|
+
# Test adding weeks
|
1556
|
+
result = df.select(timestamp_add("WEEK", lit(5), "ts")).collect()
|
1557
|
+
expected_weeks = [
|
1558
|
+
datetime.datetime(2016, 4, 15, 9, 0, 7),
|
1559
|
+
datetime.datetime(2024, 5, 7, 9, 0, 7),
|
1560
|
+
]
|
1561
|
+
for i, row in enumerate(result):
|
1562
|
+
actual = row[0].replace(tzinfo=None) if row[0] else None
|
1563
|
+
assert actual == expected_weeks[i], f"Week addition failed for row {i}"
|
1564
|
+
|
1565
|
+
# Test subtracting days
|
1566
|
+
result = df.select(timestamp_add("day", lit(-5), "ts")).collect()
|
1567
|
+
expected_days = [
|
1568
|
+
datetime.datetime(2016, 3, 6, 9, 0, 7),
|
1569
|
+
datetime.datetime(2024, 3, 28, 9, 0, 7),
|
1570
|
+
]
|
1571
|
+
for i, row in enumerate(result):
|
1572
|
+
actual = row[0].replace(tzinfo=None) if row[0] else None
|
1573
|
+
assert actual == expected_days[i], f"Day subtraction failed for row {i}"
|
1574
|
+
|
1575
|
+
# Test adding quarters
|
1576
|
+
result = df.select(timestamp_add("quarter", lit(2), "ts")).collect()
|
1577
|
+
expected_quarters = [
|
1578
|
+
datetime.datetime(2016, 9, 11, 9, 0, 7),
|
1579
|
+
datetime.datetime(2024, 10, 2, 9, 0, 7),
|
1580
|
+
]
|
1581
|
+
for i, row in enumerate(result):
|
1582
|
+
actual = row[0].replace(tzinfo=None) if row[0] else None
|
1583
|
+
assert actual == expected_quarters[i], f"Quarter addition failed for row {i}"
|
1584
|
+
|
1585
|
+
|
1534
1586
|
def test_window(get_session_and_func, get_func):
|
1535
1587
|
session, window = get_session_and_func("window")
|
1536
1588
|
sum = get_func("sum", session)
|
@@ -3783,14 +3835,15 @@ def test_first_value(get_session_and_func, get_func, get_window):
|
|
3783
3835
|
session, first_value = get_session_and_func("first_value")
|
3784
3836
|
col = get_func("col", session)
|
3785
3837
|
Window = get_window(session)
|
3786
|
-
|
3787
|
-
|
3788
|
-
|
3789
|
-
|
3790
|
-
|
3791
|
-
|
3792
|
-
|
3793
|
-
|
3838
|
+
if not isinstance(session, (BigQuerySession, SnowflakeSession)):
|
3839
|
+
assert session.createDataFrame(
|
3840
|
+
[(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
|
3841
|
+
).select(first_value("a"), first_value("b")).collect() == [Row(value1=None, value2=1)]
|
3842
|
+
assert session.createDataFrame(
|
3843
|
+
[(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
|
3844
|
+
).select(first_value("a", True), first_value("b", True)).collect() == [
|
3845
|
+
Row(value1="a", value2=1)
|
3846
|
+
]
|
3794
3847
|
data = {
|
3795
3848
|
"b": [None, None, "a", None, "b", "c", None, None, None, "d"],
|
3796
3849
|
"idx": list(range(10)),
|
@@ -3801,8 +3854,8 @@ def test_first_value(get_session_and_func, get_func, get_window):
|
|
3801
3854
|
assert session.createDataFrame(pd.DataFrame(data)).withColumn(
|
3802
3855
|
"bf", first_value("b", ignoreNulls=True).over(window)
|
3803
3856
|
).collect() == [
|
3804
|
-
Row(b=None, idx=0, bf=None),
|
3805
|
-
Row(b=None, idx=1, bf=None),
|
3857
|
+
Row(b=None, idx=0, bf=None if not isinstance(session, SnowflakeSession) else "a"),
|
3858
|
+
Row(b=None, idx=1, bf=None if not isinstance(session, SnowflakeSession) else "a"),
|
3806
3859
|
Row(b="a", idx=2, bf="a"),
|
3807
3860
|
Row(b=None, idx=3, bf="a"),
|
3808
3861
|
Row(b="b", idx=4, bf="a"),
|
@@ -4027,12 +4080,15 @@ def test_last_value(get_session_and_func, get_func, get_window):
|
|
4027
4080
|
session, last_value = get_session_and_func("last_value")
|
4028
4081
|
col = get_func("col", session)
|
4029
4082
|
Window = get_window(session)
|
4030
|
-
|
4031
|
-
|
4032
|
-
|
4033
|
-
|
4034
|
-
|
4035
|
-
|
4083
|
+
if not isinstance(session, (BigQuerySession, SnowflakeSession)):
|
4084
|
+
assert session.createDataFrame(
|
4085
|
+
[("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
|
4086
|
+
).select(last_value("a"), last_value("b")).collect() == [Row(value1=None, value2=2)]
|
4087
|
+
assert session.createDataFrame(
|
4088
|
+
[("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
|
4089
|
+
).select(last_value("a", True), last_value("b", True)).collect() == [
|
4090
|
+
Row(value1="b", value2=2)
|
4091
|
+
]
|
4036
4092
|
data = {
|
4037
4093
|
"b": ["a", None, None, None, "b", "c", None, None, None, "d"],
|
4038
4094
|
"idx": list(range(10)),
|
@@ -1256,8 +1256,8 @@ def test_month(expression, expected):
|
|
1256
1256
|
@pytest.mark.parametrize(
|
1257
1257
|
"expression, expected",
|
1258
1258
|
[
|
1259
|
-
(SF.dayofweek("cola"), "DAYOFWEEK(
|
1260
|
-
(SF.dayofweek(SF.col("cola")), "DAYOFWEEK(
|
1259
|
+
(SF.dayofweek("cola"), "DAYOFWEEK(cola)"),
|
1260
|
+
(SF.dayofweek(SF.col("cola")), "DAYOFWEEK(cola)"),
|
1261
1261
|
],
|
1262
1262
|
)
|
1263
1263
|
def test_dayofweek(expression, expected):
|
@@ -1267,8 +1267,8 @@ def test_dayofweek(expression, expected):
|
|
1267
1267
|
@pytest.mark.parametrize(
|
1268
1268
|
"expression, expected",
|
1269
1269
|
[
|
1270
|
-
(SF.dayofmonth("cola"), "DAYOFMONTH(
|
1271
|
-
(SF.dayofmonth(SF.col("cola")), "DAYOFMONTH(
|
1270
|
+
(SF.dayofmonth("cola"), "DAYOFMONTH(cola)"),
|
1271
|
+
(SF.dayofmonth(SF.col("cola")), "DAYOFMONTH(cola)"),
|
1272
1272
|
],
|
1273
1273
|
)
|
1274
1274
|
def test_dayofmonth(expression, expected):
|
@@ -1278,8 +1278,8 @@ def test_dayofmonth(expression, expected):
|
|
1278
1278
|
@pytest.mark.parametrize(
|
1279
1279
|
"expression, expected",
|
1280
1280
|
[
|
1281
|
-
(SF.dayofyear("cola"), "DAYOFYEAR(
|
1282
|
-
(SF.dayofyear(SF.col("cola")), "DAYOFYEAR(
|
1281
|
+
(SF.dayofyear("cola"), "DAYOFYEAR(cola)"),
|
1282
|
+
(SF.dayofyear(SF.col("cola")), "DAYOFYEAR(cola)"),
|
1283
1283
|
],
|
1284
1284
|
)
|
1285
1285
|
def test_dayofyear(expression, expected):
|
@@ -1322,8 +1322,8 @@ def test_second(expression, expected):
|
|
1322
1322
|
@pytest.mark.parametrize(
|
1323
1323
|
"expression, expected",
|
1324
1324
|
[
|
1325
|
-
(SF.weekofyear("cola"), "WEEKOFYEAR(
|
1326
|
-
(SF.weekofyear(SF.col("cola")), "WEEKOFYEAR(
|
1325
|
+
(SF.weekofyear("cola"), "WEEKOFYEAR(cola)"),
|
1326
|
+
(SF.weekofyear(SF.col("cola")), "WEEKOFYEAR(cola)"),
|
1327
1327
|
],
|
1328
1328
|
)
|
1329
1329
|
def test_weekofyear(expression, expected):
|
@@ -1544,6 +1544,24 @@ def test_timestamp_seconds(expression, expected):
|
|
1544
1544
|
assert expression.column_expression.sql(dialect="spark") == expected
|
1545
1545
|
|
1546
1546
|
|
1547
|
+
@pytest.mark.parametrize(
|
1548
|
+
"expression, expected",
|
1549
|
+
[
|
1550
|
+
(SF.timestamp_add("year", "quantity", "ts"), "DATE_ADD(YEAR, quantity, ts)"),
|
1551
|
+
(SF.timestamp_add("WEEK", SF.lit(5), "ts"), "DATE_ADD(WEEK, 5, ts)"),
|
1552
|
+
(SF.timestamp_add("day", SF.lit(-5), "ts"), "DATE_ADD(DAY, -5, ts)"),
|
1553
|
+
(
|
1554
|
+
SF.timestamp_add("hour", SF.col("quantity"), SF.col("ts")),
|
1555
|
+
"DATE_ADD(HOUR, quantity, ts)",
|
1556
|
+
),
|
1557
|
+
(SF.timestamp_add("second", SF.lit(120), "ts"), "DATE_ADD(SECOND, 120, ts)"),
|
1558
|
+
(SF.timestamp_add("month", "quantity", "ts"), "DATE_ADD(MONTH, quantity, ts)"),
|
1559
|
+
],
|
1560
|
+
)
|
1561
|
+
def test_timestamp_add(expression, expected):
|
1562
|
+
assert expression.column_expression.sql(dialect="spark") == expected
|
1563
|
+
|
1564
|
+
|
1547
1565
|
@pytest.mark.parametrize(
|
1548
1566
|
"expression, expected",
|
1549
1567
|
[
|
@@ -7,8 +7,8 @@ from sqlframe.standalone import types
|
|
7
7
|
"dtype, expected",
|
8
8
|
[
|
9
9
|
(types.StringType(), "string"),
|
10
|
-
(types.CharType(100), "char"),
|
11
|
-
(types.VarcharType(65), "varchar"),
|
10
|
+
(types.CharType(100), "char(100)"),
|
11
|
+
(types.VarcharType(65), "varchar(65)"),
|
12
12
|
(types.BinaryType(), "binary"),
|
13
13
|
(types.BooleanType(), "boolean"),
|
14
14
|
(types.DateType(), "date"),
|
File without changes
|
File without changes
|
File without changes
|
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.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif
RENAMED
File without changes
|
File without changes
|
{sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png
RENAMED
File without changes
|
{sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png
RENAMED
File without changes
|
{sqlframe-3.36.2 → sqlframe-3.37.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png
RENAMED
File without changes
|
{sqlframe-3.36.2 → sqlframe-3.37.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|