On Friday 31 August 2007 14:03, Martin Simmons wrote: > >>>>> On Thu, 30 Aug 2007 23:30:37 +0200, Kern Sibbald said: > > > > On Thursday 30 August 2007 22:12, Martin Simmons wrote: > > > >>>>> On Thu, 30 Aug 2007 14:57:27 -0400, Dan Langille said: > > > > > > > > It seems that PQescapeStringConn is insufficient to avoid the warning > > > > "WARNING: nonstandard use of escape in a string literal". I'm > > > > running the regression tests. > > > > > > > > a-file-with-a-slash\-in-itlocalhost-dir > > > > becomes > > > > a-file-with-a-slash\\-in-itlocalhost-dir > > > > > > > > regress=# SELECT FilenameId FROM Filename WHERE Name='a-file-with-a- > > > > slash\\-in-itlocalhost-dir'; > > > > WARNING: nonstandard use of \\ in a string literal > > > > LINE 1: SELECT FilenameId FROM Filename WHERE Name='a-file-with-a- > > > > sl... > > > > ^ > > > > HINT: Use the escape string syntax for backslashes, e.g., E'\\'. > > > > filenameid > > > > ------------ > > > > (0 rows) > > > > > > > > regress=# > > > > > > > > Any ideas how to use the E'\\' syntax? > > > > > > > > FYI, this works: > > > > > > > > regress=# SELECT FilenameId FROM Filename WHERE Name='a-file-with-a- > > > > slash' || E'\\' || '-in-itlocalhost-dir'; > > > > filenameid > > > > ------------ > > > > (0 rows) > > > > > > > > regress=# > > > > > > > > I'd rather use PostgreSQL functions instead of rolling my own. > > > > Suggestions? Ideas? > > > > > > Not quite sure what you mean by "how to use". Was that select > > > statement supposed to return 0 rows? > > > > > > If you mean how to modify Bacula to use E'\\' syntax, then > > > db_escape_string will probably have to change to create the complete > > > E'...' string instead of just returning the ... part. This requires > > > changes to all of the callers (which currently add their own quotes) > > > and to the other db backends to return '...' as well. > > > > Yes, exactly. If I am not mistaken, I mentioned the above to Dan in one > > of the older emails we had on this subject. > > > > > The memory allocation for the resulting string > > > will need to be fixed and is probably best done by db_escape_string > > > itself, with appropriate freeing by the caller. > > > > That is forbidden or highly discouraged within Bacula code as it is IMO a > > formula for guaranteeing that there will be memory leaks at some point. > > The Bacula way of handling this is to allocate a string in the calling > > code that can be resized in the db_escape_string routine, if necessary, > > as is done in *many* other places within Bacula. > > Yes, that's what I meant really, but the caller should not even try to > allocate what it thinks is the right size because only db_escape_string > knows that.
Yes, I'm not really pleased with SQL vendor's routines. They all say that you must at least have 2*len+1 bytes in the output buffer, where len is the length of the original string. > > > > Some hack will have to be done for the substitutions in the query.sql > > > file. > > > > More likely we will separate query.sql into PostgreSQL "standard" SQL, > > and query.sql real world SQL separate files. > > It would be nice to avoid that. The meaning of % could be modified: > > %q1 -> quoted and escaped > %1 -> not quoted or escaped > > The uses of '%1' would then be changed to %q1 etc. The uses %1 for jobids > etc (which should not be passed to db_escape_string anyway) would remain > the same. Yes, that's a nice solution. However, in other cases we already have some quieries where MySQL and PostgreSQL differ in query.sql so we already have a problem. Someday, I imagine either I will fix it or someone will send me a patch :-) > > __Martin ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Bacula-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bacula-devel
