107 lines
3.1 KiB
C
107 lines
3.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pg_cast.h
|
|
* definition of the "type casts" system catalog (pg_cast)
|
|
*
|
|
* As of Postgres 8.0, pg_cast describes not only type coercion functions
|
|
* but also length coercion functions.
|
|
*
|
|
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/catalog/pg_cast.h
|
|
*
|
|
* NOTES
|
|
* The Catalog.pm module reads this file and derives schema
|
|
* information.
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PG_CAST_H
|
|
#define PG_CAST_H
|
|
|
|
#include "catalog/dependency.h"
|
|
#include "catalog/genbki.h"
|
|
#include "catalog/pg_cast_d.h"
|
|
|
|
/* ----------------
|
|
* pg_cast definition. cpp turns this into
|
|
* typedef struct FormData_pg_cast
|
|
* ----------------
|
|
*/
|
|
CATALOG(pg_cast,2605,CastRelationId)
|
|
{
|
|
Oid oid; /* oid */
|
|
|
|
/* source datatype for cast */
|
|
Oid castsource BKI_LOOKUP(pg_type);
|
|
|
|
/* destination datatype for cast */
|
|
Oid casttarget BKI_LOOKUP(pg_type);
|
|
|
|
/* cast function; 0 = binary coercible */
|
|
Oid castfunc BKI_LOOKUP_OPT(pg_proc);
|
|
|
|
/* contexts in which cast can be used */
|
|
char castcontext;
|
|
|
|
/* cast method */
|
|
char castmethod;
|
|
} FormData_pg_cast;
|
|
|
|
/* ----------------
|
|
* Form_pg_cast corresponds to a pointer to a tuple with
|
|
* the format of pg_cast relation.
|
|
* ----------------
|
|
*/
|
|
typedef FormData_pg_cast *Form_pg_cast;
|
|
|
|
DECLARE_UNIQUE_INDEX_PKEY(pg_cast_oid_index, 2660, CastOidIndexId, pg_cast, btree(oid oid_ops));
|
|
DECLARE_UNIQUE_INDEX(pg_cast_source_target_index, 2661, CastSourceTargetIndexId, pg_cast, btree(castsource oid_ops, casttarget oid_ops));
|
|
|
|
MAKE_SYSCACHE(CASTSOURCETARGET, pg_cast_source_target_index, 256);
|
|
|
|
#ifdef EXPOSE_TO_CLIENT_CODE
|
|
|
|
/*
|
|
* The allowable values for pg_cast.castcontext are specified by this enum.
|
|
* Since castcontext is stored as a "char", we use ASCII codes for human
|
|
* convenience in reading the table. Note that internally to the backend,
|
|
* these values are converted to the CoercionContext enum (see primnodes.h),
|
|
* which is defined to sort in a convenient order; the ASCII codes don't
|
|
* have to sort in any special order.
|
|
*/
|
|
|
|
typedef enum CoercionCodes
|
|
{
|
|
COERCION_CODE_IMPLICIT = 'i', /* coercion in context of expression */
|
|
COERCION_CODE_ASSIGNMENT = 'a', /* coercion in context of assignment */
|
|
COERCION_CODE_EXPLICIT = 'e', /* explicit cast operation */
|
|
} CoercionCodes;
|
|
|
|
/*
|
|
* The allowable values for pg_cast.castmethod are specified by this enum.
|
|
* Since castmethod is stored as a "char", we use ASCII codes for human
|
|
* convenience in reading the table.
|
|
*/
|
|
typedef enum CoercionMethod
|
|
{
|
|
COERCION_METHOD_FUNCTION = 'f', /* use a function */
|
|
COERCION_METHOD_BINARY = 'b', /* types are binary-compatible */
|
|
COERCION_METHOD_INOUT = 'i', /* use input/output functions */
|
|
} CoercionMethod;
|
|
|
|
#endif /* EXPOSE_TO_CLIENT_CODE */
|
|
|
|
|
|
extern ObjectAddress CastCreate(Oid sourcetypeid,
|
|
Oid targettypeid,
|
|
Oid funcid,
|
|
Oid incastid,
|
|
Oid outcastid,
|
|
char castcontext,
|
|
char castmethod,
|
|
DependencyType behavior);
|
|
|
|
#endif /* PG_CAST_H */
|