mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Split out CreateCast into src/backend/catalog/pg_cast.c
This catalog-handling code was previously together with the rest of CastCreate() in src/backend/commands/functioncmds.c. A future patch will need a way to add casts internally, so this will be useful to have separate. Also, move the nearby get_cast_oid() function from functioncmds.c to lsyscache.c, which seems a more natural place for it. Author: Paul Jungwirth, minor edits by Álvaro Discussion: https://postgr.es/m/20200309210003.GA19992@alvherre.pgsql
This commit is contained in:
26
src/backend/utils/cache/lsyscache.c
vendored
26
src/backend/utils/cache/lsyscache.c
vendored
@ -23,6 +23,7 @@
|
||||
#include "catalog/pg_am.h"
|
||||
#include "catalog/pg_amop.h"
|
||||
#include "catalog/pg_amproc.h"
|
||||
#include "catalog/pg_cast.h"
|
||||
#include "catalog/pg_collation.h"
|
||||
#include "catalog/pg_constraint.h"
|
||||
#include "catalog/pg_language.h"
|
||||
@ -908,6 +909,31 @@ get_atttypetypmodcoll(Oid relid, AttrNumber attnum,
|
||||
ReleaseSysCache(tp);
|
||||
}
|
||||
|
||||
/* ---------- PG_CAST CACHE ---------- */
|
||||
|
||||
/*
|
||||
* get_cast_oid - given two type OIDs, look up a cast OID
|
||||
*
|
||||
* If missing_ok is false, throw an error if the cast is not found. If
|
||||
* true, just return InvalidOid.
|
||||
*/
|
||||
Oid
|
||||
get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok)
|
||||
{
|
||||
Oid oid;
|
||||
|
||||
oid = GetSysCacheOid2(CASTSOURCETARGET, Anum_pg_cast_oid,
|
||||
ObjectIdGetDatum(sourcetypeid),
|
||||
ObjectIdGetDatum(targettypeid));
|
||||
if (!OidIsValid(oid) && !missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("cast from type %s to type %s does not exist",
|
||||
format_type_be(sourcetypeid),
|
||||
format_type_be(targettypeid))));
|
||||
return oid;
|
||||
}
|
||||
|
||||
/* ---------- COLLATION CACHE ---------- */
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user