On Mon, 10 Dec 2007, Jamie Bullock wrote:
On Mon, 2007-12-10 at 12:18 -0500, Mathieu Bouchard wrote:
This almost *never* happens.
I take your point, but I think you are exaggerating slightly.
Not in this context. We're only looking at the average query; I don't even mean an actual query, but statistics about queries. If only 10% of them don't have arguments, then unless there's a huge difference in object count (which there is not), it doesn't make much of a difference on the total object count. And that is only supposing that you need something like an extra [bang] before your sql query to prevent [psql] from getting non-bang messages.
I just looked at the code for a database driven web app I worked on recently. It uses 30 queries, 3 of which have no variables. Out of these three only one doesn't 'overlap' with other queries and therefore can't be refactored. Maybe 1 in 30 is almost never?
Yes. to contrast this, 3% wouldn't be "almost never" if, for example, the issue was whether to support something at all, or not. In that case, if the cost of a workaround is 50x the wanted feature, or if a workaround is impossible, it can weigh a lot in the design priorities.
Good point! I think Hans' recent suggestion addresses the problem. It also occurs to me that for Postgres at least, we have the PREPARE statement, which addresses the optimisation and injection issues you have raised. Technically [psql] already supports PREPARE except that PREPARE uses the '$' character as its placeholder identifier, and '$1' can't be passed around as a symbol in Pd. I think it might be interesting to use the '?' notation currently under discussion as an interface to PREPARE though.
The '?' notation is either MySQL-specific or PerlDBI-specific or both. By PerlDBI I mean any database interface (in any language) following's Perl DBI package closely enough. I guess that if you use DBI-over-Postgres, then it replaces all ? by $ automatically.
$ alone can be used in pd as long as it is not followed by a digit, but I wouldn't encourage that, if it's not used in a [expr] way, because the use of '$' alone would prevent you from later supporting an [expr] syntax in a way compatible with yourself.
Using $f1 or $s1 in [expr] style, or perhaps $e1 to mean "any atom" (e stands for "element"), would be useful, though less required than the placeholder feature itself.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801, Montréal QC Canada