@@ -802,10 +802,12 @@ exprCollation(const Node *expr)
802802 coll = ((const NullIfExpr * ) expr )-> opcollid ;
803803 break ;
804804 case T_ScalarArrayOpExpr :
805- coll = InvalidOid ; /* result is always boolean */
805+ /* ScalarArrayOpExpr's result is boolean ... */
806+ coll = InvalidOid ; /* ... so it has no collation */
806807 break ;
807808 case T_BoolExpr :
808- coll = InvalidOid ; /* result is always boolean */
809+ /* BoolExpr's result is boolean ... */
810+ coll = InvalidOid ; /* ... so it has no collation */
809811 break ;
810812 case T_SubLink :
811813 {
@@ -827,8 +829,8 @@ exprCollation(const Node *expr)
827829 }
828830 else
829831 {
830- /* otherwise, result is RECORD or BOOLEAN */
831- coll = InvalidOid ;
832+ /* otherwise, SubLink's result is RECORD or BOOLEAN */
833+ coll = InvalidOid ; /* ... so it has no collation */
832834 }
833835 }
834836 break ;
@@ -845,8 +847,8 @@ exprCollation(const Node *expr)
845847 }
846848 else
847849 {
848- /* otherwise, result is RECORD or BOOLEAN */
849- coll = InvalidOid ;
850+ /* otherwise, SubPlan's result is RECORD or BOOLEAN */
851+ coll = InvalidOid ; /* ... so it has no collation */
850852 }
851853 }
852854 break ;
@@ -862,7 +864,8 @@ exprCollation(const Node *expr)
862864 coll = ((const FieldSelect * ) expr )-> resultcollid ;
863865 break ;
864866 case T_FieldStore :
865- coll = InvalidOid ; /* result is always composite */
867+ /* FieldStore's result is composite ... */
868+ coll = InvalidOid ; /* ... so it has no collation */
866869 break ;
867870 case T_RelabelType :
868871 coll = ((const RelabelType * ) expr )-> resultcollid ;
@@ -874,7 +877,8 @@ exprCollation(const Node *expr)
874877 coll = ((const ArrayCoerceExpr * ) expr )-> resultcollid ;
875878 break ;
876879 case T_ConvertRowtypeExpr :
877- coll = InvalidOid ; /* result is always composite */
880+ /* ConvertRowtypeExpr's result is composite ... */
881+ coll = InvalidOid ; /* ... so it has no collation */
878882 break ;
879883 case T_CollateExpr :
880884 coll = ((const CollateExpr * ) expr )-> collOid ;
@@ -889,10 +893,12 @@ exprCollation(const Node *expr)
889893 coll = ((const ArrayExpr * ) expr )-> array_collid ;
890894 break ;
891895 case T_RowExpr :
892- coll = InvalidOid ; /* result is always composite */
896+ /* RowExpr's result is composite ... */
897+ coll = InvalidOid ; /* ... so it has no collation */
893898 break ;
894899 case T_RowCompareExpr :
895- coll = InvalidOid ; /* result is always boolean */
900+ /* RowCompareExpr's result is boolean ... */
901+ coll = InvalidOid ; /* ... so it has no collation */
896902 break ;
897903 case T_CoalesceExpr :
898904 coll = ((const CoalesceExpr * ) expr )-> coalescecollid ;
@@ -920,10 +926,12 @@ exprCollation(const Node *expr)
920926 coll = InvalidOid ;
921927 break ;
922928 case T_NullTest :
923- coll = InvalidOid ; /* result is always boolean */
929+ /* NullTest's result is boolean ... */
930+ coll = InvalidOid ; /* ... so it has no collation */
924931 break ;
925932 case T_BooleanTest :
926- coll = InvalidOid ; /* result is always boolean */
933+ /* BooleanTest's result is boolean ... */
934+ coll = InvalidOid ; /* ... so it has no collation */
927935 break ;
928936 case T_CoerceToDomain :
929937 coll = ((const CoerceToDomain * ) expr )-> resultcollid ;
@@ -935,10 +943,12 @@ exprCollation(const Node *expr)
935943 coll = ((const SetToDefault * ) expr )-> collation ;
936944 break ;
937945 case T_CurrentOfExpr :
938- coll = InvalidOid ; /* result is always boolean */
946+ /* CurrentOfExpr's result is boolean ... */
947+ coll = InvalidOid ; /* ... so it has no collation */
939948 break ;
940949 case T_NextValueExpr :
941- coll = InvalidOid ; /* result is always an integer type */
950+ /* NextValueExpr's result is an integer type ... */
951+ coll = InvalidOid ; /* ... so it has no collation */
942952 break ;
943953 case T_InferenceElem :
944954 coll = exprCollation ((Node * ) ((const InferenceElem * ) expr )-> expr );
@@ -1050,10 +1060,12 @@ exprSetCollation(Node *expr, Oid collation)
10501060 ((NullIfExpr * ) expr )-> opcollid = collation ;
10511061 break ;
10521062 case T_ScalarArrayOpExpr :
1053- Assert (!OidIsValid (collation )); /* result is always boolean */
1063+ /* ScalarArrayOpExpr's result is boolean ... */
1064+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
10541065 break ;
10551066 case T_BoolExpr :
1056- Assert (!OidIsValid (collation )); /* result is always boolean */
1067+ /* BoolExpr's result is boolean ... */
1068+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
10571069 break ;
10581070 case T_SubLink :
10591071#ifdef USE_ASSERT_CHECKING
@@ -1085,7 +1097,8 @@ exprSetCollation(Node *expr, Oid collation)
10851097 ((FieldSelect * ) expr )-> resultcollid = collation ;
10861098 break ;
10871099 case T_FieldStore :
1088- Assert (!OidIsValid (collation )); /* result is always composite */
1100+ /* FieldStore's result is composite ... */
1101+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
10891102 break ;
10901103 case T_RelabelType :
10911104 ((RelabelType * ) expr )-> resultcollid = collation ;
@@ -1097,7 +1110,8 @@ exprSetCollation(Node *expr, Oid collation)
10971110 ((ArrayCoerceExpr * ) expr )-> resultcollid = collation ;
10981111 break ;
10991112 case T_ConvertRowtypeExpr :
1100- Assert (!OidIsValid (collation )); /* result is always composite */
1113+ /* ConvertRowtypeExpr's result is composite ... */
1114+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
11011115 break ;
11021116 case T_CaseExpr :
11031117 ((CaseExpr * ) expr )-> casecollid = collation ;
@@ -1106,10 +1120,12 @@ exprSetCollation(Node *expr, Oid collation)
11061120 ((ArrayExpr * ) expr )-> array_collid = collation ;
11071121 break ;
11081122 case T_RowExpr :
1109- Assert (!OidIsValid (collation )); /* result is always composite */
1123+ /* RowExpr's result is composite ... */
1124+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
11101125 break ;
11111126 case T_RowCompareExpr :
1112- Assert (!OidIsValid (collation )); /* result is always boolean */
1127+ /* RowCompareExpr's result is boolean ... */
1128+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
11131129 break ;
11141130 case T_CoalesceExpr :
11151131 ((CoalesceExpr * ) expr )-> coalescecollid = collation ;
@@ -1128,10 +1144,12 @@ exprSetCollation(Node *expr, Oid collation)
11281144 (collation == InvalidOid ));
11291145 break ;
11301146 case T_NullTest :
1131- Assert (!OidIsValid (collation )); /* result is always boolean */
1147+ /* NullTest's result is boolean ... */
1148+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
11321149 break ;
11331150 case T_BooleanTest :
1134- Assert (!OidIsValid (collation )); /* result is always boolean */
1151+ /* BooleanTest's result is boolean ... */
1152+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
11351153 break ;
11361154 case T_CoerceToDomain :
11371155 ((CoerceToDomain * ) expr )-> resultcollid = collation ;
@@ -1143,11 +1161,12 @@ exprSetCollation(Node *expr, Oid collation)
11431161 ((SetToDefault * ) expr )-> collation = collation ;
11441162 break ;
11451163 case T_CurrentOfExpr :
1146- Assert (!OidIsValid (collation )); /* result is always boolean */
1164+ /* CurrentOfExpr's result is boolean ... */
1165+ Assert (!OidIsValid (collation )); /* ... so never set a collation */
11471166 break ;
11481167 case T_NextValueExpr :
1149- Assert (! OidIsValid ( collation )); /* result is always an integer
1150- * type */
1168+ /* NextValueExpr's result is an integer type ... */
1169+ Assert (! OidIsValid ( collation )); /* ... so never set a collation */
11511170 break ;
11521171 default :
11531172 elog (ERROR , "unrecognized node type: %d" , (int ) nodeTag (expr ));
0 commit comments