PostgreSQL Source Code: src/backend/nodes/nodeFuncs.c File Reference (original) (raw)
2953{
2954
2955
2956
2957
2958
2959#define FLATCOPY(newnode, node, nodetype) \
2960 ( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
2961 memcpy((newnode), (node), sizeof(nodetype)) )
2962
2963#define MUTATE(newfield, oldfield, fieldtype) \
2964 ( (newfield) = (fieldtype) mutator((Node *) (oldfield), context) )
2965
2966 if (node == NULL)
2967 return NULL;
2968
2969
2971
2973 {
2974
2975
2976
2977
2978
2979 case T_Var:
2980 {
2982 Var *newnode;
2983
2985
2986 return (Node *) newnode;
2987 }
2988 break;
2989 case T_Const:
2990 {
2993
2995
2996 return (Node *) newnode;
2997 }
2998 break;
2999 case T_Param:
3000 case T_CaseTestExpr:
3001 case T_SQLValueFunction:
3002 case T_JsonFormat:
3003 case T_CoerceToDomainValue:
3004 case T_SetToDefault:
3005 case T_CurrentOfExpr:
3006 case T_NextValueExpr:
3007 case T_RangeTblRef:
3008 case T_SortGroupClause:
3009 case T_CTESearchClause:
3010 case T_MergeSupportFunc:
3012 case T_WithCheckOption:
3013 {
3016
3019 return (Node *) newnode;
3020 }
3021 case T_Aggref:
3022 {
3025
3027
3028 newnode->aggargtypes = list_copy(aggref->aggargtypes);
3034 return (Node *) newnode;
3035 }
3036 break;
3037 case T_GroupingFunc:
3038 {
3041
3043 MUTATE(newnode->args, grouping->args, List *);
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054 newnode->refs = list_copy(grouping->refs);
3055 newnode->cols = list_copy(grouping->cols);
3056
3057 return (Node *) newnode;
3058 }
3059 break;
3060 case T_WindowFunc:
3061 {
3064
3068 return (Node *) newnode;
3069 }
3070 break;
3071 case T_WindowFuncRunCondition:
3072 {
3075
3078 return (Node *) newnode;
3079 }
3080 break;
3081 case T_SubscriptingRef:
3082 {
3085
3095
3096 return (Node *) newnode;
3097 }
3098 break;
3099 case T_FuncExpr:
3100 {
3103
3106 return (Node *) newnode;
3107 }
3108 break;
3109 case T_NamedArgExpr:
3110 {
3113
3116 return (Node *) newnode;
3117 }
3118 break;
3119 case T_OpExpr:
3120 {
3123
3126 return (Node *) newnode;
3127 }
3128 break;
3129 case T_DistinctExpr:
3130 {
3133
3136 return (Node *) newnode;
3137 }
3138 break;
3139 case T_NullIfExpr:
3140 {
3143
3146 return (Node *) newnode;
3147 }
3148 break;
3149 case T_ScalarArrayOpExpr:
3150 {
3153
3156 return (Node *) newnode;
3157 }
3158 break;
3159 case T_BoolExpr:
3160 {
3163
3166 return (Node *) newnode;
3167 }
3168 break;
3169 case T_SubLink:
3170 {
3173
3176
3177
3178
3179
3180
3182 return (Node *) newnode;
3183 }
3184 break;
3185 case T_SubPlan:
3186 {
3189
3191
3193
3195
3196 return (Node *) newnode;
3197 }
3198 break;
3199 case T_AlternativeSubPlan:
3200 {
3203
3206 return (Node *) newnode;
3207 }
3208 break;
3209 case T_FieldSelect:
3210 {
3213
3216 return (Node *) newnode;
3217 }
3218 break;
3219 case T_FieldStore:
3220 {
3223
3227 newnode->fieldnums = list_copy(fstore->fieldnums);
3228 return (Node *) newnode;
3229 }
3230 break;
3231 case T_RelabelType:
3232 {
3235
3238 return (Node *) newnode;
3239 }
3240 break;
3241 case T_CoerceViaIO:
3242 {
3245
3248 return (Node *) newnode;
3249 }
3250 break;
3251 case T_ArrayCoerceExpr:
3252 {
3255
3259 return (Node *) newnode;
3260 }
3261 break;
3262 case T_ConvertRowtypeExpr:
3263 {
3266
3269 return (Node *) newnode;
3270 }
3271 break;
3272 case T_CollateExpr:
3273 {
3276
3279 return (Node *) newnode;
3280 }
3281 break;
3282 case T_CaseExpr:
3283 {
3286
3291 return (Node *) newnode;
3292 }
3293 break;
3294 case T_CaseWhen:
3295 {
3298
3302 return (Node *) newnode;
3303 }
3304 break;
3305 case T_ArrayExpr:
3306 {
3309
3311 MUTATE(newnode->elements, arrayexpr->elements, List *);
3312 return (Node *) newnode;
3313 }
3314 break;
3315 case T_RowExpr:
3316 {
3319
3322
3323 return (Node *) newnode;
3324 }
3325 break;
3326 case T_RowCompareExpr:
3327 {
3330
3334 return (Node *) newnode;
3335 }
3336 break;
3337 case T_CoalesceExpr:
3338 {
3341
3344 return (Node *) newnode;
3345 }
3346 break;
3347 case T_MinMaxExpr:
3348 {
3351
3354 return (Node *) newnode;
3355 }
3356 break;
3357 case T_XmlExpr:
3358 {
3361
3364
3366 return (Node *) newnode;
3367 }
3368 break;
3369 case T_JsonReturning:
3370 {
3373
3376
3377 return (Node *) newnode;
3378 }
3379 case T_JsonValueExpr:
3380 {
3383
3388
3389 return (Node *) newnode;
3390 }
3391 case T_JsonConstructorExpr:
3392 {
3395
3401
3402 return (Node *) newnode;
3403 }
3404 case T_JsonIsPredicate:
3405 {
3408
3412
3413 return (Node *) newnode;
3414 }
3415 case T_JsonExpr:
3416 {
3419
3424
3427 return (Node *) newnode;
3428 }
3429 break;
3430 case T_JsonBehavior:
3431 {
3434
3437 return (Node *) newnode;
3438 }
3439 break;
3440 case T_NullTest:
3441 {
3444
3447 return (Node *) newnode;
3448 }
3449 break;
3450 case T_BooleanTest:
3451 {
3454
3457 return (Node *) newnode;
3458 }
3459 break;
3460 case T_CoerceToDomain:
3461 {
3464
3467 return (Node *) newnode;
3468 }
3469 break;
3470 case T_ReturningExpr:
3471 {
3474
3477 return (Node *) newnode;
3478 }
3479 break;
3480 case T_TargetEntry:
3481 {
3484
3487 return (Node *) newnode;
3488 }
3489 break;
3490 case T_Query:
3491
3492 return node;
3493 case T_WindowClause:
3494 {
3497
3503 return (Node *) newnode;
3504 }
3505 break;
3506 case T_CTECycleClause:
3507 {
3510
3514 return (Node *) newnode;
3515 }
3516 break;
3517 case T_CommonTableExpr:
3518 {
3521
3523
3524
3525
3526
3527
3529
3532
3533 return (Node *) newnode;
3534 }
3535 break;
3536 case T_PartitionBoundSpec:
3537 {
3540
3545 return (Node *) newnode;
3546 }
3547 break;
3548 case T_PartitionRangeDatum:
3549 {
3552
3555 return (Node *) newnode;
3556 }
3557 break;
3558 case T_List:
3559 {
3560
3561
3562
3563
3564
3565 List *resultlist;
3567
3568 resultlist = NIL;
3569 foreach(temp, (List *) node)
3570 {
3571 resultlist = lappend(resultlist,
3573 context));
3574 }
3575 return (Node *) resultlist;
3576 }
3577 break;
3578 case T_FromExpr:
3579 {
3582
3586 return (Node *) newnode;
3587 }
3588 break;
3589 case T_OnConflictExpr:
3590 {
3593
3600
3601 return (Node *) newnode;
3602 }
3603 break;
3604 case T_MergeAction:
3605 {
3608
3612
3613 return (Node *) newnode;
3614 }
3615 break;
3616 case T_PartitionPruneStepOp:
3617 {
3620
3623
3624 return (Node *) newnode;
3625 }
3626 break;
3627 case T_PartitionPruneStepCombine:
3628
3630 case T_JoinExpr:
3631 {
3634
3639
3640 return (Node *) newnode;
3641 }
3642 break;
3643 case T_SetOperationStmt:
3644 {
3647
3651
3652 return (Node *) newnode;
3653 }
3654 break;
3655 case T_IndexClause:
3656 {
3659
3663 return (Node *) newnode;
3664 }
3665 break;
3666 case T_PlaceHolderVar:
3667 {
3670
3672 MUTATE(newnode->phexpr, phv->phexpr, Expr *);
3673
3674 return (Node *) newnode;
3675 }
3676 break;
3677 case T_InferenceElem:
3678 {
3681
3684 return (Node *) newnode;
3685 }
3686 break;
3687 case T_AppendRelInfo:
3688 {
3691
3694
3695 return (Node *) newnode;
3696 }
3697 break;
3698 case T_PlaceHolderInfo:
3699 {
3702
3705
3706 return (Node *) newnode;
3707 }
3708 break;
3709 case T_RangeTblFunction:
3710 {
3713
3716
3717 return (Node *) newnode;
3718 }
3719 break;
3720 case T_TableSampleClause:
3721 {
3724
3728 return (Node *) newnode;
3729 }
3730 break;
3731 case T_TableFunc:
3732 {
3735
3737 MUTATE(newnode->ns_uris, tf->ns_uris, List *);
3741 MUTATE(newnode->coldefexprs, tf->coldefexprs, List *);
3742 MUTATE(newnode->colvalexprs, tf->colvalexprs, List *);
3743 MUTATE(newnode->passingvalexprs, tf->passingvalexprs, List *);
3744 return (Node *) newnode;
3745 }
3746 break;
3747 default:
3748 elog(ERROR, "unrecognized node type: %d",
3750 break;
3751 }
3752
3753 return NULL;
3754}
List * lappend(List *list, void *datum)
List * list_copy(const List *oldlist)
#define FLATCOPY(newnode, node, nodetype)
#define MUTATE(newfield, oldfield, fieldtype)
void check_stack_depth(void)
Node * cycle_mark_default
struct RestrictInfo * rinfo
JsonReturning * returning