Flow

A raw query (either from stdin, a file, or a string) hits the main main.ts. This query then gets categorised into the type of statement it is (SELECT, INSERT, UPDATE, DELETE etc…), as the SQL grammar is pretty damn huge, there is a lexer per statement.

Once it has been categorised, it is then lexxed by the relevant lexer. See the src/lexer directory for the inner workings.

i.e. if we have the statement

SELECT name FROM user

This will hit the lexer will categorise this as a SELECT statement which the select lexer will then tokenise. tokenise. The tokenised string is then passed through to every checker to look for any linting errors.