LCOV - differential code coverage report
Current view: top level - contrib/btree_gist - btree_text.c (source / functions) Coverage Total Hit UBC CBC
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 98.8 % 85 84 1 84
Current Date: 2024-04-14 14:21:10 Functions: 100.0 % 28 28 28
Baseline: 16@8cea358b128 Branches: 83.3 % 6 5 1 5
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed (240..) days: 98.8 % 85 84 1 84
Function coverage date bins:
(240..) days: 100.0 % 28 28 28
Branch coverage date bins:
(240..) 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 "utils/builtins.h"
                                  9                 :                : 
                                 10                 :                : /*
                                 11                 :                : ** Text ops
                                 12                 :                : */
 7261 teodor@sigaev.ru           13                 :CBC           4 : PG_FUNCTION_INFO_V1(gbt_text_compress);
                                 14                 :              2 : PG_FUNCTION_INFO_V1(gbt_bpchar_compress);
                                 15                 :              5 : PG_FUNCTION_INFO_V1(gbt_text_union);
                                 16                 :              5 : PG_FUNCTION_INFO_V1(gbt_text_picksplit);
                                 17                 :              4 : PG_FUNCTION_INFO_V1(gbt_text_consistent);
                                 18                 :              2 : PG_FUNCTION_INFO_V1(gbt_bpchar_consistent);
                                 19                 :              5 : PG_FUNCTION_INFO_V1(gbt_text_penalty);
                                 20                 :              5 : PG_FUNCTION_INFO_V1(gbt_text_same);
                                 21                 :                : 
                                 22                 :                : 
                                 23                 :                : /* define for comparison */
                                 24                 :                : 
                                 25                 :                : static bool
 2581 andrew@dunslane.net        26                 :           1195 : gbt_textgt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 27                 :                : {
 4751 tgl@sss.pgh.pa.us          28                 :           1195 :     return DatumGetBool(DirectFunctionCall2Coll(text_gt,
                                 29                 :                :                                                 collation,
                                 30                 :                :                                                 PointerGetDatum(a),
                                 31                 :                :                                                 PointerGetDatum(b)));
                                 32                 :                : }
                                 33                 :                : 
                                 34                 :                : static bool
 2581 andrew@dunslane.net        35                 :           1202 : gbt_textge(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 36                 :                : {
 4751 tgl@sss.pgh.pa.us          37                 :           1202 :     return DatumGetBool(DirectFunctionCall2Coll(text_ge,
                                 38                 :                :                                                 collation,
                                 39                 :                :                                                 PointerGetDatum(a),
                                 40                 :                :                                                 PointerGetDatum(b)));
                                 41                 :                : }
                                 42                 :                : 
                                 43                 :                : static bool
 2581 andrew@dunslane.net        44                 :            295 : gbt_texteq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 45                 :                : {
 4751 tgl@sss.pgh.pa.us          46                 :            295 :     return DatumGetBool(DirectFunctionCall2Coll(texteq,
                                 47                 :                :                                                 collation,
                                 48                 :                :                                                 PointerGetDatum(a),
                                 49                 :                :                                                 PointerGetDatum(b)));
                                 50                 :                : }
                                 51                 :                : 
                                 52                 :                : static bool
 2581 andrew@dunslane.net        53                 :           1065 : gbt_textle(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 54                 :                : {
 4751 tgl@sss.pgh.pa.us          55                 :           1065 :     return DatumGetBool(DirectFunctionCall2Coll(text_le,
                                 56                 :                :                                                 collation,
                                 57                 :                :                                                 PointerGetDatum(a),
                                 58                 :                :                                                 PointerGetDatum(b)));
                                 59                 :                : }
                                 60                 :                : 
                                 61                 :                : static bool
 2581 andrew@dunslane.net        62                 :            995 : gbt_textlt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 63                 :                : {
 4751 tgl@sss.pgh.pa.us          64                 :            995 :     return DatumGetBool(DirectFunctionCall2Coll(text_lt,
                                 65                 :                :                                                 collation,
                                 66                 :                :                                                 PointerGetDatum(a),
                                 67                 :                :                                                 PointerGetDatum(b)));
                                 68                 :                : }
                                 69                 :                : 
                                 70                 :                : static int32
 2581 andrew@dunslane.net        71                 :          62857 : gbt_textcmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 72                 :                : {
 4751 tgl@sss.pgh.pa.us          73                 :          62857 :     return DatumGetInt32(DirectFunctionCall2Coll(bttextcmp,
                                 74                 :                :                                                  collation,
                                 75                 :                :                                                  PointerGetDatum(a),
                                 76                 :                :                                                  PointerGetDatum(b)));
                                 77                 :                : }
                                 78                 :                : 
                                 79                 :                : static gbtree_vinfo tinfo =
                                 80                 :                : {
                                 81                 :                :     gbt_t_text,
                                 82                 :                :     0,
                                 83                 :                :     false,
                                 84                 :                :     gbt_textgt,
                                 85                 :                :     gbt_textge,
                                 86                 :                :     gbt_texteq,
                                 87                 :                :     gbt_textle,
                                 88                 :                :     gbt_textlt,
                                 89                 :                :     gbt_textcmp,
                                 90                 :                :     NULL
                                 91                 :                : };
                                 92                 :                : 
                                 93                 :                : /* bpchar needs its own comparison rules */
                                 94                 :                : 
                                 95                 :                : static bool
  827                            96                 :            596 : gbt_bpchargt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                 97                 :                : {
                                 98                 :            596 :     return DatumGetBool(DirectFunctionCall2Coll(bpchargt,
                                 99                 :                :                                                 collation,
                                100                 :                :                                                 PointerGetDatum(a),
                                101                 :                :                                                 PointerGetDatum(b)));
                                102                 :                : }
                                103                 :                : 
                                104                 :                : static bool
                                105                 :            605 : gbt_bpcharge(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                106                 :                : {
                                107                 :            605 :     return DatumGetBool(DirectFunctionCall2Coll(bpcharge,
                                108                 :                :                                                 collation,
                                109                 :                :                                                 PointerGetDatum(a),
                                110                 :                :                                                 PointerGetDatum(b)));
                                111                 :                : }
                                112                 :                : 
                                113                 :                : static bool
                                114                 :             71 : gbt_bpchareq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                115                 :                : {
                                116                 :             71 :     return DatumGetBool(DirectFunctionCall2Coll(bpchareq,
                                117                 :                :                                                 collation,
                                118                 :                :                                                 PointerGetDatum(a),
                                119                 :                :                                                 PointerGetDatum(b)));
                                120                 :                : }
                                121                 :                : 
                                122                 :                : static bool
                                123                 :            534 : gbt_bpcharle(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                124                 :                : {
                                125                 :            534 :     return DatumGetBool(DirectFunctionCall2Coll(bpcharle,
                                126                 :                :                                                 collation,
                                127                 :                :                                                 PointerGetDatum(a),
                                128                 :                :                                                 PointerGetDatum(b)));
                                129                 :                : }
                                130                 :                : 
                                131                 :                : static bool
                                132                 :            463 : gbt_bpcharlt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                133                 :                : {
                                134                 :            463 :     return DatumGetBool(DirectFunctionCall2Coll(bpcharlt,
                                135                 :                :                                                 collation,
                                136                 :                :                                                 PointerGetDatum(a),
                                137                 :                :                                                 PointerGetDatum(b)));
                                138                 :                : }
                                139                 :                : 
                                140                 :                : static int32
                                141                 :             71 : gbt_bpcharcmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
                                142                 :                : {
                                143                 :             71 :     return DatumGetInt32(DirectFunctionCall2Coll(bpcharcmp,
                                144                 :                :                                                  collation,
                                145                 :                :                                                  PointerGetDatum(a),
                                146                 :                :                                                  PointerGetDatum(b)));
                                147                 :                : }
                                148                 :                : 
                                149                 :                : static gbtree_vinfo bptinfo =
                                150                 :                : {
                                151                 :                :     gbt_t_bpchar,
                                152                 :                :     0,
                                153                 :                :     false,
                                154                 :                :     gbt_bpchargt,
                                155                 :                :     gbt_bpcharge,
                                156                 :                :     gbt_bpchareq,
                                157                 :                :     gbt_bpcharle,
                                158                 :                :     gbt_bpcharlt,
                                159                 :                :     gbt_bpcharcmp,
                                160                 :                :     NULL
                                161                 :                : };
                                162                 :                : 
                                163                 :                : 
                                164                 :                : /**************************************************
                                165                 :                :  * Text ops
                                166                 :                :  **************************************************/
                                167                 :                : 
                                168                 :                : 
                                169                 :                : Datum
 7168 bruce@momjian.us          170                 :           3019 : gbt_text_compress(PG_FUNCTION_ARGS)
                                171                 :                : {
                                172                 :           3019 :     GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
                                173                 :                : 
 6756                           174         [ +  + ]:           3019 :     if (tinfo.eml == 0)
                                175                 :                :     {
 6862 teodor@sigaev.ru          176                 :              4 :         tinfo.eml = pg_database_encoding_max_length();
                                177                 :                :     }
                                178                 :                : 
 7168 bruce@momjian.us          179                 :           3019 :     PG_RETURN_POINTER(gbt_var_compress(entry, &tinfo));
                                180                 :                : }
                                181                 :                : 
                                182                 :                : Datum
                                183                 :           1010 : gbt_bpchar_compress(PG_FUNCTION_ARGS)
                                184                 :                : {
                                185                 :                :     /* This should never have been distinct from gbt_text_compress */
  827 tgl@sss.pgh.pa.us         186                 :           1010 :     return gbt_text_compress(fcinfo);
                                187                 :                : }
                                188                 :                : 
                                189                 :                : 
                                190                 :                : 
                                191                 :                : Datum
 7261 teodor@sigaev.ru          192                 :           4823 : gbt_text_consistent(PG_FUNCTION_ARGS)
                                193                 :                : {
 7168 bruce@momjian.us          194                 :           4823 :     GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
                                195                 :           4823 :     void       *query = (void *) DatumGetTextP(PG_GETARG_DATUM(1));
                                196                 :           4823 :     StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
                                197                 :                : 
                                198                 :                :     /* Oid      subtype = PG_GETARG_OID(3); */
 5844 tgl@sss.pgh.pa.us         199                 :           4823 :     bool       *recheck = (bool *) PG_GETARG_POINTER(4);
                                200                 :                :     bool        retval;
                                201                 :           4823 :     GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
 7168 bruce@momjian.us          202                 :           4823 :     GBT_VARKEY_R r = gbt_var_key_readable(key);
                                203                 :                : 
                                204                 :                :     /* All cases served by this function are exact */
 5844 tgl@sss.pgh.pa.us         205                 :           4823 :     *recheck = false;
                                206                 :                : 
 6756 bruce@momjian.us          207         [ -  + ]:           4823 :     if (tinfo.eml == 0)
                                208                 :                :     {
 6862 teodor@sigaev.ru          209                 :UBC           0 :         tinfo.eml = pg_database_encoding_max_length();
                                210                 :                :     }
                                211                 :                : 
 4741 tgl@sss.pgh.pa.us         212                 :CBC        9646 :     retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
 2581 andrew@dunslane.net       213                 :           4823 :                                 GIST_LEAF(entry), &tinfo, fcinfo->flinfo);
                                214                 :                : 
 7168 bruce@momjian.us          215                 :           4823 :     PG_RETURN_BOOL(retval);
                                216                 :                : }
                                217                 :                : 
                                218                 :                : 
                                219                 :                : Datum
 7261 teodor@sigaev.ru          220                 :           2333 : gbt_bpchar_consistent(PG_FUNCTION_ARGS)
                                221                 :                : {
 7168 bruce@momjian.us          222                 :           2333 :     GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
 2400 tgl@sss.pgh.pa.us         223                 :           2333 :     void       *query = (void *) DatumGetTextP(PG_GETARG_DATUM(1));
 7168 bruce@momjian.us          224                 :           2333 :     StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
                                225                 :                : 
                                226                 :                :     /* Oid      subtype = PG_GETARG_OID(3); */
 5844 tgl@sss.pgh.pa.us         227                 :           2333 :     bool       *recheck = (bool *) PG_GETARG_POINTER(4);
                                228                 :                :     bool        retval;
                                229                 :           2333 :     GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
 7168 bruce@momjian.us          230                 :           2333 :     GBT_VARKEY_R r = gbt_var_key_readable(key);
                                231                 :                : 
                                232                 :                :     /* All cases served by this function are exact */
 5844 tgl@sss.pgh.pa.us         233                 :           2333 :     *recheck = false;
                                234                 :                : 
  827                           235         [ +  + ]:           2333 :     if (bptinfo.eml == 0)
                                236                 :                :     {
                                237                 :              1 :         bptinfo.eml = pg_database_encoding_max_length();
                                238                 :                :     }
                                239                 :                : 
                                240                 :           4666 :     retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
                                241                 :           2333 :                                 GIST_LEAF(entry), &bptinfo, fcinfo->flinfo);
 7168 bruce@momjian.us          242                 :           2333 :     PG_RETURN_BOOL(retval);
                                243                 :                : }
                                244                 :                : 
                                245                 :                : 
                                246                 :                : Datum
 7261 teodor@sigaev.ru          247                 :           2492 : gbt_text_union(PG_FUNCTION_ARGS)
                                248                 :                : {
 7168 bruce@momjian.us          249                 :           2492 :     GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
                                250                 :           2492 :     int32      *size = (int *) PG_GETARG_POINTER(1);
                                251                 :                : 
 4741 tgl@sss.pgh.pa.us         252                 :           2492 :     PG_RETURN_POINTER(gbt_var_union(entryvec, size, PG_GET_COLLATION(),
                                253                 :                :                                     &tinfo, fcinfo->flinfo));
                                254                 :                : }
                                255                 :                : 
                                256                 :                : 
                                257                 :                : Datum
 7261 teodor@sigaev.ru          258                 :             19 : gbt_text_picksplit(PG_FUNCTION_ARGS)
                                259                 :                : {
 7168 bruce@momjian.us          260                 :             19 :     GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
                                261                 :             19 :     GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
                                262                 :                : 
 4741 tgl@sss.pgh.pa.us         263                 :             19 :     gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
                                264                 :                :                       &tinfo, fcinfo->flinfo);
 7168 bruce@momjian.us          265                 :             19 :     PG_RETURN_POINTER(v);
                                266                 :                : }
                                267                 :                : 
                                268                 :                : Datum
 7261 teodor@sigaev.ru          269                 :           2489 : gbt_text_same(PG_FUNCTION_ARGS)
                                270                 :                : {
 7168 bruce@momjian.us          271                 :           2489 :     Datum       d1 = PG_GETARG_DATUM(0);
                                272                 :           2489 :     Datum       d2 = PG_GETARG_DATUM(1);
                                273                 :           2489 :     bool       *result = (bool *) PG_GETARG_POINTER(2);
                                274                 :                : 
 2581 andrew@dunslane.net       275                 :           2489 :     *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo);
 4741 tgl@sss.pgh.pa.us         276                 :           2489 :     PG_RETURN_POINTER(result);
                                277                 :                : }
                                278                 :                : 
                                279                 :                : 
                                280                 :                : Datum
 7261 teodor@sigaev.ru          281                 :           9555 : gbt_text_penalty(PG_FUNCTION_ARGS)
                                282                 :                : {
 7168 bruce@momjian.us          283                 :           9555 :     GISTENTRY  *o = (GISTENTRY *) PG_GETARG_POINTER(0);
                                284                 :           9555 :     GISTENTRY  *n = (GISTENTRY *) PG_GETARG_POINTER(1);
 6912 neilc@samurai.com         285                 :           9555 :     float      *result = (float *) PG_GETARG_POINTER(2);
                                286                 :                : 
 4741 tgl@sss.pgh.pa.us         287                 :           9555 :     PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(),
                                288                 :                :                                       &tinfo, fcinfo->flinfo));
                                289                 :                : }
        

Generated by: LCOV version 2.1-beta2-3-g6141622