nodeCreateType handles *tree.CreateType nodes.
(ctx *Context, node *tree.CreateType)
| 26 | |
| 27 | // nodeCreateType handles *tree.CreateType nodes. |
| 28 | func 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 | } |
no test coverage detected