From 4d01a607877c5c2630e1d8499a22f3cbba208cea Mon Sep 17 00:00:00 2001 From: haocao Date: Wed, 9 Aug 2017 20:30:13 +0800 Subject: [PATCH] Refactor parser test case packages 12th. --- .../parser/base/AbstractBaseParseSQLTest.java | 41 ++++++++++-- .../parser/base/AbstractBaseParseTest.java | 10 +-- .../parsing/parser/dialect/SQLParserTest.java | 5 +- .../parser/jaxb/helper/ParserJAXBHelper.java | 12 ---- .../resources/parser/select_pagination.xml | 63 +++++++++++++++++++ .../resources/parser/select_sub_query.xml | 43 +++++++++++++ 6 files changed, 149 insertions(+), 25 deletions(-) create mode 100644 sharding-jdbc-core/src/test/resources/parser/select_pagination.xml diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseSQLTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseSQLTest.java index 9221b4ca52..e09cc20ea7 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseSQLTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseSQLTest.java @@ -6,6 +6,8 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderItem; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Column; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Conditions; +import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.Limit; +import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.LimitValue; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.AggregationSelectItem; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Tables; import com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLExpression; @@ -29,8 +31,9 @@ public abstract class AbstractBaseParseSQLTest extends AbstractBaseParseTest { protected AbstractBaseParseSQLTest( final String testCaseName, final String sql, final String[] parameters, final Set types, - final Tables expectedTables, final com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Conditions expectedConditions, final SQLStatement expectedSQLStatement) { - super(testCaseName, sql, parameters, types, expectedTables, expectedConditions, expectedSQLStatement); + final Tables expectedTables, final com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Conditions expectedConditions, + final SQLStatement expectedSQLStatement, final com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Limit expectedLimit) { + super(testCaseName, sql, parameters, types, expectedTables, expectedConditions, expectedSQLStatement, expectedLimit); } protected final void assertStatement(final SQLStatement actual) { @@ -48,7 +51,7 @@ public abstract class AbstractBaseParseSQLTest extends AbstractBaseParseTest { assertOrderBy((SelectStatement) actual); assertGroupBy((SelectStatement) actual); assertAggregationSelectItem((SelectStatement) actual); - assertLimit((SelectStatement) actual); + assertLimit((SelectStatement) actual, isPreparedStatement); } } @@ -100,6 +103,32 @@ public abstract class AbstractBaseParseSQLTest extends AbstractBaseParseTest { return result; } + private Limit buildExpectedLimit(final boolean isPreparedStatement) { + com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Limit limit = getExpectedLimit(); + if (null == limit) { + return null; + } + Limit result = new Limit(true); + if (isPreparedStatement) { + if (null != limit.getOffsetParameterIndex()) { + result.setOffset(new LimitValue(-1, limit.getOffsetParameterIndex())); + } + if (null != limit.getRowCountParameterIndex()) { + result.setRowCount(new LimitValue(-1, limit.getRowCountParameterIndex())); + } + } else { + if (null != limit.getOffset()) { + result.setOffset(new LimitValue(limit.getOffset(), -1)); + + } + if (null != limit.getRowCount()) { + result.setRowCount(new LimitValue(limit.getRowCount(), -1)); + } + } + return result; + } + + private void assertOrderBy(final SelectStatement actual) { Iterator orderByColumns = getExpectedOrderByColumns().iterator(); for (OrderItem each : actual.getOrderByItems()) { @@ -128,13 +157,13 @@ public abstract class AbstractBaseParseSQLTest extends AbstractBaseParseTest { assertFalse(aggregationSelectItems.hasNext()); } - private void assertLimit(final SelectStatement actual) { + private void assertLimit(final SelectStatement actual, final boolean isPreparedStatement) { if (null != actual.getLimit()) { if (null != actual.getLimit().getOffset()) { - assertTrue(new ReflectionEquals(getExpectedLimit().getOffset()).matches(actual.getLimit().getOffset())); + assertTrue(new ReflectionEquals(buildExpectedLimit(isPreparedStatement).getOffset()).matches(actual.getLimit().getOffset())); } if (null != actual.getLimit().getRowCount()) { - assertTrue(new ReflectionEquals(getExpectedLimit().getRowCount()).matches(actual.getLimit().getRowCount())); + assertTrue(new ReflectionEquals(buildExpectedLimit(isPreparedStatement).getRowCount()).matches(actual.getLimit().getRowCount())); } } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseTest.java index 4c00fac9c3..c6803cf42d 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/base/AbstractBaseParseTest.java @@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.base; import com.dangdang.ddframe.rdb.common.jaxb.helper.SQLStatementHelper; import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderItem; -import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.Limit; +import com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Limit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.AggregationSelectItem; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Tables; import com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Assert; @@ -72,22 +72,21 @@ public abstract class AbstractBaseParseTest { protected AbstractBaseParseTest( final String testCaseName, final String sql, final String[] parameters, final Set types, - final Tables expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement) { + final Tables expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement, final Limit expectedLimit) { this.sql = sql; this.parameters = parameters; this.types = types; this.expectedTables = expectedTables; this.expectedConditions = expectedConditions; + this.expectedLimit = expectedLimit; if (expectedSQLStatement instanceof SelectStatement) { expectedOrderByColumns = ((SelectStatement) expectedSQLStatement).getOrderByItems(); expectedGroupByColumns = ((SelectStatement) expectedSQLStatement).getGroupByItems(); expectedAggregationSelectItems = ((SelectStatement) expectedSQLStatement).getAggregationSelectItems(); - expectedLimit = ((SelectStatement) expectedSQLStatement).getLimit(); } else { expectedOrderByColumns = null; expectedGroupByColumns = null; expectedAggregationSelectItems = null; - expectedLimit = null; } } @@ -117,7 +116,7 @@ public abstract class AbstractBaseParseTest { } private static Object[] getDataParameter(final Assert assertObj) { - final Object[] result = new Object[7]; + final Object[] result = new Object[8]; result[0] = assertObj.getId(); result[1] = SQLStatementHelper.getSql(assertObj.getId()); result[2] = ParserJAXBHelper.getParameters(assertObj); @@ -125,6 +124,7 @@ public abstract class AbstractBaseParseTest { result[4] = ParserJAXBHelper.getTables(assertObj); result[5] = assertObj.getConditions(); result[6] = ParserJAXBHelper.getSelectStatement(assertObj); + result[7] = assertObj.getLimit(); return result; } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/SQLParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/SQLParserTest.java index 7d61102672..2dcc92e27e 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/SQLParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/SQLParserTest.java @@ -25,6 +25,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.base.AbstractBaseParseSQ import com.dangdang.ddframe.rdb.sharding.parsing.parser.base.AbstractBaseParseTest; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Tables; import com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Conditions; +import com.dangdang.ddframe.rdb.sharding.parsing.parser.jaxb.Limit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement; import org.junit.Test; import org.junit.runner.RunWith; @@ -39,8 +40,8 @@ public final class SQLParserTest extends AbstractBaseParseSQLTest { public SQLParserTest( final String testCaseName, final String sql, final String[] parameters, final Set types, - final Tables expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement) { - super(testCaseName, sql, parameters, types, expectedTables, expectedConditions, expectedSQLStatement); + final Tables expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement, final Limit expectedLimit) { + super(testCaseName, sql, parameters, types, expectedTables, expectedConditions, expectedSQLStatement, expectedLimit); } @Parameters(name = "{0}") diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/jaxb/helper/ParserJAXBHelper.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/jaxb/helper/ParserJAXBHelper.java index 35ea33c5bb..4712bfd474 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/jaxb/helper/ParserJAXBHelper.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/jaxb/helper/ParserJAXBHelper.java @@ -4,8 +4,6 @@ import com.dangdang.ddframe.rdb.sharding.constant.AggregationType; import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType; import com.dangdang.ddframe.rdb.sharding.constant.OrderType; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderItem; -import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.Limit; -import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.LimitValue; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.AggregationSelectItem; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Tables; @@ -104,16 +102,6 @@ public class ParserJAXBHelper { }); result.getItems().addAll(selectItems); } - if (null != assertObj.getLimit()) { - Limit limit = new Limit(true); - if (null != assertObj.getLimit().getOffset() && null != assertObj.getLimit().getOffsetParameterIndex()) { - limit.setRowCount(new LimitValue(assertObj.getLimit().getRowCount(), assertObj.getLimit().getRowCountParameterIndex())); - limit.setOffset(new LimitValue(assertObj.getLimit().getOffset(), assertObj.getLimit().getOffsetParameterIndex())); - } else { - limit.setRowCount(new LimitValue(assertObj.getLimit().getRowCount(), assertObj.getLimit().getRowCountParameterIndex())); - } - result.setLimit(limit); - } return result; } } diff --git a/sharding-jdbc-core/src/test/resources/parser/select_pagination.xml b/sharding-jdbc-core/src/test/resources/parser/select_pagination.xml new file mode 100644 index 0000000000..ac50b58a09 --- /dev/null +++ b/sharding-jdbc-core/src/test/resources/parser/select_pagination.xml @@ -0,0 +1,63 @@ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc-core/src/test/resources/parser/select_sub_query.xml b/sharding-jdbc-core/src/test/resources/parser/select_sub_query.xml index 7d38bbabbf..adc6505908 100644 --- a/sharding-jdbc-core/src/test/resources/parser/select_sub_query.xml +++ b/sharding-jdbc-core/src/test/resources/parser/select_sub_query.xml @@ -15,4 +15,47 @@ + + +
+
+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + + + + + + -- GitLab