From 55a5b3937b2443ff98ff92bf8778debfd0345741 Mon Sep 17 00:00:00 2001 From: siddontang Date: Mon, 28 Sep 2015 10:50:17 +0800 Subject: [PATCH] parser: use ShowLikeOrWhereOpt to reduce code --- parser/parser.y | 49 +++++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/parser/parser.y b/parser/parser.y index 3ff0283486d39..fc81f968f068b 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -437,6 +437,7 @@ import ( SetStmt "Set variable statement" ShowStmt "Show engines/databases/tables/columns/warnings statement" ShowDatabaseNameOpt "Show tables/columns statement database name option" + ShowLikeOrWhereOpt "Show like or where condition option" ShowTableIdentOpt "Show columns statement table name option" SignedLiteral "Literal or NumLiteral with sign" SimpleQualifiedIdent "Qualified identifier without *" @@ -3165,51 +3166,35 @@ ShowStmt: { $$ = &stmts.ShowStmt{Target: stmt.ShowWarnings} } -// See: https://dev.mysql.com/doc/refman/5.7/en/show-variables.html -// TODO: Support show variables with where clause. -| "SHOW" GlobalScope "VARIABLES" +| "SHOW" GlobalScope "VARIABLES" ShowLikeOrWhereOpt { - $$ = &stmts.ShowStmt{ - Target: stmt.ShowVariables, - GlobalScope: $2.(bool), - } - - } -| "SHOW" GlobalScope "VARIABLES" "LIKE" PrimaryExpression - { - $$ = &stmts.ShowStmt{ + stmt := &stmts.ShowStmt{ Target: stmt.ShowVariables, GlobalScope: $2.(bool), - Pattern: &expression.PatternLike{Pattern: $5.(expression.Expression)}, } + stmt.SetCondition($4) + $$ = stmt } -| "SHOW" GlobalScope "VARIABLES" "WHERE" Expression +| "SHOW" "COLLATION" ShowLikeOrWhereOpt { - $$ = &stmts.ShowStmt{ - Target: stmt.ShowVariables, - GlobalScope: $2.(bool), - Where: expression.Expr($5), + stmt := &stmts.ShowStmt{ + Target: stmt.ShowCollation, } + stmt.SetCondition($3) + $$ = stmt } -| "SHOW" "COLLATION" + +ShowLikeOrWhereOpt: { - $$ = &stmts.ShowStmt{ - Target: stmt.ShowCollation, - } + $$ = nil } -| "SHOW" "COLLATION" "LIKE" PrimaryExpression +| "LIKE" PrimaryExpression { - $$ = &stmts.ShowStmt{ - Target: stmt.ShowCollation, - Pattern: &expression.PatternLike{Pattern: $4.(expression.Expression)}, - } + $$ = &expression.PatternLike{Pattern: $2.(expression.Expression)} } -| "SHOW" "COLLATION" "WHERE" Expression +| "WHERE" Expression { - $$ = &stmts.ShowStmt{ - Target: stmt.ShowCollation, - Where: expression.Expr($4), - } + $$ = expression.Expr($2) } GlobalScope: