Skip to content

Commit e5c2733

Browse files
committed
feat: add classifier and Tier 2 extractors for all statement types
1 parent 4d97bb7 commit e5c2733

3 files changed

Lines changed: 644 additions & 0 deletions

File tree

include/sql_parser/parser.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#ifndef SQL_PARSER_PARSER_H
2+
#define SQL_PARSER_PARSER_H
3+
4+
#include "sql_parser/common.h"
5+
#include "sql_parser/arena.h"
6+
#include "sql_parser/tokenizer.h"
7+
#include "sql_parser/ast.h"
8+
#include "sql_parser/parse_result.h"
9+
10+
namespace sql_parser {
11+
12+
struct ParserConfig {
13+
size_t arena_block_size = 65536; // 64KB
14+
size_t arena_max_size = 1048576; // 1MB
15+
};
16+
17+
template <Dialect D>
18+
class Parser {
19+
public:
20+
explicit Parser(const ParserConfig& config = {});
21+
~Parser() = default;
22+
23+
// Non-copyable, non-movable
24+
Parser(const Parser&) = delete;
25+
Parser& operator=(const Parser&) = delete;
26+
27+
// Parse a SQL string. Returns ParseResult with classification + metadata.
28+
// For Tier 1 statements (SELECT, SET), returns PARTIAL until deep parsers
29+
// are implemented (future plan).
30+
ParseResult parse(const char* sql, size_t len);
31+
32+
// Reset the arena. Call after each query is fully processed.
33+
void reset();
34+
35+
private:
36+
Arena arena_;
37+
Tokenizer<D> tokenizer_;
38+
39+
// Classifier: dispatches to the right extractor/parser
40+
ParseResult classify_and_dispatch();
41+
42+
// Tier 1 stubs (return PARTIAL with stmt_type set)
43+
ParseResult parse_select();
44+
ParseResult parse_set();
45+
46+
// Tier 2 extractors
47+
ParseResult extract_insert(const Token& first);
48+
ParseResult extract_update(const Token& first);
49+
ParseResult extract_delete(const Token& first);
50+
ParseResult extract_replace(const Token& first);
51+
ParseResult extract_transaction(const Token& first);
52+
ParseResult extract_use(const Token& first);
53+
ParseResult extract_show(const Token& first);
54+
ParseResult extract_prepare(const Token& first);
55+
ParseResult extract_execute(const Token& first);
56+
ParseResult extract_deallocate(const Token& first);
57+
ParseResult extract_ddl(const Token& first);
58+
ParseResult extract_acl(const Token& first);
59+
ParseResult extract_lock(const Token& first);
60+
ParseResult extract_load(const Token& first);
61+
ParseResult extract_reset(const Token& first);
62+
ParseResult extract_unknown(const Token& first);
63+
64+
// Helpers
65+
// Read optional schema.table or just table. Returns table token.
66+
// If qualified (schema.table), sets schema_out.
67+
Token read_table_name(StringRef& schema_out);
68+
69+
// Scan forward to semicolon or EOF, set result.remaining
70+
void scan_to_end(ParseResult& result);
71+
};
72+
73+
} // namespace sql_parser
74+
75+
#endif // SQL_PARSER_PARSER_H

0 commit comments

Comments
 (0)