Files
chaisql/internal/sql/parser/explain.go
2021-05-30 12:47:17 +04:00

25 lines
812 B
Go

package parser
import (
"github.com/genjidb/genji/internal/query/statement"
"github.com/genjidb/genji/internal/sql/scanner"
)
// parseExplainStatement parses any statement and returns an ExplainStmt object.
// This function assumes the EXPLAIN token has already been consumed.
func (p *Parser) parseExplainStatement() (statement.Statement, error) {
// ensure we don't have multiple EXPLAIN keywords
tok, pos, lit := p.ScanIgnoreWhitespace()
if tok != scanner.SELECT && tok != scanner.UPDATE && tok != scanner.DELETE && tok != scanner.INSERT {
return nil, newParseError(scanner.Tokstr(tok, lit), []string{"INSERT", "SELECT", "UPDATE", "DELETE"}, pos)
}
p.Unscan()
innerStmt, err := p.ParseStatement()
if err != nil {
return nil, err
}
return &statement.ExplainStmt{Statement: innerStmt}, nil
}