Closed
Description
The following alter statement to drop primary key directly is allowed in MySQL:
ALTER TABLE table_name DROP PRIMARY KEY;
However, it's not parsed correctly in sqlparser, for example:
use sqlparser::dialect::MySqlDialect;
use sqlparser::parser::Parser;
use sqlparser::tokenizer::Token;
use sqlparser::tokenizer::Tokenizer;
#[test]
fn test() {
let dialect = &MySqlDialect {};
let sql = r"ALTER TABLE my_table DROP PRIMARY KEY;";
let mut tokenizer = Tokenizer::new(dialect, sql);
let tokens: Vec<Token> = tokenizer.tokenize().unwrap();
let mut parser = Parser::new(tokens, dialect);
parser.next_token();
let statement = parser.parse_alter();
println!("{:?}", statement);
}
Which prints
Ok(AlterTable { name: ObjectName([Ident { value: "my_table", quote_style: None }]), operation: DropColumn { column_name: Ident { value: "PRIMARY", quote_style: None }, if_exists: false, cascade: false } })
Looks like the "drop primary key" is interpreted as "drop column 'PRIMARY'".
Metadata
Metadata
Assignees
Labels
No labels