From 97bbc22a1d9d5b1b515e7f731a5084c575c0ac03 Mon Sep 17 00:00:00 2001 From: Pavel Safonov Date: Thu, 22 Dec 2022 11:22:02 +0300 Subject: [PATCH] postgres: add page arg in pg_btree, change args names in pg_heap --- format/format.go | 10 +++++++--- .../postgres/common/pg_btree/postgres/pg_btree.go | 8 +++++--- format/postgres/common/pg_heap/postgres/pg_heap.go | 2 +- format/postgres/pg_btree.go | 14 ++++++++++---- format/postgres/pg_heap.go | 6 +++--- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/format/format.go b/format/format.go index 3daadf254..a260c493b 100644 --- a/format/format.go +++ b/format/format.go @@ -332,7 +332,11 @@ type PostgresIn struct { } type PostgresHeapIn struct { - Flavour string `doc:"PostgreSQL flavour: postgres14, pgproee14.., postgres10"` - PageNumber int `doc:"First page number in file, default is 0"` - SegmentNumber int `doc:"Segment file number (16790.1 is 1), default is 0"` + Flavour string `doc:"PostgreSQL flavour: postgres14, pgproee14.., postgres10"` + Page int `doc:"First page number in file, default is 0"` + Segment int `doc:"Segment file number (16790.1 is 1), default is 0"` +} + +type PostgresBTreeIn struct { + Page int `doc:"First page number in file, default is 0"` } diff --git a/format/postgres/common/pg_btree/postgres/pg_btree.go b/format/postgres/common/pg_btree/postgres/pg_btree.go index 8ec52e8d0..e349ffb62 100644 --- a/format/postgres/common/pg_btree/postgres/pg_btree.go +++ b/format/postgres/common/pg_btree/postgres/pg_btree.go @@ -1,6 +1,7 @@ package postgres import ( + "github.com/wader/fq/format" "github.com/wader/fq/format/postgres/common" "github.com/wader/fq/format/postgres/common/pg_heap/postgres" "github.com/wader/fq/pkg/decode" @@ -66,8 +67,9 @@ const ( // IndexTupleData *IndexTuple; /* total size (bytes): 8 */ -func DecodePgBTree(d *decode.D) any { +func DecodePgBTree(d *decode.D, args format.PostgresBTreeIn) any { btree := &BTree{ + Args: args, PageSize: common.PageSize, } decodeBTreePages(btree, d) @@ -75,13 +77,13 @@ func DecodePgBTree(d *decode.D) any { } type BTree struct { + Args format.PostgresBTreeIn PageSize uint64 page *postgres.HeapPage } func decodeBTreePages(btree *BTree, d *decode.D) { - for i := 0; ; i++ { - + for i := btree.Args.Page; ; i++ { page := &postgres.HeapPage{} if btree.page != nil { // use prev page diff --git a/format/postgres/common/pg_heap/postgres/pg_heap.go b/format/postgres/common/pg_heap/postgres/pg_heap.go index 36239dda0..2bfc7f3fb 100644 --- a/format/postgres/common/pg_heap/postgres/pg_heap.go +++ b/format/postgres/common/pg_heap/postgres/pg_heap.go @@ -144,7 +144,7 @@ func Decode(heap *Heap, d *decode.D) any { } func decodeHeapPages(heap *Heap, d *decode.D) { - blockNumber := uint32(heap.Args.PageNumber + heap.Args.SegmentNumber*common.RelSegSize) + blockNumber := uint32(heap.Args.Page + heap.Args.Segment*common.RelSegSize) count := int64(0) for { if end, _ := d.TryEnd(); end { diff --git a/format/postgres/pg_btree.go b/format/postgres/pg_btree.go index 5e510c65c..3812867e2 100644 --- a/format/postgres/pg_btree.go +++ b/format/postgres/pg_btree.go @@ -18,13 +18,19 @@ func init() { Name: format.PG_BTREE, Description: "PostgreSQL btree index file", DecodeFn: decodePgBTree, - RootArray: true, - RootName: "pages", + DecodeInArg: format.PostgresBTreeIn{ + Page: 0, + }, + RootArray: true, + RootName: "pages", }) interp.RegisterFS(pgBTreeFS) } func decodePgBTree(d *decode.D, in any) any { - d.Endian = decode.LittleEndian - return postgres.DecodePgBTree(d) + pgIn, ok := in.(format.PostgresBTreeIn) + if !ok { + d.Fatalf("DecodeInArg must be PostgresBTreeIn!\n") + } + return postgres.DecodePgBTree(d, pgIn) } diff --git a/format/postgres/pg_heap.go b/format/postgres/pg_heap.go index 885bfe545..23d71f755 100644 --- a/format/postgres/pg_heap.go +++ b/format/postgres/pg_heap.go @@ -23,9 +23,9 @@ func init() { Description: "PostgreSQL heap file", DecodeFn: decodePgheap, DecodeInArg: format.PostgresHeapIn{ - Flavour: PG_FLAVOUR_POSTGRES14, - PageNumber: 0, - SegmentNumber: 0, + Flavour: PG_FLAVOUR_POSTGRES14, + Page: 0, + Segment: 0, }, RootArray: true, RootName: "pages",