MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / parseAlterTableStatement

Method parseAlterTableStatement

pkg/sql/parser/alter.go:46–145  ·  view source on GitHub ↗

parseAlterTableStatement parses ALTER TABLE statements

(stmt *ast.AlterStatement)

Source from the content-addressed store, hash-verified

44
45// parseAlterTableStatement parses ALTER TABLE statements
46func (p *Parser) parseAlterTableStatement(stmt *ast.AlterStatement) (*ast.AlterStatement, error) {
47 stmt.Name = p.parseIdentAsString()
48 op := &ast.AlterTableOperation{}
49
50 switch {
51 case p.matchType(models.TokenTypeAdd):
52 if p.matchType(models.TokenTypeColumn) {
53 op.Type = ast.AddColumn
54 colDef, err := p.parseColumnDef()
55 if err != nil {
56 return nil, err
57 }
58 op.ColumnDef = colDef
59 } else if p.matchType(models.TokenTypeConstraint) {
60 op.Type = ast.AddConstraint
61 constraint, err := p.parseTableConstraint()
62 if err != nil {
63 return nil, err
64 }
65 op.Constraint = constraint
66 } else {
67 return nil, p.expectedError("COLUMN or CONSTRAINT")
68 }
69
70 case p.matchType(models.TokenTypeDrop):
71 if p.matchType(models.TokenTypeColumn) {
72 op.Type = ast.DropColumn
73 // Convert ast.Identifier to ast.Ident
74 ident := p.parseIdent()
75 if ident == nil {
76 return nil, p.expectedError("column name")
77 }
78 op.ColumnName = &ast.Ident{Name: ident.Name}
79 if p.matchType(models.TokenTypeCascade) {
80 op.CascadeDrops = true
81 }
82 } else if p.matchType(models.TokenTypeConstraint) {
83 op.Type = ast.DropConstraint
84 // Convert ast.Identifier to ast.Ident
85 ident := p.parseIdent()
86 if ident == nil {
87 return nil, p.expectedError("constraint name")
88 }
89 op.ConstraintName = &ast.Ident{Name: ident.Name}
90 if p.matchType(models.TokenTypeCascade) {
91 op.CascadeDrops = true
92 }
93 } else {
94 return nil, p.expectedError("COLUMN or CONSTRAINT")
95 }
96
97 case p.matchType(models.TokenTypeRename):
98 if p.matchType(models.TokenTypeTo) {
99 op.Type = ast.RenameTable
100 op.NewTableName = p.parseObjectName()
101 } else if p.matchType(models.TokenTypeColumn) {
102 op.Type = ast.RenameColumn
103 // Convert ast.Identifier to ast.Ident

Callers 1

parseAlterStatementMethod · 0.95

Calls 7

parseIdentAsStringMethod · 0.95
matchTypeMethod · 0.95
parseColumnDefMethod · 0.95
parseTableConstraintMethod · 0.95
expectedErrorMethod · 0.95
parseIdentMethod · 0.95
parseObjectNameMethod · 0.95

Tested by

no test coverage detected