|
44 | 44 | import org.junit.jupiter.api.Test;
|
45 | 45 | import org.mybatis.dynamic.sql.exception.DuplicateTableAliasException;
|
46 | 46 | import org.mybatis.dynamic.sql.render.RenderingStrategies;
|
| 47 | +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; |
| 48 | +import org.mybatis.dynamic.sql.select.SelectModel; |
47 | 49 | import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
|
48 | 50 | import org.mybatis.dynamic.sql.util.mybatis3.CommonSelectMapper;
|
49 | 51 |
|
@@ -948,14 +950,73 @@ void testSelf() {
|
948 | 950 |
|
949 | 951 | @Test
|
950 | 952 | void testSelfWithDuplicateAlias() {
|
951 |
| - assertThatExceptionOfType(DuplicateTableAliasException.class).isThrownBy(() -> |
952 |
| - select(user.userId, user.userName, user.parentId) |
953 |
| - .from(user, "u1") |
954 |
| - .join(user, "u2").on(user.userId, equalTo(user.parentId)) |
955 |
| - .where(user.userId, isEqualTo(4)) |
956 |
| - .build() |
957 |
| - .render(RenderingStrategies.MYBATIS3) |
958 |
| - ).withMessage("Table \"User\" with requested alias \"u2\" is already aliased in this query with alias \"u1\". Attempting to re-alias a table in the same query is not supported."); |
| 953 | + QueryExpressionDSL<SelectModel> dsl = select(user.userId, user.userName, user.parentId) |
| 954 | + .from(user, "u1"); |
| 955 | + |
| 956 | + assertThatExceptionOfType(DuplicateTableAliasException.class).isThrownBy(() -> dsl.join(user, "u2")) |
| 957 | + .withMessage("Table \"User\" with requested alias \"u2\" is already aliased in this query with alias \"u1\". Attempting to re-alias a table in the same query is not supported."); |
| 958 | + } |
| 959 | + |
| 960 | + @Test |
| 961 | + void testSelfWithNewAlias() { |
| 962 | + try (SqlSession session = sqlSessionFactory.openSession()) { |
| 963 | + JoinMapper mapper = session.getMapper(JoinMapper.class); |
| 964 | + |
| 965 | + // create second table instance for self-join |
| 966 | + UserDynamicSQLSupport.User user2 = user.withAlias("u2"); |
| 967 | + |
| 968 | + // get Bamm Bamm's parent - should be Barney |
| 969 | + SelectStatementProvider selectStatement = select(user.userId, user.userName, user.parentId) |
| 970 | + .from(user) |
| 971 | + .join(user2).on(user.userId, equalTo(user2.parentId)) |
| 972 | + .where(user2.userId, isEqualTo(4)) |
| 973 | + .build() |
| 974 | + .render(RenderingStrategies.MYBATIS3); |
| 975 | + |
| 976 | + String expectedStatement = "select User.user_id, User.user_name, User.parent_id" |
| 977 | + + " from User join User u2 on User.user_id = u2.parent_id" |
| 978 | + + " where u2.user_id = #{parameters.p1,jdbcType=INTEGER}"; |
| 979 | + assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedStatement); |
| 980 | + |
| 981 | + List<User> rows = mapper.selectUsers(selectStatement); |
| 982 | + |
| 983 | + assertThat(rows).hasSize(1); |
| 984 | + User row = rows.get(0); |
| 985 | + assertThat(row.getUserId()).isEqualTo(2); |
| 986 | + assertThat(row.getUserName()).isEqualTo("Barney"); |
| 987 | + assertThat(row.getParentId()).isNull(); |
| 988 | + } |
| 989 | + } |
| 990 | + |
| 991 | + @Test |
| 992 | + void testSelfWithNewAliasAndOverride() { |
| 993 | + try (SqlSession session = sqlSessionFactory.openSession()) { |
| 994 | + JoinMapper mapper = session.getMapper(JoinMapper.class); |
| 995 | + |
| 996 | + // create second table instance for self-join |
| 997 | + UserDynamicSQLSupport.User user2 = user.withAlias("other_user"); |
| 998 | + |
| 999 | + // get Bamm Bamm's parent - should be Barney |
| 1000 | + SelectStatementProvider selectStatement = select(user.userId, user.userName, user.parentId) |
| 1001 | + .from(user, "u1") |
| 1002 | + .join(user2, "u2").on(user.userId, equalTo(user2.parentId)) |
| 1003 | + .where(user2.userId, isEqualTo(4)) |
| 1004 | + .build() |
| 1005 | + .render(RenderingStrategies.MYBATIS3); |
| 1006 | + |
| 1007 | + String expectedStatement = "select u1.user_id, u1.user_name, u1.parent_id" |
| 1008 | + + " from User u1 join User u2 on u1.user_id = u2.parent_id" |
| 1009 | + + " where u2.user_id = #{parameters.p1,jdbcType=INTEGER}"; |
| 1010 | + assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedStatement); |
| 1011 | + |
| 1012 | + List<User> rows = mapper.selectUsers(selectStatement); |
| 1013 | + |
| 1014 | + assertThat(rows).hasSize(1); |
| 1015 | + User row = rows.get(0); |
| 1016 | + assertThat(row.getUserId()).isEqualTo(2); |
| 1017 | + assertThat(row.getUserName()).isEqualTo("Barney"); |
| 1018 | + assertThat(row.getParentId()).isNull(); |
| 1019 | + } |
959 | 1020 | }
|
960 | 1021 |
|
961 | 1022 | @Test
|
|
0 commit comments