pub enum TableReference {
Bare {
table: Arc<str>,
},
Partial {
schema: Arc<str>,
table: Arc<str>,
},
Full {
catalog: Arc<str>,
schema: Arc<str>,
table: Arc<str>,
},
}
Expand description
A multi part identifier (path) to a table that may require further
resolution (e.g. foo.bar
).
TableReference
s are cheap to clone()
as they are implemented with
Arc
.
See ResolvedTableReference
for a fully resolved table reference.
§Creating TableReference
When converting strings to TableReference
s, the string is parsed as
though it were a SQL identifier, normalizing (convert to lowercase) any
unquoted identifiers. TableReference::bare
creates references without
applying normalization semantics.
§Examples
// Get a table reference to 'mytable'
let table_reference = TableReference::from("mytable");
assert_eq!(table_reference, TableReference::bare("mytable"));
// Get a table reference to 'mytable' (note the capitalization)
let table_reference = TableReference::from("MyTable");
assert_eq!(table_reference, TableReference::bare("mytable"));
// Get a table reference to 'MyTable' (note the capitalization) using double quotes
// (programmatically it is better to use `TableReference::bare` for this)
let table_reference = TableReference::from(r#""MyTable""#);
assert_eq!(table_reference, TableReference::bare("MyTable"));
// Get a table reference to 'myschema.mytable' (note the capitalization)
let table_reference = TableReference::from("MySchema.MyTable");
assert_eq!(table_reference, TableReference::partial("myschema", "mytable"));
Variants§
Bare
An unqualified table reference, e.g. “table”
Partial
A partially resolved table reference, e.g. “schema.table”
Full
A fully resolved table reference, e.g. “catalog.schema.table”
Implementations§
Source§impl TableReference
impl TableReference
Sourcepub fn none() -> Option<TableReference>
pub fn none() -> Option<TableReference>
Convenience method for creating a typed none None
Sourcepub fn bare(table: impl Into<Arc<str>>) -> TableReference
pub fn bare(table: impl Into<Arc<str>>) -> TableReference
Convenience method for creating a TableReference::Bare
As described on TableReference
this does NO normalization at
all, so “Foo.Bar” stays as a reference to the table named
“Foo.Bar” (rather than “foo”.“bar”)
Sourcepub fn partial(
schema: impl Into<Arc<str>>,
table: impl Into<Arc<str>>,
) -> TableReference
pub fn partial( schema: impl Into<Arc<str>>, table: impl Into<Arc<str>>, ) -> TableReference
Convenience method for creating a TableReference::Partial
.
Note: NO normalization is applied to the schema or table name.
Sourcepub fn full(
catalog: impl Into<Arc<str>>,
schema: impl Into<Arc<str>>,
table: impl Into<Arc<str>>,
) -> TableReference
pub fn full( catalog: impl Into<Arc<str>>, schema: impl Into<Arc<str>>, table: impl Into<Arc<str>>, ) -> TableReference
Convenience method for creating a TableReference::Full
Note: NO normalization is applied to the catalog, schema or table name.
Sourcepub fn schema(&self) -> Option<&str>
pub fn schema(&self) -> Option<&str>
Retrieve the schema name if [Self::Partial]
or [Self::
Full],
None` otherwise.
Sourcepub fn catalog(&self) -> Option<&str>
pub fn catalog(&self) -> Option<&str>
Retrieve the catalog name if Self::Full
, None
otherwise.
Sourcepub fn resolved_eq(&self, other: &TableReference) -> bool
pub fn resolved_eq(&self, other: &TableReference) -> bool
Compare with another TableReference
as if both are resolved.
This allows comparing across variants. If a field is not present
in both variants being compared then it is ignored in the comparison.
e.g. this allows a TableReference::Bare
to be considered equal to a
fully qualified TableReference::Full
if the table names match.
Sourcepub fn resolve(
self,
default_catalog: &str,
default_schema: &str,
) -> ResolvedTableReference
pub fn resolve( self, default_catalog: &str, default_schema: &str, ) -> ResolvedTableReference
Given a default catalog and schema, ensure this table reference is fully resolved
Sourcepub fn to_quoted_string(&self) -> String
pub fn to_quoted_string(&self) -> String
Forms a string where the identifiers are quoted
§Example
let table_reference = TableReference::partial("myschema", "mytable");
assert_eq!(table_reference.to_quoted_string(), "myschema.mytable");
let table_reference = TableReference::partial("MySchema", "MyTable");
assert_eq!(table_reference.to_quoted_string(), r#""MySchema"."MyTable""#);
Sourcepub fn parse_str(s: &str) -> TableReference
pub fn parse_str(s: &str) -> TableReference
Forms a TableReference
by parsing s
as a multipart SQL
identifier. See docs on TableReference
for more details.
Sourcepub fn to_vec(&self) -> Vec<String>
pub fn to_vec(&self) -> Vec<String>
Decompose a TableReference
to separate parts. The result vector contains
at most three elements in the following sequence:
[<catalog>, <schema>, table]
Trait Implementations§
Source§impl Clone for TableReference
impl Clone for TableReference
Source§fn clone(&self) -> TableReference
fn clone(&self) -> TableReference
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for TableReference
impl Debug for TableReference
Source§impl Display for TableReference
impl Display for TableReference
Source§impl<'a> From<&'a String> for TableReference
impl<'a> From<&'a String> for TableReference
Source§fn from(s: &'a String) -> TableReference
fn from(s: &'a String) -> TableReference
Source§impl<'a> From<&'a str> for TableReference
impl<'a> From<&'a str> for TableReference
Parse a string into a TableReference, normalizing where appropriate
See full details on TableReference::parse_str
Source§fn from(s: &'a str) -> TableReference
fn from(s: &'a str) -> TableReference
Source§impl From<ResolvedTableReference> for TableReference
impl From<ResolvedTableReference> for TableReference
Source§fn from(resolved: ResolvedTableReference) -> TableReference
fn from(resolved: ResolvedTableReference) -> TableReference
Source§impl From<String> for TableReference
impl From<String> for TableReference
Source§fn from(s: String) -> TableReference
fn from(s: String) -> TableReference
Source§impl Hash for TableReference
impl Hash for TableReference
Source§impl Ord for TableReference
impl Ord for TableReference
Source§fn cmp(&self, other: &TableReference) -> Ordering
fn cmp(&self, other: &TableReference) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for TableReference
impl PartialEq for TableReference
Source§impl PartialOrd for TableReference
impl PartialOrd for TableReference
impl Eq for TableReference
impl StructuralPartialEq for TableReference
Auto Trait Implementations§
impl Freeze for TableReference
impl RefUnwindSafe for TableReference
impl Send for TableReference
impl Sync for TableReference
impl Unpin for TableReference
impl UnwindSafe for TableReference
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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<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