MCPcopy Create free account
hub / github.com/AmrDeveloper/GQL / parse_gql

Function parse_gql

crates/gitql-parser/src/parser.rs:49–85  ·  view source on GitHub ↗
(tokens: Vec<Token>, env: &mut Environment)

Source from the content-addressed store, hash-verified

47use crate::type_checker::type_check_projection_symbols;
48
49pub fn parse_gql(tokens: Vec<Token>, env: &mut Environment) -> Result<Vec<Query>, Box<Diagnostic>> {
50 let mut queries: Vec<Query> = vec![];
51 let mut position = 0;
52
53 while position < tokens.len() {
54 env.clear_session();
55
56 let query = match &tokens[position].kind {
57 TokenKind::Do => parse_do_query(env, &tokens, &mut position),
58 TokenKind::Set => parse_set_query(env, &tokens, &mut position),
59 TokenKind::Select => parse_select_query(env, &tokens, &mut position),
60 TokenKind::Describe => parse_describe_query(env, &tokens, &mut position),
61 TokenKind::Show => parse_show_query(&tokens, &mut position),
62 _ => Err(un_expected_query_start_error(&tokens, &mut position)),
63 }?;
64
65 // Consume optional `;` at the end of valid statement
66 if let Some(last_token) = tokens.get(position) {
67 if last_token.kind == TokenKind::Semicolon {
68 position += 1;
69 }
70 }
71
72 queries.push(query);
73 }
74
75 // Check for unexpected content after valid statement
76 if position < tokens.len() {
77 return Err(un_expected_content_after_correct_query(
78 &tokens[0].to_string(),
79 &tokens,
80 &mut position,
81 ));
82 }
83
84 Ok(queries)
85}
86
87fn parse_do_query(
88 env: &mut Environment,

Callers 1

execute_gitql_queryFunction · 0.85

Calls 9

parse_do_queryFunction · 0.85
parse_set_queryFunction · 0.85
parse_select_queryFunction · 0.85
parse_describe_queryFunction · 0.85
parse_show_queryFunction · 0.85
clear_sessionMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…