Fix ranges with text format where end is unbounded

fixes #342
issue-342
Jack Christensen 2017-11-04 14:03:46 -05:00
parent d6cd3b1962
commit 425fbe1c88
4 changed files with 29 additions and 13 deletions

View File

@ -12,6 +12,8 @@ func TestInt4rangeTranscode(t *testing.T) {
&pgtype.Int4range{LowerType: pgtype.Empty, UpperType: pgtype.Empty, Status: pgtype.Present},
&pgtype.Int4range{Lower: pgtype.Int4{Int: 1, Status: pgtype.Present}, Upper: pgtype.Int4{Int: 10, Status: pgtype.Present}, LowerType: pgtype.Inclusive, UpperType: pgtype.Exclusive, Status: pgtype.Present},
&pgtype.Int4range{Lower: pgtype.Int4{Int: -42, Status: pgtype.Present}, Upper: pgtype.Int4{Int: -5, Status: pgtype.Present}, LowerType: pgtype.Inclusive, UpperType: pgtype.Exclusive, Status: pgtype.Present},
&pgtype.Int4range{Lower: pgtype.Int4{Int: 1, Status: pgtype.Present}, LowerType: pgtype.Inclusive, UpperType: pgtype.Unbounded, Status: pgtype.Present},
&pgtype.Int4range{Upper: pgtype.Int4{Int: 1, Status: pgtype.Present}, LowerType: pgtype.Unbounded, UpperType: pgtype.Exclusive, Status: pgtype.Present},
&pgtype.Int4range{Status: pgtype.Null},
})
}

View File

@ -12,6 +12,8 @@ func TestInt8rangeTranscode(t *testing.T) {
&pgtype.Int8range{LowerType: pgtype.Empty, UpperType: pgtype.Empty, Status: pgtype.Present},
&pgtype.Int8range{Lower: pgtype.Int8{Int: 1, Status: pgtype.Present}, Upper: pgtype.Int8{Int: 10, Status: pgtype.Present}, LowerType: pgtype.Inclusive, UpperType: pgtype.Exclusive, Status: pgtype.Present},
&pgtype.Int8range{Lower: pgtype.Int8{Int: -42, Status: pgtype.Present}, Upper: pgtype.Int8{Int: -5, Status: pgtype.Present}, LowerType: pgtype.Inclusive, UpperType: pgtype.Exclusive, Status: pgtype.Present},
&pgtype.Int8range{Lower: pgtype.Int8{Int: 1, Status: pgtype.Present}, LowerType: pgtype.Inclusive, UpperType: pgtype.Unbounded, Status: pgtype.Present},
&pgtype.Int8range{Upper: pgtype.Int8{Int: 1, Status: pgtype.Present}, LowerType: pgtype.Unbounded, UpperType: pgtype.Exclusive, Status: pgtype.Present},
&pgtype.Int8range{Status: pgtype.Null},
})
}

View File

@ -29,6 +29,18 @@ func TestNumrangeTranscode(t *testing.T) {
UpperType: pgtype.Exclusive,
Status: pgtype.Present,
},
&pgtype.Numrange{
Lower: pgtype.Numeric{Int: big.NewInt(-42), Exp: 1, Status: pgtype.Present},
LowerType: pgtype.Inclusive,
UpperType: pgtype.Unbounded,
Status: pgtype.Present,
},
&pgtype.Numrange{
Upper: pgtype.Numeric{Int: big.NewInt(-42), Exp: 1, Status: pgtype.Present},
LowerType: pgtype.Unbounded,
UpperType: pgtype.Exclusive,
Status: pgtype.Present,
},
&pgtype.Numrange{Status: pgtype.Null},
})
}

View File

@ -79,28 +79,28 @@ func ParseUntypedTextRange(src string) (*UntypedTextRange, error) {
if err != nil {
return nil, errors.Errorf("invalid upper value: %v", err)
}
buf.UnreadRune()
if r == ')' || r == ']' {
utr.UpperType = Unbounded
} else {
buf.UnreadRune()
utr.Upper, err = rangeParseValue(buf)
if err != nil {
return nil, errors.Errorf("invalid upper value: %v", err)
}
}
r, _, err = buf.ReadRune()
if err != nil {
return nil, errors.Errorf("missing upper bound: %v", err)
}
switch r {
case ')':
utr.UpperType = Exclusive
case ']':
utr.UpperType = Inclusive
default:
return nil, errors.Errorf("missing upper bound, instead got: %v", string(r))
r, _, err = buf.ReadRune()
if err != nil {
return nil, errors.Errorf("missing upper bound: %v", err)
}
switch r {
case ')':
utr.UpperType = Exclusive
case ']':
utr.UpperType = Inclusive
default:
return nil, errors.Errorf("missing upper bound, instead got: %v", string(r))
}
}
skipWhitespace(buf)