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

Function nodeCreateDomain

server/ast/create_domain.go:29–104  ·  view source on GitHub ↗

nodeCreateDomain handles *tree.CreateDomain nodes.

(ctx *Context, node *tree.CreateDomain)

Source from the content-addressed store, hash-verified

27
28// nodeCreateDomain handles *tree.CreateDomain nodes.
29func nodeCreateDomain(ctx *Context, node *tree.CreateDomain) (vitess.Statement, error) {
30 if node == nil {
31 return nil, nil
32 }
33 name, err := nodeUnresolvedObjectName(ctx, node.TypeName)
34 if err != nil {
35 return nil, err
36 }
37 _, dataType, err := nodeResolvableTypeReference(ctx, node.DataType, false)
38 if err != nil {
39 return nil, err
40 }
41
42 if dataType == pgtypes.Record {
43 return nil, errors.Errorf(`"record" is not a valid base type for a domain`)
44 }
45
46 if node.Collate != "" {
47 return nil, errors.Errorf("domain collation is not yet supported")
48 }
49 var children []vitess.Expr
50 if node.Default != nil {
51 defExpr, err := nodeExpr(ctx, node.Default)
52 if err != nil {
53 return nil, err
54 }
55 // Wrap any default expression using a function call in parens to match MySQL's column default requirements
56 if _, ok := defExpr.(*vitess.FuncExpr); ok {
57 defExpr = &vitess.ParenExpr{Expr: defExpr}
58 }
59 children = append(children, defExpr)
60 }
61
62 var definedNotNull, definedNull bool
63 var checkConstraintNames []string
64 var checkConstraintExprs []vitess.Expr
65 for _, constraint := range node.Constraints {
66 if constraint.Check != nil {
67 check, err := verifyAndReplaceValue(node.DataType, constraint.Check)
68 if err != nil {
69 return nil, err
70 }
71
72 expr, err := nodeExpr(ctx, check)
73 if err != nil {
74 return nil, err
75 }
76
77 checkConstraintNames = append(checkConstraintNames, string(constraint.Constraint))
78 checkConstraintExprs = append(checkConstraintExprs, expr)
79 } else if constraint.NotNull {
80 definedNotNull = true
81 if definedNull {
82 return nil, errors.Errorf("conflicting NULL/NOT NULL constraints")
83 }
84 } else {
85 definedNull = true
86 if definedNotNull {

Callers 1

ConvertFunction · 0.85

Calls 6

nodeUnresolvedObjectNameFunction · 0.85
nodeExprFunction · 0.85
verifyAndReplaceValueFunction · 0.85
ErrorfMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected