MCPcopy Create free account
hub / github.com/araddon/qlbridge / parseSqlUpsert

Method parseSqlUpsert

rel/parse_sql.go:373–437  ·  view source on GitHub ↗

First keyword was UPSERT

()

Source from the content-addressed store, hash-verified

371
372// First keyword was UPSERT
373func (m *Sqlbridge) parseSqlUpsert() (*SqlUpsert, error) {
374
375 var err error
376 req := NewSqlUpsert()
377 m.Next() // Consume UPSERT token
378
379 if m.Cur().T == lex.TokenInto {
380 m.Next() // consume Into
381 }
382
383 switch m.Cur().T {
384 case lex.TokenTable, lex.TokenIdentity:
385 req.Table = m.Cur().V
386 m.Next()
387 default:
388 return nil, fmt.Errorf("expected table name but got : %v", m.Cur().V)
389 }
390
391 switch m.Cur().T {
392 case lex.TokenSet:
393 m.Next() // Consume Set
394 // list of name=value pairs
395 cols, err := m.parseUpdateList()
396 if err != nil {
397 u.Error(err)
398 return nil, err
399 }
400 req.Values = cols
401 case lex.TokenLeftParenthesis:
402
403 // list of fields
404 cols, err := m.parseFieldList()
405 if err != nil {
406 u.Error(err)
407 return nil, err
408 }
409 req.Columns = cols
410
411 m.Next() // left paren starts lisf of values
412 switch m.Cur().T {
413 case lex.TokenValues:
414 m.Next() // Consume Values keyword
415 default:
416 return nil, m.ErrMsg("expected values")
417 }
418
419 //u.Debugf("found ? %v", m.Cur())
420 colVals, err := m.parseValueList()
421 if err != nil {
422 u.Error(err)
423 return nil, err
424 }
425 req.Rows = colVals
426 default:
427 return nil, m.ErrMsg("expected SET name=value, or (col1,col2) after table name")
428 }
429
430 // WHERE

Callers 1

parseMethod · 0.95

Calls 10

parseUpdateListMethod · 0.95
parseFieldListMethod · 0.95
parseValueListMethod · 0.95
parseWhereMethod · 0.95
NewSqlUpsertFunction · 0.85
ErrorfMethod · 0.80
NextMethod · 0.65
CurMethod · 0.65
ErrMsgMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected