Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
0ba3f3bc
Commit
0ba3f3bc
authored
Dec 22, 2015
by
Robert Haas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Comment improvements for abbreviated keys.
Peter Geoghegan and Robert Haas
parent
ccd8f979
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
23 deletions
+31
-23
src/backend/utils/sort/tuplesort.c
src/backend/utils/sort/tuplesort.c
+12
-5
src/include/utils/sortsupport.h
src/include/utils/sortsupport.h
+19
-18
No files found.
src/backend/utils/sort/tuplesort.c
View file @
0ba3f3bc
...
@@ -930,7 +930,14 @@ tuplesort_begin_datum(Oid datumType, Oid sortOperator, Oid sortCollation,
...
@@ -930,7 +930,14 @@ tuplesort_begin_datum(Oid datumType, Oid sortOperator, Oid sortCollation,
state
->
sortKeys
->
ssup_collation
=
sortCollation
;
state
->
sortKeys
->
ssup_collation
=
sortCollation
;
state
->
sortKeys
->
ssup_nulls_first
=
nullsFirstFlag
;
state
->
sortKeys
->
ssup_nulls_first
=
nullsFirstFlag
;
/* abbreviation is possible here only for by-reference types */
/*
* Abbreviation is possible here only for by-reference types. In theory,
* a pass-by-value datatype could have an abbreviated form that is cheaper
* to compare. In a tuple sort, we could support that, because we can
* always extract the original datum from the tuple is needed. Here, we
* can't, because a datum sort only stores a single copy of the datum;
* the "tuple" field of each sortTuple is NULL.
*/
state
->
sortKeys
->
abbreviate
=
!
typbyval
;
state
->
sortKeys
->
abbreviate
=
!
typbyval
;
PrepareSortSupportFromOrderingOp
(
sortOperator
,
state
->
sortKeys
);
PrepareSortSupportFromOrderingOp
(
sortOperator
,
state
->
sortKeys
);
...
@@ -1271,7 +1278,7 @@ tuplesort_putindextuplevalues(Tuplesortstate *state, Relation rel,
...
@@ -1271,7 +1278,7 @@ tuplesort_putindextuplevalues(Tuplesortstate *state, Relation rel,
* Store ordinary Datum representation, or NULL value. If there is a
* Store ordinary Datum representation, or NULL value. If there is a
* converter it won't expect NULL values, and cost model is not
* converter it won't expect NULL values, and cost model is not
* required to account for NULL, so in that case we avoid calling
* required to account for NULL, so in that case we avoid calling
* converter and just set datum1 to
"void"
representation (to be
* converter and just set datum1 to
zeroed
representation (to be
* consistent).
* consistent).
*/
*/
stup
.
datum1
=
original
;
stup
.
datum1
=
original
;
...
@@ -3155,7 +3162,7 @@ copytup_heap(Tuplesortstate *state, SortTuple *stup, void *tup)
...
@@ -3155,7 +3162,7 @@ copytup_heap(Tuplesortstate *state, SortTuple *stup, void *tup)
* Store ordinary Datum representation, or NULL value. If there is a
* Store ordinary Datum representation, or NULL value. If there is a
* converter it won't expect NULL values, and cost model is not
* converter it won't expect NULL values, and cost model is not
* required to account for NULL, so in that case we avoid calling
* required to account for NULL, so in that case we avoid calling
* converter and just set datum1 to
"void"
representation (to be
* converter and just set datum1 to
zeroed
representation (to be
* consistent).
* consistent).
*/
*/
stup
->
datum1
=
original
;
stup
->
datum1
=
original
;
...
@@ -3397,7 +3404,7 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup)
...
@@ -3397,7 +3404,7 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup)
* Store ordinary Datum representation, or NULL value. If there is a
* Store ordinary Datum representation, or NULL value. If there is a
* converter it won't expect NULL values, and cost model is not
* converter it won't expect NULL values, and cost model is not
* required to account for NULL, so in that case we avoid calling
* required to account for NULL, so in that case we avoid calling
* converter and just set datum1 to
"void"
representation (to be
* converter and just set datum1 to
zeroed
representation (to be
* consistent).
* consistent).
*/
*/
stup
->
datum1
=
original
;
stup
->
datum1
=
original
;
...
@@ -3701,7 +3708,7 @@ copytup_index(Tuplesortstate *state, SortTuple *stup, void *tup)
...
@@ -3701,7 +3708,7 @@ copytup_index(Tuplesortstate *state, SortTuple *stup, void *tup)
* Store ordinary Datum representation, or NULL value. If there is a
* Store ordinary Datum representation, or NULL value. If there is a
* converter it won't expect NULL values, and cost model is not
* converter it won't expect NULL values, and cost model is not
* required to account for NULL, so in that case we avoid calling
* required to account for NULL, so in that case we avoid calling
* converter and just set datum1 to
"void"
representation (to be
* converter and just set datum1 to
zeroed
representation (to be
* consistent).
* consistent).
*/
*/
stup
->
datum1
=
original
;
stup
->
datum1
=
original
;
...
...
src/include/utils/sortsupport.h
View file @
0ba3f3bc
...
@@ -116,24 +116,25 @@ typedef struct SortSupportData
...
@@ -116,24 +116,25 @@ typedef struct SortSupportData
*
*
* This allows opclass authors to supply a conversion routine, used to
* This allows opclass authors to supply a conversion routine, used to
* create an alternative representation of the underlying type (an
* create an alternative representation of the underlying type (an
* "abbreviated key"). Typically, this representation is an ad-hoc,
* "abbreviated key"). This representation must be pass-by-value and
* pass-by-value Datum format that only the opclass has knowledge of. An
* typically will use some ad-hoc format that only the opclass has
* alternative comparator, used only with this alternative representation
* knowledge of. An alternative comparator, used only with this
* must also be provided (which is assigned to "comparator"). This
* alternative representation must also be provided (which is assigned to
* representation is a simple approximation of the original Datum. It
* "comparator"). This representation is a simple approximation of the
* must be possible to compare datums of this representation with each
* original Datum. It must be possible to compare datums of this
* other using the supplied alternative comparator, and have any non-zero
* representation with each other using the supplied alternative
* return value be a reliable proxy for what a proper comparison would
* comparator, and have any non-zero return value be a reliable proxy for
* indicate. Returning zero from the alternative comparator does not
* what a proper comparison would indicate. Returning zero from the
* indicate equality, as with a conventional support routine 1, though --
* alternative comparator does not indicate equality, as with a
* it indicates that it wasn't possible to determine how the two
* conventional support routine 1, though -- it indicates that it wasn't
* abbreviated values compared. A proper comparison, using
* possible to determine how the two abbreviated values compared. A
* "abbrev_full_comparator"/ ApplySortAbbrevFullComparator() is therefore
* proper comparison, using "abbrev_full_comparator"/
* required. In many cases this results in most or all comparisons only
* ApplySortAbbrevFullComparator() is therefore required. In many cases
* using the cheap alternative comparison func, which is typically
* this results in most or all comparisons only using the cheap
* implemented as code that compiles to just a few CPU instructions. CPU
* alternative comparison func, which is typically implemented as code
* cache miss penalties are expensive; to get good overall performance,
* that compiles to just a few CPU instructions. CPU cache miss penalties
* sort infrastructure must heavily weigh cache performance.
* are expensive; to get good overall performance, sort infrastructure
* must heavily weigh cache performance.
*
*
* Opclass authors must consider the final cardinality of abbreviated keys
* Opclass authors must consider the final cardinality of abbreviated keys
* when devising an encoding scheme. It's possible for a strategy to work
* when devising an encoding scheme. It's possible for a strategy to work
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment