Date text encoding pads year with 0 for at least 4 digits
e.g. 0007-01-02 instead of 7-01-02 https://github.com/jackc/pgx/commit/89f69aaea9748ae0ea121af4f1886d24966cef56#commitcomment-89173737
This commit is contained in:
+5
-1
@@ -193,7 +193,11 @@ func (encodePlanDateCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||||||
bc = true
|
bc = true
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = strconv.AppendInt(buf, int64(year), 10)
|
yearBytes := strconv.AppendInt(make([]byte, 0, 6), int64(year), 10)
|
||||||
|
for i := len(yearBytes); i < 4; i++ {
|
||||||
|
buf = append(buf, '0')
|
||||||
|
}
|
||||||
|
buf = append(buf, yearBytes...)
|
||||||
buf = append(buf, '-')
|
buf = append(buf, '-')
|
||||||
if date.Time.Month() < 10 {
|
if date.Time.Month() < 10 {
|
||||||
buf = append(buf, '0')
|
buf = append(buf, '0')
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/jackc/pgx/v5/pgtype"
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
"github.com/jackc/pgx/v5/pgxtest"
|
"github.com/jackc/pgx/v5/pgxtest"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func isExpectedEqTime(a any) func(any) bool {
|
func isExpectedEqTime(a any) func(any) bool {
|
||||||
@@ -37,6 +38,29 @@ func TestDateCodec(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDateCodecTextEncode(t *testing.T) {
|
||||||
|
m := pgtype.NewMap()
|
||||||
|
|
||||||
|
successfulTests := []struct {
|
||||||
|
source pgtype.Date
|
||||||
|
result string
|
||||||
|
}{
|
||||||
|
{source: pgtype.Date{Time: time.Date(2012, 3, 29, 0, 0, 0, 0, time.UTC), Valid: true}, result: "2012-03-29"},
|
||||||
|
{source: pgtype.Date{Time: time.Date(2012, 3, 29, 10, 5, 45, 0, time.FixedZone("", -6*60*60)), Valid: true}, result: "2012-03-29"},
|
||||||
|
{source: pgtype.Date{Time: time.Date(2012, 3, 29, 10, 5, 45, 555*1000*1000, time.FixedZone("", -6*60*60)), Valid: true}, result: "2012-03-29"},
|
||||||
|
{source: pgtype.Date{Time: time.Date(789, 1, 2, 0, 0, 0, 0, time.UTC), Valid: true}, result: "0789-01-02"},
|
||||||
|
{source: pgtype.Date{Time: time.Date(89, 1, 2, 0, 0, 0, 0, time.UTC), Valid: true}, result: "0089-01-02"},
|
||||||
|
{source: pgtype.Date{Time: time.Date(9, 1, 2, 0, 0, 0, 0, time.UTC), Valid: true}, result: "0009-01-02"},
|
||||||
|
{source: pgtype.Date{InfinityModifier: pgtype.Infinity, Valid: true}, result: "infinity"},
|
||||||
|
{source: pgtype.Date{InfinityModifier: pgtype.NegativeInfinity, Valid: true}, result: "-infinity"},
|
||||||
|
}
|
||||||
|
for i, tt := range successfulTests {
|
||||||
|
buf, err := m.Encode(pgtype.DateOID, pgtype.TextFormatCode, tt.source, nil)
|
||||||
|
assert.NoErrorf(t, err, "%d", i)
|
||||||
|
assert.Equalf(t, tt.result, string(buf), "%d", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDateMarshalJSON(t *testing.T) {
|
func TestDateMarshalJSON(t *testing.T) {
|
||||||
successfulTests := []struct {
|
successfulTests := []struct {
|
||||||
source pgtype.Date
|
source pgtype.Date
|
||||||
|
|||||||
Reference in New Issue
Block a user