MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / tokenize

Function tokenize

nodedb-sql/src/parser/array_stmt/lexer.rs:40–218  ·  view source on GitHub ↗

Tokenize a SQL slice. Returns `Vec ` on success; any unexpected character produces `SqlError::Parse`.

(src: &str)

Source from the content-addressed store, hash-verified

38/// Tokenize a SQL slice. Returns `Vec<Token>` on success; any unexpected
39/// character produces `SqlError::Parse`.
40pub fn tokenize(src: &str) -> Result<Vec<Token>, SqlError> {
41 let bytes = src.as_bytes();
42 let mut out = Vec::with_capacity(src.len() / 4);
43 let mut i = 0;
44 while i < bytes.len() {
45 let b = bytes[i];
46 // Whitespace.
47 if b.is_ascii_whitespace() {
48 i += 1;
49 continue;
50 }
51 // Single-line comment `-- ...`.
52 if b == b'-' && i + 1 < bytes.len() && bytes[i + 1] == b'-' {
53 while i < bytes.len() && bytes[i] != b'\n' {
54 i += 1;
55 }
56 continue;
57 }
58 // Punctuation.
59 match b {
60 b'(' => {
61 out.push(Token {
62 tok: Tok::LParen,
63 pos: i,
64 });
65 i += 1;
66 continue;
67 }
68 b')' => {
69 out.push(Token {
70 tok: Tok::RParen,
71 pos: i,
72 });
73 i += 1;
74 continue;
75 }
76 b'[' => {
77 out.push(Token {
78 tok: Tok::LBracket,
79 pos: i,
80 });
81 i += 1;
82 continue;
83 }
84 b']' => {
85 out.push(Token {
86 tok: Tok::RBracket,
87 pos: i,
88 });
89 i += 1;
90 continue;
91 }
92 b',' => {
93 out.push(Token {
94 tok: Tok::Comma,
95 pos: i,
96 });
97 i += 1;

Callers 4

tokenize_simpleFunction · 0.70
tokenize_dotdot_rangeFunction · 0.70
tokenize_negativeFunction · 0.70

Calls 5

to_stringMethod · 0.80
as_bytesMethod · 0.45
lenMethod · 0.45
pushMethod · 0.45
parseMethod · 0.45

Tested by 3

tokenize_simpleFunction · 0.56
tokenize_dotdot_rangeFunction · 0.56
tokenize_negativeFunction · 0.56