Enum TableFactor
pub enum TableFactor {
Show 13 variants
Table {
name: ObjectName,
alias: Option<TableAlias>,
args: Option<TableFunctionArgs>,
with_hints: Vec<Expr>,
version: Option<TableVersion>,
with_ordinality: bool,
partitions: Vec<Ident>,
json_path: Option<JsonPath>,
sample: Option<TableSampleKind>,
index_hints: Vec<TableIndexHints>,
},
Derived {
lateral: bool,
subquery: Box<Query>,
alias: Option<TableAlias>,
},
TableFunction {
expr: Expr,
alias: Option<TableAlias>,
},
Function {
lateral: bool,
name: ObjectName,
args: Vec<FunctionArg>,
alias: Option<TableAlias>,
},
UNNEST {
alias: Option<TableAlias>,
array_exprs: Vec<Expr>,
with_offset: bool,
with_offset_alias: Option<Ident>,
with_ordinality: bool,
},
JsonTable {
json_expr: Expr,
json_path: Value,
columns: Vec<JsonTableColumn>,
alias: Option<TableAlias>,
},
OpenJsonTable {
json_expr: Expr,
json_path: Option<Value>,
columns: Vec<OpenJsonTableColumn>,
alias: Option<TableAlias>,
},
NestedJoin {
table_with_joins: Box<TableWithJoins>,
alias: Option<TableAlias>,
},
Pivot {
table: Box<TableFactor>,
aggregate_functions: Vec<ExprWithAlias>,
value_column: Vec<Expr>,
value_source: PivotValueSource,
default_on_null: Option<Expr>,
alias: Option<TableAlias>,
},
Unpivot {
table: Box<TableFactor>,
value: Expr,
name: Ident,
columns: Vec<ExprWithAlias>,
null_inclusion: Option<NullInclusion>,
alias: Option<TableAlias>,
},
MatchRecognize {
table: Box<TableFactor>,
partition_by: Vec<Expr>,
order_by: Vec<OrderByExpr>,
measures: Vec<Measure>,
rows_per_match: Option<RowsPerMatch>,
after_match_skip: Option<AfterMatchSkip>,
pattern: MatchRecognizePattern,
symbols: Vec<SymbolDefinition>,
alias: Option<TableAlias>,
},
XmlTable {
namespaces: Vec<XmlNamespaceDefinition>,
row_expression: Expr,
passing: XmlPassingClause,
columns: Vec<XmlTableColumn>,
alias: Option<TableAlias>,
},
SemanticView {
name: ObjectName,
dimensions: Vec<Expr>,
metrics: Vec<Expr>,
facts: Vec<Expr>,
where_clause: Option<Expr>,
alias: Option<TableAlias>,
},
}Expand description
A table name or a parenthesized subquery with an optional alias
Variants§
Table
Fields
name: ObjectNamealias: Option<TableAlias>args: Option<TableFunctionArgs>Arguments of a table-valued function, as supported by Postgres
and MSSQL. Note that deprecated MSSQL FROM foo (NOLOCK) syntax
will also be parsed as args.
This field’s value is Some(v), where v is a (possibly empty)
vector of arguments, in the case of a table-valued function call,
whereas it’s None in the case of a regular table name.
version: Option<TableVersion>Optional version qualifier to facilitate table time-travel, as supported by BigQuery and MSSQL.
with_ordinality: boolFor example, SELECT * FROM generate_series(1, 10) WITH ORDINALITY AS t(a, b);
WITH ORDINALITY, supported by Postgres.
partitions: Vec<Ident>Partition selection, supported by MySQL.
json_path: Option<JsonPath>Optional PartiQL JsonPath: https://partiql.org/dql/from.html
sample: Option<TableSampleKind>Optional table sample modifier See: https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#sample-clause
index_hints: Vec<TableIndexHints>Optional index hints(mysql) See: https://dev.mysql.com/doc/refman/8.4/en/index-hints.html
Derived
TableFunction
TABLE(<expr>)[ AS <alias> ]
Function
e.g. LATERAL FLATTEN(<args>)[ AS <alias> ]
UNNEST
SELECT * FROM UNNEST ([10,20,30]) as numbers WITH OFFSET;
+---------+--------+
| numbers | offset |
+---------+--------+
| 10 | 0 |
| 20 | 1 |
| 30 | 2 |
+---------+--------+Fields
alias: Option<TableAlias>JsonTable
The JSON_TABLE table-valued function.
Part of the SQL standard, but implemented only by MySQL, Oracle, and DB2.
https://modern-sql.com/blog/2017-06/whats-new-in-sql-2016#json_table https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table
SELECT * FROM JSON_TABLE(
'[{"a": 1, "b": 2}, {"a": 3, "b": 4}]',
'$[*]' COLUMNS(
a INT PATH '$.a' DEFAULT '0' ON EMPTY,
b INT PATH '$.b' NULL ON ERROR
)
) AS jt;Fields
json_path: ValueThe path to the array or object to be iterated over. It must evaluate to a json array or object.
columns: Vec<JsonTableColumn>The columns to be extracted from each element of the array or object. Each column must have a name and a type.
alias: Option<TableAlias>The alias for the table.
OpenJsonTable
The MSSQL’s OPENJSON table-valued function.
OPENJSON( jsonExpression [ , path ] ) [ <with_clause> ]
<with_clause> ::= WITH ( { colName type [ column_path ] [ AS JSON ] } [ ,...n ] )Fields
json_path: Option<Value>The path to the array or object to be iterated over. It must evaluate to a json array or object.
columns: Vec<OpenJsonTableColumn>The columns to be extracted from each element of the array or object. Each column must have a name and a type.
alias: Option<TableAlias>The alias for the table.
NestedJoin
Represents a parenthesized table factor. The SQL spec only allows a
join expression ((foo <JOIN> bar [ <JOIN> baz ... ])) to be nested,
possibly several times.
The parser may also accept non-standard nesting of bare tables for some dialects, but the information about such nesting is stripped from AST.
Pivot
Represents PIVOT operation on a table.
For example FROM monthly_sales PIVOT(sum(amount) FOR MONTH IN ('JAN', 'FEB'))
Fields
table: Box<TableFactor>aggregate_functions: Vec<ExprWithAlias>value_source: PivotValueSourcealias: Option<TableAlias>Unpivot
An UNPIVOT operation on a table.
Syntax:
table UNPIVOT [ { INCLUDE | EXCLUDE } NULLS ] (value FOR name IN (column1, [ column2, ... ])) [ alias ]See https://docs.snowflake.com/en/sql-reference/constructs/unpivot. See https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.
Fields
table: Box<TableFactor>columns: Vec<ExprWithAlias>null_inclusion: Option<NullInclusion>alias: Option<TableAlias>MatchRecognize
A MATCH_RECOGNIZE operation on a table.
See https://docs.snowflake.com/en/sql-reference/constructs/match_recognize.
Fields
table: Box<TableFactor>order_by: Vec<OrderByExpr>ORDER BY <expr> [, ... ]
rows_per_match: Option<RowsPerMatch>ONE ROW PER MATCH | ALL ROWS PER MATCH [ <option> ]
after_match_skip: Option<AfterMatchSkip>AFTER MATCH SKIP <option>
pattern: MatchRecognizePatternPATTERN ( <pattern> )
symbols: Vec<SymbolDefinition>DEFINE <symbol> AS <expr> [, ... ]
alias: Option<TableAlias>XmlTable
The XMLTABLE table-valued function.
Part of the SQL standard, supported by PostgreSQL, Oracle, and DB2.
https://www.postgresql.org/docs/15/functions-xml.html#FUNCTIONS-XML-PROCESSING
SELECT xmltable.*
FROM xmldata,
XMLTABLE('//ROWS/ROW'
PASSING data
COLUMNS id int PATH '@id',
ordinality FOR ORDINALITY,
"COUNTRY_NAME" text,
country_id text PATH 'COUNTRY_ID',
size_sq_km float PATH 'SIZE[@unit = "sq_km"]',
size_other text PATH 'concat(SIZE[@unit!="sq_km"], " ", SIZE[@unit!="sq_km"]/@unit)',
premier_name text PATH 'PREMIER_NAME' DEFAULT 'not specified'
);Fields
namespaces: Vec<XmlNamespaceDefinition>Optional XMLNAMESPACES clause (empty if not present)
passing: XmlPassingClauseThe PASSING clause specifying the document expression.
columns: Vec<XmlTableColumn>The columns to be extracted from each generated row.
alias: Option<TableAlias>The alias for the table.
SemanticView
Snowflake’s SEMANTIC_VIEW function for semantic models.
https://docs.snowflake.com/en/sql-reference/constructs/semantic_view
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_market_segment
METRICS orders.order_average_value
);Fields
name: ObjectNameThe name of the semantic model
dimensions: Vec<Expr>List of dimensions or expression referring to dimensions (e.g. DATE_PART(‘year’, col))
alias: Option<TableAlias>The alias for the table
Trait Implementations§
§impl Clone for TableFactor
impl Clone for TableFactor
§fn clone(&self) -> TableFactor
fn clone(&self) -> TableFactor
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for TableFactor
impl Debug for TableFactor
§impl Display for TableFactor
impl Display for TableFactor
§impl Hash for TableFactor
impl Hash for TableFactor
§impl Ord for TableFactor
impl Ord for TableFactor
§impl PartialEq for TableFactor
impl PartialEq for TableFactor
§impl PartialOrd for TableFactor
impl PartialOrd for TableFactor
§impl Spanned for TableFactor
§partial span
Missing spans:
impl Spanned for TableFactor
§partial span
Missing spans:
§impl Visit for TableFactor
impl Visit for TableFactor
§impl VisitMut for TableFactor
impl VisitMut for TableFactor
fn visit<V>(&mut self, visitor: &mut V) -> ControlFlow<<V as VisitorMut>::Break>where
V: VisitorMut,
impl Eq for TableFactor
impl StructuralPartialEq for TableFactor
Auto Trait Implementations§
impl Freeze for TableFactor
impl RefUnwindSafe for TableFactor
impl Send for TableFactor
impl Sync for TableFactor
impl Unpin for TableFactor
impl UnwindSafe for TableFactor
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,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.