Skip to content

Commit dedc02b

Browse files
authored
Support for the ANALYZE TABLE in Stored Procedures (#37390)
* Support for the ANALYZE TABLE in Stored Procedures * Support for the ALTER RESOURCE statement
1 parent 8b9a1ab commit dedc02b

4 files changed

Lines changed: 25 additions & 1 deletion

File tree

parser/sql/engine/dialect/mysql/src/main/antlr4/imports/mysql/DDLStatement.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ validStatement
683683
| createView | prepare | executeStmt | commit | deallocate
684684
| setVariable | beginStatement | declareStatement | flowControlStatement | cursorStatement | conditionHandlingStatement
685685
| setStatement | showStatement | showCreateTable | startTransaction | rollback | commit | show
686-
| alterEvent | dropEvent | doStatement | explain) SEMI_?
686+
| alterEvent | dropEvent | doStatement | explain | analyzeTable) SEMI_?
687687
;
688688

689689
showStatement

parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WhileStatementContext;
112112
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.DoStatementContext;
113113
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ExplainContext;
114+
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AnalyzeTableContext;
114115
import org.apache.shardingsphere.sql.parser.engine.mysql.visitor.statement.MySQLStatementVisitor;
115116
import org.apache.shardingsphere.sql.parser.statement.core.enums.AlgorithmOption;
116117
import org.apache.shardingsphere.sql.parser.statement.core.enums.LockTableOption;
@@ -154,6 +155,7 @@
154155
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
155156
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
156157
import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
158+
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.AnalyzeTableStatement;
157159
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.ExplainStatement;
158160
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DeallocateStatement;
159161
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.ExecuteStatement;
@@ -861,11 +863,19 @@ private ValidStatementSegment createValidStatementSegment(final ValidStatementCo
861863
sqlStatement = (DoStatement) visit(ctx.doStatement());
862864
} else if (null != ctx.explain()) {
863865
sqlStatement = (SQLStatement) visit(ctx.explain());
866+
} else if (null != ctx.analyzeTable()) {
867+
sqlStatement = (AnalyzeTableStatement) visit(ctx.analyzeTable());
864868
}
865869
result.setSqlStatement(sqlStatement);
866870
return result;
867871
}
868872

873+
@SuppressWarnings("unchecked")
874+
@Override
875+
public ASTNode visitAnalyzeTable(final AnalyzeTableContext ctx) {
876+
return new AnalyzeTableStatement(getDatabaseType(), ((CollectionValue<SimpleTableSegment>) visit(ctx.tableList())).getValue());
877+
}
878+
869879
@Override
870880
public ASTNode visitDoStatement(final DoStatementContext ctx) {
871881
List<ExpressionSegment> expressions = new LinkedList<>();

test/it/parser/src/main/resources/case/ddl/create-procedure.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,16 @@
169169
<sql-statement start-index="28" stop-index="38" statement-class-simple-name="MySQLDescribeStatement" />
170170
</sql-statements>
171171
</create-procedure>
172+
<create-procedure sql-case-id="create_procedure_with_analyze_table_update">
173+
<procedure-name name="p" />
174+
<sql-statements>
175+
<sql-statement start-index="24" stop-index="59" statement-class-simple-name="AnalyzeTableStatement" />
176+
</sql-statements>
177+
</create-procedure>
178+
<create-procedure sql-case-id="create_procedure_with_analyze_table">
179+
<procedure-name name="p" />
180+
<sql-statements>
181+
<sql-statement start-index="27" stop-index="41" statement-class-simple-name="AnalyzeTableStatement" />
182+
</sql-statements>
183+
</create-procedure>
172184
</sql-parser-test-cases>

test/it/parser/src/main/resources/sql/supported/ddl/create-procedure.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,6 @@
6565
<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"/>
6666
<sql-case id="create_procedure_with_describe_table" value="create procedure p1() begin describe t1; end;" db-types="MySQL"/>
6767
<sql-case id="create_procedure_with_explain_table" value="create procedure p1() begin explain t1; end;" db-types="MySQL"/>
68+
<sql-case id="create_procedure_with_analyze_table_update" value="CREATE PROCEDURE p() ANALYZE TABLE v UPDATE HISTOGRAM ON w;" db-types="MySQL"/>
69+
<sql-case id="create_procedure_with_analyze_table" value="CREATE PROCEDURE p() BEGIN ANALYZE TABLE v; END;" db-types="MySQL"/>
6870
</sql-cases>

0 commit comments

Comments
 (0)