mirror of
https://github.com/postgres/postgres.git
synced 2025-08-21 10:42:50 +03:00
Improve index AMs' opclass validation procedures.
The amvalidate functions added in commit 65c5fcd353
were on the
crude side. Improve them in a few ways:
* Perform signature checking for operators and support functions.
* Apply more thorough checks for missing operators and functions,
where possible.
* Instead of reporting problems as ERRORs, report most problems as INFO
messages and make the amvalidate function return FALSE. This allows
more than one problem to be discovered per run.
* Report object names rather than OIDs, and work a bit harder on making
the messages understandable.
Also, remove a few more opr_sanity regression test queries that are
now superseded by the amvalidate checks.
This commit is contained in:
36
src/include/access/amvalidate.h
Normal file
36
src/include/access/amvalidate.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* amvalidate.h
|
||||
* Support routines for index access methods' amvalidate functions.
|
||||
*
|
||||
* Copyright (c) 2016, PostgreSQL Global Development Group
|
||||
*
|
||||
* src/include/access/amvalidate.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef AMVALIDATE_H
|
||||
#define AMVALIDATE_H
|
||||
|
||||
#include "utils/catcache.h"
|
||||
|
||||
|
||||
/* Struct returned (in a list) by identify_opfamily_groups() */
|
||||
typedef struct OpFamilyOpFuncGroup
|
||||
{
|
||||
Oid lefttype; /* amoplefttype/amproclefttype */
|
||||
Oid righttype; /* amoprighttype/amprocrighttype */
|
||||
uint64 operatorset; /* bitmask of operators with these types */
|
||||
uint64 functionset; /* bitmask of support funcs with these types */
|
||||
} OpFamilyOpFuncGroup;
|
||||
|
||||
|
||||
/* Functions in access/index/amvalidate.c */
|
||||
extern List *identify_opfamily_groups(CatCList *oprlist, CatCList *proclist);
|
||||
extern bool check_amproc_signature(Oid funcid, Oid restype, bool exact,
|
||||
int minargs, int maxargs,...);
|
||||
extern bool check_amop_signature(Oid opno, Oid restype,
|
||||
Oid lefttype, Oid righttype);
|
||||
extern bool opfamily_can_sort_type(Oid opfamilyoid, Oid datatypeoid);
|
||||
|
||||
#endif /* AMVALIDATE_H */
|
Reference in New Issue
Block a user