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-2024, 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
10141 scrappy@hub.org 32 :CBC 164552 : 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 : : {
9716 bruce@momjian.us 41 : 164552 : entry->sk_flags = flags;
42 : 164552 : entry->sk_attno = attributeNumber;
7462 tgl@sss.pgh.pa.us 43 : 164552 : entry->sk_strategy = strategy;
7459 44 : 164552 : entry->sk_subtype = subtype;
4751 45 : 164552 : entry->sk_collation = collation;
7459 46 : 164552 : entry->sk_argument = argument;
6218 47 [ + + ]: 164552 : if (RegProcedureIsValid(procedure))
48 : : {
49 : 109600 : fmgr_info(procedure, &entry->sk_func);
50 : : }
51 : : else
52 : : {
5217 53 [ - + ]: 54952 : Assert(flags & (SK_SEARCHNULL | SK_SEARCHNOTNULL));
6218 54 [ + - + - : 384664 : MemSet(&entry->sk_func, 0, sizeof(entry->sk_func));
+ - + - +
+ ]
55 : : }
7459 56 : 164552 : }
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 : 5171289 : ScanKeyInit(ScanKey entry,
77 : : AttrNumber attributeNumber,
78 : : StrategyNumber strategy,
79 : : RegProcedure procedure,
80 : : Datum argument)
81 : : {
82 : 5171289 : entry->sk_flags = 0;
83 : 5171289 : entry->sk_attno = attributeNumber;
84 : 5171289 : entry->sk_strategy = strategy;
85 : 5171289 : entry->sk_subtype = InvalidOid;
1944 86 : 5171289 : entry->sk_collation = C_COLLATION_OID;
9716 bruce@momjian.us 87 : 5171289 : entry->sk_argument = argument;
9586 webmaster@postgresql 88 : 5171289 : fmgr_info(procedure, &entry->sk_func);
10141 scrappy@hub.org 89 : 5171289 : }
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
8226 tgl@sss.pgh.pa.us 101 : 19727236 : 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 : 19727236 : entry->sk_flags = flags;
111 : 19727236 : entry->sk_attno = attributeNumber;
7462 112 : 19727236 : entry->sk_strategy = strategy;
7459 113 : 19727236 : entry->sk_subtype = subtype;
4751 114 : 19727236 : entry->sk_collation = collation;
8226 115 : 19727236 : entry->sk_argument = argument;
7462 116 : 19727236 : fmgr_info_copy(&entry->sk_func, finfo, CurrentMemoryContext);
4814 peter_e@gmx.net 117 : 19727236 : }
|