PDO::FETCH_COLUMN | PDO::FETCH_GROUP with column parameter behavior
まだ誰も着手していません。
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
I believe the current code behavior of FETCH_COLUMN | FETCH_GROUP when specifying the column parameter is non-sensical. I believe it was not originally designed to work this way.
(And does not match the current documentation ... but that seems to be part of the story to how it got broken - see timeline below)
To see what I'm talking about, please refer to https://github.com/AllenJB/sandbox/blob/main/php-docs/pdo/fetch-modes/column/group.phpt (3v4l version: https://3v4l.org/2f7aV )
When you use FETCH_COLUMN, you can specify the additional column parameter to fetchAll() to tell PDO which column to retrieve values from. However, when you combine it with FETCH_GROUP, the column number is used for the grouping key and the values returned are always the first column.
This does not match my personal expected behavior, especially given that the column parameter can only be used with the COLUMN fetch mode - no other fetch mode allows you to influence how GROUP works in this way.
It also does not match the current documentation for PDOStatement::fetchAll()
You can see from the 3v4l link above that COLUMN | GROUP works as I expected in PHP <5.2.6.
I could find no tests in php-src for the combination of COLUMN | GROUP and specifying the column parameter.
The following is a timeline I put together for this:
2005-08-31: PDOStatement::fetchAll docs updated to include FETCH_GROUP, but the behavior described does not match the then actual behavior
2008-05-01: PHP 5.2.6 changes the behavior to somewhat match the docs (I believe the bug that triggered this is https://bugs.php.net/bug.php?id=44362 ) (if you read it one way, but this just ends up confusing because if you read it this way to column parameter has 2 different purposes at the same time)
2024-10-06: PDOStatement::fetchAll docs changed to describe the original < 5.2.6 behavior
PHP Version
8.4.13
Operating System
n/a
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
php-docs/pdo/fetch-modes/column/group.phpt の再現から始め、その出力を 3v4l の例と比較してください。PDOStatement::fetchAll() のドキュメントを読み、PDO の fetch 実装と FETCH_COLUMN および FETCH_GROUP の既存テストを調査してください。列とグループ化の意図された動作について合意され、回帰テストでカバーされ、一貫してドキュメント化されていれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- php
- 領域
- databases
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100