Line data Source code
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 "utils/rel.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 : */ 36 : Relation 37 386028 : sequence_open(Oid relationId, LOCKMODE lockmode) 38 : { 39 : Relation r; 40 : 41 386028 : r = relation_open(relationId, lockmode); 42 : 43 386028 : validate_relation_kind(r); 44 : 45 386022 : 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 385892 : sequence_close(Relation relation, LOCKMODE lockmode) 59 : { 60 385892 : relation_close(relation, lockmode); 61 385892 : } 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 70 386028 : validate_relation_kind(Relation r) 71 : { 72 386028 : if (r->rd_rel->relkind != RELKIND_SEQUENCE) 73 6 : ereport(ERROR, 74 : (errcode(ERRCODE_WRONG_OBJECT_TYPE), 75 : errmsg("cannot open relation \"%s\"", 76 : RelationGetRelationName(r)), 77 : errdetail_relkind_not_supported(r->rd_rel->relkind))); 78 386022 : }