PostgreSQL Source Code: contrib/pageinspect/hashfuncs.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

12

24

30

31#define IS_INDEX(r) ((r)->rd_rel->relkind == RELKIND_INDEX)

32#define IS_HASH(r) ((r)->rd_rel->relam == HASH_AM_OID)

33

34

35

36

37

39{

44

45

52

53

54

55

56

57

60{

63

64

66 {

68

71 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

72 errmsg("input page is not a valid %s page", "hash"),

73 errdetail("Expected special size %d, got %d.",

76

80 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

81 errmsg("input page is not a valid %s page", "hash"),

82 errdetail("Expected %08x, got %08x.",

84

86 }

87

88

93 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

94 errmsg("invalid hash page type %08x", pagetype)));

95

96

97 if (flags != 0 && (pagetype & flags) == 0)

98 {

99 switch (flags)

100 {

103 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

104 errmsg("page is not a hash meta page")));

105 break;

108 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

109 errmsg("page is not a hash bucket or overflow page")));

110 break;

113 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

114 errmsg("page is not a hash overflow page")));

115 break;

116 default:

118 "hash page of type %08x not in mask %08x",

119 pagetype, flags);

120 break;

121 }

122 }

123

124

125

126

128 {

130

133 (errcode(ERRCODE_INDEX_CORRUPTED),

134 errmsg("invalid magic number for metadata"),

135 errdetail("Expected 0x%08x, got 0x%08x.",

137

140 (errcode(ERRCODE_INDEX_CORRUPTED),

141 errmsg("invalid version for metadata"),

142 errdetail("Expected %d, got %d.",

144 }

145

146 return page;

147}

148

149

150

151

152

153

154

155static void

157{

160 int off;

161

162 stat->dead_items = stat->live_items = 0;

164

165

171

172

174 {

176

178 stat->live_items++;

179 else

180 stat->dead_items++;

181 }

183}

184

185

186

187

188

189

190

193{

197 int pagetype;

198 const char *type;

199

202 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),

203 errmsg("must be superuser to use raw page functions")));

204

206

208 type = "unused";

209 else

210 {

212

213

216 type = "metapage";

218 type = "overflow";

220 type = "bucket";

222 type = "bitmap";

223 else

224 type = "unused";

225 }

226

228}

229

230

231

232

233

234

235

238{

241 int j;

243 bool nulls[9] = {0};

247

250 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),

251 errmsg("must be superuser to use raw page functions")));

252

254

255

257 stat.hasho_flag = stat.hasho_page_id = stat.free_size = 0;

258

260

261

263 elog(ERROR, "return type must be a row type");

265

266 j = 0;

276

278

280}

281

282

283

284

286{

289};

290

291

292

293

294

295

296

297

298

301{

306 bool nulls[3] = {0};

312

315 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),

316 errmsg("must be superuser to use raw page functions")));

317

319 {

321

323

325

327

329

331

333

335

336

338 elog(ERROR, "return type must be a row type");

340

342

344

346 }

347

350

352 {

355 int j;

356

358

361

363

364 j = 0;

367

370

373

375

377 }

378

380}

381

382

383

384

385

386

387

388

389

392{

397 mapbuf;

399 Page mappage;

400 bool bit = false;

404 int32 bitmappage,

405 bitmapbit;

407 int i,

408 j;

410 bool nulls[3] = {0};

412

415 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),

416 errmsg("must be superuser to use raw page functions")));

417

419

422 (errcode(ERRCODE_WRONG_OBJECT_TYPE),

423 errmsg("\"%s\" is not a %s index",

425

428 (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),

429 errmsg("cannot access temporary tables of other sessions")));

430

433 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

434 errmsg("invalid block number")));

435

438 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

439 errmsg("block number %" PRId64 " is out of range for relation \"%s\"",

441

442

445

446

447

448

449

450 if (ovflblkno == 0)

452 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

453 errmsg("invalid overflow block number %u",

458 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

459 errmsg("invalid overflow block number %u",

461

462

463

464

465

467

468 bitmappage = ovflbitno >> BMPG_SHIFT(metap);

469 bitmapbit = ovflbitno & BMPG_MASK(metap);

470

473 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

474 errmsg("invalid overflow block number %u",

476

477 bitmapblkno = metap->hashm_mapp[bitmappage];

478

480

481

485

486 bit = ISSET(freep, bitmapbit) != 0;

487

490

491

493 elog(ERROR, "return type must be a row type");

495

496 j = 0;

500

502

504}

505

506

507

508

509

510

511

512

513

516{

522 int i,

523 j;

525 bool nulls[16] = {0};

528

531 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),

532 errmsg("must be superuser to use raw page functions")));

533

535

536

538 elog(ERROR, "return type must be a row type");

540

542

543 j = 0;

558

562

566

568

570}

ArrayType * construct_array_builtin(Datum *elems, int nelems, Oid elmtype)

#define InvalidBlockNumber

static Datum values[MAXATTR]

#define RelationGetNumberOfBlocks(reln)

static Page BufferGetPage(Buffer buffer)

Size PageGetFreeSpace(const PageData *page)

static uint16 PageGetSpecialSize(const PageData *page)

static Size PageGetPageSize(const PageData *page)

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

static bool PageIsNew(const PageData *page)

static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)

static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)

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

int errcode(int sqlerrcode)

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

#define ereport(elevel,...)

TupleDesc BlessTupleDesc(TupleDesc tupdesc)

AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)

Datum Int64GetDatum(int64 X)

Datum Float8GetDatum(float8 X)

#define PG_GETARG_INT64(n)

#define PG_RETURN_TEXT_P(x)

#define PG_RETURN_DATUM(x)

#define PG_GETARG_BYTEA_P(n)

TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)

#define SRF_IS_FIRSTCALL()

#define SRF_PERCALL_SETUP()

#define SRF_RETURN_NEXT(_funcctx, _result)

#define SRF_FIRSTCALL_INIT()

static Datum HeapTupleGetDatum(const HeapTupleData *tuple)

#define SRF_RETURN_DONE(_funcctx)

#define HashPageGetOpaque(page)

#define HASH_MAX_SPLITPOINTS

#define HashPageGetBitmap(page)

#define HashPageGetMeta(page)

#define BMPG_SHIFT(metap)

Datum hash_bitmap_info(PG_FUNCTION_ARGS)

Datum hash_page_stats(PG_FUNCTION_ARGS)

PG_FUNCTION_INFO_V1(hash_page_type)

Datum hash_page_type(PG_FUNCTION_ARGS)

Datum hash_metapage_info(PG_FUNCTION_ARGS)

struct HashPageStat HashPageStat

static Page verify_hash_page(bytea *raw_page, int flags)

static void GetHashPageStatistics(Page page, HashPageStat *stat)

Datum hash_page_items(PG_FUNCTION_ARGS)

uint32 _hash_ovflblkno_to_bitno(HashMetaPage metap, BlockNumber ovflblkno)

void _hash_relbuf(Relation rel, Buffer buf)

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

uint32 _hash_get_indextuple_hashkey(IndexTuple itup)

HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)

void index_close(Relation relation, LOCKMODE lockmode)

#define ItemIdIsDead(itemId)

#define ItemIdIsValid(itemId)

IndexTupleData * IndexTuple

#define FirstOffsetNumber

Page get_page_from_raw(bytea *raw_page)

static MemoryContext MemoryContextSwitchTo(MemoryContext context)

static Datum PointerGetDatum(const void *X)

static Datum BoolGetDatum(bool X)

static Datum ObjectIdGetDatum(Oid X)

static Datum Int32GetDatum(int32 X)

#define RelationGetRelationName(relation)

#define RELATION_IS_OTHER_TEMP(relation)

Relation relation_open(Oid relationId, LOCKMODE lockmode)

AttInMetadata * attinmeta

MemoryContext multi_call_memory_ctx

BlockNumber hashm_mapp[HASH_MAX_BITMAPS]

RegProcedure hashm_procid

uint32 hashm_spares[HASH_MAX_SPLITPOINTS]

BlockNumber hasho_nextblkno

BlockNumber hasho_prevblkno

BlockNumber hasho_prevblkno

BlockNumber hasho_nextblkno

Datum bit(PG_FUNCTION_ARGS)

text * cstring_to_text(const char *s)