[DB-SIG] API suggestion: expose 'quote' method
Chris Cogdon
chris at cogdon.org
Tue Jun 3 11:39:24 EDT 2003
On Tuesday, Jun 3, 2003, at 00:23 US/Pacific, M.-A. Lemburg wrote:
> I don't buy that. By "quoting" you actually mean "binding" and you
> thus lose all the benefits of having the SQL separated from the
> data.
>
> The good thing about binding parameters is that the user
> does *not* have to worry about quoting (plus it usually buys
> a performance gain for next to nothing).
>
> Of course, if some APIs think it's worth exposing such a quote
> function, they are free to do so. It shouldn't be required, though.
Okay... let me paraphrase your argument to see if I got things straight.
Exposing the quoting mechanism would make sense on APIs for DBMSes that
require a single SQL string be passed. However, some DMBSes use a
different query passing mechanism, where the SQL query with embedded
'?' marks (or whatever) and parameters in binary format are passed
separately. While somewhat more complicated, this is a performance gain
as the DMBS query passer does not need to parse the parameters, nor
does the application need to convert them into a string.
For these types of DMBSs, quoting and binding are different operations.
For things like PostgreSQL, they're the same.
Is that correct?
Now, my counter-argument :)
I would suspect that these DMBSes still have a way of representing any
literal value inside the SQL string itself. For example:
cur.execute ( "select * from employee where name like ? and
type='manager'", name_criteria )
If not, I would then have to break out 'manager' into a parameter just
to be passed to the DMBS. Now, if this is true, then the DMBS has a
quoting convention that I believe should be exposed. There are many
applications, such as the one I described previously, where this would
be useful. Yes, it lowers performance somewhat, but the alternative is
to jump through a lot of hoops to get the separated string and
parameters to the 'execute' method, or use a quoting function external
to the API (which, being separate from the API layer, is error-prone).
I'm suggesting that we make this part of the API (2.1, perhaps) so that
there's something there my application can depend on. I believe it's an
important part of dealing with the DMBS, and should be part of the
specs/requirements.
--
("`-/")_.-'"``-._ Chris Cogdon <chris at cogdon.org>
. . `; -._ )-;-,_`)
(v_,)' _ )`-.\ ``-'
_.- _..-_/ / ((.'
((,.-' ((,/ fL
More information about the DB-SIG
mailing list