2022-08-26 12:12:22 +03:00
|
|
|
package pgpro12
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/wader/fq/format/postgres/common"
|
|
|
|
"github.com/wader/fq/pkg/decode"
|
|
|
|
"github.com/wader/fq/pkg/scalar"
|
|
|
|
)
|
|
|
|
|
|
|
|
// type = struct ControlFileData {
|
|
|
|
/* 0 | 8 */ // uint64 system_identifier;
|
|
|
|
/* 8 | 4 */ // uint32 pg_control_version;
|
|
|
|
/* 12 | 4 */ // uint32 catalog_version_no;
|
|
|
|
/* 16 | 4 */ // DBState state;
|
|
|
|
/* XXX 4-byte hole */
|
|
|
|
/* 24 | 8 */ // pg_time_t time;
|
|
|
|
/* 32 | 8 */ // XLogRecPtr checkPoint;
|
|
|
|
/* 40 | 88 */ // CheckPoint checkPointCopy;
|
|
|
|
/* 128 | 8 */ // XLogRecPtr unloggedLSN;
|
|
|
|
/* 136 | 8 */ // XLogRecPtr minRecoveryPoint;
|
|
|
|
/* 144 | 4 */ // TimeLineID minRecoveryPointTLI;
|
|
|
|
/* XXX 4-byte hole */
|
|
|
|
/* 152 | 8 */ // XLogRecPtr backupStartPoint;
|
|
|
|
/* 160 | 8 */ // XLogRecPtr backupEndPoint;
|
|
|
|
/* 168 | 1 */ // _Bool backupEndRequired;
|
|
|
|
/* XXX 3-byte hole */
|
|
|
|
/* 172 | 4 */ // int wal_level;
|
|
|
|
/* 176 | 1 */ // _Bool wal_log_hints;
|
|
|
|
/* XXX 3-byte hole */
|
|
|
|
/* 180 | 4 */ // int MaxConnections;
|
|
|
|
/* 184 | 4 */ // int max_worker_processes;
|
|
|
|
/* 188 | 4 */ // int max_wal_senders;
|
|
|
|
/* 192 | 4 */ // int max_prepared_xacts;
|
|
|
|
/* 196 | 4 */ // int max_locks_per_xact;
|
|
|
|
/* 200 | 1 */ // _Bool track_commit_timestamp;
|
|
|
|
/* XXX 3-byte hole */
|
|
|
|
/* 204 | 4 */ // uint32 maxAlign;
|
|
|
|
/* 208 | 8 */ // double floatFormat;
|
|
|
|
/* 216 | 4 */ // uint32 blcksz;
|
|
|
|
/* 220 | 4 */ // uint32 relseg_size;
|
|
|
|
/* 224 | 4 */ // uint32 xlog_blcksz;
|
|
|
|
/* 228 | 4 */ // uint32 xlog_seg_size;
|
|
|
|
/* 232 | 4 */ // uint32 nameDataLen;
|
|
|
|
/* 236 | 4 */ // uint32 indexMaxKeys;
|
|
|
|
/* 240 | 4 */ // uint32 toast_max_chunk_size;
|
|
|
|
/* 244 | 4 */ // uint32 loblksize;
|
|
|
|
/* 248 | 1 */ // _Bool float4ByVal;
|
|
|
|
/* 249 | 1 */ // _Bool float8ByVal;
|
|
|
|
/* XXX 2-byte hole */
|
|
|
|
/* 252 | 4 */ // uint32 data_checksum_version;
|
|
|
|
/* 256 | 32 */ // char mock_authentication_nonce[32];
|
|
|
|
/* 288 | 4 */ // pg_icu_version icu_version;
|
|
|
|
/* 292 | 4 */ // pg_crc32c crc;
|
|
|
|
//
|
|
|
|
/* total size (bytes): 296 */
|
|
|
|
|
|
|
|
// type = struct CheckPoint {
|
|
|
|
/* 0 | 8 */ // XLogRecPtr redo;
|
|
|
|
/* 8 | 4 */ // TimeLineID ThisTimeLineID;
|
|
|
|
/* 12 | 4 */ // TimeLineID PrevTimeLineID;
|
|
|
|
/* 16 | 1 */ // _Bool fullPageWrites;
|
|
|
|
/* XXX 7-byte hole */
|
|
|
|
/* 24 | 8 */ // FullTransactionId nextFullXid;
|
|
|
|
/* 32 | 4 */ // Oid nextOid;
|
|
|
|
/* 36 | 4 */ // MultiXactId nextMulti;
|
|
|
|
/* 40 | 4 */ // MultiXactOffset nextMultiOffset;
|
|
|
|
/* 44 | 4 */ // TransactionId oldestXid;
|
|
|
|
/* 48 | 4 */ // Oid oldestXidDB;
|
|
|
|
/* 52 | 4 */ // MultiXactId oldestMulti;
|
|
|
|
/* 56 | 4 */ // Oid oldestMultiDB;
|
|
|
|
/* XXX 4-byte hole */
|
|
|
|
/* 64 | 8 */ // pg_time_t time;
|
|
|
|
/* 72 | 4 */ // TransactionId oldestCommitTsXid;
|
|
|
|
/* 76 | 4 */ // TransactionId newestCommitTsXid;
|
|
|
|
/* 80 | 4 */ // TransactionId oldestActiveXid;
|
|
|
|
/* XXX 4-byte padding */
|
|
|
|
//
|
|
|
|
/* total size (bytes): 88 */
|
|
|
|
|
|
|
|
func DecodePgControl(d *decode.D, in any) any {
|
|
|
|
d.SeekAbs(0)
|
|
|
|
/* 0 | 8 */ // uint64 system_identifier;
|
|
|
|
/* 8 | 4 */ // uint32 pg_control_version;
|
|
|
|
/* 12 | 4 */ // uint32 catalog_version_no;
|
|
|
|
/* 16 | 4 */ // DBState state;
|
|
|
|
/* XXX 4-byte hole */
|
|
|
|
d.FieldU64("system_identifier")
|
|
|
|
d.FieldU32("pg_control_version", common.VersionMapper)
|
|
|
|
d.FieldU32("catalog_version_no")
|
|
|
|
d.FieldU32("state", common.DBState)
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU32("hole0")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 24 | 8 */ // pg_time_t time;
|
|
|
|
/* 32 | 8 */ // XLogRecPtr checkPoint;
|
|
|
|
/* 40 | 88 */ // CheckPoint checkPointCopy;
|
|
|
|
d.FieldS64("time", common.TimeMapper)
|
|
|
|
d.FieldU64("checkPoint", common.XLogRecPtrMapper)
|
|
|
|
d.FieldStruct("checkPointCopy", func(d *decode.D) {
|
|
|
|
/* 0 | 8 */ // XLogRecPtr redo;
|
|
|
|
/* 8 | 4 */ // TimeLineID ThisTimeLineID;
|
|
|
|
/* 12 | 4 */ // TimeLineID PrevTimeLineID;
|
|
|
|
/* 16 | 1 */ // _Bool fullPageWrites;
|
|
|
|
/* XXX 7-byte hole */
|
|
|
|
d.FieldU64("redo", common.XLogRecPtrMapper)
|
|
|
|
d.FieldU32("ThisTimeLineID")
|
|
|
|
d.FieldU32("PrevTimeLineID")
|
|
|
|
d.FieldU8("fullPageWrites")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU56("hole1")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 24 | 8 */ // FullTransactionId nextFullXid;
|
|
|
|
/* 32 | 4 */ // Oid nextOid;
|
|
|
|
/* 36 | 4 */ // MultiXactId nextMulti;
|
|
|
|
/* 40 | 4 */ // MultiXactOffset nextMultiOffset;
|
|
|
|
/* 44 | 4 */ // TransactionId oldestXid;
|
|
|
|
/* 48 | 4 */ // Oid oldestXidDB;
|
|
|
|
/* 52 | 4 */ // MultiXactId oldestMulti;
|
|
|
|
/* 56 | 4 */ // Oid oldestMultiDB;
|
|
|
|
/* XXX 4-byte hole */
|
|
|
|
d.FieldU64("nextFullXid")
|
|
|
|
d.FieldU32("nextOid")
|
|
|
|
d.FieldU32("nextMulti")
|
|
|
|
d.FieldU32("nextMultiOffset")
|
|
|
|
d.FieldU32("oldestXid")
|
|
|
|
d.FieldU32("oldestXidDB")
|
|
|
|
d.FieldU32("oldestMulti")
|
|
|
|
d.FieldU32("oldestMultiDB")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU32("hole2")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 64 | 8 */ // pg_time_t time;
|
|
|
|
/* 72 | 4 */ // TransactionId oldestCommitTsXid;
|
|
|
|
/* 76 | 4 */ // TransactionId newestCommitTsXid;
|
|
|
|
/* 80 | 4 */ // TransactionId oldestActiveXid;
|
|
|
|
/* XXX 4-byte padding */
|
|
|
|
d.FieldS64("time", common.TimeMapper)
|
|
|
|
d.FieldU32("oldestCommitTsXid")
|
|
|
|
d.FieldU32("newestCommitTsXid")
|
|
|
|
d.FieldU32("oldestActiveXid")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU32("padding0")
|
2022-08-26 12:12:22 +03:00
|
|
|
})
|
|
|
|
|
|
|
|
/* 128 | 8 */ // XLogRecPtr unloggedLSN;
|
|
|
|
/* 136 | 8 */ // XLogRecPtr minRecoveryPoint;
|
|
|
|
/* 144 | 4 */ // TimeLineID minRecoveryPointTLI;
|
|
|
|
/* XXX 4-byte hole */
|
|
|
|
d.FieldU64("unloggedLSN", common.LocPtrMapper)
|
|
|
|
d.FieldU64("minRecoveryPoint", common.LocPtrMapper)
|
|
|
|
d.FieldU32("minRecoveryPointTLI")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU32("hole3")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 152 | 8 */ // XLogRecPtr backupStartPoint;
|
|
|
|
/* 160 | 8 */ // XLogRecPtr backupEndPoint;
|
|
|
|
/* 168 | 1 */ // _Bool backupEndRequired;
|
|
|
|
/* XXX 3-byte hole */
|
|
|
|
d.FieldU64("backupStartPoint", common.LocPtrMapper)
|
|
|
|
d.FieldU64("backupEndPoint", common.LocPtrMapper)
|
|
|
|
d.FieldU8("backupEndRequired")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU24("hole4")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 172 | 4 */ // int wal_level;
|
|
|
|
/* 176 | 1 */ // _Bool wal_log_hints;
|
|
|
|
/* XXX 3-byte hole */
|
|
|
|
d.FieldS32("wal_level", common.WalLevel)
|
|
|
|
d.FieldU8("wal_log_hints")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU24("hole5")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 180 | 4 */ // int MaxConnections;
|
|
|
|
/* 184 | 4 */ // int max_worker_processes;
|
|
|
|
/* 188 | 4 */ // int max_wal_senders;
|
|
|
|
/* 192 | 4 */ // int max_prepared_xacts;
|
|
|
|
/* 196 | 4 */ // int max_locks_per_xact;
|
|
|
|
/* 200 | 1 */ // _Bool track_commit_timestamp;
|
|
|
|
/* XXX 3-byte hole */
|
|
|
|
d.FieldS32("MaxConnections")
|
|
|
|
d.FieldS32("max_worker_processes")
|
|
|
|
d.FieldS32("max_wal_senders")
|
|
|
|
d.FieldS32("max_prepared_xacts")
|
|
|
|
d.FieldS32("max_locks_per_xact")
|
|
|
|
d.FieldU8("track_commit_timestamp")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU24("hole6")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 204 | 4 */ // uint32 maxAlign;
|
|
|
|
/* 208 | 8 */ // double floatFormat;
|
|
|
|
/* 216 | 4 */ // uint32 blcksz;
|
|
|
|
/* 220 | 4 */ // uint32 relseg_size;
|
|
|
|
/* 224 | 4 */ // uint32 xlog_blcksz;
|
|
|
|
/* 228 | 4 */ // uint32 xlog_seg_size;
|
|
|
|
/* 232 | 4 */ // uint32 nameDataLen;
|
|
|
|
/* 236 | 4 */ // uint32 indexMaxKeys;
|
|
|
|
/* 240 | 4 */ // uint32 toast_max_chunk_size;
|
|
|
|
/* 244 | 4 */ // uint32 loblksize;
|
|
|
|
/* 248 | 1 */ // _Bool float4ByVal;
|
|
|
|
/* 249 | 1 */ // _Bool float8ByVal;
|
|
|
|
/* XXX 2-byte hole */
|
|
|
|
d.FieldU32("maxAlign")
|
|
|
|
d.FieldF64("floatFormat")
|
|
|
|
d.FieldU32("blcksz")
|
|
|
|
d.FieldU32("relseg_size")
|
|
|
|
d.FieldU32("xlog_blcksz")
|
|
|
|
d.FieldU32("xlog_seg_size")
|
|
|
|
d.FieldU32("nameDataLen")
|
|
|
|
d.FieldU32("indexMaxKeys")
|
|
|
|
d.FieldU32("toast_max_chunk_size")
|
|
|
|
d.FieldU32("loblksize")
|
|
|
|
d.FieldU8("float4ByVal")
|
|
|
|
d.FieldU8("float8ByVal")
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldU16("hole7")
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
/* 252 | 4 */ // uint32 data_checksum_version;
|
|
|
|
/* 256 | 32 */ // char mock_authentication_nonce[32];
|
|
|
|
/* 288 | 4 */ // pg_icu_version icu_version;
|
|
|
|
/* 292 | 4 */ // pg_crc32c crc;
|
|
|
|
d.FieldU32("data_checksum_version")
|
|
|
|
d.FieldRawLen("mock_authentication_nonce", 32*8, scalar.RawHex)
|
|
|
|
d.FieldU32("icu_version", common.IcuVersionMapper)
|
|
|
|
d.FieldU32("crc")
|
|
|
|
/* total size (bytes): 296 */
|
|
|
|
|
|
|
|
d.AssertPosBytes(296)
|
2022-09-05 12:50:59 +03:00
|
|
|
d.FieldRawLen("unused", d.BitsLeft())
|
2022-08-26 12:12:22 +03:00
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|