---
name: "SQL::Statement::Operation"
section: "3pm"
platform: "linux"
package: "libsql-statement-perl"
version: "1.414-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SQL::Statement::Operation"
---

# SQL::Statement::Operation(3pm)

base class for all operation terms

## NAME

SQL::Statement::Operation - base class for all operation terms

## SYNOPSIS

```
  # create an operation with an SQL::Statement object as owner, specifying
  # the operation name (for error purposes), the left and the right
  # operand
  my $term = SQL::Statement::Operation->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation is an abstract base class providing the interface for all operation terms.

## INHERITANCE

```
  SQL::Statement::Operation
  ISA SQL::Statement::Term
```

## METHODS

### new

Instantiates new operation term.

### value

Return the result of the operation of the term by calling operate

### operate

*Abstract* method which will do the operation of the term. Must be overridden by derived classes.

### op

Returns the name of the executed operation.

### left

Returns the left operand (if any).

### right

Returns the right operand (if any).

### DESTROY

Destroys the term and undefines the weak reference to the owner as well as the stored operation, the left and the right operand.

## NAME

SQL::Statement::Operation::Neg - negate operation

## SYNOPSIS

```
  # create an <not> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and B<no> right operand
  my $term = SQL::Statement::Neg->new( $owner, $op, $left, undef );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Neg

## INHERITANCE

```
  SQL::Statement::Operation::Neg
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Return the logical negated value of the left operand.

## NAME

SQL::Statement::Operation::And - and operation

## SYNOPSIS

```
  # create an C<and> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::And->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::And implements the logical `"and"` operation between two terms.

## INHERITANCE

```
  SQL::Statement::Operation::And
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Return the result of the logical `"and"` operation for the values of the left and right operand.

## NAME

SQL::Statement::Operation::Or - or operation

## SYNOPSIS

```
  # create an C<or> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Or->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Or implements the logical `"or"` operation between two terms.

## INHERITANCE

```
  SQL::Statement::Operation::Or
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Return the result of the logical `"or"` operation for the values of the left and right operand.

## NAME

SQL::Statement::Operation::Is - is operation

## SYNOPSIS

```
  # create an C<is> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Is->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Is supports: `"IS NULL"`, `"IS TRUE"` and `"IS FALSE"`. The right operand is always evaluated in boolean context in case of `"IS TRUE"` and `"IS FALSE"`. `"IS NULL"` returns *true* even if the left term is an empty string (`''`).

## INHERITANCE

```
  SQL::Statement::Operation::Is
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Returns true when the left term is null, true or false - based on the requested right value.

## NAME

SQL::Statement::Operation::ANSI::Is - is operation

## SYNOPSIS

```
  # create an C<is> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Is->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::ANSI::Is supports: `"IS NULL"`, `"IS TRUE"` and `"IS FALSE"`. The right operand is always evaluated in boolean context in case of `"IS TRUE"` and `"IS FALSE"`. `"IS NULL"` returns *true* if the right term is not defined, *false* otherwise.

## INHERITANCE

```
  SQL::Statement::Operation::Is
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Returns true when the left term is null, true or false - based on the requested right value.

## NAME

SQL::Statement::Operation::Contains - in operation

## SYNOPSIS

```
  # create an C<in> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Contains->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Contains expects the right operand is an array of SQL::Statement::Term instances. It checks whether the left operand is in the list of the right operands or not like:

```
  $left->value($eval) ~~ map { $_->value($eval) } @{$right}
```

## INHERITANCE

```
  SQL::Statement::Operation::Contains
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Returns true when the left term is equal to any of the right terms

## NAME

SQL::Statement::Operation::Between - between operation

## SYNOPSIS

```
  # create an C<between> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Between->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Between expects the right operand is an array of 2 SQL::Statement::Term instances. It checks whether the left operand is between the right operands like:

```
     ( $left->value($eval) >= $right[0]->value($eval) )
  && ( $left->value($eval) <= $right[1]->value($eval) )
```

## INHERITANCE

```
  SQL::Statement::Operation::Between
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Returns true when the left term is between both right terms

## NAME

SQL::Statement::Operation::Equality - abstract base class for comparisons

## SYNOPSIS

```
  # create an C<equality> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Equality->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Equality implements compare operations between two terms - choosing either numerical comparison or string comparison, depending whether both operands are numeric or not.

## INHERITANCE

```
  SQL::Statement::Operation::Equality
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Return the result of the comparison.

### numcmp

*Abstract* method which will do the numeric comparison of both terms. Must be overridden by derived classes.

### strcmp

*Abstract* method which will do the string comparison of both terms. Must be overridden by derived classes.

## NAME

SQL::Statement::Operation::Equal - implements equal operation

## SYNOPSIS

```
  # create an C<equal> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Equal->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Equal implements compare operations between two numbers and two strings.

## INHERITANCE

```
  SQL::Statement::Operation::Equal
  ISA SQL::Statement::Operation::Equality
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### numcmp

Return true when `"$left == $right"`

### strcmp

Return true when `"$left eq $right"`

## NAME

SQL::Statement::Operation::NotEqual - implements not equal operation

## SYNOPSIS

```
  # create an C<not equal> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::NotEqual->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::NotEqual implements negated compare operations between two numbers and two strings.

## INHERITANCE

```
  SQL::Statement::Operation::NotEqual
  ISA SQL::Statement::Operation::Equality
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### numcmp

Return true when `"$left != $right"`

### strcmp

Return true when `"$left ne $right"`

## NAME

SQL::Statement::Operation::Lower - implements lower than operation

## SYNOPSIS

```
  # create an C<lower than> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Lower->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Lower implements lower than compare operations between two numbers and two strings.

## INHERITANCE

```
  SQL::Statement::Operation::Lower
  ISA SQL::Statement::Operation::Equality
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### numcmp

Return true when `"$left < $right"`

### strcmp

Return true when `"$left lt $right"`

## NAME

SQL::Statement::Operation::Greater - implements greater than operation

## SYNOPSIS

```
  # create an C<greater than> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Greater->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Greater implements greater than compare operations between two numbers and two strings.

## INHERITANCE

```
  SQL::Statement::Operation::Greater
  ISA SQL::Statement::Operation::Equality
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### numcmp

Return true when `$left ` `$right`\>

### strcmp

Return true when `"$left gt $right"`

## NAME

SQL::Statement::Operation::LowerEqual - implements lower equal operation

## SYNOPSIS

```
  # create an C<lower equal> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::LowerEqual->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::LowerEqual implements lower equal compare operations between two numbers and two strings.

## INHERITANCE

```
  SQL::Statement::Operation::LowerEqual
  ISA SQL::Statement::Operation::Equality
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### numcmp

Return true when `"$left <= $right"`

### strcmp

Return true when `"$left le $right"`

## NAME

SQL::Statement::Operation::GreaterEqual - implements greater equal operation

## SYNOPSIS

```
  # create an C<greater equal> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::GreaterEqual->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::GreaterEqual implements greater equal compare operations between two numbers and two strings.

## INHERITANCE

```
  SQL::Statement::Operation::GreaterEqual
  ISA SQL::Statement::Operation::Equality
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### numcmp

Return true when `$left `= `$right`\>

### strcmp

Return true when `"$left ge $right"`

## NAME

SQL::Statement::Operation::Regexp - abstract base class for comparisons based on regular expressions

## SYNOPSIS

```
  # create an C<regexp> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Regexp->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Regexp implements the comparisons for the `"LIKE"` operation family.

## INHERITANCE

```
  SQL::Statement::Operation::Regexp
  ISA SQL::Statement::Operation
    ISA SQL::Statement::Term
```

## METHODS

### operate

Return the result of the comparison.

### right

Returns the regular expression based on the right term. The right term is expected to be constant - so `"a LIKE b"` in not supported.

### regexp

*Abstract* method which must return a regular expression (`"qr//"`) from the given string.  Must be overridden by derived classes.

## NAME

SQL::Statement::Operation::Like - implements the like operation

## SYNOPSIS

```
  # create an C<like> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Like->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Like is used to the comparisons for the `"LIKE"` operation.

## INHERITANCE

```
  SQL::Statement::Operation::Like
  ISA SQL::Statement::Operation::Regexp
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### regexp

Returns `"qr/^$right$/s"`

## NAME

SQL::Statement::Operation::Clike - implements the clike operation

## SYNOPSIS

```
  # create an C<clike> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::Clike->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::Clike is used to the comparisons for the `"CLIKE"` operation.

## INHERITANCE

```
  SQL::Statement::Operation::Clike
  ISA SQL::Statement::Operation::Regexp
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### regexp

Returns `"qr/^$right$/si"`

## NAME

SQL::Statement::Operation::RLike - implements the rlike operation

## SYNOPSIS

```
  # create an C<rlike> operation with an SQL::Statement object as owner,
  # specifying the operation name, the left and the right operand
  my $term = SQL::Statement::RLike->new( $owner, $op, $left, $right );
  # access the result of that operation
  $term->value( $eval );
```

## DESCRIPTION

SQL::Statement::Operation::RLike is used to the comparisons for the `"RLIKE"` operation.

## INHERITANCE

```
  SQL::Statement::Operation::RLike
  ISA SQL::Statement::Operation::Regexp
    ISA SQL::Statement::Operation
      ISA SQL::Statement::Term
```

## METHODS

### regexp

Returns `"qr/$right$/s"`

## AUTHOR AND COPYRIGHT

Copyright (c) 2009-2020 by Jens Rehsack: rehsackATcpan.org

All rights reserved.

You may distribute this module under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
