32
32
import com .alibaba .druid .sql .dialect .mysql .ast .expr .MySqlSelectGroupByExpr ;
33
33
import com .alibaba .druid .sql .dialect .mysql .ast .statement .MySqlSelectQueryBlock ;
34
34
import com .alibaba .druid .sql .dialect .mysql .visitor .MySqlOutputVisitor ;
35
+ import com .dangdang .ddframe .rdb .sharding .parser .result .merger .AbstractSortableColumn ;
35
36
import com .dangdang .ddframe .rdb .sharding .parser .result .merger .AggregationColumn ;
36
37
import com .dangdang .ddframe .rdb .sharding .parser .result .merger .AggregationColumn .AggregationType ;
37
- import com .dangdang .ddframe .rdb .sharding .parser .result .merger .GroupByColumn ;
38
38
import com .dangdang .ddframe .rdb .sharding .parser .result .merger .Limit ;
39
- import com .dangdang .ddframe .rdb .sharding .parser .result .merger .OrderByColumn ;
40
39
import com .dangdang .ddframe .rdb .sharding .parser .result .merger .OrderByColumn .OrderByType ;
41
40
import com .google .common .base .Optional ;
42
41
import com .google .common .base .Strings ;
@@ -123,9 +122,11 @@ public boolean visit(final SQLOrderBy x) {
123
122
if (expr instanceof SQLIntegerExpr ) {
124
123
getParseContext ().addOrderByColumn (((SQLIntegerExpr ) expr ).getNumber ().intValue (), orderByType );
125
124
} else if (expr instanceof SQLIdentifierExpr ) {
126
- getParseContext ().addOrderByColumn (((SQLIdentifierExpr ) expr ).getName (), orderByType );
125
+ getParseContext ().addOrderByColumn (Optional .< String > absent (), ((SQLIdentifierExpr ) expr ).getName (), orderByType );
127
126
} else if (expr instanceof SQLPropertyExpr ) {
128
- getParseContext ().addOrderByColumn (((SQLPropertyExpr ) expr ).getName (), orderByType );
127
+ SQLPropertyExpr sqlPropertyExpr = (SQLPropertyExpr ) expr ;
128
+ getParseContext ().addOrderByColumn (Optional .of (sqlPropertyExpr .getOwner ().toString ()), sqlPropertyExpr .getName (), orderByType );
129
+
129
130
}
130
131
}
131
132
return super .visit (x );
@@ -140,14 +141,13 @@ public boolean visit(final SQLOrderBy x) {
140
141
*/
141
142
@ Override
142
143
public boolean visit (final MySqlSelectGroupByExpr x ) {
143
- String alias = getParseContext ().generateDerivedColumnAlias ();
144
144
OrderByType orderByType = null == x .getType () ? OrderByType .ASC : OrderByType .valueOf (x .getType ());
145
145
if (x .getExpr () instanceof SQLPropertyExpr ) {
146
146
SQLPropertyExpr expr = (SQLPropertyExpr ) x .getExpr ();
147
- getParseContext ().addGroupByColumns (expr .toString (), alias , orderByType );
147
+ getParseContext ().addGroupByColumns (Optional . of ( expr .getOwner (). toString ()), expr . getName () , orderByType );
148
148
} else if (x .getExpr () instanceof SQLIdentifierExpr ) {
149
149
SQLIdentifierExpr expr = (SQLIdentifierExpr ) x .getExpr ();
150
- getParseContext ().addGroupByColumns (expr . getName (), alias , orderByType );
150
+ getParseContext ().addGroupByColumns (Optional .< String > absent (), expr . getName () , orderByType );
151
151
}
152
152
return super .visit (x );
153
153
}
@@ -193,18 +193,25 @@ public void endVisit(final MySqlSelectQueryBlock x) {
193
193
derivedSelectItems .append (", " ).append (derivedColumn .getExpression ()).append (" AS " ).append (derivedColumn .getAlias ().get ());
194
194
}
195
195
}
196
- for (GroupByColumn each : getParseContext ().getParsedResult ().getMergeContext ().getGroupByColumns ()) {
197
- derivedSelectItems .append (", " ).append (each .getName ()).append (" AS " ).append (each .getAlias ());
198
- }
199
- for (OrderByColumn each : getParseContext ().getParsedResult ().getMergeContext ().getOrderByColumns ()) {
200
- if (each .getAlias ().isPresent ()) {
201
- derivedSelectItems .append (", " ).append (each .getName ().get ()).append (" AS " ).append (each .getAlias ().get ());
202
- }
203
- }
196
+ appendSortableColumn (derivedSelectItems , getParseContext ().getParsedResult ().getMergeContext ().getGroupByColumns ());
197
+ appendSortableColumn (derivedSelectItems , getParseContext ().getParsedResult ().getMergeContext ().getOrderByColumns ());
204
198
if (0 != derivedSelectItems .length ()) {
205
199
getSQLBuilder ().buildSQL (getParseContext ().getAutoGenTokenKey (), derivedSelectItems .toString ());
206
200
}
207
201
super .endVisit (x );
208
202
stepOutQuery ();
209
203
}
204
+
205
+ private void appendSortableColumn (final StringBuilder derivedSelectItems , final List <? extends AbstractSortableColumn > sortableColumns ) {
206
+ for (AbstractSortableColumn each : sortableColumns ) {
207
+ if (!each .getAlias ().isPresent ()) {
208
+ continue ;
209
+ }
210
+ derivedSelectItems .append (", " );
211
+ if (each .getOwner ().isPresent ()) {
212
+ derivedSelectItems .append (each .getOwner ().get ()).append ("." );
213
+ }
214
+ derivedSelectItems .append (each .getName ().get ()).append (" AS " ).append (each .getAlias ().get ());
215
+ }
216
+ }
210
217
}
0 commit comments