sqlglot 27.4.0__tar.gz → 27.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlglot-27.4.0 → sqlglot-27.5.0}/CHANGELOG.md +32 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/LICENSE +1 -1
- {sqlglot-27.4.0 → sqlglot-27.5.0}/PKG-INFO +1 -24
- {sqlglot-27.4.0 → sqlglot-27.5.0}/pyproject.toml +4 -5
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/_version.py +2 -2
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/bigquery.py +4 -2
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/duckdb.py +1 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/exasol.py +44 -3
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/materialize.py +1 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/oracle.py +0 -4
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/postgres.py +0 -2
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/redshift.py +1 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/risingwave.py +1 -0
- sqlglot-27.5.0/sqlglot/dialects/singlestore.py +1146 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/snowflake.py +0 -8
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/expressions.py +1 -8
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/generator.py +37 -10
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/eliminate_joins.py +3 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/scope.py +6 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/parser.py +24 -8
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/tokens.py +5 -2
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/transforms.py +1 -1
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/PKG-INFO +1 -24
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_dialect.py +64 -12
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_exasol.py +29 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_mysql.py +4 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_oracle.py +13 -1
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_postgres.py +6 -0
- sqlglot-27.5.0/tests/dialects/test_singlestore.py +51 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_snowflake.py +3 -5
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/identity.sql +2 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/eliminate_ctes.sql +28 -1
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/eliminate_joins.sql +19 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_optimizer.py +14 -0
- sqlglot-27.4.0/sqlglot/dialects/singlestore.py +0 -5
- sqlglot-27.4.0/tests/dialects/test_singlestore.py +0 -20
- {sqlglot-27.4.0 → sqlglot-27.5.0}/.gitignore +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/.gitpod.yml +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/CONTRIBUTING.md +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/MANIFEST.in +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/Makefile +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/README.md +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/setup.cfg +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/setup.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/__init__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/__main__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/_typing.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/dialect.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/diff.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/errors.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/helper.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/lineage.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/annotate_types.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/qualify_columns.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/simplify.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/unnest_subqueries.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/planner.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/py.typed +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/schema.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/serde.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/time.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/trie.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/requires.txt +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.png +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/Cargo.lock +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/Cargo.toml +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/dialect_settings.json +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/long.rs +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/token_type_settings.json +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/tokenizer_settings.json +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/pyproject.toml +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/lib.rs +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/settings.rs +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/token.rs +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/tokenizer.rs +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/trie.rs +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/__init__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_bigquery.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_clickhouse.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_databricks.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_doris.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_duckdb.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_hive.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_presto.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_spark.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_sqlite.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_trino.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_tsql.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/helpers.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_build.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_diff.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_docs.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_executor.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_expressions.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_generator.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_helper.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_lineage.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_parser.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_schema.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_serde.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_time.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_tokens.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_transforms.py +0 -0
- {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_transpile.py +0 -0
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v27.4.1] - 2025-07-27
|
|
5
|
+
### :bug: Bug Fixes
|
|
6
|
+
- [`ba2b3e2`](https://github.com/tobymao/sqlglot/commit/ba2b3e21ca5454402808b68697ea4eb62963d341) - **bigquery**: make exp.Array type inference more robust *(PR [#5483](https://github.com/tobymao/sqlglot/pull/5483) by [@georgesittas](https://github.com/georgesittas))*
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## [v27.4.0] - 2025-07-25
|
|
10
|
+
### :boom: BREAKING CHANGES
|
|
11
|
+
- due to [`4f348bd`](https://github.com/tobymao/sqlglot/commit/4f348bddda21b18841fd2d728fe486e95cdaa549) - store Query schemas in meta dict instead of type attr *(PR [#5480](https://github.com/tobymao/sqlglot/pull/5480) by [@georgesittas](https://github.com/georgesittas))*:
|
|
12
|
+
|
|
13
|
+
store Query schemas in meta dict instead of type attr (#5480)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### :sparkles: New Features
|
|
17
|
+
- [`7961ece`](https://github.com/tobymao/sqlglot/commit/7961ece058f3771364aad5beedba9484e3a2e27c) - **exasol**: Add support for HASH_SHA1 function *(PR [#5468](https://github.com/tobymao/sqlglot/pull/5468) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
18
|
+
- [`406815d`](https://github.com/tobymao/sqlglot/commit/406815de21f0fdc9874ff46155d4ee0274aa6337) - **exasol**: support HASH_SHA1 *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
19
|
+
- [`e6f4fc9`](https://github.com/tobymao/sqlglot/commit/e6f4fc9c6d59d96777b2a2ec5dcc360e53639f8d) - **sqlite**: support ATTACH/DETACH DATABASE *(PR [#5469](https://github.com/tobymao/sqlglot/pull/5469) by [@geooo109](https://github.com/geooo109))*
|
|
20
|
+
- :arrow_lower_right: *addresses issue [#5459](https://github.com/tobymao/sqlglot/issues/5459) opened by [@mariofox](https://github.com/mariofox)*
|
|
21
|
+
- [`8aa3498`](https://github.com/tobymao/sqlglot/commit/8aa349890673dccdd4daa0aea6ca5fcb9fdaf46f) - **hive, spark**: Add support for LOCATION in ADD PARTITION *(PR [#5472](https://github.com/tobymao/sqlglot/pull/5472) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
22
|
+
- :arrow_lower_right: *addresses issue [#5457](https://github.com/tobymao/sqlglot/issues/5457) opened by [@tsamaras](https://github.com/tsamaras)*
|
|
23
|
+
- [`44adfc0`](https://github.com/tobymao/sqlglot/commit/44adfc0e74da9d1b05a5a8a67b81fb7c67634c70) - **exasol**: add HASH_MD5 functionality to exasol dialect *(PR [#5473](https://github.com/tobymao/sqlglot/pull/5473) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
24
|
+
- [`05e1c4d`](https://github.com/tobymao/sqlglot/commit/05e1c4dbf795915448173a894a89a33b289a3b5b) - **snowflake**: Transpile BQ's `STRUCT` dot access *(PR [#5471](https://github.com/tobymao/sqlglot/pull/5471) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
25
|
+
- [`3c5ecdf`](https://github.com/tobymao/sqlglot/commit/3c5ecdf7f27629c01f0f3402e64a9dedf0583851) - **exasol**: Add HASHTYPE_MD5 functions to Exasol dialect *(PR [#5474](https://github.com/tobymao/sqlglot/pull/5474) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
26
|
+
- [`1d640d2`](https://github.com/tobymao/sqlglot/commit/1d640d2278288b9a39a65b2532a13bc17e06c4e8) - **exasol**: add support for HASH_SHA256 and HASH_SHA512 hashing *(PR [#5475](https://github.com/tobymao/sqlglot/pull/5475) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
27
|
+
|
|
28
|
+
### :bug: Bug Fixes
|
|
29
|
+
- [`e1819d6`](https://github.com/tobymao/sqlglot/commit/e1819d6451fec0eb3a1f77c90fd8d5c5b0d89889) - only strip kind from joins when it is inner|outer *(PR [#5477](https://github.com/tobymao/sqlglot/pull/5477) by [@themattmorris](https://github.com/themattmorris))*
|
|
30
|
+
- :arrow_lower_right: *fixes issue [#5470](https://github.com/tobymao/sqlglot/issues/5470) opened by [@themattmorris](https://github.com/themattmorris)*
|
|
31
|
+
- [`4f348bd`](https://github.com/tobymao/sqlglot/commit/4f348bddda21b18841fd2d728fe486e95cdaa549) - **bigquery**: store Query schemas in meta dict instead of type attr *(PR [#5480](https://github.com/tobymao/sqlglot/pull/5480) by [@georgesittas](https://github.com/georgesittas))*
|
|
32
|
+
|
|
33
|
+
|
|
4
34
|
## [v27.3.1] - 2025-07-24
|
|
5
35
|
### :boom: BREAKING CHANGES
|
|
6
36
|
- due to [`48703c4`](https://github.com/tobymao/sqlglot/commit/48703c4fadd9f24de151a63d1bfa74f4b8e71133) - temporarily move VARCHAR length inference logic to Fabric *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
@@ -6306,3 +6336,5 @@ Changelog
|
|
|
6306
6336
|
[v27.2.0]: https://github.com/tobymao/sqlglot/compare/v27.1.0...v27.2.0
|
|
6307
6337
|
[v27.3.0]: https://github.com/tobymao/sqlglot/compare/v27.0.1...v27.3.0
|
|
6308
6338
|
[v27.3.1]: https://github.com/tobymao/sqlglot/compare/v27.3.0...v27.3.1
|
|
6339
|
+
[v27.4.0]: https://github.com/tobymao/sqlglot/compare/v27.3.1...v27.4.0
|
|
6340
|
+
[v27.4.1]: https://github.com/tobymao/sqlglot/compare/v27.4.0...v27.4.1
|
|
@@ -1,30 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 27.
|
|
3
|
+
Version: 27.5.0
|
|
4
4
|
Summary: An easily customizable SQL parser and transpiler
|
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
|
6
|
-
License: MIT License
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2023 Toby Mao
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
-
in the Software without restriction, including without limitation the rights
|
|
13
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
-
furnished to do so, subject to the following conditions:
|
|
16
|
-
|
|
17
|
-
The above copyright notice and this permission notice shall be included in all
|
|
18
|
-
copies or substantial portions of the Software.
|
|
19
|
-
|
|
20
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
-
SOFTWARE.
|
|
27
|
-
|
|
28
6
|
Project-URL: Homepage, https://sqlglot.com/
|
|
29
7
|
Project-URL: Documentation, https://sqlglot.com/sqlglot.html
|
|
30
8
|
Project-URL: Repository, https://github.com/tobymao/sqlglot
|
|
@@ -32,7 +10,6 @@ Project-URL: Issues, https://github.com/tobymao/sqlglot/issues
|
|
|
32
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
33
11
|
Classifier: Intended Audience :: Developers
|
|
34
12
|
Classifier: Intended Audience :: Science/Research
|
|
35
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
36
13
|
Classifier: Operating System :: OS Independent
|
|
37
14
|
Classifier: Programming Language :: SQL
|
|
38
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -4,13 +4,12 @@ dynamic = ["version", "optional-dependencies"]
|
|
|
4
4
|
description = "An easily customizable SQL parser and transpiler"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "Toby Mao", email = "toby.mao@gmail.com" }]
|
|
7
|
-
license =
|
|
7
|
+
license-files = ["LICENSE"]
|
|
8
8
|
requires-python = ">= 3.9"
|
|
9
|
-
classifiers=[
|
|
9
|
+
classifiers = [
|
|
10
10
|
"Development Status :: 5 - Production/Stable",
|
|
11
11
|
"Intended Audience :: Developers",
|
|
12
12
|
"Intended Audience :: Science/Research",
|
|
13
|
-
"License :: OSI Approved :: MIT License",
|
|
14
13
|
"Operating System :: OS Independent",
|
|
15
14
|
"Programming Language :: SQL",
|
|
16
15
|
"Programming Language :: Python :: 3 :: Only",
|
|
@@ -35,7 +34,7 @@ fallback_version = "0.0.0"
|
|
|
35
34
|
local_scheme = "no-local-version"
|
|
36
35
|
|
|
37
36
|
[tool.setuptools.packages.find]
|
|
38
|
-
include=["sqlglot", "sqlglot.*"]
|
|
37
|
+
include = ["sqlglot", "sqlglot.*"]
|
|
39
38
|
|
|
40
39
|
[tool.setuptools.package-data]
|
|
41
|
-
"*" = ["py.typed"]
|
|
40
|
+
"*" = ["py.typed"]
|
|
@@ -378,11 +378,13 @@ def _annotate_array(self: TypeAnnotator, expression: exp.Array) -> exp.Array:
|
|
|
378
378
|
and (query_type := select.meta.get("query_type")) is not None
|
|
379
379
|
and query_type.is_type(exp.DataType.Type.STRUCT)
|
|
380
380
|
and len(query_type.expressions) == 1
|
|
381
|
+
and isinstance(col_def := query_type.expressions[0], exp.ColumnDef)
|
|
382
|
+
and (projection_type := col_def.kind) is not None
|
|
383
|
+
and not projection_type.is_type(exp.DataType.Type.UNKNOWN)
|
|
381
384
|
):
|
|
382
|
-
projection_type = query_type.expressions[0].kind.copy()
|
|
383
385
|
array_type = exp.DataType(
|
|
384
386
|
this=exp.DataType.Type.ARRAY,
|
|
385
|
-
expressions=[projection_type],
|
|
387
|
+
expressions=[projection_type.copy()],
|
|
386
388
|
nested=True,
|
|
387
389
|
)
|
|
388
390
|
return self._annotate_with_type(expression, array_type)
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing as t
|
|
4
|
+
|
|
2
5
|
from sqlglot import exp, generator, parser, tokens
|
|
6
|
+
from sqlglot.dialects.clickhouse import timestamptrunc_sql
|
|
3
7
|
from sqlglot.dialects.dialect import (
|
|
4
8
|
Dialect,
|
|
5
|
-
rename_func,
|
|
6
9
|
binary_from_function,
|
|
7
10
|
build_formatted_time,
|
|
8
|
-
|
|
11
|
+
rename_func,
|
|
9
12
|
strposition_sql,
|
|
13
|
+
timestrtotime_sql,
|
|
14
|
+
unit_to_str,
|
|
10
15
|
)
|
|
11
|
-
from sqlglot.helper import seq_get
|
|
12
16
|
from sqlglot.generator import unsupported_args
|
|
17
|
+
from sqlglot.helper import seq_get
|
|
13
18
|
from sqlglot.tokens import TokenType
|
|
14
19
|
|
|
20
|
+
if t.TYPE_CHECKING:
|
|
21
|
+
from sqlglot.dialects.dialect import DialectType
|
|
22
|
+
|
|
15
23
|
|
|
16
24
|
def _sha2_sql(self: Exasol.Generator, expression: exp.SHA2) -> str:
|
|
17
25
|
length = expression.text("length")
|
|
@@ -19,6 +27,25 @@ def _sha2_sql(self: Exasol.Generator, expression: exp.SHA2) -> str:
|
|
|
19
27
|
return self.func(func_name, expression.this)
|
|
20
28
|
|
|
21
29
|
|
|
30
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/trunc%5Bate%5D%20(datetime).htm
|
|
31
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/trunc%5Bate%5D%20(number).htm
|
|
32
|
+
def _build_trunc(args: t.List[exp.Expression], dialect: DialectType) -> exp.Expression:
|
|
33
|
+
first, second = seq_get(args, 0), seq_get(args, 1)
|
|
34
|
+
|
|
35
|
+
if not first or not second:
|
|
36
|
+
return exp.Anonymous(this="TRUNC", expressions=args)
|
|
37
|
+
|
|
38
|
+
if not first.type:
|
|
39
|
+
from sqlglot.optimizer.annotate_types import annotate_types
|
|
40
|
+
|
|
41
|
+
first = annotate_types(first, dialect=dialect)
|
|
42
|
+
|
|
43
|
+
if first.is_type(exp.DataType.Type.DATE, exp.DataType.Type.TIMESTAMP) and second.is_string:
|
|
44
|
+
return exp.DateTrunc(this=first, unit=second)
|
|
45
|
+
|
|
46
|
+
return exp.Anonymous(this="TRUNC", expressions=args)
|
|
47
|
+
|
|
48
|
+
|
|
22
49
|
class Exasol(Dialect):
|
|
23
50
|
TIME_MAPPING = {
|
|
24
51
|
"yyyy": "%Y",
|
|
@@ -63,12 +90,17 @@ class Exasol(Dialect):
|
|
|
63
90
|
"BIT_NOT": lambda args: exp.BitwiseNot(this=seq_get(args, 0)),
|
|
64
91
|
"BIT_LSHIFT": binary_from_function(exp.BitwiseLeftShift),
|
|
65
92
|
"BIT_RSHIFT": binary_from_function(exp.BitwiseRightShift),
|
|
93
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/date_trunc.htm#DATE_TRUNC
|
|
94
|
+
"DATE_TRUNC": lambda args: exp.TimestampTrunc(
|
|
95
|
+
this=seq_get(args, 1), unit=seq_get(args, 0)
|
|
96
|
+
),
|
|
66
97
|
"EVERY": lambda args: exp.All(this=seq_get(args, 0)),
|
|
67
98
|
"EDIT_DISTANCE": exp.Levenshtein.from_arg_list,
|
|
68
99
|
"HASH_SHA": exp.SHA.from_arg_list,
|
|
69
100
|
"HASH_SHA1": exp.SHA.from_arg_list,
|
|
70
101
|
"HASH_MD5": exp.MD5.from_arg_list,
|
|
71
102
|
"HASHTYPE_MD5": exp.MD5Digest.from_arg_list,
|
|
103
|
+
"REGEXP_SUBSTR": exp.RegexpExtract.from_arg_list,
|
|
72
104
|
"REGEXP_REPLACE": lambda args: exp.RegexpReplace(
|
|
73
105
|
this=seq_get(args, 0),
|
|
74
106
|
expression=seq_get(args, 1),
|
|
@@ -82,6 +114,8 @@ class Exasol(Dialect):
|
|
|
82
114
|
"HASH_SHA512": lambda args: exp.SHA2(
|
|
83
115
|
this=seq_get(args, 0), length=exp.Literal.number(512)
|
|
84
116
|
),
|
|
117
|
+
"TRUNC": _build_trunc,
|
|
118
|
+
"TRUNCATE": _build_trunc,
|
|
85
119
|
"VAR_POP": exp.VariancePop.from_arg_list,
|
|
86
120
|
"APPROXIMATE_COUNT_DISTINCT": exp.ApproxDistinct.from_arg_list,
|
|
87
121
|
"TO_CHAR": build_formatted_time(exp.ToChar, "exasol"),
|
|
@@ -155,12 +189,18 @@ class Exasol(Dialect):
|
|
|
155
189
|
exp.BitwiseXor: rename_func("BIT_XOR"),
|
|
156
190
|
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/every.htm
|
|
157
191
|
exp.All: rename_func("EVERY"),
|
|
192
|
+
exp.DateTrunc: lambda self, e: self.func("TRUNC", e.this, unit_to_str(e)),
|
|
193
|
+
exp.DatetimeTrunc: timestamptrunc_sql(),
|
|
158
194
|
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/edit_distance.htm#EDIT_DISTANCE
|
|
159
195
|
exp.Levenshtein: unsupported_args("ins_cost", "del_cost", "sub_cost", "max_dist")(
|
|
160
196
|
rename_func("EDIT_DISTANCE")
|
|
161
197
|
),
|
|
162
198
|
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/mod.htm
|
|
163
199
|
exp.Mod: rename_func("MOD"),
|
|
200
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/regexp_substr.htm
|
|
201
|
+
exp.RegexpExtract: unsupported_args("parameters", "group")(
|
|
202
|
+
rename_func("REGEXP_SUBSTR")
|
|
203
|
+
),
|
|
164
204
|
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/regexp_replace.htm
|
|
165
205
|
exp.RegexpReplace: unsupported_args("modifiers")(rename_func("REGEXP_REPLACE")),
|
|
166
206
|
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/var_pop.htm
|
|
@@ -175,6 +215,7 @@ class Exasol(Dialect):
|
|
|
175
215
|
exp.TsOrDsToDate: lambda self, e: self.func("TO_DATE", e.this, self.format_time(e)),
|
|
176
216
|
exp.TimeToStr: lambda self, e: self.func("TO_CHAR", e.this, self.format_time(e)),
|
|
177
217
|
exp.TimeStrToTime: timestrtotime_sql,
|
|
218
|
+
exp.TimestampTrunc: timestamptrunc_sql(),
|
|
178
219
|
exp.StrToTime: lambda self, e: self.func("TO_DATE", e.this, self.format_time(e)),
|
|
179
220
|
exp.CurrentUser: lambda *_: "CURRENT_USER",
|
|
180
221
|
exp.AtTimeZone: lambda self, e: self.func(
|
|
@@ -52,10 +52,6 @@ class Oracle(Dialect):
|
|
|
52
52
|
# https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212
|
|
53
53
|
# https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
|
|
54
54
|
TIME_MAPPING = {
|
|
55
|
-
"AM": "%p", # Meridian indicator with or without periods
|
|
56
|
-
"A.M.": "%p", # Meridian indicator with or without periods
|
|
57
|
-
"PM": "%p", # Meridian indicator with or without periods
|
|
58
|
-
"P.M.": "%p", # Meridian indicator with or without periods
|
|
59
55
|
"D": "%u", # Day of week (1-7)
|
|
60
56
|
"DAY": "%A", # name of day
|
|
61
57
|
"DD": "%d", # day of month (1-31)
|
|
@@ -161,6 +161,7 @@ class Redshift(Postgres):
|
|
|
161
161
|
SUPPORTS_MEDIAN = True
|
|
162
162
|
ALTER_SET_TYPE = "TYPE"
|
|
163
163
|
SUPPORTS_DECODE_CASE = True
|
|
164
|
+
SUPPORTS_BETWEEN_FLAGS = False
|
|
164
165
|
|
|
165
166
|
# Redshift doesn't have `WITH` as part of their with_properties so we remove it
|
|
166
167
|
WITH_PROPERTIES_PREFIX = " "
|