mirror of
https://github.com/chaisql/chai.git
synced 2025-10-30 18:36:27 +08:00
25 lines
812 B
Go
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
|
|
}
|