* exprSetCollation - * Assign collation information to an expression tree node. * * Note: since this is only used during parse analysis, we don't need to * worry about subplans or PlaceHolderVars. */
| 1057 | * worry about subplans or PlaceHolderVars. |
| 1058 | */ |
| 1059 | void |
| 1060 | exprSetCollation(Node *expr, Oid collation) |
| 1061 | { |
| 1062 | switch (nodeTag(expr)) |
| 1063 | { |
| 1064 | case T_Var: |
| 1065 | ((Var *) expr)->varcollid = collation; |
| 1066 | break; |
| 1067 | case T_Const: |
| 1068 | ((Const *) expr)->constcollid = collation; |
| 1069 | break; |
| 1070 | case T_Param: |
| 1071 | ((Param *) expr)->paramcollid = collation; |
| 1072 | break; |
| 1073 | case T_Aggref: |
| 1074 | ((Aggref *) expr)->aggcollid = collation; |
| 1075 | break; |
| 1076 | case T_GroupingFunc: |
| 1077 | Assert(!OidIsValid(collation)); |
| 1078 | break; |
| 1079 | case T_GroupId: |
| 1080 | Assert(!OidIsValid(collation)); |
| 1081 | break; |
| 1082 | case T_GroupingSetId: |
| 1083 | Assert(!OidIsValid(collation)); |
| 1084 | break; |
| 1085 | case T_WindowFunc: |
| 1086 | ((WindowFunc *) expr)->wincollid = collation; |
| 1087 | break; |
| 1088 | case T_SubscriptingRef: |
| 1089 | ((SubscriptingRef *) expr)->refcollid = collation; |
| 1090 | break; |
| 1091 | case T_FuncExpr: |
| 1092 | ((FuncExpr *) expr)->funccollid = collation; |
| 1093 | break; |
| 1094 | case T_NamedArgExpr: |
| 1095 | Assert(collation == exprCollation((Node *) ((NamedArgExpr *) expr)->arg)); |
| 1096 | break; |
| 1097 | case T_OpExpr: |
| 1098 | ((OpExpr *) expr)->opcollid = collation; |
| 1099 | break; |
| 1100 | case T_DistinctExpr: |
| 1101 | ((DistinctExpr *) expr)->opcollid = collation; |
| 1102 | break; |
| 1103 | case T_NullIfExpr: |
| 1104 | ((NullIfExpr *) expr)->opcollid = collation; |
| 1105 | break; |
| 1106 | case T_ScalarArrayOpExpr: |
| 1107 | /* ScalarArrayOpExpr's result is boolean ... */ |
| 1108 | Assert(!OidIsValid(collation)); /* ... so never set a collation */ |
| 1109 | break; |
| 1110 | case T_BoolExpr: |
| 1111 | /* BoolExpr's result is boolean ... */ |
| 1112 | Assert(!OidIsValid(collation)); /* ... so never set a collation */ |
| 1113 | break; |
| 1114 | case T_SubLink: |
| 1115 | #ifdef USE_ASSERT_CHECKING |
| 1116 | { |
no test coverage detected