@@ -618,9 +618,10 @@ public String getOrderString(boolean hasPrefix) {
618
618
619
619
620
620
String order = StringUtil .getTrimedString (getOrder ());
621
- if ("rand()" .equals (order )) {
622
- return (hasPrefix ? " ORDER BY " : "" ) + StringUtil .concat (order , joinOrder , ", " );
623
- }
621
+ // SELECT * FROM sys.Moment ORDER BY userId ASC, rand(); 前面的 userId ASC 和后面的 rand() 都有效
622
+ // if ("rand()".equals(order)) {
623
+ // return (hasPrefix ? " ORDER BY " : "") + StringUtil.concat(order, joinOrder, ", ");
624
+ // }
624
625
625
626
if (getCount () > 0 && (isOracle () || isSQLServer () || isDb2 ())) { // Oracle, SQL Server, DB2 的 OFFSET 必须加 ORDER BY
626
627
@@ -653,38 +654,37 @@ public String getOrderString(boolean hasPrefix) {
653
654
}
654
655
655
656
656
- if (order .contains ("+" )) { //replace 没有包含 的replacement 会崩溃
657
- order = order .replaceAll ("\\ +" , " ASC " );
658
- }
659
- if (order .contains ("-" )) {
660
- order = order .replaceAll ("-" , " DESC " );
661
- }
662
-
663
657
String [] keys = StringUtil .split (order );
664
658
if (keys == null || keys .length <= 0 ) {
665
659
return StringUtil .isEmpty (joinOrder , true ) ? "" : (hasPrefix ? " ORDER BY " : "" ) + joinOrder ;
666
660
}
667
661
668
- String origin ;
669
- String sort ;
670
- int index ;
671
662
for (int i = 0 ; i < keys .length ; i ++) {
672
- index = keys [i ].trim ().endsWith (" ASC" ) ? keys [i ].lastIndexOf (" ASC" ) : -1 ; //StringUtil.split返回数组中,子项不会有null
663
+ String item = keys [i ];
664
+ if ("rand()" .equals (item )) {
665
+ continue ;
666
+ }
667
+
668
+ int index = item .endsWith ("+" ) ? item .length () - 1 : -1 ; //StringUtil.split返回数组中,子项不会有null
669
+ String sort ;
673
670
if (index < 0 ) {
674
- index = keys [ i ]. trim (). endsWith (" DESC " ) ? keys [ i ]. lastIndexOf ( " DESC" ) : -1 ;
671
+ index = item . endsWith ("- " ) ? item . length () - 1 : -1 ;
675
672
sort = index <= 0 ? "" : " DESC " ;
676
- } else {
673
+ }
674
+ else {
677
675
sort = " ASC " ;
678
676
}
679
- origin = index < 0 ? keys [i ] : keys [i ].substring (0 , index );
677
+
678
+ String origin = index < 0 ? item : item .substring (0 , index );
680
679
681
680
if (isPrepared ()) { //不能通过 ? 来代替,SELECT 'id','name' 返回的就是 id:"id", name:"name",而不是数据库里的值!
682
681
//这里既不对origin trim,也不对 ASC/DESC ignoreCase,希望前端严格传没有任何空格的字符串过来,减少传输数据量,节约服务器性能
683
682
if (StringUtil .isName (origin ) == false ) {
684
- throw new IllegalArgumentException ("预编译模式下 @order:value 中 value 只能是 rand() 或 里面用 , 分割的每一项 "
685
- + " column+ / column- 中 column必须是1个单词 !并且不要有多余的空格!" );
683
+ throw new IllegalArgumentException ("预编译模式下 @order:value 中 " + item + " 不合法! value 里面用 , 分割的 "
684
+ + "每一项必须是 随机函数 rand() 或 column+ / column- 且其中 column 必须是 1 个单词 !并且不要有多余的空格!" );
686
685
}
687
686
}
687
+
688
688
keys [i ] = getKey (origin ) + sort ;
689
689
}
690
690
0 commit comments