/** * @param SQLTokenIterator $tokens * @return Operator */ protected function parseCondition(SQLTokenIterator $tokens) { switch (true) { case $tokens->seekTokenText('='): return Operator::OP_EQUAL(); case $tokens->seekTokenText('<=>'): return Operator::OP_EQUAL_NULLSAFE(); case $tokens->seekTokenText('!='): return Operator::OP_NOT_EQUAL(); case $tokens->seekTokenText('<>'): return Operator::OP_LESSERGREATER(); case $tokens->seekTokenText('<='): return Operator::OP_LESSEREQUAL(); case $tokens->seekTokenText('<'): return Operator::OP_LESSER(); case $tokens->seekTokenText('>='): return Operator::OP_GREATEREQUAL(); case $tokens->seekTokenText('>'): return Operator::OP_GREATER(); case $tokens->seekTokenText('+'): return Operator::OP_ADDITION(); case $tokens->seekTokenText('-'): return Operator::OP_SUBTRACTION(); case $tokens->seekTokenText('*'): return Operator::OP_MULTIPLICATION(); case $tokens->seekTokenText('/'): return Operator::OP_DIVISION(); case $tokens->seekTokenNum(SqlToken::T_IS()): if ($tokens->seekTokenNum(SqlToken::T_NOT())) { return Operator::OP_IS_NOT(); } else { return Operator::OP_IS(); } break; case $tokens->seekTokenNum(SqlToken::T_AND()): return Operator::OP_AND(); case $tokens->seekTokenNum(SqlToken::T_OR()): return Operator::OP_OR(); case $tokens->seekTokenNum(SqlToken::T_BETWEEN(), TokenIterator::NEXT, SqlToken::T_NOT()): if ($tokens->isTokenNum(SqlToken::T_NOT(), TokenIterator::PREVIOUS)) { return Operator::OP_NOT_BETWEEN(); } else { return Operator::OP_BETWEEN(); } default: return null; } }
public function resolveCondition(ConditionJob $conditionJob, ExecutionContext $context) { $firstValueUnresolved = $conditionJob->getFirstParameter(); $lastValueUnresolved = $conditionJob->getLastParameter(); $firstValue = $this->resolveValue($firstValueUnresolved, $context); $lastValue = $this->resolveValue($lastValueUnresolved, $context); switch ($conditionJob->getOperator()) { case Operator::OP_ADDITION(): return $firstValue + $lastValue; case Operator::OP_SUBTRACTION(): return $firstValue - $lastValue; case Operator::OP_MULTIPLICATION(): return $firstValue * $lastValue; case Operator::OP_DIVISION(): return $firstValue / $lastValue; case Operator::OP_AND(): return $firstValue && $lastValue; case Operator::OP_OR(): return $firstValue || $lastValue; case Operator::OP_GREATER(): return $firstValue > $lastValue; case Operator::OP_GREATEREQUAL(): return $firstValue >= $lastValue; case Operator::OP_BETWEEN(): return; case Operator::OP_NOT_BETWEEN(): return; case Operator::OP_EQUAL(): return $firstValue === $lastValue; case Operator::OP_NOT_EQUAL(): return $firstValue !== $lastValue; case Operator::OP_EQUAL_NULLSAFE(): return; case Operator::OP_LESSER(): return $firstValue < $lastValue; case Operator::OP_LESSEREQUAL(): return $firstValue <= $lastValue; case Operator::OP_LESSERGREATER(): return true; case Operator::OP_IS(): return $firstValue === $lastValue; case Operator::OP_IS_NOT(): return $firstValue !== $lastValue; case Operator::OP_IS_NOT_NULL(): return !is_null($firstValue); case Operator::OP_IS_NULL(): return is_null($firstValue); } }