This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 7a4f9b9 Refactor MySQL show triggers SQL parser. (#13810)
7a4f9b9 is described below
commit 7a4f9b9bbd782278a87f202daf2853ae2e0b1882
Author: Zonglei Dong <[email protected]>
AuthorDate: Fri Nov 26 12:51:29 2021 +0800
Refactor MySQL show triggers SQL parser. (#13810)
* add ShowFilterSegment, refactor MySQL show open tables SQL parser.
* add ShowFilterSegment test case, refactor MySQL show open tables SQL
parser.
* add ShowFilterSegment, refactor MySQL show triggers SQL parser.
* add ShowFilterSegment test case, refactor MySQL show triggers SQL parser.
* Rename the test case for MySQL show triggers SQL parser.
---
.../impl/MySQLDALStatementSQLVisitor.java | 7 +-
.../mysql/dal/MySQLShowTriggersStatement.java | 24 +++----
.../dal/impl/ShowTriggersStatementAssert.java | 28 ++------
.../dal/ShowTriggersStatementTestCase.java | 10 +--
.../src/main/resources/case/dal/show.xml | 75 ++++++++++++++++++++--
.../src/main/resources/sql/supported/dal/show.xml | 8 ++-
6 files changed, 105 insertions(+), 47 deletions(-)
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
index c540db9..b931cb3 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
@@ -27,8 +27,8 @@ import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.BinlogC
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CacheIndexContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CacheTableIndexListContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ChannelOptionContext;
-import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ChecksumTableContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CheckTableContext;
+import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ChecksumTableContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CloneActionContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CloneContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CloneInstanceContext;
@@ -576,10 +576,9 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
result.setFromSchema((FromSchemaSegment) visit(ctx.fromSchema()));
}
if (null != ctx.showFilter()) {
- if (null != ctx.showFilter().showLike()) {
- result.setLike((ShowLikeSegment)
visit(ctx.showFilter().showLike()));
- }
+ result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
+ result.setParameterCount(getCurrentParameterIndex());
return result;
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTriggersStatement.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTriggersStatement.java
index 88e4194..5ce5d9a 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTriggersStatement.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTriggersStatement.java
@@ -20,7 +20,7 @@ package
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal;
import lombok.Setter;
import lombok.ToString;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.FromSchemaSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
@@ -33,26 +33,26 @@ import java.util.Optional;
@Setter
@ToString
public final class MySQLShowTriggersStatement extends AbstractSQLStatement
implements DALStatement, MySQLStatement {
-
+
private FromSchemaSegment fromSchema;
-
- private ShowLikeSegment like;
-
+
+ private ShowFilterSegment filter;
+
/**
- * Get from schema segment.
+ * Get from schema.
*
- * @return from schema segment
+ * @return from schema
*/
public Optional<FromSchemaSegment> getFromSchema() {
return Optional.ofNullable(fromSchema);
}
-
+
/**
- * Get like segment.
+ * Get filter segment.
*
- * @return like segment
+ * @return filter segment
*/
- public Optional<ShowLikeSegment> getLike() {
- return Optional.ofNullable(like);
+ public Optional<ShowFilterSegment> getFilter() {
+ return Optional.ofNullable(filter);
}
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowTriggersStatementAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowTriggersStatementAssert.java
index fe59907..4f4ec0a 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowTriggersStatementAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowTriggersStatementAssert.java
@@ -22,11 +22,10 @@ import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTriggersStatement;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.schema.SchemaAssert;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.show.ShowFilterAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dal.ShowTriggersStatementTestCase;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
/**
* Show triggers statement assert.
*/
@@ -41,25 +40,12 @@ public final class ShowTriggersStatementAssert {
* @param expected expected show tables statement test case
*/
public static void assertIs(final SQLCaseAssertContext assertContext,
final MySQLShowTriggersStatement actual, final ShowTriggersStatementTestCase
expected) {
- assertSchema(assertContext, actual, expected);
- assertLike(assertContext, actual, expected);
- }
-
- private static void assertSchema(final SQLCaseAssertContext assertContext,
final MySQLShowTriggersStatement actual, final ShowTriggersStatementTestCase
expected) {
- if (null != expected.getSchema()) {
- assertTrue(assertContext.getText("Actual schema should exist."),
actual.getFromSchema().isPresent());
- SQLSegmentAssert.assertIs(assertContext,
actual.getFromSchema().get(), expected.getSchema());
- } else {
- assertFalse(assertContext.getText("Actual schema should not
exist."), actual.getFromSchema().isPresent());
+ if (actual.getFromSchema().isPresent()) {
+ SchemaAssert.assertIs(assertContext,
actual.getFromSchema().get().getSchema(), expected.getFromSchema().getSchema());
+ SQLSegmentAssert.assertIs(assertContext,
actual.getFromSchema().get(), expected.getFromSchema());
}
- }
-
- private static void assertLike(final SQLCaseAssertContext assertContext,
final MySQLShowTriggersStatement actual, final ShowTriggersStatementTestCase
expected) {
- if (null != expected.getLike()) {
- assertTrue(assertContext.getText("Actual like should exist."),
actual.getLike().isPresent());
- SQLSegmentAssert.assertIs(assertContext, actual.getLike().get(),
expected.getLike());
- } else {
- assertFalse(assertContext.getText("Actual like should not
exist."), actual.getLike().isPresent());
+ if (actual.getFilter().isPresent()) {
+ ShowFilterAssert.assertIs(assertContext, actual.getFilter().get(),
expected.getFilter());
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowTriggersStatementTestCase.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowTriggersStatementTestCase.java
index 4fa2acf..f4911a0 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowTriggersStatementTestCase.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowTriggersStatementTestCase.java
@@ -19,8 +19,8 @@ package
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
import lombok.Getter;
import lombok.Setter;
-import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.like.ExpectedLikeClause;
-import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.schema.ExpectedSchema;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.from.ExpectedFromSchema;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.show.ExpectedShowFilter;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
import javax.xml.bind.annotation.XmlElement;
@@ -32,9 +32,9 @@ import javax.xml.bind.annotation.XmlElement;
@Setter
public final class ShowTriggersStatementTestCase extends SQLParserTestCase {
- @XmlElement
- private ExpectedSchema schema;
+ @XmlElement(name = "from")
+ private ExpectedFromSchema fromSchema;
@XmlElement
- private ExpectedLikeClause like;
+ private ExpectedShowFilter filter;
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
index 8ce7450..f66f995 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
@@ -332,10 +332,77 @@
</where>
</filter>
</show-open-tables>
-
- <show-triggers sql-case-id="show_triggers_with_filter">
- <schema name="sharding_db" start-delimiter="`" end-delimiter="`"
start-index="14" stop-index="31" />
- <like pattern="acc%" start-index="33" stop-index="43"/>
+
+ <show-triggers sql-case-id="show_triggers" />
+
+ <show-triggers sql-case-id="show_triggers_from_schema">
+ <from start-index="14" stop-index="31">
+ <schema name="sharding_db" start-index="19" stop-index="31"
start-delimiter="`" end-delimiter="`" />
+ </from>
+ </show-triggers>
+
+ <show-triggers sql-case-id="show_triggers_in_schema">
+ <from start-index="14" stop-index="29">
+ <schema name="sharding_db" start-index="17" stop-index="29"
start-delimiter="`" end-delimiter="`" />
+ </from>
+ </show-triggers>
+
+ <show-triggers sql-case-id="show_triggers_no_schema">
+ <filter start-index="14" stop-index="24">
+ <like pattern="sys%" start-index="14" stop-index="24"
start-delimiter="'" end-delimiter="'" />
+ </filter>
+ </show-triggers>
+
+ <show-triggers sql-case-id="show_triggers_with_like_pattern">
+ <from start-index="14" stop-index="31">
+ <schema name="sharding_db" start-index="19" stop-index="31"
start-delimiter="`" end-delimiter="`" />
+ </from>
+ <filter start-index="33" stop-index="43">
+ <like pattern="sys%" start-index="33" stop-index="43"
start-delimiter="'" end-delimiter="'" />
+ </filter>
+ </show-triggers>
+
+ <show-triggers sql-case-id="show_triggers_with_where_expr"
parameters="'t_order'">
+ <from start-index="14" stop-index="31">
+ <schema name="sharding_db" start-index="19" stop-index="31"
start-delimiter="`" end-delimiter="`" />
+ </from>
+ <filter start-index="33" stop-index="49" literal-start-index="33"
literal-stop-index="57">
+ <where start-index="33" stop-index="49" literal-start-index="33"
literal-stop-index="57">
+ <expr>
+ <binary-operation-expression start-index="39"
stop-index="49" literal-start-index="39" literal-stop-index="57">
+ <left>
+ <column name="table" start-delimiter="`"
end-delimiter="`" start-index="39" stop-index="45" />
+ </left>
+ <operator>=</operator>
+ <right>
+ <literal-expression value="t_order"
start-index="49" stop-index="57" />
+ <parameter-marker-expression value="0"
start-index="49" stop-index="49" />
+ </right>
+ </binary-operation-expression>
+ </expr>
+ </where>
+ </filter>
+ </show-triggers>
+
+ <show-triggers sql-case-id="show_triggers_with_where_expr_no_parameter">
+ <from start-index="14" stop-index="31">
+ <schema name="sharding_db" start-index="19" stop-index="31"
start-delimiter="`" end-delimiter="`" />
+ </from>
+ <filter start-index="33" stop-index="57">
+ <where start-index="33" stop-index="57">
+ <expr>
+ <binary-operation-expression start-index="39"
stop-index="57">
+ <left>
+ <column name="table" start-delimiter="`"
end-delimiter="`" start-index="39" stop-index="45" />
+ </left>
+ <operator>=</operator>
+ <right>
+ <literal-expression value="t_order"
start-index="49" stop-index="57" />
+ </right>
+ </binary-operation-expression>
+ </expr>
+ </where>
+ </filter>
</show-triggers>
<show-table-status sql-case-id="show_table_status" />
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
index f9e28a1..4406b89 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
@@ -64,7 +64,13 @@
<sql-case id="show_open_tables_with_like_pattern" value="SHOW OPEN TABLES
FROM `sharding_db` LIKE 't_order_%'" db-types="MySQL" />
<sql-case id="show_open_tables_with_where_expr" value="SHOW OPEN TABLES
FROM `sharding_db` WHERE `table` = ?" db-types="MySQL" />
<sql-case id="show_open_tables_with_where_expr_no_parameter" value="SHOW
OPEN TABLES FROM `sharding_db` WHERE `table` = 't_order'" db-types="MySQL" />
- <sql-case id="show_triggers_with_filter" value="SHOW TRIGGERS FROM
`sharding_db` LIKE 'acc%'" db-types="MySQL"/>
+ <sql-case id="show_triggers" value="SHOW TRIGGERS" db-types="MySQL"/>
+ <sql-case id="show_triggers_from_schema" value="SHOW TRIGGERS FROM
`sharding_db`" db-types="MySQL" />
+ <sql-case id="show_triggers_in_schema" value="SHOW TRIGGERS IN
`sharding_db`" db-types="MySQL" />
+ <sql-case id="show_triggers_no_schema" value="SHOW TRIGGERS LIKE 'sys%'"
db-types="MySQL" />
+ <sql-case id="show_triggers_with_like_pattern" value="SHOW TRIGGERS FROM
`sharding_db` LIKE 'sys%'" db-types="MySQL" />
+ <sql-case id="show_triggers_with_where_expr" value="SHOW TRIGGERS FROM
`sharding_db` WHERE `table` = ?" db-types="MySQL" />
+ <sql-case id="show_triggers_with_where_expr_no_parameter" value="SHOW
TRIGGERS FROM `sharding_db` WHERE `table` = 't_order'" db-types="MySQL" />
<sql-case id="show_table_status" value="SHOW TABLE STATUS"
db-types="MySQL" />
<sql-case id="show_table_status_from_schema" value="SHOW TABLE STATUS FROM
`sharding_db`" db-types="MySQL" />
<sql-case id="show_table_status_in_schema" value="SHOW TABLE STATUS IN
`sharding_db`" db-types="MySQL" />