-
Notifications
You must be signed in to change notification settings - Fork 69
Description
How should we handle queries that use the same name column name multiple times?
-- Bob wins
SELECT "Alice" AS name, "Bob" AS name
-- Bob wins
SELECT "Alice" AS name, user.* FROM (SELECT "Bob" AS name) AS user
-- Alice wins
SELECT user.*, "Alice" AS name FROM (SELECT "Bob" AS name) AS user
At the moment, the value from the last occurrence wins because we expose each row as an associative array (later values with the same key overwrite previous values).
Technically, the protocol exposes a list of all values, so we do have access to all values inside the protocol implementation, but do not currently expose this to the user. Other projects expose a "fetch mode" to control whether the data should be exposed as a plain list (PDO::FETCH_NUM
) or as an associative array (PDO::FETCH_ASSOC
) or object (PDO::FETCH_OBJ
/ PDO::FETCH_CLASS
), etc. (https://www.php.net/manual/en/pdostatement.fetch.php)
The current behavior can be seen as inconvenient or inconsistent, given that QueryResult::$resultFields
contains a list of all(!) column names, yet QueryResult::$resultRows[0]
contains an associative array with unique column names only. If you run any of the above queries with the examples/01-query.php
script, you'll see that it reports a table with 2 header columns, but only reports one value per row.
Providing this kind of API isn't too much work, but I wonder how big of a problem this actually is and whether this actually warrants increasing our API surface?