agora inbox for [email protected]
help / color / mirror / Atom feedFrom: Tomas Vondra <[email protected]>
Subject: [PATCH 05/10] Add opclass parameters to BRIN
Date: Mon, 10 Jun 2019 18:49:52 +0200
---
src/backend/access/brin/brin.c | 10 ++++++++++
src/backend/access/brin/brin_validate.c | 16 ++++++++++------
src/include/access/brin.h | 2 +-
src/include/access/brin_internal.h | 3 +++
src/include/catalog/pg_proc.dat | 12 ++++++------
5 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c
index ae7b729edd..63f2d7990c 100644
--- a/src/backend/access/brin/brin.c
+++ b/src/backend/access/brin/brin.c
@@ -102,6 +102,7 @@ brinhandler(PG_FUNCTION_ARGS)
amroutine->amcanparallel = false;
amroutine->amcaninclude = false;
amroutine->amkeytype = InvalidOid;
+ amroutine->amopclassoptions = brinopclassoptions;
amroutine->ambuild = brinbuild;
amroutine->ambuildempty = brinbuildempty;
@@ -518,6 +519,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
PointerGetDatum(bval),
PointerGetDatum(key));
addrange = DatumGetBool(add);
+
if (!addrange)
break;
}
@@ -845,6 +847,14 @@ brinoptions(Datum reloptions, bool validate)
return (bytea *) rdopts;
}
+bytea *
+brinopclassoptions(Relation index, AttrNumber attnum, Datum attoptions,
+ bool validate)
+{
+ return index_opclass_options_generic(index, attnum, BRIN_OPCLASSOPT_PROC,
+ attoptions, validate);
+}
+
/*
* SQL-callable function to scan through an index and summarize all ranges
* that are not currently summarized.
diff --git a/src/backend/access/brin/brin_validate.c b/src/backend/access/brin/brin_validate.c
index 012933833b..4222a1781f 100644
--- a/src/backend/access/brin/brin_validate.c
+++ b/src/backend/access/brin/brin_validate.c
@@ -93,18 +93,22 @@ brinvalidate(Oid opclassoid)
break;
case BRIN_PROCNUM_ADDVALUE:
ok = check_amproc_signature(procform->amproc, BOOLOID, true,
- 4, 4, INTERNALOID, INTERNALOID,
- INTERNALOID, INTERNALOID);
+ 4, 5, INTERNALOID, INTERNALOID,
+ INTERNALOID, INTERNALOID, INTERNALOID);
break;
case BRIN_PROCNUM_CONSISTENT:
ok = check_amproc_signature(procform->amproc, BOOLOID, true,
- 3, 3, INTERNALOID, INTERNALOID,
- INTERNALOID);
+ 3, 4, INTERNALOID, INTERNALOID,
+ INTERNALOID, INTERNALOID);
break;
case BRIN_PROCNUM_UNION:
ok = check_amproc_signature(procform->amproc, BOOLOID, true,
- 3, 3, INTERNALOID, INTERNALOID,
- INTERNALOID);
+ 3, 4, INTERNALOID, INTERNALOID,
+ INTERNALOID, INTERNALOID);
+ break;
+ case BRIN_OPCLASSOPT_PROC:
+ ok = check_amproc_signature(procform->amproc, INTERNALOID, false,
+ 2, 2, INTERNALOID, BOOLOID);
break;
default:
/* Complain if it's not a valid optional proc number */
diff --git a/src/include/access/brin.h b/src/include/access/brin.h
index 612721baf3..8271404332 100644
--- a/src/include/access/brin.h
+++ b/src/include/access/brin.h
@@ -37,6 +37,7 @@ typedef struct BrinStatsData
#define BRIN_DEFAULT_PAGES_PER_RANGE 128
+
#define BrinGetPagesPerRange(relation) \
((relation)->rd_options ? \
((BrinOptions *) (relation)->rd_options)->pagesPerRange : \
@@ -46,7 +47,6 @@ typedef struct BrinStatsData
((BrinOptions *) (relation)->rd_options)->autosummarize : \
false)
-
extern void brinGetStats(Relation index, BrinStatsData *stats);
#endif /* BRIN_H */
diff --git a/src/include/access/brin_internal.h b/src/include/access/brin_internal.h
index b1c9199946..0532094e28 100644
--- a/src/include/access/brin_internal.h
+++ b/src/include/access/brin_internal.h
@@ -68,6 +68,7 @@ typedef struct BrinDesc
#define BRIN_PROCNUM_ADDVALUE 2
#define BRIN_PROCNUM_CONSISTENT 3
#define BRIN_PROCNUM_UNION 4
+#define BRIN_OPCLASSOPT_PROC 5 /* optional */
#define BRIN_MANDATORY_NPROCS 4
/* procedure numbers up to 10 are reserved for BRIN future expansion */
#define BRIN_FIRST_OPTIONAL_PROCNUM 11
@@ -103,6 +104,8 @@ extern IndexBulkDeleteResult *brinbulkdelete(IndexVacuumInfo *info,
extern IndexBulkDeleteResult *brinvacuumcleanup(IndexVacuumInfo *info,
IndexBulkDeleteResult *stats);
extern bytea *brinoptions(Datum reloptions, bool validate);
+extern bytea *brinopclassoptions(Relation index, AttrNumber colno,
+ Datum attoptions, bool validate);
/* brin_validate.c */
extern bool brinvalidate(Oid opclassoid);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 82b51fc1bb..bc3d08caec 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7887,15 +7887,15 @@
proargtypes => 'internal', prosrc => 'brin_minmax_opcinfo' },
{ oid => '3384', descr => 'BRIN minmax support',
proname => 'brin_minmax_add_value', prorettype => 'bool',
- proargtypes => 'internal internal internal internal',
+ proargtypes => 'internal internal internal internal internal',
prosrc => 'brin_minmax_add_value' },
{ oid => '3385', descr => 'BRIN minmax support',
proname => 'brin_minmax_consistent', prorettype => 'bool',
- proargtypes => 'internal internal internal',
+ proargtypes => 'internal internal internal internal',
prosrc => 'brin_minmax_consistent' },
{ oid => '3386', descr => 'BRIN minmax support',
proname => 'brin_minmax_union', prorettype => 'bool',
- proargtypes => 'internal internal internal', prosrc => 'brin_minmax_union' },
+ proargtypes => 'internal internal internal internal', prosrc => 'brin_minmax_union' },
# BRIN inclusion
{ oid => '4105', descr => 'BRIN inclusion support',
@@ -7903,15 +7903,15 @@
proargtypes => 'internal', prosrc => 'brin_inclusion_opcinfo' },
{ oid => '4106', descr => 'BRIN inclusion support',
proname => 'brin_inclusion_add_value', prorettype => 'bool',
- proargtypes => 'internal internal internal internal',
+ proargtypes => 'internal internal internal internal internal',
prosrc => 'brin_inclusion_add_value' },
{ oid => '4107', descr => 'BRIN inclusion support',
proname => 'brin_inclusion_consistent', prorettype => 'bool',
- proargtypes => 'internal internal internal',
+ proargtypes => 'internal internal internal internal',
prosrc => 'brin_inclusion_consistent' },
{ oid => '4108', descr => 'BRIN inclusion support',
proname => 'brin_inclusion_union', prorettype => 'bool',
- proargtypes => 'internal internal internal',
+ proargtypes => 'internal internal internal internal',
prosrc => 'brin_inclusion_union' },
# userlock replacements
--
2.20.1
--54rc27wh4iahvygf
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="0006-Pass-all-keys-to-BRIN-consistent-function-a-20190611.patch"
view thread (14+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH 05/10] Add opclass parameters to BRIN
In-Reply-To: <no-message-id-1883042@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox