develooper Front page | perl.dbi.users | Postings from January 2008

Using q() to define a query

Thread Next
From:
Colin Wetherbee
Date:
January 10, 2008 19:59
Subject:
Using q() to define a query
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.

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?

(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.)

Thanks.

Colin

Thread Next


Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About