(name Name, ref ResolvableTypeReference, c string)
| 305 | } |
| 306 | |
| 307 | func processCollationOnType(name Name, ref ResolvableTypeReference, c string) (*types.T, error) { |
| 308 | // At the moment, only string types can be collated. User defined types |
| 309 | // like enums don't support collations, so check this at parse time. |
| 310 | typ, ok := GetStaticallyKnownType(ref) |
| 311 | if !ok { |
| 312 | return nil, pgerror.Newf(pgcode.DatatypeMismatch, |
| 313 | "COLLATE declaration for non-string-typed column %q", name) |
| 314 | } |
| 315 | switch typ.Family() { |
| 316 | case types.StringFamily: |
| 317 | return types.MakeCollatedString(typ, string(c)), nil |
| 318 | case types.CollatedStringFamily: |
| 319 | return nil, pgerror.Newf(pgcode.Syntax, |
| 320 | "multiple COLLATE declarations for column %q", name) |
| 321 | case types.ArrayFamily: |
| 322 | elemTyp, err := processCollationOnType(name, typ.ArrayContents(), c) |
| 323 | if err != nil { |
| 324 | return nil, err |
| 325 | } |
| 326 | return types.MakeArray(elemTyp), nil |
| 327 | default: |
| 328 | return nil, pgerror.Newf(pgcode.DatatypeMismatch, |
| 329 | "COLLATE declaration for non-string-typed column %q", name) |
| 330 | } |
| 331 | } |
| 332 | |
| 333 | // NewColumnTableDef constructs a column definition for a CreateTable statement. |
| 334 | func NewColumnTableDef( |
no test coverage detected