* Transform a ColumnRef. * * If you find yourself changing this code, see also ExpandColumnRefStar. */
| 471 | * If you find yourself changing this code, see also ExpandColumnRefStar. |
| 472 | */ |
| 473 | static Node * |
| 474 | transformColumnRef(ParseState *pstate, ColumnRef *cref) |
| 475 | { |
| 476 | Node *node = NULL; |
| 477 | char *nspname = NULL; |
| 478 | char *relname = NULL; |
| 479 | char *colname = NULL; |
| 480 | ParseNamespaceItem *nsitem; |
| 481 | int levels_up; |
| 482 | enum |
| 483 | { |
| 484 | CRERR_NO_COLUMN, |
| 485 | CRERR_NO_RTE, |
| 486 | CRERR_WRONG_DB, |
| 487 | CRERR_TOO_MANY |
| 488 | } crerr = CRERR_NO_COLUMN; |
| 489 | const char *err; |
| 490 | |
| 491 | /* |
| 492 | * Check to see if the column reference is in an invalid place within the |
| 493 | * query. We allow column references in most places, except in default |
| 494 | * expressions and partition bound expressions. |
| 495 | */ |
| 496 | err = NULL; |
| 497 | switch (pstate->p_expr_kind) |
| 498 | { |
| 499 | case EXPR_KIND_NONE: |
| 500 | Assert(false); /* can't happen */ |
| 501 | break; |
| 502 | case EXPR_KIND_OTHER: |
| 503 | case EXPR_KIND_JOIN_ON: |
| 504 | case EXPR_KIND_JOIN_USING: |
| 505 | case EXPR_KIND_FROM_SUBSELECT: |
| 506 | case EXPR_KIND_FROM_FUNCTION: |
| 507 | case EXPR_KIND_WHERE: |
| 508 | case EXPR_KIND_POLICY: |
| 509 | case EXPR_KIND_HAVING: |
| 510 | case EXPR_KIND_FILTER: |
| 511 | case EXPR_KIND_WINDOW_PARTITION: |
| 512 | case EXPR_KIND_WINDOW_ORDER: |
| 513 | case EXPR_KIND_WINDOW_FRAME_RANGE: |
| 514 | case EXPR_KIND_WINDOW_FRAME_ROWS: |
| 515 | case EXPR_KIND_WINDOW_FRAME_GROUPS: |
| 516 | case EXPR_KIND_SELECT_TARGET: |
| 517 | case EXPR_KIND_INSERT_TARGET: |
| 518 | case EXPR_KIND_UPDATE_SOURCE: |
| 519 | case EXPR_KIND_UPDATE_TARGET: |
| 520 | case EXPR_KIND_GROUP_BY: |
| 521 | case EXPR_KIND_ORDER_BY: |
| 522 | case EXPR_KIND_DISTINCT_ON: |
| 523 | case EXPR_KIND_LIMIT: |
| 524 | case EXPR_KIND_OFFSET: |
| 525 | case EXPR_KIND_RETURNING: |
| 526 | case EXPR_KIND_VALUES: |
| 527 | case EXPR_KIND_VALUES_SINGLE: |
| 528 | case EXPR_KIND_CHECK_CONSTRAINT: |
| 529 | case EXPR_KIND_DOMAIN_CHECK: |
| 530 | case EXPR_KIND_FUNCTION_DEFAULT: |
no test coverage detected