11/*
2- * Copyright 2016-2020 the original author or authors.
2+ * Copyright 2016-2021 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1717
1818import java .util .ArrayList ;
1919import java .util .Arrays ;
20+ import java .util .Collections ;
2021import java .util .HashMap ;
2122import java .util .List ;
2223import java .util .Map ;
2627
2728import org .mybatis .dynamic .sql .SqlTable ;
2829import org .mybatis .dynamic .sql .TableExpression ;
30+ import org .mybatis .dynamic .sql .exception .DuplicateTableAliasException ;
2931import org .mybatis .dynamic .sql .select .join .JoinCriterion ;
3032import org .mybatis .dynamic .sql .select .join .JoinModel ;
3133import org .mybatis .dynamic .sql .select .join .JoinSpecification ;
@@ -39,7 +41,7 @@ public abstract class AbstractQueryExpressionDSL<W extends AbstractWhereDSL<?>,
3941 extends AbstractWhereSupport <W > {
4042
4143 private final List <JoinSpecification .Builder > joinSpecificationBuilders = new ArrayList <>();
42- protected final Map <SqlTable , String > tableAliases = new HashMap <>();
44+ private final Map <SqlTable , String > tableAliases = new HashMap <>();
4345 private final TableExpression table ;
4446
4547 protected AbstractQueryExpressionDSL (TableExpression table ) {
@@ -58,7 +60,7 @@ public T join(SqlTable joinTable, JoinCriterion onJoinCriterion,
5860
5961 public T join (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
6062 JoinCriterion ...andJoinCriteria ) {
61- tableAliases . put (joinTable , tableAlias );
63+ addTableAlias (joinTable , tableAlias );
6264 return join (joinTable , onJoinCriterion , andJoinCriteria );
6365 }
6466
@@ -70,7 +72,7 @@ public T join(SqlTable joinTable, JoinCriterion onJoinCriterion,
7072
7173 public T join (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
7274 List <JoinCriterion > andJoinCriteria ) {
73- tableAliases . put (joinTable , tableAlias );
75+ addTableAlias (joinTable , tableAlias );
7476 return join (joinTable , onJoinCriterion , andJoinCriteria );
7577 }
7678
@@ -89,7 +91,7 @@ public T leftJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
8991
9092 public T leftJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
9193 JoinCriterion ...andJoinCriteria ) {
92- tableAliases . put (joinTable , tableAlias );
94+ addTableAlias (joinTable , tableAlias );
9395 return leftJoin (joinTable , onJoinCriterion , andJoinCriteria );
9496 }
9597
@@ -101,7 +103,7 @@ public T leftJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
101103
102104 public T leftJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
103105 List <JoinCriterion > andJoinCriteria ) {
104- tableAliases . put (joinTable , tableAlias );
106+ addTableAlias (joinTable , tableAlias );
105107 return leftJoin (joinTable , onJoinCriterion , andJoinCriteria );
106108 }
107109
@@ -120,7 +122,7 @@ public T rightJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
120122
121123 public T rightJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
122124 JoinCriterion ...andJoinCriteria ) {
123- tableAliases . put (joinTable , tableAlias );
125+ addTableAlias (joinTable , tableAlias );
124126 return rightJoin (joinTable , onJoinCriterion , andJoinCriteria );
125127 }
126128
@@ -132,7 +134,7 @@ public T rightJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
132134
133135 public T rightJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
134136 List <JoinCriterion > andJoinCriteria ) {
135- tableAliases . put (joinTable , tableAlias );
137+ addTableAlias (joinTable , tableAlias );
136138 return rightJoin (joinTable , onJoinCriterion , andJoinCriteria );
137139 }
138140
@@ -151,7 +153,7 @@ public T fullJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
151153
152154 public T fullJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
153155 JoinCriterion ...andJoinCriteria ) {
154- tableAliases . put (joinTable , tableAlias );
156+ addTableAlias (joinTable , tableAlias );
155157 return fullJoin (joinTable , onJoinCriterion , andJoinCriteria );
156158 }
157159
@@ -163,7 +165,7 @@ public T fullJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
163165
164166 public T fullJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
165167 List <JoinCriterion > andJoinCriteria ) {
166- tableAliases . put (joinTable , tableAlias );
168+ addTableAlias (joinTable , tableAlias );
167169 return fullJoin (joinTable , onJoinCriterion , andJoinCriteria );
168170 }
169171
@@ -197,6 +199,18 @@ protected Optional<JoinModel> buildJoinModel() {
197199 .collect (Collectors .toList ())));
198200 }
199201
202+ protected void addTableAlias (SqlTable table , String tableAlias ) {
203+ if (tableAliases .containsKey (table )) {
204+ throw new DuplicateTableAliasException (table , tableAlias , tableAliases .get (table ));
205+ }
206+
207+ tableAliases .put (table , tableAlias );
208+ }
209+
210+ protected Map <SqlTable , String > tableAliases () {
211+ return Collections .unmodifiableMap (tableAliases );
212+ }
213+
200214 protected static SubQuery buildSubQuery (Buildable <SelectModel > selectModel ) {
201215 return new SubQuery .Builder ()
202216 .withSelectModel (selectModel .build ())
0 commit comments