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

Function nodeColumnTableDef

server/ast/column_table_def.go:31–185  ·  view source on GitHub ↗

nodeColumnTableDef handles *tree.ColumnTableDef nodes.

(ctx *Context, node *tree.ColumnTableDef)

Source from the content-addressed store, hash-verified

29
30// nodeColumnTableDef handles *tree.ColumnTableDef nodes.
31func nodeColumnTableDef(ctx *Context, node *tree.ColumnTableDef) (*vitess.ColumnDefinition, error) {
32 if node == nil {
33 return nil, nil
34 }
35 if len(node.Nullable.ConstraintName) > 0 ||
36 len(node.DefaultExpr.ConstraintName) > 0 ||
37 len(node.UniqueConstraintName) > 0 {
38 return nil, errors.Errorf("non-foreign key column constraint names are not yet supported")
39 }
40 convertType, resolvedType, err := nodeResolvableTypeReference(ctx, node.Type, false)
41 if err != nil {
42 return nil, err
43 }
44
45 if resolvedType == pgtypes.Record {
46 return nil, errors.Errorf(`column "%s" has pseudo-type record`, node.Name.String())
47 }
48
49 var isNull vitess.BoolVal
50 var isNotNull vitess.BoolVal
51 switch node.Nullable.Nullability {
52 case tree.NotNull:
53 isNull = false
54 isNotNull = true
55 case tree.Null:
56 isNull = true
57 isNotNull = false
58 case tree.SilentNull:
59 isNull = true
60 isNotNull = false
61 default:
62 return nil, errors.Errorf("unknown NULL type encountered")
63 }
64 keyOpt := vitess.ColumnKeyOption(0) // colKeyNone, unexported for some reason
65 if node.PrimaryKey.IsPrimaryKey {
66 keyOpt = 1 // colKeyPrimary
67 isNull = false
68 isNotNull = true
69 } else if node.Unique {
70 keyOpt = 3 // colKeyUnique
71 }
72 defaultExpr, err := nodeExpr(ctx, node.DefaultExpr.Expr)
73 if err != nil {
74 return nil, err
75 }
76 // Wrap any default expression using a function call in parens to match MySQL's column default requirements
77 if _, ok := defaultExpr.(*vitess.FuncExpr); ok {
78 defaultExpr = &vitess.ParenExpr{Expr: defaultExpr}
79 }
80
81 if node.References.Table != nil {
82 if len(node.References.Col) == 0 {
83 return nil, errors.Errorf("implicit primary key matching on column foreign key is not yet supported")
84 }
85 // Callers register the foreign key via the table constraint list, so ForeignKeyDef
86 // is left unset here to avoid creating the same constraint twice.
87 }
88

Callers 2

assignTableDefFunction · 0.85
nodeAlterTableAddColumnFunction · 0.85

Calls 9

WrapFunctionFunction · 0.92
NewStrValFunction · 0.92
nodeExprFunction · 0.85
clearAliasesFunction · 0.85
IsComputedMethod · 0.80
IsEmptyTypeMethod · 0.80
ErrorfMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected