pub struct WindowRewriter;Expand description
Rewrites window functions in SQL queries
Implementations§
Source§impl WindowRewriter
impl WindowRewriter
Sourcepub fn rewrite_statement(stmt: &mut Statement) -> Result<(), ParseError>
pub fn rewrite_statement(stmt: &mut Statement) -> Result<(), ParseError>
Rewrite a SQL statement to expand window functions.
Transforms window functions like TUMBLE into appropriate table functions
and adds window_start/window_end columns.
§Errors
Returns ParseError::WindowError if a window function cannot be rewritten.
§Example
-- Input:
SELECT COUNT(*) FROM events
GROUP BY TUMBLE(event_time, INTERVAL '5' MINUTE)
-- Output:
SELECT window_start, window_end, COUNT(*)
FROM events
GROUP BY window_start, window_endSourcepub fn contains_window_function(expr: &Expr) -> bool
pub fn contains_window_function(expr: &Expr) -> bool
Check if expression contains a window function.
Sourcepub fn extract_window_function(
expr: &Expr,
) -> Result<Option<WindowFunction>, ParseError>
pub fn extract_window_function( expr: &Expr, ) -> Result<Option<WindowFunction>, ParseError>
Extract window function details from expression.
Parses the actual arguments from TUMBLE/HOP/SESSION function calls.
§Supported syntax
TUMBLE(time_column, interval)- 2 argumentsHOP(time_column, slide_interval, window_size)- 3 argumentsSLIDE(time_column, slide_interval, window_size)- alias for HOPSESSION(time_column, gap_interval)- 2 arguments
§Errors
Returns ParseError::WindowError if:
- Function has empty name
- Wrong number of arguments for window type
- Arguments cannot be extracted
Sourcepub fn get_time_column_name(window: &WindowFunction) -> Option<String>
pub fn get_time_column_name(window: &WindowFunction) -> Option<String>
Extract the time column name from a window function.
Returns the column name as a string if extractable.
Sourcepub fn parse_interval_to_duration(expr: &Expr) -> Result<Duration, ParseError>
pub fn parse_interval_to_duration(expr: &Expr) -> Result<Duration, ParseError>
Parse an INTERVAL expression to Duration.
Supports: SECOND, MINUTE, HOUR, DAY
§Errors
Returns ParseError::WindowError if the expression is not a valid interval.
Auto Trait Implementations§
impl Freeze for WindowRewriter
impl RefUnwindSafe for WindowRewriter
impl Send for WindowRewriter
impl Sync for WindowRewriter
impl Unpin for WindowRewriter
impl UnsafeUnpin for WindowRewriter
impl UnwindSafe for WindowRewriter
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.