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

Method parseDeleteStatement

pkg/sql/parser/dml_delete.go:26–77  ·  view source on GitHub ↗

parseDeleteStatement parses a DELETE statement

()

Source from the content-addressed store, hash-verified

24
25// parseDeleteStatement parses a DELETE statement
26func (p *Parser) parseDeleteStatement() (ast.Statement, error) {
27 // We've already consumed the DELETE token in matchType
28
29 // Parse FROM
30 if !p.isType(models.TokenTypeFrom) {
31 return nil, p.expectedError("FROM")
32 }
33 p.advance() // Consume FROM
34
35 // Parse table name (supports schema.table qualification and double-quoted identifiers)
36 tableName, err := p.parseQualifiedName()
37 if err != nil {
38 return nil, p.expectedError("table name")
39 }
40
41 // Parse WHERE clause if present
42 var whereClause ast.Expression
43 if p.isType(models.TokenTypeWhere) {
44 p.advance() // Consume WHERE
45 var err error
46 whereClause, err = p.parseExpression()
47 if err != nil {
48 return nil, err
49 }
50 }
51
52 // Parse LIMIT clause if present (MySQL)
53 if p.isType(models.TokenTypeLimit) {
54 p.advance() // Consume LIMIT
55 if p.isNumericLiteral() {
56 p.advance() // Consume limit value
57 }
58 }
59
60 // Parse RETURNING clause if present (PostgreSQL)
61 var returning []ast.Expression
62 if p.isType(models.TokenTypeReturning) || p.currentToken.Token.Value == "RETURNING" {
63 p.advance() // Consume RETURNING
64 var err error
65 returning, err = p.parseReturningColumns()
66 if err != nil {
67 return nil, err
68 }
69 }
70
71 // Create DELETE statement
72 return &ast.DeleteStatement{
73 TableName: tableName,
74 Where: whereClause,
75 Returning: returning,
76 }, nil
77}

Callers 2

parseStatementMethod · 0.95

Calls 7

isTypeMethod · 0.95
expectedErrorMethod · 0.95
advanceMethod · 0.95
parseQualifiedNameMethod · 0.95
parseExpressionMethod · 0.95
isNumericLiteralMethod · 0.95
parseReturningColumnsMethod · 0.95

Tested by

no test coverage detected