Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

parser/parser.y: S/R conflicts 25->24. #87

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions parser/parser.y
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,11 @@ import (
CharsetName "Charset Name"
CollationName "Collation Name"
ColumnDef "table column definition"
ColumnKeywordOpt "Column keyword or empty"
ColumnName "column name"
ColumnNameList "column name list"
ColumnNameListOpt "column name list opt"
ColumnKeywordOpt "Column keyword or empty"
ColumnOptColumnName "optional COLUMN and column name"
ColumnSetValue "insert statement set value by column name"
ColumnSetValueList "insert statement set value by column name list"
CommaOpt "optional comma"
Expand Down Expand Up @@ -531,11 +532,11 @@ AlterSpecification:
Constraint: constraint,
}
}
| "DROP" ColumnKeywordOpt ColumnName
| "DROP" ColumnOptColumnName
{
$$ = &ddl.AlterSpecification{
Action: ddl.AlterDropColumn,
Name: $3.(string),
Name: $2.(string),
}
}
| "DROP" "PRIMARY" "KEY"
Expand All @@ -560,6 +561,15 @@ AlterSpecification:
KeyOrIndex:
"KEY"|"INDEX"

ColumnOptColumnName:
"COLUMN"
| "COLUMN" "COLUMN"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here may be a valid syntax, for drop column column or above drop column ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AFAICT, the original grammar (before this PR) would have accepted the sentence drop column column as a valid AlterSpecification. The first column instance is the optional unreserved column keyword, the second column instance is an Identifier and the real name of the column to drop.

That's the mess created by the keyword/identifiers mixing.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Alter table t drop column int;" is a valid sql statement but "int" is not an identifier in parser.y. @cznic
"Alter table t drop column column;" is also a valid sql statement. @siddontang

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this way I reduce S/R conflict from 25 to 24. Is this a better way? @cznic
diff --git a/parser/parser.y b/parser/parser.y
index 8b70e02..96b6586 100644
--- a/parser/parser.y
+++ b/parser/parser.y
@@ -531,7 +531,14 @@ AlterSpecification:
Constraint: constraint,
}
}
-| "DROP" ColumnKeywordOpt ColumnName
+| "DROP" ColumnName

  •   {
    
  •           $$ = &ddl.AlterSpecification{
    
  •                   Action: ddl.AlterDropColumn,
    
  •                   Name: $2.(string),
    
  •           }
    
  •   }
    
    +| "DROP" "COLUMN" ColumnName
    {
    $$ = &ddl.AlterSpecification{
    Action: ddl.AlterDropColumn,

| "COLUMN" identifier
{
$$ = $2
}
| identifier

ColumnKeywordOpt:
{}
| "COLUMN"
Expand Down