App-DBBrowser

 view release on metacpan or  search on metacpan

lib/App/DBBrowser/Auxil.pm  view on Meta::CPAN

    elsif ( $sf->{o}{G}{qualified_table_name} ) {
        @idx = ( 1, 2 );
    }
    else {
        @idx = ( 2 );
    }
    if ( $sf->{o}{G}{quote_tables} ) {
        return $sf->qualified_identifier( $sf->__quote_identifiers( @{$table_info}[ @idx ] ) );
    }
    else {
        return $sf->qualified_identifier( @{$table_info}[@idx] );
    }
}


sub quote_table {
    my ( $sf, $table ) = @_;
    if ( $sf->{o}{G}{quote_tables} ) {
        ( $table ) = $sf->__quote_identifiers( $table );
    }
    return $table;
}


sub quote_column {
    my ( $sf, $column ) = @_;
    if ( $sf->{o}{G}{quote_columns} ) {
        ( $column ) = $sf->__quote_identifiers( $column );
    }
    return $column;
}


sub quote_cols {
    my ( $sf, $cols ) = @_;
    if ( $sf->{o}{G}{quote_columns} ) {
        $cols = [ $sf->__quote_identifiers( @$cols ) ];
    }
    return $cols;
}


sub quote_alias { ##
    my ( $sf, $alias ) = @_;
    #if ( $sf->{o}{G}{quote_aliases} ) {
    if ( $sf->{o}{G}{quote_columns} ) {
        ( $alias ) = $sf->__quote_identifiers( $alias );
    }
    return $alias;
}


sub unquote_identifier {
    my ( $sf, $identifier ) = @_;
    my $qc = quotemeta( $sf->{d}{identifier_quote_char} );
    $identifier =~ s/$qc(?=(?:$qc$qc)*(?:[^$qc]|\z))//g;
    return $identifier;
}


sub quote_if_not_numeric {
    my ( $sf, $value ) = @_;
    if ( looks_like_number $value ) {
        return $value;
    }
    else {
        return $sf->{d}{dbh}->quote( $value );
    }
}


sub unquote_constant {
    my ( $sf, $constant ) = @_;
    return if ! defined $constant;
    if ( $constant =~ /^'(.*)'\z/ ) {
        $constant = $1;
        if ( $sf->{i}{dbms} =~ /^(?:mysql|MariaDB)\z/ ) {
            $constant =~ s/\\(.)/$1/g;
        }
        else {
            $constant =~ s/''/'/g;
            #$constant =~ s/'(?=(?:'')*(?:[^']|\z))//g;
        }
    }
    return $constant;
}


sub regex_quoted_literal {
    my ( $sf ) = @_;
    if ( $sf->{i}{dbms} =~ /^(?:mysql|MariaDB)\z/ ) {
        return qr/(?<!')'(?:[^\\']|\\'|\\\\)*'(?!')/;
    }
    else {
        return qr/(?<!')'(?:[^']|'')*'(?!')/;
    }
}


sub regex_quoted_identifier {
    my ( $sf ) = @_;
    my $iqc = $sf->{d}{identifier_quote_char};
    return "$iqc(?:[^$iqc]|$iqc$iqc)+$iqc";
}


sub normalize_space_in_stmt {
    my ( $sf, $stmt ) = @_;
    my $quoted_literal = $sf->regex_quoted_literal();
    my $iqc = $sf->{d}{identifier_quote_char};
    my $quoted_identifier = $sf->regex_quoted_identifier();
    my $split_rx = qr/ ( $quoted_identifier | $quoted_literal ) /x;
    $stmt =~ s/^\s+|\s+\z//g;
    $stmt = join '', map {
        if ( ! /^[$iqc']/ ) { s/\s+/ /g; s|\(\s|(|; s|\s\)|)| };
        $_
    } split $split_rx, $stmt;
    return $stmt;
}




( run in 2.038 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )