pub struct Column<T> { /* private fields */ }Expand description
Typed column reference.
Column is a zero-cost abstraction that carries type information at compile time without runtime overhead. It is Copy and uses only static string references.
§Examples
use nautilus_core::{Column, Expr, Value};
let id_col: Column<i64> = Column::new("users", "id");
let expr = id_col.eq(42);Implementations§
Source§impl<T> Column<T>
impl<T> Column<T>
Sourcepub const fn new(table: &'static str, name: &'static str) -> Column<T>
pub const fn new(table: &'static str, name: &'static str) -> Column<T>
Creates a new typed column reference.
This is a const fn, so columns can be defined as constants.
§Examples
use nautilus_core::Column;
const USER_ID: Column<i64> = Column::new("users", "id");
const USER_EMAIL: Column<String> = Column::new("users", "email");Sourcepub fn marker(&self) -> ColumnMarker
pub fn marker(&self) -> ColumnMarker
Returns a column marker for this column.
Static generated columns borrow their metadata without allocating.
Sourcepub fn alias(&self) -> String
pub fn alias(&self) -> String
Returns the join-safe alias for this column.
The alias uses the format "table__column" which is safe to use
in queries with joins, preventing column name conflicts.
Matches the naming of ColumnMarker::alias.
§Examples
use nautilus_core::Column;
let id: Column<i64> = Column::new("users", "id");
assert_eq!(id.alias(), "users__id");Sourcepub fn eq<V>(self, value: V) -> Expr
pub fn eq<V>(self, value: V) -> Expr
Creates an equality comparison (=).
§Examples
use nautilus_core::{Column, Expr, Value};
let id: Column<i64> = Column::new("users", "id");
let expr = id.eq(42);Sourcepub fn eq_column<U>(self, other: Column<U>) -> Expr
pub fn eq_column<U>(self, other: Column<U>) -> Expr
Creates a column-to-column equality expression.
This is useful for JOIN ON conditions where both sides are columns.
§Examples
use nautilus_core::{Column, Expr};
let user_id: Column<i64> = Column::new("users", "id");
let post_user_id: Column<i64> = Column::new("posts", "user_id");
let on = user_id.eq_column(post_user_id);Source§impl Column<String>
impl Column<String>
Sourcepub fn ends_with(self, suffix: impl Into<String>) -> Expr
pub fn ends_with(self, suffix: impl Into<String>) -> Expr
Creates a LIKE expression for suffix matching.
Generates a SQL LIKE pattern of the form %suffix.
§Examples
use nautilus_core::{Column, Expr, Value};
let email: Column<String> = Column::new("users", "email");
let expr = email.ends_with("example.com");Sourcepub fn starts_with(self, prefix: impl Into<String>) -> Expr
pub fn starts_with(self, prefix: impl Into<String>) -> Expr
Creates a LIKE expression for prefix matching.
Generates a SQL LIKE pattern of the form prefix%.
§Examples
use nautilus_core::{Column, Expr, Value};
let email: Column<String> = Column::new("users", "email");
let expr = email.starts_with("admin");Sourcepub fn contains(self, substring: impl Into<String>) -> Expr
pub fn contains(self, substring: impl Into<String>) -> Expr
Creates a LIKE expression for substring matching.
Generates a SQL LIKE pattern of the form %substring%.
§Examples
use nautilus_core::{Column, Expr, Value};
let email: Column<String> = Column::new("users", "email");
let expr = email.contains("example");Source§impl<T> Column<Vec<T>>
impl<T> Column<Vec<T>>
Sourcepub fn contains_elem(self, elem: T) -> Expr
pub fn contains_elem(self, elem: T) -> Expr
Creates an array contains expression (@> in PostgreSQL).
Returns rows where the column array contains the given element.
§Examples
use nautilus_core::{Column, Expr, Value};
let tags: Column<Vec<String>> = Column::new("posts", "tags");
let expr = tags.contains_elem("rust".to_string());Sourcepub fn contains_all(self, elements: Vec<T>) -> Expr
pub fn contains_all(self, elements: Vec<T>) -> Expr
Creates an array contains expression for multiple elements (@> in PostgreSQL).
Returns rows where the column array contains all the given elements.
§Examples
use nautilus_core::{Column, Expr, Value};
let tags: Column<Vec<String>> = Column::new("posts", "tags");
let expr = tags.contains_all(vec!["rust".to_string(), "programming".to_string()]);Sourcepub fn contained_by(self, container: Vec<T>) -> Expr
pub fn contained_by(self, container: Vec<T>) -> Expr
Creates an array contained by expression (<@ in PostgreSQL).
Returns rows where the column array is contained by the given array.
§Examples
use nautilus_core::{Column, Expr, Value};
let tags: Column<Vec<String>> = Column::new("posts", "tags");
let expr = tags.contained_by(vec!["rust".to_string(), "go".to_string()]);Sourcepub fn overlaps(self, other: Vec<T>) -> Expr
pub fn overlaps(self, other: Vec<T>) -> Expr
Creates an array overlaps expression (&& in PostgreSQL).
Returns rows where the column array has any elements in common with the given array.
§Examples
use nautilus_core::{Column, Expr, Value};
let tags: Column<Vec<String>> = Column::new("posts", "tags");
let expr = tags.overlaps(vec!["rust".to_string(), "go".to_string()]);Trait Implementations§
impl<T> Copy for Column<T>where
T: Copy,
impl<T> Eq for Column<T>where
T: Eq,
impl<T> StructuralPartialEq for Column<T>
Auto Trait Implementations§
impl<T> Freeze for Column<T>
impl<T> RefUnwindSafe for Column<T>where
T: RefUnwindSafe,
impl<T> Send for Column<T>where
T: Send,
impl<T> Sync for Column<T>where
T: Sync,
impl<T> Unpin for Column<T>where
T: Unpin,
impl<T> UnsafeUnpin for Column<T>
impl<T> UnwindSafe for Column<T>where
T: UnwindSafe,
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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>
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>
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