Re: Using q() to define a query
- From: jonathan.leffler@xxxxxxxxx (Jonathan Leffler)
- Date: Thu, 10 Jan 2008 20:14:21 -0800
On Jan 10, 2008 7:59 PM, Colin Wetherbee <cww@xxxxxxxxxxxxxxxx> wrote:
Greetings.
I have a DBI (DBD::Pg) application I'm building in mod_perl. My queries
tend to look something like the following.
my $sql = q(SELECT departure_date, eq.name AS equipment,
dp.full_city AS departure_city, ap.full_city AS arrival_city,
ca.name AS carrier_name, number
FROM jsjourneys
FULL OUTER JOIN jscarriers AS ca ON jsjourneys.carrier = ca.id
FULL OUTER JOIN jsequipment AS eq ON jsjourneys.equipment = eq.id
JOIN jsports AS dp ON jsjourneys.departure_port = dp.id
JOIN jsports AS ap ON jsjourneys.arrival_port = ap.id
ORDER BY departure_date);
And, then, I execute them as follows.
$dbh->selectall_arrayref($sql, { Slice => {} });
Which works quite well.
However, I'm concerned about $sql because when I output it to Apache's
debug log, it looks like this:
[Fri Jan 11 03:49:09 2008] [debug] Log.pm(36): [client 192.168.171.80]
[JetSet] SELECT departure_date, eq.name AS equipment,\n
dp.full_city AS departure_city, ap.full_city AS arrival_city,\n
ca.name AS carrier_name, number\n FROM jsjourneys\n FULL OUTER
JOIN jscarriers AS ca ON jsjourneys.carrier = ca.id\n FULL OUTER
JOIN jsequipment AS eq ON jsjourneys.equipment = eq.id\n JOIN
jsports AS dp ON jsjourneys.departure_port = dp.id\n JOIN jsports
AS ap ON jsjourneys.arrival_port = ap.id\n ORDER BY departure_date
Notice the newline characters in there. If those were really in the
query, I can't imagine the database would run it, so I suppose they're
an artifact of the combination of using q() to quote my query and using
Apache's logger to output it.
If you're referring to the newlines in the $sql string - I'd be astonished
if the DBMS did not handle them OK. If you're referring to the \n notation
in the log output, I'd assume those are interpolated by the Apache logging
module.
All this leads up to a pretty simple question: is using q() to quote my
queries a bad thing, and/or will it cause trouble in the future?
It's fine...
(As an aside, how do you guys quote your queries? I find that for
anything longer than about 60 characters, q() and '' and everything else
start to look horribly inelegant.)
q{}; q%%; q[];
On occasion, I've done evil things like q"" and qq'' -- it seemed like a
good idea at the time.
Thanks.
Colin
--
Jonathan Leffler <jonathan.leffler@xxxxxxxxx> #include <disclaimer.h>
Guardian of DBD::Informix - v2007.0914 - http://dbi.perl.org
"Blessed are we who can laugh at ourselves, for we shall never cease to be
amused."
- Follow-Ups:
- Re: Using q() to define a query
- From: Colin Wetherbee
- Re: Using q() to define a query
- References:
- Using q() to define a query
- From: Colin Wetherbee
- Using q() to define a query
- Prev by Date: Using q() to define a query
- Next by Date: Re: Using q() to define a query
- Previous by thread: Using q() to define a query
- Next by thread: Re: Using q() to define a query
- Index(es):
Relevant Pages
|