Skip to main content

SQLQuery

Struct SQLQuery 

Source
pub struct SQLQuery { /* private fields */ }
Expand description

SQL-like query for Redis Search.

Holds a SQL SELECT statement and optional named parameters. Parameter placeholders use the :name syntax (e.g. :id, :product_id).

When used with SearchIndex::query(), the SQL is parsed and translated into a Redis Search FT.SEARCH filter string. Non-aggregate queries with WHERE, ORDER BY, LIMIT, and OFFSET clauses are supported.

§Example

use redis_vl::{SQLQuery, SqlParam};

let query = SQLQuery::new("SELECT * FROM idx WHERE price > :min_price")
    .with_param("min_price", SqlParam::Float(99.99));

assert!(!query.substituted_sql().contains(":min_price"));
assert!(query.substituted_sql().contains("99.99"));

Implementations§

Source§

impl SQLQuery

Source

pub fn new(sql: impl Into<String>) -> Self

Creates an SQL query wrapper with no parameters.

Source

pub fn with_params( sql: impl Into<String>, params: HashMap<String, SqlParam>, ) -> Self

Creates an SQL query with pre-populated parameters.

Source

pub fn with_param(self, name: impl Into<String>, value: SqlParam) -> Self

Adds a single named parameter.

Source

pub fn sql(&self) -> &str

Returns the raw SQL string.

Source

pub fn params_map(&self) -> &HashMap<String, SqlParam>

Returns the parameter map.

Source

pub fn substituted_sql(&self) -> String

Returns the SQL string with non-binary parameters substituted.

Uses a token-based approach: splits the SQL on :param boundaries to prevent partial matching (:id inside :product_id stays intact). Single quotes in string values are SQL-escaped (''').

Source

pub fn is_aggregate(&self) -> bool

Returns true if this SQL query is an aggregate query (contains aggregate functions like COUNT, SUM, AVG, etc., or GROUP BY).

Aggregate queries are translated to FT.AGGREGATE rather than FT.SEARCH.

Source

pub fn build_aggregate_cmd(&self, index_name: &str) -> Option<Cmd>

Builds an FT.AGGREGATE command for aggregate SQL queries.

Returns None if the SQL is not an aggregate query.

The index_name parameter is the Redis Search index to query.

Source

pub fn is_vector_query(&self) -> bool

Returns true if this SQL query contains vector search functions (vector_distance() or cosine_distance()).

Source

pub fn is_geo_aggregate(&self) -> bool

Returns true if this SQL query contains geo_distance() in the SELECT clause (which generates FT.AGGREGATE with APPLY geodistance).

Source

pub fn build_geo_aggregate_cmd(&self, index_name: &str) -> Option<Cmd>

Builds an FT.AGGREGATE command for geo_distance in SELECT.

Returns None if the SQL doesn’t have geo_distance() in SELECT.

Trait Implementations§

Source§

impl Clone for SQLQuery

Source§

fn clone(&self) -> SQLQuery

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SQLQuery

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl QueryString for SQLQuery

Source§

fn to_redis_query(&self) -> String

Builds a Redis Search query string.
Source§

fn params(&self) -> Vec<QueryParam>

Query parameters used with Redis PARAMS.
Source§

fn return_fields(&self) -> Vec<String>

Return fields requested by the query.
Source§

fn sort_by(&self) -> Option<SortBy>

Sort order requested by the query.
Source§

fn limit(&self) -> Option<QueryLimit>

Limit clause requested by the query.
Source§

fn should_unpack_json(&self) -> bool

Whether JSON search results should be unpacked into top-level fields when no explicit projection is requested.
Source§

fn geofilter(&self) -> Option<GeoFilter>

Optional geo-spatial filter for FT.SEARCH GEOFILTER clause.
Source§

fn render(&self) -> QueryRender

Builds the full query render, including search options and params.
Source§

fn dialect(&self) -> u32

Query dialect.
Source§

fn in_order(&self) -> bool

Whether the query should use INORDER.
Source§

fn no_content(&self) -> bool

Whether the query should use NOCONTENT.
Source§

fn scorer(&self) -> Option<String>

Optional scorer.
Source§

fn kind(&self) -> QueryKind

The processed result shape for this query.

Auto Trait Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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