YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/postgres/src/include/catalog/pg_index.h
Line
Count
Source
1
/*-------------------------------------------------------------------------
2
 *
3
 * pg_index.h
4
 *    definition of the "index" system catalog (pg_index)
5
 *
6
 *
7
 * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
8
 * Portions Copyright (c) 1994, Regents of the University of California
9
 *
10
 * src/include/catalog/pg_index.h
11
 *
12
 * NOTES
13
 *    The Catalog.pm module reads this file and derives schema
14
 *    information.
15
 *
16
 *-------------------------------------------------------------------------
17
 */
18
#ifndef PG_INDEX_H
19
#define PG_INDEX_H
20
21
#include "catalog/genbki.h"
22
#include "catalog/pg_index_d.h"
23
24
/* ----------------
25
 *    pg_index definition.  cpp turns this into
26
 *    typedef struct FormData_pg_index.
27
 * ----------------
28
 */
29
CATALOG(pg_index,2610,IndexRelationId) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
30
{
31
  Oid     indexrelid;   /* OID of the index */
32
  Oid     indrelid;   /* OID of the relation it indexes */
33
  int16   indnatts;   /* total number of columns in index */
34
  int16   indnkeyatts;  /* number of key columns in index */
35
  bool    indisunique;  /* is this a unique index? */
36
  bool    indisprimary; /* is this index for primary key? */
37
  bool    indisexclusion; /* is this index for exclusion constraint? */
38
  bool    indimmediate; /* is uniqueness enforced immediately? */
39
  bool    indisclustered; /* is this the index last clustered by? */
40
  bool    indisvalid;   /* is this index valid for use by queries? */
41
  bool    indcheckxmin; /* must we wait for xmin to be old? */
42
  bool    indisready;   /* is this index ready for inserts? */
43
  bool    indislive;    /* is this index alive at all? */
44
  bool    indisreplident; /* is this index the identity for replication? */
45
46
  /* variable-length fields start here, but we allow direct access to indkey */
47
  int2vector  indkey;     /* column numbers of indexed cols, or 0 */
48
49
#ifdef CATALOG_VARLEN
50
  oidvector indcollation; /* collation identifiers */
51
  oidvector indclass;   /* opclass identifiers */
52
  int2vector  indoption;    /* per-column flags (AM-specific meanings) */
53
  pg_node_tree indexprs;    /* expression trees for index attributes that
54
                 * are not simple column references; one for
55
                 * each zero entry in indkey[] */
56
  pg_node_tree indpred;   /* expression tree for predicate, if a partial
57
                 * index; else NULL */
58
#endif
59
} FormData_pg_index;
60
61
/* ----------------
62
 *    Form_pg_index corresponds to a pointer to a tuple with
63
 *    the format of pg_index relation.
64
 * ----------------
65
 */
66
typedef FormData_pg_index *Form_pg_index;
67
68
#ifdef EXPOSE_TO_CLIENT_CODE
69
70
/*
71
 * Index AMs that support ordered scans must support these two indoption
72
 * bits.  Otherwise, the content of the per-column indoption fields is
73
 * open for future definition.
74
 */
75
#define INDOPTION_DESC      0x0001  /* values are in reverse order */
76
#define INDOPTION_NULLS_FIRST 0x0002  /* NULLs are first instead of last */
77
78
/* Options for YugaByte-based index */
79
#define INDOPTION_HASH      0x0004  /* values are hash-indexed */
80
81
#endif              /* EXPOSE_TO_CLIENT_CODE */
82
83
/*
84
 * Use of these macros is recommended over direct examination of the state
85
 * flag columns where possible; this allows source code compatibility with
86
 * the hacky representation used in 9.2.
87
 */
88
306k
#define IndexIsValid(indexForm) ((indexForm)->indisvalid)
89
612k
#define IndexIsReady(indexForm) ((indexForm)->indisready)
90
37.6k
#define IndexIsLive(indexForm)  ((indexForm)->indislive)
91
92
#endif              /* PG_INDEX_H */