2
0

Encode dates in binary format

- Also allow NullTime to handle dates
This commit is contained in:
Jack Christensen
2015-09-08 11:51:28 -05:00
parent 65f5b33f3f
commit 4ebb0508b6
3 changed files with 42 additions and 12 deletions
+14 -1
View File
@@ -17,6 +17,12 @@ func TestDateTranscode(t *testing.T) {
defer closeConn(t, conn)
dates := []time.Time{
time.Date(1, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1000, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1600, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1700, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1800, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1900, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1990, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(1999, 12, 31, 0, 0, 0, 0, time.Local),
time.Date(2000, 1, 1, 0, 0, 0, 0, time.Local),
@@ -24,6 +30,11 @@ func TestDateTranscode(t *testing.T) {
time.Date(2004, 2, 29, 0, 0, 0, 0, time.Local),
time.Date(2013, 7, 4, 0, 0, 0, 0, time.Local),
time.Date(2013, 12, 25, 0, 0, 0, 0, time.Local),
time.Date(2029, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(2081, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(2096, 2, 29, 0, 0, 0, 0, time.Local),
time.Date(2550, 1, 1, 0, 0, 0, 0, time.Local),
time.Date(9999, 12, 31, 0, 0, 0, 0, time.Local),
}
for _, actualDate := range dates {
@@ -280,6 +291,8 @@ func TestNullX(t *testing.T) {
{"select $1::timestamptz", []interface{}{pgx.NullTime{Time: time.Unix(123, 5000), Valid: false}}, []interface{}{&actual.t}, allTypes{t: pgx.NullTime{Time: time.Time{}, Valid: false}}},
{"select $1::timestamp", []interface{}{pgx.NullTime{Time: time.Unix(123, 5000), Valid: true}}, []interface{}{&actual.t}, allTypes{t: pgx.NullTime{Time: time.Unix(123, 5000), Valid: true}}},
{"select $1::timestamp", []interface{}{pgx.NullTime{Time: time.Unix(123, 5000), Valid: false}}, []interface{}{&actual.t}, allTypes{t: pgx.NullTime{Time: time.Time{}, Valid: false}}},
{"select $1::date", []interface{}{pgx.NullTime{Time: time.Date(1990, 1, 1, 0, 0, 0, 0, time.Local), Valid: true}}, []interface{}{&actual.t}, allTypes{t: pgx.NullTime{Time: time.Date(1990, 1, 1, 0, 0, 0, 0, time.Local), Valid: true}}},
{"select $1::date", []interface{}{pgx.NullTime{Time: time.Date(1990, 1, 1, 0, 0, 0, 0, time.Local), Valid: false}}, []interface{}{&actual.t}, allTypes{t: pgx.NullTime{Time: time.Time{}, Valid: false}}},
{"select 42::int4, $1::float8", []interface{}{pgx.NullFloat64{Float64: 1.23, Valid: true}}, []interface{}{&actual.i32, &actual.f64}, allTypes{i32: pgx.NullInt32{Int32: 42, Valid: true}, f64: pgx.NullFloat64{Float64: 1.23, Valid: true}}},
}
@@ -473,7 +486,7 @@ func TestNullXMismatch(t *testing.T) {
{"select $1::date", []interface{}{pgx.NullFloat32{Float32: 1.23, Valid: true}}, []interface{}{&actual.f32}, "cannot encode into OID 1082"},
{"select $1::date", []interface{}{pgx.NullFloat64{Float64: 1.23, Valid: true}}, []interface{}{&actual.f64}, "cannot encode into OID 1082"},
{"select $1::date", []interface{}{pgx.NullBool{Bool: true, Valid: true}}, []interface{}{&actual.b}, "cannot encode into OID 1082"},
{"select $1::date", []interface{}{pgx.NullTime{Time: time.Unix(123, 5000), Valid: true}}, []interface{}{&actual.t}, "cannot encode into OID 1082"},
{"select $1::int4", []interface{}{pgx.NullTime{Time: time.Unix(123, 5000), Valid: true}}, []interface{}{&actual.t}, "cannot encode into OID 23"},
}
for i, tt := range tests {