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

Reply via email to