PostgreSQL Source Code: src/backend/commands/lockcmds.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

16

29

33 Oid oldrelid, void *arg);

35 List *ancestor_views);

36

37

38

39

40void

42{

44

45

46

47

49 {

51 bool recurse = rv->inh;

52 Oid reloid;

53

57 &lockstmt->mode);

58

61 else if (recurse)

63 }

64}

65

66

67

68

69

70static void

72 void *arg)

73{

75 char relkind;

76 char relpersistence;

78

80 return;

82 if (!relkind)

83 return;

84

85

86

87 if (relkind != RELKIND_RELATION && relkind != RELKIND_PARTITIONED_TABLE &&

88 relkind != RELKIND_VIEW)

90 (errcode(ERRCODE_WRONG_OBJECT_TYPE),

91 errmsg("cannot lock relation \"%s\"",

94

95

96

97

98

100 if (relpersistence == RELPERSISTENCE_TEMP)

102

103

107}

108

109

110

111

112

113

114

115

116static void

118{

119 List *children;

121

123

124 foreach(lc, children)

125 {

127

128

129 if (childreloid == reloid)

130 continue;

131

132 if (!nowait)

135 {

136

138

140 continue;

142 (errcode(ERRCODE_LOCK_NOT_AVAILABLE),

143 errmsg("could not obtain lock on relation \"%s\"",

145 }

146

147

148

149

150

152 {

153

155 continue;

156 }

157 }

158}

159

160

161

162

163

164

165

166

167typedef struct

168{

175

176static bool

178{

179 if (node == NULL)

180 return false;

181

183 {

186

187 foreach(rtable, query->rtable)

188 {

191

192 Oid relid = rte->relid;

193 char relkind = rte->relkind;

195

196

197 if (relkind != RELKIND_RELATION && relkind != RELKIND_PARTITIONED_TABLE &&

198 relkind != RELKIND_VIEW)

199 continue;

200

201

202

203

204

206 continue;

207

208

209

210

211

216

217

218 if (!context->nowait)

222 (errcode(ERRCODE_LOCK_NOT_AVAILABLE),

223 errmsg("could not obtain lock on relation \"%s\"",

225

226 if (relkind == RELKIND_VIEW)

229 else if (rte->inh)

231 }

232

235 context,

237 }

238

241 context);

242}

243

244static void

246 List *ancestor_views)

247{

250 Query *viewquery;

251

252

255

256

257

258

259

261 context.nowait = nowait;

264 else

266 context.viewoid = reloid;

268

270

272

274}

275

276

277

278

281{

284

285

287

288

291

292

295

297

298 return aclresult;

299}

AclMode aclmask(const Acl *acl, Oid roleid, Oid ownerId, AclMode mask, AclMaskHow how)

void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)

AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode)

#define OidIsValid(objectId)

int errcode(int sqlerrcode)

int errmsg(const char *fmt,...)

#define ereport(elevel,...)

List * lappend_oid(List *list, Oid datum)

List * list_delete_last(List *list)

bool list_member_oid(const List *list, Oid datum)

bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode)

void UnlockRelationOid(Oid relid, LOCKMODE lockmode)

void LockRelationOid(Oid relid, LOCKMODE lockmode)

static AclResult LockTableAclCheck(Oid reloid, LOCKMODE lockmode, Oid userid)

static void RangeVarCallbackForLockTable(const RangeVar *rv, Oid relid, Oid oldrelid, void *arg)

void LockTableCommand(LockStmt *lockstmt)

static void LockViewRecurse(Oid reloid, LOCKMODE lockmode, bool nowait, List *ancestor_views)

static bool LockViewRecurse_walker(Node *node, LockViewRecurse_context *context)

static void LockTableRecurse(Oid reloid, LOCKMODE lockmode, bool nowait)

char * get_rel_name(Oid relid)

char get_rel_persistence(Oid relid)

char get_rel_relkind(Oid relid)

Oid RangeVarGetRelidExtended(const RangeVar *relation, LOCKMODE lockmode, uint32 flags, RangeVarGetRelidCallback callback, void *callback_arg)

#define query_tree_walker(q, w, c, f)

#define expression_tree_walker(n, w, c)

#define QTW_IGNORE_JOINALIASES

#define IsA(nodeptr, _type_)

ObjectType get_relkind_objtype(char relkind)

int errdetail_relkind_not_supported(char relkind)

List * find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **numparents)

static Datum ObjectIdGetDatum(Oid X)

#define RelationHasSecurityInvoker(relation)

Query * get_view_query(Relation view)

#define SearchSysCacheExists1(cacheId, key1)

void table_close(Relation relation, LOCKMODE lockmode)

Relation table_open(Oid relationId, LOCKMODE lockmode)

#define XACT_FLAGS_ACCESSEDTEMPNAMESPACE