| 259 | } |
| 260 | |
| 261 | bool ConstantExpressionVisitor::isConstant(const Expression& expr) { |
| 262 | if (ExpressionVisitor::isRandom(expr)) { |
| 263 | return false; |
| 264 | } |
| 265 | switch (expr.expressionType) { |
| 266 | case ExpressionType::LITERAL: |
| 267 | return true; |
| 268 | case ExpressionType::AGGREGATE_FUNCTION: |
| 269 | case ExpressionType::PROPERTY: |
| 270 | case ExpressionType::VARIABLE: |
| 271 | case ExpressionType::PATH: |
| 272 | case ExpressionType::PATTERN: |
| 273 | case ExpressionType::PARAMETER: |
| 274 | case ExpressionType::SUBQUERY: |
| 275 | case ExpressionType::GRAPH: |
| 276 | case ExpressionType::LAMBDA: |
| 277 | return false; |
| 278 | case ExpressionType::FUNCTION: |
| 279 | return visitFunction(expr); |
| 280 | case ExpressionType::CASE_ELSE: |
| 281 | return visitCase(expr); |
| 282 | case ExpressionType::OR: |
| 283 | case ExpressionType::XOR: |
| 284 | case ExpressionType::AND: |
| 285 | case ExpressionType::NOT: |
| 286 | case ExpressionType::EQUALS: |
| 287 | case ExpressionType::NOT_EQUALS: |
| 288 | case ExpressionType::GREATER_THAN: |
| 289 | case ExpressionType::GREATER_THAN_EQUALS: |
| 290 | case ExpressionType::LESS_THAN: |
| 291 | case ExpressionType::LESS_THAN_EQUALS: |
| 292 | case ExpressionType::IS_NULL: |
| 293 | case ExpressionType::IS_NOT_NULL: |
| 294 | return visitChildren(expr); |
| 295 | // LCOV_EXCL_START |
| 296 | default: |
| 297 | throw NotImplementedException("ConstantExpressionVisitor::isConstant"); |
| 298 | // LCOV_EXCL_STOP |
| 299 | } |
| 300 | } |
| 301 | |
| 302 | bool ConstantExpressionVisitor::visitFunction(const Expression& expr) { |
| 303 | auto& funcExpr = expr.constCast<ScalarFunctionExpression>(); |
no outgoing calls
no test coverage detected