mirror of
https://github.com/chaisql/chai.git
synced 2025-09-26 19:51:21 +08:00
bool: mirror pg behavior
This commit is contained in:
@@ -77,11 +77,14 @@ func (v TextValue) CastAs(target Type) (Value, error) {
|
||||
case TypeText:
|
||||
return v, nil
|
||||
case TypeBoolean:
|
||||
b, err := strconv.ParseBool(string(v))
|
||||
if err != nil {
|
||||
return nil, errors.Errorf(`cannot cast %q as bool: %w`, v.V(), err)
|
||||
switch strings.ToLower(string(v)) {
|
||||
case "1", "t", "true", "y", "yes", "on":
|
||||
return NewBooleanValue(true), nil
|
||||
case "0", "f", "false", "n", "no", "off":
|
||||
return NewBooleanValue(false), nil
|
||||
}
|
||||
return NewBooleanValue(b), nil
|
||||
|
||||
return nil, fmt.Errorf("cannot cast %q as boolean", v.V())
|
||||
case TypeInteger:
|
||||
i, err := strconv.ParseInt(string(v), 10, 32)
|
||||
if err != nil {
|
||||
|
@@ -75,7 +75,41 @@ true
|
||||
> CAST ('false' AS BOOL)
|
||||
false
|
||||
|
||||
! CAST ('falSe' AS BOOL)
|
||||
> CAST ('falSe' AS BOOL)
|
||||
false
|
||||
|
||||
> CAST ('0' AS BOOL)
|
||||
false
|
||||
|
||||
> CAST ('1' AS BOOL)
|
||||
true
|
||||
|
||||
> CAST ('t' AS BOOL)
|
||||
true
|
||||
|
||||
> CAST ('f' AS BOOL)
|
||||
false
|
||||
|
||||
> CAST ('TrUe' AS BOOL)
|
||||
true
|
||||
|
||||
> CAST ('yes' AS BOOL)
|
||||
true
|
||||
|
||||
> CAST ('y' AS BOOL)
|
||||
true
|
||||
|
||||
> CAST ('no' AS BOOL)
|
||||
false
|
||||
|
||||
> CAST ('n' AS BOOL)
|
||||
false
|
||||
|
||||
> CAST ('on' AS BOOL)
|
||||
true
|
||||
|
||||
> CAST ('off' AS BOOL)
|
||||
false
|
||||
|
||||
> CAST ('YXNkaW5l' AS BYTEA)
|
||||
'\x617364696e65'
|
||||
|
Reference in New Issue
Block a user