PostgreSQL Source Code  git master
sequence.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * sequence.c
4  * Generic routines for sequence-related 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/sequence/sequence.c
12  *
13  *
14  * NOTES
15  * This file contains sequence_ routines that implement access to sequences
16  * (in contrast to other relation types like indexes).
17  *
18  *-------------------------------------------------------------------------
19  */
20 
21 #include "postgres.h"
22 
23 #include "access/relation.h"
24 #include "access/sequence.h"
25 #include "storage/lmgr.h"
26 
27 static inline void validate_relation_kind(Relation r);
28 
29 /* ----------------
30  * sequence_open - open a sequence relation by relation OID
31  *
32  * This is essentially relation_open plus check that the relation
33  * is a sequence.
34  * ----------------
35  */
37 sequence_open(Oid relationId, LOCKMODE lockmode)
38 {
39  Relation r;
40 
41  r = relation_open(relationId, lockmode);
42 
44 
45  return r;
46 }
47 
48 /* ----------------
49  * sequence_close - close a sequence
50  *
51  * If lockmode is not "NoLock", we then release the specified lock.
52  *
53  * Note that it is often sensible to hold a lock beyond relation_close;
54  * in that case, the lock is released automatically at xact end.
55  * ----------------
56  */
57 void
58 sequence_close(Relation relation, LOCKMODE lockmode)
59 {
60  relation_close(relation, lockmode);
61 }
62 
63 /* ----------------
64  * validate_relation_kind - check the relation's kind
65  *
66  * Make sure relkind is from a sequence.
67  * ----------------
68  */
69 static inline void
71 {
72  if (r->rd_rel->relkind != RELKIND_SEQUENCE)
73  ereport(ERROR,
74  (errcode(ERRCODE_WRONG_OBJECT_TYPE),
75  errmsg("cannot open relation \"%s\"",
78 }
static void validate_relation_kind(Relation r)
Definition: sequence.c:70
Relation sequence_open(Oid relationId, LOCKMODE lockmode)
Definition: sequence.c:37
void sequence_close(Relation relation, LOCKMODE lockmode)
Definition: sequence.c:58
int errcode(int sqlerrcode)
Definition: elog.c:857
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149
int LOCKMODE
Definition: lockdefs.h:26
int errdetail_relkind_not_supported(char relkind)
Definition: pg_class.c:24
unsigned int Oid
Definition: postgres_ext.h:31
#define RelationGetRelationName(relation)
Definition: rel.h:539
void relation_close(Relation relation, LOCKMODE lockmode)
Definition: relation.c:205
Relation relation_open(Oid relationId, LOCKMODE lockmode)
Definition: relation.c:47
Form_pg_class rd_rel
Definition: rel.h:111