Skip to content
Merged
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@ validStatement
| createView | prepare | executeStmt | commit | deallocate
| setVariable | beginStatement | declareStatement | flowControlStatement | cursorStatement | conditionHandlingStatement
| setStatement | showStatement | showCreateTable | startTransaction | rollback | commit | show
| alterEvent | dropEvent | doStatement | explain) SEMI_?
| alterEvent | dropEvent | doStatement | explain | analyzeTable) SEMI_?
;

showStatement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WhileStatementContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.DoStatementContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ExplainContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AnalyzeTableContext;
import org.apache.shardingsphere.sql.parser.engine.mysql.visitor.statement.MySQLStatementVisitor;
import org.apache.shardingsphere.sql.parser.statement.core.enums.AlgorithmOption;
import org.apache.shardingsphere.sql.parser.statement.core.enums.LockTableOption;
Expand Down Expand Up @@ -154,6 +155,7 @@
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.AnalyzeTableStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.ExplainStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DeallocateStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.ExecuteStatement;
Expand Down Expand Up @@ -861,11 +863,19 @@ private ValidStatementSegment createValidStatementSegment(final ValidStatementCo
sqlStatement = (DoStatement) visit(ctx.doStatement());
} else if (null != ctx.explain()) {
sqlStatement = (SQLStatement) visit(ctx.explain());
} else if (null != ctx.analyzeTable()) {
sqlStatement = (AnalyzeTableStatement) visit(ctx.analyzeTable());
}
result.setSqlStatement(sqlStatement);
return result;
}

@SuppressWarnings("unchecked")
@Override
public ASTNode visitAnalyzeTable(final AnalyzeTableContext ctx) {
return new AnalyzeTableStatement(getDatabaseType(), ((CollectionValue<SimpleTableSegment>) visit(ctx.tableList())).getValue());
}

@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
List<ExpressionSegment> expressions = new LinkedList<>();
Expand Down
12 changes: 12 additions & 0 deletions test/it/parser/src/main/resources/case/ddl/create-procedure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -169,4 +169,16 @@
<sql-statement start-index="28" stop-index="38" statement-class-simple-name="MySQLDescribeStatement" />
</sql-statements>
</create-procedure>
<create-procedure sql-case-id="create_procedure_with_analyze_table_update">
<procedure-name name="p" />
<sql-statements>
<sql-statement start-index="24" stop-index="59" statement-class-simple-name="AnalyzeTableStatement" />
</sql-statements>
</create-procedure>
<create-procedure sql-case-id="create_procedure_with_analyze_table">
<procedure-name name="p" />
<sql-statements>
<sql-statement start-index="27" stop-index="41" statement-class-simple-name="AnalyzeTableStatement" />
</sql-statements>
</create-procedure>
</sql-parser-test-cases>
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,6 @@
<sql-case id="create_procedure_with_begin_do" value="create procedure t_sysdate() begin select sysdate() into @a; do sleep(2); end;" db-types="MySQL"/>
<sql-case id="create_procedure_with_describe_table" value="create procedure p1() begin describe t1; end;" db-types="MySQL"/>
<sql-case id="create_procedure_with_explain_table" value="create procedure p1() begin explain t1; end;" db-types="MySQL"/>
<sql-case id="create_procedure_with_analyze_table_update" value="CREATE PROCEDURE p() ANALYZE TABLE v UPDATE HISTOGRAM ON w;" db-types="MySQL"/>
<sql-case id="create_procedure_with_analyze_table" value="CREATE PROCEDURE p() BEGIN ANALYZE TABLE v; END;" db-types="MySQL"/>
</sql-cases>