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

Method parseOnDuplicateKeyUpdateClause

pkg/sql/parser/dml_insert.go:386–416  ·  view source on GitHub ↗

parseOnDuplicateKeyUpdateClause parses the assignments in ON DUPLICATE KEY UPDATE

()

Source from the content-addressed store, hash-verified

384
385// parseOnDuplicateKeyUpdateClause parses the assignments in ON DUPLICATE KEY UPDATE
386func (p *Parser) parseOnDuplicateKeyUpdateClause() (*ast.UpsertClause, error) {
387 upsert := &ast.UpsertClause{}
388 for {
389 if !p.isIdentifier() {
390 return nil, p.expectedError("column name in ON DUPLICATE KEY UPDATE")
391 }
392 columnName := p.currentToken.Token.Value
393 p.advance()
394
395 if !p.isType(models.TokenTypeEq) {
396 return nil, p.expectedError("=")
397 }
398 p.advance()
399
400 value, err := p.parseExpression()
401 if err != nil {
402 return nil, fmt.Errorf("failed to parse ON DUPLICATE KEY UPDATE value: %w", err)
403 }
404
405 upsert.Updates = append(upsert.Updates, ast.UpdateExpression{
406 Column: &ast.Identifier{Name: columnName},
407 Value: value,
408 })
409
410 if !p.isType(models.TokenTypeComma) {
411 break
412 }
413 p.advance() // Consume comma
414 }
415 return upsert, nil
416}

Callers 1

parseInsertStatementMethod · 0.95

Calls 6

isIdentifierMethod · 0.95
expectedErrorMethod · 0.95
advanceMethod · 0.95
isTypeMethod · 0.95
parseExpressionMethod · 0.95
ErrorfMethod · 0.65

Tested by

no test coverage detected