PostgreSQL Source Code: src/backend/access/hash/hashinsert.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

17

24

27

28

29

30

31

32

33

34

35

36

37void

39{

53

54

55

56

58

59

61 itemsz = MAXALIGN(itemsz);

62

63

65

66

67

68

69

70

73

74

75

76

77

78

79

80

84 errmsg("index row size %zu exceeds hash maximum %zu",

86 errhint("Values larger than a buffer page cannot be indexed.")));

87

88

92

94

95

97

101

102

103

104

105

106

107

108

109

110

112 {

113

115

120

121

125 }

126

127

129 {

131

132

133

134

135

136

138 {

139

141 {

143

145 break;

146 }

147 }

148

149

150

151

152 nextblkno = pageopaque->hasho_nextblkno;

153

155 {

156

157

158

159

160

161

162

165 else

169 }

170 else

171 {

172

173

174

175

176

177

179

180

183

184

186 }

190 }

191

192

193

194

195

197

198

200

201

204

205

207 metap->hashm_ntuples += 1;

208

209

211 (double) metap->hashm_ffactor * (metap->hashm_maxbucket + 1);

212

214

215

217 {

220

222

225

227

230

232

235 }

236

238

239

241

242

243

244

245

249

250

253

254

256}

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

276{

279

282

283

284

285

286

288 {

290

291#ifdef USE_ASSERT_CHECKING

292

294 {

297

300

303 }

304#endif

305 }

306 else

307 {

309

311 }

312

315

317}

318

319

320

321

322

323

324

325

326

327

328void

331{

335 int i;

336

339

341 {

343

346

347

350

352

355 }

356}

357

358

359

360

361

362

363

364

365static void

367{

371 maxoff;

375

376

379 offnum <= maxoff;

381 {

383

386 }

387

389 {

391

392 snapshotConflictHorizon =

395

396

397

398

400

401

403

405

406

407

408

409

410

411

412

413

416

419

422

423

425 {

428

430 xlrec.snapshotConflictHorizon = snapshotConflictHorizon;

432

436

437

438

439

440

441

444

446

448

451 }

452

454

455

456

457

458

460 }

461}

static bool BlockNumberIsValid(BlockNumber blockNumber)

BlockNumber BufferGetBlockNumber(Buffer buffer)

bool IsBufferCleanupOK(Buffer buffer)

void MarkBufferDirty(Buffer buffer)

static Page BufferGetPage(Buffer buffer)

static void LockBuffer(Buffer buffer, BufferLockMode mode)

Size PageGetFreeSpace(const PageData *page)

void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)

static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)

static void * PageGetItem(PageData *page, const ItemIdData *itemId)

static void PageSetLSN(Page page, XLogRecPtr lsn)

#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)

static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)

#define Assert(condition)

int errcode(int sqlerrcode)

int errhint(const char *fmt,...) pg_attribute_printf(1

#define ereport(elevel,...)

TransactionId index_compute_xid_horizon_for_tuples(Relation irel, Relation hrel, Buffer ibuf, OffsetNumber *itemnos, int nitems)

#define HashPageGetOpaque(page)

#define H_BUCKET_BEING_SPLIT(opaque)

#define HashPageGetMeta(page)

#define H_HAS_DEAD_TUPLES(opaque)

#define HashMaxItemSize(page)

#define XLOG_HASH_VACUUM_ONE_PAGE

#define SizeOfHashVacuumOnePage

void _hash_doinsert(Relation rel, IndexTuple itup, Relation heapRel, bool sorted)

OffsetNumber _hash_pgaddtup(Relation rel, Buffer buf, Size itemsize, IndexTuple itup, bool appendtup)

void _hash_pgaddmultitup(Relation rel, Buffer buf, IndexTuple *itups, OffsetNumber *itup_offsets, uint16 nitups)

static void _hash_vacuum_one_page(Relation rel, Relation hrel, Buffer metabuf, Buffer buf)

Buffer _hash_addovflpage(Relation rel, Buffer metabuf, Buffer buf, bool retain_pin)

void _hash_relbuf(Relation rel, Buffer buf)

void _hash_dropbuf(Relation rel, Buffer buf)

Buffer _hash_getbuf(Relation rel, BlockNumber blkno, int access, int flags)

void _hash_finish_split(Relation rel, Buffer metabuf, Buffer obuf, Bucket obucket, uint32 maxbucket, uint32 highmask, uint32 lowmask)

Buffer _hash_getbucketbuf_from_hashkey(Relation rel, uint32 hashkey, int access, HashMetaPage *cachedmetap)

void _hash_expandtable(Relation rel, Buffer metabuf)

uint32 _hash_get_indextuple_hashkey(IndexTuple itup)

OffsetNumber _hash_binsearch(Page page, uint32 hash_value)

void _hash_checkpage(Relation rel, Buffer buf, int flags)

#define ItemIdIsDead(itemId)

IndexTupleData * IndexTuple

static Size IndexTupleSize(const IndexTupleData *itup)

#define START_CRIT_SECTION()

#define END_CRIT_SECTION()

#define InvalidOffsetNumber

#define OffsetNumberNext(offsetNumber)

#define FirstOffsetNumber

static char buf[DEFAULT_XLOG_SEG_SIZE]

void CheckForSerializableConflictIn(Relation relation, const ItemPointerData *tid, BlockNumber blkno)

#define RelationGetRelationName(relation)

#define RelationIsAccessibleInLogicalDecoding(relation)

#define RelationNeedsWAL(relation)

XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)

void XLogRegisterBufData(uint8 block_id, const void *data, uint32 len)

void XLogRegisterData(const void *data, uint32 len)

void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)

void XLogBeginInsert(void)