PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
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)
 
char * get_relid_attribute_name (Oid relid, AttrNumber attnum)
 
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)
 
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

#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')

Definition at line 184 of file lsyscache.h.

Referenced by ATExecSetStorage(), and ExecIndexBuildScanKeys().

Typedef Documentation

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

Definition at line 61 of file lsyscache.h.

Enumeration Type Documentation

Enumerator
IOFunc_input 
IOFunc_output 
IOFunc_receive 
IOFunc_send 

Definition at line 30 of file lsyscache.h.

Function Documentation

bool equality_ops_are_compatible ( Oid  opno1,
Oid  opno2 
)

Definition at line 695 of file lsyscache.c.

References AMOPOPID, BTREE_AM_OID, GETSTRUCT, HASH_AM_OID, i, catclist::members, catclist::n_members, ObjectIdGetDatum, op_in_opfamily(), ReleaseSysCacheList, result, 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:154
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define BTREE_AM_OID
Definition: pg_am.h:70
return result
Definition: formatting.c:1633
#define HASH_AM_OID
Definition: pg_am.h:73
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
int i
HeapTupleData tuple
Definition: catcache.h:116
void free_attstatsslot ( AttStatsSlot sslot)

Definition at line 3011 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_bucketsize(), 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().

3012 {
3013  /* The values[] array was separately palloc'd by deconstruct_array */
3014  if (sslot->values)
3015  pfree(sslot->values);
3016  /* The numbers[] array points into numbers_arr, do not pfree it */
3017  /* Free the detoasted array objects, if any */
3018  if (sslot->values_arr)
3019  pfree(sslot->values_arr);
3020  if (sslot->numbers_arr)
3021  pfree(sslot->numbers_arr);
3022 }
void pfree(void *pointer)
Definition: mcxt.c:950
void * values_arr
Definition: lsyscache.h:56
Datum * values
Definition: lsyscache.h:49
void * numbers_arr
Definition: lsyscache.h:57
char func_parallel ( Oid  funcid)

Definition at line 1603 of file lsyscache.c.

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

Referenced by max_parallel_hazard_checker(), and set_rel_consider_parallel().

1604 {
1605  HeapTuple tp;
1606  char result;
1607 
1608  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1609  if (!HeapTupleIsValid(tp))
1610  elog(ERROR, "cache lookup failed for function %u", funcid);
1611 
1612  result = ((Form_pg_proc) GETSTRUCT(tp))->proparallel;
1613  ReleaseSysCache(tp);
1614  return result;
1615 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
bool func_strict ( Oid  funcid)

Definition at line 1565 of file lsyscache.c.

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

Referenced by AggregateCreate(), contain_nonstrict_functions_checker(), find_nonnullable_rels_walker(), find_nonnullable_vars_walker(), hash_ok_operator(), is_strict_saop(), op_strict(), predicate_implied_by_simple_clause(), and predicate_refuted_by_simple_clause().

1566 {
1567  HeapTuple tp;
1568  bool result;
1569 
1570  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1571  if (!HeapTupleIsValid(tp))
1572  elog(ERROR, "cache lookup failed for function %u", funcid);
1573 
1574  result = ((Form_pg_proc) GETSTRUCT(tp))->proisstrict;
1575  ReleaseSysCache(tp);
1576  return result;
1577 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
char func_volatile ( Oid  funcid)

Definition at line 1584 of file lsyscache.c.

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

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

1585 {
1586  HeapTuple tp;
1587  char result;
1588 
1589  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1590  if (!HeapTupleIsValid(tp))
1591  elog(ERROR, "cache lookup failed for function %u", funcid);
1592 
1593  result = ((Form_pg_proc) GETSTRUCT(tp))->provolatile;
1594  ReleaseSysCache(tp);
1595  return result;
1596 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
Oid get_array_type ( Oid  typid)

Definition at line 2512 of file lsyscache.c.

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

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

2513 {
2514  HeapTuple tp;
2515  Oid result = InvalidOid;
2516 
2518  if (HeapTupleIsValid(tp))
2519  {
2520  result = ((Form_pg_type) GETSTRUCT(tp))->typarray;
2521  ReleaseSysCache(tp);
2522  }
2523  return result;
2524 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int32 get_attavgwidth ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 2828 of file lsyscache.c.

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

Referenced by get_rel_data_width(), and set_rel_width().

2829 {
2830  HeapTuple tp;
2831  int32 stawidth;
2832 
2834  {
2835  stawidth = (*get_attavgwidth_hook) (relid, attnum);
2836  if (stawidth > 0)
2837  return stawidth;
2838  }
2840  ObjectIdGetDatum(relid),
2841  Int16GetDatum(attnum),
2842  BoolGetDatum(false));
2843  if (HeapTupleIsValid(tp))
2844  {
2845  stawidth = ((Form_pg_statistic) GETSTRUCT(tp))->stawidth;
2846  ReleaseSysCache(tp);
2847  if (stawidth > 0)
2848  return stawidth;
2849  }
2850  return 0;
2851 }
get_attavgwidth_hook_type get_attavgwidth_hook
Definition: lsyscache.c:50
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define Int16GetDatum(X)
Definition: postgres.h:457
FormData_pg_statistic * Form_pg_statistic
Definition: pg_statistic.h:129
signed int int32
Definition: c.h:256
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define BoolGetDatum(X)
Definition: postgres.h:408
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define SearchSysCache3(cacheId, key1, key2, key3)
Definition: syscache.h:160
char get_attidentity ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 851 of file lsyscache.c.

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

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

852 {
853  HeapTuple tp;
854 
855  tp = SearchSysCache2(ATTNUM,
856  ObjectIdGetDatum(relid),
857  Int16GetDatum(attnum));
858  if (HeapTupleIsValid(tp))
859  {
861  char result;
862 
863  result = att_tup->attidentity;
864  ReleaseSysCache(tp);
865  return result;
866  }
867  else
868  return '\0';
869 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define Int16GetDatum(X)
Definition: postgres.h:457
return result
Definition: formatting.c:1633
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:187
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
char* get_attname ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 774 of file lsyscache.c.

References ATTNUM, GETSTRUCT, HeapTupleIsValid, Int16GetDatum, NameStr, NULL, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), result, and SearchSysCache2.

Referenced by AddRelationNewConstraints(), fixup_inherited_columns(), and get_relid_attribute_name().

775 {
776  HeapTuple tp;
777 
778  tp = SearchSysCache2(ATTNUM,
779  ObjectIdGetDatum(relid),
780  Int16GetDatum(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  else
791  return NULL;
792 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
#define Int16GetDatum(X)
Definition: postgres.h:457
return result
Definition: formatting.c:1633
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:187
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
#define NameStr(name)
Definition: c.h:499
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
AttrNumber get_attnum ( Oid  relid,
const char *  attname 
)

Definition at line 821 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidAttrNumber, ReleaseSysCache(), result, 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().

822 {
823  HeapTuple tp;
824 
825  tp = SearchSysCacheAttName(relid, attname);
826  if (HeapTupleIsValid(tp))
827  {
830 
831  result = att_tup->attnum;
832  ReleaseSysCache(tp);
833  return result;
834  }
835  else
836  return InvalidAttrNumber;
837 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:187
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
HeapTuple SearchSysCacheAttName(Oid relid, const char *attname)
Definition: syscache.c:1205
#define InvalidAttrNumber
Definition: attnum.h:23
int16 AttrNumber
Definition: attnum.h:21
bool get_attstatsslot ( AttStatsSlot sslot,
HeapTuple  statstuple,
int  reqkind,
Oid  reqop,
int  flags 
)

Definition at line 2895 of file lsyscache.c.

References Anum_pg_statistic_stanumbers1, Anum_pg_statistic_stavalues1, ARR_DATA_PTR, ARR_DIMS, ARR_ELEMTYPE, ARR_HASNULL, ARR_NDIM, ATTSTATSSLOT_NUMBERS, ATTSTATSSLOT_VALUES, DatumGetArrayTypePCopy, deconstruct_array(), elog, ERROR, FLOAT4OID, GETSTRUCT, HeapTupleIsValid, i, InvalidOid, AttStatsSlot::nnumbers, NULL, 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_bucketsize(), 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().

2897 {
2898  Form_pg_statistic stats = (Form_pg_statistic) GETSTRUCT(statstuple);
2899  int i;
2900  Datum val;
2901  bool isnull;
2902  ArrayType *statarray;
2903  Oid arrayelemtype;
2904  int narrayelem;
2905  HeapTuple typeTuple;
2906  Form_pg_type typeForm;
2907 
2908  /* initialize *sslot properly */
2909  memset(sslot, 0, sizeof(AttStatsSlot));
2910 
2911  for (i = 0; i < STATISTIC_NUM_SLOTS; i++)
2912  {
2913  if ((&stats->stakind1)[i] == reqkind &&
2914  (reqop == InvalidOid || (&stats->staop1)[i] == reqop))
2915  break;
2916  }
2917  if (i >= STATISTIC_NUM_SLOTS)
2918  return false; /* not there */
2919 
2920  sslot->staop = (&stats->staop1)[i];
2921 
2922  if (flags & ATTSTATSSLOT_VALUES)
2923  {
2924  val = SysCacheGetAttr(STATRELATTINH, statstuple,
2926  &isnull);
2927  if (isnull)
2928  elog(ERROR, "stavalues is null");
2929 
2930  /*
2931  * Detoast the array if needed, and in any case make a copy that's
2932  * under control of this AttStatsSlot.
2933  */
2934  statarray = DatumGetArrayTypePCopy(val);
2935 
2936  /*
2937  * Extract the actual array element type, and pass it back in case the
2938  * caller needs it.
2939  */
2940  sslot->valuetype = arrayelemtype = ARR_ELEMTYPE(statarray);
2941 
2942  /* Need info about element type */
2943  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(arrayelemtype));
2944  if (!HeapTupleIsValid(typeTuple))
2945  elog(ERROR, "cache lookup failed for type %u", arrayelemtype);
2946  typeForm = (Form_pg_type) GETSTRUCT(typeTuple);
2947 
2948  /* Deconstruct array into Datum elements; NULLs not expected */
2949  deconstruct_array(statarray,
2950  arrayelemtype,
2951  typeForm->typlen,
2952  typeForm->typbyval,
2953  typeForm->typalign,
2954  &sslot->values, NULL, &sslot->nvalues);
2955 
2956  /*
2957  * If the element type is pass-by-reference, we now have a bunch of
2958  * Datums that are pointers into the statarray, so we need to keep
2959  * that until free_attstatsslot. Otherwise, all the useful info is in
2960  * sslot->values[], so we can free the array object immediately.
2961  */
2962  if (!typeForm->typbyval)
2963  sslot->values_arr = statarray;
2964  else
2965  pfree(statarray);
2966 
2967  ReleaseSysCache(typeTuple);
2968  }
2969 
2970  if (flags & ATTSTATSSLOT_NUMBERS)
2971  {
2972  val = SysCacheGetAttr(STATRELATTINH, statstuple,
2974  &isnull);
2975  if (isnull)
2976  elog(ERROR, "stanumbers is null");
2977 
2978  /*
2979  * Detoast the array if needed, and in any case make a copy that's
2980  * under control of this AttStatsSlot.
2981  */
2982  statarray = DatumGetArrayTypePCopy(val);
2983 
2984  /*
2985  * We expect the array to be a 1-D float4 array; verify that. We don't
2986  * need to use deconstruct_array() since the array data is just going
2987  * to look like a C array of float4 values.
2988  */
2989  narrayelem = ARR_DIMS(statarray)[0];
2990  if (ARR_NDIM(statarray) != 1 || narrayelem <= 0 ||
2991  ARR_HASNULL(statarray) ||
2992  ARR_ELEMTYPE(statarray) != FLOAT4OID)
2993  elog(ERROR, "stanumbers is not a 1-D float4 array");
2994 
2995  /* Give caller a pointer directly into the statarray */
2996  sslot->numbers = (float4 *) ARR_DATA_PTR(statarray);
2997  sslot->nnumbers = narrayelem;
2998 
2999  /* We'll free the statarray in free_attstatsslot */
3000  sslot->numbers_arr = statarray;
3001  }
3002 
3003  return true;
3004 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define ATTSTATSSLOT_VALUES
Definition: lsyscache.h:39
#define Anum_pg_statistic_stavalues1
Definition: pg_statistic.h:157
int nnumbers
Definition: lsyscache.h:53
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
FormData_pg_statistic * Form_pg_statistic
Definition: pg_statistic.h:129
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
void pfree(void *pointer)
Definition: mcxt.c:950
#define ATTSTATSSLOT_NUMBERS
Definition: lsyscache.h:40
void * values_arr
Definition: lsyscache.h:56
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
#define ARR_DIMS(a)
Definition: array.h:275
#define ARR_DATA_PTR(a)
Definition: array.h:303
float4 * numbers
Definition: lsyscache.h:52
#define ARR_HASNULL(a)
Definition: array.h:272
float float4
Definition: c.h:380
#define FLOAT4OID
Definition: pg_type.h:416
uintptr_t Datum
Definition: postgres.h:372
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition: syscache.c:1279
#define DatumGetArrayTypePCopy(X)
Definition: array.h:243
#define InvalidOid
Definition: postgres_ext.h:36
#define STATISTIC_NUM_SLOTS
Definition: pg_statistic.h:121
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
Datum * values
Definition: lsyscache.h:49
#define Anum_pg_statistic_stanumbers1
Definition: pg_statistic.h:152
#define ARR_NDIM(a)
Definition: array.h:271
void deconstruct_array(ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
Definition: arrayfuncs.c:3475
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:273
long val
Definition: informix.c:689
Oid get_atttype ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 878 of file lsyscache.c.

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

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

879 {
880  HeapTuple tp;
881 
882  tp = SearchSysCache2(ATTNUM,
883  ObjectIdGetDatum(relid),
884  Int16GetDatum(attnum));
885  if (HeapTupleIsValid(tp))
886  {
888  Oid result;
889 
890  result = att_tup->atttypid;
891  ReleaseSysCache(tp);
892  return result;
893  }
894  else
895  return InvalidOid;
896 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define Int16GetDatum(X)
Definition: postgres.h:457
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:187
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
void get_atttypetypmodcoll ( Oid  relid,
AttrNumber  attnum,
Oid typid,
int32 typmod,
Oid collid 
)

Definition at line 935 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().

937 {
938  HeapTuple tp;
939  Form_pg_attribute att_tup;
940 
941  tp = SearchSysCache2(ATTNUM,
942  ObjectIdGetDatum(relid),
943  Int16GetDatum(attnum));
944  if (!HeapTupleIsValid(tp))
945  elog(ERROR, "cache lookup failed for attribute %d of relation %u",
946  attnum, relid);
947  att_tup = (Form_pg_attribute) GETSTRUCT(tp);
948 
949  *typid = att_tup->atttypid;
950  *typmod = att_tup->atttypmod;
951  *collid = att_tup->attcollation;
952  ReleaseSysCache(tp);
953 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define Int16GetDatum(X)
Definition: postgres.h:457
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:187
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
int32 get_atttypmod ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 905 of file lsyscache.c.

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

906 {
907  HeapTuple tp;
908 
909  tp = SearchSysCache2(ATTNUM,
910  ObjectIdGetDatum(relid),
911  Int16GetDatum(attnum));
912  if (HeapTupleIsValid(tp))
913  {
915  int32 result;
916 
917  result = att_tup->atttypmod;
918  ReleaseSysCache(tp);
919  return result;
920  }
921  else
922  return -1;
923 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define Int16GetDatum(X)
Definition: postgres.h:457
return result
Definition: formatting.c:1633
signed int int32
Definition: c.h:256
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:187
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
Oid get_base_element_type ( Oid  typid)

Definition at line 2557 of file lsyscache.c.

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

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

2558 {
2559  /*
2560  * We loop to find the bottom base type in a stack of domains.
2561  */
2562  for (;;)
2563  {
2564  HeapTuple tup;
2565  Form_pg_type typTup;
2566 
2567  tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2568  if (!HeapTupleIsValid(tup))
2569  break;
2570  typTup = (Form_pg_type) GETSTRUCT(tup);
2571  if (typTup->typtype != TYPTYPE_DOMAIN)
2572  {
2573  /* Not a domain, so stop descending */
2574  Oid result;
2575 
2576  /* This test must match get_element_type */
2577  if (typTup->typlen == -1)
2578  result = typTup->typelem;
2579  else
2580  result = InvalidOid;
2581  ReleaseSysCache(tup);
2582  return result;
2583  }
2584 
2585  typid = typTup->typbasetype;
2586  ReleaseSysCache(tup);
2587  }
2588 
2589  /* Like get_element_type, silently return InvalidOid for bogus input */
2590  return InvalidOid;
2591 }
#define TYPTYPE_DOMAIN
Definition: pg_type.h:722
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
char* get_collation_name ( Oid  colloid)

Definition at line 967 of file lsyscache.c.

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

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

968 {
969  HeapTuple tp;
970 
971  tp = SearchSysCache1(COLLOID, ObjectIdGetDatum(colloid));
972  if (HeapTupleIsValid(tp))
973  {
975  char *result;
976 
977  result = pstrdup(NameStr(colltup->collname));
978  ReleaseSysCache(tp);
979  return result;
980  }
981  else
982  return NULL;
983 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
FormData_pg_collation * Form_pg_collation
Definition: pg_collation.h:52
#define NameStr(name)
Definition: c.h:499
Oid get_commutator ( Oid  opno)

Definition at line 1313 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), result, 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_foreign_keys_to_quals(), match_rowcompare_to_indexcol(), networkjoinsel(), operator_predicate_proof(), rangesel(), scalargtsel(), scalarltsel(), and targetIsInSortList().

1314 {
1315  HeapTuple tp;
1316 
1318  if (HeapTupleIsValid(tp))
1319  {
1321  Oid result;
1322 
1323  result = optup->oprcom;
1324  ReleaseSysCache(tp);
1325  return result;
1326  }
1327  else
1328  return InvalidOid;
1329 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
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, HASH_AM_OID, HTEqualStrategyNumber, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, OidIsValid, ReleaseSysCacheList, result, 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:154
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define HTEqualStrategyNumber
Definition: hash.h:289
return result
Definition: formatting.c:1633
#define OidIsValid(objectId)
Definition: c.h:538
#define HASH_AM_OID
Definition: pg_am.h:73
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
Definition: lsyscache.c:163
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
#define InvalidOid
Definition: postgres_ext.h:36
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
int i
HeapTupleData tuple
Definition: catcache.h:116
char* get_constraint_name ( Oid  conoid)

Definition at line 997 of file lsyscache.c.

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

Referenced by get_insert_query_def(), and report_triggers().

998 {
999  HeapTuple tp;
1000 
1002  if (HeapTupleIsValid(tp))
1003  {
1005  char *result;
1006 
1007  result = pstrdup(NameStr(contup->conname));
1008  ReleaseSysCache(tp);
1009  return result;
1010  }
1011  else
1012  return NULL;
1013 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_constraint * Form_pg_constraint
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
#define NameStr(name)
Definition: c.h:499
Oid get_element_type ( Oid  typid)

Definition at line 2484 of file lsyscache.c.

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

Referenced by aclcheck_error_type(), AlterTypeNamespace_oid(), 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().

2485 {
2486  HeapTuple tp;
2487 
2489  if (HeapTupleIsValid(tp))
2490  {
2491  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2492  Oid result;
2493 
2494  if (typtup->typlen == -1)
2495  result = typtup->typelem;
2496  else
2497  result = InvalidOid;
2498  ReleaseSysCache(tp);
2499  return result;
2500  }
2501  else
2502  return InvalidOid;
2503 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
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(), InvalidOid, and result.

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

265 {
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:255
#define BTGreaterStrategyNumber
Definition: stratnum.h:33
return result
Definition: formatting.c:1633
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
float4 get_func_cost ( Oid  funcid)

Definition at line 1641 of file lsyscache.c.

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

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

1642 {
1643  HeapTuple tp;
1644  float4 result;
1645 
1646  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1647  if (!HeapTupleIsValid(tp))
1648  elog(ERROR, "cache lookup failed for function %u", funcid);
1649 
1650  result = ((Form_pg_proc) GETSTRUCT(tp))->procost;
1651  ReleaseSysCache(tp);
1652  return result;
1653 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
float float4
Definition: c.h:380
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
bool get_func_leakproof ( Oid  funcid)

Definition at line 1622 of file lsyscache.c.

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

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

1623 {
1624  HeapTuple tp;
1625  bool result;
1626 
1627  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1628  if (!HeapTupleIsValid(tp))
1629  elog(ERROR, "cache lookup failed for function %u", funcid);
1630 
1631  result = ((Form_pg_proc) GETSTRUCT(tp))->proleakproof;
1632  ReleaseSysCache(tp);
1633  return result;
1634 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
char* get_func_name ( Oid  funcid)

Definition at line 1412 of file lsyscache.c.

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

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

1413 {
1414  HeapTuple tp;
1415 
1416  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1417  if (HeapTupleIsValid(tp))
1418  {
1419  Form_pg_proc functup = (Form_pg_proc) GETSTRUCT(tp);
1420  char *result;
1421 
1422  result = pstrdup(NameStr(functup->proname));
1423  ReleaseSysCache(tp);
1424  return result;
1425  }
1426  else
1427  return NULL;
1428 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
#define NameStr(name)
Definition: c.h:499
Oid get_func_namespace ( Oid  funcid)

Definition at line 1436 of file lsyscache.c.

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

Referenced by sepgsql_proc_drop().

1437 {
1438  HeapTuple tp;
1439 
1440  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1441  if (HeapTupleIsValid(tp))
1442  {
1443  Form_pg_proc functup = (Form_pg_proc) GETSTRUCT(tp);
1444  Oid result;
1445 
1446  result = functup->pronamespace;
1447  ReleaseSysCache(tp);
1448  return result;
1449  }
1450  else
1451  return InvalidOid;
1452 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int get_func_nargs ( Oid  funcid)

Definition at line 1478 of file lsyscache.c.

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

1479 {
1480  HeapTuple tp;
1481  int result;
1482 
1483  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1484  if (!HeapTupleIsValid(tp))
1485  elog(ERROR, "cache lookup failed for function %u", funcid);
1486 
1487  result = ((Form_pg_proc) GETSTRUCT(tp))->pronargs;
1488  ReleaseSysCache(tp);
1489  return result;
1490 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
bool get_func_retset ( Oid  funcid)

Definition at line 1546 of file lsyscache.c.

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

Referenced by make_op(), and make_scalar_array_op().

1547 {
1548  HeapTuple tp;
1549  bool result;
1550 
1551  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1552  if (!HeapTupleIsValid(tp))
1553  elog(ERROR, "cache lookup failed for function %u", funcid);
1554 
1555  result = ((Form_pg_proc) GETSTRUCT(tp))->proretset;
1556  ReleaseSysCache(tp);
1557  return result;
1558 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
Oid get_func_rettype ( Oid  funcid)

Definition at line 1459 of file lsyscache.c.

References elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, PROCOID, ReleaseSysCache(), result, 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().

1460 {
1461  HeapTuple tp;
1462  Oid result;
1463 
1464  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1465  if (!HeapTupleIsValid(tp))
1466  elog(ERROR, "cache lookup failed for function %u", funcid);
1467 
1468  result = ((Form_pg_proc) GETSTRUCT(tp))->prorettype;
1469  ReleaseSysCache(tp);
1470  return result;
1471 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
float4 get_func_rows ( Oid  funcid)

Definition at line 1660 of file lsyscache.c.

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

Referenced by expression_returns_set_rows().

1661 {
1662  HeapTuple tp;
1663  float4 result;
1664 
1665  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1666  if (!HeapTupleIsValid(tp))
1667  elog(ERROR, "cache lookup failed for function %u", funcid);
1668 
1669  result = ((Form_pg_proc) GETSTRUCT(tp))->prorows;
1670  ReleaseSysCache(tp);
1671  return result;
1672 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
float float4
Definition: c.h:380
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
Oid get_func_signature ( Oid  funcid,
Oid **  argtypes,
int *  nargs 
)

Definition at line 1500 of file lsyscache.c.

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

Referenced by plperl_call_perl_func(), and resolve_aggregate_transtype().

1501 {
1502  HeapTuple tp;
1503  Form_pg_proc procstruct;
1504  Oid result;
1505 
1506  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1507  if (!HeapTupleIsValid(tp))
1508  elog(ERROR, "cache lookup failed for function %u", funcid);
1509 
1510  procstruct = (Form_pg_proc) GETSTRUCT(tp);
1511 
1512  result = procstruct->prorettype;
1513  *nargs = (int) procstruct->pronargs;
1514  Assert(*nargs == procstruct->proargtypes.dim1);
1515  *argtypes = (Oid *) palloc(*nargs * sizeof(Oid));
1516  memcpy(*argtypes, procstruct->proargtypes.values, *nargs * sizeof(Oid));
1517 
1518  ReleaseSysCache(tp);
1519  return result;
1520 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define Assert(condition)
Definition: c.h:675
void * palloc(Size size)
Definition: mcxt.c:849
#define elog
Definition: elog.h:219
Oid get_func_variadictype ( Oid  funcid)

Definition at line 1527 of file lsyscache.c.

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

Referenced by assign_hypothetical_collations(), and assign_ordered_set_collations().

1528 {
1529  HeapTuple tp;
1530  Oid result;
1531 
1532  tp = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));
1533  if (!HeapTupleIsValid(tp))
1534  elog(ERROR, "cache lookup failed for function %u", funcid);
1535 
1536  result = ((Form_pg_proc) GETSTRUCT(tp))->provariadic;
1537  ReleaseSysCache(tp);
1538  return result;
1539 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:83
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
char* get_language_name ( Oid  langoid,
bool  missing_ok 
)

Definition at line 1018 of file lsyscache.c.

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

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

1019 {
1020  HeapTuple tp;
1021 
1022  tp = SearchSysCache1(LANGOID, ObjectIdGetDatum(langoid));
1023  if (HeapTupleIsValid(tp))
1024  {
1026  char *result;
1027 
1028  result = pstrdup(NameStr(lantup->lanname));
1029  ReleaseSysCache(tp);
1030  return result;
1031  }
1032 
1033  if (!missing_ok)
1034  elog(ERROR, "cache lookup failed for language %u",
1035  langoid);
1036  return NULL;
1037 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
FormData_pg_language * Form_pg_language
Definition: pg_language.h:51
#define NameStr(name)
Definition: c.h:499
#define elog
Definition: elog.h:219
List* get_mergejoin_opfamilies ( Oid  opno)

Definition at line 363 of file lsyscache.c.

References AMOPOPID, BTEqualStrategyNumber, BTREE_AM_OID, GETSTRUCT, i, lappend_oid(), catclist::members, catclist::n_members, NIL, ObjectIdGetDatum, ReleaseSysCacheList, result, 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:154
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define BTREE_AM_OID
Definition: pg_am.h:70
return result
Definition: formatting.c:1633
List * lappend_oid(List *list, Oid datum)
Definition: list.c:164
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
int i
HeapTupleData tuple
Definition: catcache.h:116
Definition: pg_list.h:45
#define BTEqualStrategyNumber
Definition: stratnum.h:31
char* get_namespace_name ( Oid  nspid)

Definition at line 3033 of file lsyscache.c.

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

Referenced by acquire_inherited_sample_rows(), 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_name(), generate_qualified_relation_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(), mv_GenerateOper(), perform_work_item(), pg_decode_change(), pg_event_trigger_ddl_commands(), pg_get_functiondef(), pg_get_statisticsobj_worker(), pg_identify_object(), pg_newlocale_from_collation(), plpgsql_exec_trigger(), postgresGetForeignRelSize(), quoteRelationName(), RangeVarCallbackForAlterRelation(), RangeVarGetAndCheckCreationNamespace(), RebuildConstraintComment(), refresh_by_match_merge(), regclassout(), regconfigout(), regdictionaryout(), regnamespaceout(), regoperout(), regprocout(), ReindexMultipleTables(), report_namespace_conflict(), ri_add_cast_to(), ri_GenerateQual(), ri_GenerateQualCollation(), schema_to_xml_internal(), sepgsql_proc_post_create(), sepgsql_relation_post_create(), SPI_getnspname(), transformAlterTableStmt(), and transformCreateStmt().

3034 {
3035  HeapTuple tp;
3036 
3038  if (HeapTupleIsValid(tp))
3039  {
3041  char *result;
3042 
3043  result = pstrdup(NameStr(nsptup->nspname));
3044  ReleaseSysCache(tp);
3045  return result;
3046  }
3047  else
3048  return NULL;
3049 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_namespace * Form_pg_namespace
Definition: pg_namespace.h:51
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
#define NameStr(name)
Definition: c.h:499
char* get_namespace_name_or_temp ( Oid  nspid)

Definition at line 3057 of file lsyscache.c.

References get_namespace_name(), and isTempNamespace().

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

3058 {
3059  if (isTempNamespace(nspid))
3060  return "pg_temp";
3061  else
3062  return get_namespace_name(nspid);
3063 }
char * get_namespace_name(Oid nspid)
Definition: lsyscache.c:3033
bool isTempNamespace(Oid namespaceId)
Definition: namespace.c:3118
Oid get_negator ( Oid  opno)

Definition at line 1337 of file lsyscache.c.

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

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

1338 {
1339  HeapTuple tp;
1340 
1342  if (HeapTupleIsValid(tp))
1343  {
1345  Oid result;
1346 
1347  result = optup->oprnegate;
1348  ReleaseSysCache(tp);
1349  return result;
1350  }
1351  else
1352  return InvalidOid;
1353 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
List* get_op_btree_interpretation ( Oid  opno)

Definition at line 598 of file lsyscache.c.

References AMOPOPID, Assert, BTEqualStrategyNumber, BTREE_AM_OID, get_negator(), GETSTRUCT, i, lappend(), catclist::members, catclist::n_members, NIL, ObjectIdGetDatum, OidIsValid, OpBtreeInterpretation::opfamily_id, OpBtreeInterpretation::oplefttype, OpBtreeInterpretation::oprighttype, palloc(), ReleaseSysCacheList, result, 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:154
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define BTREE_AM_OID
Definition: pg_am.h:70
uint16 StrategyNumber
Definition: stratnum.h:22
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:538
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
List * lappend(List *list, void *datum)
Definition: list.c:128
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
#define Assert(condition)
Definition: c.h:675
void * palloc(Size size)
Definition: mcxt.c:849
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
int i
HeapTupleData tuple
Definition: catcache.h:116
Oid get_negator(Oid opno)
Definition: lsyscache.c:1337
Definition: pg_list.h:45
#define BTEqualStrategyNumber
Definition: stratnum.h:31
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, HASH_AM_OID, HASHPROC, HTEqualStrategyNumber, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, OidIsValid, ReleaseSysCacheList, result, 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,
545  HASHPROC);
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,
567  HASHPROC);
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:154
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define HTEqualStrategyNumber
Definition: hash.h:289
return result
Definition: formatting.c:1633
#define OidIsValid(objectId)
Definition: c.h:538
#define HASH_AM_OID
Definition: pg_am.h:73
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
#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:77
#define HASHPROC
Definition: hash.h:297
int i
HeapTupleData tuple
Definition: catcache.h:116
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 AMOP_ORDER, AMOP_SEARCH, AMOPOPID, CharGetDatum, elog, ERROR, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache3.

Referenced by adjust_rowcompare_for_index(), ExecIndexBuildScanKeys(), ExecInitExprRec(), gincost_pattern(), 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:656
#define AMOP_SEARCH
Definition: pg_amop.h:69
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define CharGetDatum(X)
Definition: postgres.h:422
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
#define SearchSysCache3(cacheId, key1, key2, key3)
Definition: syscache.h:160
#define AMOP_ORDER
Definition: pg_amop.h:70
#define elog
Definition: elog.h:219
Oid get_op_opfamily_sortfamily ( Oid  opno,
Oid  opfamily 
)

Definition at line 105 of file lsyscache.c.

References AMOP_ORDER, AMOPOPID, CharGetDatum, GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), result, 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),
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:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define CharGetDatum(X)
Definition: postgres.h:422
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
#define SearchSysCache3(cacheId, key1, key2, key3)
Definition: syscache.h:160
#define AMOP_ORDER
Definition: pg_amop.h:70
int get_op_opfamily_strategy ( Oid  opno,
Oid  opfamily 
)

Definition at line 80 of file lsyscache.c.

References AMOP_SEARCH, AMOPOPID, CharGetDatum, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), result, 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),
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:656
#define AMOP_SEARCH
Definition: pg_amop.h:69
return result
Definition: formatting.c:1633
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define CharGetDatum(X)
Definition: postgres.h:422
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
#define SearchSysCache3(cacheId, key1, key2, key3)
Definition: syscache.h:160
Oid get_op_rettype ( Oid  opno)

Definition at line 1142 of file lsyscache.c.

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

Referenced by gistvalidate().

1143 {
1144  HeapTuple tp;
1145 
1147  if (HeapTupleIsValid(tp))
1148  {
1150  Oid result;
1151 
1152  result = optup->oprresult;
1153  ReleaseSysCache(tp);
1154  return result;
1155  }
1156  else
1157  return InvalidOid;
1158 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
Oid get_opclass_family ( Oid  opclass)

Definition at line 1047 of file lsyscache.c.

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

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

1048 {
1049  HeapTuple tp;
1050  Form_pg_opclass cla_tup;
1051  Oid result;
1052 
1053  tp = SearchSysCache1(CLAOID, ObjectIdGetDatum(opclass));
1054  if (!HeapTupleIsValid(tp))
1055  elog(ERROR, "cache lookup failed for opclass %u", opclass);
1056  cla_tup = (Form_pg_opclass) GETSTRUCT(tp);
1057 
1058  result = cla_tup->opcfamily;
1059  ReleaseSysCache(tp);
1060  return result;
1061 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
FormData_pg_opclass * Form_pg_opclass
Definition: pg_opclass.h:68
Oid get_opclass_input_type ( Oid  opclass)

Definition at line 1069 of file lsyscache.c.

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

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

1070 {
1071  HeapTuple tp;
1072  Form_pg_opclass cla_tup;
1073  Oid result;
1074 
1075  tp = SearchSysCache1(CLAOID, ObjectIdGetDatum(opclass));
1076  if (!HeapTupleIsValid(tp))
1077  elog(ERROR, "cache lookup failed for opclass %u", opclass);
1078  cla_tup = (Form_pg_opclass) GETSTRUCT(tp);
1079 
1080  result = cla_tup->opcintype;
1081  ReleaseSysCache(tp);
1082  return result;
1083 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
FormData_pg_opclass * Form_pg_opclass
Definition: pg_opclass.h:68
RegProcedure get_opcode ( Oid  opno)

Definition at line 1094 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, OPEROID, ReleaseSysCache(), result, 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(), hypothetical_dense_rank_final(), 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().

1095 {
1096  HeapTuple tp;
1097 
1099  if (HeapTupleIsValid(tp))
1100  {
1103 
1104  result = optup->oprcode;
1105  ReleaseSysCache(tp);
1106  return result;
1107  }
1108  else
1109  return (RegProcedure) InvalidOid;
1110 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
regproc RegProcedure
Definition: c.h:395
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
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(), result, 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(), 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:656
#define SearchSysCache4(cacheId, key1, key2, key3, key4)
Definition: syscache.h:162
#define Int16GetDatum(X)
Definition: postgres.h:457
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
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(), result, 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(), MJExamineQuals(), and RelationBuildPartitionKey().

745 {
746  HeapTuple tp;
747  Form_pg_amproc amproc_tup;
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:656
FormData_pg_amproc * Form_pg_amproc
Definition: pg_amproc.h:59
#define SearchSysCache4(cacheId, key1, key2, key3, key4)
Definition: syscache.h:162
regproc RegProcedure
Definition: c.h:395
#define Int16GetDatum(X)
Definition: postgres.h:457
return result
Definition: formatting.c:1633
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
char* get_opname ( Oid  opno)

Definition at line 1119 of file lsyscache.c.

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

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

1120 {
1121  HeapTuple tp;
1122 
1124  if (HeapTupleIsValid(tp))
1125  {
1127  char *result;
1128 
1129  result = pstrdup(NameStr(optup->oprname));
1130  ReleaseSysCache(tp);
1131  return result;
1132  }
1133  else
1134  return NULL;
1135 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
#define NameStr(name)
Definition: c.h:499
RegProcedure get_oprjoin ( Oid  opno)

Definition at line 1385 of file lsyscache.c.

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

Referenced by join_selectivity(), and scalararraysel().

1386 {
1387  HeapTuple tp;
1388 
1390  if (HeapTupleIsValid(tp))
1391  {
1394 
1395  result = optup->oprjoin;
1396  ReleaseSysCache(tp);
1397  return result;
1398  }
1399  else
1400  return (RegProcedure) InvalidOid;
1401 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
regproc RegProcedure
Definition: c.h:395
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
RegProcedure get_oprrest ( Oid  opno)

Definition at line 1361 of file lsyscache.c.

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

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

1362 {
1363  HeapTuple tp;
1364 
1366  if (HeapTupleIsValid(tp))
1367  {
1370 
1371  result = optup->oprrest;
1372  ReleaseSysCache(tp);
1373  return result;
1374  }
1375  else
1376  return (RegProcedure) InvalidOid;
1377 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
regproc RegProcedure
Definition: c.h:395
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
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, BTREE_AM_OID, get_opfamily_member(), GETSTRUCT, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, OidIsValid, ReleaseSysCacheList, result, SearchSysCacheList1, and catctup::tuple.

Referenced by create_unique_plan().

303 {
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:154
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define BTREE_AM_OID
Definition: pg_am.h:70
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:538
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
Oid get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype, int16 strategy)
Definition: lsyscache.c:163
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
#define InvalidOid
Definition: postgres_ext.h:36
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
int i
HeapTupleData tuple
Definition: catcache.h:116
#define BTLessStrategyNumber
Definition: stratnum.h:29
#define BTEqualStrategyNumber
Definition: stratnum.h:31
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, BTREE_AM_OID, GETSTRUCT, i, InvalidOid, catclist::members, catclist::n_members, ObjectIdGetDatum, ReleaseSysCacheList, result, SearchSysCacheList1, and catctup::tuple.

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

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:154
#define BTGreaterStrategyNumber
Definition: stratnum.h:33
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define BTREE_AM_OID
Definition: pg_am.h:70
return result
Definition: formatting.c:1633
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
Definition: catcache.h:155
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define SearchSysCacheList1(cacheId, key1)
Definition: syscache.h:201
#define ReleaseSysCacheList(x)
Definition: syscache.h:210
#define InvalidOid
Definition: postgres_ext.h:36
FormData_pg_amop * Form_pg_amop
Definition: pg_amop.h:77
int i
HeapTupleData tuple
Definition: catcache.h:116
#define BTLessStrategyNumber
Definition: stratnum.h:29
Oid get_promoted_array_type ( Oid  typid)

Definition at line 2536 of file lsyscache.c.

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

Referenced by build_subplan(), and exprType().

2537 {
2538  Oid array_type = get_array_type(typid);
2539 
2540  if (OidIsValid(array_type))
2541  return array_type;
2542  if (OidIsValid(get_element_type(typid)))
2543  return typid;
2544  return InvalidOid;
2545 }
Oid get_element_type(Oid typid)
Definition: lsyscache.c:2484
Oid get_array_type(Oid typid)
Definition: lsyscache.c:2512
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:538
#define InvalidOid
Definition: postgres_ext.h:36
Oid get_range_subtype ( Oid  rangeOid)

Definition at line 3074 of file lsyscache.c.

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

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

3075 {
3076  HeapTuple tp;
3077 
3078  tp = SearchSysCache1(RANGETYPE, ObjectIdGetDatum(rangeOid));
3079  if (HeapTupleIsValid(tp))
3080  {
3081  Form_pg_range rngtup = (Form_pg_range) GETSTRUCT(tp);
3082  Oid result;
3083 
3084  result = rngtup->rngsubtype;
3085  ReleaseSysCache(tp);
3086  return result;
3087  }
3088  else
3089  return InvalidOid;
3090 }
FormData_pg_range * Form_pg_range
Definition: pg_range.h:49
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
char* get_rel_name ( Oid  relid)

Definition at line 1726 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, NameStr, NULL, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), RELOID, result, 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_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(), map_sql_schema_to_xmlschema_types(), perform_work_item(), pg_attribute_noreturn(), pg_extension_config_dump(), pg_get_expr(), pg_get_expr_ext(), pg_prewarm(), pg_sequence_parameters(), postgresGetForeignRelSize(), process_owned_by(), reindex_index(), ReindexMultipleTables(), RenameConstraintById(), set_rtable_names(), show_modifytable_info(), table_to_xml_internal(), and transformAlterTableStmt().

1727 {
1728  HeapTuple tp;
1729 
1730  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1731  if (HeapTupleIsValid(tp))
1732  {
1733  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1734  char *result;
1735 
1736  result = pstrdup(NameStr(reltup->relname));
1737  ReleaseSysCache(tp);
1738  return result;
1739  }
1740  else
1741  return NULL;
1742 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
char * pstrdup(const char *in)
Definition: mcxt.c:1077
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:229
FormData_pg_class * Form_pg_class
Definition: pg_class.h:95
#define NameStr(name)
Definition: c.h:499
Oid get_rel_namespace ( Oid  relid)

Definition at line 1750 of file lsyscache.c.

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

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

1751 {
1752  HeapTuple tp;
1753 
1754  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1755  if (HeapTupleIsValid(tp))
1756  {
1757  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1758  Oid result;
1759 
1760  result = reltup->relnamespace;
1761  ReleaseSysCache(tp);
1762  return result;
1763  }
1764  else
1765  return InvalidOid;
1766 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_class * Form_pg_class
Definition: pg_class.h:95
char get_rel_persistence ( Oid  relid)

Definition at line 1852 of file lsyscache.c.

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

Referenced by set_rel_consider_parallel().

1853 {
1854  HeapTuple tp;
1855  Form_pg_class reltup;
1856  char result;
1857 
1858  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1859  if (!HeapTupleIsValid(tp))
1860  elog(ERROR, "cache lookup failed for relation %u", relid);
1861  reltup = (Form_pg_class) GETSTRUCT(tp);
1862  result = reltup->relpersistence;
1863  ReleaseSysCache(tp);
1864 
1865  return result;
1866 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_class * Form_pg_class
Definition: pg_class.h:95
#define elog
Definition: elog.h:219
char get_rel_relkind ( Oid  relid)

Definition at line 1801 of file lsyscache.c.

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

Referenced by AlterSubscription_refresh(), AlterTypeNamespaceInternal(), AlterTypeOwner(), ATExecAlterColumnType(), check_relation_privileges(), CreateSubscription(), doDeletion(), exec_object_restorecon(), get_constraint_index(), 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(), pg_get_serial_sequence(), pg_get_triggerdef_worker(), RangeVarCallbackForLockTable(), RangeVarCallbackForReindexIndex(), RangeVarCallbackOwnsTable(), RelationGetPartitionDispatchInfo(), RenameType(), sepgsql_attribute_drop(), sepgsql_attribute_post_create(), sepgsql_attribute_relabel(), sepgsql_attribute_setattr(), sepgsql_relation_drop(), sepgsql_relation_relabel(), and sepgsql_relation_setattr().

1802 {
1803  HeapTuple tp;
1804 
1805  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1806  if (HeapTupleIsValid(tp))
1807  {
1808  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1809  char result;
1810 
1811  result = reltup->relkind;
1812  ReleaseSysCache(tp);
1813  return result;
1814  }
1815  else
1816  return '\0';
1817 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_class * Form_pg_class
Definition: pg_class.h:95
Oid get_rel_tablespace ( Oid  relid)

Definition at line 1828 of file lsyscache.c.

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

Referenced by pg_get_constraintdef_worker(), and pg_get_indexdef_worker().

1829 {
1830  HeapTuple tp;
1831 
1832  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1833  if (HeapTupleIsValid(tp))
1834  {
1835  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1836  Oid result;
1837 
1838  result = reltup->reltablespace;
1839  ReleaseSysCache(tp);
1840  return result;
1841  }
1842  else
1843  return InvalidOid;
1844 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_class * Form_pg_class
Definition: pg_class.h:95
Oid get_rel_type_id ( Oid  relid)

Definition at line 1777 of file lsyscache.c.

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

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

1778 {
1779  HeapTuple tp;
1780 
1781  tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));
1782  if (HeapTupleIsValid(tp))
1783  {
1784  Form_pg_class reltup = (Form_pg_class) GETSTRUCT(tp);
1785  Oid result;
1786 
1787  result = reltup->reltype;
1788  ReleaseSysCache(tp);
1789  return result;
1790  }
1791  else
1792  return InvalidOid;
1793 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_class * Form_pg_class
Definition: pg_class.h:95
char* get_relid_attribute_name ( Oid  relid,
AttrNumber  attnum 
)

Definition at line 801 of file lsyscache.c.

References elog, ERROR, get_attname(), and NULL.

Referenced by conversion_error_callback(), decompile_column_index_array(), deparseColumnRef(), errtablecol(), 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().

802 {
803  char *attname;
804 
805  attname = get_attname(relid, attnum);
806  if (attname == NULL)
807  elog(ERROR, "cache lookup failed for attribute %d of relation %u",
808  attnum, relid);
809  return attname;
810 }
char * get_attname(Oid relid, AttrNumber attnum)
Definition: lsyscache.c:774
#define ERROR
Definition: elog.h:43
#define NULL
Definition: c.h:229
#define elog
Definition: elog.h:219
Oid get_relname_relid ( const char *  relname,
Oid  relnamespace 
)
Oid get_transform_fromsql ( Oid  typid,
Oid  langid,
List trftypes 
)

Definition at line 1872 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_datum_func2().

1873 {
1874  HeapTuple tup;
1875 
1876  if (!list_member_oid(trftypes, typid))
1877  return InvalidOid;
1878 
1879  tup = SearchSysCache2(TRFTYPELANG, typid, langid);
1880  if (HeapTupleIsValid(tup))
1881  {
1882  Oid funcid;
1883 
1884  funcid = ((Form_pg_transform) GETSTRUCT(tup))->trffromsql;
1885  ReleaseSysCache(tup);
1886  return funcid;
1887  }
1888  else
1889  return InvalidOid;
1890 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
unsigned int Oid
Definition: postgres_ext.h:31
FormData_pg_transform * Form_pg_transform
Definition: pg_transform.h:35
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#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:77
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
Oid get_transform_tosql ( Oid  typid,
Oid  langid,
List trftypes 
)

Definition at line 1893 of file lsyscache.c.

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

Referenced by plperl_sv_to_datum(), and PLy_output_datum_func2().

1894 {
1895  HeapTuple tup;
1896 
1897  if (!list_member_oid(trftypes, typid))
1898  return InvalidOid;
1899 
1900  tup = SearchSysCache2(TRFTYPELANG, typid, langid);
1901  if (HeapTupleIsValid(tup))
1902  {
1903  Oid funcid;
1904 
1905  funcid = ((Form_pg_transform) GETSTRUCT(tup))->trftosql;
1906  ReleaseSysCache(tup);
1907  return funcid;
1908  }
1909  else
1910  return InvalidOid;
1911 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
unsigned int Oid
Definition: postgres_ext.h:31
FormData_pg_transform * Form_pg_transform
Definition: pg_transform.h:35
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#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:77
#define SearchSysCache2(cacheId, key1, key2)
Definition: syscache.h:158
Oid get_typ_typrelid ( Oid  typid)

Definition at line 2457 of file lsyscache.c.

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

Referenced by CheckAttributeType(), and processIndirection().

2458 {
2459  HeapTuple tp;
2460 
2462  if (HeapTupleIsValid(tp))
2463  {
2464  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2465  Oid result;
2466 
2467  result = typtup->typrelid;
2468  ReleaseSysCache(tp);
2469  return result;
2470  }
2471  else
2472  return InvalidOid;
2473 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int32 get_typavgwidth ( Oid  typid,
int32  typmod 
)

Definition at line 2328 of file lsyscache.c.

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

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().

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

Definition at line 1972 of file lsyscache.c.

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

Referenced by get_agg_clause_costs_walker().

1973 {
1974  HeapTuple tp;
1975 
1977  if (HeapTupleIsValid(tp))
1978  {
1979  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
1980  bool result;
1981 
1982  result = typtup->typbyval;
1983  ReleaseSysCache(tp);
1984  return result;
1985  }
1986  else
1987  return false;
1988 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
Oid get_typcollation ( Oid  typid)

Definition at line 2781 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, InvalidOid, ObjectIdGetDatum, ReleaseSysCache(), result, 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().

2782 {
2783  HeapTuple tp;
2784 
2786  if (HeapTupleIsValid(tp))
2787  {
2788  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2789  Oid result;
2790 
2791  result = typtup->typcollation;
2792  ReleaseSysCache(tp);
2793  return result;
2794  }
2795  else
2796  return InvalidOid;
2797 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
Node* get_typdefault ( Oid  typid)

Definition at line 2198 of file lsyscache.c.

References Anum_pg_type_typdefault, Anum_pg_type_typdefaultbin, elog, ERROR, GETSTRUCT, getTypeIOParam(), HeapTupleIsValid, makeConst(), NULL, ObjectIdGetDatum, OidInputFunctionCall(), pfree(), ReleaseSysCache(), SearchSysCache1, stringToNode(), SysCacheGetAttr(), TextDatumGetCString, and TYPEOID.

Referenced by build_column_default().

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

Definition at line 2436 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().

2437 {
2438  HeapTuple tp;
2439  Form_pg_type typtup;
2440 
2442  if (!HeapTupleIsValid(tp))
2443  elog(ERROR, "cache lookup failed for type %u", typid);
2444  typtup = (Form_pg_type) GETSTRUCT(tp);
2445  *typcategory = typtup->typcategory;
2446  *typispreferred = typtup->typispreferred;
2447  ReleaseSysCache(tp);
2448 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
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 2075 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(), plperl_ref_from_pg_array(), PLy_input_datum_func2(), and PLy_output_datum_func2().

2083 {
2084  HeapTuple typeTuple;
2085  Form_pg_type typeStruct;
2086 
2087  /*
2088  * In bootstrap mode, pass it off to bootstrap.c. This hack allows us to
2089  * use array_in and array_out during bootstrap.
2090  */
2092  {
2093  Oid typinput;
2094  Oid typoutput;
2095 
2096  boot_get_type_io_data(typid,
2097  typlen,
2098  typbyval,
2099  typalign,
2100  typdelim,
2101  typioparam,
2102  &typinput,
2103  &typoutput);
2104  switch (which_func)
2105  {
2106  case IOFunc_input:
2107  *func = typinput;
2108  break;
2109  case IOFunc_output:
2110  *func = typoutput;
2111  break;
2112  default:
2113  elog(ERROR, "binary I/O not supported during bootstrap");
2114  break;
2115  }
2116  return;
2117  }
2118 
2119  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2120  if (!HeapTupleIsValid(typeTuple))
2121  elog(ERROR, "cache lookup failed for type %u", typid);
2122  typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
2123 
2124  *typlen = typeStruct->typlen;
2125  *typbyval = typeStruct->typbyval;
2126  *typalign = typeStruct->typalign;
2127  *typdelim = typeStruct->typdelim;
2128  *typioparam = getTypeIOParam(typeTuple);
2129  switch (which_func)
2130  {
2131  case IOFunc_input:
2132  *func = typeStruct->typinput;
2133  break;
2134  case IOFunc_output:
2135  *func = typeStruct->typoutput;
2136  break;
2137  case IOFunc_receive:
2138  *func = typeStruct->typreceive;
2139  break;
2140  case IOFunc_send:
2141  *func = typeStruct->typsend;
2142  break;
2143  }
2144  ReleaseSysCache(typeTuple);
2145 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define IsBootstrapProcessingMode()
Definition: miscadmin.h:370
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2053
#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:944
bool get_typisdefined ( Oid  typid)

Definition at line 1923 of file lsyscache.c.

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

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

1924 {
1925  HeapTuple tp;
1926 
1928  if (HeapTupleIsValid(tp))
1929  {
1930  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
1931  bool result;
1932 
1933  result = typtup->typisdefined;
1934  ReleaseSysCache(tp);
1935  return result;
1936  }
1937  else
1938  return false;
1939 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int16 get_typlen ( Oid  typid)

Definition at line 1947 of file lsyscache.c.

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

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

1948 {
1949  HeapTuple tp;
1950 
1952  if (HeapTupleIsValid(tp))
1953  {
1954  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
1955  int16 result;
1956 
1957  result = typtup->typlen;
1958  ReleaseSysCache(tp);
1959  return result;
1960  }
1961  else
1962  return 0;
1963 }
signed short int16
Definition: c.h:255
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
void get_typlenbyval ( Oid  typid,
int16 typlen,
bool typbyval 
)

Definition at line 2001 of file lsyscache.c.

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

Referenced by build_pertrans_for_aggref(), copyParamList(), 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(), SerializeParamList(), and tuplesort_begin_datum().

2002 {
2003  HeapTuple tp;
2004  Form_pg_type typtup;
2005 
2007  if (!HeapTupleIsValid(tp))
2008  elog(ERROR, "cache lookup failed for type %u", typid);
2009  typtup = (Form_pg_type) GETSTRUCT(tp);
2010  *typlen = typtup->typlen;
2011  *typbyval = typtup->typbyval;
2012  ReleaseSysCache(tp);
2013 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
void get_typlenbyvalalign ( Oid  typid,
int16 typlen,
bool typbyval,
char *  typalign 
)

Definition at line 2021 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(), BuildArrayRemapInfo(), CreateCast(), DefineRange(), exec_assign_value(), ExecEvalScalarArrayOp(), ExecIndexEvalArrayKeys(), ExecInitArrayRef(), ExecInitExprRec(), expand_array(), get_text_array_contents(), ginarrayextract(), gincost_scalararrayopexpr(), ginqueryarrayextract(), initArrayResult(), map_sql_value_to_xml_value(), ordered_set_startup(), RelationBuildPartitionKey(), scalararraysel(), and text_format().

2023 {
2024  HeapTuple tp;
2025  Form_pg_type typtup;
2026 
2028  if (!HeapTupleIsValid(tp))
2029  elog(ERROR, "cache lookup failed for type %u", typid);
2030  typtup = (Form_pg_type) GETSTRUCT(tp);
2031  *typlen = typtup->typlen;
2032  *typbyval = typtup->typbyval;
2033  *typalign = typtup->typalign;
2034  ReleaseSysCache(tp);
2035 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
Oid get_typmodin ( Oid  typid)

Definition at line 2731 of file lsyscache.c.

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

2732 {
2733  HeapTuple tp;
2734 
2736  if (HeapTupleIsValid(tp))
2737  {
2738  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2739  Oid result;
2740 
2741  result = typtup->typmodin;
2742  ReleaseSysCache(tp);
2743  return result;
2744  }
2745  else
2746  return InvalidOid;
2747 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define InvalidOid
Definition: postgres_ext.h:36
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
char get_typstorage ( Oid  typid)

Definition at line 2169 of file lsyscache.c.

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

2170 {
2171  HeapTuple tp;
2172 
2174  if (HeapTupleIsValid(tp))
2175  {
2176  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2177  char result;
2178 
2179  result = typtup->typstorage;
2180  ReleaseSysCache(tp);
2181  return result;
2182  }
2183  else
2184  return 'p';
2185 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
char get_typtype ( Oid  typid)

Definition at line 2379 of file lsyscache.c.

References GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), result, 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(), PLyObject_ToBool(), PLyObject_ToBytea(), PLySequence_ToArray(), type_is_enum(), type_is_range(), and type_is_rowtype().

2380 {
2381  HeapTuple tp;
2382 
2384  if (HeapTupleIsValid(tp))
2385  {
2386  Form_pg_type typtup = (Form_pg_type) GETSTRUCT(tp);
2387  char result;
2388 
2389  result = typtup->typtype;
2390  ReleaseSysCache(tp);
2391  return result;
2392  }
2393  else
2394  return '\0';
2395 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
Oid getBaseTypeAndTypmod ( Oid  typid,
int32 typmod 
)

Definition at line 2288 of file lsyscache.c.

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

Referenced by ATExecAddColumn(), coerce_to_domain(), coerce_type(), domain_state_setup(), exec_assign_value(), getBaseType(), map_sql_type_to_xmlschema_type(), SendRowDescriptionMessage(), transformArrayType(), and transformTypeCast().

2289 {
2290  /*
2291  * We loop to find the bottom base type in a stack of domains.
2292  */
2293  for (;;)
2294  {
2295  HeapTuple tup;
2296  Form_pg_type typTup;
2297 
2298  tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
2299  if (!HeapTupleIsValid(tup))
2300  elog(ERROR, "cache lookup failed for type %u", typid);
2301  typTup = (Form_pg_type) GETSTRUCT(tup);
2302  if (typTup->typtype != TYPTYPE_DOMAIN)
2303  {
2304  /* Not a domain, so done */
2305  ReleaseSysCache(tup);
2306  break;
2307  }
2308 
2309  Assert(*typmod == -1);
2310  typid = typTup->typbasetype;
2311  *typmod = typTup->typtypmod;
2312 
2313  ReleaseSysCache(tup);
2314  }
2315 
2316  return typid;
2317 }
#define TYPTYPE_DOMAIN
Definition: pg_type.h:722
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define Assert(condition)
Definition: c.h:675
#define elog
Definition: elog.h:219
void getTypeBinaryInputInfo ( Oid  type,
Oid typReceive,
Oid typIOParam 
)

Definition at line 2665 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().

2666 {
2667  HeapTuple typeTuple;
2668  Form_pg_type pt;
2669 
2670  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type));
2671  if (!HeapTupleIsValid(typeTuple))
2672  elog(ERROR, "cache lookup failed for type %u", type);
2673  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2674 
2675  if (!pt->typisdefined)
2676  ereport(ERROR,
2677  (errcode(ERRCODE_UNDEFINED_OBJECT),
2678  errmsg("type %s is only a shell",
2679  format_type_be(type))));
2680  if (!OidIsValid(pt->typreceive))
2681  ereport(ERROR,
2682  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2683  errmsg("no binary input function available for type %s",
2684  format_type_be(type))));
2685 
2686  *typReceive = pt->typreceive;
2687  *typIOParam = getTypeIOParam(typeTuple);
2688 
2689  ReleaseSysCache(typeTuple);
2690 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:94
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define OidIsValid(objectId)
Definition: c.h:538
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int errmsg(const char *fmt,...)
Definition: elog.c:797
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2053
#define elog
Definition: elog.h:219
void getTypeBinaryOutputInfo ( Oid  type,
Oid typSend,
bool typIsVarlena 
)

Definition at line 2698 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().

2699 {
2700  HeapTuple typeTuple;
2701  Form_pg_type pt;
2702 
2703  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type));
2704  if (!HeapTupleIsValid(typeTuple))
2705  elog(ERROR, "cache lookup failed for type %u", type);
2706  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2707 
2708  if (!pt->typisdefined)
2709  ereport(ERROR,
2710  (errcode(ERRCODE_UNDEFINED_OBJECT),
2711  errmsg("type %s is only a shell",
2712  format_type_be(type))));
2713  if (!OidIsValid(pt->typsend))
2714  ereport(ERROR,
2715  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2716  errmsg("no binary output function available for type %s",
2717  format_type_be(type))));
2718 
2719  *typSend = pt->typsend;
2720  *typIsVarlena = (!pt->typbyval) && (pt->typlen == -1);
2721 
2722  ReleaseSysCache(typeTuple);
2723 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:94
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define OidIsValid(objectId)
Definition: c.h:538
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int errmsg(const char *fmt,...)
Definition: elog.c:797
#define elog
Definition: elog.h:219
void getTypeInputInfo ( Oid  type,
Oid typInput,
Oid typIOParam 
)

Definition at line 2599 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(), prepare_column_cache(), record_in(), slot_modify_cstrings(), slot_store_cstrings(), and TupleDescGetAttInMetadata().

2600 {
2601  HeapTuple typeTuple;
2602  Form_pg_type pt;
2603 
2604  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type));
2605  if (!HeapTupleIsValid(typeTuple))
2606  elog(ERROR, "cache lookup failed for type %u", type);
2607  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2608 
2609  if (!pt->typisdefined)
2610  ereport(ERROR,
2611  (errcode(ERRCODE_UNDEFINED_OBJECT),
2612  errmsg("type %s is only a shell",
2613  format_type_be(type))));
2614  if (!OidIsValid(pt->typinput))
2615  ereport(ERROR,
2616  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2617  errmsg("no input function available for type %s",
2618  format_type_be(type))));
2619 
2620  *typInput = pt->typinput;
2621  *typIOParam = getTypeIOParam(typeTuple);
2622 
2623  ReleaseSysCache(typeTuple);
2624 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:94
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define OidIsValid(objectId)
Definition: c.h:538
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int errmsg(const char *fmt,...)
Definition: elog.c:797
Oid getTypeIOParam(HeapTuple typeTuple)
Definition: lsyscache.c:2053
#define elog
Definition: elog.h:219
Oid getTypeIOParam ( HeapTuple  typeTuple)

Definition at line 2053 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(), PLy_input_datum_func2(), PLy_output_datum_func2(), and stringTypeDatum().

2054 {
2055  Form_pg_type typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
2056 
2057  /*
2058  * Array types get their typelem as parameter; everybody else gets their
2059  * own type OID as parameter.
2060  */
2061  if (OidIsValid(typeStruct->typelem))
2062  return typeStruct->typelem;
2063  else
2064  return HeapTupleGetOid(typeTuple);
2065 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define OidIsValid(objectId)
Definition: c.h:538
#define HeapTupleGetOid(tuple)
Definition: htup_details.h:695
void getTypeOutputInfo ( Oid  type,
Oid typOutput,
bool typIsVarlena 
)

Definition at line 2632 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(), BuildIndexValueDescription(), check_functions_in_node(), concat_internal(), convert_value_to_string(), CopyTo(), cost_qual_eval_walker(), 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(), postgresBeginForeignModify(), prepare_query_params(), print_expr(), printtup_prepare_info(), record_out(), SendFunctionResult(), set_limit(), SPI_getvalue(), text_format(), and tuple_to_stringinfo().

2633 {
2634  HeapTuple typeTuple;
2635  Form_pg_type pt;
2636 
2637  typeTuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type));
2638  if (!HeapTupleIsValid(typeTuple))
2639  elog(ERROR, "cache lookup failed for type %u", type);
2640  pt = (Form_pg_type) GETSTRUCT(typeTuple);
2641 
2642  if (!pt->typisdefined)
2643  ereport(ERROR,
2644  (errcode(ERRCODE_UNDEFINED_OBJECT),
2645  errmsg("type %s is only a shell",
2646  format_type_be(type))));
2647  if (!OidIsValid(pt->typoutput))
2648  ereport(ERROR,
2649  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2650  errmsg("no output function available for type %s",
2651  format_type_be(type))));
2652 
2653  *typOutput = pt->typoutput;
2654  *typIsVarlena = (!pt->typbyval) && (pt->typlen == -1);
2655 
2656  ReleaseSysCache(typeTuple);
2657 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
int errcode(int sqlerrcode)
Definition: elog.c:575
char * format_type_be(Oid type_oid)
Definition: format_type.c:94
FormData_pg_type * Form_pg_type
Definition: pg_type.h:233
#define OidIsValid(objectId)
Definition: c.h:538
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
int errmsg(const char *fmt,...)
Definition: elog.c:797
#define elog
Definition: elog.h:219
bool op_hashjoinable ( Oid  opno,
Oid  inputtype 
)

Definition at line 1246 of file lsyscache.c.

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

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

1247 {
1248  bool result = false;
1249  HeapTuple tp;
1250  TypeCacheEntry *typentry;
1251 
1252  /* As in op_mergejoinable, let the typcache handle the hard cases */
1253  /* Eventually we'll need a similar case for record_eq ... */
1254  if (opno == ARRAY_EQ_OP)
1255  {
1256  typentry = lookup_type_cache(inputtype, TYPECACHE_HASH_PROC);
1257  if (typentry->hash_proc == F_HASH_ARRAY)
1258  result = true;
1259  }
1260  else
1261  {
1262  /* For all other operators, rely on pg_operator.oprcanhash */
1264  if (HeapTupleIsValid(tp))
1265  {
1267 
1268  result = optup->oprcanhash;
1269  ReleaseSysCache(tp);
1270  }
1271  }
1272  return result;
1273 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
Definition: typcache.c:191
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define ARRAY_EQ_OP
Definition: pg_operator.h:776
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
#define TYPECACHE_HASH_PROC
Definition: typcache.h:114
bool op_in_opfamily ( Oid  opno,
Oid  opfamily 
)

Definition at line 63 of file lsyscache.c.

References AMOP_SEARCH, AMOPOPID, CharGetDatum, ObjectIdGetDatum, and SearchSysCacheExists3.

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

64 {
66  ObjectIdGetDatum(opno),
68  ObjectIdGetDatum(opfamily));
69 }
#define AMOP_SEARCH
Definition: pg_amop.h:69
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define SearchSysCacheExists3(cacheId, key1, key2, key3)
Definition: syscache.h:178
#define CharGetDatum(X)
Definition: postgres.h:422
void op_input_types ( Oid  opno,
Oid lefttype,
Oid righttype 
)

Definition at line 1167 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().

1168 {
1169  HeapTuple tp;
1170  Form_pg_operator optup;
1171 
1173  if (!HeapTupleIsValid(tp)) /* shouldn't happen */
1174  elog(ERROR, "cache lookup failed for operator %u", opno);
1175  optup = (Form_pg_operator) GETSTRUCT(tp);
1176  *lefttype = optup->oprleft;
1177  *righttype = optup->oprright;
1178  ReleaseSysCache(tp);
1179 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
#define elog
Definition: elog.h:219
bool op_mergejoinable ( Oid  opno,
Oid  inputtype 
)

Definition at line 1195 of file lsyscache.c.

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

Referenced by check_mergejoinable(), and compute_semijoin_info().

1196 {
1197  bool result = false;
1198  HeapTuple tp;
1199  TypeCacheEntry *typentry;
1200 
1201  /*
1202  * For array_eq or record_eq, we can sort if the element or field types
1203  * are all sortable. We could implement all the checks for that here, but
1204  * the typcache already does that and caches the results too, so let's
1205  * rely on the typcache.
1206  */
1207  if (opno == ARRAY_EQ_OP)
1208  {
1209  typentry = lookup_type_cache(inputtype, TYPECACHE_CMP_PROC);
1210  if (typentry->cmp_proc == F_BTARRAYCMP)
1211  result = true;
1212  }
1213  else if (opno == RECORD_EQ_OP)
1214  {
1215  typentry = lookup_type_cache(inputtype, TYPECACHE_CMP_PROC);
1216  if (typentry->cmp_proc == F_BTRECORDCMP)
1217  result = true;
1218  }
1219  else
1220  {
1221  /* For all other operators, rely on pg_operator.oprcanmerge */
1223  if (HeapTupleIsValid(tp))
1224  {
1226 
1227  result = optup->oprcanmerge;
1228  ReleaseSysCache(tp);
1229  }
1230  }
1231  return result;
1232 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
return result
Definition: formatting.c:1633
#define RECORD_EQ_OP
Definition: pg_operator.h:1720
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:156
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1117
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
Definition: typcache.c:191
#define TYPECACHE_CMP_PROC
Definition: typcache.h:113
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define ARRAY_EQ_OP
Definition: pg_operator.h:776
FormData_pg_operator* Form_pg_operator
Definition: pg_operator.h:57
bool op_strict ( Oid  opno)

Definition at line 1281 of file lsyscache.c.

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

Referenced by ExecHashTableCreate(), predicate_implied_by_simple_clause(), predicate_refuted_by_simple_clause(), and reconsider_outer_join_clause().

1282 {
1283  RegProcedure funcid = get_opcode(opno);
1284 
1285  if (funcid == (RegProcedure) InvalidOid)
1286  elog(ERROR, "operator %u does not exist", opno);
1287 
1288  return func_strict((Oid) funcid);
1289 }
regproc RegProcedure
Definition: c.h:395
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:1094
bool func_strict(Oid funcid)
Definition: lsyscache.c:1565
#define elog
Definition: elog.h:219
char op_volatile ( Oid  opno)

Definition at line 1297 of file lsyscache.c.

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

Referenced by lookup_proof_cache().

1298 {
1299  RegProcedure funcid = get_opcode(opno);
1300 
1301  if (funcid == (RegProcedure) InvalidOid)
1302  elog(ERROR, "operator %u does not exist", opno);
1303 
1304  return func_volatile((Oid) funcid);
1305 }
regproc RegProcedure
Definition: c.h:395
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:1094
char func_volatile(Oid funcid)
Definition: lsyscache.c:1584
#define elog
Definition: elog.h:219
bool type_is_collatable ( Oid  typid)

Definition at line 2806 of file lsyscache.c.

References get_typcollation(), and OidIsValid.

Referenced by CheckAttributeType(), ComputeIndexAttrs(), ComputePartitionAttrs(), create_ctas_nodata(), DefineRange(), DefineVirtualRelation(), intorel_startup(), pg_collation_for(), transformCollateClause(), and transformRangeTableFunc().

2807 {
2808  return OidIsValid(get_typcollation(typid));
2809 }
#define OidIsValid(objectId)
Definition: c.h:538
Oid get_typcollation(Oid typid)
Definition: lsyscache.c:2781
bool type_is_enum ( Oid  typid)

Definition at line 2414 of file lsyscache.c.

References get_typtype(), and TYPTYPE_ENUM.

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

2415 {
2416  return (get_typtype(typid) == TYPTYPE_ENUM);
2417 }
char get_typtype(Oid typid)
Definition: lsyscache.c:2379
#define TYPTYPE_ENUM
Definition: pg_type.h:723
bool type_is_range ( Oid  typid)

Definition at line 2424 of file lsyscache.c.

References get_typtype(), and TYPTYPE_RANGE.

Referenced by IsBinaryCoercible().

2425 {
2426  return (get_typtype(typid) == TYPTYPE_RANGE);
2427 }
char get_typtype(Oid typid)
Definition: lsyscache.c:2379
#define TYPTYPE_RANGE
Definition: pg_type.h:725