mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Combine index_info and find_secondary_indexes into a single routine that
returns a list of RelOptInfos, eliminating the need for static state in index_info. That static state was a direct cause of coredumps; if anything decided to elog(ERROR) partway through an index_info search of pg_index, the next query would try to close a scan pointer that was pointing at no-longer-valid memory. Another example of the reasons to avoid static state variables...
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: plancat.h,v 1.13 1999/07/25 23:07:23 tgl Exp $
|
||||
* $Id: plancat.h,v 1.14 1999/11/21 23:25:42 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -15,32 +15,11 @@
|
||||
|
||||
#include "nodes/parsenodes.h"
|
||||
|
||||
/*
|
||||
* transient data structure to hold return value of index_info. Note that
|
||||
* indexkeys, orderOprs and classlist is "null-terminated".
|
||||
*/
|
||||
typedef struct IdxInfoRetval
|
||||
{
|
||||
Oid relid; /* OID of the index relation (not the OID
|
||||
* of the relation being indexed) */
|
||||
Oid relam; /* OID of the pg_am of this index */
|
||||
int pages; /* number of pages in the index relation */
|
||||
int tuples; /* number of tuples in the index relation */
|
||||
int *indexkeys; /* keys over which we're indexing */
|
||||
Oid *orderOprs; /* operators used for ordering purposes */
|
||||
Oid *classlist; /* classes of AM operators */
|
||||
Oid indproc;
|
||||
Node *indpred;
|
||||
} IdxInfoRetval;
|
||||
|
||||
extern void relation_info(Query *root, Index relid,
|
||||
bool *hasindex, int *pages, int *tuples);
|
||||
|
||||
extern void relation_info(Query *root,
|
||||
Oid relid,
|
||||
bool *hashindex, int *pages,
|
||||
int *tuples);
|
||||
|
||||
extern bool index_info(Query *root,
|
||||
bool first, int relid, IdxInfoRetval *info);
|
||||
extern List *find_secondary_indexes(Query *root, Index relid);
|
||||
|
||||
extern Cost restriction_selectivity(Oid functionObjectId,
|
||||
Oid operatorObjectId,
|
||||
|
||||
Reference in New Issue
Block a user