1
1
/*
2
- * Copyright 2016-2020 the original author or authors.
2
+ * Copyright 2016-2021 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
17
17
18
18
import java .util .ArrayList ;
19
19
import java .util .Arrays ;
20
+ import java .util .Collections ;
20
21
import java .util .HashMap ;
21
22
import java .util .List ;
22
23
import java .util .Map ;
26
27
27
28
import org .mybatis .dynamic .sql .SqlTable ;
28
29
import org .mybatis .dynamic .sql .TableExpression ;
30
+ import org .mybatis .dynamic .sql .exception .DuplicateTableAliasException ;
29
31
import org .mybatis .dynamic .sql .select .join .JoinCriterion ;
30
32
import org .mybatis .dynamic .sql .select .join .JoinModel ;
31
33
import org .mybatis .dynamic .sql .select .join .JoinSpecification ;
@@ -39,7 +41,7 @@ public abstract class AbstractQueryExpressionDSL<W extends AbstractWhereDSL<?>,
39
41
extends AbstractWhereSupport <W > {
40
42
41
43
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 <>();
43
45
private final TableExpression table ;
44
46
45
47
protected AbstractQueryExpressionDSL (TableExpression table ) {
@@ -58,7 +60,7 @@ public T join(SqlTable joinTable, JoinCriterion onJoinCriterion,
58
60
59
61
public T join (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
60
62
JoinCriterion ...andJoinCriteria ) {
61
- tableAliases . put (joinTable , tableAlias );
63
+ addTableAlias (joinTable , tableAlias );
62
64
return join (joinTable , onJoinCriterion , andJoinCriteria );
63
65
}
64
66
@@ -70,7 +72,7 @@ public T join(SqlTable joinTable, JoinCriterion onJoinCriterion,
70
72
71
73
public T join (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
72
74
List <JoinCriterion > andJoinCriteria ) {
73
- tableAliases . put (joinTable , tableAlias );
75
+ addTableAlias (joinTable , tableAlias );
74
76
return join (joinTable , onJoinCriterion , andJoinCriteria );
75
77
}
76
78
@@ -89,7 +91,7 @@ public T leftJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
89
91
90
92
public T leftJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
91
93
JoinCriterion ...andJoinCriteria ) {
92
- tableAliases . put (joinTable , tableAlias );
94
+ addTableAlias (joinTable , tableAlias );
93
95
return leftJoin (joinTable , onJoinCriterion , andJoinCriteria );
94
96
}
95
97
@@ -101,7 +103,7 @@ public T leftJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
101
103
102
104
public T leftJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
103
105
List <JoinCriterion > andJoinCriteria ) {
104
- tableAliases . put (joinTable , tableAlias );
106
+ addTableAlias (joinTable , tableAlias );
105
107
return leftJoin (joinTable , onJoinCriterion , andJoinCriteria );
106
108
}
107
109
@@ -120,7 +122,7 @@ public T rightJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
120
122
121
123
public T rightJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
122
124
JoinCriterion ...andJoinCriteria ) {
123
- tableAliases . put (joinTable , tableAlias );
125
+ addTableAlias (joinTable , tableAlias );
124
126
return rightJoin (joinTable , onJoinCriterion , andJoinCriteria );
125
127
}
126
128
@@ -132,7 +134,7 @@ public T rightJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
132
134
133
135
public T rightJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
134
136
List <JoinCriterion > andJoinCriteria ) {
135
- tableAliases . put (joinTable , tableAlias );
137
+ addTableAlias (joinTable , tableAlias );
136
138
return rightJoin (joinTable , onJoinCriterion , andJoinCriteria );
137
139
}
138
140
@@ -151,7 +153,7 @@ public T fullJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
151
153
152
154
public T fullJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
153
155
JoinCriterion ...andJoinCriteria ) {
154
- tableAliases . put (joinTable , tableAlias );
156
+ addTableAlias (joinTable , tableAlias );
155
157
return fullJoin (joinTable , onJoinCriterion , andJoinCriteria );
156
158
}
157
159
@@ -163,7 +165,7 @@ public T fullJoin(SqlTable joinTable, JoinCriterion onJoinCriterion,
163
165
164
166
public T fullJoin (SqlTable joinTable , String tableAlias , JoinCriterion onJoinCriterion ,
165
167
List <JoinCriterion > andJoinCriteria ) {
166
- tableAliases . put (joinTable , tableAlias );
168
+ addTableAlias (joinTable , tableAlias );
167
169
return fullJoin (joinTable , onJoinCriterion , andJoinCriteria );
168
170
}
169
171
@@ -197,6 +199,18 @@ protected Optional<JoinModel> buildJoinModel() {
197
199
.collect (Collectors .toList ())));
198
200
}
199
201
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
+
200
214
protected static SubQuery buildSubQuery (Buildable <SelectModel > selectModel ) {
201
215
return new SubQuery .Builder ()
202
216
.withSelectModel (selectModel .build ())
0 commit comments