LCOV - differential code coverage report
Current view: top level - contrib/btree_gist - btree_text.c (source / functions) Coverage Total Hit UBC CBC
Current: c70b6db34ffeab48beef1fb4ce61bcad3772b8dd vs 06473f5a344df8c9594ead90a609b86f6724cff8 Lines: 89.9 % 119 107 12 107
Current Date: 2025-09-06 07:49:51 +0900 Functions: 94.1 % 34 32 2 32
Baseline: lcov-20250906-005545-baseline Branches: 64.3 % 14 9 5 9
Baseline Date: 2025-09-05 08:21:35 +0100 Line coverage date bins:
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
(30,360] days: 100.0 % 36 36 36
(360..) days: 85.5 % 83 71 12 71
Function coverage date bins:
(30,360] days: 100.0 % 6 6 6
(360..) days: 92.9 % 28 26 2 26
Branch coverage date bins:
(30,360] days: 50.0 % 8 4 4 4
(360..) days: 83.3 % 6 5 1 5

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*
                                  2                 :                :  * contrib/btree_gist/btree_text.c
                                  3                 :                :  */
                                  4                 :                : #include "postgres.h"
                                  5                 :                : 
                                  6                 :                : #include "btree_gist.h"
                                  7                 :                : #include "btree_utils_var.h"
                                  8                 :                : #include "mb/pg_wchar.h"
                                  9                 :                : #include "utils/fmgrprotos.h"
                                 10                 :                : #include "utils/sortsupport.h"
                                 11                 :                : 
                                 12                 :                : /* GiST support functions */
 7771 teodor@sigaev.ru           13                 :CBC           6 : PG_FUNCTION_INFO_V1(gbt_text_compress);
                                 14                 :              4 : PG_FUNCTION_INFO_V1(gbt_bpchar_compress);
                                 15                 :              7 : PG_FUNCTION_INFO_V1(gbt_text_union);
                                 16                 :              7 : PG_FUNCTION_INFO_V1(gbt_text_picksplit);
                                 17                 :              6 : PG_FUNCTION_INFO_V1(gbt_text_consistent);
                                 18                 :              4 : PG_FUNCTION_INFO_V1(gbt_bpchar_consistent);
                                 19                 :              7 : PG_FUNCTION_INFO_V1(gbt_text_penalty);
                                 20                 :              7 : PG_FUNCTION_INFO_V1(gbt_text_same);
  156 heikki.linnakangas@i       21                 :              6 : PG_FUNCTION_INFO_V1(gbt_text_sortsupport);
                                 22                 :              4 : PG_FUNCTION_INFO_V1(gbt_bpchar_sortsupport);
                                 23                 :                : 
                                 24                 :                : 
                                 25                 :                : /* define for comparison */
                                 26                 :                : 
                                 27                 :                : static bool
 3091 andrew@dunslane.net        28                 :           1234 : gbt_textgt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 29                 :                : {
 5261 tgl@sss.pgh.pa.us          30                 :           1234 :     return DatumGetBool(DirectFunctionCall2Coll(text_gt,
                                 31                 :                :                                                 collation,
                                 32                 :                :                                                 PointerGetDatum(a),
                                 33                 :                :                                                 PointerGetDatum(b)));
                                 34                 :                : }
                                 35                 :                : 
                                 36                 :                : static bool
 3091 andrew@dunslane.net        37                 :           1263 : gbt_textge(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 38                 :                : {
 5261 tgl@sss.pgh.pa.us          39                 :           1263 :     return DatumGetBool(DirectFunctionCall2Coll(text_ge,
                                 40                 :                :                                                 collation,
                                 41                 :                :                                                 PointerGetDatum(a),
                                 42                 :                :                                                 PointerGetDatum(b)));
                                 43                 :                : }
                                 44                 :                : 
                                 45                 :                : static bool
 3091 andrew@dunslane.net        46                 :            381 : gbt_texteq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 47                 :                : {
 5261 tgl@sss.pgh.pa.us          48                 :            381 :     return DatumGetBool(DirectFunctionCall2Coll(texteq,
                                 49                 :                :                                                 collation,
                                 50                 :                :                                                 PointerGetDatum(a),
                                 51                 :                :                                                 PointerGetDatum(b)));
                                 52                 :                : }
                                 53                 :                : 
                                 54                 :                : static bool
 3091 andrew@dunslane.net        55                 :           1112 : gbt_textle(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 56                 :                : {
 5261 tgl@sss.pgh.pa.us          57                 :           1112 :     return DatumGetBool(DirectFunctionCall2Coll(text_le,
                                 58                 :                :                                                 collation,
                                 59                 :                :                                                 PointerGetDatum(a),
                                 60                 :                :                                                 PointerGetDatum(b)));
                                 61                 :                : }
                                 62                 :                : 
                                 63                 :                : static bool
 3091 andrew@dunslane.net        64                 :            989 : gbt_textlt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 65                 :                : {
 5261 tgl@sss.pgh.pa.us          66                 :            989 :     return DatumGetBool(DirectFunctionCall2Coll(text_lt,
                                 67                 :                :                                                 collation,
                                 68                 :                :                                                 PointerGetDatum(a),
                                 69                 :                :                                                 PointerGetDatum(b)));
                                 70                 :                : }
                                 71                 :                : 
                                 72                 :                : static int32
 3091 andrew@dunslane.net        73                 :          28465 : gbt_textcmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 74                 :                : {
 5261 tgl@sss.pgh.pa.us          75                 :          28465 :     return DatumGetInt32(DirectFunctionCall2Coll(bttextcmp,
                                 76                 :                :                                                  collation,
                                 77                 :                :                                                  PointerGetDatum(a),
                                 78                 :                :                                                  PointerGetDatum(b)));
                                 79                 :                : }
                                 80                 :                : 
                                 81                 :                : static gbtree_vinfo tinfo =
                                 82                 :                : {
                                 83                 :                :     gbt_t_text,
                                 84                 :                :     0,
                                 85                 :                :     false,
                                 86                 :                :     gbt_textgt,
                                 87                 :                :     gbt_textge,
                                 88                 :                :     gbt_texteq,
                                 89                 :                :     gbt_textle,
                                 90                 :                :     gbt_textlt,
                                 91                 :                :     gbt_textcmp,
                                 92                 :                :     NULL
                                 93                 :                : };
                                 94                 :                : 
                                 95                 :                : /* bpchar needs its own comparison rules */
                                 96                 :                : 
                                 97                 :                : static bool
 1337                            98                 :            624 : gbt_bpchargt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 99                 :                : {
                                100                 :            624 :     return DatumGetBool(DirectFunctionCall2Coll(bpchargt,
                                101                 :                :                                                 collation,
                                102                 :                :                                                 PointerGetDatum(a),
                                103                 :                :                                                 PointerGetDatum(b)));
                                104                 :                : }
                                105                 :                : 
                                106                 :                : static bool
                                107                 :            661 : gbt_bpcharge(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                108                 :                : {
                                109                 :            661 :     return DatumGetBool(DirectFunctionCall2Coll(bpcharge,
                                110                 :                :                                                 collation,
                                111                 :                :                                                 PointerGetDatum(a),
                                112                 :                :                                                 PointerGetDatum(b)));
                                113                 :                : }
                                114                 :                : 
                                115                 :                : static bool
                                116                 :            156 : gbt_bpchareq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                117                 :                : {
                                118                 :            156 :     return DatumGetBool(DirectFunctionCall2Coll(bpchareq,
                                119                 :                :                                                 collation,
                                120                 :                :                                                 PointerGetDatum(a),
                                121                 :                :                                                 PointerGetDatum(b)));
                                122                 :                : }
                                123                 :                : 
                                124                 :                : static bool
                                125                 :            676 : gbt_bpcharle(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                126                 :                : {
                                127                 :            676 :     return DatumGetBool(DirectFunctionCall2Coll(bpcharle,
                                128                 :                :                                                 collation,
                                129                 :                :                                                 PointerGetDatum(a),
                                130                 :                :                                                 PointerGetDatum(b)));
                                131                 :                : }
                                132                 :                : 
                                133                 :                : static bool
                                134                 :            520 : gbt_bpcharlt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                135                 :                : {
                                136                 :            520 :     return DatumGetBool(DirectFunctionCall2Coll(bpcharlt,
                                137                 :                :                                                 collation,
                                138                 :                :                                                 PointerGetDatum(a),
                                139                 :                :                                                 PointerGetDatum(b)));
                                140                 :                : }
                                141                 :                : 
                                142                 :                : static int32
                                143                 :             57 : gbt_bpcharcmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                144                 :                : {
                                145                 :             57 :     return DatumGetInt32(DirectFunctionCall2Coll(bpcharcmp,
                                146                 :                :                                                  collation,
                                147                 :                :                                                  PointerGetDatum(a),
                                148                 :                :                                                  PointerGetDatum(b)));
                                149                 :                : }
                                150                 :                : 
                                151                 :                : static gbtree_vinfo bptinfo =
                                152                 :                : {
                                153                 :                :     gbt_t_bpchar,
                                154                 :                :     0,
                                155                 :                :     false,
                                156                 :                :     gbt_bpchargt,
                                157                 :                :     gbt_bpcharge,
                                158                 :                :     gbt_bpchareq,
                                159                 :                :     gbt_bpcharle,
                                160                 :                :     gbt_bpcharlt,
                                161                 :                :     gbt_bpcharcmp,
                                162                 :                :     NULL
                                163                 :                : };
                                164                 :                : 
                                165                 :                : 
                                166                 :                : /**************************************************
                                167                 :                :  * GiST support functions
                                168                 :                :  **************************************************/
                                169                 :                : 
                                170                 :                : Datum
 7678 bruce@momjian.us          171                 :           2989 : gbt_text_compress(PG_FUNCTION_ARGS)
                                172                 :                : {
                                173                 :           2989 :     GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
                                174                 :                : 
 7266                           175         [ +  + ]:           2989 :     if (tinfo.eml == 0)
                                176                 :                :     {
 7372 teodor@sigaev.ru          177                 :              4 :         tinfo.eml = pg_database_encoding_max_length();
                                178                 :                :     }
                                179                 :                : 
 7678 bruce@momjian.us          180                 :           2989 :     PG_RETURN_POINTER(gbt_var_compress(entry, &tinfo));
                                181                 :                : }
                                182                 :                : 
                                183                 :                : Datum
                                184                 :            996 : gbt_bpchar_compress(PG_FUNCTION_ARGS)
                                185                 :                : {
                                186                 :                :     /* This should never have been distinct from gbt_text_compress */
 1337 tgl@sss.pgh.pa.us         187                 :            996 :     return gbt_text_compress(fcinfo);
                                188                 :                : }
                                189                 :                : 
                                190                 :                : Datum
 7771 teodor@sigaev.ru          191                 :           5050 : gbt_text_consistent(PG_FUNCTION_ARGS)
                                192                 :                : {
 7678 bruce@momjian.us          193                 :           5050 :     GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
  282 peter@eisentraut.org      194                 :           5050 :     void       *query = DatumGetTextP(PG_GETARG_DATUM(1));
 7678 bruce@momjian.us          195                 :           5050 :     StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
                                196                 :                : 
                                197                 :                :     /* Oid      subtype = PG_GETARG_OID(3); */
 6354 tgl@sss.pgh.pa.us         198                 :           5050 :     bool       *recheck = (bool *) PG_GETARG_POINTER(4);
                                199                 :                :     bool        retval;
                                200                 :           5050 :     GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
 7678 bruce@momjian.us          201                 :           5050 :     GBT_VARKEY_R r = gbt_var_key_readable(key);
                                202                 :                : 
                                203                 :                :     /* All cases served by this function are exact */
 6354 tgl@sss.pgh.pa.us         204                 :           5050 :     *recheck = false;
                                205                 :                : 
 7266 bruce@momjian.us          206         [ -  + ]:           5050 :     if (tinfo.eml == 0)
                                207                 :                :     {
 7372 teodor@sigaev.ru          208                 :UBC           0 :         tinfo.eml = pg_database_encoding_max_length();
                                209                 :                :     }
                                210                 :                : 
 5251 tgl@sss.pgh.pa.us         211                 :CBC       10100 :     retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
 3091 andrew@dunslane.net       212                 :           5050 :                                 GIST_LEAF(entry), &tinfo, fcinfo->flinfo);
                                213                 :                : 
 7678 bruce@momjian.us          214                 :           5050 :     PG_RETURN_BOOL(retval);
                                215                 :                : }
                                216                 :                : 
                                217                 :                : Datum
 7771 teodor@sigaev.ru          218                 :           2690 : gbt_bpchar_consistent(PG_FUNCTION_ARGS)
                                219                 :                : {
 7678 bruce@momjian.us          220                 :           2690 :     GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
  282 peter@eisentraut.org      221                 :           2690 :     void       *query = DatumGetTextP(PG_GETARG_DATUM(1));
 7678 bruce@momjian.us          222                 :           2690 :     StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
                                223                 :                : 
                                224                 :                :     /* Oid      subtype = PG_GETARG_OID(3); */
 6354 tgl@sss.pgh.pa.us         225                 :           2690 :     bool       *recheck = (bool *) PG_GETARG_POINTER(4);
                                226                 :                :     bool        retval;
                                227                 :           2690 :     GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
 7678 bruce@momjian.us          228                 :           2690 :     GBT_VARKEY_R r = gbt_var_key_readable(key);
                                229                 :                : 
                                230                 :                :     /* All cases served by this function are exact */
 6354 tgl@sss.pgh.pa.us         231                 :           2690 :     *recheck = false;
                                232                 :                : 
 1337                           233         [ +  + ]:           2690 :     if (bptinfo.eml == 0)
                                234                 :                :     {
                                235                 :              1 :         bptinfo.eml = pg_database_encoding_max_length();
                                236                 :                :     }
                                237                 :                : 
                                238                 :           5380 :     retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
                                239                 :           2690 :                                 GIST_LEAF(entry), &bptinfo, fcinfo->flinfo);
 7678 bruce@momjian.us          240                 :           2690 :     PG_RETURN_BOOL(retval);
                                241                 :                : }
                                242                 :                : 
                                243                 :                : Datum
 7771 teodor@sigaev.ru          244                 :              3 : gbt_text_union(PG_FUNCTION_ARGS)
                                245                 :                : {
 7678 bruce@momjian.us          246                 :              3 :     GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
                                247                 :              3 :     int32      *size = (int *) PG_GETARG_POINTER(1);
                                248                 :                : 
 5251 tgl@sss.pgh.pa.us         249                 :              3 :     PG_RETURN_POINTER(gbt_var_union(entryvec, size, PG_GET_COLLATION(),
                                250                 :                :                                     &tinfo, fcinfo->flinfo));
                                251                 :                : }
                                252                 :                : 
                                253                 :                : Datum
 7771 teodor@sigaev.ru          254                 :             16 : gbt_text_picksplit(PG_FUNCTION_ARGS)
                                255                 :                : {
 7678 bruce@momjian.us          256                 :             16 :     GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
                                257                 :             16 :     GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
                                258                 :                : 
 5251 tgl@sss.pgh.pa.us         259                 :             16 :     gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
                                260                 :                :                       &tinfo, fcinfo->flinfo);
 7678 bruce@momjian.us          261                 :             16 :     PG_RETURN_POINTER(v);
                                262                 :                : }
                                263                 :                : 
                                264                 :                : Datum
 7771 teodor@sigaev.ru          265                 :UBC           0 : gbt_text_same(PG_FUNCTION_ARGS)
                                266                 :                : {
 7678 bruce@momjian.us          267                 :              0 :     Datum       d1 = PG_GETARG_DATUM(0);
                                268                 :              0 :     Datum       d2 = PG_GETARG_DATUM(1);
                                269                 :              0 :     bool       *result = (bool *) PG_GETARG_POINTER(2);
                                270                 :                : 
 3091 andrew@dunslane.net       271                 :              0 :     *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo);
 5251 tgl@sss.pgh.pa.us         272                 :              0 :     PG_RETURN_POINTER(result);
                                273                 :                : }
                                274                 :                : 
                                275                 :                : Datum
 7771 teodor@sigaev.ru          276                 :              0 : gbt_text_penalty(PG_FUNCTION_ARGS)
                                277                 :                : {
 7678 bruce@momjian.us          278                 :              0 :     GISTENTRY  *o = (GISTENTRY *) PG_GETARG_POINTER(0);
                                279                 :              0 :     GISTENTRY  *n = (GISTENTRY *) PG_GETARG_POINTER(1);
 7422 neilc@samurai.com         280                 :              0 :     float      *result = (float *) PG_GETARG_POINTER(2);
                                281                 :                : 
 5251 tgl@sss.pgh.pa.us         282                 :              0 :     PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(),
                                283                 :                :                                       &tinfo, fcinfo->flinfo));
                                284                 :                : }
                                285                 :                : 
                                286                 :                : static int
  156 heikki.linnakangas@i      287                 :CBC       22034 : gbt_text_ssup_cmp(Datum x, Datum y, SortSupport ssup)
                                288                 :                : {
                                289                 :          22034 :     GBT_VARKEY *key1 = PG_DETOAST_DATUM(x);
                                290                 :          22034 :     GBT_VARKEY *key2 = PG_DETOAST_DATUM(y);
                                291                 :                : 
                                292                 :          22034 :     GBT_VARKEY_R arg1 = gbt_var_key_readable(key1);
                                293                 :          22034 :     GBT_VARKEY_R arg2 = gbt_var_key_readable(key2);
                                294                 :                :     Datum       result;
                                295                 :                : 
                                296                 :                :     /* for leaf items we expect lower == upper, so only compare lower */
                                297                 :          22034 :     result = DirectFunctionCall2Coll(bttextcmp,
                                298                 :                :                                      ssup->ssup_collation,
                                299                 :          22034 :                                      PointerGetDatum(arg1.lower),
                                300                 :          22034 :                                      PointerGetDatum(arg2.lower));
                                301                 :                : 
                                302         [ +  - ]:          22034 :     GBT_FREE_IF_COPY(key1, x);
                                303         [ +  - ]:          22034 :     GBT_FREE_IF_COPY(key2, y);
                                304                 :                : 
                                305                 :          22034 :     return DatumGetInt32(result);
                                306                 :                : }
                                307                 :                : 
                                308                 :                : Datum
                                309                 :              3 : gbt_text_sortsupport(PG_FUNCTION_ARGS)
                                310                 :                : {
                                311                 :              3 :     SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0);
                                312                 :                : 
                                313                 :              3 :     ssup->comparator = gbt_text_ssup_cmp;
                                314                 :              3 :     ssup->ssup_extra = NULL;
                                315                 :                : 
                                316                 :              3 :     PG_RETURN_VOID();
                                317                 :                : }
                                318                 :                : 
                                319                 :                : static int
                                320                 :          11261 : gbt_bpchar_ssup_cmp(Datum x, Datum y, SortSupport ssup)
                                321                 :                : {
                                322                 :          11261 :     GBT_VARKEY *key1 = PG_DETOAST_DATUM(x);
                                323                 :          11261 :     GBT_VARKEY *key2 = PG_DETOAST_DATUM(y);
                                324                 :                : 
                                325                 :          11261 :     GBT_VARKEY_R arg1 = gbt_var_key_readable(key1);
                                326                 :          11261 :     GBT_VARKEY_R arg2 = gbt_var_key_readable(key2);
                                327                 :                :     Datum       result;
                                328                 :                : 
                                329                 :                :     /* for leaf items we expect lower == upper, so only compare lower */
                                330                 :          11261 :     result = DirectFunctionCall2Coll(bpcharcmp,
                                331                 :                :                                      ssup->ssup_collation,
                                332                 :          11261 :                                      PointerGetDatum(arg1.lower),
                                333                 :          11261 :                                      PointerGetDatum(arg2.lower));
                                334                 :                : 
                                335         [ +  - ]:          11261 :     GBT_FREE_IF_COPY(key1, x);
                                336         [ +  - ]:          11261 :     GBT_FREE_IF_COPY(key2, y);
                                337                 :                : 
                                338                 :          11261 :     return DatumGetInt32(result);
                                339                 :                : }
                                340                 :                : 
                                341                 :                : Datum
                                342                 :              1 : gbt_bpchar_sortsupport(PG_FUNCTION_ARGS)
                                343                 :                : {
                                344                 :              1 :     SortSupport ssup = (SortSupport) PG_GETARG_POINTER(0);
                                345                 :                : 
                                346                 :              1 :     ssup->comparator = gbt_bpchar_ssup_cmp;
                                347                 :              1 :     ssup->ssup_extra = NULL;
                                348                 :                : 
                                349                 :              1 :     PG_RETURN_VOID();
                                350                 :                : }
        

Generated by: LCOV version 2.4-beta