Ejemplo n.º 1
0
 private function filterIsOrIsNot($operator, Select $select, $conditionSetName, $value)
 {
     // Don't attempt to filter if no value is available
     if (!$value) {
         return $select;
     }
     $quotedAlias = $select->quoteWithAlias($this->tableName, $this->columnName);
     $operator = self::OP_IS === $operator ? '=' : '!=';
     return $select->whereConditionSet($conditionSetName, "{$quotedAlias} {$operator} ?", $value);
 }
Ejemplo n.º 2
0
 private function filter($operator, Select $select, $conditionSetName, $value)
 {
     $quotedAlias = $select->quoteWithAlias($this->relationship->getSourceTable()->getTableName(), $this->relationship->getSourceColumnName());
     switch ($operator) {
         case self::OP_NOT_EMPTY:
         case self::OP_CONTAINS:
             $operator = 'IN';
             break;
         case self::OP_NOT_CONTAINS:
         case self::OP_EMPTY:
             $operator = 'NOT IN';
             break;
     }
     return $select->whereConditionSet($conditionSetName, "{$quotedAlias} {$operator} (?)", new Expr($this->relationship->getFilterSubquery($value)));
 }
Ejemplo n.º 3
0
 /**
  * Apply the filter to the supplied Select object.
  *
  * @param Select $select
  * @param string $conditionSetName
  * @param array $queryVars
  * @return Select
  * @throws InvalidOperator
  */
 public function apply(Select $select, $conditionSetName, array $queryVars)
 {
     $this->ensurePresenceOfRequiredQueryVars($queryVars);
     if ($this->isExpr()) {
         $expression = (string) $this->expr;
     } else {
         $expression = $select->quoteWithAlias($this->tableName, $this->columnName);
     }
     $op1 = trim($queryVars['operand1']);
     $op2 = trim($queryVars['operand2']);
     switch ($queryVars['comp']) {
         case static::OP_IS:
             if ('' === $op1) {
                 return $select;
             }
             return $select->whereConditionSet($conditionSetName, "{$expression} = ?", $op1);
         case static::OP_IS_BETWEEN:
             if ('' === $op1 && '' === $op2) {
                 return $select;
             } elseif ('' === $op1) {
                 return $select->whereConditionSet($conditionSetName, "{$expression} <= ?", $op2);
             } elseif ('' === $op2) {
                 return $select->whereConditionSet($conditionSetName, "{$expression} >= ?", $op1);
             } else {
                 if ($op1 > $op2) {
                     $op1Temp = $op1;
                     $op1 = $op2;
                     $op2 = $op1Temp;
                 }
                 $db = $select->getAdapter();
                 return $select->whereConditionSet($conditionSetName, sprintf("{$expression} BETWEEN %s AND %s", $db->quote($op1), $db->quote($op2)));
             }
         case static::OP_IS_LESS_THAN:
             if ('' === $op1) {
                 return $select;
             }
             return $select->whereConditionSet($conditionSetName, "{$expression} < ?", $op1);
         case static::OP_IS_MORE_THAN:
             if ('' === $op1) {
                 return $select;
             }
             return $select->whereConditionSet($conditionSetName, "{$expression} > ?", $op1);
         default:
             throw new InvalidOperator("{$queryVars['comp']} is not a valid operator for numeric filters.");
     }
 }
Ejemplo n.º 4
0
 /**
  * @todo Could use REVERSE() trick here, but we'd need to require at least PG 9.1.
  */
 private function filterEndsWith(Select $select, $conditionSetName, $value)
 {
     $quotedAlias = $select->quoteWithAlias($this->tableName, $this->columnName);
     $operator = $select->getAdapter()->getDriver()->getCaseInsensitiveLikeOperator();
     return $select->whereConditionSet($conditionSetName, "{$quotedAlias} {$operator} ?", '%' . $value);
 }