Skip to main content

ParseContext

Struct ParseContext 

Source
pub struct ParseContext<'a> { /* private fields */ }

Implementations§

Source§

impl<'a> ParseContext<'a>

Source

pub fn expect_identifier(&mut self) -> Result<String, ParseError>

Source

pub fn expect_boolean_literal(&mut self) -> Result<bool, ParseError>

Parse a boolean literal (true / false).

Unlike a fuzzy identifier comparison, any non-boolean token is reported explicitly so that SET LOCKED = yes fails instead of silently behaving as false.

Source

pub fn expect_dcl_name(&mut self) -> Result<String, ParseError>

Parse a DCL object name (username / space name).

Accepts identifiers, keywords, numbers, string literals and hyphenated sequences (e.g. user-name-123, NULL, 12345, "'; DROP USER --").

Source

pub fn expect_string_literal(&mut self) -> Result<String, ParseError>

Source

pub fn expect_integer_literal(&mut self) -> Result<i64, ParseError>

Source

pub fn expect_float_literal(&mut self) -> Result<f64, ParseError>

Source

pub fn is_identifier_or_in_token(&self) -> bool

Source

pub fn is_identifier_token(&self) -> bool

Source

pub fn check_keyword(&mut self, keyword: &str) -> bool

Source

pub fn check_keyword_sequence(&mut self, keywords: &[&str]) -> bool

Check if the next tokens match the given sequence (non-consuming)

Source

pub fn consume_keyword(&mut self, keyword: &str) -> Result<(), ParseError>

Source

pub fn consume_identifier(&mut self) -> Result<String, ParseError>

Source

pub fn consume_string(&mut self) -> Result<String, ParseError>

Source

pub fn consume_float(&mut self) -> Result<f64, ParseError>

Source

pub fn consume_int(&mut self) -> Result<i64, ParseError>

Source

pub fn consume_token(&mut self, token: &str) -> Result<(), ParseError>

Source

pub fn consume_optional_token(&mut self, token: &str) -> bool

Source

pub fn try_consume_string(&mut self) -> Option<String>

Source

pub fn try_consume_quoted_string(&mut self) -> Option<String>

Source§

impl<'a> ParseContext<'a>

Source

pub fn new(input: &'a str) -> Self

Source

pub fn from_string(input: String) -> Self

Source

pub fn checkpoint(&self) -> ParseContextCheckpoint

Source

pub fn restore(&mut self, ckpt: ParseContextCheckpoint)

Source

pub fn set_expression_context( &mut self, expr_context: Arc<ExpressionAnalysisContext>, )

Source

pub fn expression_context(&self) -> &Arc<ExpressionAnalysisContext> ⓘ

Source

pub fn set_type_alias_manager(&mut self, manager: Arc<TypeAliasManager>)

Attach the shared user-defined type-alias catalog.

Source

pub fn resolve_named_type(&self, name: &str) -> Option<DataType>

Resolve a raw type name through builtin types, then user-defined aliases. Returns None when the name denotes neither.

Source

pub fn expression_context_clone(&self) -> Arc<ExpressionAnalysisContext> ⓘ

Source

pub fn take_recursive_comprehension(&mut self) -> Option<RecursiveComprehension>

Source

pub fn set_recursive_comprehension(&mut self, rc: RecursiveComprehension)

Source

pub fn lexer(&self) -> &Lexer<'a>

Source

pub fn lexer_mut(&mut self) -> &mut Lexer<'a>

Source

pub fn set_compat_mode(&mut self, enabled: bool)

Source

pub fn set_upsert_mode(&mut self, enabled: bool)

Source

pub fn is_upsert_mode(&self) -> bool

Source

pub fn is_edge_syntax_mode(&self) -> bool

Whether the parser is inside a DML edge statement (src -> dst) where -> is an edge arrow rather than the JSON access operator.

Source

pub fn with_edge_syntax_mode<T>( &mut self, f: impl FnOnce(&mut Self) -> Result<T, ParseError>, ) -> Result<T, ParseError>

Run f with DML edge syntax enabled, then restore the previous mode even on error.

Source

pub fn is_pipe_or_suppressed(&self) -> bool

Whether | should be treated as a list-comprehension separator instead of the bitwise-OR operator in the current parsing position.

Source

pub fn with_pipe_or_suppression<T>( &mut self, value: bool, f: impl FnOnce(&mut Self) -> Result<T, ParseError>, ) -> Result<T, ParseError>

Run f with suppress_pipe_or forced to value, restoring the previous setting afterwards (even on error).

Source

pub fn enter_recursion(&mut self) -> Result<(), ParseError>

Source

pub fn exit_recursion(&mut self)

Source

pub fn add_error(&mut self, error: ParseError)

Source

pub fn add_lex_error(&mut self, error: LexError)

Source

pub fn errors(&self) -> &ParseErrors

Source

pub fn has_errors(&self) -> bool

Source

pub fn take_errors(&mut self) -> ParseErrors

Source

pub fn current_position(&self) -> Position

Source

pub fn current_span(&self) -> Span

Source

pub fn merge_span(&self, start: Position, end: Position) -> Span

Source

pub fn span_since(&self, start: Position) -> Span

Span from start (usually another span’s .start) up to the current cursor position. Replaces the end_span = ctx.current_span() / merge_span(start, end_span.end) idiom spread across the parsers.

Source

pub fn current_token(&self) -> &Token

Source

pub fn next_token(&mut self)

Source

pub fn peek_token(&mut self) -> &Token

Return the next token WITHOUT consuming it.

The lookahead is buffered in the context, so the token returned here is the one that the next ParseContext::next_token (or match_token / expect_token) call will consume.

Source

pub fn match_token(&mut self, expected: TokenKind) -> bool

Source

pub fn check_token(&self, expected: TokenKind) -> bool

Source

pub fn expect_token(&mut self, expected: TokenKind) -> Result<(), ParseError>

Source

pub fn is_recovery_exhausted(&self) -> bool

Source

pub fn record_recovery(&mut self)

Source

pub fn reset_recovery_count(&mut self)

Source

pub fn synchronize(&mut self, scope: RecoveryScope)

Source

pub fn try_recover( &mut self, error: ParseError, scope: RecoveryScope, ) -> Result<(), ParseError>

Source

pub fn recover_clause<T>( &mut self, fallback: impl FnOnce(&mut ParseContext<'_>) -> Result<T, ParseError>, parse: impl FnOnce(&mut ParseContext<'_>) -> Result<T, ParseError>, ) -> Result<T, ParseError>

Parse a clause body with clause-level error recovery.

On failure the error is recorded and the parser synchronizes to the next clause boundary keyword, so the remaining clauses of the enclosing statement are still parsed. fallback must produce a structurally valid placeholder for the failed clause; the query is still rejected once the collected errors are inspected by the caller. Returns the original error, unrecorded, when the recovery limit is reached.

Source

pub fn consume_value(&mut self) -> Result<Value, ParseError>

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for ParseContext<'a>

§

impl<'a> !UnwindSafe for ParseContext<'a>

§

impl<'a> Freeze for ParseContext<'a>

§

impl<'a> Send for ParseContext<'a>

§

impl<'a> Sync for ParseContext<'a>

§

impl<'a> Unpin for ParseContext<'a>

§

impl<'a> UnsafeUnpin for ParseContext<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more