1
1
mirror of https://github.com/wader/fq.git synced 2024-10-04 07:27:08 +03:00
fq/format/postgres/pg_control.go

73 lines
1.8 KiB
Go
Raw Normal View History

2022-07-19 08:58:31 +03:00
package postgres
import (
"github.com/wader/fq/format"
2022-08-02 17:20:50 +03:00
"github.com/wader/fq/format/postgres/flavours/pgproee11"
2022-07-20 09:29:46 +03:00
"github.com/wader/fq/format/postgres/flavours/pgproee14"
2022-07-20 08:43:24 +03:00
"github.com/wader/fq/format/postgres/flavours/postgres11"
"github.com/wader/fq/format/postgres/flavours/postgres14"
2022-07-19 08:58:31 +03:00
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/interp"
)
func init() {
interp.RegisterFormat(decode.Format{
Name: format.PG_CONTROL,
2022-07-19 12:00:00 +03:00
Description: "PostgreSQL control file",
2022-07-19 08:58:31 +03:00
DecodeFn: decodePgControl,
2022-07-20 08:43:24 +03:00
DecodeInArg: format.PostgresIn{
Flavour: "default",
},
2022-07-19 08:58:31 +03:00
})
}
const (
PG_CONTROL_VERSION_11 = 1100
PG_CONTROL_VERSION_14 = 1300
)
2022-07-20 08:43:24 +03:00
const (
PG_FLAVOUR_POSTGRES = "postgres"
PG_FLAVOUR_POSTGRES11 = "postgres11"
PG_FLAVOUR_POSTGRES14 = "postgres14"
2022-08-02 16:40:12 +03:00
PG_FLAVOUR_PGPROEE11 = "pgproee11"
2022-07-20 09:29:46 +03:00
PG_FLAVOUR_PGPROEE14 = "pgproee14"
2022-07-20 08:43:24 +03:00
)
2022-07-19 08:58:31 +03:00
func decodePgControl(d *decode.D, in any) any {
d.Endian = decode.LittleEndian
2022-07-20 08:43:24 +03:00
flavour := in.(format.PostgresIn).Flavour
switch flavour {
case PG_FLAVOUR_POSTGRES11:
2022-07-20 09:29:46 +03:00
return postgres11.DecodePgControl(d, in)
2022-07-20 08:43:24 +03:00
case PG_FLAVOUR_POSTGRES14, PG_FLAVOUR_POSTGRES:
2022-07-20 09:29:46 +03:00
return postgres14.DecodePgControl(d, in)
2022-08-02 17:20:50 +03:00
case PG_FLAVOUR_PGPROEE11:
return pgproee11.DecodePgControl(d, in)
2022-07-20 09:29:46 +03:00
case PG_FLAVOUR_PGPROEE14:
return pgproee14.DecodePgControl(d, in)
2022-07-20 08:43:24 +03:00
default:
break
}
return probeForDecode(d, in)
}
func probeForDecode(d *decode.D, in any) any {
2022-07-19 08:58:31 +03:00
/* 0 | 8 */ // uint64 system_identifier;
/* 8 | 4 */ // uint32 pg_control_version;
2022-07-19 12:00:00 +03:00
d.U64()
pgControlVersion := d.U32()
2022-07-19 08:58:31 +03:00
switch pgControlVersion {
case PG_CONTROL_VERSION_11:
2022-07-20 09:29:46 +03:00
return postgres11.DecodePgControl(d, in)
2022-07-19 08:58:31 +03:00
case PG_CONTROL_VERSION_14:
2022-07-20 09:29:46 +03:00
return postgres14.DecodePgControl(d, in)
2022-07-19 08:58:31 +03:00
default:
d.Fatalf("unsupported PG_CONTROL_VERSION = %d\n", pgControlVersion)
}
return nil
}