bool: mirror pg behavior

This commit is contained in:
Asdine El Hrychy
2025-09-15 20:52:26 +05:30
parent cb306ff0bb
commit 9cf4dc88d6
2 changed files with 42 additions and 5 deletions

View File

@@ -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 {

View File

@@ -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'