Use constants for OIDs
This commit is contained in:
+32
-15
@@ -11,6 +11,23 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
BoolOid = 16
|
||||||
|
ByteaOid = 17
|
||||||
|
Int8Oid = 20
|
||||||
|
Int2Oid = 21
|
||||||
|
Int4Oid = 23
|
||||||
|
TextOid = 25
|
||||||
|
Float4Oid = 700
|
||||||
|
Float8Oid = 701
|
||||||
|
Int2ArrayOid = 1005
|
||||||
|
Int4ArrayOid = 1007
|
||||||
|
Int8ArrayOid = 1016
|
||||||
|
VarcharOid = 1043
|
||||||
|
DateOid = 1082
|
||||||
|
TimestampTzOid = 1184
|
||||||
|
)
|
||||||
|
|
||||||
// ValueTranscoder stores all the data necessary to encode and decode values from
|
// ValueTranscoder stores all the data necessary to encode and decode values from
|
||||||
// a PostgreSQL server
|
// a PostgreSQL server
|
||||||
type ValueTranscoder struct {
|
type ValueTranscoder struct {
|
||||||
@@ -37,90 +54,90 @@ func init() {
|
|||||||
ValueTranscoders = make(map[Oid]*ValueTranscoder)
|
ValueTranscoders = make(map[Oid]*ValueTranscoder)
|
||||||
|
|
||||||
// bool
|
// bool
|
||||||
ValueTranscoders[Oid(16)] = &ValueTranscoder{
|
ValueTranscoders[BoolOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeBoolFromText,
|
DecodeText: decodeBoolFromText,
|
||||||
DecodeBinary: decodeBoolFromBinary,
|
DecodeBinary: decodeBoolFromBinary,
|
||||||
EncodeTo: encodeBool,
|
EncodeTo: encodeBool,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// bytea
|
// bytea
|
||||||
ValueTranscoders[Oid(17)] = &ValueTranscoder{
|
ValueTranscoders[ByteaOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeByteaFromText,
|
DecodeText: decodeByteaFromText,
|
||||||
EncodeTo: encodeBytea,
|
EncodeTo: encodeBytea,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// int8
|
// int8
|
||||||
ValueTranscoders[Oid(20)] = &ValueTranscoder{
|
ValueTranscoders[Int8Oid] = &ValueTranscoder{
|
||||||
DecodeText: decodeInt8FromText,
|
DecodeText: decodeInt8FromText,
|
||||||
DecodeBinary: decodeInt8FromBinary,
|
DecodeBinary: decodeInt8FromBinary,
|
||||||
EncodeTo: encodeInt8,
|
EncodeTo: encodeInt8,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// int2
|
// int2
|
||||||
ValueTranscoders[Oid(21)] = &ValueTranscoder{
|
ValueTranscoders[Int2Oid] = &ValueTranscoder{
|
||||||
DecodeText: decodeInt2FromText,
|
DecodeText: decodeInt2FromText,
|
||||||
DecodeBinary: decodeInt2FromBinary,
|
DecodeBinary: decodeInt2FromBinary,
|
||||||
EncodeTo: encodeInt2,
|
EncodeTo: encodeInt2,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// int4
|
// int4
|
||||||
ValueTranscoders[Oid(23)] = &ValueTranscoder{
|
ValueTranscoders[Int4Oid] = &ValueTranscoder{
|
||||||
DecodeText: decodeInt4FromText,
|
DecodeText: decodeInt4FromText,
|
||||||
DecodeBinary: decodeInt4FromBinary,
|
DecodeBinary: decodeInt4FromBinary,
|
||||||
EncodeTo: encodeInt4,
|
EncodeTo: encodeInt4,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// text
|
// text
|
||||||
ValueTranscoders[Oid(25)] = &ValueTranscoder{
|
ValueTranscoders[TextOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeTextFromText,
|
DecodeText: decodeTextFromText,
|
||||||
EncodeTo: encodeText}
|
EncodeTo: encodeText}
|
||||||
|
|
||||||
// float4
|
// float4
|
||||||
ValueTranscoders[Oid(700)] = &ValueTranscoder{
|
ValueTranscoders[Float4Oid] = &ValueTranscoder{
|
||||||
DecodeText: decodeFloat4FromText,
|
DecodeText: decodeFloat4FromText,
|
||||||
DecodeBinary: decodeFloat4FromBinary,
|
DecodeBinary: decodeFloat4FromBinary,
|
||||||
EncodeTo: encodeFloat4,
|
EncodeTo: encodeFloat4,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// float8
|
// float8
|
||||||
ValueTranscoders[Oid(701)] = &ValueTranscoder{
|
ValueTranscoders[Float8Oid] = &ValueTranscoder{
|
||||||
DecodeText: decodeFloat8FromText,
|
DecodeText: decodeFloat8FromText,
|
||||||
DecodeBinary: decodeFloat8FromBinary,
|
DecodeBinary: decodeFloat8FromBinary,
|
||||||
EncodeTo: encodeFloat8,
|
EncodeTo: encodeFloat8,
|
||||||
EncodeFormat: 1}
|
EncodeFormat: 1}
|
||||||
|
|
||||||
// int2[]
|
// int2[]
|
||||||
ValueTranscoders[Oid(1005)] = &ValueTranscoder{
|
ValueTranscoders[Int2ArrayOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeInt2ArrayFromText,
|
DecodeText: decodeInt2ArrayFromText,
|
||||||
EncodeTo: encodeInt2Array}
|
EncodeTo: encodeInt2Array}
|
||||||
|
|
||||||
// int4[]
|
// int4[]
|
||||||
ValueTranscoders[Oid(1007)] = &ValueTranscoder{
|
ValueTranscoders[Int4ArrayOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeInt4ArrayFromText,
|
DecodeText: decodeInt4ArrayFromText,
|
||||||
EncodeTo: encodeInt4Array}
|
EncodeTo: encodeInt4Array}
|
||||||
|
|
||||||
// int8[]
|
// int8[]
|
||||||
ValueTranscoders[Oid(1016)] = &ValueTranscoder{
|
ValueTranscoders[Int8ArrayOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeInt8ArrayFromText,
|
DecodeText: decodeInt8ArrayFromText,
|
||||||
EncodeTo: encodeInt8Array}
|
EncodeTo: encodeInt8Array}
|
||||||
|
|
||||||
// varchar -- same as text
|
// varchar -- same as text
|
||||||
ValueTranscoders[Oid(1043)] = ValueTranscoders[Oid(25)]
|
ValueTranscoders[VarcharOid] = ValueTranscoders[Oid(25)]
|
||||||
|
|
||||||
// date
|
// date
|
||||||
ValueTranscoders[Oid(1082)] = &ValueTranscoder{
|
ValueTranscoders[DateOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeDateFromText,
|
DecodeText: decodeDateFromText,
|
||||||
DecodeBinary: decodeDateFromBinary,
|
DecodeBinary: decodeDateFromBinary,
|
||||||
EncodeTo: encodeDate}
|
EncodeTo: encodeDate}
|
||||||
|
|
||||||
// timestamptz
|
// timestamptz
|
||||||
ValueTranscoders[Oid(1184)] = &ValueTranscoder{
|
ValueTranscoders[TimestampTzOid] = &ValueTranscoder{
|
||||||
DecodeText: decodeTimestampTzFromText,
|
DecodeText: decodeTimestampTzFromText,
|
||||||
DecodeBinary: decodeTimestampTzFromBinary,
|
DecodeBinary: decodeTimestampTzFromBinary,
|
||||||
EncodeTo: encodeTimestampTz}
|
EncodeTo: encodeTimestampTz}
|
||||||
|
|
||||||
// use text transcoder for anything we don't understand
|
// use text transcoder for anything we don't understand
|
||||||
defaultTranscoder = ValueTranscoders[Oid(25)]
|
defaultTranscoder = ValueTranscoders[TextOid]
|
||||||
}
|
}
|
||||||
|
|
||||||
var arrayEl *regexp.Regexp = regexp.MustCompile(`[{,](?:"((?:[^"\\]|\\.)*)"|(NULL)|([^,}]+))`)
|
var arrayEl *regexp.Regexp = regexp.MustCompile(`[{,](?:"((?:[^"\\]|\\.)*)"|(NULL)|([^,}]+))`)
|
||||||
|
|||||||
Reference in New Issue
Block a user