1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-28 11:44:57 +03:00

Remove no-op GiST support functions in the core GiST opclasses.

The preceding patch allowed us to remove useless GiST support functions.
This patch actually does that for all the no-op cases in the core GiST
code.  This buys us whatever performance gain is to be had, and more
importantly exercises the preceding patch.

There remain no-op functions in the contrib GiST opclasses, but those
will take more work to remove.

Discussion: https://postgr.es/m/CAJEAwVELVx9gYscpE=Be6iJxvdW5unZ_LkcAaVNSeOwvdwtD=A@mail.gmail.com
This commit is contained in:
Tom Lane
2017-09-19 23:32:45 -04:00
parent d3a4f89d8a
commit 2d484f9b05
10 changed files with 22 additions and 105 deletions

View File

@@ -185,37 +185,9 @@ gist_box_union(PG_FUNCTION_ARGS)
}
/*
* GiST Compress methods for boxes
*
* do not do anything.
* We store boxes as boxes in GiST indexes, so we do not need
* compress, decompress, or fetch functions.
*/
Datum
gist_box_compress(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(PG_GETARG_POINTER(0));
}
/*
* GiST DeCompress method for boxes (also used for points, polygons
* and circles)
*
* do not do anything --- we just use the stored box as is.
*/
Datum
gist_box_decompress(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(PG_GETARG_POINTER(0));
}
/*
* GiST Fetch method for boxes
* do not do anything --- we just return the stored box as is.
*/
Datum
gist_box_fetch(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(PG_GETARG_POINTER(0));
}
/*
* The GiST Penalty method for boxes (also used for points)

View File

@@ -576,17 +576,9 @@ inet_gist_compress(PG_FUNCTION_ARGS)
}
/*
* The GiST decompress function
*
* do not do anything --- we just use the stored GistInetKey as-is.
* We do not need a decompress function, because the other GiST inet
* support functions work with the GistInetKey representation.
*/
Datum
inet_gist_decompress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
PG_RETURN_POINTER(entry);
}
/*
* The GiST fetch function

View File

@@ -216,30 +216,11 @@ range_gist_union(PG_FUNCTION_ARGS)
PG_RETURN_RANGE_P(result_range);
}
/* compress, decompress, fetch are no-ops */
Datum
range_gist_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
PG_RETURN_POINTER(entry);
}
Datum
range_gist_decompress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
PG_RETURN_POINTER(entry);
}
Datum
range_gist_fetch(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
PG_RETURN_POINTER(entry);
}
/*
* We store ranges as ranges in GiST indexes, so we do not need
* compress, decompress, or fetch functions. Note this implies a limit
* on the size of range values that can be indexed.
*/
/*
* GiST page split penalty function.

View File

@@ -272,6 +272,10 @@ gtsvector_compress(PG_FUNCTION_ARGS)
Datum
gtsvector_decompress(PG_FUNCTION_ARGS)
{
/*
* We need to detoast the stored value, because the other gtsvector
* support functions don't cope with toasted values.
*/
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
SignTSVector *key = (SignTSVector *) PG_DETOAST_DATUM(entry->key);

View File

@@ -43,11 +43,10 @@ gtsquery_compress(PG_FUNCTION_ARGS)
PG_RETURN_POINTER(retval);
}
Datum
gtsquery_decompress(PG_FUNCTION_ARGS)
{
PG_RETURN_DATUM(PG_GETARG_DATUM(0));
}
/*
* We do not need a decompress function, because the other gtsquery
* support functions work with the compressed representation.
*/
Datum
gtsquery_consistent(PG_FUNCTION_ARGS)