ResolveType converts a ResolvableTypeReference into a *types.T.
( ctx context.Context, ref ResolvableTypeReference, resolver TypeReferenceResolver, )
| 135 | |
| 136 | // ResolveType converts a ResolvableTypeReference into a *types.T. |
| 137 | func ResolveType( |
| 138 | ctx context.Context, ref ResolvableTypeReference, resolver TypeReferenceResolver, |
| 139 | ) (*types.T, error) { |
| 140 | switch t := ref.(type) { |
| 141 | case *types.T: |
| 142 | return t, nil |
| 143 | case *ArrayTypeReference: |
| 144 | typ, err := ResolveType(ctx, t.ElementType, resolver) |
| 145 | if err != nil { |
| 146 | return nil, err |
| 147 | } |
| 148 | return types.MakeArray(typ), nil |
| 149 | case *UnresolvedObjectName: |
| 150 | if resolver == nil { |
| 151 | // If we don't have a resolver, we can't actually resolve this |
| 152 | // name into a type. |
| 153 | return nil, pgerror.Newf(pgcode.UndefinedObject, "type %q does not exist", t) |
| 154 | } |
| 155 | return resolver.ResolveType(ctx, t) |
| 156 | case *OIDTypeReference: |
| 157 | if resolver == nil { |
| 158 | return nil, pgerror.Newf(pgcode.UndefinedObject, "type OID %d does not exist", t.OID) |
| 159 | } |
| 160 | return resolver.ResolveTypeByOID(ctx, t.OID) |
| 161 | default: |
| 162 | return nil, errors.AssertionFailedf("unknown resolvable type reference type %s", t) |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | // FormatTypeReference formats a ResolvableTypeReference. |
| 167 | func (ctx *FmtCtx) FormatTypeReference(ref ResolvableTypeReference) { |
no test coverage detected