(pos Pos)
| 1417 | } |
| 1418 | |
| 1419 | func (p *Parser) parseStmt(pos Pos) (Expr, error) { |
| 1420 | var err error |
| 1421 | var expr Expr |
| 1422 | switch { |
| 1423 | case p.matchKeyword(KeywordCreate), |
| 1424 | p.matchKeyword(KeywordAttach), |
| 1425 | p.matchKeyword(KeywordAlter), |
| 1426 | p.matchKeyword(KeywordDrop), |
| 1427 | p.matchKeyword(KeywordDetach), |
| 1428 | p.matchKeyword(KeywordTruncate), |
| 1429 | p.matchKeyword(KeywordRename): |
| 1430 | expr, err = p.parseDDL(pos) |
| 1431 | case p.matchKeyword(KeywordSelect), p.matchKeyword(KeywordWith): |
| 1432 | expr, err = p.parseSelectQuery(pos) |
| 1433 | case p.matchKeyword(KeywordDelete): |
| 1434 | expr, err = p.parseDeleteClause(pos) |
| 1435 | case p.matchKeyword(KeywordInsert): |
| 1436 | expr, err = p.parseInsertStmt(p.Pos()) |
| 1437 | case p.matchKeyword(KeywordUse): |
| 1438 | expr, err = p.parseUseStmt(pos) |
| 1439 | case p.matchKeyword(KeywordSet): |
| 1440 | expr, err = p.parseSetStmt(pos) |
| 1441 | case p.matchKeyword(KeywordSettings): |
| 1442 | expr, err = p.parseSettingsStmt(pos) |
| 1443 | case p.matchKeyword(KeywordSystem): |
| 1444 | expr, err = p.parseSystemStmt(pos) |
| 1445 | case p.matchKeyword(KeywordOptimize): |
| 1446 | expr, err = p.parseOptimizeStmt(pos) |
| 1447 | case p.matchKeyword(KeywordCheck): |
| 1448 | expr, err = p.parseCheckStmt(pos) |
| 1449 | case p.matchKeyword(KeywordExplain): |
| 1450 | expr, err = p.parseExplainStmt(pos) |
| 1451 | case p.matchKeyword(KeywordGrant): |
| 1452 | expr, err = p.parseGrantPrivilegeStmt(pos) |
| 1453 | case p.matchKeyword(KeywordShow): |
| 1454 | expr, err = p.parseShowStmt(pos) |
| 1455 | case p.matchKeyword(KeywordDesc), p.matchKeyword(KeywordDescribe): |
| 1456 | expr, err = p.parseDescribeStmt(pos) |
| 1457 | default: |
| 1458 | if p.last() == nil { |
| 1459 | return nil, errors.New("unexpected end of input") |
| 1460 | } |
| 1461 | return nil, fmt.Errorf("unexpected token: %q", p.last().String) |
| 1462 | } |
| 1463 | if err != nil { |
| 1464 | return nil, err |
| 1465 | } |
| 1466 | _, err = p.tryParseFormat(p.Pos()) |
| 1467 | if err != nil { |
| 1468 | return nil, err |
| 1469 | } |
| 1470 | |
| 1471 | // Statement can be terminated by ';' or EOF |
| 1472 | if p.last() != nil && !p.matchTokenKind(";") { |
| 1473 | return nil, fmt.Errorf("<EOF> or ';' was expected, but got: %q", p.last().String) |
| 1474 | } |
| 1475 | return expr, nil |
| 1476 | } |
no test coverage detected