DATE_ADD/DATE_SUB with a single argument raises AttributeError (BigQuery, MySQL, Doris, StarRocks)
メンテナーはふだん 1 日以内に返信
評価
調査の方向性
Start at build_date_delta_with_interval in the dialect module, which returns None when fewer than two args are passed, then follow it into Parser.validate_expression in parser.py where the None is dereferenced. Reproduce with sqlglot.parse_one("SELECT DATE_ADD(x)", read="bigquery") and compare against the DuckDB path that already raises a clean ParseError. Done means every listed dialect registration raises ParseError instead of AttributeError, with a test per dialect in the corresponding tests/dialects suite. Note an open pull request (#9105) already targets this, so coordinate before starting.
索引モデルが issue の本文から書いたものです。
説明
Fully reproducible code snippet
import sqlglot
sqlglot.parse_one("SELECT DATE_ADD(x)", read="bigquery")
# AttributeError: 'NoneType' object has no attribute 'error_messages'
The same applies to DATE_SUB, DATETIME_ADD/SUB, TIME_ADD/SUB and TIMESTAMP_ADD/SUB in BigQuery, DATE_ADD/DATE_SUB in MySQL, and the Doris/StarRocks registrations of the same builder.
Expected
A ParseError. The same input in DuckDB raises a clean ParseError; BigQuery DATE_DIFF(x) raises ParseError; and BigQuery DATE_SUB(x, 1) raises "ParseError: INTERVAL expression expected but got '1'".
Actual
The dialect builder build_date_delta_with_interval returns None when len(args) < 2, and Parser.validate_expression then dereferences None.error_messages (in parser.py), producing the AttributeError.
Checked against main at commit b294f7f.
Official Documentation
BigQuery DATE_ADD requires a date expression and an INTERVAL: https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date_add
MySQL DATE_ADD: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
Found by property-based testing (a no-crash property over mutated inputs drawn from sqlglot's own test corpus).
- 主要言語
- Python
- スター
- 9.8k
- フォーク
- 1.4k
- 平均マージ
- 13時間 19分
- マージ済み PR(30日)
- 243
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
tobymao/sqlglot のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 1 日以内に返信
-
SQLite: CAST(x AS JSON) is generated verbatim, which SQLite evaluates as a numeric cast対応中かも @Gowthamsuryagolla が今日担当しました。 オープン
難易度 3/5 半日 初心者へのやさしさ 32/100
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
メンテナーはふだん 1 日以内に返信
-
Optimizer drops parentheses for `NOT (<date> = DATE_TRUNC(...))`, changing query results対応中かも @parthdembla007 が今日担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 28/100
メンテナーはふだん 1 日以内に返信
-
BigQuery: region-qualified INFORMATION_SCHEMA reference is rewritten across transpile passes, gaining an invented alias対応中かも @ansh-rohilla が今日担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 28/100
メンテナーはふだん 1 日以内に返信
tobymao/sqlglot の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
alltheplaces/alltheplaces#20570 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
area:ci bug
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
catincloud-labs/dagster-dex#206 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
number_to_words raises ValueError with threshold= for ordinals ("12th") and comma-grouped strings ("1,000")対応中かも @hemtilva が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
providers security
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
agentbreeder/agentbreeder#1031 ·
メンテナーはふだん 1 日以内に返信