DBIx::XMLServer::TextField - text field type


DBIx-XMLServer documentation Contained in the DBIx-XMLServer distribution.

Index


Code Index:

NAME

Top

DBIx::XMLServer::TextField - text field type

DESCRIPTION

Top

This class implements the built-in text field type of DBIx::XMLServer. Only the where method is overridden from the base class.

where method

  $sql_expression = $text_field->where($condition);

This field type understands three types of condition: a string comparison with wildcards; a regular expression test; and a not-null test.

Condition: =wild*card?expression

If the first character of the condition is '=', then the rest of the condition is interpreted as a string, possible containing wildcards, to which the column is to be compared. First the string is escaped by the DBI system; then any characters '%' and '_' are escaped by prefixing with '\'; then the characters '*' and '?' are replaced by '%' and '_' respectively. The resulting SQL expression is one of the following:

  <field> = <string>
  <field> LIKE <string>

depending on whether the string contains any wildcards.

Condition: ~regex

If the first character of the condition is a tilde '~', then the rest of the condition is interpreted as a regular expression. It is escaped by the DBI system, and the SQL expression is

  <field> RLIKE <string> .

Condition: (empty)

If the condition is empty, then the SQL expression is

  <field> IS NOT NULL .

Condition: !

If the condition is the single character '!', then the SQL expression is

  <field> IS NULL .

SEE ALSO

Top

DBIx::XMLServer::Field

AUTHOR

Top

Martin Bright <martin@boojum.org.uk>

COPYRIGHT AND LICENCE

Top


DBIx-XMLServer documentation Contained in the DBIx-XMLServer distribution.
# $Id: TextField.pm,v 1.5 2005/05/26 15:01:04 mjb47 Exp $

package DBIx::XMLServer::TextField;
use XML::LibXML;
our @ISA = ('DBIx::XMLServer::Field');

sub where {
  my $self = shift;
  my $cond = shift;
  my $column = $self->select;
  return "$column IS NOT NULL" if $cond eq '';
  return "$column IS NULL" if $cond eq '!';
  for ($cond) {
    s/^=// && do {
      $_ = $self->{XMLServer}->{dbh}->quote($_);
      s/([%_])/\\$1/g; # Escape any SQL special characters
      return (tr/*?/%_/) ? # Turn wildcards into SQL ones
        "$column LIKE $_" : "$column = $_";
    };
    s/^~// && return "$column RLIKE " . $self->{XMLServer}->{dbh}->quote($_);
    /^$/ && return "$column IS NOT NULL";
    die "Unrecognised condition: $_\n";
  }
}

1;

__END__