# 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.