From 3695a555136a6d179cac8ae48d5f90171d5b30e9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 18 Dec 2011 15:49:00 -0500 Subject: Replace simple constant pg_am.amcanreturn with an AM support function. The need for this was debated when we put in the index-only-scan feature, but at the time we had no near-term expectation of having AMs that could support such scans for only some indexes; so we kept it simple. However, the SP-GiST AM forces the issue, so let's fix it. This patch only installs the new API; no behavior actually changes. --- src/backend/access/index/indexam.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/backend/access/index/indexam.c') diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 6d423a7d68..e5fb518389 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -26,6 +26,7 @@ * index_getbitmap - get all tuples from a scan * index_bulk_delete - bulk deletion of index tuples * index_vacuum_cleanup - post-deletion cleanup of an index + * index_can_return - does index support index-only scans? * index_getprocid - get a support procedure OID * index_getprocinfo - get a support procedure's lookup info * @@ -711,6 +712,27 @@ index_vacuum_cleanup(IndexVacuumInfo *info, return result; } +/* ---------------- + * index_can_return - does index support index-only scans? + * ---------------- + */ +bool +index_can_return(Relation indexRelation) +{ + FmgrInfo *procedure; + + RELATION_CHECKS; + + /* amcanreturn is optional; assume FALSE if not provided by AM */ + if (!RegProcedureIsValid(indexRelation->rd_am->amcanreturn)) + return false; + + GET_REL_PROCEDURE(amcanreturn); + + return DatumGetBool(FunctionCall1(procedure, + PointerGetDatum(indexRelation))); +} + /* ---------------- * index_getprocid * -- cgit v1.2.1