Enhance object name path segments (#1539)

This commit is contained in:
Ayman Elkfrawy 2025-01-26 06:13:51 -08:00 committed by GitHub
parent fd6c98e933
commit 211b15e790
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 584 additions and 466 deletions

View file

@ -53,7 +53,7 @@ println!("AST: {:?}", ast);
This outputs
```rust
AST: [Query(Query { ctes: [], body: Select(Select { distinct: false, projection: [UnnamedExpr(Identifier("a")), UnnamedExpr(Identifier("b")), UnnamedExpr(Value(Long(123))), UnnamedExpr(Function(Function { name: ObjectName(["myfunc"]), args: [Identifier("b")], filter: None, over: None, distinct: false }))], from: [TableWithJoins { relation: Table { name: ObjectName(["table_1"]), alias: None, args: [], with_hints: [] }, joins: [] }], selection: Some(BinaryOp { left: BinaryOp { left: Identifier("a"), op: Gt, right: Identifier("b") }, op: And, right: BinaryOp { left: Identifier("b"), op: Lt, right: Value(Long(100)) } }), group_by: [], having: None }), order_by: [OrderByExpr { expr: Identifier("a"), asc: Some(false) }, OrderByExpr { expr: Identifier("b"), asc: None }], limit: None, offset: None, fetch: None })]
AST: [Query(Query { ctes: [], body: Select(Select { distinct: false, projection: [UnnamedExpr(Identifier("a")), UnnamedExpr(Identifier("b")), UnnamedExpr(Value(Long(123))), UnnamedExpr(Function(Function { name:ObjectName([Identifier(Ident { value: "myfunc", quote_style: None })]), args: [Identifier("b")], filter: None, over: None, distinct: false }))], from: [TableWithJoins { relation: Table { name: ObjectName([Identifier(Ident { value: "table_1", quote_style: None })]), alias: None, args: [], with_hints: [] }, joins: [] }], selection: Some(BinaryOp { left: BinaryOp { left: Identifier("a"), op: Gt, right: Identifier("b") }, op: And, right: BinaryOp { left: Identifier("b"), op: Lt, right: Value(Long(100)) } }), group_by: [], having: None }), order_by: [OrderByExpr { expr: Identifier("a"), asc: Some(false) }, OrderByExpr { expr: Identifier("b"), asc: None }], limit: None, offset: None, fetch: None })]
```

View file

@ -42,7 +42,7 @@ use crate::parser::ParserError;
/// ```rust
/// use sqlparser::ast::helpers::stmt_create_table::CreateTableBuilder;
/// use sqlparser::ast::{ColumnDef, DataType, Ident, ObjectName};
/// let builder = CreateTableBuilder::new(ObjectName(vec![Ident::new("table_name")]))
/// let builder = CreateTableBuilder::new(ObjectName::from(vec![Ident::new("table_name")]))
/// .if_not_exists(true)
/// .columns(vec![ColumnDef {
/// name: Ident::new("c1"),
@ -602,7 +602,7 @@ mod tests {
#[test]
pub fn test_from_valid_statement() {
let builder = CreateTableBuilder::new(ObjectName(vec![Ident::new("table_name")]));
let builder = CreateTableBuilder::new(ObjectName::from(vec![Ident::new("table_name")]));
let stmt = builder.clone().build();

View file

@ -267,7 +267,13 @@ impl fmt::Display for Ident {
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
pub struct ObjectName(pub Vec<Ident>);
pub struct ObjectName(pub Vec<ObjectNamePart>);
impl From<Vec<Ident>> for ObjectName {
fn from(idents: Vec<Ident>) -> Self {
ObjectName(idents.into_iter().map(ObjectNamePart::Identifier).collect())
}
}
impl fmt::Display for ObjectName {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
@ -275,6 +281,30 @@ impl fmt::Display for ObjectName {
}
}
/// A single part of an ObjectName
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
pub enum ObjectNamePart {
Identifier(Ident),
}
impl ObjectNamePart {
pub fn as_ident(&self) -> Option<&Ident> {
match self {
ObjectNamePart::Identifier(ident) => Some(ident),
}
}
}
impl fmt::Display for ObjectNamePart {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
ObjectNamePart::Identifier(ident) => write!(f, "{}", ident),
}
}
}
/// Represents an Array Expression, either
/// `ARRAY[..]`, or `[..]`
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]

View file

@ -28,13 +28,13 @@ use super::{
FunctionArg, FunctionArgExpr, FunctionArgumentClause, FunctionArgumentList, FunctionArguments,
GroupByExpr, HavingBound, IlikeSelectItem, Insert, Interpolate, InterpolateExpr, Join,
JoinConstraint, JoinOperator, JsonPath, JsonPathElem, LateralView, MatchRecognizePattern,
Measure, NamedWindowDefinition, ObjectName, Offset, OnConflict, OnConflictAction, OnInsert,
OrderBy, OrderByExpr, Partition, PivotValueSource, ProjectionSelect, Query, ReferentialAction,
RenameSelectItem, ReplaceSelectElement, ReplaceSelectItem, Select, SelectInto, SelectItem,
SetExpr, SqlOption, Statement, Subscript, SymbolDefinition, TableAlias, TableAliasColumnDef,
TableConstraint, TableFactor, TableObject, TableOptionsClustered, TableWithJoins,
UpdateTableFromKind, Use, Value, Values, ViewColumnDef, WildcardAdditionalOptions, With,
WithFill,
Measure, NamedWindowDefinition, ObjectName, ObjectNamePart, Offset, OnConflict,
OnConflictAction, OnInsert, OrderBy, OrderByExpr, Partition, PivotValueSource,
ProjectionSelect, Query, ReferentialAction, RenameSelectItem, ReplaceSelectElement,
ReplaceSelectItem, Select, SelectInto, SelectItem, SetExpr, SqlOption, Statement, Subscript,
SymbolDefinition, TableAlias, TableAliasColumnDef, TableConstraint, TableFactor, TableObject,
TableOptionsClustered, TableWithJoins, UpdateTableFromKind, Use, Value, Values, ViewColumnDef,
WildcardAdditionalOptions, With, WithFill,
};
/// Given an iterator of spans, return the [Span::union] of all spans.
@ -1358,7 +1358,7 @@ impl Spanned for Expr {
.union_opt(&overlay_for.as_ref().map(|i| i.span())),
Expr::Collate { expr, collation } => expr
.span()
.union(&union_spans(collation.0.iter().map(|i| i.span))),
.union(&union_spans(collation.0.iter().map(|i| i.span()))),
Expr::Nested(expr) => expr.span(),
Expr::Value(value) => value.span(),
Expr::TypedString { .. } => Span::empty(),
@ -1462,7 +1462,7 @@ impl Spanned for Expr {
object_name
.0
.iter()
.map(|i| i.span)
.map(|i| i.span())
.chain(iter::once(token.0.span)),
),
Expr::OuterJoin(expr) => expr.span(),
@ -1507,7 +1507,15 @@ impl Spanned for ObjectName {
fn span(&self) -> Span {
let ObjectName(segments) = self;
union_spans(segments.iter().map(|i| i.span))
union_spans(segments.iter().map(|i| i.span()))
}
}
impl Spanned for ObjectNamePart {
fn span(&self) -> Span {
match self {
ObjectNamePart::Identifier(ident) => ident.span,
}
}
}
@ -1538,7 +1546,7 @@ impl Spanned for Function {
union_spans(
name.0
.iter()
.map(|i| i.span)
.map(|i| i.span())
.chain(iter::once(args.span()))
.chain(iter::once(parameters.span()))
.chain(filter.iter().map(|i| i.span()))
@ -1624,7 +1632,7 @@ impl Spanned for SelectItem {
object_name
.0
.iter()
.map(|i| i.span)
.map(|i| i.span())
.chain(iter::once(wildcard_additional_options.span())),
),
SelectItem::Wildcard(wildcard_additional_options) => wildcard_additional_options.span(),
@ -1734,7 +1742,7 @@ impl Spanned for TableFactor {
} => union_spans(
name.0
.iter()
.map(|i| i.span)
.map(|i| i.span())
.chain(alias.as_ref().map(|alias| {
union_spans(
iter::once(alias.name.span)
@ -1779,7 +1787,7 @@ impl Spanned for TableFactor {
} => union_spans(
name.0
.iter()
.map(|i| i.span)
.map(|i| i.span())
.chain(args.iter().map(|i| i.span()))
.chain(alias.as_ref().map(|alias| alias.span())),
),
@ -1930,7 +1938,7 @@ impl Spanned for FunctionArgExpr {
match self {
FunctionArgExpr::Expr(expr) => expr.span(),
FunctionArgExpr::QualifiedWildcard(object_name) => {
union_spans(object_name.0.iter().map(|i| i.span))
union_spans(object_name.0.iter().map(|i| i.span()))
}
FunctionArgExpr::Wildcard => Span::empty(),
}
@ -2141,7 +2149,7 @@ impl Spanned for TableObject {
fn span(&self) -> Span {
match self {
TableObject::TableName(ObjectName(segments)) => {
union_spans(segments.iter().map(|i| i.span))
union_spans(segments.iter().map(|i| i.span()))
}
TableObject::TableFunction(func) => func.span(),
}

View file

@ -403,7 +403,7 @@ where
/// ```
/// # use sqlparser::parser::Parser;
/// # use sqlparser::dialect::GenericDialect;
/// # use sqlparser::ast::{ObjectName, visit_relations_mut};
/// # use sqlparser::ast::{ObjectName, ObjectNamePart, Ident, visit_relations_mut};
/// # use core::ops::ControlFlow;
/// let sql = "SELECT a FROM foo";
/// let mut statements = Parser::parse_sql(&GenericDialect{}, sql)
@ -411,7 +411,7 @@ where
///
/// // visit statements, renaming table foo to bar
/// visit_relations_mut(&mut statements, |table| {
/// table.0[0].value = table.0[0].value.replace("foo", "bar");
/// table.0[0] = ObjectNamePart::Identifier(Ident::new("bar"));
/// ControlFlow::<()>::Continue(())
/// });
///
@ -529,7 +529,7 @@ where
/// if matches!(expr, Expr::Identifier(col_name) if col_name.value == "x") {
/// let old_expr = std::mem::replace(expr, Expr::Value(Value::Null));
/// *expr = Expr::Function(Function {
/// name: ObjectName(vec![Ident::new("f")]),
/// name: ObjectName::from(vec![Ident::new("f")]),
/// uses_odbc_syntax: false,
/// args: FunctionArguments::List(FunctionArgumentList {
/// duplicate_treatment: None,

View file

@ -651,7 +651,7 @@ pub fn parse_snowflake_stage_name(parser: &mut Parser) -> Result<ObjectName, Par
break;
}
}
Ok(ObjectName(idents))
Ok(ObjectName::from(idents))
}
_ => {
parser.prev_token();

View file

@ -988,7 +988,7 @@ impl<'a> Parser<'a> {
}
Token::Mul => {
return Ok(Expr::QualifiedWildcard(
ObjectName(id_parts),
ObjectName::from(id_parts),
AttachedToken(next_token),
));
}
@ -1128,7 +1128,7 @@ impl<'a> Parser<'a> {
if dialect_of!(self is PostgreSqlDialect | GenericDialect) =>
{
Ok(Some(Expr::Function(Function {
name: ObjectName(vec![w.clone().into_ident(w_span)]),
name: ObjectName::from(vec![w.clone().into_ident(w_span)]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::None,
@ -1143,7 +1143,7 @@ impl<'a> Parser<'a> {
| Keyword::CURRENT_DATE
| Keyword::LOCALTIME
| Keyword::LOCALTIMESTAMP => {
Ok(Some(self.parse_time_functions(ObjectName(vec![w.clone().into_ident(w_span)]))?))
Ok(Some(self.parse_time_functions(ObjectName::from(vec![w.clone().into_ident(w_span)]))?))
}
Keyword::CASE => Ok(Some(self.parse_case_expr()?)),
Keyword::CONVERT => Ok(Some(self.parse_convert_expr(false)?)),
@ -1187,7 +1187,7 @@ impl<'a> Parser<'a> {
let query = self.parse_query()?;
self.expect_token(&Token::RParen)?;
Ok(Some(Expr::Function(Function {
name: ObjectName(vec![w.clone().into_ident(w_span)]),
name: ObjectName::from(vec![w.clone().into_ident(w_span)]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::Subquery(query),
@ -1232,7 +1232,7 @@ impl<'a> Parser<'a> {
if let Some(expr) = self.parse_outer_join_expr(&id_parts) {
Ok(expr)
} else {
let mut expr = self.parse_function(ObjectName(id_parts))?;
let mut expr = self.parse_function(ObjectName::from(id_parts))?;
// consume all period if it's a method chain
expr = self.try_parse_method(expr)?;
let fields = vec![];
@ -1553,7 +1553,7 @@ impl<'a> Parser<'a> {
return self.expected("an identifier or a '*' after '.'", self.peek_token());
};
Ok(Expr::QualifiedWildcard(
ObjectName(Self::exprs_to_idents(root, chain)?),
ObjectName::from(Self::exprs_to_idents(root, chain)?),
AttachedToken(wildcard_token),
))
} else if self.peek_token().token == Token::LParen {
@ -1566,7 +1566,7 @@ impl<'a> Parser<'a> {
if let Some(expr) = self.parse_outer_join_expr(&id_parts) {
Ok(expr)
} else {
self.parse_function(ObjectName(id_parts))
self.parse_function(ObjectName::from(id_parts))
}
} else {
if Self::is_all_ident(&root, &chain) {
@ -1694,7 +1694,7 @@ impl<'a> Parser<'a> {
Token::Word(word) => word.into_ident(tok.span),
_ => return p.expected("identifier", tok),
};
let func = match p.parse_function(ObjectName(vec![name]))? {
let func = match p.parse_function(ObjectName::from(vec![name]))? {
Expr::Function(func) => func,
_ => return p.expected("function", p.peek_token()),
};
@ -2197,7 +2197,7 @@ impl<'a> Parser<'a> {
Some(expr) => Ok(expr),
// Snowflake supports `position` as an ordinary function call
// without the special `IN` syntax.
None => self.parse_function(ObjectName(vec![ident])),
None => self.parse_function(ObjectName::from(vec![ident])),
}
}
@ -4044,6 +4044,21 @@ impl<'a> Parser<'a> {
Ok(values)
}
/// Parse a period-separated list of 1+ items accepted by `F`
fn parse_period_separated<T, F>(&mut self, mut f: F) -> Result<Vec<T>, ParserError>
where
F: FnMut(&mut Parser<'a>) -> Result<T, ParserError>,
{
let mut values = vec![];
loop {
values.push(f(self)?);
if !self.consume_token(&Token::Period) {
break;
}
}
Ok(values)
}
/// Parse a keyword-separated list of 1+ items accepted by `F`
pub fn parse_keyword_separated<T, F>(
&mut self,
@ -4757,7 +4772,9 @@ impl<'a> Parser<'a> {
let mut data_type = self.parse_data_type()?;
if let DataType::Custom(n, _) = &data_type {
// the first token is actually a name
name = Some(n.0[0].clone());
match n.0[0].clone() {
ObjectNamePart::Identifier(ident) => name = Some(ident),
}
data_type = self.parse_data_type()?;
}
@ -9063,7 +9080,7 @@ impl<'a> Parser<'a> {
}
}
}
Ok(ObjectName(idents))
Ok(ObjectName::from(idents))
}
/// Parse a possibly qualified, possibly quoted identifier, e.g.
@ -9079,20 +9096,26 @@ impl<'a> Parser<'a> {
// BigQuery accepts any number of quoted identifiers of a table name.
// https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#quoted_identifiers
if dialect_of!(self is BigQueryDialect)
&& idents.iter().any(|ident| ident.value.contains('.'))
&& idents.iter().any(|part| {
part.as_ident()
.is_some_and(|ident| ident.value.contains('.'))
})
{
idents = idents
.into_iter()
.flat_map(|ident| {
ident
.flat_map(|part| match part.as_ident() {
Some(ident) => ident
.value
.split('.')
.map(|value| Ident {
value: value.into(),
quote_style: ident.quote_style,
span: ident.span,
.map(|value| {
ObjectNamePart::Identifier(Ident {
value: value.into(),
quote_style: ident.quote_style,
span: ident.span,
})
})
.collect::<Vec<_>>()
.collect::<Vec<_>>(),
None => vec![part],
})
.collect()
}
@ -10427,14 +10450,14 @@ impl<'a> Parser<'a> {
}
let variables = if self.parse_keywords(&[Keyword::TIME, Keyword::ZONE]) {
OneOrManyWithParens::One(ObjectName(vec!["TIMEZONE".into()]))
OneOrManyWithParens::One(ObjectName::from(vec!["TIMEZONE".into()]))
} else if self.dialect.supports_parenthesized_set_variables()
&& self.consume_token(&Token::LParen)
{
let variables = OneOrManyWithParens::Many(
self.parse_comma_separated(|parser: &mut Parser<'a>| parser.parse_identifier())?
.into_iter()
.map(|ident| ObjectName(vec![ident]))
.map(|ident| ObjectName::from(vec![ident]))
.collect(),
);
self.expect_token(&Token::RParen)?;
@ -11770,7 +11793,7 @@ impl<'a> Parser<'a> {
Token::Word(w) => Ok(w.value),
_ => self.expected("a function identifier", self.peek_token()),
}?;
let expr = self.parse_function(ObjectName(vec![Ident::new(function_name)]))?;
let expr = self.parse_function(ObjectName::from(vec![Ident::new(function_name)]))?;
let alias = if self.parse_keyword(Keyword::AS) {
Some(self.parse_identifier()?)
} else {
@ -11819,7 +11842,7 @@ impl<'a> Parser<'a> {
self.expect_token(&Token::LParen)?;
let aggregate_functions = self.parse_comma_separated(Self::parse_aliased_function_call)?;
self.expect_keyword_is(Keyword::FOR)?;
let value_column = self.parse_object_name(false)?.0;
let value_column = self.parse_period_separated(|p| p.parse_identifier())?;
self.expect_keyword_is(Keyword::IN)?;
self.expect_token(&Token::LParen)?;
@ -11955,10 +11978,9 @@ impl<'a> Parser<'a> {
// https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html
let ident = self.parse_identifier()?;
if let GranteeName::ObjectName(namespace) = name {
name = GranteeName::ObjectName(ObjectName(vec![Ident::new(format!(
"{}:{}",
namespace, ident
))]));
name = GranteeName::ObjectName(ObjectName::from(vec![Ident::new(
format!("{}:{}", namespace, ident),
)]));
};
}
Grantee {
@ -12267,9 +12289,10 @@ impl<'a> Parser<'a> {
let mut name = self.parse_object_name(false)?;
if self.dialect.supports_user_host_grantee()
&& name.0.len() == 1
&& name.0[0].as_ident().is_some()
&& self.consume_token(&Token::AtSign)
{
let user = name.0.pop().unwrap();
let user = name.0.pop().unwrap().as_ident().unwrap().clone();
let host = self.parse_identifier()?;
Ok(GranteeName::UserHost { user, host })
} else {
@ -13781,7 +13804,7 @@ impl<'a> Parser<'a> {
// [ OWNED BY { table_name.column_name | NONE } ]
let owned_by = if self.parse_keywords(&[Keyword::OWNED, Keyword::BY]) {
if self.parse_keywords(&[Keyword::NONE]) {
Some(ObjectName(vec![Ident::new("NONE")]))
Some(ObjectName::from(vec![Ident::new("NONE")]))
} else {
Some(self.parse_object_name(false)?)
}
@ -14072,7 +14095,9 @@ impl<'a> Parser<'a> {
.parse_one_of_keywords(&[Keyword::FROM, Keyword::IN])
.is_some()
{
parent_name.0.insert(0, self.parse_identifier()?);
parent_name
.0
.insert(0, ObjectNamePart::Identifier(self.parse_identifier()?));
}
(None, Some(parent_name))
}
@ -14388,14 +14413,14 @@ mod tests {
test_parse_data_type!(
dialect,
"GEOMETRY",
DataType::Custom(ObjectName(vec!["GEOMETRY".into()]), vec![])
DataType::Custom(ObjectName::from(vec!["GEOMETRY".into()]), vec![])
);
test_parse_data_type!(
dialect,
"GEOMETRY(POINT)",
DataType::Custom(
ObjectName(vec!["GEOMETRY".into()]),
ObjectName::from(vec!["GEOMETRY".into()]),
vec!["POINT".to_string()]
)
);
@ -14404,7 +14429,7 @@ mod tests {
dialect,
"GEOMETRY(POINT, 4326)",
DataType::Custom(
ObjectName(vec!["GEOMETRY".into()]),
ObjectName::from(vec!["GEOMETRY".into()]),
vec!["POINT".to_string(), "4326".to_string()]
)
);
@ -14540,7 +14565,7 @@ mod tests {
}};
}
let dummy_name = ObjectName(vec![Ident::new("dummy_name")]);
let dummy_name = ObjectName::from(vec![Ident::new("dummy_name")]);
let dummy_authorization = Ident::new("dummy_authorization");
test_parse_schema_name!(

View file

@ -353,7 +353,7 @@ pub fn table_alias(name: impl Into<String>) -> Option<TableAlias> {
pub fn table(name: impl Into<String>) -> TableFactor {
TableFactor::Table {
name: ObjectName(vec![Ident::new(name.into())]),
name: ObjectName::from(vec![Ident::new(name.into())]),
alias: None,
args: None,
with_hints: vec![],
@ -381,7 +381,7 @@ pub fn table_from_name(name: ObjectName) -> TableFactor {
pub fn table_with_alias(name: impl Into<String>, alias: impl Into<String>) -> TableFactor {
TableFactor::Table {
name: ObjectName(vec![Ident::new(name)]),
name: ObjectName::from(vec![Ident::new(name)]),
alias: Some(TableAlias {
name: Ident::new(alias),
columns: vec![],
@ -406,7 +406,7 @@ pub fn join(relation: TableFactor) -> Join {
pub fn call(function: &str, args: impl IntoIterator<Item = Expr>) -> Expr {
Expr::Function(Function {
name: ObjectName(vec![Ident::new(function)]),
name: ObjectName::from(vec![Ident::new(function)]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {

View file

@ -222,7 +222,7 @@ fn parse_delete_statement() {
..
}) => {
assert_eq!(
table_from_name(ObjectName(vec![Ident::with_quote('"', "table")])),
table_from_name(ObjectName::from(vec![Ident::with_quote('"', "table")])),
from[0].relation
);
}
@ -249,7 +249,7 @@ fn parse_create_view_with_options() {
} => {
assert_eq!(
name,
ObjectName(vec![
ObjectName::from(vec![
"myproject".into(),
"mydataset".into(),
"newview".into()
@ -356,7 +356,7 @@ fn parse_create_table_with_unquoted_hyphen() {
Statement::CreateTable(CreateTable { name, columns, .. }) => {
assert_eq!(
name,
ObjectName(vec![
ObjectName::from(vec![
"my-pro-ject".into(),
"mydataset".into(),
"mytable".into()
@ -397,7 +397,7 @@ fn parse_create_table_with_options() {
}) => {
assert_eq!(
name,
ObjectName(vec!["mydataset".into(), "newtable".into()])
ObjectName::from(vec!["mydataset".into(), "newtable".into()])
);
assert_eq!(
vec![
@ -486,7 +486,7 @@ fn parse_nested_data_types() {
let sql = "CREATE TABLE table (x STRUCT<a ARRAY<INT64>, b BYTES(42)>, y ARRAY<STRUCT<INT64>>)";
match bigquery_and_generic().one_statement_parses_to(sql, sql) {
Statement::CreateTable(CreateTable { name, columns, .. }) => {
assert_eq!(name, ObjectName(vec!["table".into()]));
assert_eq!(name, ObjectName::from(vec!["table".into()]));
assert_eq!(
columns,
vec![
@ -1376,7 +1376,7 @@ fn parse_table_identifiers() {
assert_eq!(
select.from,
vec![TableWithJoins {
relation: table_from_name(ObjectName(expected)),
relation: table_from_name(ObjectName::from(expected)),
joins: vec![]
},]
);
@ -1518,7 +1518,10 @@ fn parse_hyphenated_table_identifiers() {
)
.from[0]
.relation,
table_from_name(ObjectName(vec![Ident::new("foo-123"), Ident::new("bar")])),
table_from_name(ObjectName::from(vec![
Ident::new("foo-123"),
Ident::new("bar")
])),
);
assert_eq!(
@ -1551,7 +1554,7 @@ fn parse_table_time_travel() {
select.from,
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t1")]),
name: ObjectName::from(vec![Ident::new("t1")]),
alias: None,
args: None,
with_hints: vec![],
@ -1630,11 +1633,11 @@ fn parse_merge() {
let update_action = MergeAction::Update {
assignments: vec![
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new("a")])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new("a")])),
value: Expr::Value(number("1")),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new("b")])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new("b")])),
value: Expr::Value(number("2")),
},
],
@ -1650,7 +1653,7 @@ fn parse_merge() {
assert!(!into);
assert_eq!(
TableFactor::Table {
name: ObjectName(vec![Ident::new("inventory")]),
name: ObjectName::from(vec![Ident::new("inventory")]),
alias: Some(TableAlias {
name: Ident::new("T"),
columns: vec![],
@ -1667,7 +1670,7 @@ fn parse_merge() {
);
assert_eq!(
TableFactor::Table {
name: ObjectName(vec![Ident::new("newArrivals")]),
name: ObjectName::from(vec![Ident::new("newArrivals")]),
alias: Some(TableAlias {
name: Ident::new("S"),
columns: vec![],
@ -1985,7 +1988,7 @@ fn parse_map_access_expr() {
}),
AccessExpr::Subscript(Subscript::Index {
index: Expr::Function(Function {
name: ObjectName(vec![Ident::with_span(
name: ObjectName::from(vec![Ident::with_span(
Span::new(Location::of(1, 11), Location::of(1, 22)),
"safe_offset",
)]),
@ -2037,7 +2040,7 @@ fn test_bigquery_create_function() {
or_replace: true,
temporary: true,
if_not_exists: false,
name: ObjectName(vec![
name: ObjectName::from(vec![
Ident::new("project1"),
Ident::new("mydataset"),
Ident::new("myfunction"),

View file

@ -62,7 +62,7 @@ fn parse_map_access_expr() {
})],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("foos")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("foos")])),
joins: vec![],
}],
lateral_views: vec![],
@ -166,7 +166,10 @@ fn parse_delimited_identifiers() {
version,
..
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(
ObjectName::from(vec![Ident::with_quote('"', "a table")]),
name
);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
@ -185,7 +188,7 @@ fn parse_delimited_identifiers() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::with_quote('"', "myfun")]),
name: ObjectName::from(vec![Ident::with_quote('"', "myfun")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -302,7 +305,7 @@ fn parse_alter_table_add_projection() {
Statement::AlterTable {
name, operations, ..
} => {
assert_eq!(name, ObjectName(vec!["t0".into()]));
assert_eq!(name, ObjectName::from(vec!["t0".into()]));
assert_eq!(1, operations.len());
assert_eq!(
operations[0],
@ -372,7 +375,7 @@ fn parse_alter_table_drop_projection() {
Statement::AlterTable {
name, operations, ..
} => {
assert_eq!(name, ObjectName(vec!["t0".into()]));
assert_eq!(name, ObjectName::from(vec!["t0".into()]));
assert_eq!(1, operations.len());
assert_eq!(
operations[0],
@ -405,7 +408,7 @@ fn parse_alter_table_clear_and_materialize_projection() {
Statement::AlterTable {
name, operations, ..
} => {
assert_eq!(name, ObjectName(vec!["t0".into()]));
assert_eq!(name, ObjectName::from(vec!["t0".into()]));
assert_eq!(1, operations.len());
assert_eq!(
operations[0],
@ -549,7 +552,7 @@ fn parse_clickhouse_data_types() {
match clickhouse_and_generic().one_statement_parses_to(sql, &canonical_sql) {
Statement::CreateTable(CreateTable { name, columns, .. }) => {
assert_eq!(name, ObjectName(vec!["table".into()]));
assert_eq!(name, ObjectName::from(vec!["table".into()]));
assert_eq!(
columns,
vec![
@ -590,7 +593,7 @@ fn parse_create_table_with_nullable() {
match clickhouse_and_generic().one_statement_parses_to(sql, &canonical_sql) {
Statement::CreateTable(CreateTable { name, columns, .. }) => {
assert_eq!(name, ObjectName(vec!["table".into()]));
assert_eq!(name, ObjectName::from(vec!["table".into()]));
assert_eq!(
columns,
vec![
@ -639,7 +642,7 @@ fn parse_create_table_with_nested_data_types() {
match clickhouse().one_statement_parses_to(sql, "") {
Statement::CreateTable(CreateTable { name, columns, .. }) => {
assert_eq!(name, ObjectName(vec!["table".into()]));
assert_eq!(name, ObjectName::from(vec!["table".into()]));
assert_eq!(
columns,
vec![
@ -755,7 +758,7 @@ fn parse_create_table_with_primary_key() {
})
);
fn assert_function(actual: &Function, name: &str, arg: &str) -> bool {
assert_eq!(actual.name, ObjectName(vec![Ident::new(name)]));
assert_eq!(actual.name, ObjectName::from(vec![Ident::new(name)]));
assert_eq!(
actual.args,
FunctionArguments::List(FunctionArgumentList {
@ -814,7 +817,7 @@ fn parse_create_table_with_variant_default_expressions() {
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::Materialized(Expr::Function(Function {
name: ObjectName(vec![Ident::new("now")]),
name: ObjectName::from(vec![Ident::new("now")]),
uses_odbc_syntax: false,
args: FunctionArguments::List(FunctionArgumentList {
args: vec![],
@ -836,7 +839,7 @@ fn parse_create_table_with_variant_default_expressions() {
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::Ephemeral(Some(Expr::Function(Function {
name: ObjectName(vec![Ident::new("now")]),
name: ObjectName::from(vec![Ident::new("now")]),
uses_odbc_syntax: false,
args: FunctionArguments::List(FunctionArgumentList {
args: vec![],
@ -867,7 +870,7 @@ fn parse_create_table_with_variant_default_expressions() {
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::Alias(Expr::Function(Function {
name: ObjectName(vec![Ident::new("toString")]),
name: ObjectName::from(vec![Ident::new("toString")]),
uses_odbc_syntax: false,
args: FunctionArguments::List(FunctionArgumentList {
args: vec![FunctionArg::Unnamed(FunctionArgExpr::Expr(
@ -895,14 +898,14 @@ fn parse_create_table_with_variant_default_expressions() {
fn parse_create_view_with_fields_data_types() {
match clickhouse().verified_stmt(r#"CREATE VIEW v (i "int", f "String") AS SELECT * FROM t"#) {
Statement::CreateView { name, columns, .. } => {
assert_eq!(name, ObjectName(vec!["v".into()]));
assert_eq!(name, ObjectName::from(vec!["v".into()]));
assert_eq!(
columns,
vec![
ViewColumnDef {
name: "i".into(),
data_type: Some(DataType::Custom(
ObjectName(vec![Ident {
ObjectName::from(vec![Ident {
value: "int".into(),
quote_style: Some('"'),
span: Span::empty(),
@ -914,7 +917,7 @@ fn parse_create_view_with_fields_data_types() {
ViewColumnDef {
name: "f".into(),
data_type: Some(DataType::Custom(
ObjectName(vec![Ident {
ObjectName::from(vec![Ident {
value: "String".into(),
quote_style: Some('"'),
span: Span::empty(),
@ -1355,7 +1358,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
clickhouse().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -1363,7 +1366,7 @@ fn parse_use() {
// Test single identifier with different type of quotes
assert_eq!(
clickhouse().verified_stmt(&format!("USE {0}{1}{0}", quote, object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))

View file

@ -160,7 +160,7 @@ fn parse_insert_default_values() {
assert_eq!(source, None);
assert_eq!(
table_name,
TableObject::TableName(ObjectName(vec!["test_table".into()]))
TableObject::TableName(ObjectName::from(vec!["test_table".into()]))
);
}
_ => unreachable!(),
@ -188,7 +188,7 @@ fn parse_insert_default_values() {
assert_eq!(source, None);
assert_eq!(
table_name,
TableObject::TableName(ObjectName(vec!["test_table".into()]))
TableObject::TableName(ObjectName::from(vec!["test_table".into()]))
);
}
_ => unreachable!(),
@ -216,7 +216,7 @@ fn parse_insert_default_values() {
assert_eq!(source, None);
assert_eq!(
table_name,
TableObject::TableName(ObjectName(vec!["test_table".into()]))
TableObject::TableName(ObjectName::from(vec!["test_table".into()]))
);
}
_ => unreachable!(),
@ -343,15 +343,15 @@ fn parse_update() {
assignments,
vec![
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["a".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec!["a".into()])),
value: Expr::Value(number("1")),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["b".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec!["b".into()])),
value: Expr::Value(number("2")),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["c".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec!["c".into()])),
value: Expr::Value(number("3")),
},
]
@ -396,11 +396,11 @@ fn parse_update_set_from() {
stmt,
Statement::Update {
table: TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("t1")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("t1")])),
joins: vec![],
},
assignments: vec![Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new("name")])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new("name")])),
value: Expr::CompoundIdentifier(vec![Ident::new("t2"), Ident::new("name")])
}],
from: Some(UpdateTableFromKind::AfterSet(TableWithJoins {
@ -419,7 +419,7 @@ fn parse_update_set_from() {
],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("t1")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("t1")])),
joins: vec![],
}],
lateral_views: vec![],
@ -488,7 +488,7 @@ fn parse_update_with_table_alias() {
assert_eq!(
TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("users")]),
name: ObjectName::from(vec![Ident::new("users")]),
alias: Some(TableAlias {
name: Ident::new("u"),
columns: vec![],
@ -507,7 +507,7 @@ fn parse_update_with_table_alias() {
);
assert_eq!(
vec![Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![
target: AssignmentTarget::ColumnName(ObjectName::from(vec![
Ident::new("u"),
Ident::new("username")
])),
@ -577,7 +577,7 @@ fn parse_select_with_table_alias() {
select.from,
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("lineitem")]),
name: ObjectName::from(vec![Ident::new("lineitem")]),
alias: Some(TableAlias {
name: Ident::new("l"),
columns: vec![
@ -628,7 +628,7 @@ fn parse_delete_statement() {
..
}) => {
assert_eq!(
table_from_name(ObjectName(vec![Ident::with_quote('"', "table")])),
table_from_name(ObjectName::from(vec![Ident::with_quote('"', "table")])),
from[0].relation
);
}
@ -659,22 +659,22 @@ fn parse_delete_statement_for_multi_tables() {
..
}) => {
assert_eq!(
ObjectName(vec![Ident::new("schema1"), Ident::new("table1")]),
ObjectName::from(vec![Ident::new("schema1"), Ident::new("table1")]),
tables[0]
);
assert_eq!(
ObjectName(vec![Ident::new("schema2"), Ident::new("table2")]),
ObjectName::from(vec![Ident::new("schema2"), Ident::new("table2")]),
tables[1]
);
assert_eq!(
table_from_name(ObjectName(vec![
table_from_name(ObjectName::from(vec![
Ident::new("schema1"),
Ident::new("table1")
])),
from[0].relation
);
assert_eq!(
table_from_name(ObjectName(vec![
table_from_name(ObjectName::from(vec![
Ident::new("schema2"),
Ident::new("table2")
])),
@ -695,28 +695,28 @@ fn parse_delete_statement_for_multi_tables_with_using() {
..
}) => {
assert_eq!(
table_from_name(ObjectName(vec![
table_from_name(ObjectName::from(vec![
Ident::new("schema1"),
Ident::new("table1")
])),
from[0].relation
);
assert_eq!(
table_from_name(ObjectName(vec![
table_from_name(ObjectName::from(vec![
Ident::new("schema2"),
Ident::new("table2")
])),
from[1].relation
);
assert_eq!(
table_from_name(ObjectName(vec![
table_from_name(ObjectName::from(vec![
Ident::new("schema1"),
Ident::new("table1")
])),
using[0].relation
);
assert_eq!(
table_from_name(ObjectName(vec![
table_from_name(ObjectName::from(vec![
Ident::new("schema2"),
Ident::new("table2")
])),
@ -742,7 +742,7 @@ fn parse_where_delete_statement() {
..
}) => {
assert_eq!(
table_from_name(ObjectName(vec![Ident::new("foo")])),
table_from_name(ObjectName::from(vec![Ident::new("foo")])),
from[0].relation,
);
@ -777,7 +777,7 @@ fn parse_where_delete_with_alias_statement() {
}) => {
assert_eq!(
TableFactor::Table {
name: ObjectName(vec![Ident::new("basket")]),
name: ObjectName::from(vec![Ident::new("basket")]),
alias: Some(TableAlias {
name: Ident::new("a"),
columns: vec![],
@ -795,7 +795,7 @@ fn parse_where_delete_with_alias_statement() {
assert_eq!(
Some(vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("basket")]),
name: ObjectName::from(vec![Ident::new("basket")]),
alias: Some(TableAlias {
name: Ident::new("b"),
columns: vec![],
@ -962,7 +962,7 @@ fn parse_select_into() {
temporary: false,
unlogged: false,
table: false,
name: ObjectName(vec![Ident::new("table0")]),
name: ObjectName::from(vec![Ident::new("table0")]),
},
only(&select.into)
);
@ -995,7 +995,7 @@ fn parse_select_wildcard() {
let select = verified_only_select(sql);
assert_eq!(
&SelectItem::QualifiedWildcard(
ObjectName(vec![Ident::new("foo")]),
ObjectName::from(vec![Ident::new("foo")]),
WildcardAdditionalOptions::default()
),
only(&select.projection)
@ -1005,7 +1005,7 @@ fn parse_select_wildcard() {
let select = verified_only_select(sql);
assert_eq!(
&SelectItem::QualifiedWildcard(
ObjectName(vec![Ident::new("myschema"), Ident::new("mytable"),]),
ObjectName::from(vec![Ident::new("myschema"), Ident::new("mytable"),]),
WildcardAdditionalOptions::default(),
),
only(&select.projection)
@ -1082,7 +1082,7 @@ fn parse_select_count_wildcard() {
let select = verified_only_select(sql);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("COUNT")]),
name: ObjectName::from(vec![Ident::new("COUNT")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -1105,7 +1105,7 @@ fn parse_select_count_distinct() {
let select = verified_only_select(sql);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("COUNT")]),
name: ObjectName::from(vec![Ident::new("COUNT")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -2342,7 +2342,7 @@ fn parse_select_having() {
assert_eq!(
Some(Expr::BinaryOp {
left: Box::new(Expr::Function(Function {
name: ObjectName(vec![Ident::new("COUNT")]),
name: ObjectName::from(vec![Ident::new("COUNT")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -2373,7 +2373,7 @@ fn parse_select_qualify() {
assert_eq!(
Some(Expr::BinaryOp {
left: Box::new(Expr::Function(Function {
name: ObjectName(vec![Ident::new("ROW_NUMBER")]),
name: ObjectName::from(vec![Ident::new("ROW_NUMBER")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -2780,7 +2780,7 @@ fn parse_listagg() {
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("LISTAGG")]),
name: ObjectName::from(vec![Ident::new("LISTAGG")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -2935,7 +2935,10 @@ fn parse_window_function_null_treatment_arg() {
let SelectItem::UnnamedExpr(Expr::Function(actual)) = &projection[i] else {
unreachable!()
};
assert_eq!(ObjectName(vec![Ident::new("FIRST_VALUE")]), actual.name);
assert_eq!(
ObjectName::from(vec![Ident::new("FIRST_VALUE")]),
actual.name
);
let FunctionArguments::List(arg_list) = &actual.args else {
panic!("expected argument list")
};
@ -3231,7 +3234,7 @@ fn parse_create_table() {
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::ForeignKey {
foreign_table: ObjectName(vec!["othertable".into()]),
foreign_table: ObjectName::from(vec!["othertable".into()]),
referred_columns: vec!["a".into(), "b".into()],
on_delete: None,
on_update: None,
@ -3246,7 +3249,7 @@ fn parse_create_table() {
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::ForeignKey {
foreign_table: ObjectName(vec!["othertable2".into()]),
foreign_table: ObjectName::from(vec!["othertable2".into()]),
referred_columns: vec![],
on_delete: Some(ReferentialAction::Cascade),
on_update: Some(ReferentialAction::NoAction),
@ -3262,7 +3265,7 @@ fn parse_create_table() {
TableConstraint::ForeignKey {
name: Some("fkey".into()),
columns: vec!["lat".into()],
foreign_table: ObjectName(vec!["othertable3".into()]),
foreign_table: ObjectName::from(vec!["othertable3".into()]),
referred_columns: vec!["lat".into()],
on_delete: Some(ReferentialAction::Restrict),
on_update: None,
@ -3271,7 +3274,7 @@ fn parse_create_table() {
TableConstraint::ForeignKey {
name: Some("fkey2".into()),
columns: vec!["lat".into()],
foreign_table: ObjectName(vec!["othertable4".into()]),
foreign_table: ObjectName::from(vec!["othertable4".into()]),
referred_columns: vec!["lat".into()],
on_delete: Some(ReferentialAction::NoAction),
on_update: Some(ReferentialAction::Restrict),
@ -3280,7 +3283,7 @@ fn parse_create_table() {
TableConstraint::ForeignKey {
name: None,
columns: vec!["lat".into()],
foreign_table: ObjectName(vec!["othertable4".into()]),
foreign_table: ObjectName::from(vec!["othertable4".into()]),
referred_columns: vec!["lat".into()],
on_delete: Some(ReferentialAction::Cascade),
on_update: Some(ReferentialAction::SetDefault),
@ -3289,7 +3292,7 @@ fn parse_create_table() {
TableConstraint::ForeignKey {
name: None,
columns: vec!["lng".into()],
foreign_table: ObjectName(vec!["othertable4".into()]),
foreign_table: ObjectName::from(vec!["othertable4".into()]),
referred_columns: vec!["longitude".into()],
on_delete: None,
on_update: Some(ReferentialAction::SetNull),
@ -3388,7 +3391,7 @@ fn parse_create_table_with_constraint_characteristics() {
TableConstraint::ForeignKey {
name: Some("fkey".into()),
columns: vec!["lat".into()],
foreign_table: ObjectName(vec!["othertable3".into()]),
foreign_table: ObjectName::from(vec!["othertable3".into()]),
referred_columns: vec!["lat".into()],
on_delete: Some(ReferentialAction::Restrict),
on_update: None,
@ -3401,7 +3404,7 @@ fn parse_create_table_with_constraint_characteristics() {
TableConstraint::ForeignKey {
name: Some("fkey2".into()),
columns: vec!["lat".into()],
foreign_table: ObjectName(vec!["othertable4".into()]),
foreign_table: ObjectName::from(vec!["othertable4".into()]),
referred_columns: vec!["lat".into()],
on_delete: Some(ReferentialAction::NoAction),
on_update: Some(ReferentialAction::Restrict),
@ -3414,7 +3417,7 @@ fn parse_create_table_with_constraint_characteristics() {
TableConstraint::ForeignKey {
name: None,
columns: vec!["lat".into()],
foreign_table: ObjectName(vec!["othertable4".into()]),
foreign_table: ObjectName::from(vec!["othertable4".into()]),
referred_columns: vec!["lat".into()],
on_delete: Some(ReferentialAction::Cascade),
on_update: Some(ReferentialAction::SetDefault),
@ -3427,7 +3430,7 @@ fn parse_create_table_with_constraint_characteristics() {
TableConstraint::ForeignKey {
name: None,
columns: vec!["lng".into()],
foreign_table: ObjectName(vec!["othertable4".into()]),
foreign_table: ObjectName::from(vec!["othertable4".into()]),
referred_columns: vec!["longitude".into()],
on_delete: None,
on_update: Some(ReferentialAction::SetNull),
@ -3620,7 +3623,7 @@ fn parse_create_table_hive_array() {
..
}) => {
assert!(if_not_exists);
assert_eq!(name, ObjectName(vec!["something".into()]));
assert_eq!(name, ObjectName::from(vec!["something".into()]));
assert_eq!(
columns,
vec![
@ -3817,7 +3820,7 @@ fn parse_create_table_as_table() {
match verified_stmt(sql1) {
Statement::CreateTable(CreateTable { query, name, .. }) => {
assert_eq!(name, ObjectName(vec![Ident::new("new_table")]));
assert_eq!(name, ObjectName::from(vec![Ident::new("new_table")]));
assert_eq!(query.unwrap(), expected_query1);
}
_ => unreachable!(),
@ -3844,7 +3847,7 @@ fn parse_create_table_as_table() {
match verified_stmt(sql2) {
Statement::CreateTable(CreateTable { query, name, .. }) => {
assert_eq!(name, ObjectName(vec![Ident::new("new_table")]));
assert_eq!(name, ObjectName::from(vec![Ident::new("new_table")]));
assert_eq!(query.unwrap(), expected_query2);
}
_ => unreachable!(),
@ -3947,8 +3950,8 @@ fn parse_create_table_clone() {
let sql = "CREATE OR REPLACE TABLE a CLONE a_tmp";
match verified_stmt(sql) {
Statement::CreateTable(CreateTable { name, clone, .. }) => {
assert_eq!(ObjectName(vec![Ident::new("a")]), name);
assert_eq!(Some(ObjectName(vec![(Ident::new("a_tmp"))])), clone)
assert_eq!(ObjectName::from(vec![Ident::new("a")]), name);
assert_eq!(Some(ObjectName::from(vec![(Ident::new("a_tmp"))])), clone)
}
_ => unreachable!(),
}
@ -4176,11 +4179,11 @@ fn parse_rename_table() {
Statement::RenameTable(rename_tables) => {
assert_eq!(
vec![RenameTable {
old_name: ObjectName(vec![
old_name: ObjectName::from(vec![
Ident::new("test".to_string()),
Ident::new("test1".to_string()),
]),
new_name: ObjectName(vec![
new_name: ObjectName::from(vec![
Ident::new("test_db".to_string()),
Ident::new("test2".to_string()),
]),
@ -4198,16 +4201,16 @@ fn parse_rename_table() {
assert_eq!(
vec![
RenameTable {
old_name: ObjectName(vec![Ident::new("old_table1".to_string())]),
new_name: ObjectName(vec![Ident::new("new_table1".to_string())]),
old_name: ObjectName::from(vec![Ident::new("old_table1".to_string())]),
new_name: ObjectName::from(vec![Ident::new("new_table1".to_string())]),
},
RenameTable {
old_name: ObjectName(vec![Ident::new("old_table2".to_string())]),
new_name: ObjectName(vec![Ident::new("new_table2".to_string())]),
old_name: ObjectName::from(vec![Ident::new("old_table2".to_string())]),
new_name: ObjectName::from(vec![Ident::new("new_table2".to_string())]),
},
RenameTable {
old_name: ObjectName(vec![Ident::new("old_table3".to_string())]),
new_name: ObjectName(vec![Ident::new("new_table3".to_string())]),
old_name: ObjectName::from(vec![Ident::new("old_table3".to_string())]),
new_name: ObjectName::from(vec![Ident::new("new_table3".to_string())]),
}
],
rename_tables
@ -4802,7 +4805,7 @@ fn parse_named_argument_function() {
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("FUN")]),
name: ObjectName::from(vec![Ident::new("FUN")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -4842,7 +4845,7 @@ fn parse_named_argument_function_with_eq_operator() {
.verified_only_select(sql);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("FUN")]),
name: ObjectName::from(vec![Ident::new("FUN")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -4917,7 +4920,7 @@ fn parse_window_functions() {
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("row_number")]),
name: ObjectName::from(vec![Ident::new("row_number")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -5044,7 +5047,7 @@ fn test_parse_named_window() {
projection: vec![
SelectItem::ExprWithAlias {
expr: Expr::Function(Function {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "MIN".to_string(),
quote_style: None,
span: Span::empty(),
@ -5079,7 +5082,7 @@ fn test_parse_named_window() {
},
SelectItem::ExprWithAlias {
expr: Expr::Function(Function {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "MAX".to_string(),
quote_style: None,
span: Span::empty(),
@ -5115,7 +5118,7 @@ fn test_parse_named_window() {
],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "aggregate_test_100".to_string(),
quote_style: None,
span: Span::empty(),
@ -5729,7 +5732,7 @@ fn parse_interval_and_or_xor() {
}))],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "test".to_string(),
quote_style: None,
span: Span::empty(),
@ -6341,11 +6344,11 @@ fn parse_implicit_join() {
assert_eq!(
vec![
TableWithJoins {
relation: table_from_name(ObjectName(vec!["t1".into()])),
relation: table_from_name(ObjectName::from(vec!["t1".into()])),
joins: vec![],
},
TableWithJoins {
relation: table_from_name(ObjectName(vec!["t2".into()])),
relation: table_from_name(ObjectName::from(vec!["t2".into()])),
joins: vec![],
},
],
@ -6357,17 +6360,17 @@ fn parse_implicit_join() {
assert_eq!(
vec![
TableWithJoins {
relation: table_from_name(ObjectName(vec!["t1a".into()])),
relation: table_from_name(ObjectName::from(vec!["t1a".into()])),
joins: vec![Join {
relation: table_from_name(ObjectName(vec!["t1b".into()])),
relation: table_from_name(ObjectName::from(vec!["t1b".into()])),
global: false,
join_operator: JoinOperator::Inner(JoinConstraint::Natural),
}],
},
TableWithJoins {
relation: table_from_name(ObjectName(vec!["t2a".into()])),
relation: table_from_name(ObjectName::from(vec!["t2a".into()])),
joins: vec![Join {
relation: table_from_name(ObjectName(vec!["t2b".into()])),
relation: table_from_name(ObjectName::from(vec!["t2b".into()])),
global: false,
join_operator: JoinOperator::Inner(JoinConstraint::Natural),
}],
@ -6383,7 +6386,7 @@ fn parse_cross_join() {
let select = verified_only_select(sql);
assert_eq!(
Join {
relation: table_from_name(ObjectName(vec![Ident::new("t2")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("t2")])),
global: false,
join_operator: JoinOperator::CrossJoin,
},
@ -6401,7 +6404,7 @@ fn parse_joins_on() {
) -> Join {
Join {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new(relation.into())]),
name: ObjectName::from(vec![Ident::new(relation.into())]),
alias,
args: None,
with_hints: vec![],
@ -6530,7 +6533,7 @@ fn parse_joins_using() {
) -> Join {
Join {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new(relation.into())]),
name: ObjectName::from(vec![Ident::new(relation.into())]),
alias,
args: None,
with_hints: vec![],
@ -6541,7 +6544,9 @@ fn parse_joins_using() {
sample: None,
},
global: false,
join_operator: f(JoinConstraint::Using(vec![ObjectName(vec!["c1".into()])])),
join_operator: f(JoinConstraint::Using(vec![ObjectName::from(vec![
"c1".into()
])])),
}
}
// Test parsing of aliases
@ -6606,7 +6611,7 @@ fn parse_natural_join() {
fn natural_join(f: impl Fn(JoinConstraint) -> JoinOperator, alias: Option<TableAlias>) -> Join {
Join {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t2")]),
name: ObjectName::from(vec![Ident::new("t2")]),
alias,
args: None,
with_hints: vec![],
@ -6878,7 +6883,7 @@ fn parse_derived_tables() {
}),
},
joins: vec![Join {
relation: table_from_name(ObjectName(vec!["t2".into()])),
relation: table_from_name(ObjectName::from(vec!["t2".into()])),
global: false,
join_operator: JoinOperator::Inner(JoinConstraint::Natural),
}],
@ -7826,7 +7831,7 @@ fn lateral_function() {
top_before_distinct: false,
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "customer".to_string(),
quote_style: None,
span: Span::empty(),
@ -7834,7 +7839,7 @@ fn lateral_function() {
joins: vec![Join {
relation: TableFactor::Function {
lateral: true,
name: ObjectName(vec!["generate_series".into()]),
name: ObjectName::from(vec!["generate_series".into()]),
args: vec![
FunctionArg::Unnamed(FunctionArgExpr::Expr(Expr::Value(number("1")))),
FunctionArg::Unnamed(FunctionArgExpr::Expr(Expr::CompoundIdentifier(
@ -7995,7 +8000,7 @@ fn parse_set_variable() {
assert!(!hivevar);
assert_eq!(
variables,
OneOrManyWithParens::One(ObjectName(vec!["SOMETHING".into()]))
OneOrManyWithParens::One(ObjectName::from(vec!["SOMETHING".into()]))
);
assert_eq!(
value,
@ -8019,9 +8024,9 @@ fn parse_set_variable() {
assert_eq!(
variables,
OneOrManyWithParens::Many(vec![
ObjectName(vec!["a".into()]),
ObjectName(vec!["b".into()]),
ObjectName(vec!["c".into()]),
ObjectName::from(vec!["a".into()]),
ObjectName::from(vec!["b".into()]),
ObjectName::from(vec!["c".into()]),
])
);
assert_eq!(
@ -8095,7 +8100,7 @@ fn parse_set_role_as_variable() {
assert!(!hivevar);
assert_eq!(
variables,
OneOrManyWithParens::One(ObjectName(vec!["role".into()]))
OneOrManyWithParens::One(ObjectName::from(vec!["role".into()]))
);
assert_eq!(
value,
@ -8142,7 +8147,7 @@ fn parse_set_time_zone() {
assert!(!hivevar);
assert_eq!(
variable,
OneOrManyWithParens::One(ObjectName(vec!["TIMEZONE".into()]))
OneOrManyWithParens::One(ObjectName::from(vec!["TIMEZONE".into()]))
);
assert_eq!(
value,
@ -8698,7 +8703,7 @@ fn parse_merge() {
assert_eq!(
table,
TableFactor::Table {
name: ObjectName(vec![Ident::new("s"), Ident::new("bar")]),
name: ObjectName::from(vec![Ident::new("s"), Ident::new("bar")]),
alias: Some(TableAlias {
name: Ident::new("dest"),
columns: vec![],
@ -8730,7 +8735,7 @@ fn parse_merge() {
)],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![
relation: table_from_name(ObjectName::from(vec![
Ident::new("s"),
Ident::new("foo")
])),
@ -8844,7 +8849,7 @@ fn parse_merge() {
action: MergeAction::Update {
assignments: vec![
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![
target: AssignmentTarget::ColumnName(ObjectName::from(vec![
Ident::new("dest"),
Ident::new("F")
])),
@ -8854,7 +8859,7 @@ fn parse_merge() {
]),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![
target: AssignmentTarget::ColumnName(ObjectName::from(vec![
Ident::new("dest"),
Ident::new("G")
])),
@ -8961,12 +8966,12 @@ fn test_lock_table() {
let lock = ast.locks.pop().unwrap();
assert_eq!(lock.lock_type, LockType::Update);
assert_eq!(
lock.of.unwrap().0,
vec![Ident {
lock.of.unwrap(),
ObjectName::from(vec![Ident {
value: "school".to_string(),
quote_style: None,
span: Span::empty(),
}]
}])
);
assert!(lock.nonblock.is_none());
@ -8976,12 +8981,12 @@ fn test_lock_table() {
let lock = ast.locks.pop().unwrap();
assert_eq!(lock.lock_type, LockType::Share);
assert_eq!(
lock.of.unwrap().0,
vec![Ident {
lock.of.unwrap(),
ObjectName::from(vec![Ident {
value: "school".to_string(),
quote_style: None,
span: Span::empty(),
}]
}])
);
assert!(lock.nonblock.is_none());
@ -8991,23 +8996,23 @@ fn test_lock_table() {
let lock = ast.locks.remove(0);
assert_eq!(lock.lock_type, LockType::Share);
assert_eq!(
lock.of.unwrap().0,
vec![Ident {
lock.of.unwrap(),
ObjectName::from(vec![Ident {
value: "school".to_string(),
quote_style: None,
span: Span::empty(),
}]
}])
);
assert!(lock.nonblock.is_none());
let lock = ast.locks.remove(0);
assert_eq!(lock.lock_type, LockType::Update);
assert_eq!(
lock.of.unwrap().0,
vec![Ident {
lock.of.unwrap(),
ObjectName::from(vec![Ident {
value: "student".to_string(),
quote_style: None,
span: Span::empty(),
}]
}])
);
assert!(lock.nonblock.is_none());
}
@ -9020,12 +9025,12 @@ fn test_lock_nonblock() {
let lock = ast.locks.pop().unwrap();
assert_eq!(lock.lock_type, LockType::Update);
assert_eq!(
lock.of.unwrap().0,
vec![Ident {
lock.of.unwrap(),
ObjectName::from(vec![Ident {
value: "school".to_string(),
quote_style: None,
span: Span::empty(),
}]
}])
);
assert_eq!(lock.nonblock.unwrap(), NonBlock::SkipLocked);
@ -9035,12 +9040,12 @@ fn test_lock_nonblock() {
let lock = ast.locks.pop().unwrap();
assert_eq!(lock.lock_type, LockType::Share);
assert_eq!(
lock.of.unwrap().0,
vec![Ident {
lock.of.unwrap(),
ObjectName::from(vec![Ident {
value: "school".to_string(),
quote_style: None,
span: Span::empty(),
}]
}])
);
assert_eq!(lock.nonblock.unwrap(), NonBlock::Nowait);
}
@ -9222,7 +9227,7 @@ fn parse_time_functions() {
let sql = format!("SELECT {}()", func_name);
let select = verified_only_select(&sql);
let select_localtime_func_call_ast = Function {
name: ObjectName(vec![Ident::new(func_name)]),
name: ObjectName::from(vec![Ident::new(func_name)]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -9495,7 +9500,7 @@ fn parse_cache_table() {
verified_stmt(format!("CACHE TABLE '{cache_table_name}'").as_str()),
Statement::Cache {
table_flag: None,
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: false,
options: vec![],
query: None,
@ -9505,8 +9510,8 @@ fn parse_cache_table() {
assert_eq!(
verified_stmt(format!("CACHE {table_flag} TABLE '{cache_table_name}'").as_str()),
Statement::Cache {
table_flag: Some(ObjectName(vec![Ident::new(table_flag)])),
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_flag: Some(ObjectName::from(vec![Ident::new(table_flag)])),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: false,
options: vec![],
query: None,
@ -9521,8 +9526,8 @@ fn parse_cache_table() {
.as_str()
),
Statement::Cache {
table_flag: Some(ObjectName(vec![Ident::new(table_flag)])),
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_flag: Some(ObjectName::from(vec![Ident::new(table_flag)])),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: false,
options: vec![
SqlOption::KeyValue {
@ -9546,8 +9551,8 @@ fn parse_cache_table() {
.as_str()
),
Statement::Cache {
table_flag: Some(ObjectName(vec![Ident::new(table_flag)])),
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_flag: Some(ObjectName::from(vec![Ident::new(table_flag)])),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: false,
options: vec![
SqlOption::KeyValue {
@ -9571,8 +9576,8 @@ fn parse_cache_table() {
.as_str()
),
Statement::Cache {
table_flag: Some(ObjectName(vec![Ident::new(table_flag)])),
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_flag: Some(ObjectName::from(vec![Ident::new(table_flag)])),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: true,
options: vec![
SqlOption::KeyValue {
@ -9591,8 +9596,8 @@ fn parse_cache_table() {
assert_eq!(
verified_stmt(format!("CACHE {table_flag} TABLE '{cache_table_name}' {sql}").as_str()),
Statement::Cache {
table_flag: Some(ObjectName(vec![Ident::new(table_flag)])),
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_flag: Some(ObjectName::from(vec![Ident::new(table_flag)])),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: false,
options: vec![],
query: Some(query.clone().into()),
@ -9602,8 +9607,8 @@ fn parse_cache_table() {
assert_eq!(
verified_stmt(format!("CACHE {table_flag} TABLE '{cache_table_name}' AS {sql}").as_str()),
Statement::Cache {
table_flag: Some(ObjectName(vec![Ident::new(table_flag)])),
table_name: ObjectName(vec![Ident::with_quote('\'', cache_table_name)]),
table_flag: Some(ObjectName::from(vec![Ident::new(table_flag)])),
table_name: ObjectName::from(vec![Ident::with_quote('\'', cache_table_name)]),
has_as: true,
options: vec![],
query: Some(query.into()),
@ -9666,7 +9671,7 @@ fn parse_uncache_table() {
assert_eq!(
verified_stmt("UNCACHE TABLE 'table_name'"),
Statement::UNCache {
table_name: ObjectName(vec![Ident::with_quote('\'', "table_name")]),
table_name: ObjectName::from(vec![Ident::with_quote('\'', "table_name")]),
if_exists: false,
}
);
@ -9674,7 +9679,7 @@ fn parse_uncache_table() {
assert_eq!(
verified_stmt("UNCACHE TABLE IF EXISTS 'table_name'"),
Statement::UNCache {
table_name: ObjectName(vec![Ident::with_quote('\'', "table_name")]),
table_name: ObjectName::from(vec![Ident::with_quote('\'', "table_name")]),
if_exists: true,
}
);
@ -9881,7 +9886,7 @@ fn parse_pivot_table() {
verified_only_select(sql).from[0].relation,
Pivot {
table: Box::new(TableFactor::Table {
name: ObjectName(vec![Ident::new("monthly_sales")]),
name: ObjectName::from(vec![Ident::new("monthly_sales")]),
alias: Some(TableAlias {
name: Ident::new("a"),
columns: vec![]
@ -9957,7 +9962,7 @@ fn parse_unpivot_table() {
verified_only_select(sql).from[0].relation,
Unpivot {
table: Box::new(TableFactor::Table {
name: ObjectName(vec![Ident::new("sales")]),
name: ObjectName::from(vec![Ident::new("sales")]),
alias: Some(TableAlias {
name: Ident::new("s"),
columns: vec![]
@ -10028,7 +10033,7 @@ fn parse_pivot_unpivot_table() {
Pivot {
table: Box::new(Unpivot {
table: Box::new(TableFactor::Table {
name: ObjectName(vec![Ident::new("census")]),
name: ObjectName::from(vec![Ident::new("census")]),
alias: Some(TableAlias {
name: Ident::new("c"),
columns: vec![]
@ -10231,7 +10236,7 @@ fn parse_create_type() {
verified_stmt("CREATE TYPE db.type_name AS (foo INT, bar TEXT COLLATE \"de_DE\")");
assert_eq!(
Statement::CreateType {
name: ObjectName(vec![Ident::new("db"), Ident::new("type_name")]),
name: ObjectName::from(vec![Ident::new("db"), Ident::new("type_name")]),
representation: UserDefinedTypeRepresentation::Composite {
attributes: vec![
UserDefinedTypeCompositeAttributeDef {
@ -10242,7 +10247,7 @@ fn parse_create_type() {
UserDefinedTypeCompositeAttributeDef {
name: Ident::new("bar"),
data_type: DataType::Text,
collation: Some(ObjectName(vec![Ident::with_quote('\"', "de_DE")])),
collation: Some(ObjectName::from(vec![Ident::with_quote('\"', "de_DE")])),
}
]
}
@ -10323,7 +10328,7 @@ fn parse_call() {
)))],
clauses: vec![],
}),
name: ObjectName(vec![Ident::new("my_procedure")]),
name: ObjectName::from(vec![Ident::new("my_procedure")]),
filter: None,
null_treatment: None,
over: None,
@ -10335,7 +10340,7 @@ fn parse_call() {
#[test]
fn parse_execute_stored_procedure() {
let expected = Statement::Execute {
name: ObjectName(vec![
name: ObjectName::from(vec![
Ident {
value: "my_schema".to_string(),
quote_style: None,
@ -10447,7 +10452,7 @@ fn parse_unload() {
projection: vec![UnnamedExpr(Expr::Identifier(Ident::new("cola"))),],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("tab")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("tab")])),
joins: vec![],
}],
lateral_views: vec![],
@ -10600,7 +10605,7 @@ fn parse_map_access_expr() {
}),
AccessExpr::Subscript(Subscript::Index {
index: Expr::Function(Function {
name: ObjectName(vec![Ident::with_span(
name: ObjectName::from(vec![Ident::with_span(
Span::new(Location::of(1, 11), Location::of(1, 22)),
"safe_offset",
)]),
@ -10641,7 +10646,7 @@ fn parse_connect_by() {
SelectItem::UnnamedExpr(Expr::Identifier(Ident::new("title"))),
],
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("employees")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("employees")])),
joins: vec![],
}],
into: None,
@ -10721,7 +10726,7 @@ fn parse_connect_by() {
SelectItem::UnnamedExpr(Expr::Identifier(Ident::new("title"))),
],
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("employees")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("employees")])),
joins: vec![],
}],
into: None,
@ -10797,7 +10802,7 @@ fn test_selective_aggregation() {
.projection,
vec![
SelectItem::UnnamedExpr(Expr::Function(Function {
name: ObjectName(vec![Ident::new("ARRAY_AGG")]),
name: ObjectName::from(vec![Ident::new("ARRAY_AGG")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -10816,7 +10821,7 @@ fn test_selective_aggregation() {
})),
SelectItem::ExprWithAlias {
expr: Expr::Function(Function {
name: ObjectName(vec![Ident::new("ARRAY_AGG")]),
name: ObjectName::from(vec![Ident::new("ARRAY_AGG")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -10876,7 +10881,7 @@ fn test_match_recognize() {
use MatchRecognizeSymbol::*;
use RepetitionQuantifier::*;
let table = table_from_name(ObjectName(vec![Ident::new("my_table")]));
let table = table_from_name(ObjectName::from(vec![Ident::new("my_table")]));
fn check(options: &str, expect: TableFactor) {
let select = all_dialects_where(|d| d.supports_match_recognize()).verified_only_select(
@ -11260,7 +11265,7 @@ fn parse_odbc_scalar_function() {
else {
unreachable!("expected function")
};
assert_eq!(name, &ObjectName(vec![Ident::new("my_func")]));
assert_eq!(name, &ObjectName::from(vec![Ident::new("my_func")]));
assert!(uses_odbc_syntax);
matches!(args, FunctionArguments::List(l) if l.args.len() == 2);
@ -12327,7 +12332,7 @@ fn parse_load_data() {
assert_eq!("/local/path/to/data.txt", inpath);
assert_eq!(false, overwrite);
assert_eq!(
ObjectName(vec![Ident::new("test"), Ident::new("my_table")]),
ObjectName::from(vec![Ident::new("test"), Ident::new("my_table")]),
table_name
);
assert_eq!(None, partitioned);
@ -12350,7 +12355,7 @@ fn parse_load_data() {
assert_eq!(false, local);
assert_eq!("/local/path/to/data.txt", inpath);
assert_eq!(true, overwrite);
assert_eq!(ObjectName(vec![Ident::new("my_table")]), table_name);
assert_eq!(ObjectName::from(vec![Ident::new("my_table")]), table_name);
assert_eq!(None, partitioned);
assert_eq!(None, table_format);
}
@ -12387,7 +12392,7 @@ fn parse_load_data() {
assert_eq!("/local/path/to/data.txt", inpath);
assert_eq!(false, overwrite);
assert_eq!(
ObjectName(vec![Ident::new("test"), Ident::new("my_table")]),
ObjectName::from(vec![Ident::new("test"), Ident::new("my_table")]),
table_name
);
assert_eq!(None, partitioned);
@ -12425,7 +12430,7 @@ fn parse_load_data() {
assert_eq!(true, local);
assert_eq!("/local/path/to/data.txt", inpath);
assert_eq!(false, overwrite);
assert_eq!(ObjectName(vec![Ident::new("my_table")]), table_name);
assert_eq!(ObjectName::from(vec![Ident::new("my_table")]), table_name);
assert_eq!(
Some(vec![
Expr::BinaryOp {
@ -12461,7 +12466,7 @@ fn parse_load_data() {
assert_eq!("/local/path/to/data.txt", inpath);
assert_eq!(true, overwrite);
assert_eq!(
ObjectName(vec![Ident::new("good"), Ident::new("my_table")]),
ObjectName::from(vec![Ident::new("good"), Ident::new("my_table")]),
table_name
);
assert_eq!(
@ -12815,7 +12820,7 @@ fn parse_composite_access_expr() {
verified_expr("f(a).b"),
Expr::CompoundFieldAccess {
root: Box::new(Expr::Function(Function {
name: ObjectName(vec![Ident::new("f")]),
name: ObjectName::from(vec![Ident::new("f")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -12839,7 +12844,7 @@ fn parse_composite_access_expr() {
verified_expr("f(a).b.c"),
Expr::CompoundFieldAccess {
root: Box::new(Expr::Function(Function {
name: ObjectName(vec![Ident::new("f")]),
name: ObjectName::from(vec![Ident::new("f")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -12865,7 +12870,7 @@ fn parse_composite_access_expr() {
let stmt = verified_only_select("SELECT f(a).b FROM t WHERE f(a).b IS NOT NULL");
let expr = Expr::CompoundFieldAccess {
root: Box::new(Expr::Function(Function {
name: ObjectName(vec![Ident::new("f")]),
name: ObjectName::from(vec![Ident::new("f")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {

View file

@ -185,7 +185,9 @@ fn test_values_clause() {
"SELECT * FROM values",
));
assert_eq!(
Some(&table_from_name(ObjectName(vec![Ident::new("values")]))),
Some(&table_from_name(ObjectName::from(vec![Ident::new(
"values"
)]))),
query
.body
.as_select()
@ -205,7 +207,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
databricks().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -213,7 +215,7 @@ fn parse_use() {
// Test single identifier with different type of quotes
assert_eq!(
databricks().verified_stmt(&format!("USE {0}{1}{0}", quote, object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))
@ -225,21 +227,21 @@ fn parse_use() {
// Test single identifier with keyword and different type of quotes
assert_eq!(
databricks().verified_stmt(&format!("USE CATALOG {0}my_catalog{0}", quote)),
Statement::Use(Use::Catalog(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Catalog(ObjectName::from(vec![Ident::with_quote(
quote,
"my_catalog".to_string(),
)])))
);
assert_eq!(
databricks().verified_stmt(&format!("USE DATABASE {0}my_database{0}", quote)),
Statement::Use(Use::Database(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Database(ObjectName::from(vec![Ident::with_quote(
quote,
"my_database".to_string(),
)])))
);
assert_eq!(
databricks().verified_stmt(&format!("USE SCHEMA {0}my_schema{0}", quote)),
Statement::Use(Use::Schema(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Schema(ObjectName::from(vec![Ident::with_quote(
quote,
"my_schema".to_string(),
)])))
@ -249,15 +251,19 @@ fn parse_use() {
// Test single identifier with keyword and no quotes
assert_eq!(
databricks().verified_stmt("USE CATALOG my_catalog"),
Statement::Use(Use::Catalog(ObjectName(vec![Ident::new("my_catalog")])))
Statement::Use(Use::Catalog(ObjectName::from(vec![Ident::new(
"my_catalog"
)])))
);
assert_eq!(
databricks().verified_stmt("USE DATABASE my_schema"),
Statement::Use(Use::Database(ObjectName(vec![Ident::new("my_schema")])))
Statement::Use(Use::Database(ObjectName::from(vec![Ident::new(
"my_schema"
)])))
);
assert_eq!(
databricks().verified_stmt("USE SCHEMA my_schema"),
Statement::Use(Use::Schema(ObjectName(vec![Ident::new("my_schema")])))
Statement::Use(Use::Schema(ObjectName::from(vec![Ident::new("my_schema")])))
);
// Test invalid syntax - missing identifier

View file

@ -160,7 +160,7 @@ fn test_select_wildcard_with_exclude() {
let select =
duckdb().verified_only_select("SELECT name.* EXCLUDE department_id FROM employee_table");
let expected = SelectItem::QualifiedWildcard(
ObjectName(vec![Ident::new("name")]),
ObjectName::from(vec![Ident::new("name")]),
WildcardAdditionalOptions {
opt_exclude: Some(ExcludeSelectItem::Single(Ident::new("department_id"))),
..Default::default()
@ -191,7 +191,7 @@ fn test_create_macro() {
let expected = Statement::CreateMacro {
or_replace: false,
temporary: false,
name: ObjectName(vec![Ident::new("schema"), Ident::new("add")]),
name: ObjectName::from(vec![Ident::new("schema"), Ident::new("add")]),
args: Some(vec![MacroArg::new("a"), MacroArg::new("b")]),
definition: MacroDefinition::Expr(Expr::BinaryOp {
left: Box::new(Expr::Identifier(Ident::new("a"))),
@ -208,7 +208,7 @@ fn test_create_macro_default_args() {
let expected = Statement::CreateMacro {
or_replace: false,
temporary: false,
name: ObjectName(vec![Ident::new("add_default")]),
name: ObjectName::from(vec![Ident::new("add_default")]),
args: Some(vec![
MacroArg::new("a"),
MacroArg {
@ -236,7 +236,7 @@ fn test_create_table_macro() {
let expected = Statement::CreateMacro {
or_replace: true,
temporary: true,
name: ObjectName(vec![Ident::new("dynamic_table")]),
name: ObjectName::from(vec![Ident::new("dynamic_table")]),
args: Some(vec![
MacroArg::new("col1_value"),
MacroArg::new("col2_value"),
@ -268,7 +268,7 @@ fn test_select_union_by_name() {
top_before_distinct: false,
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "capitals".to_string(),
quote_style: None,
span: Span::empty(),
@ -297,7 +297,7 @@ fn test_select_union_by_name() {
top_before_distinct: false,
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "weather".to_string(),
quote_style: None,
span: Span::empty(),
@ -587,7 +587,7 @@ fn test_duckdb_named_argument_function_with_assignment_operator() {
let select = duckdb_and_generic().verified_only_select(sql);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("FUN")]),
name: ObjectName::from(vec![Ident::new("FUN")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -661,7 +661,7 @@ fn test_duckdb_union_datatype() {
transient: Default::default(),
volatile: Default::default(),
iceberg: Default::default(),
name: ObjectName(vec!["tbl1".into()]),
name: ObjectName::from(vec!["tbl1".into()]),
columns: vec![
ColumnDef {
name: "one".into(),
@ -765,7 +765,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
duckdb().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -773,7 +773,7 @@ fn parse_use() {
// Test single identifier with different type of quotes
assert_eq!(
duckdb().verified_stmt(&format!("USE {0}{1}{0}", quote, object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))
@ -785,7 +785,7 @@ fn parse_use() {
// Test double identifier with different type of quotes
assert_eq!(
duckdb().verified_stmt(&format!("USE {0}CATALOG{0}.{0}my_schema{0}", quote)),
Statement::Use(Use::Object(ObjectName(vec![
Statement::Use(Use::Object(ObjectName::from(vec![
Ident::with_quote(quote, "CATALOG"),
Ident::with_quote(quote, "my_schema")
])))
@ -794,7 +794,7 @@ fn parse_use() {
// Test double identifier without quotes
assert_eq!(
duckdb().verified_stmt("USE mydb.my_schema"),
Statement::Use(Use::Object(ObjectName(vec![
Statement::Use(Use::Object(ObjectName::from(vec![
Ident::new("mydb"),
Ident::new("my_schema")
])))

View file

@ -368,7 +368,7 @@ fn set_statement_with_minus() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![
variables: OneOrManyWithParens::One(ObjectName::from(vec![
Ident::new("hive"),
Ident::new("tez"),
Ident::new("java"),
@ -461,7 +461,10 @@ fn parse_delimited_identifiers() {
json_path: _,
sample: _,
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(
ObjectName::from(vec![Ident::with_quote('"', "a table")]),
name
);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
@ -480,7 +483,7 @@ fn parse_delimited_identifiers() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::with_quote('"', "myfun")]),
name: ObjectName::from(vec![Ident::with_quote('"', "myfun")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -516,7 +519,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
hive().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -524,7 +527,7 @@ fn parse_use() {
// Test single identifier with different type of quotes
assert_eq!(
hive().verified_stmt(&format!("USE {}{}{}", quote, object_name, quote)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))

View file

@ -63,7 +63,7 @@ fn parse_table_time_travel() {
select.from,
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t1")]),
name: ObjectName::from(vec![Ident::new("t1")]),
alias: None,
args: None,
with_hints: vec![],
@ -159,7 +159,7 @@ fn parse_create_procedure() {
}))
}
]),
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test".into(),
quote_style: None,
span: Span::empty(),
@ -211,7 +211,7 @@ fn parse_mssql_openjson() {
assert_eq!(
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t_test_table")]),
name: ObjectName::from(vec![Ident::new("t_test_table")]),
alias: Some(TableAlias {
name: Ident::new("A"),
columns: vec![]
@ -270,7 +270,7 @@ fn parse_mssql_openjson() {
assert_eq!(
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t_test_table"),]),
name: ObjectName::from(vec![Ident::new("t_test_table"),]),
alias: Some(TableAlias {
name: Ident::new("A"),
columns: vec![]
@ -329,8 +329,7 @@ fn parse_mssql_openjson() {
assert_eq!(
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t_test_table")]),
name: ObjectName::from(vec![Ident::new("t_test_table")]),
alias: Some(TableAlias {
name: Ident::new("A"),
columns: vec![]
@ -389,7 +388,7 @@ fn parse_mssql_openjson() {
assert_eq!(
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t_test_table")]),
name: ObjectName::from(vec![Ident::new("t_test_table")]),
alias: Some(TableAlias {
name: Ident::new("A"),
columns: vec![]
@ -428,7 +427,7 @@ fn parse_mssql_openjson() {
assert_eq!(
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t_test_table")]),
name: ObjectName::from(vec![Ident::new("t_test_table")]),
alias: Some(TableAlias {
name: Ident::new("A"),
columns: vec![]
@ -532,7 +531,7 @@ fn parse_mssql_create_role() {
assert_eq_vec(&["mssql"], &names);
assert_eq!(
authorization_owner,
Some(ObjectName(vec![Ident {
Some(ObjectName::from(vec![Ident {
value: "helena".into(),
quote_style: None,
span: Span::empty(),
@ -619,7 +618,10 @@ fn parse_delimited_identifiers() {
version,
..
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(
ObjectName::from(vec![Ident::with_quote('"', "a table")]),
name
);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
@ -638,7 +640,7 @@ fn parse_delimited_identifiers() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::with_quote('"', "myfun")]),
name: ObjectName::from(vec![Ident::with_quote('"', "myfun")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -671,11 +673,11 @@ fn parse_table_name_in_square_brackets() {
let select = ms().verified_only_select(r#"SELECT [a column] FROM [a schema].[a table]"#);
if let TableFactor::Table { name, .. } = only(select.from).relation {
assert_eq!(
vec![
ObjectName::from(vec![
Ident::with_quote('[', "a schema"),
Ident::with_quote('[', "a table")
],
name.0
]),
name
);
} else {
panic!("Expecting TableFactor::Table");
@ -1086,7 +1088,7 @@ fn parse_substring_in_select() {
})],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "test".to_string(),
quote_style: None,
span: Span::empty(),
@ -1204,7 +1206,7 @@ fn parse_mssql_declare() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![Ident::new("@bar")])),
variables: OneOrManyWithParens::One(ObjectName::from(vec![Ident::new("@bar")])),
value: vec![Expr::Value(Value::Number("2".parse().unwrap(), false))],
},
Statement::Query(Box::new(Query {
@ -1298,7 +1300,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
ms().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -1306,7 +1308,7 @@ fn parse_use() {
// Test single identifier with different type of quotes
assert_eq!(
ms().verified_stmt(&format!("USE {}{}{}", quote, object_name, quote)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))
@ -1408,7 +1410,7 @@ fn parse_create_table_with_valid_options() {
},
value: Expr::Function(
Function {
name: ObjectName(
name: ObjectName::from(
vec![
Ident {
value: "HASH".to_string(),
@ -1472,7 +1474,7 @@ fn parse_create_table_with_valid_options() {
if_not_exists: false,
transient: false,
volatile: false,
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "mytable".to_string(),
quote_style: None,
span: Span::empty(),
@ -1648,7 +1650,7 @@ fn parse_create_table_with_identity_column() {
transient: false,
volatile: false,
iceberg: false,
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "mytable".to_string(),
quote_style: None,
span: Span::empty(),

View file

@ -149,7 +149,7 @@ fn parse_flush() {
read_lock: false,
export: false,
tables: vec![
ObjectName(vec![
ObjectName::from(vec![
Ident {
value: "mek".to_string(),
quote_style: Some('`'),
@ -161,7 +161,7 @@ fn parse_flush() {
span: Span::empty(),
}
]),
ObjectName(vec![Ident {
ObjectName::from(vec![Ident {
value: "table2".to_string(),
quote_style: None,
span: Span::empty(),
@ -189,7 +189,7 @@ fn parse_flush() {
read_lock: true,
export: false,
tables: vec![
ObjectName(vec![
ObjectName::from(vec![
Ident {
value: "mek".to_string(),
quote_style: Some('`'),
@ -201,7 +201,7 @@ fn parse_flush() {
span: Span::empty(),
}
]),
ObjectName(vec![Ident {
ObjectName::from(vec![Ident {
value: "table2".to_string(),
quote_style: None,
span: Span::empty(),
@ -218,7 +218,7 @@ fn parse_flush() {
read_lock: false,
export: true,
tables: vec![
ObjectName(vec![
ObjectName::from(vec![
Ident {
value: "mek".to_string(),
quote_style: Some('`'),
@ -230,7 +230,7 @@ fn parse_flush() {
span: Span::empty(),
}
]),
ObjectName(vec![Ident {
ObjectName::from(vec![Ident {
value: "table2".to_string(),
quote_style: None,
span: Span::empty(),
@ -251,7 +251,7 @@ fn parse_show_columns() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
parent_name: Some(ObjectName::from(vec![Ident::new("mytable")])),
}),
filter_position: None,
limit_from: None,
@ -269,7 +269,10 @@ fn parse_show_columns() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mydb"), Ident::new("mytable")])),
parent_name: Some(ObjectName::from(vec![
Ident::new("mydb"),
Ident::new("mytable")
])),
}),
filter_position: None,
limit_from: None,
@ -287,7 +290,7 @@ fn parse_show_columns() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
parent_name: Some(ObjectName::from(vec![Ident::new("mytable")])),
}),
filter_position: None,
limit_from: None,
@ -305,7 +308,7 @@ fn parse_show_columns() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
parent_name: Some(ObjectName::from(vec![Ident::new("mytable")])),
}),
filter_position: None,
limit_from: None,
@ -323,7 +326,7 @@ fn parse_show_columns() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
parent_name: Some(ObjectName::from(vec![Ident::new("mytable")])),
}),
filter_position: Some(ShowStatementFilterPosition::Suffix(
ShowStatementFilter::Like("pattern".into())
@ -343,7 +346,7 @@ fn parse_show_columns() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
parent_name: Some(ObjectName::from(vec![Ident::new("mytable")])),
}),
filter_position: Some(ShowStatementFilterPosition::Suffix(
ShowStatementFilter::Where(mysql_and_generic().verified_expr("1 = 2"))
@ -430,7 +433,7 @@ fn parse_show_tables() {
show_in: Some(ShowStatementIn {
clause: ShowStatementInClause::FROM,
parent_type: None,
parent_name: Some(ObjectName(vec![Ident::new("mydb")])),
parent_name: Some(ObjectName::from(vec![Ident::new("mydb")])),
}),
filter_position: None
}
@ -534,7 +537,7 @@ fn parse_show_extended_full() {
#[test]
fn parse_show_create() {
let obj_name = ObjectName(vec![Ident::new("myident")]);
let obj_name = ObjectName::from(vec![Ident::new("myident")]);
for obj_type in &[
ShowCreateObject::Table,
@ -591,7 +594,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
mysql_and_generic().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -600,7 +603,7 @@ fn parse_use() {
assert_eq!(
mysql_and_generic()
.verified_stmt(&format!("USE {}{}{}", quote, object_name, quote)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))
@ -617,7 +620,7 @@ fn parse_set_variables() {
Statement::SetVariable {
local: true,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec!["autocommit".into()])),
variables: OneOrManyWithParens::One(ObjectName::from(vec!["autocommit".into()])),
value: vec![Expr::Value(number("1"))],
}
);
@ -1017,7 +1020,7 @@ fn parse_create_table_comment_character_set() {
options: vec![
ColumnOptionDef {
name: None,
option: ColumnOption::CharacterSet(ObjectName(vec![Ident::new(
option: ColumnOption::CharacterSet(ObjectName::from(vec![Ident::new(
"utf8mb4"
)]))
},
@ -1413,7 +1416,7 @@ fn parse_simple_insert() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("tasks")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("tasks")])),
table_name
);
assert_eq!(vec![Ident::new("title"), Ident::new("priority")], columns);
@ -1471,7 +1474,7 @@ fn parse_ignore_insert() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("tasks")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("tasks")])),
table_name
);
assert_eq!(vec![Ident::new("title"), Ident::new("priority")], columns);
@ -1518,7 +1521,7 @@ fn parse_priority_insert() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("tasks")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("tasks")])),
table_name
);
assert_eq!(vec![Ident::new("title"), Ident::new("priority")], columns);
@ -1562,7 +1565,7 @@ fn parse_priority_insert() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("tasks")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("tasks")])),
table_name
);
assert_eq!(vec![Ident::new("title"), Ident::new("priority")], columns);
@ -1607,14 +1610,14 @@ fn parse_insert_as() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::with_quote('`', "table")])),
TableObject::TableName(ObjectName::from(vec![Ident::with_quote('`', "table")])),
table_name
);
assert_eq!(vec![Ident::with_quote('`', "date")], columns);
let insert_alias = insert_alias.unwrap();
assert_eq!(
ObjectName(vec![Ident::with_quote('`', "alias")]),
ObjectName::from(vec![Ident::with_quote('`', "alias")]),
insert_alias.row_alias
);
assert_eq!(Some(vec![]), insert_alias.col_aliases);
@ -1659,7 +1662,7 @@ fn parse_insert_as() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::with_quote('`', "table")])),
TableObject::TableName(ObjectName::from(vec![Ident::with_quote('`', "table")])),
table_name
);
assert_eq!(
@ -1668,7 +1671,7 @@ fn parse_insert_as() {
);
let insert_alias = insert_alias.unwrap();
assert_eq!(
ObjectName(vec![Ident::with_quote('`', "alias")]),
ObjectName::from(vec![Ident::with_quote('`', "alias")]),
insert_alias.row_alias
);
assert_eq!(
@ -1719,7 +1722,7 @@ fn parse_replace_insert() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("tasks")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("tasks")])),
table_name
);
assert_eq!(vec![Ident::new("title"), Ident::new("priority")], columns);
@ -1766,7 +1769,7 @@ fn parse_empty_row_insert() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("tb")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("tb")])),
table_name
);
assert!(columns.is_empty());
@ -1808,7 +1811,7 @@ fn parse_insert_with_on_duplicate_update() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("permission_groups")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("permission_groups")])),
table_name
);
assert_eq!(
@ -1855,31 +1858,31 @@ fn parse_insert_with_on_duplicate_update() {
assert_eq!(
Some(OnInsert::DuplicateKeyUpdate(vec![
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new(
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new(
"description".to_string()
)])),
value: call("VALUES", [Expr::Identifier(Ident::new("description"))]),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new(
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new(
"perm_create".to_string()
)])),
value: call("VALUES", [Expr::Identifier(Ident::new("perm_create"))]),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new(
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new(
"perm_read".to_string()
)])),
value: call("VALUES", [Expr::Identifier(Ident::new("perm_read"))]),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new(
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new(
"perm_update".to_string()
)])),
value: call("VALUES", [Expr::Identifier(Ident::new("perm_update"))]),
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![Ident::new(
target: AssignmentTarget::ColumnName(ObjectName::from(vec![Ident::new(
"perm_delete".to_string()
)])),
value: call("VALUES", [Expr::Identifier(Ident::new("perm_delete"))]),
@ -1910,7 +1913,7 @@ fn parse_select_with_numeric_prefix_column_name() {
)))],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::with_quote(
relation: table_from_name(ObjectName::from(vec![Ident::with_quote(
'"', "table"
)])),
joins: vec![]
@ -1962,7 +1965,7 @@ fn parse_select_with_concatenation_of_exp_number_and_numeric_prefix_column() {
],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::with_quote(
relation: table_from_name(ObjectName::from(vec![Ident::with_quote(
'"', "table"
)])),
joins: vec![]
@ -1997,7 +2000,7 @@ fn parse_insert_with_numeric_prefix_column_name() {
..
}) => {
assert_eq!(
TableObject::TableName(ObjectName(vec![Ident::new("s1"), Ident::new("t1")])),
TableObject::TableName(ObjectName::from(vec![Ident::new("s1"), Ident::new("t1")])),
table_name
);
assert_eq!(vec![Ident::new("123col_$@length123")], columns);
@ -2021,7 +2024,7 @@ fn parse_update_with_joins() {
assert_eq!(
TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("orders")]),
name: ObjectName::from(vec![Ident::new("orders")]),
alias: Some(TableAlias {
name: Ident::new("o"),
columns: vec![]
@ -2036,7 +2039,7 @@ fn parse_update_with_joins() {
},
joins: vec![Join {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("customers")]),
name: ObjectName::from(vec![Ident::new("customers")]),
alias: Some(TableAlias {
name: Ident::new("c"),
columns: vec![]
@ -2067,7 +2070,7 @@ fn parse_update_with_joins() {
);
assert_eq!(
vec![Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec![
target: AssignmentTarget::ColumnName(ObjectName::from(vec![
Ident::new("o"),
Ident::new("completed")
])),
@ -2255,7 +2258,7 @@ fn parse_alter_table_drop_primary_key() {
#[test]
fn parse_alter_table_change_column() {
let expected_name = ObjectName(vec![Ident::new("orders")]);
let expected_name = ObjectName::from(vec![Ident::new("orders")]);
let expected_operation = AlterTableOperation::ChangeColumn {
old_name: Ident::new("description"),
new_name: Ident::new("desc"),
@ -2307,7 +2310,7 @@ fn parse_alter_table_change_column() {
#[test]
fn parse_alter_table_change_column_with_column_position() {
let expected_name = ObjectName(vec![Ident::new("orders")]);
let expected_name = ObjectName::from(vec![Ident::new("orders")]);
let expected_operation_first = AlterTableOperation::ChangeColumn {
old_name: Ident::new("description"),
new_name: Ident::new("desc"),
@ -2355,7 +2358,7 @@ fn parse_alter_table_change_column_with_column_position() {
#[test]
fn parse_alter_table_modify_column() {
let expected_name = ObjectName(vec![Ident::new("orders")]);
let expected_name = ObjectName::from(vec![Ident::new("orders")]);
let expected_operation = AlterTableOperation::ModifyColumn {
col_name: Ident::new("description"),
data_type: DataType::Text,
@ -2404,7 +2407,7 @@ fn parse_alter_table_modify_column() {
#[test]
fn parse_alter_table_modify_column_with_column_position() {
let expected_name = ObjectName(vec![Ident::new("orders")]);
let expected_name = ObjectName::from(vec![Ident::new("orders")]);
let expected_operation_first = AlterTableOperation::ModifyColumn {
col_name: Ident::new("description"),
data_type: DataType::Text,
@ -2478,7 +2481,7 @@ fn parse_substring_in_select() {
})],
into: None,
from: vec![TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident {
relation: table_from_name(ObjectName::from(vec![Ident {
value: "test".to_string(),
quote_style: None,
span: Span::empty(),
@ -2873,10 +2876,12 @@ fn parse_create_table_with_column_collate() {
vec![ColumnDef {
name: Ident::new("id"),
data_type: DataType::Text,
collation: Some(ObjectName(vec![Ident::new("utf8mb4_0900_ai_ci")])),
collation: Some(ObjectName::from(vec![Ident::new("utf8mb4_0900_ai_ci")])),
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::CharacterSet(ObjectName(vec![Ident::new("utf8mb4")]))
option: ColumnOption::CharacterSet(ObjectName::from(vec![Ident::new(
"utf8mb4"
)]))
}],
},],
columns
@ -3039,7 +3044,7 @@ fn parse_grant() {
);
assert_eq!(
objects,
GrantObjects::Tables(vec![ObjectName(vec!["*".into(), "*".into()])])
GrantObjects::Tables(vec![ObjectName::from(vec!["*".into(), "*".into()])])
);
assert!(!with_grant_option);
assert!(granted_by.is_none());
@ -3080,7 +3085,7 @@ fn parse_revoke() {
);
assert_eq!(
objects,
GrantObjects::Tables(vec![ObjectName(vec!["db1".into(), "*".into()])])
GrantObjects::Tables(vec![ObjectName::from(vec!["db1".into(), "*".into()])])
);
if let [Grantee {
grantee_type: GranteesType::None,

View file

@ -402,7 +402,7 @@ fn parse_create_table_with_defaults() {
unit: None
}
)),
collation: Some(ObjectName(vec![Ident::with_quote('"', "es_ES")])),
collation: Some(ObjectName::from(vec![Ident::with_quote('"', "es_ES")])),
options: vec![ColumnOptionDef {
name: None,
option: ColumnOption::NotNull,
@ -1040,7 +1040,7 @@ fn test_copy_from() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: false,
@ -1058,7 +1058,7 @@ fn test_copy_from() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: false,
@ -1076,7 +1076,7 @@ fn test_copy_from() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: false,
@ -1100,7 +1100,7 @@ fn test_copy_to() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: true,
@ -1118,7 +1118,7 @@ fn test_copy_to() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: true,
@ -1136,7 +1136,7 @@ fn test_copy_to() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: true,
@ -1177,7 +1177,7 @@ fn parse_copy_from() {
pg_and_generic().one_statement_parses_to(sql, ""),
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["table".into()]),
table_name: ObjectName::from(vec!["table".into()]),
columns: vec!["a".into(), "b".into()],
},
to: false,
@ -1223,7 +1223,7 @@ fn parse_copy_to() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: true,
@ -1241,7 +1241,7 @@ fn parse_copy_to() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["country".into()]),
table_name: ObjectName::from(vec!["country".into()]),
columns: vec![],
},
to: true,
@ -1258,7 +1258,7 @@ fn parse_copy_to() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["country".into()]),
table_name: ObjectName::from(vec!["country".into()]),
columns: vec![],
},
to: true,
@ -1344,7 +1344,7 @@ fn parse_copy_from_before_v9_0() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: false,
@ -1373,7 +1373,7 @@ fn parse_copy_from_before_v9_0() {
pg_and_generic().one_statement_parses_to(sql, ""),
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: false,
@ -1401,7 +1401,7 @@ fn parse_copy_to_before_v9_0() {
stmt,
Statement::Copy {
source: CopySource::Table {
table_name: ObjectName(vec!["users".into()]),
table_name: ObjectName::from(vec!["users".into()]),
columns: vec![],
},
to: true,
@ -1433,7 +1433,7 @@ fn parse_set() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![Ident::new("a")])),
variables: OneOrManyWithParens::One(ObjectName::from(vec![Ident::new("a")])),
value: vec![Expr::Identifier(Ident {
value: "b".into(),
quote_style: None,
@ -1448,7 +1448,7 @@ fn parse_set() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![Ident::new("a")])),
variables: OneOrManyWithParens::One(ObjectName::from(vec![Ident::new("a")])),
value: vec![Expr::Value(Value::SingleQuotedString("b".into()))],
}
);
@ -1459,7 +1459,7 @@ fn parse_set() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![Ident::new("a")])),
variables: OneOrManyWithParens::One(ObjectName::from(vec![Ident::new("a")])),
value: vec![Expr::Value(number("0"))],
}
);
@ -1470,7 +1470,7 @@ fn parse_set() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![Ident::new("a")])),
variables: OneOrManyWithParens::One(ObjectName::from(vec![Ident::new("a")])),
value: vec![Expr::Identifier(Ident::new("DEFAULT"))],
}
);
@ -1481,7 +1481,7 @@ fn parse_set() {
Statement::SetVariable {
local: true,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![Ident::new("a")])),
variables: OneOrManyWithParens::One(ObjectName::from(vec![Ident::new("a")])),
value: vec![Expr::Identifier("b".into())],
}
);
@ -1492,7 +1492,7 @@ fn parse_set() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![
variables: OneOrManyWithParens::One(ObjectName::from(vec![
Ident::new("a"),
Ident::new("b"),
Ident::new("c")
@ -1514,7 +1514,7 @@ fn parse_set() {
Statement::SetVariable {
local: false,
hivevar: false,
variables: OneOrManyWithParens::One(ObjectName(vec![
variables: OneOrManyWithParens::One(ObjectName::from(vec![
Ident::new("hive"),
Ident::new("tez"),
Ident::new("auto"),
@ -1658,7 +1658,7 @@ fn parse_execute() {
assert_eq!(
stmt,
Statement::Execute {
name: ObjectName(vec!["a".into()]),
name: ObjectName::from(vec!["a".into()]),
parameters: vec![],
has_parentheses: false,
using: vec![]
@ -1669,7 +1669,7 @@ fn parse_execute() {
assert_eq!(
stmt,
Statement::Execute {
name: ObjectName(vec!["a".into()]),
name: ObjectName::from(vec!["a".into()]),
parameters: vec![
Expr::Value(number("1")),
Expr::Value(Value::SingleQuotedString("t".to_string()))
@ -1684,7 +1684,7 @@ fn parse_execute() {
assert_eq!(
stmt,
Statement::Execute {
name: ObjectName(vec!["a".into()]),
name: ObjectName::from(vec!["a".into()]),
parameters: vec![],
has_parentheses: false,
using: vec![
@ -1793,7 +1793,9 @@ fn parse_pg_on_conflict() {
assert_eq!(
OnConflictAction::DoUpdate(DoUpdate {
assignments: vec![Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["dname".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(
vec!["dname".into()]
)),
value: Expr::CompoundIdentifier(vec!["EXCLUDED".into(), "dname".into()])
},],
selection: None
@ -1824,14 +1826,18 @@ fn parse_pg_on_conflict() {
OnConflictAction::DoUpdate(DoUpdate {
assignments: vec![
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["dname".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec![
"dname".into()
])),
value: Expr::CompoundIdentifier(vec![
"EXCLUDED".into(),
"dname".into()
])
},
Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["area".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(vec![
"area".into()
])),
value: Expr::CompoundIdentifier(vec!["EXCLUDED".into(), "area".into()])
},
],
@ -1881,7 +1887,9 @@ fn parse_pg_on_conflict() {
assert_eq!(
OnConflictAction::DoUpdate(DoUpdate {
assignments: vec![Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["dname".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(
vec!["dname".into()]
)),
value: Expr::Value(Value::Placeholder("$1".to_string()))
},],
selection: Some(Expr::BinaryOp {
@ -1915,11 +1923,16 @@ fn parse_pg_on_conflict() {
})),
..
}) => {
assert_eq!(vec![Ident::from("distributors_did_pkey")], cname.0);
assert_eq!(
ObjectName::from(vec![Ident::from("distributors_did_pkey")]),
cname
);
assert_eq!(
OnConflictAction::DoUpdate(DoUpdate {
assignments: vec![Assignment {
target: AssignmentTarget::ColumnName(ObjectName(vec!["dname".into()])),
target: AssignmentTarget::ColumnName(ObjectName::from(
vec!["dname".into()]
)),
value: Expr::Value(Value::Placeholder("$1".to_string()))
},],
selection: Some(Expr::BinaryOp {
@ -2624,7 +2637,7 @@ fn parse_array_subquery_expr() {
let select = pg().verified_only_select(sql);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("ARRAY")]),
name: ObjectName::from(vec![Ident::new("ARRAY")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::Subquery(Box::new(Query {
@ -2963,7 +2976,10 @@ fn parse_json_table_is_not_reserved() {
TableFactor::Table {
name: ObjectName(name),
..
} => assert_eq!("JSON_TABLE", name[0].value),
} => assert_eq!(
ObjectNamePart::Identifier(Ident::new("JSON_TABLE")),
name[0]
),
other => panic!("Expected: JSON_TABLE to be parsed as a table name, but got {other:?}"),
}
}
@ -3004,7 +3020,7 @@ fn test_composite_value() {
SelectItem::UnnamedExpr(Expr::CompositeAccess {
key: Ident::new("n"),
expr: Box::new(Expr::Nested(Box::new(Expr::Function(Function {
name: ObjectName(vec![
name: ObjectName::from(vec![
Ident::new("information_schema"),
Ident::new("_pg_expandarray")
]),
@ -3185,7 +3201,7 @@ fn parse_current_functions() {
let select = pg_and_generic().verified_only_select(sql);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("CURRENT_CATALOG")]),
name: ObjectName::from(vec![Ident::new("CURRENT_CATALOG")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::None,
@ -3198,7 +3214,7 @@ fn parse_current_functions() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("CURRENT_USER")]),
name: ObjectName::from(vec![Ident::new("CURRENT_USER")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::None,
@ -3211,7 +3227,7 @@ fn parse_current_functions() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("SESSION_USER")]),
name: ObjectName::from(vec![Ident::new("SESSION_USER")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::None,
@ -3224,7 +3240,7 @@ fn parse_current_functions() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::new("USER")]),
name: ObjectName::from(vec![Ident::new("USER")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::None,
@ -3536,7 +3552,7 @@ fn parse_alter_role() {
span: Span::empty(),
},
operation: AlterRoleOperation::Set {
config_name: ObjectName(vec![Ident {
config_name: ObjectName::from(vec![Ident {
value: "maintenance_work_mem".into(),
quote_style: None,
span: Span::empty(),
@ -3557,13 +3573,13 @@ fn parse_alter_role() {
span: Span::empty(),
},
operation: AlterRoleOperation::Set {
config_name: ObjectName(vec![Ident {
config_name: ObjectName::from(vec![Ident {
value: "maintenance_work_mem".into(),
quote_style: None,
span: Span::empty(),
}]),
config_value: SetConfigValue::Value(Expr::Value(number("100000"))),
in_database: Some(ObjectName(vec![Ident {
in_database: Some(ObjectName::from(vec![Ident {
value: "database_name".into(),
quote_style: None,
span: Span::empty(),
@ -3582,13 +3598,13 @@ fn parse_alter_role() {
span: Span::empty(),
},
operation: AlterRoleOperation::Set {
config_name: ObjectName(vec![Ident {
config_name: ObjectName::from(vec![Ident {
value: "maintenance_work_mem".into(),
quote_style: None,
span: Span::empty(),
}]),
config_value: SetConfigValue::Value(Expr::Value(number("100000"))),
in_database: Some(ObjectName(vec![Ident {
in_database: Some(ObjectName::from(vec![Ident {
value: "database_name".into(),
quote_style: None,
span: Span::empty(),
@ -3607,13 +3623,13 @@ fn parse_alter_role() {
span: Span::empty(),
},
operation: AlterRoleOperation::Set {
config_name: ObjectName(vec![Ident {
config_name: ObjectName::from(vec![Ident {
value: "maintenance_work_mem".into(),
quote_style: None,
span: Span::empty(),
}]),
config_value: SetConfigValue::Default,
in_database: Some(ObjectName(vec![Ident {
in_database: Some(ObjectName::from(vec![Ident {
value: "database_name".into(),
quote_style: None,
span: Span::empty(),
@ -3648,12 +3664,12 @@ fn parse_alter_role() {
span: Span::empty(),
},
operation: AlterRoleOperation::Reset {
config_name: ResetConfig::ConfigName(ObjectName(vec![Ident {
config_name: ResetConfig::ConfigName(ObjectName::from(vec![Ident {
value: "maintenance_work_mem".into(),
quote_style: None,
span: Span::empty(),
}])),
in_database: Some(ObjectName(vec![Ident {
in_database: Some(ObjectName::from(vec![Ident {
value: "database_name".into(),
quote_style: None,
span: Span::empty(),
@ -3679,7 +3695,10 @@ fn parse_delimited_identifiers() {
version,
..
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(
ObjectName::from(vec![Ident::with_quote('"', "a table")]),
name
);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
@ -3698,7 +3717,7 @@ fn parse_delimited_identifiers() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::with_quote('"', "myfun")]),
name: ObjectName::from(vec![Ident::with_quote('"', "myfun")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -3754,7 +3773,7 @@ fn parse_create_function() {
Statement::CreateFunction(CreateFunction {
or_replace: false,
temporary: false,
name: ObjectName(vec![Ident::new("add")]),
name: ObjectName::from(vec![Ident::new("add")]),
args: Some(vec![
OperateFunctionArg::unnamed(DataType::Integer(None)),
OperateFunctionArg::unnamed(DataType::Integer(None)),
@ -3798,7 +3817,7 @@ fn parse_drop_function() {
Statement::DropFunction {
if_exists: true,
func_desc: vec![FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_func".to_string(),
quote_style: None,
span: Span::empty(),
@ -3815,7 +3834,7 @@ fn parse_drop_function() {
Statement::DropFunction {
if_exists: true,
func_desc: vec![FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_func".to_string(),
quote_style: None,
span: Span::empty(),
@ -3841,7 +3860,7 @@ fn parse_drop_function() {
if_exists: true,
func_desc: vec![
FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_func1".to_string(),
quote_style: None,
span: Span::empty(),
@ -3860,7 +3879,7 @@ fn parse_drop_function() {
]),
},
FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_func2".to_string(),
quote_style: None,
span: Span::empty(),
@ -3892,7 +3911,7 @@ fn parse_drop_procedure() {
Statement::DropProcedure {
if_exists: true,
proc_desc: vec![FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_proc".to_string(),
quote_style: None,
span: Span::empty(),
@ -3909,7 +3928,7 @@ fn parse_drop_procedure() {
Statement::DropProcedure {
if_exists: true,
proc_desc: vec![FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_proc".to_string(),
quote_style: None,
span: Span::empty(),
@ -3935,7 +3954,7 @@ fn parse_drop_procedure() {
if_exists: true,
proc_desc: vec![
FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_proc1".to_string(),
quote_style: None,
span: Span::empty(),
@ -3954,7 +3973,7 @@ fn parse_drop_procedure() {
]),
},
FunctionDesc {
name: ObjectName(vec![Ident {
name: ObjectName::from(vec![Ident {
value: "test_proc2".to_string(),
quote_style: None,
span: Span::empty(),
@ -4136,7 +4155,7 @@ fn parse_select_group_by_cube() {
#[test]
fn parse_truncate() {
let truncate = pg_and_generic().verified_stmt("TRUNCATE db.table_name");
let table_name = ObjectName(vec![Ident::new("db"), Ident::new("table_name")]);
let table_name = ObjectName::from(vec![Ident::new("db"), Ident::new("table_name")]);
let table_names = vec![TruncateTableTarget {
name: table_name.clone(),
}];
@ -4159,7 +4178,7 @@ fn parse_truncate_with_options() {
let truncate = pg_and_generic()
.verified_stmt("TRUNCATE TABLE ONLY db.table_name RESTART IDENTITY CASCADE");
let table_name = ObjectName(vec![Ident::new("db"), Ident::new("table_name")]);
let table_name = ObjectName::from(vec![Ident::new("db"), Ident::new("table_name")]);
let table_names = vec![TruncateTableTarget {
name: table_name.clone(),
}];
@ -4184,8 +4203,8 @@ fn parse_truncate_with_table_list() {
"TRUNCATE TABLE db.table_name, db.other_table_name RESTART IDENTITY CASCADE",
);
let table_name_a = ObjectName(vec![Ident::new("db"), Ident::new("table_name")]);
let table_name_b = ObjectName(vec![Ident::new("db"), Ident::new("other_table_name")]);
let table_name_a = ObjectName::from(vec![Ident::new("db"), Ident::new("table_name")]);
let table_name_b = ObjectName::from(vec![Ident::new("db"), Ident::new("other_table_name")]);
let table_names = vec![
TruncateTableTarget {
@ -4381,7 +4400,7 @@ fn test_simple_postgres_insert_with_alias() {
or: None,
ignore: false,
into: true,
table: TableObject::TableName(ObjectName(vec![Ident {
table: TableObject::TableName(ObjectName::from(vec![Ident {
value: "test_tables".to_string(),
quote_style: None,
span: Span::empty(),
@ -4451,7 +4470,7 @@ fn test_simple_postgres_insert_with_alias() {
or: None,
ignore: false,
into: true,
table: TableObject::TableName(ObjectName(vec![Ident {
table: TableObject::TableName(ObjectName::from(vec![Ident {
value: "test_tables".to_string(),
quote_style: None,
span: Span::empty(),
@ -4523,7 +4542,7 @@ fn test_simple_insert_with_quoted_alias() {
or: None,
ignore: false,
into: true,
table: TableObject::TableName(ObjectName(vec![Ident {
table: TableObject::TableName(ObjectName::from(vec![Ident {
value: "test_tables".to_string(),
quote_style: None,
span: Span::empty(),
@ -4720,10 +4739,10 @@ fn parse_create_simple_before_insert_trigger() {
let expected = Statement::CreateTrigger {
or_replace: false,
is_constraint: false,
name: ObjectName(vec![Ident::new("check_insert")]),
name: ObjectName::from(vec![Ident::new("check_insert")]),
period: TriggerPeriod::Before,
events: vec![TriggerEvent::Insert],
table_name: ObjectName(vec![Ident::new("accounts")]),
table_name: ObjectName::from(vec![Ident::new("accounts")]),
referenced_table_name: None,
referencing: vec![],
trigger_object: TriggerObject::Row,
@ -4732,7 +4751,7 @@ fn parse_create_simple_before_insert_trigger() {
exec_body: TriggerExecBody {
exec_type: TriggerExecBodyType::Function,
func_desc: FunctionDesc {
name: ObjectName(vec![Ident::new("check_account_insert")]),
name: ObjectName::from(vec![Ident::new("check_account_insert")]),
args: None,
},
},
@ -4748,10 +4767,10 @@ fn parse_create_after_update_trigger_with_condition() {
let expected = Statement::CreateTrigger {
or_replace: false,
is_constraint: false,
name: ObjectName(vec![Ident::new("check_update")]),
name: ObjectName::from(vec![Ident::new("check_update")]),
period: TriggerPeriod::After,
events: vec![TriggerEvent::Update(vec![])],
table_name: ObjectName(vec![Ident::new("accounts")]),
table_name: ObjectName::from(vec![Ident::new("accounts")]),
referenced_table_name: None,
referencing: vec![],
trigger_object: TriggerObject::Row,
@ -4767,7 +4786,7 @@ fn parse_create_after_update_trigger_with_condition() {
exec_body: TriggerExecBody {
exec_type: TriggerExecBodyType::Function,
func_desc: FunctionDesc {
name: ObjectName(vec![Ident::new("check_account_update")]),
name: ObjectName::from(vec![Ident::new("check_account_update")]),
args: None,
},
},
@ -4783,10 +4802,10 @@ fn parse_create_instead_of_delete_trigger() {
let expected = Statement::CreateTrigger {
or_replace: false,
is_constraint: false,
name: ObjectName(vec![Ident::new("check_delete")]),
name: ObjectName::from(vec![Ident::new("check_delete")]),
period: TriggerPeriod::InsteadOf,
events: vec![TriggerEvent::Delete],
table_name: ObjectName(vec![Ident::new("accounts")]),
table_name: ObjectName::from(vec![Ident::new("accounts")]),
referenced_table_name: None,
referencing: vec![],
trigger_object: TriggerObject::Row,
@ -4795,7 +4814,7 @@ fn parse_create_instead_of_delete_trigger() {
exec_body: TriggerExecBody {
exec_type: TriggerExecBodyType::Function,
func_desc: FunctionDesc {
name: ObjectName(vec![Ident::new("check_account_deletes")]),
name: ObjectName::from(vec![Ident::new("check_account_deletes")]),
args: None,
},
},
@ -4811,14 +4830,14 @@ fn parse_create_trigger_with_multiple_events_and_deferrable() {
let expected = Statement::CreateTrigger {
or_replace: false,
is_constraint: true,
name: ObjectName(vec![Ident::new("check_multiple_events")]),
name: ObjectName::from(vec![Ident::new("check_multiple_events")]),
period: TriggerPeriod::Before,
events: vec![
TriggerEvent::Insert,
TriggerEvent::Update(vec![]),
TriggerEvent::Delete,
],
table_name: ObjectName(vec![Ident::new("accounts")]),
table_name: ObjectName::from(vec![Ident::new("accounts")]),
referenced_table_name: None,
referencing: vec![],
trigger_object: TriggerObject::Row,
@ -4827,7 +4846,7 @@ fn parse_create_trigger_with_multiple_events_and_deferrable() {
exec_body: TriggerExecBody {
exec_type: TriggerExecBodyType::Function,
func_desc: FunctionDesc {
name: ObjectName(vec![Ident::new("check_account_changes")]),
name: ObjectName::from(vec![Ident::new("check_account_changes")]),
args: None,
},
},
@ -4847,21 +4866,21 @@ fn parse_create_trigger_with_referencing() {
let expected = Statement::CreateTrigger {
or_replace: false,
is_constraint: false,
name: ObjectName(vec![Ident::new("check_referencing")]),
name: ObjectName::from(vec![Ident::new("check_referencing")]),
period: TriggerPeriod::Before,
events: vec![TriggerEvent::Insert],
table_name: ObjectName(vec![Ident::new("accounts")]),
table_name: ObjectName::from(vec![Ident::new("accounts")]),
referenced_table_name: None,
referencing: vec![
TriggerReferencing {
refer_type: TriggerReferencingType::NewTable,
is_as: true,
transition_relation_name: ObjectName(vec![Ident::new("new_accounts")]),
transition_relation_name: ObjectName::from(vec![Ident::new("new_accounts")]),
},
TriggerReferencing {
refer_type: TriggerReferencingType::OldTable,
is_as: true,
transition_relation_name: ObjectName(vec![Ident::new("old_accounts")]),
transition_relation_name: ObjectName::from(vec![Ident::new("old_accounts")]),
},
],
trigger_object: TriggerObject::Row,
@ -4870,7 +4889,7 @@ fn parse_create_trigger_with_referencing() {
exec_body: TriggerExecBody {
exec_type: TriggerExecBodyType::Function,
func_desc: FunctionDesc {
name: ObjectName(vec![Ident::new("check_account_referencing")]),
name: ObjectName::from(vec![Ident::new("check_account_referencing")]),
args: None,
},
},
@ -4929,8 +4948,8 @@ fn parse_drop_trigger() {
pg().verified_stmt(sql),
Statement::DropTrigger {
if_exists,
trigger_name: ObjectName(vec![Ident::new("check_update")]),
table_name: ObjectName(vec![Ident::new("table_name")]),
trigger_name: ObjectName::from(vec![Ident::new("check_update")]),
table_name: ObjectName::from(vec![Ident::new("table_name")]),
option
}
);
@ -5044,7 +5063,7 @@ fn parse_trigger_related_functions() {
transient: false,
volatile: false,
iceberg: false,
name: ObjectName(vec![Ident::new("emp")]),
name: ObjectName::from(vec![Ident::new("emp")]),
columns: vec![
ColumnDef {
name: "empname".into(),
@ -5126,7 +5145,7 @@ fn parse_trigger_related_functions() {
or_replace: false,
temporary: false,
if_not_exists: false,
name: ObjectName(vec![Ident::new("emp_stamp")]),
name: ObjectName::from(vec![Ident::new("emp_stamp")]),
args: None,
return_type: Some(DataType::Trigger),
function_body: Some(
@ -5161,10 +5180,10 @@ fn parse_trigger_related_functions() {
Statement::CreateTrigger {
or_replace: false,
is_constraint: false,
name: ObjectName(vec![Ident::new("emp_stamp")]),
name: ObjectName::from(vec![Ident::new("emp_stamp")]),
period: TriggerPeriod::Before,
events: vec![TriggerEvent::Insert, TriggerEvent::Update(vec![])],
table_name: ObjectName(vec![Ident::new("emp")]),
table_name: ObjectName::from(vec![Ident::new("emp")]),
referenced_table_name: None,
referencing: vec![],
trigger_object: TriggerObject::Row,
@ -5173,7 +5192,7 @@ fn parse_trigger_related_functions() {
exec_body: TriggerExecBody {
exec_type: TriggerExecBodyType::Function,
func_desc: FunctionDesc {
name: ObjectName(vec![Ident::new("emp_stamp")]),
name: ObjectName::from(vec![Ident::new("emp_stamp")]),
args: None,
}
},
@ -5186,8 +5205,8 @@ fn parse_trigger_related_functions() {
drop_trigger,
Statement::DropTrigger {
if_exists: false,
trigger_name: ObjectName(vec![Ident::new("emp_stamp")]),
table_name: ObjectName(vec![Ident::new("emp")]),
trigger_name: ObjectName::from(vec![Ident::new("emp_stamp")]),
table_name: ObjectName::from(vec![Ident::new("emp")]),
option: None
}
);

View file

@ -39,7 +39,7 @@ fn test_square_brackets_over_db_schema_table_name() {
assert_eq!(
select.from[0],
TableWithJoins {
relation: table_from_name(ObjectName(vec![
relation: table_from_name(ObjectName::from(vec![
Ident {
value: "test_schema".to_string(),
quote_style: Some('['),
@ -81,7 +81,7 @@ fn test_double_quotes_over_db_schema_table_name() {
assert_eq!(
select.from[0],
TableWithJoins {
relation: table_from_name(ObjectName(vec![
relation: table_from_name(ObjectName::from(vec![
Ident {
value: "test_schema".to_string(),
quote_style: Some('"'),
@ -114,7 +114,10 @@ fn parse_delimited_identifiers() {
version,
..
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(
ObjectName::from(vec![Ident::with_quote('"', "a table")]),
name
);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
@ -133,7 +136,7 @@ fn parse_delimited_identifiers() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::with_quote('"', "myfun")]),
name: ObjectName::from(vec![Ident::with_quote('"', "myfun")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -297,7 +300,7 @@ fn test_parse_json_path_from() {
TableFactor::Table {
name, json_path, ..
} => {
assert_eq!(name, &ObjectName(vec![Ident::new("src")]));
assert_eq!(name, &ObjectName::from(vec![Ident::new("src")]));
assert_eq!(
json_path,
&Some(JsonPath {
@ -321,7 +324,7 @@ fn test_parse_json_path_from() {
TableFactor::Table {
name, json_path, ..
} => {
assert_eq!(name, &ObjectName(vec![Ident::new("src")]));
assert_eq!(name, &ObjectName::from(vec![Ident::new("src")]));
assert_eq!(
json_path,
&Some(JsonPath {
@ -354,7 +357,7 @@ fn test_parse_json_path_from() {
} => {
assert_eq!(
name,
&ObjectName(vec![Ident::new("src"), Ident::new("a"), Ident::new("b")])
&ObjectName::from(vec![Ident::new("src"), Ident::new("a"), Ident::new("b")])
);
assert_eq!(json_path, &None);
}

View file

@ -634,7 +634,7 @@ fn test_snowflake_create_table_with_collated_column() {
vec![ColumnDef {
name: "a".into(),
data_type: DataType::Text,
collation: Some(ObjectName(vec![Ident::with_quote('\'', "de_DE")])),
collation: Some(ObjectName::from(vec![Ident::with_quote('\'', "de_DE")])),
options: vec![]
},]
);
@ -818,7 +818,7 @@ fn test_snowflake_create_table_with_several_column_options() {
ColumnDef {
name: "b".into(),
data_type: DataType::Text,
collation: Some(ObjectName(vec![Ident::with_quote('\'', "de_DE")])),
collation: Some(ObjectName::from(vec![Ident::with_quote('\'', "de_DE")])),
options: vec![
ColumnOptionDef {
name: None,
@ -1274,7 +1274,10 @@ fn parse_delimited_identifiers() {
version,
..
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(
ObjectName::from(vec![Ident::with_quote('"', "a table")]),
name
);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
@ -1293,7 +1296,7 @@ fn parse_delimited_identifiers() {
);
assert_eq!(
&Expr::Function(Function {
name: ObjectName(vec![Ident::with_quote('"', "myfun")]),
name: ObjectName::from(vec![Ident::with_quote('"', "myfun")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -1365,7 +1368,7 @@ fn test_select_wildcard_with_exclude() {
let select = snowflake_and_generic()
.verified_only_select("SELECT name.* EXCLUDE department_id FROM employee_table");
let expected = SelectItem::QualifiedWildcard(
ObjectName(vec![Ident::new("name")]),
ObjectName::from(vec![Ident::new("name")]),
WildcardAdditionalOptions {
opt_exclude: Some(ExcludeSelectItem::Single(Ident::new("department_id"))),
..Default::default()
@ -1402,7 +1405,7 @@ fn test_select_wildcard_with_rename() {
"SELECT name.* RENAME (department_id AS new_dep, employee_id AS new_emp) FROM employee_table",
);
let expected = SelectItem::QualifiedWildcard(
ObjectName(vec![Ident::new("name")]),
ObjectName::from(vec![Ident::new("name")]),
WildcardAdditionalOptions {
opt_rename: Some(RenameSelectItem::Multiple(vec![
IdentWithAlias {
@ -1505,7 +1508,7 @@ fn test_alter_table_clustering() {
Expr::Identifier(Ident::new("c1")),
Expr::Identifier(Ident::with_quote('"', "c2")),
Expr::Function(Function {
name: ObjectName(vec![Ident::new("TO_DATE")]),
name: ObjectName::from(vec![Ident::new("TO_DATE")]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -2034,11 +2037,11 @@ fn test_copy_into() {
} => {
assert_eq!(
into,
ObjectName(vec![Ident::new("my_company"), Ident::new("emp_basic")])
ObjectName::from(vec![Ident::new("my_company"), Ident::new("emp_basic")])
);
assert_eq!(
from_stage,
ObjectName(vec![Ident::with_quote('\'', "gcs://mybucket/./../a.csv")])
ObjectName::from(vec![Ident::with_quote('\'', "gcs://mybucket/./../a.csv")])
);
assert!(files.is_none());
assert!(pattern.is_none());
@ -2069,7 +2072,7 @@ fn test_copy_into_with_stage_params() {
//assert_eq!("s3://load/files/", stage_params.url.unwrap());
assert_eq!(
from_stage,
ObjectName(vec![Ident::with_quote('\'', "s3://load/files/")])
ObjectName::from(vec![Ident::with_quote('\'', "s3://load/files/")])
);
assert_eq!("myint", stage_params.storage_integration.unwrap());
assert_eq!(
@ -2128,7 +2131,7 @@ fn test_copy_into_with_stage_params() {
} => {
assert_eq!(
from_stage,
ObjectName(vec![Ident::with_quote('\'', "s3://load/files/")])
ObjectName::from(vec![Ident::with_quote('\'', "s3://load/files/")])
);
assert_eq!("myint", stage_params.storage_integration.unwrap());
}
@ -2182,7 +2185,7 @@ fn test_copy_into_with_transformations() {
} => {
assert_eq!(
from_stage,
ObjectName(vec![Ident::new("@schema"), Ident::new("general_finished")])
ObjectName::from(vec![Ident::new("@schema"), Ident::new("general_finished")])
);
assert_eq!(
from_transformations.as_ref().unwrap()[0],
@ -2291,17 +2294,17 @@ fn test_snowflake_stage_object_names() {
"@~/path",
];
let mut allowed_object_names = [
ObjectName(vec![Ident::new("my_company"), Ident::new("emp_basic")]),
ObjectName(vec![Ident::new("@namespace"), Ident::new("%table_name")]),
ObjectName(vec![
ObjectName::from(vec![Ident::new("my_company"), Ident::new("emp_basic")]),
ObjectName::from(vec![Ident::new("@namespace"), Ident::new("%table_name")]),
ObjectName::from(vec![
Ident::new("@namespace"),
Ident::new("%table_name/path"),
]),
ObjectName(vec![
ObjectName::from(vec![
Ident::new("@namespace"),
Ident::new("stage_name/path"),
]),
ObjectName(vec![Ident::new("@~/path")]),
ObjectName::from(vec![Ident::new("@~/path")]),
];
for it in allowed_formatted_names
@ -2330,10 +2333,13 @@ fn test_snowflake_copy_into() {
Statement::CopyIntoSnowflake {
into, from_stage, ..
} => {
assert_eq!(into, ObjectName(vec![Ident::new("a"), Ident::new("b")]));
assert_eq!(
into,
ObjectName::from(vec![Ident::new("a"), Ident::new("b")])
);
assert_eq!(
from_stage,
ObjectName(vec![Ident::new("@namespace"), Ident::new("stage_name")])
ObjectName::from(vec![Ident::new("@namespace"), Ident::new("stage_name")])
)
}
_ => unreachable!(),
@ -2350,14 +2356,14 @@ fn test_snowflake_copy_into_stage_name_ends_with_parens() {
} => {
assert_eq!(
into,
ObjectName(vec![
ObjectName::from(vec![
Ident::new("SCHEMA"),
Ident::new("SOME_MONITORING_SYSTEM")
])
);
assert_eq!(
from_stage,
ObjectName(vec![Ident::new("@schema"), Ident::new("general_finished")])
ObjectName::from(vec![Ident::new("@schema"), Ident::new("general_finished")])
)
}
_ => unreachable!(),
@ -2771,7 +2777,7 @@ fn parse_use() {
// Test single identifier without quotes
assert_eq!(
snowflake().verified_stmt(&format!("USE {}", object_name)),
Statement::Use(Use::Object(ObjectName(vec![Ident::new(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::new(
object_name.to_string()
)])))
);
@ -2779,7 +2785,7 @@ fn parse_use() {
// Test single identifier with different type of quotes
assert_eq!(
snowflake().verified_stmt(&format!("USE {}{}{}", quote, object_name, quote)),
Statement::Use(Use::Object(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Object(ObjectName::from(vec![Ident::with_quote(
quote,
object_name.to_string(),
)])))
@ -2791,7 +2797,7 @@ fn parse_use() {
// Test double identifier with different type of quotes
assert_eq!(
snowflake().verified_stmt(&format!("USE {0}CATALOG{0}.{0}my_schema{0}", quote)),
Statement::Use(Use::Object(ObjectName(vec![
Statement::Use(Use::Object(ObjectName::from(vec![
Ident::with_quote(quote, "CATALOG"),
Ident::with_quote(quote, "my_schema")
])))
@ -2800,7 +2806,7 @@ fn parse_use() {
// Test double identifier without quotes
assert_eq!(
snowflake().verified_stmt("USE mydb.my_schema"),
Statement::Use(Use::Object(ObjectName(vec![
Statement::Use(Use::Object(ObjectName::from(vec![
Ident::new("mydb"),
Ident::new("my_schema")
])))
@ -2810,35 +2816,35 @@ fn parse_use() {
// Test single and double identifier with keyword and different type of quotes
assert_eq!(
snowflake().verified_stmt(&format!("USE DATABASE {0}my_database{0}", quote)),
Statement::Use(Use::Database(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Database(ObjectName::from(vec![Ident::with_quote(
quote,
"my_database".to_string(),
)])))
);
assert_eq!(
snowflake().verified_stmt(&format!("USE SCHEMA {0}my_schema{0}", quote)),
Statement::Use(Use::Schema(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Schema(ObjectName::from(vec![Ident::with_quote(
quote,
"my_schema".to_string(),
)])))
);
assert_eq!(
snowflake().verified_stmt(&format!("USE SCHEMA {0}CATALOG{0}.{0}my_schema{0}", quote)),
Statement::Use(Use::Schema(ObjectName(vec![
Statement::Use(Use::Schema(ObjectName::from(vec![
Ident::with_quote(quote, "CATALOG"),
Ident::with_quote(quote, "my_schema")
])))
);
assert_eq!(
snowflake().verified_stmt(&format!("USE ROLE {0}my_role{0}", quote)),
Statement::Use(Use::Role(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Role(ObjectName::from(vec![Ident::with_quote(
quote,
"my_role".to_string(),
)])))
);
assert_eq!(
snowflake().verified_stmt(&format!("USE WAREHOUSE {0}my_wh{0}", quote)),
Statement::Use(Use::Warehouse(ObjectName(vec![Ident::with_quote(
Statement::Use(Use::Warehouse(ObjectName::from(vec![Ident::with_quote(
quote,
"my_wh".to_string(),
)])))
@ -3076,7 +3082,7 @@ fn parse_ls_and_rm() {
.verified_stmt("LIST @SNOWFLAKE_KAFKA_CONNECTOR_externalDataLakeSnowflakeConnector_STAGE_call_tracker_stream/");
match statement {
Statement::List(command) => {
assert_eq!(command.stage, ObjectName(vec!["@SNOWFLAKE_KAFKA_CONNECTOR_externalDataLakeSnowflakeConnector_STAGE_call_tracker_stream/".into()]));
assert_eq!(command.stage, ObjectName::from(vec!["@SNOWFLAKE_KAFKA_CONNECTOR_externalDataLakeSnowflakeConnector_STAGE_call_tracker_stream/".into()]));
assert!(command.pattern.is_none());
}
_ => unreachable!(),
@ -3088,7 +3094,7 @@ fn parse_ls_and_rm() {
Statement::Remove(command) => {
assert_eq!(
command.stage,
ObjectName(vec!["@my_csv_stage/analysis/".into()])
ObjectName::from(vec!["@my_csv_stage/analysis/".into()])
);
assert_eq!(command.pattern, Some(".*data_0.*".to_string()));
}

View file

@ -418,7 +418,7 @@ fn parse_window_function_with_filter() {
assert_eq!(
select.projection,
vec![SelectItem::UnnamedExpr(Expr::Function(Function {
name: ObjectName(vec![Ident::new(func_name)]),
name: ObjectName::from(vec![Ident::new(func_name)]),
uses_odbc_syntax: false,
parameters: FunctionArguments::None,
args: FunctionArguments::List(FunctionArgumentList {
@ -469,8 +469,8 @@ fn parse_update_tuple_row_values() {
or: None,
assignments: vec![Assignment {
target: AssignmentTarget::Tuple(vec![
ObjectName(vec![Ident::new("a"),]),
ObjectName(vec![Ident::new("b"),]),
ObjectName::from(vec![Ident::new("a"),]),
ObjectName::from(vec![Ident::new("b"),]),
]),
value: Expr::Tuple(vec![
Expr::Value(Value::Number("1".parse().unwrap(), false)),
@ -479,7 +479,7 @@ fn parse_update_tuple_row_values() {
}],
selection: None,
table: TableWithJoins {
relation: table_from_name(ObjectName(vec![Ident::new("x")])),
relation: table_from_name(ObjectName::from(vec![Ident::new("x")])),
joins: vec![],
},
from: None,