[Dbix-class] Get generated SQL

Matt Lawrence matt.lawrence at ymogen.net
Wed Mar 12 15:37:33 GMT 2008


Mark Lawrence wrote:
> On Wed Mar 12, 2008 at 12:30:14PM +0000, Matt Lawrence wrote:
>   
>> Mark Lawrence wrote:
>>     
>>> You don't deal with binary (non-printable) data. Assuming this is method
>>> is for debugging purposes its usefulness is limited to pure text and
>>> won't work for mixed text/binary queries.
>>>  
>>>       
>> Specifying the data type for the bind columns should allow the driver to 
>> properly escape binary data where appropriate, albeit non-automatically.
>>     
>
> Yes, the escaping would make the data safe/suitable for the database,
> but that won't change the effects that binary data has on terminals.
>   

AFAIK, escaping for the database will also make the data printable. 
Perhaps this is not true for every driver, though.

>   
>> I guess I could add a failsafe to trap unprintable values still present 
>> after quote() and replace them with dummy values as in your previous 
>> example.
>>
>>    # Store quoted versions of the values
>>    my @bind_vals = map {
>>        $_ = $storage->dbh->quote($_->[1], shift @$datatypes);
>>        $_ = $storage->dbh->quote('*BINARY DATA*') if /[^[:print:]\n\t]/;
>>        $_;
>>    } @$bind;
>>
>>     
>
> You don't need to care about newlines or tabs (in fact if you
> specifically search for that you might not find what you are looking
> for), you just want to know if it contains non-printable data:
>
>    $_ = $storage->dbh->quote('*BINARY DATA*') if /[^[:print:]]/;
>   

Newlines and tabs won't mess up terminals and they are not matched by 
[:print:].

Matt




More information about the DBIx-Class mailing list