提交 6303c657 编写于 作者: T terrymanu

For #660: add sharding-sql-test module, move sql xml test case and loading app here

上级 b7468aa4
......@@ -14,6 +14,7 @@
<module>sharding-jdbc-orchestration</module>
<module>sharding-jdbc-orchestration-spring</module>
<module>sharding-proxy</module>
<module>sharding-sql-test</module>
</modules>
<properties>
......
......@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>sharding-jdbc</artifactId>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc</artifactId>
<version>2.1.0-SNAPSHOT</version>
</parent>
<artifactId>sharding-core</artifactId>
......@@ -32,7 +32,13 @@
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-sql-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
......
......@@ -21,14 +21,14 @@ import io.shardingjdbc.core.api.algorithm.fixture.TestComplexKeysShardingAlgorit
import io.shardingjdbc.core.api.config.TableRuleConfiguration;
import io.shardingjdbc.core.api.config.strategy.ComplexShardingStrategyConfiguration;
import io.shardingjdbc.core.api.fixture.ShardingRuleMockBuilder;
import io.shardingjdbc.core.parsing.jaxb.helper.SQLStatementHelper;
import io.shardingjdbc.core.util.SQLPlaceholderUtil;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.parsing.parser.base.AbstractBaseParseSQLTest;
import io.shardingjdbc.core.parsing.parser.base.AbstractBaseParseTest;
import io.shardingjdbc.core.parsing.parser.jaxb.Assert;
import io.shardingjdbc.core.parsing.parser.jaxb.helper.ParserJAXBHelper;
import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.util.SQLPlaceholderUtil;
import io.shardingjdbc.test.sql.jaxb.helper.SQLStatementHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
......@@ -59,8 +59,9 @@ public final class SQLParsingEngineTest extends AbstractBaseParseSQLTest {
@Test
public void assertPreparedStatement() {
for (DatabaseType each : SQLStatementHelper.getTypes(getTestCaseName())) {
assertPreparedStatement(new SQLParsingEngine(each, SQLPlaceholderUtil.replacePreparedStatement(SQLStatementHelper.getSql(getTestCaseName())), buildShardingRule()).parse());
for (io.shardingjdbc.test.sql.jaxb.DatabaseType each : SQLStatementHelper.getTypes(getTestCaseName())) {
assertPreparedStatement(
new SQLParsingEngine(DatabaseType.valueOf(each.name()), SQLPlaceholderUtil.replacePreparedStatement(SQLStatementHelper.getSql(getTestCaseName())), buildShardingRule()).parse());
}
}
......
......@@ -20,10 +20,10 @@ package io.shardingjdbc.core.parsing;
import com.google.common.base.Strings;
import com.google.common.collect.Sets;
import io.shardingjdbc.core.api.fixture.ShardingRuleMockBuilder;
import io.shardingjdbc.core.parsing.jaxb.SQLStatement;
import io.shardingjdbc.core.parsing.jaxb.helper.SQLStatementHelper;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.parsing.parser.exception.SQLParsingUnsupportedException;
import io.shardingjdbc.test.sql.jaxb.SQLStatement;
import io.shardingjdbc.test.sql.jaxb.helper.SQLStatementHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
......
......@@ -17,10 +17,10 @@
package io.shardingjdbc.core.parsing.parser.base;
import io.shardingjdbc.core.parsing.jaxb.helper.SQLStatementHelper;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.parsing.parser.jaxb.Assert;
import io.shardingjdbc.core.parsing.parser.jaxb.Asserts;
import io.shardingjdbc.test.sql.jaxb.helper.SQLStatementHelper;
import lombok.AccessLevel;
import lombok.Getter;
......@@ -71,8 +71,8 @@ public abstract class AbstractBaseParseTest {
List<Object[]> result = new ArrayList<>();
for (int i = 0; i < asserts.getAsserts().size(); i++) {
Assert assertObj = asserts.getAsserts().get(i);
for (DatabaseType each : SQLStatementHelper.getTypes(assertObj.getId())) {
result.add(getDataParameter(assertObj, each));
for (io.shardingjdbc.test.sql.jaxb.DatabaseType each : SQLStatementHelper.getTypes(assertObj.getId())) {
result.add(getDataParameter(assertObj, DatabaseType.valueOf(each.name())));
}
}
return result;
......
......@@ -37,6 +37,12 @@
<artifactId>snakeyaml</artifactId>
</dependency>
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-sql-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
......
......@@ -17,11 +17,11 @@
package io.shardingjdbc.core.integrate.jaxb.helper;
import io.shardingjdbc.core.parsing.jaxb.helper.SQLStatementHelper;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.constant.SQLType;
import io.shardingjdbc.core.integrate.jaxb.SQLAssert;
import io.shardingjdbc.core.integrate.jaxb.SQLAsserts;
import io.shardingjdbc.test.sql.jaxb.helper.SQLStatementHelper;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
......@@ -78,8 +78,8 @@ public final class SQLAssertJAXBHelper {
List<Object[]> result = new ArrayList<>();
for (int i = 0; i < asserts.getSqlAsserts().size(); i++) {
SQLAssert assertObj = asserts.getSqlAsserts().get(i);
for (DatabaseType each : SQLStatementHelper.getTypes(assertObj.getId())) {
result.add(getDataParameter(assertObj, each));
for (io.shardingjdbc.test.sql.jaxb.DatabaseType each : SQLStatementHelper.getTypes(assertObj.getId())) {
result.add(getDataParameter(assertObj, DatabaseType.valueOf(each.name())));
}
}
return result;
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package io.shardingjdbc.core.parsing.jaxb;
import lombok.Getter;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
@XmlRootElement(name = "sqls")
@Getter
public final class SQLStatements {
@XmlElement(name = "sql")
private List<SQLStatement> sqls = new ArrayList<>();
}
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package io.shardingjdbc.core.parsing.jaxb.helper;
import io.shardingjdbc.core.parsing.jaxb.SQLStatement;
import io.shardingjdbc.core.parsing.jaxb.SQLStatements;
import io.shardingjdbc.core.integrate.jaxb.helper.SQLAssertJAXBHelper;
import io.shardingjdbc.core.constant.DatabaseType;
import com.google.common.collect.Sets;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import java.io.File;
import java.net.URL;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class SQLStatementHelper {
private static final Map<String, SQLStatement> STATEMENT_MAP;
private static final Map<String, SQLStatement> UNSUPPORTED_STATEMENT_MAP;
static {
STATEMENT_MAP = loadSqlStatements("sql");
UNSUPPORTED_STATEMENT_MAP = loadSqlStatements("sql/unsupported");
}
private static Map<String, SQLStatement> loadSqlStatements(final String directory) {
Map<String, SQLStatement> result = new HashMap<>();
URL url = SQLAssertJAXBHelper.class.getClassLoader().getResource(directory);
if (null == url) {
return result;
}
File filePath = new File(url.getPath());
if (!filePath.exists()) {
return result;
}
File[] files = filePath.listFiles();
if (null == files) {
return result;
}
for (File each : files) {
if (each.isDirectory()) {
for (File file : each.listFiles()) {
fillStatementMap(result, file);
}
} else {
fillStatementMap(result, each);
}
}
return result;
}
private static void fillStatementMap(final Map<String, SQLStatement> result, final File each) {
try {
SQLStatements statements = (SQLStatements) JAXBContext.newInstance(SQLStatements.class).createUnmarshaller().unmarshal(each);
for (SQLStatement statement : statements.getSqls()) {
result.put(statement.getId(), statement);
}
} catch (final JAXBException ex) {
throw new RuntimeException(ex);
}
}
/**
* Get unsupported SQL statements.
*
* @return unsupported SQL statements
*/
public static Collection<SQLStatement> getUnsupportedSqlStatements() {
return UNSUPPORTED_STATEMENT_MAP.values();
}
/**
* Get SQL.
* @param sqlId SQL ID
* @return SQL
*/
public static String getSql(final String sqlId) {
checkSqlId(sqlId);
SQLStatement statement = STATEMENT_MAP.get(sqlId);
return statement.getSql();
}
/**
* Get database types.
*
* @param sqlId SQL ID
* @return database types
*/
public static Set<DatabaseType> getTypes(final String sqlId) {
checkSqlId(sqlId);
SQLStatement statement = STATEMENT_MAP.get(sqlId);
if (null == statement.getTypes()) {
return Sets.newHashSet(DatabaseType.values());
}
Set<DatabaseType> result = new HashSet<>();
for (String each : statement.getTypes().split(",")) {
result.add(DatabaseType.valueOf(each));
}
return result;
}
private static void checkSqlId(final String sqlId) {
if (null == sqlId || !STATEMENT_MAP.containsKey(sqlId)) {
throw new RuntimeException("Can't find sql of id:" + sqlId);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>sharding-jdbc</artifactId>
<groupId>io.shardingjdbc</groupId>
<version>2.1.0-SNAPSHOT</version>
</parent>
<artifactId>sharding-sql-test</artifactId>
<name>${project.artifactId}</name>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
</project>
......@@ -15,26 +15,46 @@
* </p>
*/
package io.shardingjdbc.core.parsing.jaxb;
package io.shardingjdbc.test.sql.jaxb;
import lombok.Getter;
import lombok.Setter;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import java.util.Arrays;
@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
public final class SQLStatement {
/**
* Supported database.
*
* @author zhangliang
*/
public enum DatabaseType {
H2("H2"), MySQL("MySQL"), Oracle("Oracle"), SQLServer("Microsoft SQL Server"), PostgreSQL("PostgreSQL");
@XmlAttribute
private String id;
private final String productName;
@XmlAttribute(name = "value")
private String sql;
DatabaseType(final String productName) {
this.productName = productName;
}
@XmlAttribute(name = "type")
private String types;
/**
* Get database type enum via database name string.
*
* @param databaseProductName database name string
* @return database enum
*/
public static DatabaseType valueFrom(final String databaseProductName) {
Optional<DatabaseType> databaseTypeOptional = Iterators.tryFind(Arrays.asList(DatabaseType.values()).iterator(), new Predicate<DatabaseType>() {
@Override
public boolean apply(final DatabaseType input) {
return input.productName.equals(databaseProductName);
}
});
if (databaseTypeOptional.isPresent()) {
return databaseTypeOptional.get();
}
throw new UnsupportedOperationException(String.format("Can not support database type [%s].", databaseProductName));
}
}
......@@ -15,7 +15,7 @@
* </p>
*/
package io.shardingjdbc.core.parsing.jaxb;
package io.shardingjdbc.test.sql.jaxb;
import lombok.Getter;
import lombok.Setter;
......
......@@ -15,7 +15,7 @@
* </p>
*/
package io.shardingjdbc.core.parsing.jaxb;
package io.shardingjdbc.test.sql.jaxb;
import lombok.Getter;
......
......@@ -15,12 +15,12 @@
* </p>
*/
package io.shardingjdbc.core.parsing.jaxb.helper;
package io.shardingjdbc.test.sql.jaxb.helper;
import com.google.common.collect.Sets;
import io.shardingjdbc.core.parsing.jaxb.SQLStatement;
import io.shardingjdbc.core.parsing.jaxb.SQLStatements;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.test.sql.jaxb.DatabaseType;
import io.shardingjdbc.test.sql.jaxb.SQLStatement;
import io.shardingjdbc.test.sql.jaxb.SQLStatements;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
......@@ -47,7 +47,7 @@ public final class SQLStatementHelper {
}
private static Map<String, SQLStatement> loadSqlStatements(final String directory) {
Map<String, SQLStatement> result = new HashMap<>();
Map<String, SQLStatement> result = new HashMap<>(65536, 1);
URL url = SQLStatementHelper.class.getClassLoader().getResource(directory);
if (null == url) {
return result;
......
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertAlterTable" value="ALTER TABLE t_log ADD name varchar(10)" />
<sql id="assertAlterTableIfExistAndOnly" value="ALTER TABLE IF EXISTS ONLY t_log ADD name varchar" type="PostgreSQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertCreateTable" value="CREATE TABLE t_log(id int, status varchar(10))" />
<sql id="assertCreateTableIfNotExist" value="CREATE TABLE IF NOT EXISTS t_log(id int, status varchar(10))" type="MySQL,PostgreSQL" />
<sql id="assertCreateTemporaryTable" value="CREATE TEMPORARY TABLE IF NOT EXISTS t_temp_log(id int, status varchar(10))" type="MySQL,PostgreSQL" />
<sql id="assertCreateGlobalTemporaryTable" value="CREATE GLOBAL TEMPORARY TABLE t_temp_log(id int, status varchar(10))" type="Oracle,PostgreSQL" />
<sql id="assertCreateLocalTempTable" value="CREATE LOCAL TEMP TABLE t_temp_log(id int, status varchar(10))" type="PostgreSQL" />
<sql id="assertCreateUnloggedTable" value="CREATE UNLOGGED TABLE t_log(id int, status varchar(10))" type="PostgreSQL" />
<sql id="assertCreateIndex" value="CREATE INDEX t_log_index ON t_log (id)" />
<sql id="assertCreateUniqueIndex" value="CREATE UNIQUE INDEX t_log_index ON t_log (id)" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertDropTable" value="DROP TABLE t_log" />
<sql id="assertDropTableIfExists" value="DROP TABLE IF EXISTS t_log" type="MySQL,PostgreSQL,SQLServer" />
<sql id="assertDropTemporaryTable" value="DROP TEMPORARY TABLE IF EXISTS t_temp_log" type="MySQL" />
<sql id="assertDropTableRestrict" value="DROP TABLE t_log RESTRICT" type="MySQL,PostgreSQL" />
<sql id="assertDropTableCascade" value="DROP TABLE t_log CASCADE" type="MySQL,PostgreSQL" />
<sql id="assertDropTableCascadeConstraintsAndPurge" value="DROP TABLE t_log CASCADE CONSTRAINTS PURGE" type="Oracle" />
<sql id="assertDropIndex" value="DROP INDEX t_log_index ON t_log" type="MySQL,SQLServer" />
<sql id="assertDropIndexWithoutOn" value="DROP INDEX t_log_index" type="PostgreSQL,Oracle" />
<sql id="assertDropIndexIfExists" value="DROP INDEX IF EXISTS t_order_index" type="PostgreSQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertTruncateTable" value="TRUNCATE TABLE t_log" />
<sql id="assertTruncateTableOnly" value="TRUNCATE TABLE ONLY t_log" type="PostgreSQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertDeleteWithShardingValue" value="DELETE FROM t_order WHERE order_id = %s AND user_id = %s AND status=%s" />
<sql id="assertDeleteWithoutShardingValue" value="DELETE FROM t_order WHERE status=%s" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertInsertWithAllPlaceholders" value="INSERT INTO t_order (order_id, user_id, status) VALUES (%s, %s, %s)" />
<sql id="assertInsertWithPartialPlaceholder" value="INSERT INTO t_order (order_id, user_id, status) VALUES (%s, %s, 'insert')" />
<sql id="assertInsertWithGenerateKeyColumn" value="INSERT INTO t_order_item(item_id, order_id, user_id, status) values(%s, %s, %s, 'insert')" />
<sql id="assertInsertWithoutGenerateKeyColumn" value="INSERT INTO t_order_item(order_id, user_id, status) values(%s, %s, 'insert')" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertUpdateWithAlias" value="UPDATE t_order AS o SET o.status = %s WHERE o.order_id = %s AND o.user_id = %s" type="MySQL,H2"/>
<sql id="assertUpdateWithoutAlias" value="UPDATE t_order SET status = %s WHERE order_id = %s AND user_id = %s" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectOne" value="SELECT 1 as a" type="MySQL,PostgreSQL,SQLServer" />
<sql id="assertSelectNotEqualsWithSingleTable" value="SELECT * FROM t_order_item WHERE item_id &lt;&gt; %s ORDER BY item_id" />
<sql id="assertSelectNotEqualsWithSingleTableForExclamationEqual" value="SELECT * FROM t_order_item WHERE item_id != %s ORDER BY item_id" />
<sql id="assertSelectNotEqualsWithSingleTableForNotIn" value="SELECT * FROM t_order_item WHERE item_id IS NOT NULL AND item_id NOT IN (%s) ORDER BY item_id" />
<sql id="assertSelectEqualsWithSingleTable" value="SELECT * FROM t_order WHERE user_id = %s AND order_id = %s" />
<sql id="assertSelectEqualsWithSameShardingColumns" value="SELECT * FROM t_order WHERE order_id = %s AND order_id = %s" />
<sql id="assertSelectBetweenWithSingleTable" value="SELECT * FROM t_order WHERE user_id BETWEEN %s AND %s AND order_id BETWEEN %s AND %s ORDER BY user_id, order_id" />
<sql id="assertSelectInWithSingleTable" value="SELECT * FROM t_order WHERE user_id IN (%s, %s, %s) AND order_id IN (%s, %s) ORDER BY user_id, order_id" />
<sql id="assertSelectInWithSameShardingColumns" value="SELECT * FROM t_order WHERE order_id IN (%s, %s) AND order_id IN (%s, %s) ORDER BY order_id" />
<sql id="assertSelectIterator" value="SELECT t.* FROM t_order_item t WHERE t.item_id IN (%s, %s)" />
<sql id="assertSelectNoShardingTable" value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id ORDER BY i.item_id" />
<sql id="assertSelectLikeWithCount" value="SELECT count(0) as orders_count FROM `t_order` o WHERE o.status LIKE CONCAT('%%', %s, '%%') AND o.`user_id` IN (%s, %s) AND o.`order_id` BETWEEN %s AND %s" type="MySQL,H2" />
<sql id="assertSelectWithBindingTable" value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s ORDER BY i.item_id" />
<sql id="assertSelectWithBindingTableAndConfigTable" value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id JOIN t_config c ON o.status = c.status WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s AND c.status = %s ORDER BY i.item_id" />
<sql id="assertSelectWithUpperCaseBindingTable" value="SELECT i.* FROM T_ORDER o JOIN T_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s ORDER BY i.item_id" />
<sql id="assertSelectWithUpperCaseBindingTableAndConfigTable" value="SELECT i.*,c.status c_status FROM T_ORDER o JOIN T_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id JOIN t_config c ON o.status = c.status WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s AND c.status = %s ORDER BY i.item_id" />
<sql id="assertSelectCountWithBindingTable" value="SELECT COUNT(*) AS items_count FROM t_order o, t_order_item i WHERE o.user_id = i.user_id AND o.order_id = i.order_id AND o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s" />
<sql id="assertSelectCountWithBindingTableWithJoin" value="SELECT COUNT(*) AS items_count FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s" />
<sql id="assertSelectAliasWithKeyword" value="SELECT length.item_id password FROM t_order_item length where length.item_id = %s " type="MySQL,H2,SQLServer,Oracle" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectSum" value="SELECT SUM(user_id) AS user_id_sum FROM t_order" />
<sql id="assertSelectCount" value="SELECT COUNT(*) AS orders_count FROM t_order" />
<sql id="assertSelectMax" value="SELECT MAX(user_id) AS max_user_id FROM t_order" />
<sql id="assertSelectMin" value="SELECT MIN(user_id) AS min_user_id FROM t_order" />
<sql id="assertSelectAvg" value="SELECT AVG(user_id) AS user_id_avg FROM t_order" />
<sql id="assertSelectCountForSpecialSymbol" value="SELECT COUNT(`order_id`) AS orders_count FROM t_order" type="MySQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectExpressionWithSingleTable" value="SELECT o.order_id + 1 * 2 FROM t_order AS o ORDER BY o.order_id" />
<sql id="assertSelectDateFuncWithSingleTable" value="SELECT DATE(i.c_date) AS c_date FROM `t_order_item` AS i ORDER BY DATE(i.c_date) DESC" type="MySQL" />
<sql id="assertSelectCountWithExpression" value="SELECT COUNT(o.order_id) + 1^2 FROM t_order o" />
<sql id="assertSelectRegexpWithSingleTable" value="SELECT * FROM t_order_item t WHERE t.status REGEXP %s AND t.item_id IN (%s, %s)" type="MySQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectDateFuncWithGroupBy" value="SELECT date_format(c_date, '%%y-%%m-%%d') as c_date, count(*) as c_number FROM `t_order_item` WHERE order_id in (%s, %s) GROUP BY date_format(c_date, '%%y-%%m-%%d')" type="MySQL"/>
<sql id="assertSelectSumWithGroupBy" value="SELECT SUM(order_id) AS orders_sum, user_id FROM t_order GROUP BY user_id ORDER BY user_id" />
<sql id="assertSelectCountWithGroupBy" value="SELECT COUNT(order_id) AS orders_count, user_id FROM t_order GROUP BY user_id ORDER BY user_id" />
<sql id="assertSelectMaxWithGroupBy" value="SELECT MAX(order_id) AS max_order_id, user_id FROM t_order GROUP BY user_id ORDER BY user_id" />
<sql id="assertSelectMinWithGroupBy" value="SELECT MIN(order_id) AS min_order_id, user_id FROM t_order GROUP BY user_id ORDER BY user_id" />
<sql id="assertSelectAvgWithGroupBy" value="SELECT AVG(order_id) AS orders_avg, user_id FROM t_order GROUP BY user_id ORDER BY user_id" />
<sql id="assertSelectOrderByDescWithGroupBy" value="SELECT SUM(order_id) AS orders_sum, user_id FROM t_order GROUP BY user_id ORDER BY orders_sum DESC" />
<sql id="assertSelectCountWithoutGroupedColumn" value="SELECT count(*) as items_count FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s GROUP BY o.user_id" />
<sql id="assertSelectCountWithGroupByBindingTable" value="SELECT count(*) as items_count, o.user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s GROUP BY o.user_id ORDER BY o.user_id" />
<sql id="assertSelectWithGroupByAndLimit" value="SELECT user_id FROM t_order GROUP BY user_id ORDER BY user_id LIMIT %s" type="H2,MySQL,PostgreSQL" />
<sql id="assertSelectWithGroupByAndOrderByAndLimit" value="SELECT user_id, SUM(order_id) FROM t_order GROUP BY user_id ORDER BY SUM(order_id) LIMIT %s" type="H2,MySQL,PostgreSQL" />
<sql id="assertSelectItemWithAliasAndMatchOrderByAndGroupByItems" value="SELECT o.user_id uid FROM t_order o GROUP BY o.user_id ORDER BY o.user_id" type="H2,MySQL,SQLServer,PostgreSQL" />
<sql id="assertSelectGroupByWithAliasIsKeyword" value="SELECT SUM(order_id) AS orders_sum, user_id as `key` FROM t_order GROUP BY `key`" type="MySQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectInWithNullParameter" value="SELECT * FROM t_order WHERE sku_num IN (%s, %s) ORDER BY order_id ASC" type="MySQL,PostgreSQL,SQLServer,Oracle" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectWithOrderBy" value="SELECT * FROM t_order o ORDER BY o.order_id, 2 DESC" />
<sql id="assertSelectWithOrderByForIndex" value="SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id AND o.status = 'init' ORDER BY o.order_id DESC, 1" />
<sql id="assertSelectWithOrderByForAlias" value="SELECT o.order_id as gen_order_id_ FROM t_order o ORDER BY o.order_id" />
<sql id="assertSelectWithOrderByForDate" value="SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id AND o.status = 'init' ORDER BY i.c_date DESC, o.order_id DESC, i.item_id" />
<sql id="assertSelectWithOrderByForNullsFirst" value="SELECT o.order_id as gen_order_id_ FROM t_order o ORDER BY o.order_id NULLS FIRST" type="Oracle" />
<sql id="assertSelectWithOrderByForNullsLast" value="SELECT o.order_id as gen_order_id_ FROM t_order o ORDER BY o.order_id ASC NULLS LAST" type="Oracle" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectPaginationWithOffset" value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC OFFSET %s" type="PostgreSQL" />
<sql id="assertSelectPaginationWithRowCount" value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC LIMIT %s" type="MySQL,H2,PostgreSQL" />
<sql id="assertSelectPaginationWithTop" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s) AS row_" type="SQLServer" />
<sql id="assertSelectPaginationWithRowNumber" value="SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum &lt;= %s)" type="Oracle" />
<sql id="assertSelectPaginationWithLimit" value="SELECT i.* FROM `t_order` o JOIN `t_order_item` i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.`user_id` IN (%s, %s) AND o.`order_id` BETWEEN %s AND %s ORDER BY i.item_id DESC LIMIT %s, %s" type="MySQL,H2" />
<sql id="assertSelectSingleTablePaginationWithLimit" value="SELECT o.* FROM `t_order` o ORDER BY o.order_id DESC LIMIT %s, %s" type="MySQL,H2" />
<sql id="assertSelectPaginationWithOffsetAndLimit" value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC OFFSET %s LIMIT %s" type="PostgreSQL" />
<sql id="assertSelectPaginationWithTopAndRange" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s) AS row_ WHERE row_.rownum_ &gt; %s" type="SQLServer" />
<sql id="assertSelectPaginationWithTopAndRangeWithEqual" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s) AS row_ WHERE row_.rownum_ &gt;= %s" type="SQLServer" />
<sql id="assertSelectSingleTablePaginationWithTopAndRange" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY o.order_id DESC) AS rownum_, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o) AS row_ WHERE row_.rownum_ &gt; %s" type="SQLServer" />
<sql id="assertSelectSingleTablePaginationWithTopAndRangeWithEqual" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY o.order_id DESC) AS rownum_, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o) AS row_ WHERE row_.rownum_ &gt;= %s" type="SQLServer" />
<sql id="assertSelectPaginationWithRowNumberAndRange" value="SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum &lt;= %s) t WHERE t.rownum_ &gt; %s" type="Oracle" />
<sql id="assertSelectPaginationWithRowNumberAndRangeWithEqual" value="SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum &lt;= %s) t WHERE t.rownum_ &gt;= %s" type="Oracle" />
<sql id="assertSelectSingleTablePaginationWithRowNumberAndRange" value="SELECT * FROM (SELECT t.*, ROWNUM rownum_ FROM (SELECT * FROM t_order ORDER BY order_id DESC) t WHERE ROWNUM &lt; %s) row_ WHERE row_.rownum_ &gt; %s" type="Oracle" />
<sql id="assertSelectSingleTablePaginationWithRowNumberAndRangeWithEqual" value="SELECT * FROM (SELECT t.*, ROWNUM rownum_ FROM (SELECT * FROM t_order ORDER BY order_id DESC) t WHERE t.order_id &lt;= %s AND ROWNUM &lt;= %s) row_ WHERE row_.rownum_ &gt;= %s" type="Oracle" />
<sql id="assertSelectSingleTablePaginationWithRowNumberAndRangeWithEqualDiffOrder" value="SELECT * FROM (SELECT t.*, ROWNUM rownum_ FROM (SELECT * FROM t_order ORDER BY order_id DESC) t WHERE ROWNUM &lt;= %s AND t.order_id &lt;= %s) row_ WHERE row_.rownum_ &gt;= %s" type="Oracle" />
<sql id="assertSelectLeftJoinAndLimit" value="SELECT i.* FROM t_order o LEFT JOIN t_order_item i ON o.order_id = i.order_id WHERE 1=1 AND o.user_id = %s AND o.order_id = %s ORDER BY i.item_id LIMIT %s, %s" type="H2,MySQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectPaginationWithGroupByAndOrderBy" value="SELECT i.user_id FROM `t_order` o JOIN `t_order_item` i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.`user_id` IN (%s, %s) AND o.`order_id` BETWEEN %s AND %s GROUP BY i.item_id ORDER BY i.item_id DESC LIMIT %s, %s" type="MySQL,H2" />
<sql id="assertSelectPaginationWithDiffGroupByAndOrderBy" value="SELECT i.user_id FROM `t_order` o JOIN `t_order_item` i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.`user_id` IN (%s, %s) AND o.`order_id` BETWEEN %s AND %s GROUP BY i.user_id ORDER BY i.item_id DESC LIMIT %s, %s" type="MySQL,H2" />
<sql id="assertSelectPaginationWithTopAndGroupByAndOrderBy" value="SELECT * FROM (SELECT TOP %s row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s GROUP BY i.item_id) AS row_ WHERE row_.rownum_ &gt; %s" type="SQLServer" />
<sql id="assertSelectPaginationWithTopAndGroupByAndOrderByAndParentheses" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s GROUP BY i.item_id) AS row_ WHERE row_.rownum_ &gt; %s" type="SQLServer" />
<sql id="assertSelectPaginationWithTopAndDiffGroupByAndOrderBy" value="SELECT * FROM (SELECT TOP %s row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s GROUP BY i.user_id ) AS row_ WHERE row_.rownum_ &gt; %s" type="SQLServer" />
<sql id="assertSelectPaginationWithTopAndDiffGroupByAndOrderByAndParentheses" value="SELECT * FROM (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum_, i.item_id, o.order_id as order_id, o.status as status, o.user_id as user_id FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s GROUP BY i.user_id ) AS row_ WHERE row_.rownum_ &gt; %s" type="SQLServer" />
<sql id="assertSelectPaginationWithRowNumberAndGroupByAndOrderBy" value="SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s GROUP BY i.item_id ORDER BY i.item_id DESC) row_ WHERE rownum &lt;= %s) t WHERE t.rownum_ &gt; %s" type="Oracle" />
<sql id="assertSelectPaginationWithRowNumberAndDiffGroupByAndOrderBy" value="SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s GROUP BY i.user_id ORDER BY i.item_id DESC) row_ WHERE rownum &lt;= %s) t WHERE t.rownum_ &gt; %s" type="Oracle" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectWithInnerJoinAndRelatedWithTableAlias" value="SELECT i.* FROM t_order o INNER JOIN t_order_item i ON o.order_id = i.order_id WHERE o.order_id = %s" />
<sql id="assertSelectWithInnerJoinAndRelatedWithTableName" value="SELECT t_order_item.* FROM t_order JOIN t_order_item ON t_order.order_id = t_order_item.order_id WHERE t_order.order_id = %s" />
<sql id="assertSelectWithJoinUsing" value="SELECT i.* FROM t_order o JOIN t_order_item i USING(order_id) WHERE o.order_id = %s" type="MySQL,PostgreSQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectSubQuerySingleTableWithParentheses" value="SELECT t.* FROM (SELECT o.* FROM t_order o WHERE o.order_id IN (%s, %s)) t ORDER BY t.order_id" type="MySQL,PostgreSQL,SQLServer,Oracle" />
<!-- TODO cannot pass,add later
<sql id="assertSelectSubQueryMultiTableWithParentheses" value="SELECT t.* FROM (SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id and o.order_id IN (%s, %s)) t ORDER BY t.item_id" type="SQLServer,Oracle" />
-->
<sql id="assertSelectSubQueryWithOrderBy" value="SELECT COUNT(1) as orders_count FROM (SELECT * FROM t_order ORDER BY order_id desc) t" type="MySQL,PostgreSQL,Oracle" />
<sql id="assertSelectSubQueryWithGroupBy" value="SELECT COUNT(1) as order_items_count FROM (SELECT order_id FROM t_order_item GROUP BY order_id) t" type="MySQL,PostgreSQL,Oracle" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="setAutoCommit" value="SET AUTOCOMMIT=1" />
<sql id="commit" value="COMMIT" />
<sql id="rollback" value="ROLLBACK" />
<sql id="savepoint" value="SAVEPOINT" />
<sql id="begin" value="BEGIN" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectDistinctWithSingleTable" value="SELECT DISTINCT item_id FROM t_order_item ORDER BY item_id" />
<sql id="assertSelectIntoSQL" value="SELECT * INTO t_order_new FROM t_order" />
<sql id="assertSelectWindow" value="SELECT * FROM t_order WINDOW w AS (PARTITION BY order_id)" type="PostgreSQL"/>
<sql id="assertSelectFetch" value="SELECT * FROM t_order FETCH NEXT 1 ROW ONLY" type="PostgreSQL"/>
<sql id="assertSelectFor" value="SELECT * FROM t_order FOR UPDATE OF t_order" type="PostgreSQL"/>
<sql id="assertSelectRowNumberAndPartition" value="SELECT ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY order_id ASC) AS row_, user_id, order_id FROM t_order" type="SQLServer"/>
<sql id="assertSelectWithStartWith" value="SELECT * FROM t_order_item START WITH order_id = %s CONNECT BY NOCYCLE PRIOR item_id=item_id-1" type="Oracle"/>
<sql id="assertSelectWithModelIn" value="SELECT order_id_value,order_item_id_value FROM (select 1001 as order_id_value, 100001 as order_item_id_value from dual) MODEL RETURN UPDATED ROWS DIMENSION BY(order_item_id_value) MEASURES(order_id_value) RULES(order_id_value[1] = 10001)" type="Oracle"/>
</sqls>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册