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

Method parseSqlInsert

rel/parse_sql.go:281–334  ·  view source on GitHub ↗

First keyword was INSERT, REPLACE

()

Source from the content-addressed store, hash-verified

279
280// First keyword was INSERT, REPLACE
281func (m *Sqlbridge) parseSqlInsert() (*SqlInsert, error) {
282
283 // insert into mytable (id, str) values (0, "a")
284 req := NewSqlInsert()
285 req.kw = m.Cur().T
286 m.Next() // Consume Insert or Replace
287
288 // INTO
289 if m.Cur().T != lex.TokenInto {
290 return nil, fmt.Errorf("expected INTO but got: %v", m.Cur())
291 }
292 m.Next() // Consume INTO
293
294 // table name
295 switch m.Cur().T {
296 case lex.TokenTable:
297 req.Table = m.Cur().V
298 m.Next()
299 default:
300 return nil, fmt.Errorf("expected table name but got : %v", m.Cur().V)
301 }
302
303 // list of fields
304 cols, err := m.parseFieldList()
305 if err != nil {
306 return nil, err
307 }
308 req.Columns = cols
309
310 m.Next() // left paren starts lisf of values
311 switch m.Cur().T {
312 case lex.TokenValues:
313 m.Next() // Consume Values keyword
314 case lex.TokenSelect:
315 sel, err := m.parseSqlSelect()
316 if err != nil {
317 return nil, err
318 }
319 if len(sel.From) == 0 {
320 return nil, m.ErrMsg("Expected FROM <sources>")
321 }
322 req.Select = sel
323 return req, nil
324 default:
325 return nil, m.ErrMsg("expected INSERT (columns) VALUES <values>")
326 }
327
328 colVals, err := m.parseValueList()
329 if err != nil {
330 return nil, err
331 }
332 req.Rows = colVals
333 return req, nil
334}
335
336// First keyword was UPDATE
337func (m *Sqlbridge) parseSqlUpdate() (*SqlUpdate, error) {

Callers 1

parseMethod · 0.95

Calls 8

parseFieldListMethod · 0.95
parseSqlSelectMethod · 0.95
parseValueListMethod · 0.95
NewSqlInsertFunction · 0.85
ErrorfMethod · 0.80
CurMethod · 0.65
NextMethod · 0.65
ErrMsgMethod · 0.65

Tested by

no test coverage detected