1
1
mirror of https://github.com/wader/fq.git synced 2024-10-27 12:19:52 +03:00

postgres: refactoring

This commit is contained in:
Pavel Safonov 2022-09-22 13:32:03 +03:00
parent ae838b921b
commit 296ce68e80
3 changed files with 16 additions and 14 deletions

View File

@ -15,7 +15,7 @@ import (
//
/* total size (bytes): 4 */
type ItemId struct {
type ItemID struct {
Off uint32 // unsigned int lp_off: 15
Flags uint32 // unsigned int lp_flags: 2
Len uint32 // unsigned int lp_len: 15
@ -38,7 +38,7 @@ type HeapPage struct {
PosFreeSpaceEnd int64 // bits pos free space end
// parsed items positions
ItemIds []ItemId
ItemIds []ItemID
}
func DecodePageHeader(page *HeapPage, d *decode.D) {
@ -84,7 +84,7 @@ func decodeItemIdsInternal(page *HeapPage, d *decode.D) {
/* 1: 7 | 4 */ // unsigned int lp_flags: 2
/* 2: 1 | 4 */ // unsigned int lp_len: 15
d.FieldStruct("item_id", func(d *decode.D) {
itemID := ItemId{}
itemID := ItemID{}
itemPos := d.Pos()
itemID.Off = uint32(d.FieldU32("lp_off", common.LpOffMapper))

View File

@ -193,10 +193,10 @@ func decodeTuples(heap *Heap, d *decode.D) {
continue
}
pos := int64(page.BytesPosBegin)*8 + int64(id.Off)*8
pos := (page.BytesPosBegin * 8) + int64(id.Off)*8
tupleDataLen := id.Len - SizeOfHeapTupleHeaderData
// seek to tuple with ItemId offset
// seek to tuple with ItemID offset
d.SeekAbs(pos)
// type = struct HeapTupleHeaderData {

View File

@ -6,6 +6,7 @@ import (
"github.com/wader/fq/pkg/decode"
)
//nolint:revive
const (
BTREE_MAGIC = 0x053162
P_NONE = 0
@ -22,6 +23,7 @@ const (
BTP_HAS_FULLXID = 1 << 8 /* contains BTDeletedPageData */
)
//nolint:revive
const (
INDEX_SIZE_MASK = 0x1FFF
INDEX_AM_RESERVED_BIT = 0x2000 /* reserved for index-AM specific usage */
@ -119,14 +121,14 @@ func decodeBTreeMetaPage(btree *BTree, d *decode.D) {
common14.DecodePageHeader(page, d)
})
d.FieldStruct("meta_page_data", func(d *decode.D) {
decodeBTMetaPageData(btree, d)
decodeBTMetaPageData(d)
})
pos0 := d.Pos()
pos1 := int64(btree.page.BytesPosSpecial) * 8
pos1 := btree.page.BytesPosSpecial * 8
d.FieldRawLen("unused0", pos1-pos0)
d.FieldStruct("page_opaque_data", func(d *decode.D) {
decodeBTPageOpaqueData(btree, d)
decodeBTPageOpaqueData(d)
})
pos2 := d.Pos()
bytesPos2 := pos2 / 8
@ -135,7 +137,7 @@ func decodeBTreeMetaPage(btree *BTree, d *decode.D) {
}
}
func decodeBTMetaPageData(btree *BTree, d *decode.D) {
func decodeBTMetaPageData(d *decode.D) {
/* 0 | 4 */ // uint32 btm_magic
/* 4 | 4 */ // uint32 btm_version
/* 8 | 4 */ // BlockNumber btm_root
@ -171,7 +173,7 @@ func decodeBTMetaPageData(btree *BTree, d *decode.D) {
/* 8 | 4 */ // uint32 btpo_level;
/* 12 | 2 */ // uint16 btpo_flags;
/* 14 | 2 */ // BTCycleId btpo_cycleid;
func decodeBTPageOpaqueData(btree *BTree, d *decode.D) {
func decodeBTPageOpaqueData(d *decode.D) {
prev := d.FieldU32("btpo_prev")
next := d.FieldU32("btpo_next")
d.FieldU32("btpo_level")
@ -213,10 +215,10 @@ func decodeBTreePage(btree *BTree, d *decode.D) {
})
pos0 := d.Pos()
pos1 := int64(btree.page.BytesPosSpecial) * 8
pos1 := btree.page.BytesPosSpecial * 8
d.SeekAbs(pos1)
d.FieldStruct("page_opaque_data", func(d *decode.D) {
decodeBTPageOpaqueData(btree, d)
decodeBTPageOpaqueData(d)
})
pos2 := d.Pos()
bytesPos2 := pos2 / 8
@ -244,9 +246,9 @@ func decodeIndexTuples(btree *BTree, d *decode.D) {
continue
}
pos := int64(page.BytesPosBegin)*8 + int64(id.Off)*8
pos := (page.BytesPosBegin * 8) + int64(id.Off)*8
// seek to tuple with ItemId offset
// seek to tuple with ItemID offset
d.SeekAbs(pos)
d.FieldStruct("tuple", func(d *decode.D) {