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

Method parseCreate

rel/parse_sql.go:706–812  ·  view source on GitHub ↗

First keyword was CREATE

()

Source from the content-addressed store, hash-verified

704
705// First keyword was CREATE
706func (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:

Callers 1

parseMethod · 0.95

Calls 12

parseCreateColsMethod · 0.95
NewSqlCreateFunction · 0.85
ParseSqlSelectFunction · 0.85
discardCommentsFunction · 0.85
ParseWithFunction · 0.85
RawInputMethod · 0.80
RemainderMethod · 0.80
ErrorfMethod · 0.80
NextMethod · 0.65
CurMethod · 0.65
ErrMsgMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected