zenn.dev 4日前

「直近10件」のつもりで書いた ORDER BY date ASC LIMIT 10 が、最古10件を返していた

「直近10件」を意図したSQLが ORDER BY target_date ASC LIMIT 10 と書かれていたため、実際には最古10件を返す逆向きのバグとなっていた事例。行数がLIMIT以下のうちは正しく見え、本番でデータが増えてから発症するため発見が遅れた。修正はサブクエリで「選ぶ向き(DESC LIMIT)」と「見せる向き(ASC)」を分離し、さらにORDER BYが全順序になるようタイブレーク列(business_day_id)を追加。回帰テストはLIMITより多い行数を投入し「最古が含まれないこと」まで検証する必要があると指摘している。

「直近10件」を意図したSQLが ORDER BY target_date ASC LIMIT 10 と書かれていたため、実際には最古10件を返す逆向きのバグとなっていた事例。行数がLIMIT以下のうちは正しく見え、本番でデータが増えてから発症するため発見が遅れた。修正はサブクエリで「選ぶ向き(DESC LIMIT)」と「見せる向き(ASC)」を分離し、さらにORDER BYが全順序になるようタイブレーク列(business_day_id)を追加。回帰テストはLIMITより多い行数を投入し「最古が含まれないこと」まで検証する必要があると指摘している。
↗ 元記事を開く
duckdb.org 2026/08/20

DuckDB v2.0: Your Database Deserves a Better Parser

DuckDBはv2.0でPostgreSQL派生のYACC/Bisonパーサーを、PEG(Parsing Expression Grammar)ベースの独自パーサーに全面刷新した。LALR文法の拡張性の限界を解消しつつ、Python同様PEGを採用。パックラット構文解析でバックトラックによる指数関数的な処理時間増大を防ぎ、既存のAST・SQL方言(DuckSQL)との互換性も維持。今後は拡張機能によるトークナイザ・文法ルールの拡張も可能になり、パイプ構文(`|>`)などの新構文追加も容易になる。

DuckDBはv2.0でPostgreSQL派生のYACC/Bisonパーサーを、PEG(Parsing Expression Grammar)ベースの独自パーサーに全面刷新した。LALR文法の拡張性の限界を解消しつつ、Python同様PEGを採用。パックラット構文解析でバックトラックによる指数関数的な処理時間増大を防ぎ、既存のAST・SQL方言(DuckSQL)との互換性も維持。今後は拡張機能によるトークナイザ・文法ルールの拡張も可能になり、パイプ構文(`|>`)などの新構文追加も容易になる。
↗ 元記事を開く