@@ -304,7 +304,7 @@ public AbstractSQLConfig setGroup(String group) {
304304 return this ;
305305 }
306306 @ JSONField (serialize = false )
307- public String getGroupString () {
307+ public String getGroupString (boolean hasPrefix ) {
308308 //TODO 加上子表的group
309309
310310 group = StringUtil .getTrimedString (group );
@@ -346,7 +346,7 @@ public AbstractSQLConfig setHaving(String having) {
346346 * @return HAVING conditoin0 AND condition1 OR condition2 ...
347347 */
348348 @ JSONField (serialize = false )
349- public String getHavingString () {
349+ public String getHavingString (boolean hasPrefix ) {
350350 having = StringUtil .getTrimedString (having );
351351 if (having .isEmpty ()) {
352352 return "" ;
@@ -434,24 +434,50 @@ public AbstractSQLConfig setOrder(String order) {
434434 return this ;
435435 }
436436 @ JSONField (serialize = false )
437- public String getOrderString () {
438- //TODO 加上子表的order
437+ public String getOrderString (boolean hasPrefix ) {
438+ //加上子表的 Order
439+ String joinOrder = "" ;
440+ if (joinList != null ) {
441+ SQLConfig ecfg ;
442+ SQLConfig cfg ;
443+ String c ;
444+ boolean first = true ;
445+ for (Join j : joinList ) {
446+ if (j .isAppJoin ()) {
447+ continue ;
448+ }
439449
440- order = StringUtil .getTrimedString (order );
441- if (order .isEmpty ()) {
442- return "" ;
450+ ecfg = j .getOutterConfig ();
451+ if (ecfg != null && ecfg .getOrder () != null ) { //优先级更高
452+ cfg = ecfg ;
453+ }
454+ else {
455+ cfg = j .getJoinConfig ();
456+ }
457+
458+ cfg .setAlias (cfg .getTable ());
459+
460+ c = ((AbstractSQLConfig ) cfg ).getOrderString (false );
461+ if (StringUtil .isEmpty (c , true ) == false ) {
462+ joinOrder += (first ? "" : ", " ) + c ;
463+ first = false ;
464+ }
465+
466+ }
443467 }
468+
469+
470+ order = StringUtil .getTrimedString (order );
444471 if (order .contains ("+" )) {//replace没有包含的replacement会崩溃
445472 order = order .replaceAll ("\\ +" , " ASC " );
446473 }
447474 if (order .contains ("-" )) {
448475 order = order .replaceAll ("-" , " DESC " );
449476 }
450477
451- //TODO column, order, group 都改用 List<String> 存储!!!,并且每个字段都要加 Table. 前缀!
452478 String [] keys = StringUtil .split (order );
453479 if (keys == null || keys .length <= 0 ) {
454- return "" ;
480+ return StringUtil . isEmpty ( joinOrder , true ) ? "" : ( hasPrefix ? " ORDER BY " : "" ) + joinOrder ;
455481 }
456482
457483 String origin ;
@@ -477,7 +503,7 @@ public String getOrderString() {
477503 keys [i ] = getKey (origin ) + sort ;
478504 }
479505
480- return " ORDER BY " + StringUtil .getString (keys );
506+ return ( hasPrefix ? " ORDER BY " : "" ) + StringUtil .concat ( StringUtil . getString (keys ), joinOrder , ", " );
481507 }
482508
483509
@@ -543,7 +569,7 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
543569 return "(" + s + ")" ;
544570 case GET :
545571 case GETS :
546- boolean isQuery = RequestMethod .isQueryMethod (method );
572+ boolean isQuery = RequestMethod .isQueryMethod (method ); //TODO 这个有啥用?上面应是 getMethod 的值 GET 和 GETS 了。
547573 String joinColumn = "" ;
548574 if (isQuery && joinList != null ) {
549575 SQLConfig ecfg ;
@@ -568,10 +594,10 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
568594 c = ((AbstractSQLConfig ) cfg ).getColumnString (true );
569595 if (StringUtil .isEmpty (c , true ) == false ) {
570596 joinColumn += (first ? "" : ", " ) + c ;
597+ first = false ;
571598 }
572599
573600 inSQLJoin = true ;
574- first = false ;
575601 }
576602 }
577603
@@ -1850,7 +1876,7 @@ private static String getConditionString(String column, String table, AbstractSQ
18501876
18511877 String condition = table + config .getJoinString () + where + (
18521878 RequestMethod .isGetMethod (config .getMethod (), true ) == false ?
1853- "" : config .getGroupString () + config .getHavingString () + config .getOrderString ()
1879+ "" : config .getGroupString (true ) + config .getHavingString (true ) + config .getOrderString (true )
18541880 )
18551881 ; //+ config.getLimitString();
18561882
0 commit comments