First keyword was CREATE
()
| 704 | |
| 705 | // First keyword was CREATE |
| 706 | func (m *Sqlbridge) parseCreate() (*SqlCreate, error) { |
| 707 | |
| 708 | req := NewSqlCreate() |
| 709 | m.Next() // Consume CREATE token |
| 710 | req.Raw = m.l.RawInput() |
| 711 | |
| 712 | if m.Cur().T == lex.TokenOr { |
| 713 | m.Next() // Consume OR |
| 714 | if m.Next().T != lex.TokenReplace { |
| 715 | return nil, m.ErrMsg("Expected CREATE OR REPLACE") |
| 716 | } |
| 717 | req.OrReplace = true |
| 718 | } |
| 719 | // CREATE {DATABASE|SCHEMA|TABLE|VIEW|SOURCE|CONTINUOUSVIEW} <identity> |
| 720 | switch m.Cur().T { |
| 721 | case lex.TokenTable, lex.TokenSource, lex.TokenDatabase, lex.TokenSchema: |
| 722 | req.Tok = m.Next() |
| 723 | case lex.TokenView, lex.TokenContinuousView: |
| 724 | req.Tok = m.Next() |
| 725 | if m.Cur().T != lex.TokenIdentity { |
| 726 | return nil, m.ErrMsg("Expected CREATE [OR REPLACE] {VIEW|CONTINIOUSVIEW} <identity> AS <select_stmt>") |
| 727 | } |
| 728 | req.Identity = m.Next().V |
| 729 | |
| 730 | // Grab remainder which will be SELECT (we have already lexed AS) |
| 731 | selSQL, _ := m.l.Remainder() |
| 732 | |
| 733 | if m.Next().T != lex.TokenAs { |
| 734 | return nil, m.ErrMsg("Expected CREATE [OR REPLACE] {VIEW|CONTINIOUSVIEW} <identity> AS <select_stmt>") |
| 735 | } |
| 736 | if m.Cur().T != lex.TokenSelect { |
| 737 | return nil, m.ErrMsg("Expected CREATE [OR REPLACE] {VIEW|CONTINIOUSVIEW} <identity> AS <select_stmt>") |
| 738 | } |
| 739 | |
| 740 | sel, err := ParseSqlSelect(selSQL) |
| 741 | if err != nil { |
| 742 | return nil, err |
| 743 | } |
| 744 | req.Select = sel |
| 745 | return req, nil |
| 746 | default: |
| 747 | return nil, m.ErrMsg("Expected view, table, source, schema, database, continuousview for CREATE got") |
| 748 | } |
| 749 | |
| 750 | // [IF NOT EXISTS] |
| 751 | if m.Cur().T == lex.TokenIf { |
| 752 | m.Next() // Consume IF |
| 753 | if m.Next().T != lex.TokenNegate { |
| 754 | return nil, m.ErrMsg("Expected CREATE {TABLE|SCHEMA|DATABASE} IF NOT EXISTS <identity>") |
| 755 | } |
| 756 | if m.Next().T != lex.TokenExists { |
| 757 | return nil, m.ErrMsg("Expected CREATE {TABLE|SCHEMA|DATABASE} IF NOT EXISTS <identity>") |
| 758 | } |
| 759 | req.IfNotExists = true |
| 760 | } |
| 761 | |
| 762 | switch m.Cur().T { |
| 763 | case lex.TokenTable, lex.TokenIdentity: |
no test coverage detected