Named vs numbered SQL parameters
Lassi Kortela
(18 Sep 2019 08:48 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(18 Sep 2019 09:13 UTC)
|
Re: Named vs numbered SQL parameters
Lassi Kortela
(18 Sep 2019 09:35 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(18 Sep 2019 09:49 UTC)
|
Re: Named vs numbered SQL parameters
Lassi Kortela
(18 Sep 2019 10:10 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(18 Sep 2019 10:16 UTC)
|
Re: Named vs numbered SQL parameters
Lassi Kortela
(18 Sep 2019 10:30 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(18 Sep 2019 10:38 UTC)
|
Re: Named vs numbered SQL parameters Lassi Kortela (18 Sep 2019 10:50 UTC)
|
Re: Named vs numbered SQL parameters
Alaric Snell-Pym
(18 Sep 2019 10:39 UTC)
|
Re: Named vs numbered SQL parameters
Lassi Kortela
(19 Sep 2019 14:20 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(19 Sep 2019 14:53 UTC)
|
Re: Named vs numbered SQL parameters
Alaric Snell-Pym
(19 Sep 2019 16:05 UTC)
|
Re: Named vs numbered SQL parameters
John Cowan
(18 Sep 2019 22:36 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(19 Sep 2019 07:20 UTC)
|
Re: Named vs numbered SQL parameters
John Cowan
(19 Sep 2019 13:54 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(19 Sep 2019 14:04 UTC)
|
Re: Named vs numbered SQL parameters
Lassi Kortela
(19 Sep 2019 14:07 UTC)
|
Re: Named vs numbered SQL parameters
Peter Bex
(19 Sep 2019 14:19 UTC)
|
Re: Named vs numbered SQL parameters
Lassi Kortela
(19 Sep 2019 14:28 UTC)
|
Re: Named vs numbered SQL parameters
Alaric Snell-Pym
(19 Sep 2019 16:00 UTC)
|
>> Putting {} in the symbol names does look like deliberately shooting oneself >> in the foot :) > > Sure, but I'm not sure the API needs to take too much effort to prevent > people from doing it. That's what I meant to say: it's not a big deal either way :) >>> (query "SELECT $2, $3" 1 2 3) >>> >>> It won't give an error about $1 not being used > > Yeah, that's a bit awkward but it's no different from a procedure in a > programming language not using one of its positional arguments. It's a bit different in that the query and the parameters are given by the same party, whereas a procedure and its caller can be completely different. Arguably SQL queries can also be treated as library code and re-used, but that's risky without some higher-level wrapper to protect against accidental misuse. > You could use a sort of taint mechanism where you must wrap the SQL > strings in an object to ensure that it's been safely processed. But I > also think that makes the common case annoying to use. That may be a good safeguard. It's hard to say without an idea of the specifics. > The current API shouldn't try to do too much, IMO; we're just looking > for an abstraction over database drivers and abstracting away the surface > differences. I mean, in the Scheme base language itself we also don't > have a pathname abstraction for the file operations, even though > programmatically composing pathnames is tricky business and tends to > be done a *lot*. You're right. In the case of pathnames, they are simple enough that the heavy abstractions tend to cause constant pain with hardly any benefit. I hope the same isn't true for SQL DSLs ;-) Seriously though, I've used Roda in Ruby and it's a godsend. You can have a procedure that returns only a select clause, then other procedures that add different where clauses to it and stuff like that. It's all "purely functional" so you can easily build up a pattern language of queries for your app. > I'd say providing a safer way to write SQL is the job of a higher level > library. I agree. But I'd also claim that the combined set of all Scheme APIs should look like a big arrow pointing most people to the safer APIs :) So it's not a big deal if the low-level APIs look a bit ugly. Would you like to start drafting a higher-level DSL right away? It can be done concurrently with the low-level spec, and it will probably improve both specs if they have to take each other into account from the start... A DSL is a big undertaking that can be taken in many directions. We could start with something informal like a wiki and just try lots of different approaches rapidly.