PostgreSQL Source Code
git master
|
#include "postgres.h"
#include <limits.h>
#include "access/hash.h"
#include "access/htup_details.h"
#include "access/nbtree.h"
#include "catalog/index.h"
#include "catalog/pg_am.h"
#include "commands/tablespace.h"
#include "executor/executor.h"
#include "miscadmin.h"
#include "pg_trace.h"
#include "utils/datum.h"
#include "utils/logtape.h"
#include "utils/lsyscache.h"
#include "utils/memutils.h"
#include "utils/pg_rusage.h"
#include "utils/rel.h"
#include "utils/sortsupport.h"
#include "utils/tuplesort.h"
#include "lib/sort_template.h"
Go to the source code of this file.
Data Structures | |
struct | SortTuple |
union | SlabSlot |
struct | Tuplesortstate |
struct | Sharedsort |
Macros | |
#define | HEAP_SORT 0 |
#define | INDEX_SORT 1 |
#define | DATUM_SORT 2 |
#define | CLUSTER_SORT 3 |
#define | PARALLEL_SORT(state) |
#define | INITIAL_MEMTUPSIZE |
#define | SLAB_SLOT_SIZE 1024 |
#define | MINORDER 6 /* minimum merge order */ |
#define | MAXORDER 500 /* maximum merge order */ |
#define | TAPE_BUFFER_OVERHEAD BLCKSZ |
#define | MERGE_BUFFER_SIZE (BLCKSZ * 32) |
#define | IS_SLAB_SLOT(state, tuple) |
#define | RELEASE_SLAB_SLOT(state, tuple) |
#define | COMPARETUP(state, a, b) ((*(state)->comparetup) (a, b, state)) |
#define | COPYTUP(state, stup, tup) ((*(state)->copytup) (state, stup, tup)) |
#define | WRITETUP(state, tape, stup) ((*(state)->writetup) (state, tape, stup)) |
#define | READTUP(state, stup, tape, len) ((*(state)->readtup) (state, stup, tape, len)) |
#define | LACKMEM(state) ((state)->availMem < 0 && !(state)->slabAllocatorUsed) |
#define | USEMEM(state, amt) ((state)->availMem -= (amt)) |
#define | FREEMEM(state, amt) ((state)->availMem += (amt)) |
#define | SERIAL(state) ((state)->shared == NULL) |
#define | WORKER(state) ((state)->shared && (state)->worker != -1) |
#define | LEADER(state) ((state)->shared && (state)->worker == -1) |
#define | LogicalTapeReadExact(tapeset, tapenum, ptr, len) |
#define | ST_SORT qsort_tuple |
#define | ST_ELEMENT_TYPE SortTuple |
#define | ST_COMPARE_RUNTIME_POINTER |
#define | ST_COMPARE_ARG_TYPE Tuplesortstate |
#define | ST_CHECK_FOR_INTERRUPTS |
#define | ST_SCOPE static |
#define | ST_DECLARE |
#define | ST_DEFINE |
#define | ST_SORT qsort_ssup |
#define | ST_ELEMENT_TYPE SortTuple |
#define | ST_COMPARE(a, b, ssup) |
#define | ST_COMPARE_ARG_TYPE SortSupportData |
#define | ST_CHECK_FOR_INTERRUPTS |
#define | ST_SCOPE static |
#define | ST_DEFINE |
Typedefs | |
typedef union SlabSlot | SlabSlot |
typedef int(* | SortTupleComparator) (const SortTuple *a, const SortTuple *b, Tuplesortstate *state) |
Enumerations | |
enum | TupSortStatus { TSS_INITIAL, TSS_BOUNDED, TSS_BUILDRUNS, TSS_SORTEDINMEM, TSS_SORTEDONTAPE, TSS_FINALMERGE } |
Variables | |
bool | trace_sort = false |
#define CLUSTER_SORT 3 |
Definition at line 122 of file tuplesort.c.
Referenced by tuplesort_begin_cluster().
Definition at line 541 of file tuplesort.c.
Referenced by make_bounded_heap(), puttuple_common(), tuplesort_heap_insert(), and tuplesort_heap_replace_top().
Definition at line 542 of file tuplesort.c.
Referenced by tuplesort_putheaptuple(), and tuplesort_puttupleslot().
#define DATUM_SORT 2 |
Definition at line 121 of file tuplesort.c.
Referenced by tuplesort_begin_datum().
Definition at line 547 of file tuplesort.c.
Referenced by free_sort_tuple(), grow_memtuples(), mergeruns(), writetup_cluster(), writetup_datum(), writetup_heap(), and writetup_index().
#define HEAP_SORT 0 |
Definition at line 119 of file tuplesort.c.
Referenced by tuplesort_begin_heap().
#define INDEX_SORT 1 |
Definition at line 120 of file tuplesort.c.
Referenced by tuplesort_begin_index_btree().
#define INITIAL_MEMTUPSIZE |
Definition at line 135 of file tuplesort.c.
Referenced by tuplesort_begin_batch(), and tuplesort_begin_common().
#define IS_SLAB_SLOT | ( | state, | |
tuple | |||
) |
Definition at line 521 of file tuplesort.c.
Definition at line 545 of file tuplesort.c.
Referenced by dumptuples(), grow_memtuples(), puttuple_common(), and tuplesort_begin_batch().
Definition at line 550 of file tuplesort.c.
Referenced by inittapes(), leader_takeover_tapes(), puttuple_common(), tuplesort_set_bound(), and tuplesort_sort_memtuples().
#define LogicalTapeReadExact | ( | tapeset, | |
tapenum, | |||
ptr, | |||
len | |||
) |
Definition at line 602 of file tuplesort.c.
Referenced by readtup_cluster(), readtup_datum(), readtup_heap(), and readtup_index().
#define MAXORDER 500 /* maximum merge order */ |
Definition at line 230 of file tuplesort.c.
Referenced by tuplesort_merge_order().
#define MERGE_BUFFER_SIZE (BLCKSZ * 32) |
Definition at line 232 of file tuplesort.c.
Referenced by tuplesort_merge_order().
#define MINORDER 6 /* minimum merge order */ |
Definition at line 229 of file tuplesort.c.
Referenced by inittapes(), and tuplesort_merge_order().
#define PARALLEL_SORT | ( | state | ) |
Definition at line 125 of file tuplesort.c.
Referenced by tuplesort_begin_cluster(), tuplesort_begin_datum(), tuplesort_begin_heap(), and tuplesort_begin_index_btree().
Definition at line 544 of file tuplesort.c.
Referenced by mergereadnext(), and tuplesort_gettuple_common().
#define RELEASE_SLAB_SLOT | ( | state, | |
tuple | |||
) |
Definition at line 529 of file tuplesort.c.
Referenced by mergeonerun(), and tuplesort_gettuple_common().
Definition at line 548 of file tuplesort.c.
Referenced by make_bounded_heap(), sort_bounded_heap(), tuplesort_free(), and tuplesort_performsort().
#define SLAB_SLOT_SIZE 1024 |
Definition at line 196 of file tuplesort.c.
Referenced by init_slab_allocator(), and readtup_alloc().
#define ST_CHECK_FOR_INTERRUPTS |
Definition at line 696 of file tuplesort.c.
#define ST_CHECK_FOR_INTERRUPTS |
Definition at line 696 of file tuplesort.c.
#define ST_COMPARE | ( | a, | |
b, | |||
ssup | |||
) |
Definition at line 692 of file tuplesort.c.
#define ST_COMPARE_ARG_TYPE Tuplesortstate |
Definition at line 695 of file tuplesort.c.
#define ST_COMPARE_ARG_TYPE SortSupportData |
Definition at line 695 of file tuplesort.c.
#define ST_COMPARE_RUNTIME_POINTER |
Definition at line 682 of file tuplesort.c.
#define ST_DECLARE |
Definition at line 686 of file tuplesort.c.
#define ST_DEFINE |
Definition at line 698 of file tuplesort.c.
#define ST_DEFINE |
Definition at line 698 of file tuplesort.c.
#define ST_ELEMENT_TYPE SortTuple |
Definition at line 691 of file tuplesort.c.
#define ST_ELEMENT_TYPE SortTuple |
Definition at line 691 of file tuplesort.c.
#define ST_SCOPE static |
Definition at line 697 of file tuplesort.c.
#define ST_SCOPE static |
Definition at line 697 of file tuplesort.c.
#define ST_SORT qsort_tuple |
Definition at line 690 of file tuplesort.c.
#define ST_SORT qsort_ssup |
Definition at line 690 of file tuplesort.c.
#define TAPE_BUFFER_OVERHEAD BLCKSZ |
Definition at line 231 of file tuplesort.c.
Referenced by inittapestate(), mergeruns(), and tuplesort_merge_order().
Definition at line 546 of file tuplesort.c.
Referenced by copytup_cluster(), copytup_heap(), grow_memtuples(), init_slab_allocator(), inittapestate(), mergeruns(), tuplesort_begin_batch(), tuplesort_putdatum(), and tuplesort_putindextuplevalues().
Definition at line 549 of file tuplesort.c.
Referenced by inittapes(), mergeruns(), tuplesort_gettuple_common(), tuplesort_performsort(), tuplesort_set_bound(), tuplesort_skiptuples(), worker_freeze_result_tape(), worker_get_identifier(), and worker_nomergeruns().
Definition at line 543 of file tuplesort.c.
Referenced by dumptuples(), and mergeonerun().
typedef int(* SortTupleComparator) (const SortTuple *a, const SortTuple *b, Tuplesortstate *state) |
Definition at line 234 of file tuplesort.c.
enum TupSortStatus |
Enumerator | |
---|---|
TSS_INITIAL | |
TSS_BOUNDED | |
TSS_BUILDRUNS | |
TSS_SORTEDINMEM | |
TSS_SORTEDONTAPE | |
TSS_FINALMERGE |
Definition at line 208 of file tuplesort.c.
|
static |
Definition at line 3101 of file tuplesort.c.
References Tuplesortstate::activeTapes, Assert, Tuplesortstate::maxTapes, Tuplesortstate::memtupcount, Tuplesortstate::mergeactive, mergereadnext(), SortTuple::srctape, Tuplesortstate::tapeRange, Tuplesortstate::tp_dummy, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, and tuplesort_heap_insert().
Referenced by mergeonerun(), and mergeruns().
|
static |
Definition at line 3954 of file tuplesort.c.
References SortSupportData::abbrev_converter, ApplySortAbbrevFullComparator(), ApplySortComparator(), compare(), SortTuple::datum1, Tuplesortstate::estate, ExecStoreHeapTuple(), FormIndexDatum(), GetPerTupleExprContext, heap_getattr, IndexInfo::ii_Expressions, IndexInfo::ii_IndexAttrNumbers, INDEX_MAX_KEYS, Tuplesortstate::indexInfo, SortTuple::isnull1, Tuplesortstate::nKeys, ResetPerTupleExprContext, Tuplesortstate::sortKeys, Tuplesortstate::tupDesc, and SortTuple::tuple.
Referenced by tuplesort_begin_cluster().
|
static |
Definition at line 4441 of file tuplesort.c.
References SortSupportData::abbrev_converter, ApplySortAbbrevFullComparator(), ApplySortComparator(), compare(), SortTuple::datum1, SortTuple::isnull1, PointerGetDatum, Tuplesortstate::sortKeys, and SortTuple::tuple.
Referenced by tuplesort_begin_datum().
|
static |
Definition at line 3755 of file tuplesort.c.
References SortSupportData::abbrev_converter, ApplySortAbbrevFullComparator(), ApplySortComparator(), compare(), SortTuple::datum1, heap_getattr, SortTuple::isnull1, MINIMAL_TUPLE_OFFSET, Tuplesortstate::nKeys, Tuplesortstate::sortKeys, SortSupportData::ssup_attno, HeapTupleData::t_data, HeapTupleData::t_len, Tuplesortstate::tupDesc, and SortTuple::tuple.
Referenced by tuplesort_begin_heap().
|
static |
Definition at line 4200 of file tuplesort.c.
References SortSupportData::abbrev_converter, ApplySortAbbrevFullComparator(), ApplySortComparator(), Assert, BuildIndexValueDescription(), compare(), SortTuple::datum1, Tuplesortstate::enforceUnique, ereport, errcode(), errdetail(), errmsg(), ERROR, errtableconstraint(), Tuplesortstate::heapRel, index_deform_tuple(), index_getattr, INDEX_MAX_KEYS, Tuplesortstate::indexRel, SortTuple::isnull1, ItemPointerGetBlockNumber, ItemPointerGetOffsetNumber, Tuplesortstate::nKeys, RelationGetDescr, RelationGetRelationName, Tuplesortstate::sortKeys, IndexTupleData::t_tid, SortTuple::tuple, and values.
Referenced by tuplesort_begin_index_btree(), and tuplesort_begin_index_gist().
|
static |
Definition at line 4333 of file tuplesort.c.
References _hash_hashkey2bucket(), Assert, SortTuple::datum1, DatumGetUInt32, Tuplesortstate::high_mask, SortTuple::isnull1, ItemPointerGetBlockNumber, ItemPointerGetOffsetNumber, Tuplesortstate::low_mask, Tuplesortstate::max_buckets, IndexTupleData::t_tid, and SortTuple::tuple.
Referenced by tuplesort_begin_index_hash().
|
static |
Definition at line 1996 of file tuplesort.c.
References SortSupportData::abbrev_abort, SortSupportData::abbrev_converter, SortSupportData::abbrev_full_comparator, Tuplesortstate::abbrevNext, Assert, SortSupportData::comparator, Tuplesortstate::memtupcount, Tuplesortstate::sortKeys, Tuplesortstate::status, and TSS_INITIAL.
Referenced by copytup_cluster(), copytup_heap(), tuplesort_putdatum(), and tuplesort_putindextuplevalues().
|
static |
Definition at line 4065 of file tuplesort.c.
References SortSupportData::abbrev_converter, consider_abort_common(), SortTuple::datum1, GetMemoryChunkSpace(), heap_copytuple(), heap_getattr, i, IndexInfo::ii_IndexAttrNumbers, Tuplesortstate::indexInfo, SortTuple::isnull1, MemoryContextSwitchTo(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, Tuplesortstate::sortKeys, Tuplesortstate::tupDesc, SortTuple::tuple, Tuplesortstate::tuplecontext, and USEMEM.
Referenced by tuplesort_begin_cluster().
|
static |
Definition at line 4462 of file tuplesort.c.
Referenced by tuplesort_begin_datum().
|
static |
Definition at line 3817 of file tuplesort.c.
References SortSupportData::abbrev_converter, consider_abort_common(), SortTuple::datum1, ExecCopySlotMinimalTuple(), GetMemoryChunkSpace(), heap_getattr, i, SortTuple::isnull1, MemoryContextSwitchTo(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, MINIMAL_TUPLE_OFFSET, Tuplesortstate::sortKeys, SortSupportData::ssup_attno, HeapTupleData::t_data, HeapTupleData::t_len, MinimalTupleData::t_len, Tuplesortstate::tupDesc, SortTuple::tuple, Tuplesortstate::tuplecontext, and USEMEM.
Referenced by tuplesort_begin_heap().
|
static |
Definition at line 4388 of file tuplesort.c.
Referenced by tuplesort_begin_index_btree(), tuplesort_begin_index_gist(), and tuplesort_begin_index_hash().
|
static |
Definition at line 3174 of file tuplesort.c.
References Assert, Tuplesortstate::currentRun, Tuplesortstate::destTape, elog, ereport, errcode(), errmsg(), ERROR, i, LACKMEM, LOG, markrunend(), MemoryContextReset(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, Tuplesortstate::memtupsize, pg_rusage_show(), Tuplesortstate::ru_start, selectnewtape(), Tuplesortstate::status, Tuplesortstate::tp_dummy, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, trace_sort, TSS_BUILDRUNS, Tuplesortstate::tuplecontext, tuplesort_sort_memtuples(), Tuplesortstate::worker, and WRITETUP.
Referenced by puttuple_common(), and tuplesort_performsort().
|
static |
Definition at line 4774 of file tuplesort.c.
References FREEMEM, GetMemoryChunkSpace(), pfree(), and SortTuple::tuple.
Referenced by make_bounded_heap(), and puttuple_common().
|
static |
Definition at line 3700 of file tuplesort.c.
References elog, ERROR, LogicalTapeRead(), and Tuplesortstate::tapeset.
Referenced by mergereadnext(), and tuplesort_gettuple_common().
|
static |
Definition at line 1565 of file tuplesort.c.
References Tuplesortstate::allowedMem, Tuplesortstate::availMem, elog, ERROR, FREEMEM, GetMemoryChunkSpace(), Tuplesortstate::growmemtuples, LACKMEM, MaxAllocHugeSize, Tuplesortstate::memtuples, Tuplesortstate::memtupsize, repalloc_huge(), and USEMEM.
Referenced by puttuple_common().
|
static |
Definition at line 2775 of file tuplesort.c.
References i, palloc(), SLAB_SLOT_SIZE, Tuplesortstate::slabAllocatorUsed, Tuplesortstate::slabFreeHead, Tuplesortstate::slabMemoryBegin, Tuplesortstate::slabMemoryEnd, and USEMEM.
Referenced by mergeruns().
|
static |
Definition at line 2642 of file tuplesort.c.
References Tuplesortstate::allowedMem, Assert, Tuplesortstate::currentRun, Tuplesortstate::destTape, elog, Sharedsort::fileset, inittapestate(), LEADER, Tuplesortstate::Level, LOG, LogicalTapeSetCreate(), MINORDER, pg_rusage_show(), Tuplesortstate::ru_start, Tuplesortstate::shared, Tuplesortstate::status, Tuplesortstate::tapeRange, Tuplesortstate::tapeset, Tuplesortstate::tp_dummy, Tuplesortstate::tp_fib, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, trace_sort, TSS_BUILDRUNS, tuplesort_merge_order(), Tuplesortstate::worker, and WORKER.
Referenced by puttuple_common(), and tuplesort_performsort().
|
static |
Definition at line 2699 of file tuplesort.c.
References Tuplesortstate::allowedMem, GetMemoryChunkSpace(), Tuplesortstate::maxTapes, Tuplesortstate::memtuples, Tuplesortstate::mergeactive, palloc0(), PrepareTempTablespaces(), TAPE_BUFFER_OVERHEAD, Tuplesortstate::tapeRange, Tuplesortstate::tp_dummy, Tuplesortstate::tp_fib, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, and USEMEM.
Referenced by inittapes(), and leader_takeover_tapes().
|
static |
Definition at line 4708 of file tuplesort.c.
References Assert, Tuplesortstate::currentRun, Tuplesortstate::destTape, elog, ERROR, Sharedsort::fileset, inittapestate(), LEADER, Tuplesortstate::Level, LogicalTapeSetCreate(), Tuplesortstate::maxTapes, Sharedsort::mutex, Tuplesortstate::nParticipants, Tuplesortstate::shared, SpinLockAcquire, SpinLockRelease, Tuplesortstate::status, Tuplesortstate::tapeRange, Sharedsort::tapes, Tuplesortstate::tapeset, Tuplesortstate::tp_dummy, Tuplesortstate::tp_fib, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, TSS_BUILDRUNS, Tuplesortstate::worker, and Sharedsort::workersFinished.
Referenced by tuplesort_performsort().
|
static |
Definition at line 3466 of file tuplesort.c.
References Assert, Tuplesortstate::bound, Tuplesortstate::bounded, CHECK_FOR_INTERRUPTS, COMPARETUP, free_sort_tuple(), i, Tuplesortstate::memtupcount, Tuplesortstate::memtuples, reversedirection(), SERIAL, Tuplesortstate::status, TSS_BOUNDED, TSS_INITIAL, tuplesort_heap_insert(), and tuplesort_heap_replace_top().
Referenced by puttuple_common().
|
static |
Definition at line 3713 of file tuplesort.c.
References LogicalTapeWrite(), and Tuplesortstate::tapeset.
Referenced by dumptuples(), and mergeonerun().
|
static |
Definition at line 3038 of file tuplesort.c.
References Tuplesortstate::activeTapes, beginmerge(), elog, LOG, markrunend(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, mergereadnext(), pg_rusage_show(), RELEASE_SLAB_SLOT, Tuplesortstate::ru_start, SortTuple::srctape, Tuplesortstate::tapeRange, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, trace_sort, SortTuple::tuple, tuplesort_heap_delete_top(), tuplesort_heap_replace_top(), Tuplesortstate::worker, and WRITETUP.
Referenced by mergeruns().
|
static |
Definition at line 3149 of file tuplesort.c.
References getlen(), Tuplesortstate::mergeactive, and READTUP.
Referenced by beginmerge(), mergeonerun(), and tuplesort_gettuple_common().
|
static |
Definition at line 2811 of file tuplesort.c.
References SortSupportData::abbrev_abort, SortSupportData::abbrev_converter, SortSupportData::abbrev_full_comparator, Assert, Tuplesortstate::availMem, beginmerge(), SortSupportData::comparator, Tuplesortstate::currentRun, elog, FREEMEM, GetMemoryChunkSpace(), init_slab_allocator(), INT64_FORMAT, Tuplesortstate::Level, LOG, LogicalTapeFreeze(), LogicalTapeRewindForRead(), LogicalTapeRewindForWrite(), LogicalTapeSetForgetFreeSpace(), Tuplesortstate::maincontext, Max, Tuplesortstate::maxTapes, MemoryContextAlloc(), MemoryContextResetOnly(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, Tuplesortstate::memtupsize, mergeonerun(), pfree(), Tuplesortstate::randomAccess, Tuplesortstate::read_buffer_size, Tuplesortstate::result_tape, Tuplesortstate::sortKeys, Tuplesortstate::status, TAPE_BUFFER_OVERHEAD, Tuplesortstate::tapeRange, Tuplesortstate::tapeset, Tuplesortstate::tp_dummy, Tuplesortstate::tp_runs, Tuplesortstate::tp_tapenum, trace_sort, TSS_BUILDRUNS, TSS_FINALMERGE, TSS_SORTEDONTAPE, Tuplesortstate::tuplecontext, Tuplesortstate::tuples, USEMEM, Tuplesortstate::worker, WORKER, and worker_freeze_result_tape().
Referenced by tuplesort_performsort().
|
static |
Definition at line 1887 of file tuplesort.c.
References Assert, Tuplesortstate::bound, Tuplesortstate::bounded, CHECK_FOR_INTERRUPTS, COMPARETUP, dumptuples(), elog, ERROR, free_sort_tuple(), grow_memtuples(), inittapes(), LACKMEM, LEADER, LOG, make_bounded_heap(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, Tuplesortstate::memtupsize, pg_rusage_show(), Tuplesortstate::ru_start, Tuplesortstate::status, trace_sort, TSS_BOUNDED, TSS_BUILDRUNS, TSS_INITIAL, and tuplesort_heap_replace_top().
Referenced by tuplesort_putdatum(), tuplesort_putheaptuple(), tuplesort_putindextuplevalues(), and tuplesort_puttupleslot().
|
static |
Definition at line 3727 of file tuplesort.c.
References Assert, buf, MemoryContextAlloc(), SlabSlot::nextfree, SLAB_SLOT_SIZE, Tuplesortstate::slabFreeHead, and Tuplesortstate::sortcontext.
Referenced by readtup_cluster(), readtup_datum(), readtup_heap(), and readtup_index().
|
static |
Definition at line 4162 of file tuplesort.c.
References SortTuple::datum1, heap_getattr, HEAPTUPLESIZE, IndexInfo::ii_IndexAttrNumbers, Tuplesortstate::indexInfo, InvalidOid, SortTuple::isnull1, LogicalTapeReadExact, Tuplesortstate::randomAccess, readtup_alloc(), HeapTupleData::t_data, HeapTupleData::t_len, HeapTupleData::t_self, HeapTupleData::t_tableOid, Tuplesortstate::tapeset, Tuplesortstate::tupDesc, and SortTuple::tuple.
Referenced by tuplesort_begin_cluster().
|
static |
Definition at line 4510 of file tuplesort.c.
References Assert, SortTuple::datum1, SortTuple::isnull1, LogicalTapeReadExact, PointerGetDatum, Tuplesortstate::randomAccess, readtup_alloc(), Tuplesortstate::tapeset, SortTuple::tuple, and Tuplesortstate::tuples.
Referenced by tuplesort_begin_datum().
|
static |
Definition at line 3922 of file tuplesort.c.
References SortTuple::datum1, heap_getattr, SortTuple::isnull1, LogicalTapeReadExact, MINIMAL_TUPLE_DATA_OFFSET, MINIMAL_TUPLE_OFFSET, Tuplesortstate::randomAccess, readtup_alloc(), Tuplesortstate::sortKeys, SortSupportData::ssup_attno, HeapTupleData::t_data, HeapTupleData::t_len, MinimalTupleData::t_len, Tuplesortstate::tapeset, Tuplesortstate::tupDesc, and SortTuple::tuple.
Referenced by tuplesort_begin_heap().
|
static |
Definition at line 4417 of file tuplesort.c.
References SortTuple::datum1, index_getattr, Tuplesortstate::indexRel, SortTuple::isnull1, LogicalTapeReadExact, Tuplesortstate::randomAccess, readtup_alloc(), RelationGetDescr, Tuplesortstate::tapeset, and SortTuple::tuple.
Referenced by tuplesort_begin_index_btree(), tuplesort_begin_index_gist(), and tuplesort_begin_index_hash().
|
static |
Definition at line 3682 of file tuplesort.c.
References Tuplesortstate::nKeys, Tuplesortstate::sortKeys, SortSupportData::ssup_nulls_first, and SortSupportData::ssup_reverse.
Referenced by make_bounded_heap(), and sort_bounded_heap().
|
static |
Definition at line 2743 of file tuplesort.c.
References Tuplesortstate::destTape, Tuplesortstate::Level, Tuplesortstate::tapeRange, Tuplesortstate::tp_dummy, and Tuplesortstate::tp_fib.
Referenced by dumptuples().
|
static |
Definition at line 3515 of file tuplesort.c.
References Assert, Tuplesortstate::bound, Tuplesortstate::bounded, Tuplesortstate::boundUsed, Tuplesortstate::memtupcount, Tuplesortstate::memtuples, reversedirection(), SERIAL, Tuplesortstate::status, TSS_BOUNDED, TSS_SORTEDINMEM, and tuplesort_heap_delete_top().
Referenced by tuplesort_performsort().
void tuplesort_attach_shared | ( | Sharedsort * | shared, |
dsm_segment * | seg | ||
) |
Definition at line 4601 of file tuplesort.c.
References Sharedsort::fileset, and SharedFileSetAttach().
Referenced by _bt_parallel_build_main().
|
static |
Definition at line 833 of file tuplesort.c.
References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, Tuplesortstate::allowedMem, Tuplesortstate::availMem, Tuplesortstate::bounded, Tuplesortstate::boundUsed, Tuplesortstate::currentRun, elog, ERROR, GetMemoryChunkSpace(), Tuplesortstate::growmemtuples, INITIAL_MEMTUPSIZE, LACKMEM, Tuplesortstate::maincontext, MemoryContextSwitchTo(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, Tuplesortstate::memtupsize, palloc(), pfree(), Tuplesortstate::result_tape, Tuplesortstate::slabAllocatorUsed, Tuplesortstate::sortcontext, Tuplesortstate::status, Tuplesortstate::tapeset, TSS_INITIAL, Tuplesortstate::tuplecontext, and USEMEM.
Referenced by tuplesort_begin_common(), and tuplesort_reset().
Tuplesortstate* tuplesort_begin_cluster | ( | TupleDesc | tupDesc, |
Relation | indexRel, | ||
int | workMem, | ||
SortCoordinate | coordinate, | ||
bool | randomAccess | ||
) |
Definition at line 971 of file tuplesort.c.
References _bt_mkscankey(), SortSupportData::abbreviate, Tuplesortstate::abbrevNext, Assert, AssertState, BTGreaterStrategyNumber, BTLessStrategyNumber, BuildIndexInfo(), CLUSTER_SORT, Tuplesortstate::comparetup, comparetup_cluster(), Tuplesortstate::copytup, copytup_cluster(), CreateExecutorState(), CurrentMemoryContext, ExprContext::ecxt_scantuple, elog, Tuplesortstate::estate, GetPerTupleExprContext, i, IndexInfo::ii_Expressions, Tuplesortstate::indexInfo, IndexRelationGetNumberOfKeyAttributes, LOG, Tuplesortstate::maincontext, MakeSingleTupleTableSlot(), MemoryContextSwitchTo(), Tuplesortstate::nKeys, palloc0(), PARALLEL_SORT, pfree(), PrepareSortSupportFromIndexRel(), RelationData::rd_rel, Tuplesortstate::readtup, readtup_cluster(), RelationGetNumberOfAttributes, BTScanInsertData::scankeys, ScanKeyData::sk_attno, SK_BT_DESC, SK_BT_NULLS_FIRST, ScanKeyData::sk_collation, ScanKeyData::sk_flags, Tuplesortstate::sortKeys, SortSupportData::ssup_attno, SortSupportData::ssup_collation, SortSupportData::ssup_cxt, SortSupportData::ssup_nulls_first, trace_sort, TTSOpsHeapTuple, Tuplesortstate::tupDesc, tuplesort_begin_common(), Tuplesortstate::writetup, and writetup_cluster().
Referenced by heapam_relation_copy_for_cluster().
|
static |
Definition at line 721 of file tuplesort.c.
References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, Tuplesortstate::allowedMem, Assert, CurrentMemoryContext, elog, ERROR, INITIAL_MEMTUPSIZE, SortCoordinateData::isWorker, Tuplesortstate::maincontext, Max, MemoryContextSwitchTo(), Tuplesortstate::memtuples, Tuplesortstate::memtupsize, SortCoordinateData::nParticipants, Tuplesortstate::nParticipants, palloc0(), pg_rusage_init(), Tuplesortstate::randomAccess, Tuplesortstate::ru_start, Tuplesortstate::shared, SortCoordinateData::sharedsort, Tuplesortstate::sortcontext, trace_sort, Tuplesortstate::tuples, tuplesort_begin_batch(), Tuplesortstate::worker, and worker_get_identifier().
Referenced by tuplesort_begin_cluster(), tuplesort_begin_datum(), tuplesort_begin_heap(), tuplesort_begin_index_btree(), tuplesort_begin_index_gist(), and tuplesort_begin_index_hash().
Tuplesortstate* tuplesort_begin_datum | ( | Oid | datumType, |
Oid | sortOperator, | ||
Oid | sortCollation, | ||
bool | nullsFirstFlag, | ||
int | workMem, | ||
SortCoordinate | coordinate, | ||
bool | randomAccess | ||
) |
Definition at line 1247 of file tuplesort.c.
References SortSupportData::abbrev_converter, SortSupportData::abbreviate, Tuplesortstate::abbrevNext, Tuplesortstate::comparetup, comparetup_datum(), Tuplesortstate::copytup, copytup_datum(), CurrentMemoryContext, DATUM_SORT, Tuplesortstate::datumType, Tuplesortstate::datumTypeLen, elog, get_typlenbyval(), LOG, Tuplesortstate::maincontext, MemoryContextSwitchTo(), Tuplesortstate::nKeys, Tuplesortstate::onlyKey, palloc0(), PARALLEL_SORT, PrepareSortSupportFromOrderingOp(), Tuplesortstate::readtup, readtup_datum(), Tuplesortstate::sortKeys, SortSupportData::ssup_collation, SortSupportData::ssup_cxt, SortSupportData::ssup_nulls_first, trace_sort, Tuplesortstate::tuples, tuplesort_begin_common(), Tuplesortstate::writetup, and writetup_datum().
Referenced by initialize_aggregate(), ordered_set_startup(), and validate_index().
Tuplesortstate* tuplesort_begin_heap | ( | TupleDesc | tupDesc, |
int | nkeys, | ||
AttrNumber * | attNums, | ||
Oid * | sortOperators, | ||
Oid * | sortCollations, | ||
bool * | nullsFirstFlags, | ||
int | workMem, | ||
SortCoordinate | coordinate, | ||
bool | randomAccess | ||
) |
Definition at line 897 of file tuplesort.c.
References SortSupportData::abbrev_converter, SortSupportData::abbreviate, Tuplesortstate::abbrevNext, AssertArg, Tuplesortstate::comparetup, comparetup_heap(), Tuplesortstate::copytup, copytup_heap(), CurrentMemoryContext, elog, HEAP_SORT, i, LOG, Tuplesortstate::maincontext, MemoryContextSwitchTo(), Tuplesortstate::nKeys, Tuplesortstate::onlyKey, palloc0(), PARALLEL_SORT, PrepareSortSupportFromOrderingOp(), Tuplesortstate::readtup, readtup_heap(), Tuplesortstate::sortKeys, SortSupportData::ssup_attno, SortSupportData::ssup_collation, SortSupportData::ssup_cxt, SortSupportData::ssup_nulls_first, trace_sort, Tuplesortstate::tupDesc, tuplesort_begin_common(), Tuplesortstate::writetup, and writetup_heap().
Referenced by ExecIncrementalSort(), ExecSort(), initialize_aggregate(), initialize_phase(), ordered_set_startup(), and switchToPresortedPrefixMode().
Tuplesortstate* tuplesort_begin_index_btree | ( | Relation | heapRel, |
Relation | indexRel, | ||
bool | enforceUnique, | ||
int | workMem, | ||
SortCoordinate | coordinate, | ||
bool | randomAccess | ||
) |
Definition at line 1066 of file tuplesort.c.
References _bt_mkscankey(), SortSupportData::abbreviate, Tuplesortstate::abbrevNext, AssertState, BTGreaterStrategyNumber, BTLessStrategyNumber, Tuplesortstate::comparetup, comparetup_index_btree(), Tuplesortstate::copytup, copytup_index(), CurrentMemoryContext, elog, Tuplesortstate::enforceUnique, Tuplesortstate::heapRel, i, INDEX_SORT, Tuplesortstate::indexRel, IndexRelationGetNumberOfKeyAttributes, LOG, Tuplesortstate::maincontext, MemoryContextSwitchTo(), Tuplesortstate::nKeys, palloc0(), PARALLEL_SORT, pfree(), PrepareSortSupportFromIndexRel(), Tuplesortstate::readtup, readtup_index(), BTScanInsertData::scankeys, ScanKeyData::sk_attno, SK_BT_DESC, SK_BT_NULLS_FIRST, ScanKeyData::sk_collation, ScanKeyData::sk_flags, Tuplesortstate::sortKeys, SortSupportData::ssup_attno, SortSupportData::ssup_collation, SortSupportData::ssup_cxt, SortSupportData::ssup_nulls_first, trace_sort, tuplesort_begin_common(), Tuplesortstate::writetup, and writetup_index().
Referenced by _bt_parallel_scan_and_sort(), and _bt_spools_heapscan().
Tuplesortstate* tuplesort_begin_index_gist | ( | Relation | heapRel, |
Relation | indexRel, | ||
int | workMem, | ||
SortCoordinate | coordinate, | ||
bool | randomAccess | ||
) |
Definition at line 1190 of file tuplesort.c.
References SortSupportData::abbreviate, AssertState, Tuplesortstate::comparetup, comparetup_index_btree(), Tuplesortstate::copytup, copytup_index(), CurrentMemoryContext, elog, Tuplesortstate::heapRel, i, Tuplesortstate::indexRel, IndexRelationGetNumberOfKeyAttributes, LOG, MemoryContextSwitchTo(), Tuplesortstate::nKeys, palloc0(), PrepareSortSupportFromGistIndexRel(), RelationData::rd_indcollation, Tuplesortstate::readtup, readtup_index(), Tuplesortstate::sortcontext, Tuplesortstate::sortKeys, SortSupportData::ssup_attno, SortSupportData::ssup_collation, SortSupportData::ssup_cxt, SortSupportData::ssup_nulls_first, trace_sort, tuplesort_begin_common(), Tuplesortstate::writetup, and writetup_index().
Referenced by gistbuild().
Tuplesortstate* tuplesort_begin_index_hash | ( | Relation | heapRel, |
Relation | indexRel, | ||
uint32 | high_mask, | ||
uint32 | low_mask, | ||
uint32 | max_buckets, | ||
int | workMem, | ||
SortCoordinate | coordinate, | ||
bool | randomAccess | ||
) |
Definition at line 1144 of file tuplesort.c.
References Tuplesortstate::comparetup, comparetup_index_hash(), Tuplesortstate::copytup, copytup_index(), elog, Tuplesortstate::heapRel, Tuplesortstate::high_mask, Tuplesortstate::indexRel, LOG, Tuplesortstate::low_mask, Tuplesortstate::maincontext, Tuplesortstate::max_buckets, MemoryContextSwitchTo(), Tuplesortstate::nKeys, Tuplesortstate::readtup, readtup_index(), trace_sort, tuplesort_begin_common(), Tuplesortstate::writetup, and writetup_index().
Referenced by _h_spoolinit().
void tuplesort_end | ( | Tuplesortstate * | state | ) |
Definition at line 1464 of file tuplesort.c.
References Tuplesortstate::maincontext, MemoryContextDelete(), and tuplesort_free().
Referenced by _bt_parallel_scan_and_sort(), _bt_spooldestroy(), _h_spooldestroy(), ExecEndAgg(), ExecEndIncrementalSort(), ExecEndSort(), ExecReScanAgg(), ExecReScanSort(), gistbuild(), heapam_relation_copy_for_cluster(), initialize_aggregate(), initialize_phase(), ordered_set_shutdown(), process_ordered_aggregate_multi(), process_ordered_aggregate_single(), and validate_index().
Size tuplesort_estimate_shared | ( | int | nWorkers | ) |
Definition at line 4557 of file tuplesort.c.
References add_size(), Assert, MAXALIGN, mul_size(), and offsetof.
Referenced by _bt_begin_parallel().
|
static |
Definition at line 1391 of file tuplesort.c.
References Tuplesortstate::allowedMem, Tuplesortstate::availMem, ExprContext::ecxt_scantuple, elog, Tuplesortstate::estate, ExecDropSingleTupleTableSlot(), FreeExecutorState(), GetPerTupleExprContext, LOG, LogicalTapeSetBlocks(), LogicalTapeSetClose(), MemoryContextReset(), MemoryContextSwitchTo(), pg_rusage_show(), Tuplesortstate::ru_start, SERIAL, Tuplesortstate::sortcontext, Tuplesortstate::tapeset, trace_sort, and Tuplesortstate::worker.
Referenced by tuplesort_end(), and tuplesort_reset().
void tuplesort_get_stats | ( | Tuplesortstate * | state, |
TuplesortInstrumentation * | stats | ||
) |
Definition at line 3378 of file tuplesort.c.
References Tuplesortstate::boundUsed, Tuplesortstate::isMaxSpaceDisk, Tuplesortstate::maxSpace, Tuplesortstate::maxSpaceStatus, SORT_SPACE_TYPE_DISK, SORT_SPACE_TYPE_MEMORY, SORT_TYPE_EXTERNAL_MERGE, SORT_TYPE_EXTERNAL_SORT, SORT_TYPE_QUICKSORT, SORT_TYPE_STILL_IN_PROGRESS, SORT_TYPE_TOP_N_HEAPSORT, TuplesortInstrumentation::sortMethod, TuplesortInstrumentation::spaceType, TuplesortInstrumentation::spaceUsed, TSS_FINALMERGE, TSS_SORTEDINMEM, TSS_SORTEDONTAPE, and tuplesort_updatemax().
Referenced by ExecSort(), instrumentSortedGroup(), and show_sort_info().
bool tuplesort_getdatum | ( | Tuplesortstate * | state, |
bool | forward, | ||
Datum * | val, | ||
bool * | isNull, | ||
Datum * | abbrev | ||
) |
Definition at line 2494 of file tuplesort.c.
References SortSupportData::abbrev_converter, SortTuple::datum1, datumCopy(), Tuplesortstate::datumTypeLen, SortTuple::isnull1, MemoryContextSwitchTo(), PointerGetDatum, Tuplesortstate::sortcontext, Tuplesortstate::sortKeys, SortTuple::tuple, Tuplesortstate::tuples, and tuplesort_gettuple_common().
Referenced by heapam_index_validate_scan(), mode_final(), percentile_cont_final_common(), percentile_cont_multi_final_common(), percentile_disc_final(), percentile_disc_multi_final(), and process_ordered_aggregate_single().
HeapTuple tuplesort_getheaptuple | ( | Tuplesortstate * | state, |
bool | forward | ||
) |
Definition at line 2445 of file tuplesort.c.
References MemoryContextSwitchTo(), Tuplesortstate::sortcontext, SortTuple::tuple, and tuplesort_gettuple_common().
Referenced by heapam_relation_copy_for_cluster().
IndexTuple tuplesort_getindextuple | ( | Tuplesortstate * | state, |
bool | forward | ||
) |
Definition at line 2465 of file tuplesort.c.
References MemoryContextSwitchTo(), Tuplesortstate::sortcontext, SortTuple::tuple, and tuplesort_gettuple_common().
Referenced by _bt_load(), _h_indexbuild(), and gist_indexsortbuild().
|
static |
Definition at line 2151 of file tuplesort.c.
References Assert, Tuplesortstate::bound, Tuplesortstate::bounded, Tuplesortstate::current, elog, Tuplesortstate::eof_reached, ERROR, getlen(), Tuplesortstate::lastReturnedTuple, LogicalTapeBackspace(), LogicalTapeRewindForWrite(), Tuplesortstate::memtupcount, Tuplesortstate::memtuples, mergereadnext(), Tuplesortstate::randomAccess, READTUP, RELEASE_SLAB_SLOT, Tuplesortstate::result_tape, Tuplesortstate::slabAllocatorUsed, SortTuple::srctape, Tuplesortstate::status, Tuplesortstate::tapeset, TSS_FINALMERGE, TSS_SORTEDINMEM, TSS_SORTEDONTAPE, SortTuple::tuple, tuplesort_heap_delete_top(), tuplesort_heap_replace_top(), and WORKER.
Referenced by tuplesort_getdatum(), tuplesort_getheaptuple(), tuplesort_getindextuple(), tuplesort_gettupleslot(), and tuplesort_skiptuples().