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

Function nodeCreateType

server/ast/create_type.go:28–75  ·  view source on GitHub ↗

nodeCreateType handles *tree.CreateType nodes.

(ctx *Context, node *tree.CreateType)

Source from the content-addressed store, hash-verified

26
27// nodeCreateType handles *tree.CreateType nodes.
28func nodeCreateType(ctx *Context, node *tree.CreateType) (vitess.Statement, error) {
29 if node == nil {
30 return nil, nil
31 }
32 name, err := nodeUnresolvedObjectName(ctx, node.TypeName)
33 if err != nil {
34 return nil, err
35 }
36 schemaName := name.SchemaQualifier.String()
37 typName := name.Name.String()
38 var createTypeNode *pgnodes.CreateType
39 switch node.Variety {
40 case tree.Composite:
41 typs := make([]pgnodes.CompositeAsType, len(node.Composite.Types))
42 for i, t := range node.Composite.Types {
43 _, dataType, err := nodeResolvableTypeReference(ctx, t.Type, false)
44 if err != nil {
45 return nil, err
46 }
47
48 if dataType == pgtypes.Record {
49 return nil, errors.Errorf(`column "%s" has pseudo-type record`, t.AttrName)
50 }
51
52 typs[i] = pgnodes.CompositeAsType{
53 AttrName: t.AttrName,
54 Typ: dataType,
55 Collation: t.Collate,
56 }
57 }
58 createTypeNode = pgnodes.NewCreateCompositeType(schemaName, typName, typs)
59 case tree.Enum:
60 createTypeNode = pgnodes.NewCreateEnumType(schemaName, typName, node.Enum.Labels)
61 case tree.Range:
62 return nil, errors.Errorf("CREATE RANGE TYPE is not yet supported")
63 case tree.Base:
64 return nil, errors.Errorf("CREATE BASE TYPE is not yet supported")
65 case tree.Shell:
66 createTypeNode = pgnodes.NewCreateShellType(schemaName, typName)
67 case tree.Domain:
68 // NOT POSSIBLE
69 return nil, errors.Errorf("use CREATE DOMAIN to create domain type")
70 }
71
72 return vitess.InjectedStatement{
73 Statement: createTypeNode,
74 }, nil
75}

Callers 1

ConvertFunction · 0.85

Calls 4

nodeUnresolvedObjectNameFunction · 0.85
StringMethod · 0.65
ErrorfMethod · 0.65

Tested by

no test coverage detected