DBIx::SQLEngine::Criteria::Comparison - Superclass for comparisons


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

Index


Code Index:

NAME

Top

DBIx::SQLEngine::Criteria::Comparison - Superclass for comparisons

SYNOPSIS

Top

  my $crit = DBIx::SQLEngine::Criteria::ComparisonSubclass->new( $key, $value );




DESCRIPTION

Top

DBIx::SQLEngine::Criteria::Comparison objects provide a structured representation of certain simple kinds of SQL criteria clauses, those of the form column_or_expression comparison_operator comparison_value.

Each Criteria::Comparison object is implemented in the form of blessed arrayref, with two items in the array. The first is the column name (or SQL expression) to be compared against, and the second is the comparison value. The type of comparison operator to use is indicated by which subclass of Criteria::Comparison the object is blessed into.

The comparison value is assumed by default to be a literal string or numeric value, and uses parameter substitution to avoid having to deal with quoting. If you actually want to compare against another column or expression, pass a reference to the column name or expression string. For example, to select records where first_name = last_name, you could use:

  DBIx::SQLEngine::Criteria::Equality->('first_name', \'last_name');

REFERENCE

Top

Constructor

new ( $key, $value ) : $Comparison

Constructor.

Content Access

expr () : $fieldname
expr ( $fieldname )

Accessor.

compv () : $comparsion_value
compv ( $comparsion_value )

Accessor.

Evaluation

sql_comparator () : $operator

Returns operator associated with this criteria, such as "=" or "like".

sql_where () : $sql_where_expression

Generates SQL criteria expression.

Automatically converts "= NULL" to "IS NULL".

SEE ALSO

Top

See DBIx::SQLEngine::Criteria and DBIx::SQLEngine::Criteria::Comparison for more information on using these objects.

See DBIx::SQLEngine for the overall interface and developer documentation.

See DBIx::SQLEngine::Docs::ReadMe for general information about this distribution, including installation and license information.


DBIx-SQLEngine documentation Contained in the DBIx-SQLEngine distribution.
package DBIx::SQLEngine::Criteria::Comparison;
@ISA = 'DBIx::SQLEngine::Criteria';
use strict;

########################################################################

sub new {
  my $package = shift;
  bless [ @_ ], $package;
}


########################################################################

use Class::MakeMethods (
  'Standard::Array:scalar' => 'expr',
  'Standard::Array:scalar' => 'compv',
);

########################################################################

use Class::MakeMethods (
  'Template::Class:string' => 'sql_comparator',
);

sub sql_where {
  my $self = shift;
  my $expr = $self->expr;
  ( length $expr ) or Carp::confess("Expression is missing or empty");
  my $compv = $self->compv;
  # 2002-11-02 Patch from Michael Kroell, University of Innsbruck
  #( defined $compv ) or Carp::confess("Comparison value is missing or empty");
  my $cmp = $self->sql_comparator;
  ( length $cmp ) or Carp::confess("sql_comparator is missing or empty");
  
  # 2002-11-02 Based on patch from Michael Kroll, University of Innsbruck
  if ( ! defined($compv) ) {
    if ( $cmp eq '=' ) { $cmp = 'IS' }
    join(' ', $expr, $cmp, 'NULL' );
  } elsif ( ! ref($compv) ) {
    join(' ', $expr, $cmp, '?' ), $compv;
  } elsif ( ref($compv) eq 'SCALAR' ) {
    join(' ', $expr, $cmp, $$compv );
  } else {
    Carp::confess("Can't use '$compv' as a comparison value");
  }
}

########################################################################