Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * scankey.c
4 : : * scan key support code
5 : : *
6 : : * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7 : : * Portions Copyright (c) 1994, Regents of the University of California
8 : : *
9 : : *
10 : : * IDENTIFICATION
11 : : * src/backend/access/common/scankey.c
12 : : *
13 : : *-------------------------------------------------------------------------
14 : : */
15 : : #include "postgres.h"
16 : :
17 : : #include "access/skey.h"
18 : : #include "catalog/pg_collation.h"
19 : :
20 : :
21 : : /*
22 : : * ScanKeyEntryInitialize
23 : : * Initializes a scan key entry given all the field values.
24 : : * The target procedure is specified by OID (but can be invalid
25 : : * if SK_SEARCHNULL or SK_SEARCHNOTNULL is set).
26 : : *
27 : : * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
28 : : * itself, because that's what will be used for any subsidiary info attached
29 : : * to the ScanKey's FmgrInfo record.
30 : : */
31 : : void
10651 scrappy@hub.org 32 :CBC 186059 : ScanKeyEntryInitialize(ScanKey entry,
33 : : int flags,
34 : : AttrNumber attributeNumber,
35 : : StrategyNumber strategy,
36 : : Oid subtype,
37 : : Oid collation,
38 : : RegProcedure procedure,
39 : : Datum argument)
40 : : {
10226 bruce@momjian.us 41 : 186059 : entry->sk_flags = flags;
42 : 186059 : entry->sk_attno = attributeNumber;
7972 tgl@sss.pgh.pa.us 43 : 186059 : entry->sk_strategy = strategy;
7969 44 : 186059 : entry->sk_subtype = subtype;
5261 45 : 186059 : entry->sk_collation = collation;
7969 46 : 186059 : entry->sk_argument = argument;
6728 47 [ + + ]: 186059 : if (RegProcedureIsValid(procedure))
48 : : {
49 : 123826 : fmgr_info(procedure, &entry->sk_func);
50 : : }
51 : : else
52 : : {
5727 53 [ - + ]: 62233 : Assert(flags & (SK_SEARCHNULL | SK_SEARCHNOTNULL));
6728 54 [ + - + - : 435631 : MemSet(&entry->sk_func, 0, sizeof(entry->sk_func));
+ - + - +
+ ]
55 : : }
7969 56 : 186059 : }
57 : :
58 : : /*
59 : : * ScanKeyInit
60 : : * Shorthand version of ScanKeyEntryInitialize: flags and subtype
61 : : * are assumed to be zero (the usual value), and collation is defaulted.
62 : : *
63 : : * This is the recommended version for hardwired lookups in system catalogs.
64 : : * It cannot handle NULL arguments, unary operators, or nondefault operators,
65 : : * but we need none of those features for most hardwired lookups.
66 : : *
67 : : * We set collation to C_COLLATION_OID always. This is the correct value
68 : : * for all collation-aware columns in system catalogs, and it will be ignored
69 : : * for other column types, so it's not worth trying to be more finicky.
70 : : *
71 : : * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
72 : : * itself, because that's what will be used for any subsidiary info attached
73 : : * to the ScanKey's FmgrInfo record.
74 : : */
75 : : void
76 : 5573387 : ScanKeyInit(ScanKey entry,
77 : : AttrNumber attributeNumber,
78 : : StrategyNumber strategy,
79 : : RegProcedure procedure,
80 : : Datum argument)
81 : : {
82 : 5573387 : entry->sk_flags = 0;
83 : 5573387 : entry->sk_attno = attributeNumber;
84 : 5573387 : entry->sk_strategy = strategy;
85 : 5573387 : entry->sk_subtype = InvalidOid;
2454 86 : 5573387 : entry->sk_collation = C_COLLATION_OID;
10226 bruce@momjian.us 87 : 5573387 : entry->sk_argument = argument;
10096 webmaster@postgresql 88 : 5573387 : fmgr_info(procedure, &entry->sk_func);
10651 scrappy@hub.org 89 : 5573387 : }
90 : :
91 : : /*
92 : : * ScanKeyEntryInitializeWithInfo
93 : : * Initializes a scan key entry using an already-completed FmgrInfo
94 : : * function lookup record.
95 : : *
96 : : * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
97 : : * itself, because that's what will be used for any subsidiary info attached
98 : : * to the ScanKey's FmgrInfo record.
99 : : */
100 : : void
8736 tgl@sss.pgh.pa.us 101 : 21424115 : ScanKeyEntryInitializeWithInfo(ScanKey entry,
102 : : int flags,
103 : : AttrNumber attributeNumber,
104 : : StrategyNumber strategy,
105 : : Oid subtype,
106 : : Oid collation,
107 : : FmgrInfo *finfo,
108 : : Datum argument)
109 : : {
110 : 21424115 : entry->sk_flags = flags;
111 : 21424115 : entry->sk_attno = attributeNumber;
7972 112 : 21424115 : entry->sk_strategy = strategy;
7969 113 : 21424115 : entry->sk_subtype = subtype;
5261 114 : 21424115 : entry->sk_collation = collation;
8736 115 : 21424115 : entry->sk_argument = argument;
7972 116 : 21424115 : fmgr_info_copy(&entry->sk_func, finfo, CurrentMemoryContext);
5324 peter_e@gmx.net 117 : 21424115 : }
|