X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FNoBindVars.pm;h=637e41140f833d154f009a4fce47a048a775c753;hb=6636ad53c7480e9546c2a0a3ecaa5a807874c819;hp=d58ccae15e54aa821f18478fb8d8a56a23e26816;hpb=17d750d79d6df0ba063f662aa732a1e7ec286a41;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI/NoBindVars.pm b/lib/DBIx/Class/Storage/DBI/NoBindVars.pm index d58ccae..637e411 100644 --- a/lib/DBIx/Class/Storage/DBI/NoBindVars.pm +++ b/lib/DBIx/Class/Storage/DBI/NoBindVars.pm @@ -50,20 +50,28 @@ sub _prep_for_execute { my @sql_part = split /\?/, $sql; my $new_sql; + my $alias2src = $self->_resolve_ident_sources($ident); + foreach my $bound (@$bind) { my $col = shift @$bound; - $col =~ s/^([^.]*)\.//; + my $name_sep = $self->_sql_maker_opts->{name_sep} || '.'; + my $quote_char = $self->_sql_maker_opts->{quote_char} || ''; + $quote_char = join '', @$quote_char if ref $quote_char eq 'ARRAY'; + + $col =~ s/[\Q${quote_char}\E]//g if $quote_char; + $col =~ s/^([^\Q${name_sep}\E]*)\Q${name_sep}\E//; my $alias = $1 || 'me'; - my $datatype = $self->_resolve_ident_sources($ident)->{$alias} - ->column_info($col)->{data_type}; + my $rsrc = $alias2src->{$alias}; + + my $datatype = $rsrc && $rsrc->column_info($col)->{data_type}; foreach my $data (@$bound) { - if(ref $data) { - $data = ''.$data; - } - $data = $self->_dbh->quote($data) if $self->should_quote_data_type($datatype, $data); + $data = ''.$data if ref $data; + + $data = $self->_dbh->quote($data) if $self->should_quote($datatype, $data); + $new_sql .= shift(@sql_part) . $data; } } @@ -72,7 +80,7 @@ sub _prep_for_execute { return ($new_sql, []); } -=head2 should_quote_data_type +=head2 should_quote This method is called by L for every column in order to determine if its value should be quoted or not. The arguments @@ -89,7 +97,7 @@ columns). The default method always returns true (do quote). =cut -sub should_quote_data_type { 1 } +sub should_quote { 1 } =head1 AUTHORS