Re: [RFC] PDO Float Type
| From: | Matteo Beccati | Date: | Tue, 25 Apr 2017 10:06:57 +0000 |
| Subject: | Re: [RFC] PDO Float Type | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-98873@lists.php.net to get a copy of this message | ||
Hi Adam,
On 24/04/2017 19:46, Adam Baratz wrote:
> I think we're talking about different things. I'm talking about binding
> parameters. It seems like you're talking about fetching column data. You
> are correct that fixed-precision values are typically fetched as
> strings. One thing to note is that this can be a choice made by the PDO
> driver extension. With libpq, PQgetvalue[1] returns all column data as
> strings. If you look at pgsql_stmt_get_col, you'll see extra logic to
> cast to a zend_bool or zend_long. Other drivers, like pdo_odbc, fetch
> everything as a string.
Yes, I brought fetching on the table because we should try to be
consistent. If numerics are received as strings, they shouldn't be bound
as PARAM_FLT, unless the user is willing to potentially lose some
information.
> I wrote in the RFC how each API works. They all lack this ability,
> because they're all limited by the C type system. This is why I was
> arguing to merge floats and fixed-precision types. It's a difference
> that doesn't exist when sending data to the database. I'll admit I
> wasn't paying a lot of attention to retrieving data. There's a lot of
> variability between PDO drivers and I didn't want to complicate the
> scope of the RFC.
Again, there's no limit coming from the C type system: no one is forcing
you to cast fixed precision to floating point. In fact it is the
opposite: they are normally sent as strings and optionally using the
internal (non-float) representation.
> If I can summarize our underlying arguments, mine is that PDO parameters
> should correspond to zval types and C types, yours is that PDO
> parameters should correspond to database column types. A lot of PDO
> internals tend to assume the former, even if the latter is the
> conventional wisdom.
If anything, the database libraries will be using their SQL types system
as a reference, specifying what is the C-type you can use to send or
retrieve data. On the other hand you argue that we should bring
low-level decisions to PDO users.
> Honestly, I'm not very attached to having a single type for floats and
> fixed-precision. If this RFC doesn't pass, which it doesn't look like it
> will, I would be just as happy to cut fixed-precision values out of it.
> Though I don't have a good handle on how many of the people who voted
> "no" would change their minds if fixed-precision was simply left out of
> scope.
I don't know, but I wouldn't as I've already explained a number of
times. If anything, what I see is that very few care.
Cheers
--
Matteo Beccati
Development & Consulting - http://www.beccati.com/