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

@ -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,