* Evaluate expression identified by "state" in the execution context * given by "econtext". *isnull is set to the is-null flag for the result, * and the Datum value is the function result. * * As a special case, return the dispatch table's address if state is NULL. * This is used by ExecInitInterpreter to set up the dispatch_table global. * (Only applies when EEO_USE_COMPUTED_GOTO is define
| 392 | * (Only applies when EEO_USE_COMPUTED_GOTO is defined.) |
| 393 | */ |
| 394 | static Datum |
| 395 | ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) |
| 396 | { |
| 397 | ExprEvalStep *op; |
| 398 | TupleTableSlot *resultslot; |
| 399 | TupleTableSlot *innerslot; |
| 400 | TupleTableSlot *outerslot; |
| 401 | TupleTableSlot *scanslot; |
| 402 | |
| 403 | /* |
| 404 | * This array has to be in the same order as enum ExprEvalOp. |
| 405 | */ |
| 406 | #if defined(EEO_USE_COMPUTED_GOTO) |
| 407 | static const void *const dispatch_table[] = { |
| 408 | &&CASE_EEOP_DONE, |
| 409 | &&CASE_EEOP_INNER_FETCHSOME, |
| 410 | &&CASE_EEOP_OUTER_FETCHSOME, |
| 411 | &&CASE_EEOP_SCAN_FETCHSOME, |
| 412 | &&CASE_EEOP_INNER_VAR, |
| 413 | &&CASE_EEOP_OUTER_VAR, |
| 414 | &&CASE_EEOP_SCAN_VAR, |
| 415 | &&CASE_EEOP_INNER_SYSVAR, |
| 416 | &&CASE_EEOP_OUTER_SYSVAR, |
| 417 | &&CASE_EEOP_SCAN_SYSVAR, |
| 418 | &&CASE_EEOP_WHOLEROW, |
| 419 | &&CASE_EEOP_ASSIGN_INNER_VAR, |
| 420 | &&CASE_EEOP_ASSIGN_OUTER_VAR, |
| 421 | &&CASE_EEOP_ASSIGN_SCAN_VAR, |
| 422 | &&CASE_EEOP_ASSIGN_TMP, |
| 423 | &&CASE_EEOP_ASSIGN_TMP_MAKE_RO, |
| 424 | &&CASE_EEOP_CONST, |
| 425 | &&CASE_EEOP_FUNCEXPR, |
| 426 | &&CASE_EEOP_FUNCEXPR_STRICT, |
| 427 | &&CASE_EEOP_FUNCEXPR_FUSAGE, |
| 428 | &&CASE_EEOP_FUNCEXPR_STRICT_FUSAGE, |
| 429 | &&CASE_EEOP_BOOL_AND_STEP_FIRST, |
| 430 | &&CASE_EEOP_BOOL_AND_STEP, |
| 431 | &&CASE_EEOP_BOOL_AND_STEP_LAST, |
| 432 | &&CASE_EEOP_BOOL_OR_STEP_FIRST, |
| 433 | &&CASE_EEOP_BOOL_OR_STEP, |
| 434 | &&CASE_EEOP_BOOL_OR_STEP_LAST, |
| 435 | &&CASE_EEOP_BOOL_NOT_STEP, |
| 436 | &&CASE_EEOP_QUAL, |
| 437 | &&CASE_EEOP_JUMP, |
| 438 | &&CASE_EEOP_JUMP_IF_NULL, |
| 439 | &&CASE_EEOP_JUMP_IF_NOT_NULL, |
| 440 | &&CASE_EEOP_JUMP_IF_NOT_TRUE, |
| 441 | &&CASE_EEOP_NULLTEST_ISNULL, |
| 442 | &&CASE_EEOP_NULLTEST_ISNOTNULL, |
| 443 | &&CASE_EEOP_NULLTEST_ROWISNULL, |
| 444 | &&CASE_EEOP_NULLTEST_ROWISNOTNULL, |
| 445 | &&CASE_EEOP_BOOLTEST_IS_TRUE, |
| 446 | &&CASE_EEOP_BOOLTEST_IS_NOT_TRUE, |
| 447 | &&CASE_EEOP_BOOLTEST_IS_FALSE, |
| 448 | &&CASE_EEOP_BOOLTEST_IS_NOT_FALSE, |
| 449 | &&CASE_EEOP_PARAM_EXEC, |
| 450 | &&CASE_EEOP_PARAM_EXTERN, |
| 451 | &&CASE_EEOP_PARAM_CALLBACK, |
no test coverage detected