sqlframe 3.38.1__tar.gz → 3.39.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.38.1 → sqlframe-3.39.0}/.github/workflows/main.workflow.yaml +1 -1
- {sqlframe-3.38.1 → sqlframe-3.39.0}/.github/workflows/publish.workflow.yaml +1 -1
- {sqlframe-3.38.1 → sqlframe-3.39.0}/PKG-INFO +1 -1
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/bigquery.md +1 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/duckdb.md +1 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/postgres.md +1 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/snowflake.md +1 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/setup.py +2 -2
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/_version.py +2 -2
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/functions.py +14 -11
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/session.py +2 -2
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/util.py +9 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe.egg-info/requires.txt +2 -2
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_int_functions.py +9 -3
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_functions.py +2 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/.github/CODEOWNERS +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/.gitignore +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/.pre-commit-config.yaml +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/.readthedocs.yaml +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/LICENSE +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/Makefile +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/README.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/cake.gif +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/configuration.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/databricks.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/docs/bigquery.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/docs/duckdb.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/docs/images/SF.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/docs/images/favicon.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/docs/postgres.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/images/SF.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/images/favicon.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/index.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/redshift.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/requirements.txt +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/spark.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/standalone.md +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/docs/stylesheets/extra.css +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/mkdocs.yml +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/pytest.ini +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/renovate.json +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/setup.cfg +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/LICENSE +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/_typing.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/decorators.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/mixins/table_mixins.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/normalize.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/operations.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/transforms.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/base/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/functions.pyi +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/databricks/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/postgres/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/py.typed +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/redshift/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/spark/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/group.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/standalone/window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe/testing/utils.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/common_fixtures.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/conftest.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee.csv +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee.json +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/issue_219.csv +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/databricks/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_engine_column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_engine_table.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/fixtures.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/test_int_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/integration/test_int_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/conftest.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/databricks/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/databricks/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/duck/test_reader_options.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/spark/test_reader_options.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_column.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_types.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/test_activate.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/test_base_reader_options.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/test_catalog.py +0 -0
- {sqlframe-3.38.1 → sqlframe-3.39.0}/tests/unit/test_util.py +0 -0
@@ -382,6 +382,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
382
382
|
* [date_diff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_diff.html)
|
383
383
|
* [datediff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.datediff.html)
|
384
384
|
* [date_format](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_format.html)
|
385
|
+
* [date_from_unix_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_from_unix_date.html)
|
385
386
|
* [date_sub](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_sub.html)
|
386
387
|
* [date_trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_trunc.html)
|
387
388
|
* [dayofmonth](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.dayofmonth.html)
|
@@ -341,6 +341,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
341
341
|
* [date_diff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_diff.html)
|
342
342
|
* [datediff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.datediff.html)
|
343
343
|
* [date_format](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_format.html)
|
344
|
+
* [date_from_unix_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_from_unix_date.html)
|
344
345
|
* [date_sub](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_sub.html)
|
345
346
|
* [date_trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_trunc.html)
|
346
347
|
* [day](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.day.html)
|
@@ -346,6 +346,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
346
346
|
* [date_diff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_diff.html)
|
347
347
|
* [datediff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.datediff.html)
|
348
348
|
* [date_format](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_format.html)
|
349
|
+
* [date_from_unix_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_from_unix_date.html)
|
349
350
|
* [date_sub](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_sub.html)
|
350
351
|
* [date_trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_trunc.html)
|
351
352
|
* Rounded whole number is returned
|
@@ -375,6 +375,7 @@ See something that you would like to see supported? [Open an issue](https://gith
|
|
375
375
|
* [date_diff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_diff.html)
|
376
376
|
* [datediff](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.datediff.html)
|
377
377
|
* [date_format](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_format.html)
|
378
|
+
* [date_from_unix_date](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_from_unix_date.html)
|
378
379
|
* [date_sub](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_sub.html)
|
379
380
|
* [date_trunc](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.date_trunc.html)
|
380
381
|
* [dayofmonth](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.dayofmonth.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,<27.
|
23
|
+
"sqlglot>=24.0.0,<27.8",
|
24
24
|
"typing_extensions",
|
25
25
|
],
|
26
26
|
extras_require={
|
@@ -71,7 +71,7 @@ setup(
|
|
71
71
|
"redshift_connector>=2.1.1,<2.2.0",
|
72
72
|
],
|
73
73
|
"snowflake": [
|
74
|
-
"snowflake-connector-python[secure-local-storage]>=3.10.0,<3.
|
74
|
+
"snowflake-connector-python[secure-local-storage]>=3.10.0,<3.18",
|
75
75
|
],
|
76
76
|
"spark": [
|
77
77
|
"pyspark>=2,<3.6",
|
@@ -2318,6 +2318,14 @@ def array_distinct(col: ColumnOrName) -> Column:
|
|
2318
2318
|
if session._is_bigquery:
|
2319
2319
|
return array_distinct_bgutil(col)
|
2320
2320
|
|
2321
|
+
if session._is_duckdb:
|
2322
|
+
# DuckDB's array_distinct removes nulls, but we need to preserve them
|
2323
|
+
# Check if original array contains null and append it back if needed
|
2324
|
+
original_col = Column.ensure_col(col)
|
2325
|
+
distinct_result = Column.invoke_anonymous_function(col, "ARRAY_DISTINCT")
|
2326
|
+
has_null = array_position(original_col, lit(None)) > lit(0)
|
2327
|
+
return when(has_null, array_append(distinct_result, lit(None))).otherwise(distinct_result)
|
2328
|
+
|
2321
2329
|
return Column.invoke_anonymous_function(col, "ARRAY_DISTINCT")
|
2322
2330
|
|
2323
2331
|
|
@@ -2564,7 +2572,7 @@ def shuffle(col: ColumnOrName) -> Column:
|
|
2564
2572
|
|
2565
2573
|
@meta(unsupported_engines="snowflake")
|
2566
2574
|
def reverse(col: ColumnOrName) -> Column:
|
2567
|
-
return Column.
|
2575
|
+
return Column.invoke_expression_over_column(col, expression.Reverse)
|
2568
2576
|
|
2569
2577
|
|
2570
2578
|
@meta(unsupported_engines=["bigquery", "postgres"])
|
@@ -3211,9 +3219,9 @@ def current_user() -> Column:
|
|
3211
3219
|
return Column.invoke_expression_over_column(None, expression.CurrentUser)
|
3212
3220
|
|
3213
3221
|
|
3214
|
-
@meta(
|
3222
|
+
@meta()
|
3215
3223
|
def date_from_unix_date(days: ColumnOrName) -> Column:
|
3216
|
-
return Column.
|
3224
|
+
return Column.invoke_expression_over_column(days, expression.DateFromUnixDate)
|
3217
3225
|
|
3218
3226
|
|
3219
3227
|
@meta(unsupported_engines="*")
|
@@ -6623,7 +6631,7 @@ def unix_micros(col: ColumnOrName) -> Column:
|
|
6623
6631
|
|
6624
6632
|
col = to_timestamp(col)
|
6625
6633
|
|
6626
|
-
return Column.
|
6634
|
+
return Column.invoke_expression_over_column(col, expression.UnixMicros)
|
6627
6635
|
|
6628
6636
|
|
6629
6637
|
@meta()
|
@@ -6643,15 +6651,10 @@ def unix_millis(col: ColumnOrName) -> Column:
|
|
6643
6651
|
"""
|
6644
6652
|
from sqlframe.base.function_alternatives import unix_millis_multiply_epoch
|
6645
6653
|
|
6646
|
-
if (
|
6647
|
-
_get_session()._is_bigquery
|
6648
|
-
or _get_session()._is_duckdb
|
6649
|
-
or _get_session()._is_postgres
|
6650
|
-
or _get_session()._is_snowflake
|
6651
|
-
):
|
6654
|
+
if _get_session()._is_duckdb or _get_session()._is_postgres or _get_session()._is_snowflake:
|
6652
6655
|
return unix_millis_multiply_epoch(col)
|
6653
6656
|
|
6654
|
-
return Column.
|
6657
|
+
return Column.invoke_expression_over_column(col, expression.UnixMillis)
|
6655
6658
|
|
6656
6659
|
|
6657
6660
|
@meta()
|
@@ -12,7 +12,6 @@ from collections import defaultdict
|
|
12
12
|
from functools import cached_property
|
13
13
|
|
14
14
|
import sqlglot
|
15
|
-
from dateutil.relativedelta import relativedelta
|
16
15
|
from sqlglot import Dialect, exp
|
17
16
|
from sqlglot.dialects.dialect import DialectType, NormalizationStrategy
|
18
17
|
from sqlglot.expressions import parse_identifier
|
@@ -34,6 +33,7 @@ from sqlframe.base.table import _BaseTable
|
|
34
33
|
from sqlframe.base.udf import _BaseUDFRegistration
|
35
34
|
from sqlframe.base.util import (
|
36
35
|
get_column_mapping_from_schema_input,
|
36
|
+
is_relativedelta_like,
|
37
37
|
normalize_string,
|
38
38
|
verify_pandas_installed,
|
39
39
|
)
|
@@ -614,7 +614,7 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
|
|
614
614
|
return [cls._to_value(x) for x in value]
|
615
615
|
elif isinstance(value, datetime.datetime):
|
616
616
|
return value.replace(tzinfo=None)
|
617
|
-
elif
|
617
|
+
elif is_relativedelta_like(value):
|
618
618
|
return datetime.timedelta(
|
619
619
|
days=value.days, hours=value.hours, minutes=value.minutes, seconds=value.seconds
|
620
620
|
)
|
@@ -524,3 +524,12 @@ def split_filepath(filepath: str) -> tuple[str, str]:
|
|
524
524
|
if len(split_) == 2: # noqa: PLR2004
|
525
525
|
return split_[0] + "://", split_[1]
|
526
526
|
return "", split_[0]
|
527
|
+
|
528
|
+
|
529
|
+
def is_relativedelta_like(value: t.Any) -> bool:
|
530
|
+
return (
|
531
|
+
hasattr(value, "years")
|
532
|
+
and hasattr(value, "months")
|
533
|
+
and hasattr(value, "weeks")
|
534
|
+
and hasattr(value, "leapdays")
|
535
|
+
)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
prettytable<4
|
2
|
-
sqlglot<27.
|
2
|
+
sqlglot<27.8,>=24.0.0
|
3
3
|
typing_extensions
|
4
4
|
|
5
5
|
[bigquery]
|
@@ -52,7 +52,7 @@ psycopg2<3,>=2.8
|
|
52
52
|
redshift_connector<2.2.0,>=2.1.1
|
53
53
|
|
54
54
|
[snowflake]
|
55
|
-
snowflake-connector-python[secure-local-storage]<3.
|
55
|
+
snowflake-connector-python[secure-local-storage]<3.18,>=3.10.0
|
56
56
|
|
57
57
|
[spark]
|
58
58
|
pyspark<3.6,>=2
|
@@ -2290,16 +2290,21 @@ def test_array_remove(get_session_and_func, get_func):
|
|
2290
2290
|
def test_array_distinct(get_session_and_func, get_func):
|
2291
2291
|
session, array_distinct = get_session_and_func("array_distinct")
|
2292
2292
|
lit = get_func("lit", session)
|
2293
|
+
# BigQuery doesn't support null values in arrays
|
2294
|
+
value3 = lit([1]) if isinstance(session, BigQuerySession) else lit([1, None])
|
2293
2295
|
results = (
|
2294
2296
|
session.range(1)
|
2295
2297
|
.select(
|
2296
2298
|
array_distinct(lit([1, 2, 3, 2])).alias("value"),
|
2297
2299
|
array_distinct(lit([4, 5, 5, 4])).alias("value2"),
|
2300
|
+
array_distinct(lit(value3)).alias("value3"),
|
2298
2301
|
)
|
2299
2302
|
.collect()
|
2300
2303
|
)
|
2301
2304
|
assert results[0][0] in ([1, 2, 3], [3, 2, 1])
|
2302
2305
|
assert results[0][1] in ([4, 5], [5, 4])
|
2306
|
+
if not isinstance(session, BigQuerySession):
|
2307
|
+
assert results[0][2] in ([1, None], [None, 1])
|
2303
2308
|
|
2304
2309
|
|
2305
2310
|
def test_array_intersect(get_session_and_func, get_func):
|
@@ -3670,9 +3675,10 @@ def test_current_timezone(get_session_and_func, get_func):
|
|
3670
3675
|
def test_date_from_unix_date(get_session_and_func, get_func):
|
3671
3676
|
session, date_from_unix_date = get_session_and_func("date_from_unix_date")
|
3672
3677
|
lit = get_func("lit", session)
|
3673
|
-
assert session.range(1).select(date_from_unix_date(lit(1))).first()[0]
|
3674
|
-
1970, 1, 2
|
3675
|
-
|
3678
|
+
assert session.range(1).select(date_from_unix_date(lit(1))).first()[0] in [
|
3679
|
+
datetime.date(1970, 1, 2),
|
3680
|
+
datetime.datetime(1970, 1, 2, 0, 0),
|
3681
|
+
]
|
3676
3682
|
|
3677
3683
|
|
3678
3684
|
def test_date_part(get_session_and_func, get_func):
|
@@ -17,6 +17,7 @@ def test_invoke_anonymous(name, func):
|
|
17
17
|
# make_interval - SQLGlot doesn't support week
|
18
18
|
# to_char - convert to a cast that ignores the format provided
|
19
19
|
# ltrim/rtrim - don't seem to convert correctly on some engines
|
20
|
+
# unix_micros - it is actually supported just an engine specific override uses an anonymous function
|
20
21
|
ignore_funcs = {
|
21
22
|
"array_size",
|
22
23
|
"exists",
|
@@ -26,6 +27,7 @@ def test_invoke_anonymous(name, func):
|
|
26
27
|
"rtrim",
|
27
28
|
"ascii",
|
28
29
|
"current_schema",
|
30
|
+
"unix_micros",
|
29
31
|
}
|
30
32
|
if "invoke_anonymous_function" in inspect.getsource(func) and name not in ignore_funcs:
|
31
33
|
func = parse_one(f"{name}()", read="spark", error_level=ErrorLevel.IGNORE)
|
File without changes
|
File without changes
|
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.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif
RENAMED
File without changes
|
File without changes
|
{sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png
RENAMED
File without changes
|
{sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png
RENAMED
File without changes
|
{sqlframe-3.38.1 → sqlframe-3.39.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png
RENAMED
File without changes
|
{sqlframe-3.38.1 → sqlframe-3.39.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|