( name Name, ref ResolvableTypeReference, c ColumnCollation, )
| 538 | } |
| 539 | |
| 540 | func processCollationOnType( |
| 541 | name Name, ref ResolvableTypeReference, c ColumnCollation, |
| 542 | ) (*types.T, error) { |
| 543 | // At the moment, only string types can be collated. User defined types |
| 544 | // like enums don't support collations, so check this at parse time. |
| 545 | typ, ok := GetStaticallyKnownType(ref) |
| 546 | if !ok { |
| 547 | return nil, pgerror.Newf(pgcode.DatatypeMismatch, |
| 548 | "COLLATE declaration for non-string-typed column %q", name) |
| 549 | } |
| 550 | switch typ.Family() { |
| 551 | case types.StringFamily: |
| 552 | return types.MakeCollatedString(typ, string(c)), nil |
| 553 | case types.CollatedStringFamily: |
| 554 | return nil, pgerror.Newf(pgcode.Syntax, |
| 555 | "multiple COLLATE declarations for column %q", name) |
| 556 | case types.ArrayFamily: |
| 557 | elemTyp, err := processCollationOnType(name, typ.ArrayContents(), c) |
| 558 | if err != nil { |
| 559 | return nil, err |
| 560 | } |
| 561 | return types.MakeArray(elemTyp), nil |
| 562 | default: |
| 563 | return nil, pgerror.Newf(pgcode.DatatypeMismatch, |
| 564 | "COLLATE declaration for non-string-typed column %q", name) |
| 565 | } |
| 566 | } |
| 567 | |
| 568 | // NewColumnTableDef constructs a column definition for a CreateTable statement. |
| 569 | func NewColumnTableDef( |
no test coverage detected
searching dependent graphs…