| @@ 164-183 (lines=20) @@ | ||
| 161 | * |
|
| 162 | * @return AbstractExpression |
|
| 163 | */ |
|
| 164 | private function parseLogicalOr() |
|
| 165 | { |
|
| 166 | $this->recurseEnter(); |
|
| 167 | $left = $this->parseLogicalAnd(); |
|
| 168 | while ($this->tokenIdentifierIs(ODataConstants::KEYWORD_OR)) { |
|
| 169 | $logicalOpToken = clone $this->getCurrentToken(); |
|
| 170 | $this->lexer->nextToken(); |
|
| 171 | $right = $this->parseLogicalAnd(); |
|
| 172 | FunctionDescription::verifyLogicalOpArguments($logicalOpToken, $left, $right); |
|
| 173 | $left = new LogicalExpression( |
|
| 174 | $left, |
|
| 175 | $right, |
|
| 176 | ExpressionType::OR_LOGICAL |
|
| 177 | ); |
|
| 178 | } |
|
| 179 | ||
| 180 | $this->recurseLeave(); |
|
| 181 | ||
| 182 | return $left; |
|
| 183 | } |
|
| 184 | ||
| 185 | /** |
|
| 186 | * Parse logical and (and). |
|
| @@ 190-205 (lines=16) @@ | ||
| 187 | * |
|
| 188 | * @return AbstractExpression |
|
| 189 | */ |
|
| 190 | private function parseLogicalAnd() |
|
| 191 | { |
|
| 192 | $this->recurseEnter(); |
|
| 193 | $left = $this->parseComparison(); |
|
| 194 | while ($this->tokenIdentifierIs(ODataConstants::KEYWORD_AND)) { |
|
| 195 | $logicalOpToken = clone $this->getCurrentToken(); |
|
| 196 | $this->lexer->nextToken(); |
|
| 197 | $right = $this->parseComparison(); |
|
| 198 | FunctionDescription::verifyLogicalOpArguments($logicalOpToken, $left, $right); |
|
| 199 | $left = new LogicalExpression($left, $right, ExpressionType::AND_LOGICAL); |
|
| 200 | } |
|
| 201 | ||
| 202 | $this->recurseLeave(); |
|
| 203 | ||
| 204 | return $left; |
|
| 205 | } |
|
| 206 | ||
| 207 | /** |
|
| 208 | * Parse comparison operation (eq, ne, gt, ge, lt, le). |
|