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

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

wants to merge 1 commit into from

Conversation

cznic
Copy link

@cznic cznic commented Sep 9, 2015

state 861 // alter tableKwd autoIncrement drop

    7 AlterSpecification: drop . ColumnKeywordOpt ColumnName
    8 AlterSpecification: drop . primary key
    9 AlterSpecification: drop . KeyOrIndex IndexName
   10 AlterSpecification: drop . foreign key Symbol
   13 ColumnKeywordOpt: .  [autoIncrement, begin, bitType, boolType, booleanType, charsetKwd, column, columns, dateType, datetimeType, engine, full, global, identifier, local, mode, names, now, offset, password, quick, rollback, session, substring, tables, textType, timeType, timestampType, transaction, truncate, value, warnings, yearType]

    autoIncrement  reduce using rule 13 (ColumnKeywordOpt)
    begin          reduce using rule 13 (ColumnKeywordOpt)
    bitType        reduce using rule 13 (ColumnKeywordOpt)
    boolType       reduce using rule 13 (ColumnKeywordOpt)
    booleanType    reduce using rule 13 (ColumnKeywordOpt)
    charsetKwd     reduce using rule 13 (ColumnKeywordOpt)
    column         shift, and goto state 869
    columns        reduce using rule 13 (ColumnKeywordOpt)
    dateType       reduce using rule 13 (ColumnKeywordOpt)
    datetimeType   reduce using rule 13 (ColumnKeywordOpt)
    engine         reduce using rule 13 (ColumnKeywordOpt)
    foreign        shift, and goto state 866
    full           reduce using rule 13 (ColumnKeywordOpt)
    global         reduce using rule 13 (ColumnKeywordOpt)
    identifier     reduce using rule 13 (ColumnKeywordOpt)
    index          shift, and goto state 868
    key            shift, and goto state 867
    local          reduce using rule 13 (ColumnKeywordOpt)
    mode           reduce using rule 13 (ColumnKeywordOpt)
    names          reduce using rule 13 (ColumnKeywordOpt)
    now            reduce using rule 13 (ColumnKeywordOpt)
    offset         reduce using rule 13 (ColumnKeywordOpt)
    password       reduce using rule 13 (ColumnKeywordOpt)
    primary        shift, and goto state 864
    quick          reduce using rule 13 (ColumnKeywordOpt)
    rollback       reduce using rule 13 (ColumnKeywordOpt)
    session        reduce using rule 13 (ColumnKeywordOpt)
    substring      reduce using rule 13 (ColumnKeywordOpt)
    tables         reduce using rule 13 (ColumnKeywordOpt)
    textType       reduce using rule 13 (ColumnKeywordOpt)
    timeType       reduce using rule 13 (ColumnKeywordOpt)
    timestampType  reduce using rule 13 (ColumnKeywordOpt)
    transaction    reduce using rule 13 (ColumnKeywordOpt)
    truncate       reduce using rule 13 (ColumnKeywordOpt)
    value          reduce using rule 13 (ColumnKeywordOpt)
    warnings       reduce using rule 13 (ColumnKeywordOpt)
    yearType       reduce using rule 13 (ColumnKeywordOpt)

    ColumnKeywordOpt  goto state 863
    KeyOrIndex        goto state 865

    conflict on column, shift, and goto state 869, reduce using rule 13

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

@coocood
Copy link
Member

coocood commented Sep 9, 2015

@cznic
MySQL has two kinds of keywords, one is reserved keywords, the other one is unreserved keywords.

Reserved keywords can not be used as identifier, but unreserved keywords can.

"COLUMN" is an reserved keyword, so "ALTER TABLE t DROP COLUMN COLUMN" is not a valid statement.

The full list of MySQL keywords can be found here:
https://dev.mysql.com/doc/refman/5.0/en/keywords.html

@cznic
Copy link
Author

cznic commented Sep 9, 2015

@coocood My bad, I mistakenly supposed COLUMN is an unreserved keyword. Thanks for making it clear to me. I will fix the PR later this evening (CET).

Thanks again.

@coocood
Copy link
Member

coocood commented Sep 9, 2015

@cznic @shenli
So we mistakenly listed "COLUMN" in unreserved keyword in parser.y.

@shenli
Copy link
Member

shenli commented Sep 9, 2015

I have removed "COLUMN" from UnReservedKeyword in another pr and seems this conflict is already solved. Please check the latest master. @cznic
Thanks!

@cznic
Copy link
Author

cznic commented Sep 10, 2015

@shenli Yep, this S/R conflict exists no more at master. Closing.

@cznic cznic closed this Sep 10, 2015
@sre-bot sre-bot added the contribution This PR is from a community contributor. label Dec 18, 2019
YuJuncen pushed a commit to YuJuncen/tidb that referenced this pull request Apr 23, 2021
xhebox pushed a commit to xhebox/tidb that referenced this pull request Sep 28, 2021
* ast, opcode: implement Restore for VariableExpr and fix literal string of operator `EQ`

* address comment but still has some problem

* fix test

* add test case
xhebox pushed a commit to xhebox/tidb that referenced this pull request Oct 8, 2021
* ast, opcode: implement Restore for VariableExpr and fix literal string of operator `EQ`

* address comment but still has some problem

* fix test

* add test case
ti-chi-bot pushed a commit that referenced this pull request Oct 9, 2021
* ast, opcode: implement Restore for VariableExpr and fix literal string of operator `EQ`

* address comment but still has some problem

* fix test

* add test case
okJiang pushed a commit to okJiang/tidb that referenced this pull request Oct 19, 2021
* quote db, table and field

* fix bug

* add integration test

* fix bug

* fix again

* fix

* fix
Defined2014 pushed a commit to Defined2014/tidb that referenced this pull request Apr 28, 2022
mittalrishabh pushed a commit to mittalrishabh/tidb that referenced this pull request May 30, 2024
… (pingcap#87)

close pingcap#52243

Co-authored-by: Ti Chi Robot <ti-community-prow-bot@tidb.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
contribution This PR is from a community contributor.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants