GetTypeFromCastOrCollate returns the type of the given tree.Expr. The method assumes that the expression is either tree.CastExpr or tree.CollateExpr (which wraps the tree.CastExpr).
(expr tree.Expr)
| 434 | // assumes that the expression is either tree.CastExpr or tree.CollateExpr |
| 435 | // (which wraps the tree.CastExpr). |
| 436 | func GetTypeFromCastOrCollate(expr tree.Expr) (tree.ResolvableTypeReference, error) { |
| 437 | // COLLATE clause has lower precedence than the cast, so if we have |
| 438 | // something like `1::STRING COLLATE en`, it'll be parsed as |
| 439 | // CollateExpr(CastExpr). |
| 440 | if collate, ok := expr.(*tree.CollateExpr); ok { |
| 441 | return types.MakeCollatedString(types.String, collate.Locale), nil |
| 442 | } |
| 443 | |
| 444 | cast, ok := expr.(*tree.CastExpr) |
| 445 | if !ok { |
| 446 | return nil, errors.AssertionFailedf("expected a tree.CastExpr, but found %T", expr) |
| 447 | } |
| 448 | |
| 449 | return cast.Type, nil |
| 450 | } |
| 451 | |
| 452 | var errVarBitLengthNotPositive = pgerror.WithCandidateCode( |
| 453 | errors.New("length for type varbit must be at least 1"), pgcode.InvalidParameterValue) |
no test coverage detected
searching dependent graphs…