示例#1
0
 /**
  * @throws WrongArgumentException
  * @return LogicalChain
  **/
 public static function getOpenRange($left, $right, $min = null, $max = null)
 {
     Assert::isFalse($min === null && $max === null, 'how can i build logic from emptyness?');
     if ($min !== null) {
         $min = new DBValue($min);
     }
     if ($max !== null) {
         $max = new DBValue($max);
     }
     $chain = new LogicalChain();
     if ($min !== null && $max !== null) {
         $chain->expOr(Expression::orBlock(Expression::andBlock(Expression::notNull($left), Expression::notNull($right), Expression::expOr(Expression::between($min, $left, $right), Expression::between($left, $min, $max))), Expression::andBlock(Expression::isNull($left), Expression::ltEq($min, $right)), Expression::andBlock(Expression::isNull($right), Expression::ltEq($left, $max)), Expression::andBlock(Expression::isNull($left), Expression::isNull($right))));
     } elseif ($min !== null && $max === null) {
         $chain->expOr(Expression::orBlock(Expression::andBlock(Expression::notNull($right), Expression::ltEq($min, $right)), Expression::isNull($right)));
     } elseif ($max !== null && $min === null) {
         $chain->expOr(Expression::orBlock(Expression::andBlock(Expression::notNull($left), Expression::ltEq($left, $max)), Expression::isNull($left)));
     }
     return $chain;
 }