mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Arrange for CASE or UNION with only untyped literal constants as input
to resolve the unknown constants as type TEXT.
This commit is contained in:
parent
9bbca2c0f0
commit
372e598c44
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.47 2000/10/05 19:11:33 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.48 2000/11/09 04:14:32 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -374,6 +374,22 @@ select_common_type(List *typeids, const char *context)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If all the inputs were UNKNOWN type --- ie, unknown-type literals ---
|
||||||
|
* then resolve as type TEXT. This situation comes up with constructs
|
||||||
|
* like
|
||||||
|
* SELECT (CASE WHEN foo THEN 'bar' ELSE 'baz' END);
|
||||||
|
* SELECT 'foo' UNION SELECT 'bar';
|
||||||
|
* It might seem desirable to leave the construct's output type as
|
||||||
|
* UNKNOWN, but that really doesn't work, because we'd probably end up
|
||||||
|
* needing a runtime coercion from UNKNOWN to something else, and we
|
||||||
|
* usually won't have it. We need to coerce the unknown literals while
|
||||||
|
* they are still literals, so a decision has to be made now.
|
||||||
|
*/
|
||||||
|
if (ptype == UNKNOWNOID)
|
||||||
|
ptype = TEXTOID;
|
||||||
|
|
||||||
return ptype;
|
return ptype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user