pub struct ColumnReference {
pub table: Option<TableReference>,
pub name: Ident,
}Expand description
A column-level identity reference: an optional owning table plus the column name.
table is Option because a column the resolver couldn’t pin to a
single owning table — Ambiguous or
Unresolved (see
ColumnRead::resolution for why) — still surfaces its name with
table: None. Identity is name-based: two ColumnReferences with the
same table and name compare equal, independent of where they
appeared in the SQL or how the resolver placed them. (For dialect-aware
equality, see identity_key.)
Fields§
§table: Option<TableReference>§name: IdentImplementations§
Source§impl ColumnReference
impl ColumnReference
Sourcepub fn identity_key(&self, casing: &IdentifierCasing) -> ColumnIdentityKey
pub fn identity_key(&self, casing: &IdentifierCasing) -> ColumnIdentityKey
The dialect-aware ColumnIdentityKey for this reference: the
owning table folded by the table rule, the column name by the column
rule. Equal keys denote the same column under that dialect’s casing.
Like TableReference::identity_key this is the catalog-free dedup
key — folding both the owning table and the column name (by their
separate rules, which a dialect can set apart). The owning table is
part of the identity: same column name, different table → different
column.
use sql_insight::{CaseRule, ColumnReference, IdentifierCasing, TableReference};
let owned = |t: &str| Some(TableReference { catalog: None, schema: None, name: t.into() });
let lower = ColumnReference { table: owned("users"), name: "id".into() };
let upper = ColumnReference { table: owned("USERS"), name: "ID".into() };
// Structural equality is exact; a case-folding casing merges them.
assert_ne!(lower, upper);
let casing = IdentifierCasing::uniform(CaseRule::Insensitive);
assert!(lower.same_column(&upper, &casing));
// A different owning table is a different column, same name or not.
let other = ColumnReference { table: owned("accounts"), name: "id".into() };
assert!(!lower.same_column(&other, &casing));Sourcepub fn same_column(&self, other: &Self, casing: &IdentifierCasing) -> bool
pub fn same_column(&self, other: &Self, casing: &IdentifierCasing) -> bool
Whether self and other denote the same column under casing —
equivalent to comparing their identity_keys.
Trait Implementations§
Source§impl Clone for ColumnReference
impl Clone for ColumnReference
Source§fn clone(&self) -> ColumnReference
fn clone(&self) -> ColumnReference
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ColumnReference
impl Debug for ColumnReference
Source§impl Display for ColumnReference
impl Display for ColumnReference
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
table.column when the owning table is known (the table renders as
its own TableReference path), otherwise just column. Mirrors
TableReference’s Display for the column-identity case.
use sql_insight::{ColumnReference, TableReference};
let qualified = ColumnReference {
table: Some(TableReference {
catalog: None,
schema: Some("public".into()),
name: "users".into(),
}),
name: "id".into(),
};
assert_eq!(qualified.to_string(), "public.users.id");
let bare = ColumnReference { table: None, name: "id".into() };
assert_eq!(bare.to_string(), "id");impl Eq for ColumnReference
Source§impl Hash for ColumnReference
impl Hash for ColumnReference
Source§impl PartialEq for ColumnReference
impl PartialEq for ColumnReference
Source§fn eq(&self, other: &ColumnReference) -> bool
fn eq(&self, other: &ColumnReference) -> bool
self and other values to be equal, and is used by ==.