Re: PDO PgSQL: _pdo_pgsql_notice
| From: | Matteo Beccati | Date: | Wed, 07 Oct 2009 07:06:06 +0000 |
| Subject: | Re: PDO PgSQL: _pdo_pgsql_notice | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-45682@lists.php.net to get a copy of this message | ||
Christopher Jones wrote:
> Lukas Kahwe Smith wrote:
>>
>> On 07.10.2009, at 08:09, Matteo Beccati wrote:
>>
>>> Christopher Jones ha scritto:
>>>>
>>>> Could you use the new PG specific attribute to enable them
>>>> but make them output/handled by the existing error/exception
>>>> interface?
>>>
>>> That's what I originally thought. But there can be multiple notices
>>> triggered by a single query and they shouldn't make the query fail (i.e.
>>> throwing an exception would be awkward for a successful query).
>>
>>
>> MySQL has similar notices. Like when stuff gets truncated etc.
>> I also think that using the current "error modes" is probably not
>> ideal. Or rather these arent exception worthy, and they should
>> obviously not return false either.
>
> Is there a common interface that would suit both MySQL & Postgres usage?
From the user perspective I'd say yes. We can surely make generic
attributes and methods to deal with warnings/notices/dbms_output.
From what I could see, things get a bit more complicate on the code side:
PgSQL:
1. Set a notice processor callback
2. Clear the notice buffer before a query
3. Asynchronously buffer notices inside the callback
4. Set a no-op processor callback
MySQL:
1. Call mysql_warning_count() after a succesful query
2. if the result is non-zero, execute "SHOW WARNINGS" and fetch the results
Oracle:
1. Enable output buffering
2. Fetch the buffer after a successful query
3. Clear the buffer
4. Disable output buffering
Adding generic hooks/functions will also require a PDO API version bump.
Cheers
--
Matteo Beccati