@@ -545,7 +545,7 @@ impl Parser {
545
545
/// Parse a SQL CREATE statement
546
546
pub fn parse_create ( & mut self ) -> Result < SQLStatement , ParserError > {
547
547
if self . parse_keywords ( vec ! [ "TABLE" ] ) {
548
- let table_name = self . parse_tablename ( ) ?;
548
+ let table_name = self . parse_object_name ( ) ?;
549
549
// parse optional column list (schema)
550
550
let mut columns = vec ! [ ] ;
551
551
if self . consume_token ( & Token :: LParen ) {
@@ -639,7 +639,7 @@ impl Parser {
639
639
Ok ( TableKey :: UniqueKey ( key) )
640
640
} else if is_foreign_key {
641
641
self . expect_keyword ( "REFERENCES" ) ?;
642
- let foreign_table = self . parse_tablename ( ) ?;
642
+ let foreign_table = self . parse_object_name ( ) ?;
643
643
self . expect_token ( & Token :: LParen ) ?;
644
644
let referred_columns = self . parse_column_names ( ) ?;
645
645
self . expect_token ( & Token :: RParen ) ?;
@@ -659,7 +659,7 @@ impl Parser {
659
659
pub fn parse_alter ( & mut self ) -> Result < SQLStatement , ParserError > {
660
660
self . expect_keyword ( "TABLE" ) ?;
661
661
let _ = self . parse_keyword ( "ONLY" ) ;
662
- let table_name = self . parse_tablename ( ) ?;
662
+ let table_name = self . parse_object_name ( ) ?;
663
663
let operation: Result < AlterOperation , ParserError > =
664
664
if self . parse_keywords ( vec ! [ "ADD" , "CONSTRAINT" ] ) {
665
665
match self . next_token ( ) {
@@ -688,7 +688,7 @@ impl Parser {
688
688
689
689
/// Parse a copy statement
690
690
pub fn parse_copy ( & mut self ) -> Result < SQLStatement , ParserError > {
691
- let table_name = self . parse_tablename ( ) ?;
691
+ let table_name = self . parse_object_name ( ) ?;
692
692
let columns = if self . consume_token ( & Token :: LParen ) {
693
693
let column_names = self . parse_column_names ( ) ?;
694
694
self . expect_token ( & Token :: RParen ) ?;
@@ -986,7 +986,7 @@ impl Parser {
986
986
}
987
987
_ => {
988
988
self . prev_token ( ) ;
989
- let type_name = self . parse_tablename ( ) ?; // TODO: this actually reads a possibly schema-qualified name of a (custom) type
989
+ let type_name = self . parse_object_name ( ) ?;
990
990
Ok ( SQLType :: Custom ( type_name) )
991
991
}
992
992
} ,
@@ -1060,7 +1060,9 @@ impl Parser {
1060
1060
}
1061
1061
}
1062
1062
1063
- pub fn parse_tablename ( & mut self ) -> Result < SQLObjectName , ParserError > {
1063
+ /// Parse a possibly qualified, possibly quoted identifier, e.g.
1064
+ /// `foo` or `myschema."table"`
1065
+ pub fn parse_object_name ( & mut self ) -> Result < SQLObjectName , ParserError > {
1064
1066
let identifier = self . parse_compound_identifier ( & Token :: Period ) ?;
1065
1067
match identifier {
1066
1068
// TODO: should store the compound identifier itself
@@ -1323,7 +1325,7 @@ impl Parser {
1323
1325
/// Parse an INSERT statement
1324
1326
pub fn parse_insert ( & mut self ) -> Result < SQLStatement , ParserError > {
1325
1327
self . expect_keyword ( "INTO" ) ?;
1326
- let table_name = self . parse_tablename ( ) ?;
1328
+ let table_name = self . parse_object_name ( ) ?;
1327
1329
let columns = if self . consume_token ( & Token :: LParen ) {
1328
1330
let column_names = self . parse_column_names ( ) ?;
1329
1331
self . expect_token ( & Token :: RParen ) ?;
0 commit comments