From 39e98cb11a0b960aff5233bb0474ebb9409c42b2 Mon Sep 17 00:00:00 2001 From: Nickolay Ponomarev Date: Wed, 30 Jan 2019 21:22:53 +0300 Subject: [PATCH] Rename parse_tablename -> parse_object_name (4.2/4.4) ...to match the name of the recently introduced `SQLObjectName` struct and to avoid any reservations about using it with multi-part names of objects other than tables (as in the `type_name` case). --- src/sqlparser.rs | 16 +++++++++------- tests/sqlparser_postgres.rs | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/sqlparser.rs b/src/sqlparser.rs index 64cdca25..de4c022a 100644 --- a/src/sqlparser.rs +++ b/src/sqlparser.rs @@ -545,7 +545,7 @@ impl Parser { /// Parse a SQL CREATE statement pub fn parse_create(&mut self) -> Result { if self.parse_keywords(vec!["TABLE"]) { - let table_name = self.parse_tablename()?; + let table_name = self.parse_object_name()?; // parse optional column list (schema) let mut columns = vec![]; if self.consume_token(&Token::LParen) { @@ -639,7 +639,7 @@ impl Parser { Ok(TableKey::UniqueKey(key)) } else if is_foreign_key { self.expect_keyword("REFERENCES")?; - let foreign_table = self.parse_tablename()?; + let foreign_table = self.parse_object_name()?; self.expect_token(&Token::LParen)?; let referred_columns = self.parse_column_names()?; self.expect_token(&Token::RParen)?; @@ -659,7 +659,7 @@ impl Parser { pub fn parse_alter(&mut self) -> Result { self.expect_keyword("TABLE")?; let _ = self.parse_keyword("ONLY"); - let table_name = self.parse_tablename()?; + let table_name = self.parse_object_name()?; let operation: Result = if self.parse_keywords(vec!["ADD", "CONSTRAINT"]) { match self.next_token() { @@ -688,7 +688,7 @@ impl Parser { /// Parse a copy statement pub fn parse_copy(&mut self) -> Result { - let table_name = self.parse_tablename()?; + let table_name = self.parse_object_name()?; let columns = if self.consume_token(&Token::LParen) { let column_names = self.parse_column_names()?; self.expect_token(&Token::RParen)?; @@ -986,7 +986,7 @@ impl Parser { } _ => { self.prev_token(); - let type_name = self.parse_tablename()?; // TODO: this actually reads a possibly schema-qualified name of a (custom) type + let type_name = self.parse_object_name()?; Ok(SQLType::Custom(type_name)) } }, @@ -1060,7 +1060,9 @@ impl Parser { } } - pub fn parse_tablename(&mut self) -> Result { + /// Parse a possibly qualified, possibly quoted identifier, e.g. + /// `foo` or `myschema."table"` + pub fn parse_object_name(&mut self) -> Result { let identifier = self.parse_compound_identifier(&Token::Period)?; match identifier { // TODO: should store the compound identifier itself @@ -1323,7 +1325,7 @@ impl Parser { /// Parse an INSERT statement pub fn parse_insert(&mut self) -> Result { self.expect_keyword("INTO")?; - let table_name = self.parse_tablename()?; + let table_name = self.parse_object_name()?; let columns = if self.consume_token(&Token::LParen) { let column_names = self.parse_column_names()?; self.expect_token(&Token::RParen)?; diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 58ed2445..672c4f03 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -99,14 +99,14 @@ fn parse_complex_insert() { #[test] fn parse_invalid_table_name() { let mut parser = parser("db.public..customer"); - let ast = parser.parse_tablename(); + let ast = parser.parse_object_name(); assert!(ast.is_err()); } #[test] fn parse_no_table_name() { let mut parser = parser(""); - let ast = parser.parse_tablename(); + let ast = parser.parse_object_name(); assert!(ast.is_err()); }