MCPcopy Create free account
hub / github.com/LissaGreense/GO4SQL / ParseSequence

Method ParseSequence

parser/parser.go:908–1028  ·  view source on GitHub ↗

ParseSequence - Return ast.Sequence (sequence of commands) created from client input after tokenization Parse tokens returned by lexer to structures defines in ast package, and it's responsible for syntax validation.

()

Source from the content-addressed store, hash-verified

906//
907// Parse tokens returned by lexer to structures defines in ast package, and it's responsible for syntax validation.
908func (parser *Parser) ParseSequence() (*ast.Sequence, error) {
909 // Create variable holding sequence/commands
910 sequence := &ast.Sequence{}
911
912 for parser.currentToken.Type != token.EOF {
913 var command ast.Command
914 var err error
915 switch parser.currentToken.Type {
916 case token.CREATE:
917 command, err = parser.parseCreateCommand()
918 case token.INSERT:
919 command, err = parser.parseInsertCommand()
920 case token.UPDATE:
921 command, err = parser.parseUpdateCommand()
922 case token.SELECT:
923 command, err = parser.parseSelectCommand()
924 case token.DELETE:
925 command, err = parser.parseDeleteCommand()
926 case token.DROP:
927 command, err = parser.parseDropCommand()
928 case token.WHERE:
929 lastCommand, parserError := parser.getLastCommand(sequence, token.WHERE)
930 if parserError != nil {
931 return nil, parserError
932 }
933
934 if lastCommand.TokenLiteral() == token.SELECT {
935 newCommand, err := parser.parseWhereCommand()
936 if err != nil {
937 return nil, err
938 }
939 lastCommand.(*ast.SelectCommand).WhereCommand = newCommand.(*ast.WhereCommand)
940 } else if lastCommand.TokenLiteral() == token.DELETE {
941 newCommand, err := parser.parseWhereCommand()
942 if err != nil {
943 return nil, err
944 }
945 lastCommand.(*ast.DeleteCommand).WhereCommand = newCommand.(*ast.WhereCommand)
946 } else if lastCommand.TokenLiteral() == token.UPDATE {
947 newCommand, err := parser.parseWhereCommand()
948 if err != nil {
949 return nil, err
950 }
951 lastCommand.(*ast.UpdateCommand).WhereCommand = newCommand.(*ast.WhereCommand)
952 } else {
953 return nil, &SyntaxCommandExpectedError{command: "WHERE", neededCommands: []string{"SELECT", "DELETE", "UPDATE"}}
954 }
955 case token.ORDER:
956 lastCommand, parserError := parser.getLastCommand(sequence, token.ORDER)
957 if parserError != nil {
958 return nil, parserError
959 }
960
961 if lastCommand.TokenLiteral() != token.SELECT {
962 return nil, &SyntaxCommandExpectedError{command: "ORDER BY", neededCommands: []string{"SELECT"}}
963 }
964
965 selectCommand := lastCommand.(*ast.SelectCommand)

Calls 13

parseCreateCommandMethod · 0.95
parseInsertCommandMethod · 0.95
parseUpdateCommandMethod · 0.95
parseSelectCommandMethod · 0.95
parseDeleteCommandMethod · 0.95
parseDropCommandMethod · 0.95
getLastCommandMethod · 0.95
parseWhereCommandMethod · 0.95
parseOrderByCommandMethod · 0.95
parseLimitCommandMethod · 0.95
parseOffsetCommandMethod · 0.95
parseJoinCommandMethod · 0.95