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

Function parse_sorting_order

crates/gitql-parser/src/parse_ordering.rs:65–107  ·  view source on GitHub ↗
(
    tokens: &[Token],
    position: &mut usize,
)

Source from the content-addressed store, hash-verified

63}
64
65fn parse_sorting_order(
66 tokens: &[Token],
67 position: &mut usize,
68) -> Result<SortingOrder, Box<Diagnostic>> {
69 let mut sorting_order = SortingOrder::Ascending;
70 if *position >= tokens.len() {
71 return Ok(sorting_order);
72 }
73
74 // Parse `ASC` or `DESC`
75 if is_asc_or_desc(&tokens[*position]) {
76 if tokens[*position].kind == TokenKind::Descending {
77 sorting_order = SortingOrder::Descending;
78 }
79
80 // Consume `ASC or DESC` keyword
81 *position += 1;
82 return Ok(sorting_order);
83 }
84
85 // Parse `USING <Operator>`
86 if tokens[*position].kind == TokenKind::Using {
87 // Consume `USING` keyword
88 *position += 1;
89
90 if *position < tokens.len() && is_order_by_using_operator(&tokens[*position]) {
91 if tokens[*position].kind == TokenKind::Greater {
92 sorting_order = SortingOrder::Descending;
93 }
94
95 // Consume `> or <` keyword
96 *position += 1;
97 return Ok(sorting_order);
98 }
99
100 return Err(Diagnostic::error("Expect `>` or `<` after `USING` keyword")
101 .with_location(tokens[*position - 1].location)
102 .as_boxed());
103 }
104
105 // Return default sorting order
106 Ok(sorting_order)
107}
108
109fn parse_order_by_nulls_policy(
110 tokens: &[Token],

Callers 1

parse_order_by_statementFunction · 0.85

Calls 5

is_asc_or_descFunction · 0.85
as_boxedMethod · 0.80
with_locationMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…