Doc: fix description of UNION/CASE/etc type unification.
authorTom Lane
Mon, 17 Aug 2020 19:40:07 +0000 (15:40 -0400)
committerTom Lane
Mon, 17 Aug 2020 19:40:07 +0000 (15:40 -0400)
The description of what select_common_type() does was not terribly
accurate.  Improve it.

David Johnston and Tom Lane

Discussion: https://postgr.es/m/1019930.1597613200@sss.pgh.pa.us

doc/src/sgml/typeconv.sgml

index 81dba7dacfed595e090e770a9ff4c72821cc4357..8900d0eb383209c1d21b8907fc52c01093ead417 100644 (file)
@@ -1069,7 +1069,7 @@ domain's base type for all subsequent steps.
     functions, this behavior allows a domain type to be preserved through
     a UNION or similar construct, so long as the user is
     careful to ensure that all inputs are implicitly or explicitly of that
-    exact type.  Otherwise the domain's base type will be preferred.
+    exact type.  Otherwise the domain's base type will be used.
    
   
 
@@ -1092,24 +1092,29 @@ If the non-unknown inputs are not all of the same type category, fail.
 
 
 
-Choose the first non-unknown input type which is a preferred type in
-that category, if there is one.
-
-
-
-
-
-Otherwise, choose the last non-unknown input type that allows all the
-preceding non-unknown inputs to be implicitly converted to it.  (There
-always is such a type, since at least the first type in the list must
-satisfy this condition.)
+Select the first non-unknown input type as the candidate type,
+then consider each other non-unknown input type, left to right.
+  
+   
+    For historical reasons, CASE treats
+    its ELSE clause (if any) as the first
+    input, with the THEN clauses(s) considered after
+    that.  In all other cases, left to right means the order
+    in which the expressions appear in the query text.
+   
+  
+If the candidate type can be implicitly converted to the other type,
+but not vice-versa, select the other type as the new candidate type.
+Then continue considering the remaining inputs.  If, at any stage of this
+process, a preferred type is selected, stop considering additional
+inputs.
 
 
 
 
 
-Convert all inputs to the selected type.  Fail if there is not a
-conversion from a given input to the selected type.
+Convert all inputs to the final candidate type.  Fail if there is not an
+implicit conversion from a given input type to the candidate type.