49#include "utils/fmgroids.h"
98 result = amop_tup->amopstrategy;
123 result = amop_tup->amopsortfamily;
151 elog(
ERROR,
"operator %u is not a member of opfamily %u",
154 *strategy = amop_tup->amopstrategy;
155 *lefttype = amop_tup->amoplefttype;
156 *righttype = amop_tup->amoprighttype;
183 result = amop_tup->amopopr;
295 if (aform->amoplefttype == aform->amoprighttype)
298 *opfamily = aform->amopfamily;
299 *opcintype = aform->amoplefttype;
300 *cmptype = am_cmptype;
333 &opfamily, &opcintype, &cmptype))
393 typid = use_lhs_type ? aform->amoplefttype : aform->amoprighttype;
476 Oid *lhs_opno,
Oid *rhs_opno)
500 if (aform->amopmethod == HASH_AM_OID &&
504 if (aform->amoplefttype == aform->amoprighttype)
537 aform->amoprighttype,
538 aform->amoprighttype,
600 if (aform->amopmethod == HASH_AM_OID &&
623 if (aform->amoplefttype == aform->amoprighttype)
625 *rhs_procno = *lhs_procno;
633 aform->amoprighttype,
634 aform->amoprighttype,
701 thisresult->
oplefttype = op_form->amoplefttype;
703 result =
lappend(result, thisresult);
746 thisresult->
oplefttype = op_form->amoplefttype;
748 result =
lappend(result, thisresult);
886 result = amproc_tup->amproc;
920 elog(
ERROR,
"cache lookup failed for attribute %d of relation %u",
944 result = att_tup->attnum;
974 elog(
ERROR,
"cache lookup failed for attribute %d of relation %u",
977 result = att_tup->attgenerated;
1001 result = att_tup->atttypid;
1029 elog(
ERROR,
"cache lookup failed for attribute %d of relation %u",
1033 *typid = att_tup->atttypid;
1034 *typmod = att_tup->atttypmod;
1035 *
collid = att_tup->attcollation;
1058 elog(
ERROR,
"cache lookup failed for attribute %d of relation %u",
1061 attopts =
SysCacheGetAttr(ATTNAME, tuple, Anum_pg_attribute_attoptions,
1092 (
errcode(ERRCODE_UNDEFINED_OBJECT),
1093 errmsg(
"cast from type %s to type %s does not exist",
1138 elog(
ERROR,
"cache lookup failed for collation %u", colloid);
1140 result = colltup->collisdeterministic;
1199 if (contup->contype == CONSTRAINT_UNIQUE ||
1200 contup->contype == CONSTRAINT_PRIMARY ||
1201 contup->contype == CONSTRAINT_EXCLUSION)
1202 result = contup->conindid;
1226 elog(
ERROR,
"cache lookup failed for constraint %u", conoid);
1279 elog(
ERROR,
"cache lookup failed for language %u",
1300 elog(
ERROR,
"cache lookup failed for opclass %u", opclass);
1303 result = cla_tup->opcfamily;
1322 elog(
ERROR,
"cache lookup failed for opclass %u", opclass);
1325 result = cla_tup->opcintype;
1348 *opfamily = cla_tup->opcfamily;
1349 *opcintype = cla_tup->opcintype;
1370 elog(
ERROR,
"cache lookup failed for opclass %u", opclass);
1373 result = cla_tup->opcmethod;
1394 elog(
ERROR,
"cache lookup failed for operator family %u", opfid);
1397 result = opfform->opfmethod;
1414 elog(
ERROR,
"cache lookup failed for operator family %u", opfid);
1445 result = optup->oprcode;
1493 result = optup->oprresult;
1515 elog(
ERROR,
"cache lookup failed for operator %u", opno);
1517 *lefttype = optup->oprleft;
1518 *righttype = optup->oprright;
1538 bool result =
false;
1548 if (opno == ARRAY_EQ_OP)
1551 if (typentry->
cmp_proc == F_BTARRAYCMP)
1554 else if (opno == RECORD_EQ_OP)
1557 if (typentry->
cmp_proc == F_BTRECORDCMP)
1568 result = optup->oprcanmerge;
1589 bool result =
false;
1594 if (opno == ARRAY_EQ_OP)
1597 if (typentry->
hash_proc == F_HASH_ARRAY)
1600 else if (opno == RECORD_EQ_OP)
1603 if (typentry->
hash_proc == F_HASH_RECORD)
1614 result = optup->oprcanhash;
1632 elog(
ERROR,
"operator %u does not exist", opno);
1648 elog(
ERROR,
"operator %u does not exist", opno);
1669 result = optup->oprcom;
1693 result = optup->oprnegate;
1717 result = optup->oprrest;
1741 result = optup->oprjoin;
1792 result = functup->pronamespace;
1812 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1831 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1854 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1858 result = procstruct->prorettype;
1859 *nargs = (int) procstruct->pronargs;
1860 Assert(*nargs == procstruct->proargtypes.dim1);
1862 memcpy(*argtypes, procstruct->proargtypes.values, *nargs *
sizeof(
Oid));
1880 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1899 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1918 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1937 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1956 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1975 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1994 elog(
ERROR,
"cache lookup failed for function %u", funcid);
2018 result = functup->prosupport;
2049get_relnatts(
Oid relid)
2059 result = reltup->relnatts;
2112 result = reltup->relnamespace;
2139 result = reltup->reltype;
2163 result = reltup->relkind;
2187 result = reltup->relispartition;
2214 result = reltup->reltablespace;
2236 elog(
ERROR,
"cache lookup failed for relation %u", relid);
2238 result = reltup->relpersistence;
2258 elog(
ERROR,
"cache lookup failed for relation %u", relid);
2260 result = reltup->relam;
2333 result = typtup->typisdefined;
2357 result = typtup->typlen;
2382 result = typtup->typbyval;
2408 elog(
ERROR,
"cache lookup failed for type %u", typid);
2410 *typlen = typtup->typlen;
2411 *typbyval = typtup->typbyval;
2429 elog(
ERROR,
"cache lookup failed for type %u", typid);
2431 *typlen = typtup->typlen;
2432 *typbyval = typtup->typbyval;
2462 return typeStruct->typelem;
2464 return typeStruct->oid;
2513 elog(
ERROR,
"binary I/O not supported during bootstrap");
2521 elog(
ERROR,
"cache lookup failed for type %u", typid);
2524 *typlen = typeStruct->typlen;
2525 *typbyval = typeStruct->typbyval;
2527 *typdelim = typeStruct->typdelim;
2532 *func = typeStruct->typinput;
2535 *func = typeStruct->typoutput;
2538 *func = typeStruct->typreceive;
2541 *func = typeStruct->typsend;
2549get_typalign(
Oid typid)
2559 result = typtup->typalign;
2564 return TYPALIGN_INT;
2579 result = typtup->typstorage;
2584 return TYPSTORAGE_PLAIN;
2608 elog(
ERROR,
"cache lookup failed for type %u", typid);
2618 Anum_pg_type_typdefaultbin,
2631 Anum_pg_type_typdefault,
2636 char *strDefaultVal;
2651 pfree(strDefaultVal);
2700 elog(
ERROR,
"cache lookup failed for type %u", typid);
2702 if (typTup->typtype != TYPTYPE_DOMAIN)
2710 typid = typTup->typbasetype;
2711 *typmod = typTup->typtypmod;
2751 if (typid == BPCHAROID)
2755 if (maxwidth < 1000)
2756 return 32 + (maxwidth - 32) / 2;
2763 return 32 + (1000 - 32) / 2;
2789 result = typtup->typtype;
2807 if (typid == RECORDOID)
2811 case TYPTYPE_COMPOSITE:
2813 case TYPTYPE_DOMAIN:
2850 return (
get_typtype(typid) == TYPTYPE_MULTIRANGE);
2867 elog(
ERROR,
"cache lookup failed for type %u", typid);
2869 *typcategory = typtup->typcategory;
2870 *typispreferred = typtup->typispreferred;
2891 result = typtup->typrelid;
2919 if (IsTrueArrayType(typtup))
2920 result = typtup->typelem;
2996 if (typTup->typtype != TYPTYPE_DOMAIN)
3002 if (IsTrueArrayType(typTup))
3003 result = typTup->typelem;
3010 typid = typTup->typbasetype;
3034 if (!pt->typisdefined)
3036 (
errcode(ERRCODE_UNDEFINED_OBJECT),
3037 errmsg(
"type %s is only a shell",
3041 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
3042 errmsg(
"no input function available for type %s",
3045 *typInput = pt->typinput;
3067 if (!pt->typisdefined)
3069 (
errcode(ERRCODE_UNDEFINED_OBJECT),
3070 errmsg(
"type %s is only a shell",
3074 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
3075 errmsg(
"no output function available for type %s",
3078 *typOutput = pt->typoutput;
3079 *typIsVarlena = (!pt->typbyval) && (pt->typlen == -1);
3100 if (!pt->typisdefined)
3102 (
errcode(ERRCODE_UNDEFINED_OBJECT),
3103 errmsg(
"type %s is only a shell",
3107 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
3108 errmsg(
"no binary input function available for type %s",
3111 *typReceive = pt->typreceive;
3133 if (!pt->typisdefined)
3135 (
errcode(ERRCODE_UNDEFINED_OBJECT),
3136 errmsg(
"type %s is only a shell",
3140 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
3141 errmsg(
"no binary output function available for type %s",
3144 *typSend = pt->typsend;
3145 *typIsVarlena = (!pt->typbyval) && (pt->typlen == -1);
3166 result = typtup->typmodin;
3181get_typmodout(
Oid typid)
3191 result = typtup->typmodout;
3216 result = typtup->typcollation;
3258 *typelemp = typform->typelem;
3315 stawidth = (*get_attavgwidth_hook) (relid,
attnum);
3385 int reqkind,
Oid reqop,
int flags)
3401 if ((&stats->stakind1)[
i] == reqkind &&
3402 (reqop ==
InvalidOid || (&stats->staop1)[
i] == reqop))
3408 sslot->
staop = (&stats->staop1)[
i];
3409 sslot->
stacoll = (&stats->stacoll1)[
i];
3414 Anum_pg_statistic_stavalues1 +
i);
3431 elog(
ERROR,
"cache lookup failed for type %u", arrayelemtype);
3448 if (!typeForm->typbyval)
3459 Anum_pg_statistic_stanumbers1 +
i);
3472 narrayelem =
ARR_DIMS(statarray)[0];
3473 if (
ARR_NDIM(statarray) != 1 || narrayelem <= 0 ||
3476 elog(
ERROR,
"stanumbers is not a 1-D float4 array");
3567 result = rngtup->rngsubtype;
3593 result = rngtup->rngcollation;
3618 result = rngtup->rngmultitypid;
3643 result = rngtup->rngtypid;
3679 Assert(attno > 0 && attno <= rd_index->indnatts);
3682 if (attno > rd_index->indnkeyatts)
3691 Assert(attno <= indclass->dim1);
3692 opclass = indclass->
values[attno - 1];
3716 result = rd_index->indisreplident;
3736 elog(
ERROR,
"cache lookup failed for index %u", index_oid);
3739 isvalid = rd_index->indisvalid;
3759 elog(
ERROR,
"cache lookup failed for index %u", index_oid);
3762 isclustered = rd_index->indisclustered;
3783 (
errcode(ERRCODE_UNDEFINED_OBJECT),
3784 errmsg(
"publication \"%s\" does not exist", pubname)));
3806 elog(
ERROR,
"cache lookup failed for publication %u", pubid);
3833 (
errcode(ERRCODE_UNDEFINED_OBJECT),
3856 elog(
ERROR,
"cache lookup failed for subscription %u", subid);
const IndexAmRoutine * GetIndexAmRoutineByAmId(Oid amoid, bool noerror)
StrategyNumber IndexAmTranslateCompareType(CompareType cmptype, Oid amoid, Oid opfamily, bool missing_ok)
CompareType IndexAmTranslateStrategy(StrategyNumber strategy, Oid amoid, Oid opfamily, bool missing_ok)
#define DatumGetArrayTypePCopy(X)
void deconstruct_array(const ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
#define InvalidAttrNumber
void boot_get_type_io_data(Oid typid, int16 *typlen, bool *typbyval, char *typalign, char *typdelim, Oid *typioparam, Oid *typinput, Oid *typoutput)
#define TextDatumGetCString(d)
#define OidIsValid(objectId)
Datum datumCopy(Datum value, bool typByVal, int typLen)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define palloc_object(type)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
#define OidFunctionCall0(functionId)
#define HASHSTANDARD_PROC
Assert(PointerIsAligned(start, uint64))
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
List * lappend(List *list, void *datum)
List * lappend_oid(List *list, Oid datum)
bool list_member_oid(const List *list, Oid datum)
Oid get_range_subtype(Oid rangeOid)
char * get_rel_name(Oid relid)
void get_op_opfamily_properties(Oid opno, Oid opfamily, bool ordering_op, int *strategy, Oid *lefttype, Oid *righttype)
Oid get_func_variadictype(Oid funcid)
Oid get_opclass_method(Oid opclass)
bool get_compatible_hash_operators(Oid opno, Oid *lhs_opno, Oid *rhs_opno)
bool get_rel_relispartition(Oid relid)
Oid get_op_opfamily_sortfamily(Oid opno, Oid opfamily)
char get_rel_persistence(Oid relid)
char get_func_prokind(Oid funcid)
bool get_index_isvalid(Oid index_oid)
Oid get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok)
void getTypeBinaryOutputInfo(Oid type, Oid *typSend, bool *typIsVarlena)
AttrNumber get_attnum(Oid relid, const char *attname)
RegProcedure get_oprrest(Oid opno)
void free_attstatsslot(AttStatsSlot *sslot)
bool comparison_ops_are_compatible(Oid opno1, Oid opno2)
Oid get_constraint_index(Oid conoid)
bool get_func_retset(Oid funcid)
bool get_ordering_op_properties(Oid opno, Oid *opfamily, Oid *opcintype, CompareType *cmptype)
Oid get_element_type(Oid typid)
Oid get_opclass_input_type(Oid opclass)
bool type_is_rowtype(Oid typid)
bool type_is_range(Oid typid)
char func_parallel(Oid funcid)
Oid get_opclass_family(Oid opclass)
char get_attgenerated(Oid relid, AttrNumber attnum)
bool type_is_enum(Oid typid)
Oid get_multirange_range(Oid multirangeOid)
Oid get_typmodin(Oid typid)
Oid get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype, CompareType cmptype)
char get_typstorage(Oid typid)
bool get_opclass_opfamily_and_input_type(Oid opclass, Oid *opfamily, Oid *opcintype)
RegProcedure get_func_support(Oid funcid)
char * get_database_name(Oid dbid)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
bool get_typisdefined(Oid typid)
char * get_opname(Oid opno)
Datum get_attoptions(Oid relid, int16 attnum)
void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval, char *typalign)
int32 get_attavgwidth(Oid relid, AttrNumber attnum)
bool get_index_isreplident(Oid index_oid)
Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
RegProcedure get_oprjoin(Oid opno)
Oid get_equality_op_for_ordering_op(Oid opno, bool *reverse)
bool op_hashjoinable(Oid opno, Oid inputtype)
char get_rel_relkind(Oid relid)
void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval)
Oid get_func_signature(Oid funcid, Oid **argtypes, int *nargs)
Oid get_publication_oid(const char *pubname, bool missing_ok)
Oid get_rel_namespace(Oid relid)
static bool get_opmethod_canorder(Oid amoid)
RegProcedure get_opcode(Oid opno)
Oid get_typcollation(Oid typid)
Oid get_op_rettype(Oid opno)
int get_op_opfamily_strategy(Oid opno, Oid opfamily)
char * get_collation_name(Oid colloid)
Oid get_rel_type_id(Oid relid)
char * get_language_name(Oid langoid, bool missing_ok)
char * get_namespace_name_or_temp(Oid nspid)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
char func_volatile(Oid funcid)
bool equality_ops_are_compatible(Oid opno1, Oid opno2)
get_attavgwidth_hook_type get_attavgwidth_hook
bool get_index_isclustered(Oid index_oid)
Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
Oid get_ordering_op_for_equality_op(Oid opno, bool use_lhs_type)
Oid get_transform_tosql(Oid typid, Oid langid, List *trftypes)
bool func_strict(Oid funcid)
Oid get_index_column_opclass(Oid index_oid, int attno)
char * get_constraint_name(Oid conoid)
char * get_attname(Oid relid, AttrNumber attnum, bool missing_ok)
bool get_func_leakproof(Oid funcid)
const struct SubscriptRoutines * getSubscriptingRoutines(Oid typid, Oid *typelemp)
Node * get_typdefault(Oid typid)
bool get_collation_isdeterministic(Oid colloid)
List * get_op_index_interpretation(Oid opno)
Oid get_subscription_oid(const char *subname, bool missing_ok)
char * get_subscription_name(Oid subid, bool missing_ok)
Oid get_range_collation(Oid rangeOid)
char * get_opfamily_name(Oid opfid, bool missing_ok)
char * get_func_name(Oid funcid)
Oid get_range_multirange(Oid rangeOid)
Oid get_rel_relam(Oid relid)
char op_volatile(Oid opno)
Oid get_func_namespace(Oid funcid)
bool type_is_collatable(Oid typid)
Oid get_rel_tablespace(Oid relid)
int get_func_nargs(Oid funcid)
void get_type_io_data(Oid typid, IOFuncSelector which_func, int16 *typlen, bool *typbyval, char *typalign, char *typdelim, Oid *typioparam, Oid *func)
int16 get_typlen(Oid typid)
Oid get_typ_typrelid(Oid typid)
char get_typtype(Oid typid)
Oid get_base_element_type(Oid typid)
Oid getTypeIOParam(HeapTuple typeTuple)
Oid get_opfamily_method(Oid opfid)
Oid getBaseTypeAndTypmod(Oid typid, int32 *typmod)
Oid get_transform_fromsql(Oid typid, Oid langid, List *trftypes)
char * get_publication_name(Oid pubid, bool missing_ok)
Oid getBaseType(Oid typid)
bool get_op_hash_functions(Oid opno, RegProcedure *lhs_procno, RegProcedure *rhs_procno)
bool get_typbyval(Oid typid)
bool op_mergejoinable(Oid opno, Oid inputtype)
List * get_mergejoin_opfamilies(Oid opno)
char * get_namespace_name(Oid nspid)
Oid get_array_type(Oid typid)
Oid get_func_rettype(Oid funcid)
Oid get_promoted_array_type(Oid typid)
Oid get_atttype(Oid relid, AttrNumber attnum)
char get_constraint_type(Oid conoid)
int32 get_typavgwidth(Oid typid, int32 typmod)
bool op_in_opfamily(Oid opno, Oid opfamily)
RegProcedure get_typsubscript(Oid typid, Oid *typelemp)
void get_type_category_preferred(Oid typid, char *typcategory, bool *typispreferred)
bool get_attstatsslot(AttStatsSlot *sslot, HeapTuple statstuple, int reqkind, Oid reqop, int flags)
Oid get_relname_relid(const char *relname, Oid relnamespace)
Oid get_negator(Oid opno)
Oid get_commutator(Oid opno)
void op_input_types(Oid opno, Oid *lefttype, Oid *righttype)
bool type_is_multirange(Oid typid)
void getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typIOParam)
void get_atttypetypmodcoll(Oid relid, AttrNumber attnum, Oid *typid, int32 *typmod, Oid *collid)
#define ATTSTATSSLOT_NUMBERS
#define ATTSTATSSLOT_VALUES
int32(* get_attavgwidth_hook_type)(Oid relid, AttrNumber attnum)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
char * pstrdup(const char *in)
void pfree(void *pointer)
#define IsBootstrapProcessingMode()
bool isTempNamespace(Oid namespaceId)
FormData_pg_amop * Form_pg_amop
FormData_pg_amproc * Form_pg_amproc
FormData_pg_attribute * Form_pg_attribute
FormData_pg_class * Form_pg_class
FormData_pg_collation * Form_pg_collation
FormData_pg_constraint * Form_pg_constraint
FormData_pg_database * Form_pg_database
FormData_pg_index * Form_pg_index
FormData_pg_language * Form_pg_language
FormData_pg_namespace * Form_pg_namespace
FormData_pg_opclass * Form_pg_opclass
FormData_pg_operator * Form_pg_operator
FormData_pg_opfamily * Form_pg_opfamily
FormData_pg_proc * Form_pg_proc
FormData_pg_publication * Form_pg_publication
FormData_pg_range * Form_pg_range
#define STATISTIC_NUM_SLOTS
FormData_pg_statistic * Form_pg_statistic
FormData_pg_subscription * Form_pg_subscription
FormData_pg_type * Form_pg_type
static Datum PointerGetDatum(const void *X)
static Datum Int16GetDatum(int16 X)
static Datum BoolGetDatum(bool X)
static Datum ObjectIdGetDatum(Oid X)
static Pointer DatumGetPointer(Datum X)
static Datum CStringGetDatum(const char *X)
static Datum CharGetDatum(char X)
void * stringToNode(const char *str)
#define HTEqualStrategyNumber
bool amconsistentordering
bool amconsistentequality
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Oid values[FLEXIBLE_ARRAY_MEMBER]
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
HeapTuple SearchSysCache3(int cacheId, Datum key1, Datum key2, Datum key3)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
HeapTuple SearchSysCacheAttName(Oid relid, const char *attname)
HeapTuple SearchSysCache4(int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, AttrNumber attributeNumber)
#define ReleaseSysCacheList(x)
#define SearchSysCacheList1(cacheId, key1)
#define SearchSysCacheExists3(cacheId, key1, key2, key3)
#define GetSysCacheOid1(cacheId, oidcol, key1)
#define GetSysCacheOid2(cacheId, oidcol, key1, key2)
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
#define TYPECACHE_CMP_PROC
#define TYPECACHE_HASH_PROC