Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * tableam_indexscan.c
4 : : * Helpers for table AM index scan callbacks.
5 : : *
6 : : *
7 : : * Table AMs can use these functions to implement xs_getnext_slot callbacks.
8 : : * See access/tableam.h.
9 : : *
10 : : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
11 : : * Portions Copyright (c) 1994, Regents of the University of California
12 : : *
13 : : *
14 : : * IDENTIFICATION
15 : : * src/backend/access/table/tableam_indexscan.c
16 : : *
17 : : *-------------------------------------------------------------------------
18 : : */
19 : :
20 : : #include "postgres.h"
21 : :
22 : : #include "access/tableam_indexscan.h"
23 : : #include "utils/builtins.h"
24 : :
25 : : /*
26 : : * Copy all name columns stored as cstrings back into NAMEDATALEN bytes of
27 : : * xs_name_cstring_buf.
28 : : *
29 : : * Called by tableam_index_fill_ios_slot (kept out of line, since it's needed
30 : : * only by index-only scans of indexes on "name" columns).
31 : : */
32 : : pg_attribute_cold void
5 pg@bowt.ie 33 :GNC 7655 : tableam_index_fill_ios_names(IndexScanDesc scan, TupleTableSlot *slot)
34 : : {
35 [ + + ]: 15310 : for (int idx = 0; idx < scan->xs_name_cstring_count; idx++)
36 : : {
37 : 7655 : int attnum = scan->xs_name_cstring_attnums[idx];
38 : : Name name;
39 : :
40 : : /* skip null Datums */
41 [ - + ]: 7655 : if (slot->tts_isnull[attnum])
5 pg@bowt.ie 42 :UNC 0 : continue;
43 : :
44 : : /* use namestrcpy to zero-pad all trailing bytes */
5 pg@bowt.ie 45 :GNC 7655 : name = (Name) (scan->xs_name_cstring_buf + idx * NAMEDATALEN);
46 : 7655 : namestrcpy(name, DatumGetCString(slot->tts_values[attnum]));
47 : 7655 : slot->tts_values[attnum] = NameGetDatum(name);
48 : : }
49 : 7655 : }
|