mirror of
https://github.com/wader/fq.git
synced 2024-10-27 12:19:52 +03:00
postgres: refactoring
This commit is contained in:
parent
ae838b921b
commit
296ce68e80
@ -15,7 +15,7 @@ import (
|
|||||||
//
|
//
|
||||||
/* total size (bytes): 4 */
|
/* total size (bytes): 4 */
|
||||||
|
|
||||||
type ItemId struct {
|
type ItemID struct {
|
||||||
Off uint32 // unsigned int lp_off: 15
|
Off uint32 // unsigned int lp_off: 15
|
||||||
Flags uint32 // unsigned int lp_flags: 2
|
Flags uint32 // unsigned int lp_flags: 2
|
||||||
Len uint32 // unsigned int lp_len: 15
|
Len uint32 // unsigned int lp_len: 15
|
||||||
@ -38,7 +38,7 @@ type HeapPage struct {
|
|||||||
PosFreeSpaceEnd int64 // bits pos free space end
|
PosFreeSpaceEnd int64 // bits pos free space end
|
||||||
|
|
||||||
// parsed items positions
|
// parsed items positions
|
||||||
ItemIds []ItemId
|
ItemIds []ItemID
|
||||||
}
|
}
|
||||||
|
|
||||||
func DecodePageHeader(page *HeapPage, d *decode.D) {
|
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
|
/* 1: 7 | 4 */ // unsigned int lp_flags: 2
|
||||||
/* 2: 1 | 4 */ // unsigned int lp_len: 15
|
/* 2: 1 | 4 */ // unsigned int lp_len: 15
|
||||||
d.FieldStruct("item_id", func(d *decode.D) {
|
d.FieldStruct("item_id", func(d *decode.D) {
|
||||||
itemID := ItemId{}
|
itemID := ItemID{}
|
||||||
|
|
||||||
itemPos := d.Pos()
|
itemPos := d.Pos()
|
||||||
itemID.Off = uint32(d.FieldU32("lp_off", common.LpOffMapper))
|
itemID.Off = uint32(d.FieldU32("lp_off", common.LpOffMapper))
|
||||||
|
@ -193,10 +193,10 @@ func decodeTuples(heap *Heap, d *decode.D) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
pos := int64(page.BytesPosBegin)*8 + int64(id.Off)*8
|
pos := (page.BytesPosBegin * 8) + int64(id.Off)*8
|
||||||
tupleDataLen := id.Len - SizeOfHeapTupleHeaderData
|
tupleDataLen := id.Len - SizeOfHeapTupleHeaderData
|
||||||
|
|
||||||
// seek to tuple with ItemId offset
|
// seek to tuple with ItemID offset
|
||||||
d.SeekAbs(pos)
|
d.SeekAbs(pos)
|
||||||
|
|
||||||
// type = struct HeapTupleHeaderData {
|
// type = struct HeapTupleHeaderData {
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/wader/fq/pkg/decode"
|
"github.com/wader/fq/pkg/decode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//nolint:revive
|
||||||
const (
|
const (
|
||||||
BTREE_MAGIC = 0x053162
|
BTREE_MAGIC = 0x053162
|
||||||
P_NONE = 0
|
P_NONE = 0
|
||||||
@ -22,6 +23,7 @@ const (
|
|||||||
BTP_HAS_FULLXID = 1 << 8 /* contains BTDeletedPageData */
|
BTP_HAS_FULLXID = 1 << 8 /* contains BTDeletedPageData */
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//nolint:revive
|
||||||
const (
|
const (
|
||||||
INDEX_SIZE_MASK = 0x1FFF
|
INDEX_SIZE_MASK = 0x1FFF
|
||||||
INDEX_AM_RESERVED_BIT = 0x2000 /* reserved for index-AM specific usage */
|
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)
|
common14.DecodePageHeader(page, d)
|
||||||
})
|
})
|
||||||
d.FieldStruct("meta_page_data", func(d *decode.D) {
|
d.FieldStruct("meta_page_data", func(d *decode.D) {
|
||||||
decodeBTMetaPageData(btree, d)
|
decodeBTMetaPageData(d)
|
||||||
})
|
})
|
||||||
|
|
||||||
pos0 := d.Pos()
|
pos0 := d.Pos()
|
||||||
pos1 := int64(btree.page.BytesPosSpecial) * 8
|
pos1 := btree.page.BytesPosSpecial * 8
|
||||||
d.FieldRawLen("unused0", pos1-pos0)
|
d.FieldRawLen("unused0", pos1-pos0)
|
||||||
d.FieldStruct("page_opaque_data", func(d *decode.D) {
|
d.FieldStruct("page_opaque_data", func(d *decode.D) {
|
||||||
decodeBTPageOpaqueData(btree, d)
|
decodeBTPageOpaqueData(d)
|
||||||
})
|
})
|
||||||
pos2 := d.Pos()
|
pos2 := d.Pos()
|
||||||
bytesPos2 := pos2 / 8
|
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
|
/* 0 | 4 */ // uint32 btm_magic
|
||||||
/* 4 | 4 */ // uint32 btm_version
|
/* 4 | 4 */ // uint32 btm_version
|
||||||
/* 8 | 4 */ // BlockNumber btm_root
|
/* 8 | 4 */ // BlockNumber btm_root
|
||||||
@ -171,7 +173,7 @@ func decodeBTMetaPageData(btree *BTree, d *decode.D) {
|
|||||||
/* 8 | 4 */ // uint32 btpo_level;
|
/* 8 | 4 */ // uint32 btpo_level;
|
||||||
/* 12 | 2 */ // uint16 btpo_flags;
|
/* 12 | 2 */ // uint16 btpo_flags;
|
||||||
/* 14 | 2 */ // BTCycleId btpo_cycleid;
|
/* 14 | 2 */ // BTCycleId btpo_cycleid;
|
||||||
func decodeBTPageOpaqueData(btree *BTree, d *decode.D) {
|
func decodeBTPageOpaqueData(d *decode.D) {
|
||||||
prev := d.FieldU32("btpo_prev")
|
prev := d.FieldU32("btpo_prev")
|
||||||
next := d.FieldU32("btpo_next")
|
next := d.FieldU32("btpo_next")
|
||||||
d.FieldU32("btpo_level")
|
d.FieldU32("btpo_level")
|
||||||
@ -213,10 +215,10 @@ func decodeBTreePage(btree *BTree, d *decode.D) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
pos0 := d.Pos()
|
pos0 := d.Pos()
|
||||||
pos1 := int64(btree.page.BytesPosSpecial) * 8
|
pos1 := btree.page.BytesPosSpecial * 8
|
||||||
d.SeekAbs(pos1)
|
d.SeekAbs(pos1)
|
||||||
d.FieldStruct("page_opaque_data", func(d *decode.D) {
|
d.FieldStruct("page_opaque_data", func(d *decode.D) {
|
||||||
decodeBTPageOpaqueData(btree, d)
|
decodeBTPageOpaqueData(d)
|
||||||
})
|
})
|
||||||
pos2 := d.Pos()
|
pos2 := d.Pos()
|
||||||
bytesPos2 := pos2 / 8
|
bytesPos2 := pos2 / 8
|
||||||
@ -244,9 +246,9 @@ func decodeIndexTuples(btree *BTree, d *decode.D) {
|
|||||||
continue
|
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.SeekAbs(pos)
|
||||||
d.FieldStruct("tuple", func(d *decode.D) {
|
d.FieldStruct("tuple", func(d *decode.D) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user