sqlframe 3.36.3__tar.gz → 3.38.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.3 → sqlframe-3.38.0}/PKG-INFO +1 -1
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/bigquery.md +6 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/duckdb.md +4 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/postgres.md +3 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/snowflake.md +4 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/setup.py +3 -3
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/_version.py +2 -2
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/column.py +8 -1
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/functions.py +10 -10
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/session.py +6 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/types.py +1 -1
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/PKG-INFO +1 -1
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/requires.txt +3 -3
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_column.py +18 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_int_functions.py +37 -17
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_column.py +1 -1
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_functions.py +8 -8
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_types.py +2 -2
- {sqlframe-3.36.3 → sqlframe-3.38.0}/.github/CODEOWNERS +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/.github/workflows/main.workflow.yaml +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/.github/workflows/publish.workflow.yaml +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/.gitignore +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/.pre-commit-config.yaml +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/.readthedocs.yaml +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/LICENSE +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/Makefile +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/README.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/add_chatgpt_support.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/adding_ai_to_meal.jpeg +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/hype_train.gif +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/nonsense_sql.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/sunny_shake_head_no.gif +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/but_wait_theres_more.gif +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/cake.gif +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/you_get_pyspark_api.gif +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/sqlframe_universal_dataframe_api.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/configuration.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/databricks.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/bigquery.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/duckdb.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/images/SF.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/images/favicon.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/docs/postgres.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/images/SF.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/images/favicon.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/images/sqlframe_logo.png +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/index.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/redshift.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/requirements.txt +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/spark.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/standalone.md +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/docs/stylesheets/extra.css +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/mkdocs.yml +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/pytest.ini +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/renovate.json +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/setup.cfg +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/LICENSE +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/_typing.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/decorators.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/exceptions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/function_alternatives.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/catalog_mixins.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/dataframe_mixins.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/readwriter_mixins.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/mixins/table_mixins.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/normalize.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/operations.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/readerwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/transforms.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/util.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/base/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/functions.pyi +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/bigquery/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/functions.pyi +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/databricks/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/functions.pyi +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/duckdb/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/functions.pyi +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/postgres/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/py.typed +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/redshift/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/functions.pyi +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/snowflake/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/functions.pyi +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/spark/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/column.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/functions.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/group.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/readwriter.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/standalone/window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/testing/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe/testing/utils.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/SOURCES.txt +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/dependency_links.txt +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/sqlframe.egg-info/top_level.txt +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/common_fixtures.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/conftest.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee.csv +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee.json +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/.part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/_delta_log/.00000000000000000000.json.crc +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/_delta_log/00000000000000000000.json +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00000-e5965c7b-e58f-4d3c-ad56-002876814e3a-c000.snappy.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00002-3fed7f18-370f-4b16-b232-504d6194eb52-c000.snappy.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00004-143c5da1-d5ab-4706-8e84-0d2a324c6894-c000.snappy.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00006-64f07e25-c30e-4075-acc6-b3c69c4ce80b-c000.snappy.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00008-89ccad8d-df73-4ad5-8850-82ef3884db60-c000.snappy.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_delta/part-00010-812b3382-8c7f-4c4e-9bcd-09ce8664f6e0-c000.snappy.parquet +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/employee_extra_line.csv +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/issue_219.csv +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds1.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds10.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds11.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds12.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds13.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds14.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds15.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds16.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds17.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds18.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds19.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds2.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds20.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds21.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds22.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds23.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds24.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds25.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds26.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds27.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds28.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds29.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds3.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds30.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds31.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds32.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds33.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds34.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds35.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds36.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds37.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds38.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds39.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds4.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds40.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds41.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds42.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds43.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds44.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds45.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds46.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds47.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds48.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds49.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds5.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds50.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds51.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds52.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds53.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds54.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds55.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds56.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds57.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds58.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds59.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds6.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds60.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds61.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds62.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds63.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds64.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds65.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds66.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds67.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds68.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds69.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds7.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds70.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds71.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds72.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds73.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds74.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds75.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds76.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds77.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds78.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds79.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds8.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds80.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds81.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds82.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds83.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds84.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds85.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds86.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds87.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds88.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds89.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds9.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds90.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds91.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds92.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds93.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds94.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds95.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds96.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds97.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds98.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/fixtures/tpcds/tpcds99.sql +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/test_bigquery_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/test_bigquery_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/bigquery/test_bigquery_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/test_databricks_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/test_databricks_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/databricks/test_databricks_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_reader.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_duckdb_udf.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/duck/test_tpcds.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/postgres/test_postgres_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/redshift/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/redshift/test_redshift_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/redshift/test_redshift_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/test_snowflake_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/test_snowflake_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/snowflake/test_snowflake_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/spark/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/spark/test_spark_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/spark/test_spark_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_reader.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_table.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_engine_writer.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/engines/test_int_testing.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/fixtures.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_dataframe_stats.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_grouped_data.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/integration/test_int_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/types.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/bigquery/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/bigquery/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/conftest.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/databricks/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/databricks/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/duck/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/duck/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/duck/test_reader_options.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/postgres/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/postgres/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/redshift/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/redshift/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/snowflake/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/snowflake/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/spark/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/spark/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/spark/test_reader_options.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/__init__.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/fixtures.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_dataframe.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_dataframe_writer.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_session.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_session_case_sensitivity.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/standalone/test_window.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_activate.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_base_reader_options.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.0}/tests/unit/test_catalog.py +0 -0
- {sqlframe-3.36.3 → sqlframe-3.38.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)
|
@@ -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)
|
@@ -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)
|
@@ -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)
|
@@ -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.4",
|
24
24
|
"typing_extensions",
|
25
25
|
],
|
26
26
|
extras_require={
|
@@ -31,12 +31,12 @@ 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",
|
@@ -222,6 +222,12 @@ class Column:
|
|
222
222
|
else:
|
223
223
|
value = value.astimezone(datetime.timezone.utc).isoformat(sep=" ")
|
224
224
|
return cls(exp.cast(exp.Literal.string(value), exp.DataType.Type.TIMESTAMPTZ))
|
225
|
+
elif isinstance(value, datetime.timedelta):
|
226
|
+
return cls(
|
227
|
+
exp.Interval(
|
228
|
+
this=exp.Literal.string(int(value.total_seconds())), unit=exp.Var(this="SECOND")
|
229
|
+
)
|
230
|
+
)
|
225
231
|
return cls(exp.convert(value))
|
226
232
|
|
227
233
|
@classmethod
|
@@ -413,8 +419,9 @@ class Column:
|
|
413
419
|
return self.invoke_expression_over_column(self, exp.StartsWith, expression=value.expression)
|
414
420
|
|
415
421
|
def endswith(self, value: t.Union[str, Column]) -> Column:
|
422
|
+
ends_with_func = get_func_from_session("endswith")
|
416
423
|
value = self._lit(value) if not isinstance(value, Column) else value
|
417
|
-
return
|
424
|
+
return ends_with_func(self, value)
|
418
425
|
|
419
426
|
def rlike(self, regexp: str) -> Column:
|
420
427
|
return self.invoke_expression_over_column(
|
@@ -2110,24 +2110,24 @@ def array_size(col: ColumnOrName) -> Column:
|
|
2110
2110
|
return Column.invoke_expression_over_column(col, expression.ArraySize)
|
2111
2111
|
|
2112
2112
|
|
2113
|
-
@meta(unsupported_engines="
|
2113
|
+
@meta(unsupported_engines="snowflake")
|
2114
2114
|
def bit_and(col: ColumnOrName) -> Column:
|
2115
|
-
return Column.
|
2115
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseAndAgg)
|
2116
2116
|
|
2117
2117
|
|
2118
|
-
@meta(unsupported_engines="
|
2118
|
+
@meta(unsupported_engines="snowflake")
|
2119
2119
|
def bit_or(col: ColumnOrName) -> Column:
|
2120
|
-
return Column.
|
2120
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseOrAgg)
|
2121
2121
|
|
2122
2122
|
|
2123
|
-
@meta(unsupported_engines="
|
2123
|
+
@meta(unsupported_engines="snowflake")
|
2124
2124
|
def bit_xor(col: ColumnOrName) -> Column:
|
2125
|
-
return Column.
|
2125
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseXorAgg)
|
2126
2126
|
|
2127
2127
|
|
2128
|
-
@meta(unsupported_engines="
|
2128
|
+
@meta(unsupported_engines=["postgres", "snowflake"])
|
2129
2129
|
def bit_count(col: ColumnOrName) -> Column:
|
2130
|
-
return Column.
|
2130
|
+
return Column.invoke_expression_over_column(col, expression.BitwiseCountAgg)
|
2131
2131
|
|
2132
2132
|
|
2133
2133
|
@meta(unsupported_engines="*")
|
@@ -3293,7 +3293,7 @@ def find_in_set(str: ColumnOrName, str_array: ColumnOrName) -> Column:
|
|
3293
3293
|
return Column.invoke_anonymous_function(str, "find_in_set", str_array)
|
3294
3294
|
|
3295
3295
|
|
3296
|
-
@meta(unsupported_engines=["bigquery", "postgres"
|
3296
|
+
@meta(unsupported_engines=["bigquery", "postgres"])
|
3297
3297
|
def first_value(col: ColumnOrName, ignoreNulls: t.Optional[t.Union[bool, Column]] = None) -> Column:
|
3298
3298
|
"""Returns the first value of `col` for a group of rows. It will return the first non-null
|
3299
3299
|
value it sees when `ignoreNulls` is set to true. If all values are null, then null is returned.
|
@@ -3959,7 +3959,7 @@ def json_object_keys(col: ColumnOrName) -> Column:
|
|
3959
3959
|
return Column.invoke_anonymous_function(col, "json_object_keys")
|
3960
3960
|
|
3961
3961
|
|
3962
|
-
@meta(unsupported_engines=
|
3962
|
+
@meta(unsupported_engines="postgres")
|
3963
3963
|
def last_value(col: ColumnOrName, ignoreNulls: t.Optional[t.Union[bool, Column]] = None) -> Column:
|
3964
3964
|
"""Returns the last value of `col` for a group of rows. It will return the last non-null
|
3965
3965
|
value it sees when `ignoreNulls` is set to true. If all values are null, then null is returned.
|
@@ -12,6 +12,7 @@ from collections import defaultdict
|
|
12
12
|
from functools import cached_property
|
13
13
|
|
14
14
|
import sqlglot
|
15
|
+
from dateutil.relativedelta import relativedelta
|
15
16
|
from sqlglot import Dialect, exp
|
16
17
|
from sqlglot.dialects.dialect import DialectType, NormalizationStrategy
|
17
18
|
from sqlglot.expressions import parse_identifier
|
@@ -613,6 +614,11 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
|
|
613
614
|
return [cls._to_value(x) for x in value]
|
614
615
|
elif isinstance(value, datetime.datetime):
|
615
616
|
return value.replace(tzinfo=None)
|
617
|
+
elif isinstance(value, relativedelta):
|
618
|
+
return datetime.timedelta(
|
619
|
+
days=value.days, hours=value.hours, minutes=value.minutes, seconds=value.seconds
|
620
|
+
)
|
621
|
+
|
616
622
|
return value
|
617
623
|
|
618
624
|
@classmethod
|
@@ -1,5 +1,5 @@
|
|
1
1
|
prettytable<4
|
2
|
-
sqlglot<
|
2
|
+
sqlglot<27.4,>=24.0.0
|
3
3
|
typing_extensions
|
4
4
|
|
5
5
|
[bigquery]
|
@@ -12,13 +12,13 @@ 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
|
@@ -90,3 +90,21 @@ def test_contains(get_session: t.Callable[[], _BaseSession], get_func):
|
|
90
90
|
df_bar_lit = df.select(df.a.contains(lit("bar"))).collect()
|
91
91
|
assert df_bar_lit[0][0] is False
|
92
92
|
assert df_bar_lit[1][0] is True
|
93
|
+
|
94
|
+
|
95
|
+
def test_endswith(get_session: t.Callable[[], _BaseSession], get_func):
|
96
|
+
session = get_session()
|
97
|
+
lit = get_func("lit", session)
|
98
|
+
df = session.createDataFrame([Row(a="abc"), Row(a="def")])
|
99
|
+
df_endswith_c = df.select(df.a.endswith("c")).collect()
|
100
|
+
assert df_endswith_c[0][0] is True
|
101
|
+
assert df_endswith_c[1][0] is False
|
102
|
+
df_endswith_c_lit = df.select(df.a.endswith(lit("c"))).collect()
|
103
|
+
assert df_endswith_c_lit[0][0] is True
|
104
|
+
assert df_endswith_c_lit[1][0] is False
|
105
|
+
df_endswith_f = df.select(df.a.endswith("f")).collect()
|
106
|
+
assert df_endswith_f[0][0] is False
|
107
|
+
assert df_endswith_f[1][0] is True
|
108
|
+
df_endswith_f_lit = df.select(df.a.endswith(lit("f"))).collect()
|
109
|
+
assert df_endswith_f_lit[0][0] is False
|
110
|
+
assert df_endswith_f_lit[1][0] is True
|
@@ -121,6 +121,7 @@ def get_types() -> t.Callable:
|
|
121
121
|
),
|
122
122
|
({"cola": 1}, {"cola": 1}),
|
123
123
|
(Row(**{"cola": 1, "colb": "test"}), Row(**{"cola": 1, "colb": "test"})),
|
124
|
+
(datetime.timedelta(1), datetime.timedelta(1)),
|
124
125
|
],
|
125
126
|
)
|
126
127
|
def test_lit(get_session_and_func, arg, expected):
|
@@ -141,6 +142,11 @@ def test_lit(get_session_and_func, arg, expected):
|
|
141
142
|
if isinstance(session, SnowflakeSession):
|
142
143
|
if isinstance(arg, Row):
|
143
144
|
pytest.skip("Snowflake doesn't support literal row types")
|
145
|
+
if isinstance(arg, datetime.timedelta):
|
146
|
+
pytest.skip("Snowflake doesn't support literal timedelta types")
|
147
|
+
if isinstance(session, DatabricksSession):
|
148
|
+
if isinstance(arg, datetime.timedelta):
|
149
|
+
pytest.skip("Databricks doesn't support literal timedelta types")
|
144
150
|
if isinstance(session, DuckDBSession):
|
145
151
|
if isinstance(arg, dict):
|
146
152
|
expected = Row(**expected)
|
@@ -1572,6 +1578,16 @@ def test_timestamp_add(get_session_and_func, get_func):
|
|
1572
1578
|
actual = row[0].replace(tzinfo=None) if row[0] else None
|
1573
1579
|
assert actual == expected_days[i], f"Day subtraction failed for row {i}"
|
1574
1580
|
|
1581
|
+
# Test adding quarters
|
1582
|
+
result = df.select(timestamp_add("quarter", lit(2), "ts")).collect()
|
1583
|
+
expected_quarters = [
|
1584
|
+
datetime.datetime(2016, 9, 11, 9, 0, 7),
|
1585
|
+
datetime.datetime(2024, 10, 2, 9, 0, 7),
|
1586
|
+
]
|
1587
|
+
for i, row in enumerate(result):
|
1588
|
+
actual = row[0].replace(tzinfo=None) if row[0] else None
|
1589
|
+
assert actual == expected_quarters[i], f"Quarter addition failed for row {i}"
|
1590
|
+
|
1575
1591
|
|
1576
1592
|
def test_window(get_session_and_func, get_func):
|
1577
1593
|
session, window = get_session_and_func("window")
|
@@ -3738,7 +3754,6 @@ def test_elt(get_session_and_func, get_func):
|
|
3738
3754
|
|
3739
3755
|
def test_endswith(get_session_and_func, get_func):
|
3740
3756
|
session, endswith = get_session_and_func("endswith")
|
3741
|
-
to_binary = get_func("to_binary", session)
|
3742
3757
|
df = session.createDataFrame(
|
3743
3758
|
[
|
3744
3759
|
(
|
@@ -3758,6 +3773,7 @@ def test_endswith(get_session_and_func, get_func):
|
|
3758
3773
|
],
|
3759
3774
|
["e", "f"],
|
3760
3775
|
)
|
3776
|
+
to_binary = get_func("to_binary", session)
|
3761
3777
|
df = df.select(to_binary("e").alias("e"), to_binary("f").alias("f"))
|
3762
3778
|
assert df.select(endswith("e", "f"), endswith("f", "e")).collect() == [
|
3763
3779
|
Row(value1=True, value2=False)
|
@@ -3825,14 +3841,15 @@ def test_first_value(get_session_and_func, get_func, get_window):
|
|
3825
3841
|
session, first_value = get_session_and_func("first_value")
|
3826
3842
|
col = get_func("col", session)
|
3827
3843
|
Window = get_window(session)
|
3828
|
-
|
3829
|
-
|
3830
|
-
|
3831
|
-
|
3832
|
-
|
3833
|
-
|
3834
|
-
|
3835
|
-
|
3844
|
+
if not isinstance(session, (BigQuerySession, SnowflakeSession)):
|
3845
|
+
assert session.createDataFrame(
|
3846
|
+
[(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
|
3847
|
+
).select(first_value("a"), first_value("b")).collect() == [Row(value1=None, value2=1)]
|
3848
|
+
assert session.createDataFrame(
|
3849
|
+
[(None, 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["a", "b"]
|
3850
|
+
).select(first_value("a", True), first_value("b", True)).collect() == [
|
3851
|
+
Row(value1="a", value2=1)
|
3852
|
+
]
|
3836
3853
|
data = {
|
3837
3854
|
"b": [None, None, "a", None, "b", "c", None, None, None, "d"],
|
3838
3855
|
"idx": list(range(10)),
|
@@ -3843,8 +3860,8 @@ def test_first_value(get_session_and_func, get_func, get_window):
|
|
3843
3860
|
assert session.createDataFrame(pd.DataFrame(data)).withColumn(
|
3844
3861
|
"bf", first_value("b", ignoreNulls=True).over(window)
|
3845
3862
|
).collect() == [
|
3846
|
-
Row(b=None, idx=0, bf=None),
|
3847
|
-
Row(b=None, idx=1, bf=None),
|
3863
|
+
Row(b=None, idx=0, bf=None if not isinstance(session, SnowflakeSession) else "a"),
|
3864
|
+
Row(b=None, idx=1, bf=None if not isinstance(session, SnowflakeSession) else "a"),
|
3848
3865
|
Row(b="a", idx=2, bf="a"),
|
3849
3866
|
Row(b=None, idx=3, bf="a"),
|
3850
3867
|
Row(b="b", idx=4, bf="a"),
|
@@ -4069,12 +4086,15 @@ def test_last_value(get_session_and_func, get_func, get_window):
|
|
4069
4086
|
session, last_value = get_session_and_func("last_value")
|
4070
4087
|
col = get_func("col", session)
|
4071
4088
|
Window = get_window(session)
|
4072
|
-
|
4073
|
-
|
4074
|
-
|
4075
|
-
|
4076
|
-
|
4077
|
-
|
4089
|
+
if not isinstance(session, (BigQuerySession, SnowflakeSession)):
|
4090
|
+
assert session.createDataFrame(
|
4091
|
+
[("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
|
4092
|
+
).select(last_value("a"), last_value("b")).collect() == [Row(value1=None, value2=2)]
|
4093
|
+
assert session.createDataFrame(
|
4094
|
+
[("a", 1), ("a", 2), ("a", 3), ("b", 8), (None, 2)], ["a", "b"]
|
4095
|
+
).select(last_value("a", True), last_value("b", True)).collect() == [
|
4096
|
+
Row(value1="b", value2=2)
|
4097
|
+
]
|
4078
4098
|
data = {
|
4079
4099
|
"b": ["a", None, None, None, "b", "c", None, None, None, "d"],
|
4080
4100
|
"idx": list(range(10)),
|
@@ -105,7 +105,7 @@ def test_startswith():
|
|
105
105
|
|
106
106
|
|
107
107
|
def test_endswith():
|
108
|
-
assert (F.col("cola").endswith("test")).sql() == "ENDSWITH(cola, 'test')"
|
108
|
+
assert (F.col("cola").endswith("test")).sql() == "ENDSWITH(cola, 'test') AS endswith__cola__"
|
109
109
|
|
110
110
|
|
111
111
|
def test_rlike():
|
@@ -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):
|
@@ -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
|
File without changes
|
{sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/marvin_paranoid_robot.gif
RENAMED
File without changes
|
File without changes
|
{sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/openai_full_rewrite.png
RENAMED
File without changes
|
{sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/openai_replacing_cte_names.png
RENAMED
File without changes
|
{sqlframe-3.36.3 → sqlframe-3.38.0}/blogs/images/add_chatgpt_support/sqlglot_optimized_code.png
RENAMED
File without changes
|
{sqlframe-3.36.3 → sqlframe-3.38.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
|