|
PostgreSQL Source Code git master
|
#include "postgres.h"#include <sys/socket.h>#include "access/brin.h"#include "access/brin_internal.h"#include "access/brin_tuple.h"#include "access/genam.h"#include "access/htup_details.h"#include "access/reloptions.h"#include "access/stratnum.h"#include "catalog/pg_am.h"#include "catalog/pg_amop.h"#include "catalog/pg_type.h"#include "utils/array.h"#include "utils/builtins.h"#include "utils/date.h"#include "utils/datum.h"#include "utils/float.h"#include "utils/inet.h"#include "utils/lsyscache.h"#include "utils/memutils.h"#include "utils/pg_lsn.h"#include "utils/rel.h"#include "utils/syscache.h"#include "utils/timestamp.h"#include "utils/uuid.h"
Go to the source code of this file.
Data Structures | |
| struct | MinmaxMultiOpaque |
| struct | MinMaxMultiOptions |
| struct | Ranges |
| struct | SerializedRanges |
| struct | ExpandedRange |
| struct | DistanceValue |
| struct | compare_context |
Macros | |
| #define | MINMAX_MAX_PROCNUMS 1 /* maximum support procs we need */ |
| #define | PROCNUM_DISTANCE 11 /* required, distance between values */ |
| #define | PROCNUM_BASE 11 |
| #define | MINMAX_BUFFER_FACTOR 10 |
| #define | MINMAX_BUFFER_MIN 256 |
| #define | MINMAX_BUFFER_MAX 8192 |
| #define | MINMAX_BUFFER_LOAD_FACTOR 0.5 |
| #define | MINMAX_MULTI_DEFAULT_VALUES_PER_PAGE 32 |
| #define | MinMaxMultiGetValuesPerRange(opts) |
| #define | SAMESIGN(a, b) (((a) < 0) == ((b) < 0)) |
| #define MINMAX_BUFFER_FACTOR 10 |
Definition at line 106 of file brin_minmax_multi.c.
| #define MINMAX_BUFFER_LOAD_FACTOR 0.5 |
Definition at line 109 of file brin_minmax_multi.c.
| #define MINMAX_BUFFER_MAX 8192 |
Definition at line 108 of file brin_minmax_multi.c.
| #define MINMAX_BUFFER_MIN 256 |
Definition at line 107 of file brin_minmax_multi.c.
Definition at line 92 of file brin_minmax_multi.c.
| #define MINMAX_MULTI_DEFAULT_VALUES_PER_PAGE 32 |
Definition at line 127 of file brin_minmax_multi.c.
Definition at line 129 of file brin_minmax_multi.c.
| #define PROCNUM_BASE 11 |
Definition at line 99 of file brin_minmax_multi.c.
Definition at line 93 of file brin_minmax_multi.c.
Definition at line 134 of file brin_minmax_multi.c.
|
static |
Definition at line 426 of file brin_minmax_multi.c.
References Assert, BTEqualStrategyNumber, BTLessStrategyNumber, DatumGetBool(), fb(), FunctionCall2Coll(), i, ExpandedRange::maxval, minmax_multi_get_strategy_procinfo(), and ExpandedRange::minval.
Referenced by brin_minmax_multi_union(), and ensure_free_space_in_buffer().
Definition at line 296 of file brin_minmax_multi.c.
References Assert, bsearch_arg(), Ranges::cmp, compare_context::cmpFn, Ranges::colloid, compare_context::colloid, compare_values(), DatumGetBool(), fb(), FunctionCall2Coll(), i, InvalidOid, Ranges::maxvalues, Ranges::nranges, Ranges::nsorted, Ranges::nvalues, start, Ranges::typid, value, and Ranges::values.
Referenced by compactify_ranges(), ensure_free_space_in_buffer(), range_add_value(), and range_deduplicate_values().
| Datum brin_minmax_multi_add_value | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2412 of file brin_minmax_multi.c.
References Assert, Ranges::attno, brin_minmax_multi_get_values(), brin_minmax_multi_serialize(), brin_range_deserialize(), BrinGetPagesPerRange, BTLessStrategyNumber, Ranges::cmp, Ranges::colloid, DatumGetPointer(), fb(), Max, MaxHeapTuplesPerPage, MemoryContextSwitchTo(), Min, MINMAX_BUFFER_FACTOR, MINMAX_BUFFER_MAX, MINMAX_BUFFER_MIN, minmax_multi_get_strategy_procinfo(), minmax_multi_init(), newval, opts, PG_DETOAST_DATUM, PG_GET_COLLATION, PG_GET_OPCLASS_OPTIONS, PG_GETARG_BOOL, PG_GETARG_DATUM, PG_GETARG_POINTER, PG_RETURN_BOOL, PG_USED_FOR_ASSERTS_ONLY, PointerGetDatum(), range_add_value(), Ranges::target_maxvalues, TupleDescAttr(), and Ranges::typid.
| Datum brin_minmax_multi_consistent | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2549 of file brin_minmax_multi.c.
References Assert, brin_range_deserialize(), BTEqualStrategyNumber, BTGreaterEqualStrategyNumber, BTGreaterStrategyNumber, BTLessEqualStrategyNumber, BTLessStrategyNumber, DatumGetBool(), elog, ERROR, fb(), FunctionCall2Coll(), i, minmax_multi_get_strategy_procinfo(), Ranges::nranges, Ranges::nvalues, PG_DETOAST_DATUM, PG_GET_COLLATION, PG_GETARG_INT32, PG_GETARG_POINTER, PG_RETURN_BOOL, SK_ISNULL, val, value, and Ranges::values.
| Datum brin_minmax_multi_distance_date | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2080 of file brin_minmax_multi.c.
References Assert, fb(), PG_GETARG_DATEADT, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_float4 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1883 of file brin_minmax_multi.c.
References a1, a2, Assert, fb(), get_float8_infinity(), PG_GETARG_FLOAT4, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_float8 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1909 of file brin_minmax_multi.c.
References a1, a2, Assert, fb(), get_float8_infinity(), PG_GETARG_FLOAT8, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_inet | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2297 of file brin_minmax_multi.c.
References a, Assert, b, fb(), i, ip_addr, ip_addrsize, ip_bits, ip_family, len, Max, palloc(), pfree(), PG_GETARG_INET_PP, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_int2 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1935 of file brin_minmax_multi.c.
References a1, a2, Assert, PG_GETARG_INT16, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_int4 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1953 of file brin_minmax_multi.c.
References a1, a2, Assert, PG_GETARG_INT32, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_int8 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1971 of file brin_minmax_multi.c.
References a1, a2, Assert, PG_GETARG_INT64, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_interval | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2155 of file brin_minmax_multi.c.
References Assert, days, fb(), INT64CONST, PG_GETARG_INTERVAL_P, PG_RETURN_FLOAT8, and USECS_PER_DAY.
| Datum brin_minmax_multi_distance_macaddr | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2212 of file brin_minmax_multi.c.
References a, Assert, b, PG_GETARG_MACADDR_P, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_macaddr8 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2249 of file brin_minmax_multi.c.
References a, Assert, b, PG_GETARG_MACADDR8_P, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_numeric | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2021 of file brin_minmax_multi.c.
References a1, a2, Assert, DatumGetBool(), DirectFunctionCall1, DirectFunctionCall2, numeric_float8(), numeric_le(), numeric_sub(), PG_GETARG_DATUM, and PG_RETURN_DATUM.
| Datum brin_minmax_multi_distance_pg_lsn | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2191 of file brin_minmax_multi.c.
References Assert, fb(), PG_GETARG_LSN, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_tid | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1990 of file brin_minmax_multi.c.
References Assert, fb(), ItemPointerCompare(), ItemPointerGetBlockNumberNoCheck(), ItemPointerGetOffsetNumberNoCheck(), MaxHeapTuplesPerPage, PG_GETARG_POINTER, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_time | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2099 of file brin_minmax_multi.c.
References Assert, fb(), PG_GETARG_TIMEADT, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_timestamp | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2137 of file brin_minmax_multi.c.
References Assert, fb(), PG_GETARG_TIMESTAMP, and PG_RETURN_FLOAT8.
| Datum brin_minmax_multi_distance_timetz | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2119 of file brin_minmax_multi.c.
References Assert, fb(), PG_GETARG_TIMETZADT_P, PG_RETURN_FLOAT8, and USECS_PER_SEC.
| Datum brin_minmax_multi_distance_uuid | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2047 of file brin_minmax_multi.c.
References a1, a2, Assert, DatumGetBool(), DatumGetUUIDP(), DirectFunctionCall2, fb(), i, PG_GETARG_DATUM, PG_RETURN_FLOAT8, uuid_le(), and UUID_LEN.
|
static |
Definition at line 2399 of file brin_minmax_multi.c.
References MinMaxMultiGetValuesPerRange, and opts.
Referenced by brin_minmax_multi_add_value().
| Datum brin_minmax_multi_opcinfo | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1859 of file brin_minmax_multi.c.
References fb(), lookup_type_cache(), MAXALIGN, BrinOpcInfo::oi_nstored, BrinOpcInfo::oi_opaque, BrinOpcInfo::oi_regular_nulls, BrinOpcInfo::oi_typcache, palloc0(), PG_RETURN_POINTER, and SizeofBrinOpcInfo.
| Datum brin_minmax_multi_options | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2954 of file brin_minmax_multi.c.
References add_local_int_reloption(), fb(), init_local_reloptions(), MINMAX_MULTI_DEFAULT_VALUES_PER_PAGE, PG_GETARG_POINTER, and PG_RETURN_VOID.
Definition at line 2380 of file brin_minmax_multi.c.
References Assert, brin_range_serialize(), compactify_ranges(), DatumGetPointer(), fb(), Ranges::nsorted, Ranges::nvalues, PointerGetDatum(), and Ranges::target_maxvalues.
Referenced by brin_minmax_multi_add_value().
| Datum brin_minmax_multi_summary_in | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2976 of file brin_minmax_multi.c.
References ereport, errcode(), errmsg(), ERROR, fb(), and PG_RETURN_VOID.
| Datum brin_minmax_multi_summary_out | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2998 of file brin_minmax_multi.c.
References a, accumArrayResult(), appendStringInfo(), appendStringInfoChar(), b, brin_range_deserialize(), buf, cstring_to_text(), cstring_to_text_with_len(), CurrentMemoryContext, DatumGetCString(), fb(), fmgr_info(), FunctionCall1, getTypeOutputInfo(), i, idx(), initStringInfo(), makeArrayResult(), SerializedRanges::maxvalues, OidOutputFunctionCall(), OutputFunctionCall(), PG_DETOAST_DATUM, PG_GETARG_DATUM, PG_RETURN_CSTRING, PointerGetDatum(), str, SerializedRanges::typid, and val.
| Datum brin_minmax_multi_summary_recv | ( | PG_FUNCTION_ARGS | ) |
Definition at line 3117 of file brin_minmax_multi.c.
References ereport, errcode(), errmsg(), ERROR, fb(), and PG_RETURN_VOID.
| Datum brin_minmax_multi_summary_send | ( | PG_FUNCTION_ARGS | ) |
| Datum brin_minmax_multi_union | ( | PG_FUNCTION_ARGS | ) |
Definition at line 2735 of file brin_minmax_multi.c.
References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, Assert, AssertCheckExpandedRanges(), brin_range_deserialize(), brin_range_serialize(), BTLessStrategyNumber, build_distances(), CurrentMemoryContext, fb(), fill_expanded_ranges(), MemoryContextDelete(), MemoryContextSwitchTo(), merge_overlapping_ranges(), minmax_multi_get_procinfo(), minmax_multi_get_strategy_procinfo(), palloc0(), pfree(), PG_DETOAST_DATUM, PG_GET_COLLATION, PG_GETARG_POINTER, PG_RETURN_VOID, PointerGetDatum(), PROCNUM_DISTANCE, reduce_expanded_ranges(), sort_expanded_ranges(), store_expanded_ranges(), and TupleDescAttr().
|
static |
Definition at line 721 of file brin_minmax_multi.c.
References Assert, fb(), fetch_att(), get_typbyval(), get_typlen(), i, MAXALIGN, minmax_multi_init(), cvec::nranges, palloc(), PointerGetDatum(), range(), and VARSIZE_ANY().
Referenced by brin_minmax_multi_add_value(), brin_minmax_multi_consistent(), brin_minmax_multi_summary_out(), and brin_minmax_multi_union().
|
static |
Definition at line 576 of file brin_minmax_multi.c.
References Assert, data, DatumGetCString(), DatumGetPointer(), fb(), get_typbyval(), get_typlen(), i, len, cvec::nranges, palloc0(), range(), range_deduplicate_values(), SET_VARSIZE(), store_att_byval(), and VARSIZE_ANY().
Referenced by brin_minmax_multi_serialize(), and brin_minmax_multi_union().
|
static |
Definition at line 1329 of file brin_minmax_multi.c.
References a1, a2, Assert, compare_distances(), DatumGetFloat8(), fb(), FunctionCall2Coll(), i, DistanceValue::index, palloc0_array, qsort, and DistanceValue::value.
Referenced by brin_minmax_multi_union(), compactify_ranges(), and ensure_free_space_in_buffer().
|
static |
Definition at line 1386 of file brin_minmax_multi.c.
References cmp(), fb(), fill_expanded_ranges(), Ranges::nranges, Ranges::nvalues, palloc0(), and sort_expanded_ranges().
Referenced by compactify_ranges(), and ensure_free_space_in_buffer().
Definition at line 1788 of file brin_minmax_multi.c.
References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, Assert, AssertCheckRanges(), Ranges::attno, BTLessStrategyNumber, build_distances(), build_expanded_ranges(), Ranges::colloid, CurrentMemoryContext, fb(), MemoryContextDelete(), MemoryContextSwitchTo(), minmax_multi_get_procinfo(), minmax_multi_get_strategy_procinfo(), Ranges::nranges, Ranges::nsorted, Ranges::nvalues, PROCNUM_DISTANCE, reduce_expanded_ranges(), store_expanded_ranges(), and Ranges::typid.
Referenced by brin_minmax_multi_serialize().
Definition at line 1305 of file brin_minmax_multi.c.
References a, b, fb(), and DistanceValue::value.
Referenced by build_distances().
Definition at line 858 of file brin_minmax_multi.c.
References a, arg, b, compare_context::cmpFn, compare_context::colloid, DatumGetBool(), fb(), and FunctionCall2Coll().
Referenced by sort_expanded_ranges().
Definition at line 896 of file brin_minmax_multi.c.
References a, arg, b, compare_context::cmpFn, compare_context::colloid, DatumGetBool(), fb(), and FunctionCall2Coll().
Referenced by AssertCheckRanges(), range_contains_value(), range_deduplicate_values(), and reduce_expanded_ranges().
|
static |
Definition at line 1601 of file brin_minmax_multi.c.
References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, Assert, AssertCheckExpandedRanges(), AssertCheckRanges(), BTLessStrategyNumber, build_distances(), build_expanded_ranges(), CurrentMemoryContext, fb(), MemoryContextDelete(), MemoryContextSwitchTo(), MINMAX_BUFFER_LOAD_FACTOR, minmax_multi_get_procinfo(), minmax_multi_get_strategy_procinfo(), cvec::nranges, PROCNUM_DISTANCE, range(), range_deduplicate_values(), reduce_expanded_ranges(), and store_expanded_ranges().
Referenced by range_add_value().
|
static |
Definition at line 1134 of file brin_minmax_multi.c.
References Assert, fb(), i, idx(), Ranges::nranges, Ranges::nvalues, and Ranges::values.
Referenced by brin_minmax_multi_union(), and build_expanded_ranges().
|
static |
Definition at line 921 of file brin_minmax_multi.c.
References BTGreaterStrategyNumber, BTLessStrategyNumber, DatumGetBool(), fb(), FunctionCall2Coll(), minmax_multi_get_strategy_procinfo(), newval, Ranges::nranges, start, and Ranges::values.
Referenced by range_contains_value().
|
static |
Definition at line 1231 of file brin_minmax_multi.c.
References cmp(), DatumGetBool(), fb(), FunctionCall2Coll(), and idx().
Referenced by brin_minmax_multi_union().
|
static |
Definition at line 2863 of file brin_minmax_multi.c.
References ereport, errcode(), errdetail_internal(), errmsg_internal(), ERROR, MinmaxMultiOpaque::extra_procinfos, fb(), fmgr_info_copy(), FmgrInfo::fn_oid, index_getprocid(), index_getprocinfo(), InvalidOid, PROCNUM_BASE, and RegProcedureIsValid.
Referenced by brin_minmax_multi_union(), compactify_ranges(), and ensure_free_space_in_buffer().
|
static |
Definition at line 2899 of file brin_minmax_multi.c.
References Assert, BTMaxStrategyNumber, MinmaxMultiOpaque::cached_subtype, DatumGetObjectId(), elog, ERROR, fb(), fmgr_info_cxt(), FmgrInfo::fn_oid, get_opcode(), HeapTupleIsValid, i, InvalidOid, ObjectIdGetDatum(), oprid(), RegProcedureIsValid, ReleaseSysCache(), SearchSysCache4(), MinmaxMultiOpaque::strategy_procinfos, SysCacheGetAttrNotNull(), TupleDescAttr(), and UInt16GetDatum().
Referenced by AssertCheckExpandedRanges(), brin_minmax_multi_add_value(), brin_minmax_multi_consistent(), brin_minmax_multi_union(), compactify_ranges(), ensure_free_space_in_buffer(), has_matching_range(), range_add_value(), and range_contains_value().
Definition at line 486 of file brin_minmax_multi.c.
References Assert, fb(), len, Ranges::maxvalues, palloc0(), and values.
Referenced by brin_minmax_multi_add_value(), and brin_range_deserialize().
|
static |
Definition at line 1702 of file brin_minmax_multi.c.
References Assert, AssertCheckRanges(), BTLessStrategyNumber, datumCopy(), ensure_free_space_in_buffer(), fb(), minmax_multi_get_strategy_procinfo(), newval, Ranges::nranges, Ranges::nsorted, Ranges::nvalues, range_contains_value(), and Ranges::values.
Referenced by brin_minmax_multi_add_value().
|
static |
Definition at line 1045 of file brin_minmax_multi.c.
References bsearch_arg(), BTEqualStrategyNumber, Ranges::cmp, compare_context::cmpFn, Ranges::colloid, compare_context::colloid, compare_values(), DatumGetBool(), fb(), FunctionCall2Coll(), has_matching_range(), i, minmax_multi_get_strategy_procinfo(), newval, Ranges::nranges, Ranges::nsorted, Ranges::nvalues, and Ranges::values.
Referenced by range_add_value().
Definition at line 516 of file brin_minmax_multi.c.
References AssertCheckRanges(), compare_context::cmpFn, compare_context::colloid, compare_values(), i, cvec::nranges, qsort_arg(), range(), and start.
Referenced by brin_range_serialize(), and ensure_free_space_in_buffer().
|
static |
Definition at line 1476 of file brin_minmax_multi.c.
References Assert, cmp(), compare_context::cmpFn, compare_context::colloid, compare_values(), fb(), i, DistanceValue::index, palloc_array, qsort_arg(), and values.
Referenced by brin_minmax_multi_union(), compactify_ranges(), and ensure_free_space_in_buffer().
|
static |
Definition at line 1179 of file brin_minmax_multi.c.
References Assert, cmp(), compare_context::cmpFn, compare_context::colloid, compare_expanded_ranges(), fb(), i, and qsort_arg().
Referenced by brin_minmax_multi_union(), and build_expanded_ranges().
|
static |
Definition at line 1558 of file brin_minmax_multi.c.
References Assert, fb(), i, idx(), Ranges::maxvalues, Ranges::nranges, Ranges::nsorted, Ranges::nvalues, and Ranges::values.
Referenced by brin_minmax_multi_union(), compactify_ranges(), and ensure_free_space_in_buffer().