sqlglot 27.4.1__tar.gz → 27.5.1__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.1 → sqlglot-27.5.1}/CHANGELOG.md +41 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/LICENSE +1 -1
- {sqlglot-27.4.1 → sqlglot-27.5.1}/PKG-INFO +1 -24
- {sqlglot-27.4.1 → sqlglot-27.5.1}/pyproject.toml +4 -5
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/_version.py +2 -2
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/duckdb.py +1 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/exasol.py +44 -3
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/materialize.py +1 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/oracle.py +0 -4
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/postgres.py +0 -2
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/redshift.py +1 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/risingwave.py +1 -0
- sqlglot-27.5.1/sqlglot/dialects/singlestore.py +1146 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/snowflake.py +0 -8
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/expressions.py +7 -11
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/generator.py +37 -10
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/eliminate_joins.py +3 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/scope.py +6 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/parser.py +24 -8
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/tokens.py +5 -2
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/transforms.py +1 -1
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot.egg-info/PKG-INFO +1 -24
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_dialect.py +69 -12
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_exasol.py +29 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_mysql.py +4 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_oracle.py +13 -1
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_postgres.py +6 -0
- sqlglot-27.5.1/tests/dialects/test_singlestore.py +51 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_snowflake.py +3 -5
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/identity.sql +2 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/eliminate_ctes.sql +28 -1
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/eliminate_joins.sql +19 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_optimizer.py +14 -0
- sqlglot-27.4.1/sqlglot/dialects/singlestore.py +0 -5
- sqlglot-27.4.1/tests/dialects/test_singlestore.py +0 -20
- {sqlglot-27.4.1 → sqlglot-27.5.1}/.gitignore +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/.gitpod.yml +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/.pre-commit-config.yaml +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/CONTRIBUTING.md +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/MANIFEST.in +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/Makefile +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/README.md +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/setup.cfg +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/setup.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/__init__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/__main__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/_typing.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/dialect.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/diff.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/errors.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/executor/context.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/executor/env.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/executor/python.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/executor/table.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/helper.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/jsonpath.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/lineage.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/annotate_types.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/merge_subqueries.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/qualify_columns.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/simplify.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/optimizer/unnest_subqueries.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/planner.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/py.typed +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/schema.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/serde.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/time.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot/trie.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot.egg-info/requires.txt +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglot.png +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/Cargo.lock +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/Cargo.toml +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/benches/dialect_settings.json +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/benches/long.rs +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/benches/token_type_settings.json +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/benches/tokenizer_settings.json +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/pyproject.toml +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/src/lib.rs +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/src/settings.rs +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/src/token.rs +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/src/tokenizer.rs +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/sqlglotrs/src/trie.rs +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/__init__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/__init__.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_athena.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_bigquery.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_clickhouse.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_databricks.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_doris.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_drill.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_druid.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_duckdb.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_dune.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_hive.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_presto.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_prql.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_spark.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_sqlite.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_trino.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/dialects/test_tsql.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/partial.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/gen_fixtures.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/helpers.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_build.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_dialect_imports.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_diff.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_docs.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_executor.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_expressions.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_generator.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_helper.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_jsonpath.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_lineage.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_parser.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_schema.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_serde.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_time.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_tokens.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_transforms.py +0 -0
- {sqlglot-27.4.1 → sqlglot-27.5.1}/tests/test_transpile.py +0 -0
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v27.5.0] - 2025-07-30
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`002286e`](https://github.com/tobymao/sqlglot/commit/002286ee05a608e303a2238a9a74ab963709b5da) - remove AM/PM entries from postgres, oracle `TIME_MAPPING` *(PR [#5491](https://github.com/tobymao/sqlglot/pull/5491) by [@georgesittas](https://github.com/georgesittas))*:
|
|
7
|
+
|
|
8
|
+
remove AM/PM entries from postgres, oracle `TIME_MAPPING` (#5491)
|
|
9
|
+
|
|
10
|
+
- due to [`ad78db6`](https://github.com/tobymao/sqlglot/commit/ad78db6c9002a5bf9188d66f0080dfefd070f77b) - Refactor `LIKE ANY` and support `ALL | SOME` quantifiers *(PR [#5493](https://github.com/tobymao/sqlglot/pull/5493) by [@VaggelisD](https://github.com/VaggelisD))*:
|
|
11
|
+
|
|
12
|
+
Refactor `LIKE ANY` and support `ALL | SOME` quantifiers (#5493)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### :sparkles: New Features
|
|
16
|
+
- [`8cdd9e8`](https://github.com/tobymao/sqlglot/commit/8cdd9e8715b4cf67c200c723940743ed69bbfd80) - **mysql**: Parse UNIQUE INDEX constraint similar to UNIQUE KEY *(PR [#5489](https://github.com/tobymao/sqlglot/pull/5489) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
17
|
+
- :arrow_lower_right: *addresses issue [#5479](https://github.com/tobymao/sqlglot/issues/5479) opened by [@nathanchapman](https://github.com/nathanchapman)*
|
|
18
|
+
- [`787d167`](https://github.com/tobymao/sqlglot/commit/787d167d694b557d6e43ed391f59847a888fa572) - **exasol**: add support for REGEXP_SUBSTR in exasol dialect *(PR [#5487](https://github.com/tobymao/sqlglot/pull/5487) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
19
|
+
- [`0963f60`](https://github.com/tobymao/sqlglot/commit/0963f60987c267c64f2fcfbde469b8b28911a14b) - **singlestore**: Fixed time formatting *(PR [#5476](https://github.com/tobymao/sqlglot/pull/5476) by [@AdalbertMemSQL](https://github.com/AdalbertMemSQL))*
|
|
20
|
+
- [`488d2e4`](https://github.com/tobymao/sqlglot/commit/488d2e4bf9d4eb148356d1fd6c2360bbf77f283c) - **singlestore**: Added RESERVED_KEYWORDS *(PR [#5497](https://github.com/tobymao/sqlglot/pull/5497) by [@AdalbertMemSQL](https://github.com/AdalbertMemSQL))*
|
|
21
|
+
- [`fad9992`](https://github.com/tobymao/sqlglot/commit/fad9992a00478a964552f72802b95ca3918c4377) - **exasol**: Add support for TRUNC, TRUNCATE and DATE_TRUNC function… *(PR [#5490](https://github.com/tobymao/sqlglot/pull/5490) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
22
|
+
- [`ad78db6`](https://github.com/tobymao/sqlglot/commit/ad78db6c9002a5bf9188d66f0080dfefd070f77b) - Refactor `LIKE ANY` and support `ALL | SOME` quantifiers *(PR [#5493](https://github.com/tobymao/sqlglot/pull/5493) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
23
|
+
- :arrow_lower_right: *addresses issue [#5484](https://github.com/tobymao/sqlglot/issues/5484) opened by [@mazum21](https://github.com/mazum21)*
|
|
24
|
+
- [`a7a6f16`](https://github.com/tobymao/sqlglot/commit/a7a6f167d30ac19383ad15931c26751c66a61976) - **singlestore**: Added Tokenizer *(PR [#5492](https://github.com/tobymao/sqlglot/pull/5492) by [@AdalbertMemSQL](https://github.com/AdalbertMemSQL))*
|
|
25
|
+
|
|
26
|
+
### :bug: Bug Fixes
|
|
27
|
+
- [`3982653`](https://github.com/tobymao/sqlglot/commit/3982653e62a42ca1be2bdd8722119e27bd1ba680) - Do not consume BUCKET/TRUNCATE as partitioning keywords *(PR [#5488](https://github.com/tobymao/sqlglot/pull/5488) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
28
|
+
- :arrow_lower_right: *fixes issue [#5485](https://github.com/tobymao/sqlglot/issues/5485) opened by [@chenkovsky](https://github.com/chenkovsky)*
|
|
29
|
+
- [`002286e`](https://github.com/tobymao/sqlglot/commit/002286ee05a608e303a2238a9a74ab963709b5da) - remove AM/PM entries from postgres, oracle `TIME_MAPPING` *(PR [#5491](https://github.com/tobymao/sqlglot/pull/5491) by [@georgesittas](https://github.com/georgesittas))*
|
|
30
|
+
- [`74f278a`](https://github.com/tobymao/sqlglot/commit/74f278a226058e196270042e2a9664b9acded28a) - **optimizer**: Fix SEMI/ANTI join handling in optimizer rules *(PR [#5498](https://github.com/tobymao/sqlglot/pull/5498) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
31
|
+
- :arrow_lower_right: *fixes issue [#5481](https://github.com/tobymao/sqlglot/issues/5481) opened by [@themattmorris](https://github.com/themattmorris)*
|
|
32
|
+
- [`42633fb`](https://github.com/tobymao/sqlglot/commit/42633fb49b3c04eeea42e061e33ee08e61960cb4) - dont print (A)SYMMETRIC keyword in BETWEEN for postgres subclasses *(PR [#5503](https://github.com/tobymao/sqlglot/pull/5503) by [@georgesittas](https://github.com/georgesittas))*
|
|
33
|
+
|
|
34
|
+
### :wrench: Chores
|
|
35
|
+
- [`18b7d0f`](https://github.com/tobymao/sqlglot/commit/18b7d0fe19708d88b224770d844a8f6a74fe2aa7) - fix deprecated 'license' specification format *(PR [#5494](https://github.com/tobymao/sqlglot/pull/5494) by [@loonies](https://github.com/loonies))*
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## [v27.4.1] - 2025-07-27
|
|
39
|
+
### :bug: Bug Fixes
|
|
40
|
+
- [`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))*
|
|
41
|
+
|
|
42
|
+
|
|
4
43
|
## [v27.4.0] - 2025-07-25
|
|
5
44
|
### :boom: BREAKING CHANGES
|
|
6
45
|
- 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))*:
|
|
@@ -6332,3 +6371,5 @@ Changelog
|
|
|
6332
6371
|
[v27.3.0]: https://github.com/tobymao/sqlglot/compare/v27.0.1...v27.3.0
|
|
6333
6372
|
[v27.3.1]: https://github.com/tobymao/sqlglot/compare/v27.3.0...v27.3.1
|
|
6334
6373
|
[v27.4.0]: https://github.com/tobymao/sqlglot/compare/v27.3.1...v27.4.0
|
|
6374
|
+
[v27.4.1]: https://github.com/tobymao/sqlglot/compare/v27.4.0...v27.4.1
|
|
6375
|
+
[v27.5.0]: https://github.com/tobymao/sqlglot/compare/v27.4.1...v27.5.0
|
|
@@ -1,30 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 27.
|
|
3
|
+
Version: 27.5.1
|
|
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"]
|
|
@@ -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 = " "
|