From: Trevor D. (Twylite) <tw...@cr...> - 2012-12-07 11:35:37
|
Hi, On 2012/12/07 01:01 PM, Donal K. Fellows wrote: > On 07/12/2012 10:55, Trevor Davel (Twylite) wrote: >> We would be quite happy with (1), although it is a fairly myopic change >> that may not address future problems with drivers needing literal >> characters where the tokenizer gives them special meaning. > > That would indeed be problematic with SQLite, as that uses @foo to mean > a bound variable that is treated as binary instead of as text. At the moment in TDBC the '@' is interpreted by the TDBC tokenizer, which discards the '@' and treats the name in the same way as ':' and '$'. Removing this behaviour would mean that TDBC has no special treatment of '@', and allows the underlying driver or database to apply its native interpretation (which is precisely what we need to support SQL Server DDL). That's not a problem for SQLite per se -- in fact it exposes SQLite functionality that is currently hidden by TDBC. It is a problem for anyone who currently uses TDBC and uses '@' rather than ':' or '$' for host parameter substitution. When I discussed this with KBK on IRC a while back, I seem to recall him saying that '@' wasn't widely used, and perhaps the TIP was wrong to include it (don't quote me on this; I can't find the logs), but didn't want to remove it without looking into the (undescribed) SQLite interaction. If this is the case then the spec and implementation could be amended before 8.6.0 release, with little impact. The only technical problem I can see here is a possible implementation issue -- is the tdbc SQLite driver called in a context that it can reliably resolve @var?. Regards, Twylite |