PostgreSQL Source Code  git master
lsyscache.h File Reference
#include "access/attnum.h"
#include "access/htup.h"
#include "nodes/pg_list.h"
Include dependency graph for lsyscache.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  OpBtreeInterpretation
 
struct  AttStatsSlot
 

Macros

#define ATTSTATSSLOT_VALUES   0x01
 
#define ATTSTATSSLOT_NUMBERS   0x02
 
#define type_is_array(typid)   (get_element_type(typid) != InvalidOid)
 
#define type_is_array_domain(typid)   (get_base_element_type(typid) != InvalidOid)
 
#define TypeIsToastable(typid)   (get_typstorage(typid) != 'p')
 

Typedefs

typedef struct OpBtreeInterpretation OpBtreeInterpretation
 
typedef enum IOFuncSelector IOFuncSelector
 
typedef struct AttStatsSlot AttStatsSlot
 
typedef int32(* get_attavgwidth_hook_type) (Oid relid, AttrNumber attnum)
 

Enumerations

enum  IOFuncSelector { IOFunc_input, IOFunc_output, IOFunc_receive, IOFunc_send }
 

Functions

bool op_in_opfamily (Oid opno, Oid opfamily)
 
int get_op_opfamily_strategy (Oid opno, Oid opfamily)
 
Oid get_op_opfamily_sortfamily (Oid opno, Oid opfamily)
 
void get_op_opfamily_properties (Oid opno, Oid opfamily, bool ordering_op, int *strategy, Oid *lefttype, Oid *righttype)
 
Oid get_opfamily_member (Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
 
bool get_ordering_op_properties (Oid opno, Oid *opfamily, Oid *opcintype, int16 *strategy)
 
Oid get_equality_op_for_ordering_op (Oid opno, bool *reverse)
 
Oid get_ordering_op_for_equality_op (Oid opno, bool use_lhs_type)
 
Listget_mergejoin_opfamilies (Oid opno)
 
bool get_compatible_hash_operators (Oid opno, Oid *lhs_opno, Oid *rhs_opno)
 
bool get_op_hash_functions (Oid opno, RegProcedure *lhs_procno, RegProcedure *rhs_procno)
 
Listget_op_btree_interpretation (Oid opno)
 
bool equality_ops_are_compatible (Oid opno1, Oid opno2)
 
Oid get_opfamily_proc (Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
 
char * get_attname (Oid relid, AttrNumber attnum, bool missing_ok)
 
AttrNumber get_attnum (Oid relid, const char *attname)
 
char get_attidentity (Oid relid, AttrNumber attnum)
 
Oid get_atttype (Oid relid, AttrNumber attnum)
 
int32 get_atttypmod (Oid relid, AttrNumber attnum)
 
void get_atttypetypmodcoll (Oid relid, AttrNumber attnum, Oid *typid, int32 *typmod, Oid *collid)
 
char * get_collation_name (Oid colloid)
 
char * get_constraint_name (Oid conoid)
 
char * get_language_name (Oid langoid, bool missing_ok)
 
Oid get_opclass_family (Oid opclass)
 
Oid get_opclass_input_type (Oid opclass)
 
RegProcedure get_opcode (Oid opno)
 
char * get_opname (Oid opno)
 
Oid get_op_rettype (Oid opno)
 
void op_input_types (Oid opno, Oid *lefttype, Oid *righttype)
 
bool op_mergejoinable (Oid opno, Oid inputtype)
 
bool op_hashjoinable (Oid opno, Oid inputtype)
 
bool op_strict (Oid opno)
 
char op_volatile (Oid opno)
 
Oid get_commutator (Oid opno)
 
Oid get_negator (Oid opno)
 
RegProcedure get_oprrest (Oid opno)
 
RegProcedure get_oprjoin (Oid opno)
 
char * get_func_name (Oid funcid)
 
Oid get_func_namespace (Oid funcid)
 
Oid get_func_rettype (Oid funcid)
 
int get_func_nargs (Oid funcid)
 
Oid get_func_signature (Oid funcid, Oid **argtypes, int *nargs)
 
Oid get_func_variadictype (Oid funcid)
 
bool get_func_retset (Oid funcid)
 
bool func_strict (Oid funcid)
 
char func_volatile (Oid funcid)
 
char func_parallel (Oid funcid)
 
char get_func_prokind (Oid funcid)
 
bool get_func_leakproof (Oid funcid)
 
float4 get_func_cost (Oid funcid)
 
float4 get_func_rows (Oid funcid)
 
Oid get_relname_relid (const char *relname, Oid relnamespace)
 
char * get_rel_name (Oid relid)
 
Oid get_rel_namespace (Oid relid)
 
Oid get_rel_type_id (Oid relid)
 
char get_rel_relkind (Oid relid)
 
Oid get_rel_tablespace (Oid relid)
 
char get_rel_persistence (Oid relid)
 
Oid get_transform_fromsql (Oid typid, Oid langid, List *trftypes)
 
Oid get_transform_tosql (Oid typid, Oid langid, List *trftypes)
 
bool get_typisdefined (Oid typid)
 
int16 get_typlen (Oid typid)
 
bool get_typbyval (Oid typid)
 
void get_typlenbyval (Oid typid, int16 *typlen, bool *typbyval)
 
void get_typlenbyvalalign (Oid typid, int16 *typlen, bool *typbyval, char *typalign)
 
Oid getTypeIOParam (HeapTuple typeTuple)
 
void get_type_io_data (Oid typid, IOFuncSelector which_func, int16 *typlen, bool *typbyval, char *typalign, char *typdelim, Oid *typioparam, Oid *func)
 
char get_typstorage (Oid typid)
 
Nodeget_typdefault (Oid typid)
 
char get_typtype (Oid typid)
 
bool type_is_rowtype (Oid typid)
 
bool type_is_enum (Oid typid)
 
bool type_is_range (Oid typid)
 
void get_type_category_preferred (Oid typid, char *typcategory, bool *typispreferred)
 
Oid get_typ_typrelid (Oid typid)
 
Oid get_element_type (Oid typid)
 
Oid get_array_type (Oid typid)
 
Oid get_promoted_array_type (Oid typid)
 
Oid get_base_element_type (Oid typid)
 
void getTypeInputInfo (Oid type, Oid *typInput, Oid *typIOParam)
 
void getTypeOutputInfo (Oid type, Oid *typOutput, bool *typIsVarlena)
 
void getTypeBinaryInputInfo (Oid type, Oid *typReceive, Oid *typIOParam)
 
void getTypeBinaryOutputInfo (Oid type, Oid *typSend, bool *typIsVarlena)
 
Oid get_typmodin (Oid typid)
 
Oid get_typcollation (Oid typid)
 
bool type_is_collatable (Oid typid)
 
Oid getBaseType (Oid typid)
 
Oid getBaseTypeAndTypmod (Oid typid, int32 *typmod)
 
int32 get_typavgwidth (Oid typid, int32 typmod)
 
int32 get_attavgwidth (Oid relid, AttrNumber attnum)
 
bool get_attstatsslot (AttStatsSlot *sslot, HeapTuple statstuple, int reqkind, Oid reqop, int flags)
 
void free_attstatsslot (AttStatsSlot *sslot)
 
char * get_namespace_name (Oid nspid)
 
char * get_namespace_name_or_temp (Oid nspid)
 
Oid get_range_subtype (Oid rangeOid)
 

Variables

PGDLLIMPORT get_attavgwidth_hook_type get_attavgwidth_hook
 

Macro Definition Documentation

◆ ATTSTATSSLOT_NUMBERS

◆ ATTSTATSSLOT_VALUES

◆ type_is_array

#define type_is_array (   typid)    (get_element_type(typid) != InvalidOid)

◆ type_is_array_domain

#define type_is_array_domain (   typid)    (get_base_element_type(typid) != InvalidOid)

◆ TypeIsToastable

#define TypeIsToastable (   typid)    (get_typstorage(typid) != 'p')

Definition at line 184 of file lsyscache.h.

Referenced by ATExecSetStorage(), and ExecIndexBuildScanKeys().

Typedef Documentation

◆ AttStatsSlot

◆ get_attavgwidth_hook_type

typedef int32(* get_attavgwidth_hook_type) (Oid relid, AttrNumber attnum)

Definition at line 61 of file lsyscache.h.

◆ IOFuncSelector

◆ OpBtreeInterpretation

Enumeration Type Documentation

◆ IOFuncSelector

Enumerator
IOFunc_input 
IOFunc_output 
IOFunc_receive 
IOFunc_send 

Definition at line 30 of file lsyscache.h.

Function Documentation

◆ equality_ops_are_compatible()

bool equality_ops_are_compatible ( Oid  opno1,
Oid  opno2 
)

Definition at line 695 of file lsyscache.c.

References AMOPOPID, GETSTRUCT, i, catclist::members, catclist::n_members, ObjectIdGetDatum, op_in_opfamily(), ReleaseSysCacheList, SearchSysCacheList1, and catctup::tuple.

Referenced by query_is_distinct_for().

696 {
697  bool result;
698  CatCList *catlist;
699  int i;
700 
701  /* Easy if they're the same operator */
702  if (opno1 == opno2)
703  return true;
704 
705  /*
706  * We search through all the pg_amop entries for opno1.
707  */
708  catlist = SearchSysCacheList1(AMOPOPID, ObjectIdGetDatum(opno1));
709 
710  result = false;
711  for (i = 0; i < catlist->n_members; i++)
712  {
713  HeapTuple op_tuple = &catlist->members[i]->tuple;
714  Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple);
715 
716  /* must be btree or hash */
717  if (op_form->amopmethod == BTREE_AM_OID ||
718  op_form->amopmethod == HASH_AM_OID)
719  {
720  if (op_in_opfamily(opno2, op_form->amopfamily))
721  {
722  result = true;
723  break;
724  }
725  }
726  }
727 
728  ReleaseSysCacheList(catlist);
729 
730  return result;
731 }
bool op_in_opfamily(Oid opno, Oid opfamily)
Definition: lsyscache.c:63
int n_members
Definition: catcache.h:176
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121

◆ free_attstatsslot()

void free_attstatsslot ( AttStatsSlot sslot)

Definition at line 3029 of file lsyscache.c.

References AttStatsSlot::numbers_arr, pfree(), AttStatsSlot::values, and AttStatsSlot::values_arr.

Referenced by _int_matchsel(), booltestsel(), brincostestimate(), btcostestimate(), calc_arraycontsel(), calc_hist_selectivity(), calc_rangesel(), eqjoinsel_inner(), eqjoinsel_semi(), estimate_hash_bucket_stats(), ExecHashBuildSkewHash(), get_variable_range(), histogram_selectivity(), ineq_histogram_selectivity(), mcv_selectivity(), networkjoinsel_inner(), networkjoinsel_semi(), networksel(), scalararraysel_containment(), tsquerysel(), var_eq_const(), and var_eq_non_const().

3030 {
3031  /* The values[] array was separately palloc'd by deconstruct_array */
3032  if (sslot->values)
3033  pfree(sslot->values);
3034  /* The numbers[] array points into numbers_arr, do not pfree it */
3035  /* Free the detoasted array objects, if any */
3036  if (sslot->values_arr)
3037  pfree(sslot->values_arr);
3038  if (sslot->numbers_arr)
3039  pfree(sslot->numbers_arr);
3040 }
void pfree(void *pointer)
Definition: mcxt.c:1031
void * values_arr
Definition: lsyscache.h:56
Datum * values
Definition: lsyscache.h:49
void * numbers_arr
Definition: lsyscache.h:57

◆ func_parallel()

char func_parallel ( Oid  funcid)

Definition at line 1588 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by max_parallel_hazard_checker(), and set_rel_consider_parallel().

1589 {
1590  HeapTuple tp;
1591  char result;
1592 
1593  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1594  if (!HeapTupleIsValid(tp))
1595  elog(ERROR, "cache lookup failed for function %u", funcid);
1596 
1597  result = ((Form_pg_proc) GETSTRUCT(tp))->proparallel;
1598  ReleaseSysCache(tp);
1599  return result;
1600 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ func_strict()

bool func_strict ( Oid  funcid)

Definition at line 1550 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by AggregateCreate(), clause_is_strict_for(), contain_nonstrict_functions_checker(), find_nonnullable_rels_walker(), find_nonnullable_vars_walker(), hash_ok_operator(), is_strict_saop(), op_strict(), and process_equivalence().

1551 {
1552  HeapTuple tp;
1553  bool result;
1554 
1555  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1556  if (!HeapTupleIsValid(tp))
1557  elog(ERROR, "cache lookup failed for function %u", funcid);
1558 
1559  result = ((Form_pg_proc) GETSTRUCT(tp))->proisstrict;
1560  ReleaseSysCache(tp);
1561  return result;
1562 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ func_volatile()

char func_volatile ( Oid  funcid)

Definition at line 1569 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by contain_mutable_functions_checker(), contain_volatile_functions_checker(), contain_volatile_functions_not_nextval_checker(), DefineType(), ece_function_is_safe(), findRangeCanonicalFunction(), findRangeSubtypeDiffFunction(), and op_volatile().

1570 {
1571  HeapTuple tp;
1572  char result;
1573 
1574  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1575  if (!HeapTupleIsValid(tp))
1576  elog(ERROR, "cache lookup failed for function %u", funcid);
1577 
1578  result = ((Form_pg_proc) GETSTRUCT(tp))->provolatile;
1579  ReleaseSysCache(tp);
1580  return result;
1581 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_array_type()

Oid get_array_type ( Oid  typid)

Definition at line 2530 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by AlterTypeNamespace_oid(), AlterTypeOwner(), enforce_generic_type_consistency(), get_promoted_array_type(), initArrayResultAny(), LookupTypeName(), make_partition_op_expr(), make_scalar_array_op(), moveArrayTypeName(), ParseFuncOrColumn(), RenameType(), resolve_generic_type(), transformAExprIn(), and transformArrayExpr().

2531 {
2532  HeapTuple tp;
2533  Oid result = InvalidOid;
2534 
2536  if (HeapTupleIsValid(tp))
2537  {
2538  result = ((Form_pg_type) GETSTRUCT(tp))->typarray;
2539  ReleaseSysCache(tp);
2540  }
2541  return result;
2542 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_attavgwidth()

int32 get_attavgwidth ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 2846 of file lsyscache.c.

References attnum, BoolGetDatum, get_attavgwidth_hook, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache3(), and STATRELATTINH.

Referenced by get_rel_data_width(), and set_rel_width().

2847 {
2848  HeapTuple tp;
2849  int32 stawidth;
2850 
2852  {
2853  stawidth = (*get_attavgwidth_hook) (relid, attnum);
2854  if (stawidth > 0)
2855  return stawidth;
2856  }
2858  ObjectIdGetDatum(relid),
2860  BoolGetDatum(false));
2861  if (HeapTupleIsValid(tp))
2862  {
2863  stawidth = ((Form_pg_statistic) GETSTRUCT(tp))->stawidth;
2864  ReleaseSysCache(tp);
2865  if (stawidth > 0)
2866  return stawidth;
2867  }
2868  return 0;
2869 }
get_attavgwidth_hook_type get_attavgwidth_hook
Definition: lsyscache.c:50
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define Int16GetDatum(X)
Definition: postgres.h:436
FormData_pg_statistic * Form_pg_statistic
Definition: pg_statistic.h:127
signed int int32
Definition: c.h:313
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache3(int cacheId, Datum key1, Datum key2, Datum key3)
Definition: syscache.c:1134
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define BoolGetDatum(X)
Definition: postgres.h:387
int16 attnum
Definition: pg_attribute.h:79
#define HeapTupleIsValid(tuple)
Definition: htup.h:78

◆ get_attidentity()

char get_attidentity ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 836 of file lsyscache.c.

References ATTNUM, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache2().

Referenced by ATExecColumnDefault(), ATExecDropNotNull(), and transformAlterTableStmt().

837 {
838  HeapTuple tp;
839 
840  tp = SearchSysCache2(ATTNUM,
841  ObjectIdGetDatum(relid),
843  if (HeapTupleIsValid(tp))
844  {
846  char result;
847 
848  result = att_tup->attidentity;
849  ReleaseSysCache(tp);
850  return result;
851  }
852  else
853  return '\0';
854 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define Int16GetDatum(X)
Definition: postgres.h:436
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:197
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
int16 attnum
Definition: pg_attribute.h:79
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123

◆ get_attname()

char* get_attname ( Oid  relid,
AttrNumber  attnum,
bool  missing_ok 
)

Definition at line 775 of file lsyscache.c.

References ATTNUM, elog, ERROR, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, NameStr, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), and SearchSysCache2().

Referenced by AddRelationNewConstraints(), conversion_error_callback(), decompile_column_index_array(), deparseColumnRef(), errtablecol(), fixup_inherited_columns(), generateClonedExtStatsStmt(), generateClonedIndexStmt(), get_insert_query_def(), get_rte_attribute_name(), get_update_query_targetlist_def(), getObjectDescription(), getObjectIdentityParts(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_statisticsobj_worker(), pg_get_triggerdef_worker(), processIndirection(), and transformPartitionBound().

776 {
777  HeapTuple tp;
778 
779  tp = SearchSysCache2(ATTNUM,
781  if (HeapTupleIsValid(tp))
782  {
784  char *result;
785 
786  result = pstrdup(NameStr(att_tup->attname));
787  ReleaseSysCache(tp);
788  return result;
789  }
790 
791  if (!missing_ok)
792  elog(ERROR, "cache lookup failed for attribute %d of relation %u",
793  attnum, relid);
794  return NULL;
795 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define Int16GetDatum(X)
Definition: postgres.h:436
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:197
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
int16 attnum
Definition: pg_attribute.h:79
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123
#define NameStr(name)
Definition: c.h:576
#define elog
Definition: elog.h:219

◆ get_attnum()

AttrNumber get_attnum ( Oid  relid,
const char *  attname 
)

Definition at line 806 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidAttrNumber, ReleaseSysCache(), and SearchSysCacheAttName().

Referenced by ATExecColumnDefault(), ATExecDropNotNull(), convert_column_name(), expand_col_privileges(), fixup_inherited_columns(), get_object_address_attrdef(), get_object_address_attribute(), LookupTypeName(), pg_get_serial_sequence(), ProcedureCreate(), process_owned_by(), transformAlterTableStmt(), and transformAssignmentIndirection().

807 {
808  HeapTuple tp;
809 
810  tp = SearchSysCacheAttName(relid, attname);
811  if (HeapTupleIsValid(tp))
812  {
814  AttrNumber result;
815 
816  result = att_tup->attnum;
817  ReleaseSysCache(tp);
818  return result;
819  }
820  else
821  return InvalidAttrNumber;
822 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
NameData attname
Definition: pg_attribute.h:40
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:197
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCacheAttName(Oid relid, const char *attname)
Definition: syscache.c:1248
#define InvalidAttrNumber
Definition: attnum.h:23
int16 AttrNumber
Definition: attnum.h:21

◆ get_attstatsslot()

bool get_attstatsslot ( AttStatsSlot sslot,
HeapTuple  statstuple,
int  reqkind,
Oid  reqop,
int  flags 
)

Definition at line 2913 of file lsyscache.c.

References ARR_DATA_PTR, ARR_DIMS, ARR_ELEMTYPE, ARR_HASNULL, ARR_NDIM, ATTSTATSSLOT_NUMBERS, ATTSTATSSLOT_VALUES, DatumGetArrayTypePCopy, deconstruct_array(), elog, ERROR, GETSTRUCT, HeapTupleIsValid, i, InvalidOid, AttStatsSlot::nnumbers, AttStatsSlot::numbers, AttStatsSlot::numbers_arr, AttStatsSlot::nvalues, ObjectIdGetDatum, pfree(), ReleaseSysCache(), SearchSysCache1(), AttStatsSlot::staop, STATISTIC_NUM_SLOTS, STATRELATTINH, SysCacheGetAttr(), TYPEOID, val, AttStatsSlot::values, AttStatsSlot::values_arr, and AttStatsSlot::valuetype.

Referenced by _int_matchsel(), booltestsel(), brincostestimate(), btcostestimate(), calc_arraycontsel(), calc_hist_selectivity(), calc_rangesel(), eqjoinsel_inner(), eqjoinsel_semi(), estimate_hash_bucket_stats(), ExecHashBuildSkewHash(), get_variable_range(), histogram_selectivity(), ineq_histogram_selectivity(), mcv_selectivity(), networkjoinsel_inner(), networkjoinsel_semi(), networksel(), scalararraysel_containment(), tsquerysel(), var_eq_const(), and var_eq_non_const().

2915 {
2916  Form_pg_statistic stats = (Form_pg_statistic) GETSTRUCT(statstuple);
2917  int i;
2918  Datum val;
2919  bool isnull;
2920  ArrayType *statarray;
2921  Oid arrayelemtype;
2922  int narrayelem;
2923  HeapTuple typeTuple;
2924  Form_pg_type typeForm;
2925 
2926  /* initialize *sslot properly */
2927  memset(sslot, 0, sizeof(AttStatsSlot));
2928 
2929  for (i = 0; i < STATISTIC_NUM_SLOTS; i++)
2930  {
2931  if ((&stats->stakind1)[i] == reqkind &&
2932  (reqop == InvalidOid || (&stats->staop1)[i] == reqop))
2933  break;
2934  }
2935  if (i >= STATISTIC_NUM_SLOTS)
2936  return false; /* not there */
2937 
2938  sslot->staop = (&stats->staop1)[i];
2939 
2940  if (flags & ATTSTATSSLOT_VALUES)
2941  {
2942  val = SysCacheGetAttr(STATRELATTINH, statstuple,
2943  Anum_pg_statistic_stavalues1 + i,
2944  &isnull);
2945  if (isnull)
2946  elog(ERROR, "stavalues is null");
2947 
2948  /*
2949  * Detoast the array if needed, and in any case make a copy that's
2950  * under control of this AttStatsSlot.
2951  */
2952  statarray = DatumGetArrayTypePCopy(val);
2953 
2954  /*
2955  * Extract the actual array element type, and pass it back in case the
2956  * caller needs it.
2957  */
2958  sslot->valuetype = arrayelemtype = ARR_ELEMTYPE(statarray);
2959 
2960  /* Need info about element type */
2961  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(arrayelemtype));
2962  if (!HeapTupleIsValid(typeTuple))
2963  elog(ERROR, "cache lookup failed for type %u", arrayelemtype);
2964  typeForm = (Form_pg_type) GETSTRUCT(typeTuple);
2965 
2966  /* Deconstruct array into Datum elements; NULLs not expected */
2967  deconstruct_array(statarray,
2968  arrayelemtype,
2969  typeForm->typlen,
2970  typeForm->typbyval,
2971  typeForm->typalign,
2972  &sslot->values, NULL, &sslot->nvalues);
2973 
2974  /*
2975  * If the element type is pass-by-reference, we now have a bunch of
2976  * Datums that are pointers into the statarray, so we need to keep
2977  * that until free_attstatsslot. Otherwise, all the useful info is in
2978  * sslot->values[], so we can free the array object immediately.
2979  */
2980  if (!typeForm->typbyval)
2981  sslot->values_arr = statarray;
2982  else
2983  pfree(statarray);
2984 
2985  ReleaseSysCache(typeTuple);
2986  }
2987 
2988  if (flags & ATTSTATSSLOT_NUMBERS)
2989  {
2990  val = SysCacheGetAttr(STATRELATTINH, statstuple,
2991  Anum_pg_statistic_stanumbers1 + i,
2992  &isnull);
2993  if (isnull)
2994  elog(ERROR, "stanumbers is null");
2995 
2996  /*
2997  * Detoast the array if needed, and in any case make a copy that's
2998  * under control of this AttStatsSlot.
2999  */
3000  statarray = DatumGetArrayTypePCopy(val);
3001 
3002  /*
3003  * We expect the array to be a 1-D float4 array; verify that. We don't
3004  * need to use deconstruct_array() since the array data is just going
3005  * to look like a C array of float4 values.
3006  */
3007  narrayelem = ARR_DIMS(statarray)[0];
3008  if (ARR_NDIM(statarray) != 1 || narrayelem <= 0 ||
3009  ARR_HASNULL(statarray) ||
3010  ARR_ELEMTYPE(statarray) != FLOAT4OID)
3011  elog(ERROR, "stanumbers is not a 1-D float4 array");
3012 
3013  /* Give caller a pointer directly into the statarray */
3014  sslot->numbers = (float4 *) ARR_DATA_PTR(statarray);
3015  sslot->nnumbers = narrayelem;
3016 
3017  /* We'll free the statarray in free_attstatsslot */
3018  sslot->numbers_arr = statarray;
3019  }
3020 
3021  return true;
3022 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ATTSTATSSLOT_VALUES
Definition: lsyscache.h:39
int nnumbers
Definition: lsyscache.h:53
unsigned int Oid
Definition: postgres_ext.h:31
FormData_pg_statistic * Form_pg_statistic
Definition: pg_statistic.h:127
void pfree(void *pointer)
Definition: mcxt.c:1031
#define ATTSTATSSLOT_NUMBERS
Definition: lsyscache.h:40
void * values_arr
Definition: lsyscache.h:56
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
#define ARR_DIMS(a)
Definition: array.h:279
#define ARR_DATA_PTR(a)
Definition: array.h:307
float4 * numbers
Definition: lsyscache.h:52
#define ARR_HASNULL(a)
Definition: array.h:276
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
float float4
Definition: c.h:457
uintptr_t Datum
Definition: postgres.h:367
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition: syscache.c:1368
#define DatumGetArrayTypePCopy(X)
Definition: array.h:247
#define InvalidOid
Definition: postgres_ext.h:36
#define STATISTIC_NUM_SLOTS
Definition: pg_statistic.h:119
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
Datum * values
Definition: lsyscache.h:49
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define ARR_NDIM(a)
Definition: array.h:275
void deconstruct_array(ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
Definition: arrayfuncs.c:3449
int i
void * numbers_arr
Definition: lsyscache.h:57
#define elog
Definition: elog.h:219
Oid valuetype
Definition: lsyscache.h:48
#define ARR_ELEMTYPE(a)
Definition: array.h:277
long val
Definition: informix.c:689

◆ get_atttype()

Oid get_atttype ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 863 of file lsyscache.c.

References ATTNUM, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache2().

Referenced by generateClonedIndexStmt(), LookupTypeName(), slot_store_error_callback(), and transformAlterTableStmt().

864 {
865  HeapTuple tp;
866 
867  tp = SearchSysCache2(ATTNUM,
868  ObjectIdGetDatum(relid),
870  if (HeapTupleIsValid(tp))
871  {
873  Oid result;
874 
875  result = att_tup->atttypid;
876  ReleaseSysCache(tp);
877  return result;
878  }
879  else
880  return InvalidOid;
881 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define Int16GetDatum(X)
Definition: postgres.h:436
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:197
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
int16 attnum
Definition: pg_attribute.h:79
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123

◆ get_atttypetypmodcoll()

void get_atttypetypmodcoll ( Oid  relid,
AttrNumber  attnum,
Oid typid,
int32 typmod,
Oid collid 
)

Definition at line 920 of file lsyscache.c.

References ATTNUM, elog, ERROR, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache2().

Referenced by pg_get_indexdef_worker(), pg_get_partkeydef_worker(), and transformAssignmentIndirection().

922 {
923  HeapTuple tp;
924  Form_pg_attribute att_tup;
925 
926  tp = SearchSysCache2(ATTNUM,
927  ObjectIdGetDatum(relid),
929  if (!HeapTupleIsValid(tp))
930  elog(ERROR, "cache lookup failed for attribute %d of relation %u",
931  attnum, relid);
932  att_tup = (Form_pg_attribute) GETSTRUCT(tp);
933 
934  *typid = att_tup->atttypid;
935  *typmod = att_tup->atttypmod;
936  *collid = att_tup->attcollation;
937  ReleaseSysCache(tp);
938 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define Int16GetDatum(X)
Definition: postgres.h:436
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:197
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
int16 attnum
Definition: pg_attribute.h:79
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123
#define elog
Definition: elog.h:219

◆ get_atttypmod()

int32 get_atttypmod ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 890 of file lsyscache.c.

References ATTNUM, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache2().

891 {
892  HeapTuple tp;
893 
894  tp = SearchSysCache2(ATTNUM,
895  ObjectIdGetDatum(relid),
897  if (HeapTupleIsValid(tp))
898  {
900  int32 result;
901 
902  result = att_tup->atttypmod;
903  ReleaseSysCache(tp);
904  return result;
905  }
906  else
907  return -1;
908 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define Int16GetDatum(X)
Definition: postgres.h:436
signed int int32
Definition: c.h:313
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:197
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
int16 attnum
Definition: pg_attribute.h:79
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123

◆ get_base_element_type()

Oid get_base_element_type ( Oid  typid)

Definition at line 2575 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by array_typanalyze(), arraycontsel(), build_datatype(), cache_array_element_properties(), concat_internal(), ConstructTupleDescriptor(), count_nulls(), CreateFunction(), get_call_expr_argtype(), get_rule_expr(), make_scalar_array_op(), ParseFuncOrColumn(), plperl_hash_from_tuple(), scalararraysel(), and text_format().

2576 {
2577  /*
2578  * We loop to find the bottom base type in a stack of domains.
2579  */
2580  for (;;)
2581  {
2582  HeapTuple tup;
2583  Form_pg_type typTup;
2584 
2585  tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2586  if (!HeapTupleIsValid(tup))
2587  break;
2588  typTup = (Form_pg_type) GETSTRUCT(tup);
2589  if (typTup->typtype != TYPTYPE_DOMAIN)
2590  {
2591  /* Not a domain, so stop descending */
2592  Oid result;
2593 
2594  /* This test must match get_element_type */
2595  if (typTup->typlen == -1)
2596  result = typTup->typelem;
2597  else
2598  result = InvalidOid;
2599  ReleaseSysCache(tup);
2600  return result;
2601  }
2602 
2603  typid = typTup->typbasetype;
2604  ReleaseSysCache(tup);
2605  }
2606 
2607  /* Like get_element_type, silently return InvalidOid for bogus input */
2608  return InvalidOid;
2609 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_collation_name()

char* get_collation_name ( Oid  colloid)

Definition at line 952 of file lsyscache.c.

References COLLOID, GETSTRUCT, HeapTupleIsValid, NameStr, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), and SearchSysCache1().

Referenced by analyzeCTE(), assign_collations_walker(), assign_hypothetical_collations(), ATExecAddColumn(), merge_collation_state(), MergeAttributes(), select_common_collation(), and show_sortorder_options().

953 {
954  HeapTuple tp;
955 
956  tp = SearchSysCache1(COLLOID, ObjectIdGetDatum(colloid));
957  if (HeapTupleIsValid(tp))
958  {
960  char *result;
961 
962  result = pstrdup(NameStr(colltup->collname));
963  ReleaseSysCache(tp);
964  return result;
965  }
966  else
967  return NULL;
968 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_collation * Form_pg_collation
Definition: pg_collation.h:49
#define NameStr(name)
Definition: c.h:576

◆ get_commutator()

Oid get_commutator ( Oid  opno)

Definition at line 1298 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by adjust_rowcompare_for_index(), CommuteOpExpr(), CommuteRowCompareExpr(), compute_semijoin_info(), ComputeIndexAttrs(), convert_EXISTS_to_ANY(), eqjoinsel(), gincost_opexpr(), is_indexable_operator(), match_clause_to_ordering_op(), match_clause_to_partition_key(), match_foreign_keys_to_quals(), match_rowcompare_to_indexcol(), networkjoinsel(), operator_predicate_proof(), rangesel(), scalarineqsel_wrapper(), and targetIsInSortList().

1299 {
1300  HeapTuple tp;
1301 
1303  if (HeapTupleIsValid(tp))
1304  {
1306  Oid result;
1307 
1308  result = optup->oprcom;
1309  ReleaseSysCache(tp);
1310  return result;
1311  }
1312  else
1313  return InvalidOid;
1314 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ get_compatible_hash_operators()

bool get_compatible_hash_operators ( Oid  opno,
Oid lhs_opno,
Oid rhs_opno 
)

Definition at line 407 of file lsyscache.c.

References AMOPOPID, get_opfamily_member(), GETSTRUCT, HTEqualStrategyNumber, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, OidIsValid, ReleaseSysCacheList, SearchSysCacheList1, and catctup::tuple.

Referenced by create_unique_plan(), and ExecInitSubPlan().

409 {
410  bool result = false;
411  CatCList *catlist;
412  int i;
413 
414  /* Ensure output args are initialized on failure */
415  if (lhs_opno)
416  *lhs_opno = InvalidOid;
417  if (rhs_opno)
418  *rhs_opno = InvalidOid;
419 
420  /*
421  * Search pg_amop to see if the target operator is registered as the "="
422  * operator of any hash opfamily. If the operator is registered in
423  * multiple opfamilies, assume we can use any one.
424  */
426 
427  for (i = 0; i < catlist->n_members; i++)
428  {
429  HeapTuple tuple = &catlist->members[i]->tuple;
430  Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple);
431 
432  if (aform->amopmethod == HASH_AM_OID &&
433  aform->amopstrategy == HTEqualStrategyNumber)
434  {
435  /* No extra lookup needed if given operator is single-type */
436  if (aform->amoplefttype == aform->amoprighttype)
437  {
438  if (lhs_opno)
439  *lhs_opno = opno;
440  if (rhs_opno)
441  *rhs_opno = opno;
442  result = true;
443  break;
444  }
445 
446  /*
447  * Get the matching single-type operator(s). Failure probably
448  * shouldn't happen --- it implies a bogus opfamily --- but
449  * continue looking if so.
450  */
451  if (lhs_opno)
452  {
453  *lhs_opno = get_opfamily_member(aform->amopfamily,
454  aform->amoplefttype,
455  aform->amoplefttype,
457  if (!OidIsValid(*lhs_opno))
458  continue;
459  /* Matching LHS found, done if caller doesn't want RHS */
460  if (!rhs_opno)
461  {
462  result = true;
463  break;
464  }
465  }
466  if (rhs_opno)
467  {
468  *rhs_opno = get_opfamily_member(aform->amopfamily,
469  aform->amoprighttype,
470  aform->amoprighttype,
472  if (!OidIsValid(*rhs_opno))
473  {
474  /* Forget any LHS operator from this opfamily */
475  if (lhs_opno)
476  *lhs_opno = InvalidOid;
477  continue;
478  }
479  /* Matching RHS found, so done */
480  result = true;
481  break;
482  }
483  }
484  }
485 
486  ReleaseSysCacheList(catlist);
487 
488  return result;
489 }
int n_members
Definition: catcache.h:176
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define HTEqualStrategyNumber
Definition: hash.h:336
#define OidIsValid(objectId)
Definition: c.h:605
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
Definition: lsyscache.c:163
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
#define InvalidOid
Definition: postgres_ext.h:36
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121

◆ get_constraint_name()

char* get_constraint_name ( Oid  conoid)

Definition at line 982 of file lsyscache.c.

References CONSTROID, GETSTRUCT, HeapTupleIsValid, NameStr, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), and SearchSysCache1().

Referenced by get_insert_query_def(), and report_triggers().

983 {
984  HeapTuple tp;
985 
987  if (HeapTupleIsValid(tp))
988  {
990  char *result;
991 
992  result = pstrdup(NameStr(contup->conname));
993  ReleaseSysCache(tp);
994  return result;
995  }
996  else
997  return NULL;
998 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_constraint * Form_pg_constraint
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define NameStr(name)
Definition: c.h:576

◆ get_element_type()

Oid get_element_type ( Oid  typid)

Definition at line 2502 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by aclcheck_error_type(), AlterTypeNamespace_oid(), build_coercion_expression(), check_generic_type_consistency(), CheckAttributeType(), CreateCast(), enforce_generic_type_consistency(), exec_assign_value(), exec_stmt_foreach_a(), ExecInitExprRec(), fetch_array_arg_replace_nulls(), find_coercion_pathway(), get_promoted_array_type(), initArrayResultAny(), initArrayResultArr(), interpret_function_parameter_list(), is_complex_array(), json_categorize_type(), jsonb_categorize_type(), moveArrayTypeName(), plperl_array_to_datum(), ProcedureCreate(), resolve_generic_type(), transformArrayExpr(), and transformTypeCast().

2503 {
2504  HeapTuple tp;
2505 
2507  if (HeapTupleIsValid(tp))
2508  {
2509  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2510  Oid result;
2511 
2512  if (typtup->typlen == -1)
2513  result = typtup->typelem;
2514  else
2515  result = InvalidOid;
2516  ReleaseSysCache(tp);
2517  return result;
2518  }
2519  else
2520  return InvalidOid;
2521 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_equality_op_for_ordering_op()

Oid get_equality_op_for_ordering_op ( Oid  opno,
bool reverse 
)

Definition at line 264 of file lsyscache.c.

References BTEqualStrategyNumber, BTGreaterStrategyNumber, get_opfamily_member(), get_ordering_op_properties(), and InvalidOid.

Referenced by addTargetToSortList(), create_unique_plan(), preprocess_minmax_aggregates(), and show_sortorder_options().

265 {
266  Oid result = InvalidOid;
267  Oid opfamily;
268  Oid opcintype;
269  int16 strategy;
270 
271  /* Find the operator in pg_amop */
273  &opfamily, &opcintype, &strategy))
274  {
275  /* Found a suitable opfamily, get matching equality operator */
276  result = get_opfamily_member(opfamily,
277  opcintype,
278  opcintype,
280  if (reverse)
281  *reverse = (strategy == BTGreaterStrategyNumber);
282  }
283 
284  return result;
285 }
signed short int16
Definition: c.h:312
#define BTGreaterStrategyNumber
Definition: stratnum.h:33
unsigned int Oid
Definition: postgres_ext.h:31
Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
Definition: lsyscache.c:163
#define InvalidOid
Definition: postgres_ext.h:36
bool get_ordering_op_properties(Oid opno, Oid *opfamily, Oid *opcintype, int16 *strategy)
Definition: lsyscache.c:204
#define BTEqualStrategyNumber
Definition: stratnum.h:31

◆ get_func_cost()

float4 get_func_cost ( Oid  funcid)

Definition at line 1645 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by cost_qual_eval_walker(), cost_windowagg(), and get_agg_clause_costs_walker().

1646 {
1647  HeapTuple tp;
1648  float4 result;
1649 
1650  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1651  if (!HeapTupleIsValid(tp))
1652  elog(ERROR, "cache lookup failed for function %u", funcid);
1653 
1654  result = ((Form_pg_proc) GETSTRUCT(tp))->procost;
1655  ReleaseSysCache(tp);
1656  return result;
1657 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
float float4
Definition: c.h:457
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_leakproof()

bool get_func_leakproof ( Oid  funcid)

Definition at line 1626 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by contain_leaked_vars_checker(), contain_leaked_vars_walker(), select_equality_operator(), and statistic_proc_security_check().

1627 {
1628  HeapTuple tp;
1629  bool result;
1630 
1631  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1632  if (!HeapTupleIsValid(tp))
1633  elog(ERROR, "cache lookup failed for function %u", funcid);
1634 
1635  result = ((Form_pg_proc) GETSTRUCT(tp))->proleakproof;
1636  ReleaseSysCache(tp);
1637  return result;
1638 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_name()

char* get_func_name ( Oid  funcid)

Definition at line 1397 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, NameStr, ObjectIdGetDatum, PROCOID, pstrdup(), ReleaseSysCache(), and SearchSysCache1().

Referenced by AlterOpFamilyAdd(), DefineOpClass(), ExecBuildGroupingEqual(), ExecInitAgg(), ExecInitExprRec(), ExecInitFunc(), ExecInitWindowAgg(), ExecuteCallStmt(), ExplainTargetRel(), findRangeCanonicalFunction(), findRangeSubtypeDiffFunction(), HandleFunctionRequest(), init_sexpr(), initialize_peragg(), lookup_agg_function(), print_expr(), show_tablesample(), and statistic_proc_security_check().

1398 {
1399  HeapTuple tp;
1400 
1401  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1402  if (HeapTupleIsValid(tp))
1403  {
1404  Form_pg_proc functup = (Form_pg_proc) GETSTRUCT(tp);
1405  char *result;
1406 
1407  result = pstrdup(NameStr(functup->proname));
1408  ReleaseSysCache(tp);
1409  return result;
1410  }
1411  else
1412  return NULL;
1413 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define NameStr(name)
Definition: c.h:576

◆ get_func_namespace()

Oid get_func_namespace ( Oid  funcid)

Definition at line 1421 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by sepgsql_proc_drop().

1422 {
1423  HeapTuple tp;
1424 
1425  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1426  if (HeapTupleIsValid(tp))
1427  {
1428  Form_pg_proc functup = (Form_pg_proc) GETSTRUCT(tp);
1429  Oid result;
1430 
1431  result = functup->pronamespace;
1432  ReleaseSysCache(tp);
1433  return result;
1434  }
1435  else
1436  return InvalidOid;
1437 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78

◆ get_func_nargs()

int get_func_nargs ( Oid  funcid)

Definition at line 1463 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, pronargs, ReleaseSysCache(), and SearchSysCache1().

1464 {
1465  HeapTuple tp;
1466  int result;
1467 
1468  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1469  if (!HeapTupleIsValid(tp))
1470  elog(ERROR, "cache lookup failed for function %u", funcid);
1471 
1472  result = ((Form_pg_proc) GETSTRUCT(tp))->pronargs;
1473  ReleaseSysCache(tp);
1474  return result;
1475 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int16 pronargs
Definition: pg_proc.h:80
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_prokind()

char get_func_prokind ( Oid  funcid)

Definition at line 1607 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by LookupFuncWithArgs(), and RemoveObjects().

1608 {
1609  HeapTuple tp;
1610  char result;
1611 
1612  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1613  if (!HeapTupleIsValid(tp))
1614  elog(ERROR, "cache lookup failed for function %u", funcid);
1615 
1616  result = ((Form_pg_proc) GETSTRUCT(tp))->prokind;
1617  ReleaseSysCache(tp);
1618  return result;
1619 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_retset()

bool get_func_retset ( Oid  funcid)

Definition at line 1531 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by make_op(), and make_scalar_array_op().

1532 {
1533  HeapTuple tp;
1534  bool result;
1535 
1536  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1537  if (!HeapTupleIsValid(tp))
1538  elog(ERROR, "cache lookup failed for function %u", funcid);
1539 
1540  result = ((Form_pg_proc) GETSTRUCT(tp))->proretset;
1541  ReleaseSysCache(tp);
1542  return result;
1543 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_rettype()

Oid get_func_rettype ( Oid  funcid)

Definition at line 1444 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by CreateConversionCommand(), CreateEventTrigger(), CreateProceduralLanguage(), CreateTrigger(), DefineOperator(), DefineType(), findRangeCanonicalFunction(), findRangeSubtypeDiffFunction(), findTypeAnalyzeFunction(), findTypeTypmodinFunction(), findTypeTypmodoutFunction(), get_ts_parser_func(), get_ts_template_func(), gistrescan(), lookup_fdw_handler_func(), lookup_index_am_handler_func(), OperatorCreate(), transformRangeTableSample(), ValidateJoinEstimator(), and ValidateRestrictionEstimator().

1445 {
1446  HeapTuple tp;
1447  Oid result;
1448 
1449  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1450  if (!HeapTupleIsValid(tp))
1451  elog(ERROR, "cache lookup failed for function %u", funcid);
1452 
1453  result = ((Form_pg_proc) GETSTRUCT(tp))->prorettype;
1454  ReleaseSysCache(tp);
1455  return result;
1456 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_rows()

float4 get_func_rows ( Oid  funcid)

Definition at line 1664 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by expression_returns_set_rows().

1665 {
1666  HeapTuple tp;
1667  float4 result;
1668 
1669  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1670  if (!HeapTupleIsValid(tp))
1671  elog(ERROR, "cache lookup failed for function %u", funcid);
1672 
1673  result = ((Form_pg_proc) GETSTRUCT(tp))->prorows;
1674  ReleaseSysCache(tp);
1675  return result;
1676 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
float float4
Definition: c.h:457
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_func_signature()

Oid get_func_signature ( Oid  funcid,
Oid **  argtypes,
int *  nargs 
)

Definition at line 1485 of file lsyscache.c.

References Assert, elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, palloc(), PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by plperl_call_perl_func(), and resolve_aggregate_transtype().

1486 {
1487  HeapTuple tp;
1488  Form_pg_proc procstruct;
1489  Oid result;
1490 
1491  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1492  if (!HeapTupleIsValid(tp))
1493  elog(ERROR, "cache lookup failed for function %u", funcid);
1494 
1495  procstruct = (Form_pg_proc) GETSTRUCT(tp);
1496 
1497  result = procstruct->prorettype;
1498  *nargs = (int) procstruct->pronargs;
1499  Assert(*nargs == procstruct->proargtypes.dim1);
1500  *argtypes = (Oid *) palloc(*nargs * sizeof(Oid));
1501  memcpy(*argtypes, procstruct->proargtypes.values, *nargs * sizeof(Oid));
1502 
1503  ReleaseSysCache(tp);
1504  return result;
1505 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define Assert(condition)
Definition: c.h:699
void * palloc(Size size)
Definition: mcxt.c:924
#define elog
Definition: elog.h:219

◆ get_func_variadictype()

Oid get_func_variadictype ( Oid  funcid)

Definition at line 1512 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by assign_hypothetical_collations(), and assign_ordered_set_collations().

1513 {
1514  HeapTuple tp;
1515  Oid result;
1516 
1517  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1518  if (!HeapTupleIsValid(tp))
1519  elog(ERROR, "cache lookup failed for function %u", funcid);
1520 
1521  result = ((Form_pg_proc) GETSTRUCT(tp))->provariadic;
1522  ReleaseSysCache(tp);
1523  return result;
1524 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:132
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219

◆ get_language_name()

char* get_language_name ( Oid  langoid,
bool  missing_ok 
)

Definition at line 1003 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, LANGOID, NameStr, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), and SearchSysCache1().

Referenced by get_transform_oid(), getObjectDescription(), getObjectIdentityParts(), and pg_get_functiondef().

1004 {
1005  HeapTuple tp;
1006 
1007  tp = SearchSysCache1(LANGOID, ObjectIdGetDatum(langoid));
1008  if (HeapTupleIsValid(tp))
1009  {
1011  char *result;
1012 
1013  result = pstrdup(NameStr(lantup->lanname));
1014  ReleaseSysCache(tp);
1015  return result;
1016  }
1017 
1018  if (!missing_ok)
1019  elog(ERROR, "cache lookup failed for language %u",
1020  langoid);
1021  return NULL;
1022 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_language * Form_pg_language
Definition: pg_language.h:63
#define NameStr(name)
Definition: c.h:576
#define elog
Definition: elog.h:219

◆ get_mergejoin_opfamilies()

List* get_mergejoin_opfamilies ( Oid  opno)

Definition at line 363 of file lsyscache.c.

References AMOPOPID, BTEqualStrategyNumber, GETSTRUCT, i, lappend_oid(), catclist::members, catclist::n_members, NIL, ObjectIdGetDatum, ReleaseSysCacheList, SearchSysCacheList1, and catctup::tuple.

Referenced by check_mergejoinable(), compute_semijoin_info(), make_pathkey_from_sortinfo(), and match_eclasses_to_foreign_key_col().

364 {
365  List *result = NIL;
366  CatCList *catlist;
367  int i;
368 
369  /*
370  * Search pg_amop to see if the target operator is registered as the "="
371  * operator of any btree opfamily.
372  */
374 
375  for (i = 0; i < catlist->n_members; i++)
376  {
377  HeapTuple tuple = &catlist->members[i]->tuple;
378  Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple);
379 
380  /* must be btree equality */
381  if (aform->amopmethod == BTREE_AM_OID &&
382  aform->amopstrategy == BTEqualStrategyNumber)
383  result = lappend_oid(result, aform->amopfamily);
384  }
385 
386  ReleaseSysCacheList(catlist);
387 
388  return result;
389 }
#define NIL
Definition: pg_list.h:69
int n_members
Definition: catcache.h:176
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
List * lappend_oid(List *list, Oid datum)
Definition: list.c:164
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121
Definition: pg_list.h:45
#define BTEqualStrategyNumber
Definition: stratnum.h:31

◆ get_namespace_name()

char* get_namespace_name ( Oid  nspid)

Definition at line 3051 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, NAMESPACEOID, NameStr, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), and SearchSysCache1().

Referenced by acquire_inherited_sample_rows(), add_cast_to(), AlterExtensionNamespace(), AlterObjectNamespace_internal(), AlterObjectOwner_internal(), AlterObjectRename_internal(), AlterRelationNamespaceInternal(), AlterSubscription_refresh(), AlterTableMoveAll(), AlterTypeNamespaceInternal(), AlterTypeOwner(), appendFunctionName(), ApplyExtensionUpdates(), ATExecChangeOwner(), BuildRelationExtStatistics(), check_TSCurrentConfig(), compute_return_type(), copy_heap_data(), copy_table(), CreateConversionCommand(), CreateExtensionInternal(), CreateFunction(), current_schema(), current_schemas(), DefineAggregate(), DefineCollation(), DefineDomain(), DefineEnum(), DefineIndex(), DefineOpClass(), DefineOperator(), DefineOpFamily(), DefineRange(), DefineTSConfiguration(), DefineTSDictionary(), DefineType(), deparseOperatorName(), deparseRelation(), do_analyze_rel(), do_autovacuum(), DoCopy(), errdatatype(), errtable(), EventTriggerSQLDropAddObject(), exec_object_restorecon(), ExecAlterExtensionContentsStmt(), ExecRefreshMatView(), execute_extension_script(), ExplainTargetRel(), fetch_statentries_for_relation(), format_operator_internal(), format_procedure_internal(), generate_collation_name(), generate_function_name(), generate_operator_clause(), generate_operator_name(), generate_qualified_relation_name(), generate_qualified_type_name(), generate_relation_name(), generateClonedIndexStmt(), generateSerialExtraStmts(), get_collation(), get_namespace_name_or_temp(), get_opclass(), get_opclass_name(), get_other_operator(), getObjectDescription(), getOpFamilyDescription(), getRelationDescription(), GetTempNamespaceBackendId(), HandleFunctionRequest(), heap_create(), isAnyTempNamespace(), IsThereCollationInNamespace(), IsThereFunctionInNamespace(), IsThereOpClassInNamespace(), IsThereOpFamilyInNamespace(), lazy_scan_heap(), lazy_vacuum_rel(), logicalrep_write_namespace(), map_sql_catalog_to_xmlschema_types(), map_sql_schema_to_xmlschema_types(), map_sql_table_to_xmlschema(), map_sql_type_to_xml_name(), perform_work_item(), pg_decode_change(), pg_decode_truncate(), pg_event_trigger_ddl_commands(), pg_get_functiondef(), pg_get_statisticsobj_worker(), pg_identify_object(), pg_newlocale_from_collation(), plpgsql_fulfill_promise(), postgresGetForeignRelSize(), quoteRelationName(), RangeVarCallbackForAlterRelation(), RangeVarGetAndCheckCreationNamespace(), RebuildConstraintComment(), refresh_by_match_merge(), regclassout(), regconfigout(), regdictionaryout(), regnamespaceout(), regoperout(), regprocout(), ReindexMultipleTables(), report_namespace_conflict(), ri_GenerateQualCollation(), schema_to_xml_internal(), sepgsql_proc_post_create(), sepgsql_relation_post_create(), SPI_getnspname(), transformAlterTableStmt(), and transformCreateStmt().

3052 {
3053  HeapTuple tp;
3054 
3056  if (HeapTupleIsValid(tp))
3057  {
3059  char *result;
3060 
3061  result = pstrdup(NameStr(nsptup->nspname));
3062  ReleaseSysCache(tp);
3063  return result;
3064  }
3065  else
3066  return NULL;
3067 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
FormData_pg_namespace * Form_pg_namespace
Definition: pg_namespace.h:49
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define NameStr(name)
Definition: c.h:576

◆ get_namespace_name_or_temp()

char* get_namespace_name_or_temp ( Oid  nspid)

Definition at line 3075 of file lsyscache.c.

References get_namespace_name(), and isTempNamespace().

Referenced by format_operator_parts(), format_procedure_parts(), format_type_extended(), getObjectIdentityParts(), getOpFamilyIdentity(), and getRelationIdentity().

3076 {
3077  if (isTempNamespace(nspid))
3078  return "pg_temp";
3079  else
3080  return get_namespace_name(nspid);
3081 }
char * get_namespace_name(Oid nspid)
Definition: lsyscache.c:3051
bool isTempNamespace(Oid namespaceId)
Definition: namespace.c:3137

◆ get_negator()

Oid get_negator ( Oid  opno)

Definition at line 1322 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by eqsel_internal(), get_op_btree_interpretation(), lookup_proof_cache(), match_clause_to_partition_key(), negate_clause(), neqjoinsel(), operator_same_subexprs_proof(), patternsel(), and scalararraysel().

1323 {
1324  HeapTuple tp;
1325 
1327  if (HeapTupleIsValid(tp))
1328  {
1330  Oid result;
1331 
1332  result = optup->oprnegate;
1333  ReleaseSysCache(tp);
1334  return result;
1335  }
1336  else
1337  return InvalidOid;
1338 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ get_op_btree_interpretation()

List* get_op_btree_interpretation ( Oid  opno)

Definition at line 598 of file lsyscache.c.

References AMOPOPID, Assert, BTEqualStrategyNumber, get_negator(), GETSTRUCT, i, lappend(), catclist::members, catclist::n_members, NIL, ObjectIdGetDatum, OidIsValid, OpBtreeInterpretation::opfamily_id, OpBtreeInterpretation::oplefttype, OpBtreeInterpretation::oprighttype, palloc(), ReleaseSysCacheList, ROWCOMPARE_NE, SearchSysCacheList1, OpBtreeInterpretation::strategy, and catctup::tuple.

Referenced by lookup_proof_cache(), and make_row_comparison_op().

599 {
600  List *result = NIL;
601  OpBtreeInterpretation *thisresult;
602  CatCList *catlist;
603  int i;
604 
605  /*
606  * Find all the pg_amop entries containing the operator.
607  */
609 
610  for (i = 0; i < catlist->n_members; i++)
611  {
612  HeapTuple op_tuple = &catlist->members[i]->tuple;
613  Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple);
614  StrategyNumber op_strategy;
615 
616  /* must be btree */
617  if (op_form->amopmethod != BTREE_AM_OID)
618  continue;
619 
620  /* Get the operator's btree strategy number */
621  op_strategy = (StrategyNumber) op_form->amopstrategy;
622  Assert(op_strategy >= 1 && op_strategy <= 5);
623 
624  thisresult = (OpBtreeInterpretation *)
625  palloc(sizeof(OpBtreeInterpretation));
626  thisresult->opfamily_id = op_form->amopfamily;
627  thisresult->strategy = op_strategy;
628  thisresult->oplefttype = op_form->amoplefttype;
629  thisresult->oprighttype = op_form->amoprighttype;
630  result = lappend(result, thisresult);
631  }
632 
633  ReleaseSysCacheList(catlist);
634 
635  /*
636  * If we didn't find any btree opfamily containing the operator, perhaps
637  * it is a <> operator. See if it has a negator that is in an opfamily.
638  */
639  if (result == NIL)
640  {
641  Oid op_negator = get_negator(opno);
642 
643  if (OidIsValid(op_negator))
644  {
645  catlist = SearchSysCacheList1(AMOPOPID,
646  ObjectIdGetDatum(op_negator));
647 
648  for (i = 0; i < catlist->n_members; i++)
649  {
650  HeapTuple op_tuple = &catlist->members[i]->tuple;
651  Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple);
652  StrategyNumber op_strategy;
653 
654  /* must be btree */
655  if (op_form->amopmethod != BTREE_AM_OID)
656  continue;
657 
658  /* Get the operator's btree strategy number */
659  op_strategy = (StrategyNumber) op_form->amopstrategy;
660  Assert(op_strategy >= 1 && op_strategy <= 5);
661 
662  /* Only consider negators that are = */
663  if (op_strategy != BTEqualStrategyNumber)
664  continue;
665 
666  /* OK, report it with "strategy" ROWCOMPARE_NE */
667  thisresult = (OpBtreeInterpretation *)
668  palloc(sizeof(OpBtreeInterpretation));
669  thisresult->opfamily_id = op_form->amopfamily;
670  thisresult->strategy = ROWCOMPARE_NE;
671  thisresult->oplefttype = op_form->amoplefttype;
672  thisresult->oprighttype = op_form->amoprighttype;
673  result = lappend(result, thisresult);
674  }
675 
676  ReleaseSysCacheList(catlist);
677  }
678  }
679 
680  return result;
681 }
#define NIL
Definition: pg_list.h:69
int n_members
Definition: catcache.h:176
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
uint16 StrategyNumber
Definition: stratnum.h:22
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:605
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
List * lappend(List *list, void *datum)
Definition: list.c:128
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
#define Assert(condition)
Definition: c.h:699
void * palloc(Size size)
Definition: mcxt.c:924
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121
Oid get_negator(Oid opno)
Definition: lsyscache.c:1322
Definition: pg_list.h:45
#define BTEqualStrategyNumber
Definition: stratnum.h:31

◆ get_op_hash_functions()

bool get_op_hash_functions ( Oid  opno,
RegProcedure lhs_procno,
RegProcedure rhs_procno 
)

Definition at line 507 of file lsyscache.c.

References AMOPOPID, get_opfamily_proc(), GETSTRUCT, HASHSTANDARD_PROC, HTEqualStrategyNumber, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, OidIsValid, ReleaseSysCacheList, SearchSysCacheList1, and catctup::tuple.

Referenced by ExecHashTableCreate(), ExecInitSubPlan(), and execTuplesHashPrepare().

509 {
510  bool result = false;
511  CatCList *catlist;
512  int i;
513 
514  /* Ensure output args are initialized on failure */
515  if (lhs_procno)
516  *lhs_procno = InvalidOid;
517  if (rhs_procno)
518  *rhs_procno = InvalidOid;
519 
520  /*
521  * Search pg_amop to see if the target operator is registered as the "="
522  * operator of any hash opfamily. If the operator is registered in
523  * multiple opfamilies, assume we can use any one.
524  */
526 
527  for (i = 0; i < catlist->n_members; i++)
528  {
529  HeapTuple tuple = &catlist->members[i]->tuple;
530  Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple);
531 
532  if (aform->amopmethod == HASH_AM_OID &&
533  aform->amopstrategy == HTEqualStrategyNumber)
534  {
535  /*
536  * Get the matching support function(s). Failure probably
537  * shouldn't happen --- it implies a bogus opfamily --- but
538  * continue looking if so.
539  */
540  if (lhs_procno)
541  {
542  *lhs_procno = get_opfamily_proc(aform->amopfamily,
543  aform->amoplefttype,
544  aform->amoplefttype,
546  if (!OidIsValid(*lhs_procno))
547  continue;
548  /* Matching LHS found, done if caller doesn't want RHS */
549  if (!rhs_procno)
550  {
551  result = true;
552  break;
553  }
554  /* Only one lookup needed if given operator is single-type */
555  if (aform->amoplefttype == aform->amoprighttype)
556  {
557  *rhs_procno = *lhs_procno;
558  result = true;
559  break;
560  }
561  }
562  if (rhs_procno)
563  {
564  *rhs_procno = get_opfamily_proc(aform->amopfamily,
565  aform->amoprighttype,
566  aform->amoprighttype,
568  if (!OidIsValid(*rhs_procno))
569  {
570  /* Forget any LHS function from this opfamily */
571  if (lhs_procno)
572  *lhs_procno = InvalidOid;
573  continue;
574  }
575  /* Matching RHS found, so done */
576  result = true;
577  break;
578  }
579  }
580  }
581 
582  ReleaseSysCacheList(catlist);
583 
584  return result;
585 }
int n_members
Definition: catcache.h:176
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define HTEqualStrategyNumber
Definition: hash.h:336
#define OidIsValid(objectId)
Definition: c.h:605
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
#define HASHSTANDARD_PROC
Definition: hash.h:351
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
#define InvalidOid
Definition: postgres_ext.h:36
Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
Definition: lsyscache.c:744
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121

◆ get_op_opfamily_properties()

void get_op_opfamily_properties ( Oid  opno,
Oid  opfamily,
bool  ordering_op,
int *  strategy,
Oid lefttype,
Oid righttype 
)

Definition at line 133 of file lsyscache.c.

References AMOPOPID, CharGetDatum, elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache3().

Referenced by adjust_rowcompare_for_index(), ExecIndexBuildScanKeys(), ExecInitExprRec(), gen_prune_steps_from_opexps(), gincost_pattern(), match_clause_to_partition_key(), mergejoinscansel(), and MJExamineQuals().

137 {
138  HeapTuple tp;
139  Form_pg_amop amop_tup;
140 
142  ObjectIdGetDatum(opno),
143  CharGetDatum(ordering_op ? AMOP_ORDER : AMOP_SEARCH),
144  ObjectIdGetDatum(opfamily));
145  if (!HeapTupleIsValid(tp))
146  elog(ERROR, "operator %u is not a member of opfamily %u",
147  opno, opfamily);
148  amop_tup = (Form_pg_amop) GETSTRUCT(tp);
149  *strategy = amop_tup->amopstrategy;
150  *lefttype = amop_tup->amoplefttype;
151  *righttype = amop_tup->amoprighttype;
152  ReleaseSysCache(tp);
153 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache3(int cacheId, Datum key1, Datum key2, Datum key3)
Definition: syscache.c:1134
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define CharGetDatum(X)
Definition: postgres.h:401
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
#define elog
Definition: elog.h:219

◆ get_op_opfamily_sortfamily()

Oid get_op_opfamily_sortfamily ( Oid  opno,
Oid  opfamily 
)

Definition at line 105 of file lsyscache.c.

References AMOPOPID, CharGetDatum, GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache3().

Referenced by match_clause_to_ordering_op().

106 {
107  HeapTuple tp;
108  Form_pg_amop amop_tup;
109  Oid result;
110 
112  ObjectIdGetDatum(opno),
113  CharGetDatum(AMOP_ORDER),
114  ObjectIdGetDatum(opfamily));
115  if (!HeapTupleIsValid(tp))
116  return InvalidOid;
117  amop_tup = (Form_pg_amop) GETSTRUCT(tp);
118  result = amop_tup->amopsortfamily;
119  ReleaseSysCache(tp);
120  return result;
121 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache3(int cacheId, Datum key1, Datum key2, Datum key3)
Definition: syscache.c:1134
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define CharGetDatum(X)
Definition: postgres.h:401
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86

◆ get_op_opfamily_strategy()

int get_op_opfamily_strategy ( Oid  opno,
Oid  opfamily 
)

Definition at line 80 of file lsyscache.c.

References AMOPOPID, CharGetDatum, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache3().

Referenced by adjust_rowcompare_for_index(), btcostestimate(), ComputeIndexAttrs(), get_actual_variable_range(), match_rowcompare_to_indexcol(), and RelationGetExclusionInfo().

81 {
82  HeapTuple tp;
83  Form_pg_amop amop_tup;
84  int result;
85 
87  ObjectIdGetDatum(opno),
88  CharGetDatum(AMOP_SEARCH),
89  ObjectIdGetDatum(opfamily));
90  if (!HeapTupleIsValid(tp))
91  return 0;
92  amop_tup = (Form_pg_amop) GETSTRUCT(tp);
93  result = amop_tup->amopstrategy;
94  ReleaseSysCache(tp);
95  return result;
96 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache3(int cacheId, Datum key1, Datum key2, Datum key3)
Definition: syscache.c:1134
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define CharGetDatum(X)
Definition: postgres.h:401
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86

◆ get_op_rettype()

Oid get_op_rettype ( Oid  opno)

Definition at line 1127 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by gistvalidate().

1128 {
1129  HeapTuple tp;
1130 
1132  if (HeapTupleIsValid(tp))
1133  {
1135  Oid result;
1136 
1137  result = optup->oprresult;
1138  ReleaseSysCache(tp);
1139  return result;
1140  }
1141  else
1142  return InvalidOid;
1143 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ get_opclass_family()

Oid get_opclass_family ( Oid  opclass)

Definition at line 1032 of file lsyscache.c.

References CLAOID, elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache1().

Referenced by build_replindex_scan_key(), ComputeIndexAttrs(), DefineIndex(), infer_collation_opclass_match(), load_rangetype_info(), and lookup_type_cache().

1033 {
1034  HeapTuple tp;
1035  Form_pg_opclass cla_tup;
1036  Oid result;
1037 
1038  tp = SearchSysCache1(CLAOID, ObjectIdGetDatum(opclass));
1039  if (!HeapTupleIsValid(tp))
1040  elog(ERROR, "cache lookup failed for opclass %u", opclass);
1041  cla_tup = (Form_pg_opclass) GETSTRUCT(tp);
1042 
1043  result = cla_tup->opcfamily;
1044  ReleaseSysCache(tp);
1045  return result;
1046 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219
FormData_pg_opclass * Form_pg_opclass
Definition: pg_opclass.h:81

◆ get_opclass_input_type()

Oid get_opclass_input_type ( Oid  opclass)

Definition at line 1054 of file lsyscache.c.

References CLAOID, elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache1().

Referenced by build_replindex_scan_key(), CheckIndexCompatible(), findRangeSubOpclass(), get_rule_expr(), infer_collation_opclass_match(), load_rangetype_info(), and lookup_type_cache().

1055 {
1056  HeapTuple tp;
1057  Form_pg_opclass cla_tup;
1058  Oid result;
1059 
1060  tp = SearchSysCache1(CLAOID, ObjectIdGetDatum(opclass));
1061  if (!HeapTupleIsValid(tp))
1062  elog(ERROR, "cache lookup failed for opclass %u", opclass);
1063  cla_tup = (Form_pg_opclass) GETSTRUCT(tp);
1064 
1065  result = cla_tup->opcintype;
1066  ReleaseSysCache(tp);
1067  return result;
1068 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define elog
Definition: elog.h:219
FormData_pg_opclass * Form_pg_opclass
Definition: pg_opclass.h:81

◆ get_opcode()

RegProcedure get_opcode ( Oid  opno)

Definition at line 1079 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by _bt_compare_scankey_args(), _bt_find_extreme_element(), AlterOpFamilyAdd(), build_pertrans_for_aggref(), build_replindex_scan_key(), BuildSpeculativeIndexInfo(), check_functions_in_node(), ComputeIndexAttrs(), contain_leaked_vars_walker(), cost_qual_eval_walker(), DefineOpClass(), eqjoinsel_inner(), eqjoinsel_semi(), ExecInitSubPlan(), execTuplesHashPrepare(), execTuplesMatchPrepare(), get_expr_result_type(), get_variable_range(), inclusion_get_strategy_procinfo(), inet_mcv_join_sel(), lookup_type_cache(), ltreeparentsel(), make_partition_op_expr(), minmax_get_strategy_procinfo(), mode_final(), networkjoinsel_semi(), networksel(), op_strict(), op_volatile(), OperatorLookup(), patternsel(), prefix_quals(), prefix_selectivity(), RelationGetExclusionInfo(), ri_HashCompareOp(), scalarineqsel(), select_equality_operator(), set_opfuncid(), set_sa_opfuncid(), std_typanalyze(), and var_eq_const().

1080 {
1081  HeapTuple tp;
1082 
1084  if (HeapTupleIsValid(tp))
1085  {
1087  RegProcedure result;
1088 
1089  result = optup->oprcode;
1090  ReleaseSysCache(tp);
1091  return result;
1092  }
1093  else
1094  return (RegProcedure) InvalidOid;
1095 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
regproc RegProcedure
Definition: c.h:472
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ get_opfamily_member()

Oid get_opfamily_member ( Oid  opfamily,
Oid  lefttype,
Oid  righttype,
int16  strategy 
)

Definition at line 163 of file lsyscache.c.

References AMOPSTRATEGY, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache4().

Referenced by _bt_compare_scankey_args(), _bt_find_extreme_element(), adjust_rowcompare_for_index(), ATAddForeignKeyConstraint(), btcostestimate(), build_replindex_scan_key(), BuildSpeculativeIndexInfo(), create_indexscan_plan(), get_compatible_hash_operators(), get_equality_op_for_ordering_op(), get_ordering_op_for_equality_op(), get_partition_operator(), get_relation_info(), lookup_proof_cache(), lookup_type_cache(), make_pathkey_from_sortinfo(), make_unique_from_pathkeys(), mergejoinscansel(), network_prefix_quals(), patternsel(), prefix_quals(), prefix_selectivity(), prepare_sort_from_pathkeys(), refresh_by_match_merge(), and select_equality_operator().

165 {
166  HeapTuple tp;
167  Form_pg_amop amop_tup;
168  Oid result;
169 
171  ObjectIdGetDatum(opfamily),
172  ObjectIdGetDatum(lefttype),
173  ObjectIdGetDatum(righttype),
174  Int16GetDatum(strategy));
175  if (!HeapTupleIsValid(tp))
176  return InvalidOid;
177  amop_tup = (Form_pg_amop) GETSTRUCT(tp);
178  result = amop_tup->amopopr;
179  ReleaseSysCache(tp);
180  return result;
181 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define Int16GetDatum(X)
Definition: postgres.h:436
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache4(int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
Definition: syscache.c:1145
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86

◆ get_opfamily_proc()

Oid get_opfamily_proc ( Oid  opfamily,
Oid  lefttype,
Oid  righttype,
int16  procnum 
)

Definition at line 744 of file lsyscache.c.

References AMPROCNUM, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache4().

Referenced by _bt_first(), _bt_sort_array_elements(), _hash_datum2hashkey_type(), ExecIndexBuildScanKeys(), ExecInitExprRec(), FinishSortSupportFunction(), get_op_hash_functions(), gincost_pattern(), gistvalidate(), load_rangetype_info(), lookup_type_cache(), match_clause_to_partition_key(), MJExamineQuals(), and RelationBuildPartitionKey().

745 {
746  HeapTuple tp;
747  Form_pg_amproc amproc_tup;
748  RegProcedure result;
749 
751  ObjectIdGetDatum(opfamily),
752  ObjectIdGetDatum(lefttype),
753  ObjectIdGetDatum(righttype),
754  Int16GetDatum(procnum));
755  if (!HeapTupleIsValid(tp))
756  return InvalidOid;
757  amproc_tup = (Form_pg_amproc) GETSTRUCT(tp);
758  result = amproc_tup->amproc;
759  ReleaseSysCache(tp);
760  return result;
761 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
FormData_pg_amproc * Form_pg_amproc
Definition: pg_amproc.h:66
regproc RegProcedure
Definition: c.h:472
#define Int16GetDatum(X)
Definition: postgres.h:436
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache4(int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
Definition: syscache.c:1145
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78

◆ get_opname()

char* get_opname ( Oid  opno)

Definition at line 1104 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, NameStr, ObjectIdGetDatum, OPEROID, pstrdup(), ReleaseSysCache(), and SearchSysCache1().

Referenced by AlterOpFamilyAdd(), DefineOpClass(), print_expr(), and show_sortorder_options().

1105 {
1106  HeapTuple tp;
1107 
1109  if (HeapTupleIsValid(tp))
1110  {
1112  char *result;
1113 
1114  result = pstrdup(NameStr(optup->oprname));
1115  ReleaseSysCache(tp);
1116  return result;
1117  }
1118  else
1119  return NULL;
1120 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82
#define NameStr(name)
Definition: c.h:576

◆ get_oprjoin()

RegProcedure get_oprjoin ( Oid  opno)

Definition at line 1370 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by join_selectivity(), and scalararraysel().

1371 {
1372  HeapTuple tp;
1373 
1375  if (HeapTupleIsValid(tp))
1376  {
1378  RegProcedure result;
1379 
1380  result = optup->oprjoin;
1381  ReleaseSysCache(tp);
1382  return result;
1383  }
1384  else
1385  return (RegProcedure) InvalidOid;
1386 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
regproc RegProcedure
Definition: c.h:472
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ get_oprrest()

RegProcedure get_oprrest ( Oid  opno)

Definition at line 1346 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by clauselist_selectivity(), dependency_is_compatible_clause(), restriction_selectivity(), and scalararraysel().

1347 {
1348  HeapTuple tp;
1349 
1351  if (HeapTupleIsValid(tp))
1352  {
1354  RegProcedure result;
1355 
1356  result = optup->oprrest;
1357  ReleaseSysCache(tp);
1358  return result;
1359  }
1360  else
1361  return (RegProcedure) InvalidOid;
1362 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
regproc RegProcedure
Definition: c.h:472
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ get_ordering_op_for_equality_op()

Oid get_ordering_op_for_equality_op ( Oid  opno,
bool  use_lhs_type 
)

Definition at line 302 of file lsyscache.c.

References AMOPOPID, BTEqualStrategyNumber, BTLessStrategyNumber, get_opfamily_member(), GETSTRUCT, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, OidIsValid, ReleaseSysCacheList, SearchSysCacheList1, and catctup::tuple.

Referenced by create_unique_plan().

303 {
304  Oid result = InvalidOid;
305  CatCList *catlist;
306  int i;
307 
308  /*
309  * Search pg_amop to see if the target operator is registered as the "="
310  * operator of any btree opfamily.
311  */
313 
314  for (i = 0; i < catlist->n_members; i++)
315  {
316  HeapTuple tuple = &catlist->members[i]->tuple;
317  Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple);
318 
319  /* must be btree */
320  if (aform->amopmethod != BTREE_AM_OID)
321  continue;
322 
323  if (aform->amopstrategy == BTEqualStrategyNumber)
324  {
325  /* Found a suitable opfamily, get matching ordering operator */
326  Oid typid;
327 
328  typid = use_lhs_type ? aform->amoplefttype : aform->amoprighttype;
329  result = get_opfamily_member(aform->amopfamily,
330  typid, typid,
332  if (OidIsValid(result))
333  break;
334  /* failure probably shouldn't happen, but keep looking if so */
335  }
336  }
337 
338  ReleaseSysCacheList(catlist);
339 
340  return result;
341 }
int n_members
Definition: catcache.h:176
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:605
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
Definition: lsyscache.c:163
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
#define InvalidOid
Definition: postgres_ext.h:36
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121
#define BTLessStrategyNumber
Definition: stratnum.h:29
#define BTEqualStrategyNumber
Definition: stratnum.h:31

◆ get_ordering_op_properties()

bool get_ordering_op_properties ( Oid  opno,
Oid opfamily,
Oid opcintype,
int16 strategy 
)

Definition at line 204 of file lsyscache.c.

References AMOPOPID, BTGreaterStrategyNumber, BTLessStrategyNumber, GETSTRUCT, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, ReleaseSysCacheList, SearchSysCacheList1, and catctup::tuple.

Referenced by build_expression_pathkey(), get_equality_op_for_ordering_op(), get_relation_info(), make_pathkey_from_sortop(), PrepareSortSupportFromOrderingOp(), and transformWindowDefinitions().

206 {
207  bool result = false;
208  CatCList *catlist;
209  int i;
210 
211  /* ensure outputs are initialized on failure */
212  *opfamily = InvalidOid;
213  *opcintype = InvalidOid;
214  *strategy = 0;
215 
216  /*
217  * Search pg_amop to see if the target operator is registered as the "<"
218  * or ">" operator of any btree opfamily.
219  */
221 
222  for (i = 0; i < catlist->n_members; i++)
223  {
224  HeapTuple tuple = &catlist->members[i]->tuple;
225  Form_pg_amop aform = (Form_pg_amop) GETSTRUCT(tuple);
226 
227  /* must be btree */
228  if (aform->amopmethod != BTREE_AM_OID)
229  continue;
230 
231  if (aform->amopstrategy == BTLessStrategyNumber ||
232  aform->amopstrategy == BTGreaterStrategyNumber)
233  {
234  /* Found it ... should have consistent input types */
235  if (aform->amoplefttype == aform->amoprighttype)
236  {
237  /* Found a suitable opfamily, return info */
238  *opfamily = aform->amopfamily;
239  *opcintype = aform->amoplefttype;
240  *strategy = aform->amopstrategy;
241  result = true;
242  break;
243  }
244  }
245  }
246 
247  ReleaseSysCacheList(catlist);
248 
249  return result;
250 }
int n_members
Definition: catcache.h:176
#define BTGreaterStrategyNumber
Definition: stratnum.h:33
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:178
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:209
#define ReleaseSysCacheList(x)
Definition: syscache.h:216
#define InvalidOid
Definition: postgres_ext.h:36
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:86
int i
HeapTupleData tuple
Definition: catcache.h:121
#define BTLessStrategyNumber
Definition: stratnum.h:29

◆ get_promoted_array_type()

Oid get_promoted_array_type ( Oid  typid)

Definition at line 2554 of file lsyscache.c.

References get_array_type(), get_element_type(), InvalidOid, and OidIsValid.

Referenced by build_subplan(), and exprType().

2555 {
2556  Oid array_type = get_array_type(typid);
2557 
2558  if (OidIsValid(array_type))
2559  return array_type;
2560  if (OidIsValid(get_element_type(typid)))
2561  return typid;
2562  return InvalidOid;
2563 }
Oid get_element_type(Oid typid)
Definition: lsyscache.c:2502
Oid get_array_type(Oid typid)
Definition: lsyscache.c:2530
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:605
#define InvalidOid
Definition: postgres_ext.h:36

◆ get_range_subtype()

Oid get_range_subtype ( Oid  rangeOid)

Definition at line 3092 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, RANGETYPE, ReleaseSysCache(), and SearchSysCache1().

Referenced by check_generic_type_consistency(), enforce_generic_type_consistency(), and resolve_generic_type().

3093 {
3094  HeapTuple tp;
3095 
3096  tp = SearchSysCache1(RANGETYPE, ObjectIdGetDatum(rangeOid));
3097  if (HeapTupleIsValid(tp))
3098  {
3099  Form_pg_range rngtup = (Form_pg_range) GETSTRUCT(tp);
3100  Oid result;
3101 
3102  result = rngtup->rngsubtype;
3103  ReleaseSysCache(tp);
3104  return result;
3105  }
3106  else
3107  return InvalidOid;
3108 }
FormData_pg_range * Form_pg_range
Definition: pg_range.h:55
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78

◆ get_rel_name()

char* get_rel_name ( Oid  relid)

Definition at line 1730 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, NameStr, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), RELOID, and SearchSysCache1().

Referenced by adjust_appendrel_attrs_mutator(), adjust_inherited_tlist(), AlterSubscription_refresh(), AlterTableNamespace(), ApplyWorkerMain(), ATExecChangeOwner(), check_enable_rls(), check_new_partition_bound(), conversion_error_callback(), convert_column_name(), CreateTrigger(), do_autovacuum(), EnableDisableRule(), exec_object_restorecon(), ExecCheckRTPerms(), execCurrentOf(), expand_col_privileges(), explain_get_index_name(), ExplainTargetRel(), get_relation_constraint_attnos(), get_relation_constraint_oid(), get_relation_name(), get_relation_policy_oid(), get_rewrite_oid(), get_rte_attribute_type(), get_trigger_oid(), getObjectDescription(), getObjectIdentityParts(), gincost_pattern(), has_sequence_privilege_id(), has_sequence_privilege_id_id(), has_sequence_privilege_name_id(), heap_truncate_check_FKs(), InsertRule(), LockTableRecurse(), LockViewRecurse_walker(), map_sql_schema_to_xmlschema_types(), perform_work_item(), pg_attribute_noreturn(), pg_decode_change(), pg_extension_config_dump(), pg_get_expr(), pg_get_expr_ext(), pg_prewarm(), pg_sequence_parameters(), postgresGetForeignRelSize(), process_owned_by(), reindex_index(), ReindexMultipleTables(), RenameConstraintById(), satisfies_hash_partition(), set_rtable_names(), show_modifytable_info(), table_to_xml_internal(), and transformAlterTableStmt().

1731 {
1732  HeapTuple tp;
1733 
1734  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1735  if (HeapTupleIsValid(tp))
1736  {
1737  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1738  char *result;
1739 
1740  result = pstrdup(NameStr(reltup->relname));
1741  ReleaseSysCache(tp);
1742  return result;
1743  }
1744  else
1745  return NULL;
1746 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
char * pstrdup(const char *in)
Definition: mcxt.c:1161
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_class * Form_pg_class
Definition: pg_class.h:93
#define NameStr(name)
Definition: c.h:576

◆ get_rel_namespace()

Oid get_rel_namespace ( Oid  relid)

Definition at line 1754 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), RELOID, and SearchSysCache1().

Referenced by AlterSubscription_refresh(), check_relation_privileges(), do_autovacuum(), exec_object_restorecon(), ExecCheckXactReadOnly(), perform_work_item(), pg_decode_change(), ReindexMultipleTables(), sepgsql_relation_drop(), and transformAlterTableStmt().

1755 {
1756  HeapTuple tp;
1757 
1758  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1759  if (HeapTupleIsValid(tp))
1760  {
1761  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1762  Oid result;
1763 
1764  result = reltup->relnamespace;
1765  ReleaseSysCache(tp);
1766  return result;
1767  }
1768  else
1769  return InvalidOid;
1770 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_class * Form_pg_class
Definition: pg_class.h:93

◆ get_rel_persistence()

char get_rel_persistence ( Oid  relid)

Definition at line 1856 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), RELOID, and SearchSysCache1().

Referenced by set_rel_consider_parallel().

1857 {
1858  HeapTuple tp;
1859  Form_pg_class reltup;
1860  char result;
1861 
1862  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1863  if (!HeapTupleIsValid(tp))
1864  elog(ERROR, "cache lookup failed for relation %u", relid);
1865  reltup = (Form_pg_class) GETSTRUCT(tp);
1866  result = reltup->relpersistence;
1867  ReleaseSysCache(tp);
1868 
1869  return result;
1870 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_class * Form_pg_class
Definition: pg_class.h:93
#define elog
Definition: elog.h:219

◆ get_rel_relkind()

char get_rel_relkind ( Oid  relid)

Definition at line 1805 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), RELOID, and SearchSysCache1().

Referenced by AlterSubscription_refresh(), AlterTableMoveAll(), AlterTypeNamespaceInternal(), AlterTypeOwner(), ATExecAlterColumnType(), ATExecChangeOwner(), check_relation_privileges(), CreateSubscription(), CreateTrigger(), doDeletion(), EnableDisableRule(), exec_object_restorecon(), ExecCheckRTPerms(), get_constraint_index(), get_object_type(), get_partition_dispatch_recurse(), getOwnedSequences(), has_sequence_privilege_id(), has_sequence_privilege_id_id(), has_sequence_privilege_id_name(), has_sequence_privilege_name(), has_sequence_privilege_name_id(), has_sequence_privilege_name_name(), LockTableCommand(), LockTableRecurse(), pg_get_serial_sequence(), pg_get_triggerdef_worker(), ProcessUtilitySlow(), RangeVarCallbackForAlterRelation(), RangeVarCallbackForDropRelation(), RangeVarCallbackForLockTable(), RangeVarCallbackForPolicy(), RangeVarCallbackForReindexIndex(), RangeVarCallbackForRenameRule(), RangeVarCallbackForRenameTrigger(), RangeVarCallbackOwnsRelation(), RangeVarCallbackOwnsTable(), RangeVarGetAndCheckCreationNamespace(), renameatt_check(), RenameType(), sepgsql_attribute_drop(), sepgsql_attribute_post_create(), sepgsql_attribute_relabel(), sepgsql_attribute_setattr(), sepgsql_relation_drop(), sepgsql_relation_relabel(), and sepgsql_relation_setattr().

1806 {
1807  HeapTuple tp;
1808 
1809  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1810  if (HeapTupleIsValid(tp))
1811  {
1812  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1813  char result;
1814 
1815  result = reltup->relkind;
1816  ReleaseSysCache(tp);
1817  return result;
1818  }
1819  else
1820  return '\0';
1821 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_class * Form_pg_class
Definition: pg_class.h:93

◆ get_rel_tablespace()

Oid get_rel_tablespace ( Oid  relid)

Definition at line 1832 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), RELOID, and SearchSysCache1().

Referenced by pg_get_constraintdef_worker(), and pg_get_indexdef_worker().

1833 {
1834  HeapTuple tp;
1835 
1836  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1837  if (HeapTupleIsValid(tp))
1838  {
1839  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1840  Oid result;
1841 
1842  result = reltup->reltablespace;
1843  ReleaseSysCache(tp);
1844  return result;
1845  }
1846  else
1847  return InvalidOid;
1848 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_class * Form_pg_class
Definition: pg_class.h:93

◆ get_rel_type_id()

Oid get_rel_type_id ( Oid  relid)

Definition at line 1781 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), RELOID, and SearchSysCache1().

Referenced by makeWholeRowVar(), plpgsql_parse_cwordrowtype(), and plpgsql_parse_wordrowtype().

1782 {
1783  HeapTuple tp;
1784 
1785  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1786  if (HeapTupleIsValid(tp))
1787  {
1788  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1789  Oid result;
1790 
1791  result = reltup->reltype;
1792  ReleaseSysCache(tp);
1793  return result;
1794  }
1795  else
1796  return InvalidOid;
1797 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_class * Form_pg_class
Definition: pg_class.h:93

◆ get_relname_relid()

◆ get_transform_fromsql()

Oid get_transform_fromsql ( Oid  typid,
Oid  langid,
List trftypes 
)

Definition at line 1876 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, list_member_oid(), ReleaseSysCache(), SearchSysCache2(), and TRFTYPELANG.

Referenced by plperl_call_perl_func(), plperl_hash_from_tuple(), plperl_ref_from_pg_array(), and PLy_input_setup_func().

1877 {
1878  HeapTuple tup;
1879 
1880  if (!list_member_oid(trftypes, typid))
1881  return InvalidOid;
1882 
1883  tup = SearchSysCache2(TRFTYPELANG, typid, langid);
1884  if (HeapTupleIsValid(tup))
1885  {
1886  Oid funcid;
1887 
1888  funcid = ((Form_pg_transform) GETSTRUCT(tup))->trffromsql;
1889  ReleaseSysCache(tup);
1890  return funcid;
1891  }
1892  else
1893  return InvalidOid;
1894 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
FormData_pg_transform * Form_pg_transform
Definition: pg_transform.h:42
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
bool list_member_oid(const List *list, Oid datum)
Definition: list.c:505
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123

◆ get_transform_tosql()

Oid get_transform_tosql ( Oid  typid,
Oid  langid,
List trftypes 
)

Definition at line 1897 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, list_member_oid(), ReleaseSysCache(), SearchSysCache2(), and TRFTYPELANG.

Referenced by plperl_sv_to_datum(), and PLy_output_setup_func().

1898 {
1899  HeapTuple tup;
1900 
1901  if (!list_member_oid(trftypes, typid))
1902  return InvalidOid;
1903 
1904  tup = SearchSysCache2(TRFTYPELANG, typid, langid);
1905  if (HeapTupleIsValid(tup))
1906  {
1907  Oid funcid;
1908 
1909  funcid = ((Form_pg_transform) GETSTRUCT(tup))->trftosql;
1910  ReleaseSysCache(tup);
1911  return funcid;
1912  }
1913  else
1914  return InvalidOid;
1915 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
FormData_pg_transform * Form_pg_transform
Definition: pg_transform.h:42
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
bool list_member_oid(const List *list, Oid datum)
Definition: list.c:505
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:1123

◆ get_typ_typrelid()

Oid get_typ_typrelid ( Oid  typid)

Definition at line 2475 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by ATPostAlterTypeCleanup(), CheckAttributeType(), find_expr_references_walker(), and processIndirection().

2476 {
2477  HeapTuple tp;
2478 
2480  if (HeapTupleIsValid(tp))
2481  {
2482  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2483  Oid result;
2484 
2485  result = typtup->typrelid;
2486  ReleaseSysCache(tp);
2487  return result;
2488  }
2489  else
2490  return InvalidOid;
2491 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typavgwidth()

int32 get_typavgwidth ( Oid  typid,
int32  typmod 
)

Definition at line 2332 of file lsyscache.c.

References get_typlen(), type_maximum_size(), and typlen.

Referenced by create_one_window_path(), find_placeholder_info(), get_agg_clause_costs_walker(), get_rel_data_width(), set_append_rel_size(), set_pathtarget_cost_width(), and set_rel_width().

2333 {
2334  int typlen = get_typlen(typid);
2335  int32 maxwidth;
2336 
2337  /*
2338  * Easy if it's a fixed-width type
2339  */
2340  if (typlen > 0)
2341  return typlen;
2342 
2343  /*
2344  * type_maximum_size knows the encoding of typmod for some datatypes;
2345  * don't duplicate that knowledge here.
2346  */
2347  maxwidth = type_maximum_size(typid, typmod);
2348  if (maxwidth > 0)
2349  {
2350  /*
2351  * For BPCHAR, the max width is also the only width. Otherwise we
2352  * need to guess about the typical data width given the max. A sliding
2353  * scale for percentage of max width seems reasonable.
2354  */
2355  if (typid == BPCHAROID)
2356  return maxwidth;
2357  if (maxwidth <= 32)
2358  return maxwidth; /* assume full width */
2359  if (maxwidth < 1000)
2360  return 32 + (maxwidth - 32) / 2; /* assume 50% */
2361 
2362  /*
2363  * Beyond 1000, assume we're looking at something like
2364  * "varchar(10000)" where the limit isn't actually reached often, and
2365  * use a fixed estimate.
2366  */
2367  return 32 + (1000 - 32) / 2;
2368  }
2369 
2370  /*
2371  * Oops, we have no idea ... wild guess time.
2372  */
2373  return 32;
2374 }
int16 typlen
Definition: pg_type.h:55
signed int int32
Definition: c.h:313
int32 type_maximum_size(Oid type_oid, int32 typemod)
Definition: format_type.c:397
int16 get_typlen(Oid typid)
Definition: lsyscache.c:1951

◆ get_typbyval()

bool get_typbyval ( Oid  typid)

Definition at line 1976 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by get_agg_clause_costs_walker().

1977 {
1978  HeapTuple tp;
1979 
1981  if (HeapTupleIsValid(tp))
1982  {
1983  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
1984  bool result;
1985 
1986  result = typtup->typbyval;
1987  ReleaseSysCache(tp);
1988  return result;
1989  }
1990  else
1991  return false;
1992 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typcollation()

Oid get_typcollation ( Oid  typid)

Definition at line 2799 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by assign_collations_walker(), ATExecAddColumn(), check_sql_fn_retval(), DefineRange(), domainAddConstraint(), fixed_paramref_hook(), get_cast_hashentry(), get_collation(), get_const_collation(), get_from_clause_coldeflist(), GetColumnDefCollation(), resolve_polymorphic_tupdesc(), sql_fn_make_param(), transformAssignmentSubscripts(), type_is_collatable(), variable_coerce_param_hook(), and variable_paramref_hook().

2800 {
2801  HeapTuple tp;
2802 
2804  if (HeapTupleIsValid(tp))
2805  {
2806  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2807  Oid result;
2808 
2809  result = typtup->typcollation;
2810  ReleaseSysCache(tp);
2811  return result;
2812  }
2813  else
2814  return InvalidOid;
2815 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typdefault()

Node* get_typdefault ( Oid  typid)

Definition at line 2202 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, getTypeIOParam(), HeapTupleIsValid, makeConst(), ObjectIdGetDatum, OidInputFunctionCall(), pfree(), ReleaseSysCache(), SearchSysCache1(), stringToNode(), SysCacheGetAttr(), TextDatumGetCString, generate_unaccent_rules::type, and TYPEOID.

Referenced by build_column_default().

2203 {
2204  HeapTuple typeTuple;
2206  Datum datum;
2207  bool isNull;
2208  Node *expr;
2209 
2210  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2211  if (!HeapTupleIsValid(typeTuple))
2212  elog(ERROR, "cache lookup failed for type %u", typid);
2213  type = (Form_pg_type) GETSTRUCT(typeTuple);
2214 
2215  /*
2216  * typdefault and typdefaultbin are potentially null, so don't try to
2217  * access 'em as struct fields. Must do it the hard way with
2218  * SysCacheGetAttr.
2219  */
2220  datum = SysCacheGetAttr(TYPEOID,
2221  typeTuple,
2222  Anum_pg_type_typdefaultbin,
2223  &isNull);
2224 
2225  if (!isNull)
2226  {
2227  /* We have an expression default */
2228  expr = stringToNode(TextDatumGetCString(datum));
2229  }
2230  else
2231  {
2232  /* Perhaps we have a plain literal default */
2233  datum = SysCacheGetAttr(TYPEOID,
2234  typeTuple,
2235  Anum_pg_type_typdefault,
2236  &isNull);
2237 
2238  if (!isNull)
2239  {
2240  char *strDefaultVal;
2241 
2242  /* Convert text datum to C string */
2243  strDefaultVal = TextDatumGetCString(datum);
2244  /* Convert C string to a value of the given type */
2245  datum = OidInputFunctionCall(type->typinput, strDefaultVal,
2246  getTypeIOParam(typeTuple), -1);
2247  /* Build a Const node containing the value */
2248  expr = (Node *) makeConst(typid,
2249  -1,
2250  type->typcollation,
2251  type->typlen,
2252  datum,
2253  false,
2254  type->typbyval);
2255  pfree(strDefaultVal);
2256  }
2257  else
2258  {
2259  /* No default */
2260  expr = NULL;
2261  }
2262  }
2263 
2264  ReleaseSysCache(typeTuple);
2265 
2266  return expr;
2267 }
void * stringToNode(char *str)
Definition: read.c:39
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
Definition: nodes.h:517
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:298
void pfree(void *pointer)
Definition: mcxt.c:1031
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
#define TextDatumGetCString(d)
Definition: builtins.h:96
uintptr_t Datum
Definition: postgres.h:367
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition: syscache.c:1368
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2057
#define elog
Definition: elog.h:219
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
Definition: fmgr.c:1824

◆ get_type_category_preferred()

void get_type_category_preferred ( Oid  typid,
char *  typcategory,
bool typispreferred 
)

Definition at line 2454 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by func_select_candidate(), IsPreferredType(), select_common_type(), and TypeCategory().

2455 {
2456  HeapTuple tp;
2457  Form_pg_type typtup;
2458 
2460  if (!HeapTupleIsValid(tp))
2461  elog(ERROR, "cache lookup failed for type %u", typid);
2462  typtup = (Form_pg_type) GETSTRUCT(tp);
2463  *typcategory = typtup->typcategory;
2464  *typispreferred = typtup->typispreferred;
2465  ReleaseSysCache(tp);
2466 }
char typcategory
Definition: pg_type.h:84
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define elog
Definition: elog.h:219

◆ get_type_io_data()

void get_type_io_data ( Oid  typid,
IOFuncSelector  which_func,
int16 typlen,
bool typbyval,
char *  typalign,
char *  typdelim,
Oid typioparam,
Oid func 
)

Definition at line 2079 of file lsyscache.c.

References boot_get_type_io_data(), elog, ERROR, GETSTRUCT, getTypeIOParam(), HeapTupleIsValid, IOFunc_input, IOFunc_output, IOFunc_receive, IOFunc_send, IsBootstrapProcessingMode, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by array_in(), array_out(), array_recv(), array_send(), array_to_text_internal(), get_range_io_data(), and plperl_ref_from_pg_array().

2087 {
2088  HeapTuple typeTuple;
2089  Form_pg_type typeStruct;
2090 
2091  /*
2092  * In bootstrap mode, pass it off to bootstrap.c. This hack allows us to
2093  * use array_in and array_out during bootstrap.
2094  */
2096  {
2097  Oid typinput;
2098  Oid typoutput;
2099 
2100  boot_get_type_io_data(typid,
2101  typlen,
2102  typbyval,
2103  typalign,
2104  typdelim,
2105  typioparam,
2106  &typinput,
2107  &typoutput);
2108  switch (which_func)
2109  {
2110  case IOFunc_input:
2111  *func = typinput;
2112  break;
2113  case IOFunc_output:
2114  *func = typoutput;
2115  break;
2116  default:
2117  elog(ERROR, "binary I/O not supported during bootstrap");
2118  break;
2119  }
2120  return;
2121  }
2122 
2123  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2124  if (!HeapTupleIsValid(typeTuple))
2125  elog(ERROR, "cache lookup failed for type %u", typid);
2126  typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
2127 
2128  *typlen = typeStruct->typlen;
2129  *typbyval = typeStruct->typbyval;
2130  *typalign = typeStruct->typalign;
2131  *typdelim = typeStruct->typdelim;
2132  *typioparam = getTypeIOParam(typeTuple);
2133  switch (which_func)
2134  {
2135  case IOFunc_input:
2136  *func = typeStruct->typinput;
2137  break;
2138  case IOFunc_output:
2139  *func = typeStruct->typoutput;
2140  break;
2141  case IOFunc_receive:
2142  *func = typeStruct->typreceive;
2143  break;
2144  case IOFunc_send:
2145  *func = typeStruct->typsend;
2146  break;
2147  }
2148  ReleaseSysCache(typeTuple);
2149 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int16 typlen
Definition: pg_type.h:55
unsigned int Oid
Definition: postgres_ext.h:31
char typalign
Definition: pg_type.h:167
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define IsBootstrapProcessingMode()
Definition: miscadmin.h:372
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2057
#define elog
Definition: elog.h:219
void boot_get_type_io_data(Oid typid, int16 *typlen, bool *typbyval, char *typalign, char *typdelim, Oid *typioparam, Oid *typinput, Oid *typoutput)
Definition: bootstrap.c:959
bool typbyval
Definition: pg_type.h:65

◆ get_typisdefined()

bool get_typisdefined ( Oid  typid)

Definition at line 1927 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by DefineRange(), DefineType(), logicalrep_typmap_gettypname(), moveArrayTypeName(), and RenameTypeInternal().

1928 {
1929  HeapTuple tp;
1930 
1932  if (HeapTupleIsValid(tp))
1933  {
1934  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
1935  bool result;
1936 
1937  result = typtup->typisdefined;
1938  ReleaseSysCache(tp);
1939  return result;
1940  }
1941  else
1942  return false;
1943 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typlen()

int16 get_typlen ( Oid  typid)

Definition at line 1951 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by exec_assign_value(), ExecBuildProjectionInfo(), ExecInitArrayRef(), ExecInitCoerceToDomain(), ExecInitExprRec(), get_typavgwidth(), and pg_column_size().

1952 {
1953  HeapTuple tp;
1954 
1956  if (HeapTupleIsValid(tp))
1957  {
1958  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
1959  int16 result;
1960 
1961  result = typtup->typlen;
1962  ReleaseSysCache(tp);
1963  return result;
1964  }
1965  else
1966  return 0;
1967 }
signed short int16
Definition: c.h:312
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typlenbyval()

void get_typlenbyval ( Oid  typid,
int16 typlen,
bool typbyval 
)

Definition at line 2005 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by build_pertrans_for_aggref(), copyParamList(), EstimateParamExecSpace(), EstimateParamListSpace(), eval_const_expressions_mutator(), evaluate_expr(), exec_eval_using_params(), exec_stmt_block(), ExecInitAgg(), ExecInitIndexScan(), ExecInitWindowAgg(), ExecWindowAgg(), fillTypeDesc(), get_actual_variable_range(), get_variable_range(), init_sql_fcache(), initialize_peragg(), makeNullConst(), scalararraysel(), SerializeParamExecParams(), SerializeParamList(), and tuplesort_begin_datum().

2006 {
2007  HeapTuple tp;
2008  Form_pg_type typtup;
2009 
2011  if (!HeapTupleIsValid(tp))
2012  elog(ERROR, "cache lookup failed for type %u", typid);
2013  typtup = (Form_pg_type) GETSTRUCT(tp);
2014  *typlen = typtup->typlen;
2015  *typbyval = typtup->typbyval;
2016  ReleaseSysCache(tp);
2017 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int16 typlen
Definition: pg_type.h:55
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define elog
Definition: elog.h:219
bool typbyval
Definition: pg_type.h:65

◆ get_typlenbyvalalign()

void get_typlenbyvalalign ( Oid  typid,
int16 typlen,
bool typbyval,
char *  typalign 
)

Definition at line 2025 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by _bt_preprocess_array_keys(), array_create_iterator(), array_fill_internal(), array_map(), array_position_common(), array_positions(), array_to_json_internal(), array_to_jsonb_internal(), array_unnest(), arrayconst_startup_fn(), CreateCast(), DefineRange(), exec_assign_value(), ExecEvalScalarArrayOp(), ExecIndexEvalArrayKeys(), ExecInitArrayRef(), ExecInitExprRec(), expand_array(), extract_variadic_args(), get_text_array_contents(), ginarrayextract(), gincost_scalararrayopexpr(), ginqueryarrayextract(), initArrayResult(), map_sql_value_to_xml_value(), match_clause_to_partition_key(), ordered_set_startup(), RelationBuildPartitionKey(), satisfies_hash_partition(), scalararraysel(), and text_format().

2027 {
2028  HeapTuple tp;
2029  Form_pg_type typtup;
2030 
2032  if (!HeapTupleIsValid(tp))
2033  elog(ERROR, "cache lookup failed for type %u", typid);
2034  typtup = (Form_pg_type) GETSTRUCT(tp);
2035  *typlen = typtup->typlen;
2036  *typbyval = typtup->typbyval;
2037  *typalign = typtup->typalign;
2038  ReleaseSysCache(tp);
2039 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int16 typlen
Definition: pg_type.h:55
char typalign
Definition: pg_type.h:167
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define elog
Definition: elog.h:219
bool typbyval
Definition: pg_type.h:65

◆ get_typmodin()

Oid get_typmodin ( Oid  typid)

Definition at line 2749 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

2750 {
2751  HeapTuple tp;
2752 
2754  if (HeapTupleIsValid(tp))
2755  {
2756  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2757  Oid result;
2758 
2759  result = typtup->typmodin;
2760  ReleaseSysCache(tp);
2761  return result;
2762  }
2763  else
2764  return InvalidOid;
2765 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typstorage()

char get_typstorage ( Oid  typid)

Definition at line 2173 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

2174 {
2175  HeapTuple tp;
2176 
2178  if (HeapTupleIsValid(tp))
2179  {
2180  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2181  char result;
2182 
2183  result = typtup->typstorage;
2184  ReleaseSysCache(tp);
2185  return result;
2186  }
2187  else
2188  return 'p';
2189 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ get_typtype()

char get_typtype ( Oid  typid)

Definition at line 2383 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by AlterTypeNamespace(), check_sql_fn_retval(), CheckAttributeType(), CreateCast(), CreateTransform(), DefineAggregate(), DefineRange(), DefineType(), fmgr_sql_validator(), get_rels_with_domain(), get_type_func_class(), inline_set_returning_function(), map_sql_type_to_xmlschema_type(), plperl_validator(), plpgsql_validator(), prepare_column_cache(), type_is_enum(), type_is_range(), and type_is_rowtype().

2384 {
2385  HeapTuple tp;
2386 
2388  if (HeapTupleIsValid(tp))
2389  {
2390  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2391  char result;
2392 
2393  result = typtup->typtype;
2394  ReleaseSysCache(tp);
2395  return result;
2396  }
2397  else
2398  return '\0';
2399 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247

◆ getBaseType()

◆ getBaseTypeAndTypmod()

Oid getBaseTypeAndTypmod ( Oid  typid,
int32 typmod 
)

Definition at line 2292 of file lsyscache.c.

References Assert, elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by ATExecAddColumn(), build_coercion_expression(), cache_record_field_properties(), coerce_record_to_complex(), coerce_to_domain(), coerce_type(), exec_assign_value(), getBaseType(), lookup_type_cache(), map_sql_type_to_xmlschema_type(), prepare_column_cache(), SendRowDescriptionCols_2(), SendRowDescriptionCols_3(), transformArrayType(), transformAssignmentIndirection(), and transformTypeCast().

2293 {
2294  /*
2295  * We loop to find the bottom base type in a stack of domains.
2296  */
2297  for (;;)
2298  {
2299  HeapTuple tup;
2300  Form_pg_type typTup;
2301 
2302  tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2303  if (!HeapTupleIsValid(tup))
2304  elog(ERROR, "cache lookup failed for type %u", typid);
2305  typTup = (Form_pg_type) GETSTRUCT(tup);
2306  if (typTup->typtype != TYPTYPE_DOMAIN)
2307  {
2308  /* Not a domain, so done */
2309  ReleaseSysCache(tup);
2310  break;
2311  }
2312 
2313  Assert(*typmod == -1);
2314  typid = typTup->typbasetype;
2315  *typmod = typTup->typtypmod;
2316 
2317  ReleaseSysCache(tup);
2318  }
2319 
2320  return typid;
2321 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define Assert(condition)
Definition: c.h:699
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define elog
Definition: elog.h:219

◆ getTypeBinaryInputInfo()

void getTypeBinaryInputInfo ( Oid  type,
Oid typReceive,
Oid typIOParam 
)

Definition at line 2683 of file lsyscache.c.

References elog, ereport, errcode(), errmsg(), ERROR, format_type_be(), GETSTRUCT, getTypeIOParam(), HeapTupleIsValid, ObjectIdGetDatum, OidIsValid, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by BeginCopyFrom(), domain_state_setup(), exec_bind_message(), parse_fcall_arguments(), parse_fcall_arguments_20(), and record_recv().

2684 {
2685  HeapTuple typeTuple;
2686  Form_pg_type pt;
2687 
2689  if (!HeapTupleIsValid(typeTuple))
2690  elog(ERROR, "cache lookup failed for type %u", type);
2691  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2692 
2693  if (!pt->typisdefined)
2694  ereport(ERROR,
2695  (errcode(ERRCODE_UNDEFINED_OBJECT),
2696  errmsg("type %s is only a shell",
2697  format_type_be(type))));
2698  if (!OidIsValid(pt->typreceive))
2699  ereport(ERROR,
2700  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2701  errmsg("no binary input function available for type %s",
2702  format_type_be(type))));
2703 
2704  *typReceive = pt->typreceive;
2705  *typIOParam = getTypeIOParam(typeTuple);
2706 
2707  ReleaseSysCache(typeTuple);
2708 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:328
#define OidIsValid(objectId)
Definition: c.h:605
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
int errmsg(const char *fmt,...)
Definition: elog.c:797
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2057
#define elog
Definition: elog.h:219

◆ getTypeBinaryOutputInfo()

void getTypeBinaryOutputInfo ( Oid  type,
Oid typSend,
bool typIsVarlena 
)

Definition at line 2716 of file lsyscache.c.

References elog, ereport, errcode(), errmsg(), ERROR, format_type_be(), GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, OidIsValid, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by CopyTo(), printtup_prepare_info(), record_send(), and SendFunctionResult().

2717 {
2718  HeapTuple typeTuple;
2719  Form_pg_type pt;
2720 
2722  if (!HeapTupleIsValid(typeTuple))
2723  elog(ERROR, "cache lookup failed for type %u", type);
2724  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2725 
2726  if (!pt->typisdefined)
2727  ereport(ERROR,
2728  (errcode(ERRCODE_UNDEFINED_OBJECT),
2729  errmsg("type %s is only a shell",
2730  format_type_be(type))));
2731  if (!OidIsValid(pt->typsend))
2732  ereport(ERROR,
2733  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2734  errmsg("no binary output function available for type %s",
2735  format_type_be(type))));
2736 
2737  *typSend = pt->typsend;
2738  *typIsVarlena = (!pt->typbyval) && (pt->typlen == -1);
2739 
2740  ReleaseSysCache(typeTuple);
2741 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:328
#define OidIsValid(objectId)
Definition: c.h:605
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
int errmsg(const char *fmt,...)
Definition: elog.c:797
#define elog
Definition: elog.h:219

◆ getTypeInputInfo()

void getTypeInputInfo ( Oid  type,
Oid typInput,
Oid typIOParam 
)

Definition at line 2617 of file lsyscache.c.

References elog, ereport, errcode(), errmsg(), ERROR, format_type_be(), GETSTRUCT, getTypeIOParam(), HeapTupleIsValid, ObjectIdGetDatum, OidIsValid, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by _sv_to_datum_finfo(), BeginCopyFrom(), check_functions_in_node(), cost_qual_eval_walker(), DefineAggregate(), domain_state_setup(), eval_const_expressions_mutator(), exec_bind_message(), ExecInitExprRec(), ExecInitTableFuncScan(), GetAggInitVal(), hstore_populate_record(), parse_fcall_arguments(), plperl_spi_prepare(), pltcl_SPI_prepare(), PLy_output_setup_func(), prepare_column_cache(), record_in(), slot_modify_cstrings(), slot_store_cstrings(), and TupleDescGetAttInMetadata().

2618 {
2619  HeapTuple typeTuple;
2620  Form_pg_type pt;
2621 
2623  if (!HeapTupleIsValid(typeTuple))
2624  elog(ERROR, "cache lookup failed for type %u", type);
2625  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2626 
2627  if (!pt->typisdefined)
2628  ereport(ERROR,
2629  (errcode(ERRCODE_UNDEFINED_OBJECT),
2630  errmsg("type %s is only a shell",
2631  format_type_be(type))));
2632  if (!OidIsValid(pt->typinput))
2633  ereport(ERROR,
2634  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2635  errmsg("no input function available for type %s",
2636  format_type_be(type))));
2637 
2638  *typInput = pt->typinput;
2639  *typIOParam = getTypeIOParam(typeTuple);
2640 
2641  ReleaseSysCache(typeTuple);
2642 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:328
#define OidIsValid(objectId)
Definition: c.h:605
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
int errmsg(const char *fmt,...)
Definition: elog.c:797
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2057
#define elog
Definition: elog.h:219

◆ getTypeIOParam()

Oid getTypeIOParam ( HeapTuple  typeTuple)

Definition at line 2057 of file lsyscache.c.

References GETSTRUCT, HeapTupleGetOid, and OidIsValid.

Referenced by compile_plperl_function(), compile_pltcl_function(), get_typdefault(), get_type_io_data(), getTypeBinaryInputInfo(), getTypeInputInfo(), and stringTypeDatum().

2058 {
2059  Form_pg_type typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
2060 
2061  /*
2062  * Array types get their typelem as parameter; everybody else gets their
2063  * own type OID as parameter.
2064  */
2065  if (OidIsValid(typeStruct->typelem))
2066  return typeStruct->typelem;
2067  else
2068  return HeapTupleGetOid(typeTuple);
2069 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define OidIsValid(objectId)
Definition: c.h:605
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
#define HeapTupleGetOid(tuple)
Definition: htup_details.h:707

◆ getTypeOutputInfo()

void getTypeOutputInfo ( Oid  type,
Oid typOutput,
bool typIsVarlena 
)

Definition at line 2650 of file lsyscache.c.

References elog, ereport, errcode(), errmsg(), ERROR, format_type_be(), GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, OidIsValid, ReleaseSysCache(), SearchSysCache1(), and TYPEOID.

Referenced by brin_page_items(), build_concat_foutcache(), BuildIndexValueDescription(), check_functions_in_node(), convert_value_to_string(), CopyTo(), cost_qual_eval_walker(), create_foreign_modify(), debugtup(), deparseConst(), errdetail_params(), eval_const_expressions_mutator(), ExecBuildSlotPartitionKeyDescription(), ExecBuildSlotValueDescription(), ExecInitExprRec(), get_const_expr(), hstore_from_record(), json_categorize_type(), jsonb_categorize_type(), map_sql_value_to_xml_value(), plperl_hash_from_tuple(), plperl_sv_to_literal(), pltcl_build_tuple_argument(), pltcl_set_tuple_values(), PLy_input_setup_func(), prepare_query_params(), print_expr(), printtup_prepare_info(), record_out(), SendFunctionResult(), set_limit(), SPI_getvalue(), text_format(), and tuple_to_stringinfo().

2651 {
2652  HeapTuple typeTuple;
2653  Form_pg_type pt;
2654 
2656  if (!HeapTupleIsValid(typeTuple))
2657  elog(ERROR, "cache lookup failed for type %u", type);
2658  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2659 
2660  if (!pt->typisdefined)
2661  ereport(ERROR,
2662  (errcode(ERRCODE_UNDEFINED_OBJECT),
2663  errmsg("type %s is only a shell",
2664  format_type_be(type))));
2665  if (!OidIsValid(pt->typoutput))
2666  ereport(ERROR,
2667  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2668  errmsg("no output function available for type %s",
2669  format_type_be(type))));
2670 
2671  *typOutput = pt->typoutput;
2672  *typIsVarlena = (!pt->typbyval) && (pt->typlen == -1);
2673 
2674  ReleaseSysCache(typeTuple);
2675 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:328
#define OidIsValid(objectId)
Definition: c.h:605
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_type * Form_pg_type
Definition: pg_type.h:247
int errmsg(const char *fmt,...)
Definition: elog.c:797
#define elog
Definition: elog.h:219

◆ op_hashjoinable()

bool op_hashjoinable ( Oid  opno,
Oid  inputtype 
)

Definition at line 1231 of file lsyscache.c.

References GETSTRUCT, TypeCacheEntry::hash_proc, HeapTupleIsValid, lookup_type_cache(), ObjectIdGetDatum, OPEROID, ReleaseSysCache(), SearchSysCache1(), and TYPECACHE_HASH_PROC.

Referenced by addTargetToSortList(), check_hashjoinable(), compute_semijoin_info(), generate_join_implied_equalities_normal(), and hash_ok_operator().

1232 {
1233  bool result = false;
1234  HeapTuple tp;
1235  TypeCacheEntry *typentry;
1236 
1237  /* As in op_mergejoinable, let the typcache handle the hard cases */
1238  /* Eventually we'll need a similar case for record_eq ... */
1239  if (opno == ARRAY_EQ_OP)
1240  {
1241  typentry = lookup_type_cache(inputtype, TYPECACHE_HASH_PROC);
1242  if (typentry->hash_proc == F_HASH_ARRAY)
1243  result = true;
1244  }
1245  else
1246  {
1247  /* For all other operators, rely on pg_operator.oprcanhash */
1249  if (HeapTupleIsValid(tp))
1250  {
1252 
1253  result = optup->oprcanhash;
1254  ReleaseSysCache(tp);
1255  }
1256  }
1257  return result;
1258 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
Definition: typcache.c:321
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82
#define TYPECACHE_HASH_PROC
Definition: typcache.h:131

◆ op_in_opfamily()

bool op_in_opfamily ( Oid  opno,
Oid  opfamily 
)

Definition at line 63 of file lsyscache.c.

References AMOPOPID, CharGetDatum, ObjectIdGetDatum, and SearchSysCacheExists3.

Referenced by equality_ops_are_compatible(), expand_indexqual_opclause(), have_partkey_equi_join(), is_indexable_operator(), match_clause_to_partition_key(), and relation_has_unique_index_for().

64 {
66  ObjectIdGetDatum(opno),
67  CharGetDatum(AMOP_SEARCH),
68  ObjectIdGetDatum(opfamily));
69 }
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define SearchSysCacheExists3(cacheId, key1, key2, key3)
Definition: syscache.h:186
#define CharGetDatum(X)
Definition: postgres.h:401

◆ op_input_types()

void op_input_types ( Oid  opno,
Oid lefttype,
Oid righttype 
)

Definition at line 1152 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), and SearchSysCache1().

Referenced by CheckIndexCompatible(), initialize_mergeclause_eclasses(), process_equivalence(), reconsider_full_join_clause(), reconsider_outer_join_clause(), and ri_HashCompareOp().

1153 {
1154  HeapTuple tp;
1155  Form_pg_operator optup;
1156 
1158  if (!HeapTupleIsValid(tp)) /* shouldn't happen */
1159  elog(ERROR, "cache lookup failed for operator %u", opno);
1160  optup = (Form_pg_operator) GETSTRUCT(tp);
1161  *lefttype = optup->oprleft;
1162  *righttype = optup->oprright;
1163  ReleaseSysCache(tp);
1164 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
#define ERROR
Definition: elog.h:43
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82
#define elog
Definition: elog.h:219

◆ op_mergejoinable()

bool op_mergejoinable ( Oid  opno,
Oid  inputtype 
)

Definition at line 1180 of file lsyscache.c.

References TypeCacheEntry::cmp_proc, GETSTRUCT, HeapTupleIsValid, lookup_type_cache(), ObjectIdGetDatum, OPEROID, ReleaseSysCache(), SearchSysCache1(), and TYPECACHE_CMP_PROC.

Referenced by check_mergejoinable(), and compute_semijoin_info().

1181 {
1182  bool result = false;
1183  HeapTuple tp;
1184  TypeCacheEntry *typentry;
1185 
1186  /*
1187  * For array_eq or record_eq, we can sort if the element or field types
1188  * are all sortable. We could implement all the checks for that here, but
1189  * the typcache already does that and caches the results too, so let's
1190  * rely on the typcache.
1191  */
1192  if (opno == ARRAY_EQ_OP)
1193  {
1194  typentry = lookup_type_cache(inputtype, TYPECACHE_CMP_PROC);
1195  if (typentry->cmp_proc == F_BTARRAYCMP)
1196  result = true;
1197  }
1198  else if (opno == RECORD_EQ_OP)
1199  {
1200  typentry = lookup_type_cache(inputtype, TYPECACHE_CMP_PROC);
1201  if (typentry->cmp_proc == F_BTRECORDCMP)
1202  result = true;
1203  }
1204  else
1205  {
1206  /* For all other operators, rely on pg_operator.oprcanmerge */
1208  if (HeapTupleIsValid(tp))
1209  {
1211 
1212  result = optup->oprcanmerge;
1213  ReleaseSysCache(tp);
1214  }
1215  }
1216  return result;
1217 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:668
#define ObjectIdGetDatum(X)
Definition: postgres.h:492
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1112
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1160
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
Definition: typcache.c:321
#define TYPECACHE_CMP_PROC
Definition: typcache.h:130
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
FormData_pg_operator * Form_pg_operator
Definition: pg_operator.h:82

◆ op_strict()

bool op_strict ( Oid  opno)

Definition at line 1266 of file lsyscache.c.

References elog, ERROR, func_strict(), get_opcode(), and InvalidOid.

Referenced by clause_is_strict_for(), ExecHashTableCreate(), have_partkey_equi_join(), match_clause_to_partition_key(), operator_predicate_proof(), and reconsider_outer_join_clause().

1267 {
1268  RegProcedure funcid = get_opcode(opno);
1269 
1270  if (funcid == (RegProcedure) InvalidOid)
1271  elog(ERROR, "operator %u does not exist", opno);
1272 
1273  return func_strict((Oid) funcid);
1274 }
regproc RegProcedure
Definition: c.h:472
unsigned int Oid
Definition: postgres_ext.h:31
#define ERROR
Definition: elog.h:43
#define InvalidOid
Definition: postgres_ext.h:36
RegProcedure get_opcode(Oid opno)
Definition: lsyscache.c:1079
bool func_strict(Oid funcid)
Definition: lsyscache.c:1550
#define elog
Definition: elog.h:219

◆ op_volatile()

char op_volatile ( Oid  opno)

Definition at line 1282 of file lsyscache.c.

References elog, ERROR, func_volatile(), get_opcode(), and InvalidOid.

Referenced by lookup_proof_cache().

1283 {
1284  RegProcedure funcid = get_opcode(opno);
1285 
1286  if (funcid == (RegProcedure) InvalidOid)
1287  elog(ERROR, "operator %u does not exist", opno);
1288 
1289  return func_volatile((Oid) funcid);
1290 }
regproc RegProcedure
Definition: c.h:472
unsigned int Oid
Definition: postgres_ext.h:31
#define ERROR
Definition: elog.h:43
#define InvalidOid
Definition: postgres_ext.h:36
RegProcedure get_opcode(Oid opno)
Definition: lsyscache.c:1079
char func_volatile(Oid funcid)
Definition: lsyscache.c:1569
#define elog
Definition: elog.h:219

◆ type_is_collatable()

bool type_is_collatable ( Oid  typid)

◆ type_is_enum()

bool type_is_enum ( Oid  typid)

Definition at line 2432 of file lsyscache.c.

References get_typtype().

Referenced by check_generic_type_consistency(), enforce_generic_type_consistency(), IsBinaryCoercible(), and resolve_polymorphic_tupdesc().

2433 {
2434  return (get_typtype(typid) == TYPTYPE_ENUM);
2435 }
char get_typtype(Oid typid)
Definition: lsyscache.c:2383

◆ type_is_range()

bool type_is_range ( Oid  typid)

Definition at line 2442 of file lsyscache.c.

References get_typtype().

Referenced by IsBinaryCoercible().

2443 {
2444  return (get_typtype(typid) == TYPTYPE_RANGE);
2445 }
char get_typtype(Oid typid)
Definition: lsyscache.c:2383

◆ type_is_rowtype()

bool type_is_rowtype ( Oid  typid)

Definition at line 2409 of file lsyscache.c.

References get_typtype(), and getBaseType().

Referenced by build_datatype(), coerce_function_result_tuple(), compile_plperl_function(), compile_pltcl_function(), deparseNullTest(), do_compile(), exec_assign_value(), exec_stmt_return(), exec_stmt_return_next(), ExecMakeTableFunctionResult(), find_minmax_aggs_walker(), get_rule_expr(), hstore_populate_record(), init_sql_fcache(), json_categorize_type(), jsonb_categorize_type(), makeWholeRowVar(), plperl_hash_from_tuple(), plperl_ref_from_pg_array(), plperl_sv_to_datum(), plpgsql_exec_trigger(), and transformExprRecurse().

2410 {
2411  if (typid == RECORDOID)
2412  return true; /* easy case */
2413  switch (get_typtype(typid))
2414  {
2415  case TYPTYPE_COMPOSITE:
2416  return true;
2417  case TYPTYPE_DOMAIN:
2418  if (get_typtype(getBaseType(typid)) == TYPTYPE_COMPOSITE)
2419  return true;
2420  break;
2421  default:
2422  break;
2423  }
2424  return false;
2425 }
char get_typtype(Oid typid)
Definition: lsyscache.c:2383
Oid getBaseType(Oid typid)
Definition: lsyscache.c:2275

Variable Documentation

◆ get_attavgwidth_hook

PGDLLIMPORT get_attavgwidth_hook_type get_attavgwidth_hook

Definition at line 50 of file lsyscache.c.

Referenced by get_attavgwidth().