MCPcopy Create free account
hub / github.com/dolthub/doltgresql / processCollationOnType

Function processCollationOnType

postgres/parser/sem/tree/create_table.go:307–331  ·  view source on GitHub ↗
(name Name, ref ResolvableTypeReference, c string)

Source from the content-addressed store, hash-verified

305}
306
307func 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.
334func NewColumnTableDef(

Callers 1

NewColumnTableDefFunction · 0.85

Calls 6

NewfFunction · 0.92
MakeCollatedStringFunction · 0.92
MakeArrayFunction · 0.92
GetStaticallyKnownTypeFunction · 0.85
FamilyMethod · 0.80
ArrayContentsMethod · 0.80

Tested by

no test coverage detected