mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-20 13:27:00 +08:00
specific hash functions used by hash indexes, rather than the old not-datatype-aware ComputeHashFunc routine. This makes it safe to do hash joining on several datatypes that previously couldn't use hashing. The sets of datatypes that are hash indexable and hash joinable are now exactly the same, whereas before each had some that weren't in the other.
91 lines
3.7 KiB
C
91 lines
3.7 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* lsyscache.h
|
|
* Convenience routines for common queries in the system catalog cache.
|
|
*
|
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: lsyscache.h,v 1.71 2003/06/22 22:04:55 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef LSYSCACHE_H
|
|
#define LSYSCACHE_H
|
|
|
|
#include "access/htup.h"
|
|
|
|
extern bool op_in_opclass(Oid opno, Oid opclass);
|
|
extern bool op_requires_recheck(Oid opno, Oid opclass);
|
|
extern Oid get_opclass_member(Oid opclass, int16 strategy);
|
|
extern Oid get_op_hash_function(Oid opno);
|
|
extern char *get_attname(Oid relid, AttrNumber attnum);
|
|
extern AttrNumber get_attnum(Oid relid, const char *attname);
|
|
extern Oid get_atttype(Oid relid, AttrNumber attnum);
|
|
extern int32 get_atttypmod(Oid relid, AttrNumber attnum);
|
|
extern void get_atttypetypmod(Oid relid, AttrNumber attnum,
|
|
Oid *typid, int32 *typmod);
|
|
extern bool opclass_is_btree(Oid opclass);
|
|
extern bool opclass_is_hash(Oid opclass);
|
|
extern RegProcedure get_opcode(Oid opno);
|
|
extern char *get_opname(Oid opno);
|
|
extern bool op_mergejoinable(Oid opno, Oid *leftOp, Oid *rightOp);
|
|
extern void op_mergejoin_crossops(Oid opno, Oid *ltop, Oid *gtop,
|
|
RegProcedure *ltproc, RegProcedure *gtproc);
|
|
extern bool op_hashjoinable(Oid opno);
|
|
extern bool op_strict(Oid opno);
|
|
extern char op_volatile(Oid opno);
|
|
extern Oid get_commutator(Oid opno);
|
|
extern Oid get_negator(Oid opno);
|
|
extern RegProcedure get_oprrest(Oid opno);
|
|
extern RegProcedure get_oprjoin(Oid opno);
|
|
extern char *get_func_name(Oid funcid);
|
|
extern Oid get_func_rettype(Oid funcid);
|
|
extern bool get_func_retset(Oid funcid);
|
|
extern bool func_strict(Oid funcid);
|
|
extern char func_volatile(Oid funcid);
|
|
extern Oid get_relname_relid(const char *relname, Oid relnamespace);
|
|
extern Oid get_system_catalog_relid(const char *catname);
|
|
extern char *get_rel_name(Oid relid);
|
|
extern Oid get_rel_namespace(Oid relid);
|
|
extern Oid get_rel_type_id(Oid relid);
|
|
extern char get_rel_relkind(Oid relid);
|
|
extern bool get_typisdefined(Oid typid);
|
|
extern int16 get_typlen(Oid typid);
|
|
extern bool get_typbyval(Oid typid);
|
|
extern void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval);
|
|
extern void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval,
|
|
char *typalign);
|
|
extern char get_typstorage(Oid typid);
|
|
extern int32 get_typtypmod(Oid typid);
|
|
extern Node *get_typdefault(Oid typid);
|
|
extern char get_typtype(Oid typid);
|
|
extern Oid get_typ_typrelid(Oid typid);
|
|
extern Oid get_element_type(Oid typid);
|
|
extern Oid get_array_type(Oid typid);
|
|
extern void getTypeInputInfo(Oid type, Oid *typInput, Oid *typElem);
|
|
extern void getTypeOutputInfo(Oid type, Oid *typOutput, Oid *typElem,
|
|
bool *typIsVarlena);
|
|
extern void getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typElem);
|
|
extern void getTypeBinaryOutputInfo(Oid type, Oid *typSend, Oid *typElem,
|
|
bool *typIsVarlena);
|
|
extern Oid getBaseType(Oid typid);
|
|
extern int32 get_typavgwidth(Oid typid, int32 typmod);
|
|
extern int32 get_attavgwidth(Oid relid, AttrNumber attnum);
|
|
extern bool get_attstatsslot(HeapTuple statstuple,
|
|
Oid atttype, int32 atttypmod,
|
|
int reqkind, Oid reqop,
|
|
Datum **values, int *nvalues,
|
|
float4 **numbers, int *nnumbers);
|
|
extern void free_attstatsslot(Oid atttype,
|
|
Datum *values, int nvalues,
|
|
float4 *numbers, int nnumbers);
|
|
extern char *get_namespace_name(Oid nspid);
|
|
extern int32 get_usesysid(const char *username);
|
|
|
|
#define is_array_type(typid) (get_element_type(typid) != InvalidOid)
|
|
|
|
#define TypeIsToastable(typid) (get_typstorage(typid) != 'p')
|
|
|
|
#endif /* LSYSCACHE_H */
|