@@ -736,25 +736,26 @@ public abstract class AbstractSQLConfig implements SQLConfig {
736736 SQL_FUNCTION_MAP .put ("bitAnd" , "" ); //bitAnd(a,b)
737737 SQL_FUNCTION_MAP .put ("bitOr" , "" ); //bitOr(a,b)
738738
739- // PostgreSQL 表结构相关 SQL 函数
740- SQL_FUNCTION_MAP .put ("obj_description" , "" );
741- SQL_FUNCTION_MAP .put ("col_description" , "" );
739+ // PostgreSQL 表结构相关 SQL 函数
740+ SQL_FUNCTION_MAP .put ("obj_description" , "" );
741+ SQL_FUNCTION_MAP .put ("col_description" , "" );
742742
743- // SQLServer 相关 SQL 函数
744- SQL_FUNCTION_MAP .put ("datalength" , "" );
743+ // SQLServer 相关 SQL 函数
744+ SQL_FUNCTION_MAP .put ("len" , "" );
745+ SQL_FUNCTION_MAP .put ("datalength" , "" );
745746
746747 }
747748
748- private int [] dbVersionNums = null ;
749- @ Override
750- public int [] getDBVersionNums () {
751- if (dbVersionNums == null || dbVersionNums .length <= 0 ) {
752- dbVersionNums = SQLConfig .super .getDBVersionNums ();
753- }
754- return dbVersionNums ;
755- }
749+ private int [] dbVersionNums = null ;
750+ @ Override
751+ public int [] getDBVersionNums () {
752+ if (dbVersionNums == null || dbVersionNums .length <= 0 ) {
753+ dbVersionNums = SQLConfig .super .getDBVersionNums ();
754+ }
755+ return dbVersionNums ;
756+ }
756757
757- @ Override
758+ @ Override
758759 public boolean limitSQLCount () {
759760 return Log .DEBUG == false || AbstractVerifier .SYSTEM_ACCESS_MAP .containsKey (getTable ()) == false ;
760761 }
@@ -1014,16 +1015,16 @@ public static boolean isHive(String db) {
10141015 return DATABASE_HIVE .equals (db );
10151016 }
10161017
1017- @ Override
1018- public boolean isTDengine () {
1019- return isTDengine (getSQLDatabase ());
1020- }
1021- public static boolean isTDengine (String db ) {
1022- return DATABASE_TDENGINE .equals (db );
1023- }
1018+ @ Override
1019+ public boolean isTDengine () {
1020+ return isTDengine (getSQLDatabase ());
1021+ }
1022+ public static boolean isTDengine (String db ) {
1023+ return DATABASE_TDENGINE .equals (db );
1024+ }
10241025
10251026
1026- @ Override
1027+ @ Override
10271028 public String getQuote () {
10281029 return isMySQL () || isClickHouse () || isTDengine () ? "`" : "\" " ;
10291030 }
@@ -1033,7 +1034,7 @@ public String getSchema() {
10331034 return schema ;
10341035 }
10351036
1036- @ NotNull
1037+ @ NotNull
10371038 public String getSQLSchema () {
10381039 String table = getTable ();
10391040 //强制,避免因为全局默认的 @schema 自动填充进来,导致这几个类的 schema 为 sys 等其它值
@@ -2322,12 +2323,12 @@ public String getLimitString() {
23222323 return getLimitString (getPage (), getCount (), isOracle () || isSQLServer () || isDb2 (), isOracle ());
23232324 }
23242325 /**获取限制数量及偏移量
2325- * @param page
2326- * @param count
2327- * @param isTSQL
2328- * @param isOracle
2329- * @return
2330- */
2326+ * @param page
2327+ * @param count
2328+ * @param isTSQL
2329+ * @param isOracle
2330+ * @return
2331+ */
23312332 public static String getLimitString (int page , int count , boolean isTSQL , boolean isOracle ) {
23322333 int offset = getOffset (page , count );
23332334
@@ -2614,9 +2615,9 @@ protected String parseCombineExpression(RequestMethod method, String quote, Stri
26142615 String result = "" ;
26152616
26162617 List <Object > preparedValues = getPreparedValueList ();
2617- if (preparedValues == null && isHaving == false ) {
2618- preparedValues = new ArrayList <>();
2619- }
2618+ if (preparedValues == null && isHaving == false ) {
2619+ preparedValues = new ArrayList <>();
2620+ }
26202621
26212622 Map <String , Integer > usedKeyCountMap = new HashMap <>(size );
26222623
@@ -2813,10 +2814,10 @@ else if (c == ')') {
28132814 }
28142815 }
28152816
2816- List <Object > exprPreparedValues = getPreparedValueList ();
2817- if (isHaving == false ) { // 只收集 AND 条件值
2818- setPreparedValueList (new ArrayList <>());
2819- }
2817+ List <Object > exprPreparedValues = getPreparedValueList ();
2818+ if (isHaving == false ) { // 只收集 AND 条件值
2819+ setPreparedValueList (new ArrayList <>());
2820+ }
28202821
28212822 Set <Entry <String , Object >> set = conditionMap .entrySet ();
28222823
@@ -2838,9 +2839,9 @@ else if (c == ')') {
28382839 isItemFirst = false ;
28392840 }
28402841
2841- if (isHaving == false ) { // 优先存放 AND 条件值
2842- preparedValues .addAll (getPreparedValueList ());
2843- }
2842+ if (isHaving == false ) { // 优先存放 AND 条件值
2843+ preparedValues .addAll (getPreparedValueList ());
2844+ }
28442845
28452846 if (StringUtil .isEmpty (result , true )) {
28462847 result = andCond ;
@@ -2854,12 +2855,12 @@ else if (StringUtil.isNotEmpty(andCond, true)) { // andCond 必须放后面,
28542855 }
28552856 }
28562857
2857- if (isHaving == false ) {
2858- if (exprPreparedValues != null && exprPreparedValues .isEmpty () == false ) {
2859- preparedValues .addAll (exprPreparedValues ); // 在 AND 条件值后存放表达式内的条件值
2860- }
2861- setPreparedValueList (preparedValues );
2862- }
2858+ if (isHaving == false ) {
2859+ if (exprPreparedValues != null && exprPreparedValues .isEmpty () == false ) {
2860+ preparedValues .addAll (exprPreparedValues ); // 在 AND 条件值后存放表达式内的条件值
2861+ }
2862+ setPreparedValueList (preparedValues );
2863+ }
28632864
28642865 return result ;
28652866 }
@@ -2875,7 +2876,7 @@ else if (StringUtil.isNotEmpty(andCond, true)) { // andCond 必须放后面,
28752876 * @throws Exception
28762877 */
28772878 public String getWhereString (boolean hasPrefix , RequestMethod method , Map <String , Object > where
2878- , Map <String , List <String >> combine , List <Join > joinList , boolean verifyName ) throws Exception {
2879+ , Map <String , List <String >> combine , List <Join > joinList , boolean verifyName ) throws Exception {
28792880 Set <Entry <String , List <String >>> combineSet = combine == null ? null : combine .entrySet ();
28802881 if (combineSet == null || combineSet .isEmpty ()) {
28812882 Log .w (TAG , "getWhereString combineSet == null || combineSet.isEmpty() >> return \" \" ;" );
@@ -3274,13 +3275,13 @@ public AbstractSQLConfig setPreparedValueList(List<Object> preparedValueList) {
32743275
32753276 //$ search <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
32763277 /**search key match value
3277- * @param key
3278- * @param column
3279- * @param value
3280- * @param rawSQL
3281- * @return {@link #getSearchString(String, String, Object[], int)}
3282- * @throws IllegalArgumentException
3283- */
3278+ * @param key
3279+ * @param column
3280+ * @param value
3281+ * @param rawSQL
3282+ * @return {@link #getSearchString(String, String, Object[], int)}
3283+ * @throws IllegalArgumentException
3284+ */
32843285 @ JSONField (serialize = false )
32853286 public String getSearchString (String key , String column , Object value , String rawSQL ) throws IllegalArgumentException {
32863287 if (rawSQL != null ) {
@@ -3301,13 +3302,13 @@ public String getSearchString(String key, String column, Object value, String ra
33013302 return getSearchString (key , column , arr .toArray (), logic .getType ());
33023303 }
33033304 /**search key match values
3304- * @param key
3305- * @param column
3306- * @param values
3307- * @param type
3308- * @return LOGIC [ key LIKE 'values[i]' ]
3309- * @throws IllegalArgumentException
3310- */
3305+ * @param key
3306+ * @param column
3307+ * @param values
3308+ * @param type
3309+ * @return LOGIC [ key LIKE 'values[i]' ]
3310+ * @throws IllegalArgumentException
3311+ */
33113312 @ JSONField (serialize = false )
33123313 public String getSearchString (String key , String column , Object [] values , int type ) throws IllegalArgumentException {
33133314 if (values == null || values .length <= 0 ) {
@@ -3473,7 +3474,7 @@ public String getRegExpString(String key, String column, String value, boolean i
34733474 }
34743475
34753476
3476- //~ regexp >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3477+ //~ regexp >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
34773478
34783479
34793480
@@ -3509,8 +3510,8 @@ public String getBetweenString(String key, String column, Object value, String r
35093510 * @param key
35103511 * @param column
35113512 * @param values ['start,end'] TODO 在 '1,2' 和 ['1,2', '3,4'] 基础上新增支持 [1, 2] 和 [[1,2], [3,4]] ?
3512- * @param type
3513- * @return LOGIC [ key BETWEEN 'start' AND 'end' ]
3513+ * @param type
3514+ * @return LOGIC [ key BETWEEN 'start' AND 'end' ]
35143515 * @throws IllegalArgumentException
35153516 */
35163517 @ JSONField (serialize = false )
@@ -3538,13 +3539,13 @@ public String getBetweenString(String key, String column, Object[] values, int t
35383539 }
35393540
35403541 /**WHERE key BETWEEN 'start' AND 'end'
3541- * @return key
3542- * @param column
3543- * @param start
3544- * @param end
3545- * @return LOGIC [ key BETWEEN 'start' AND 'end' ]
3546- * @throws IllegalArgumentException
3547- */
3542+ * @return key
3543+ * @param column
3544+ * @param start
3545+ * @param end
3546+ * @return LOGIC [ key BETWEEN 'start' AND 'end' ]
3547+ * @throws IllegalArgumentException
3548+ */
35483549 @ JSONField (serialize = false )
35493550 public String getBetweenString (String key , String column , Object start , Object end ) throws IllegalArgumentException {
35503551 if (JSON .isBooleanOrNumberOrString (start ) == false || JSON .isBooleanOrNumberOrString (end ) == false ) {
@@ -3808,33 +3809,33 @@ public String getSubqueryString(Subquery subquery) throws Exception {
38083809 cfg .setPreparedValueList (new ArrayList <>());
38093810 String sql = (range == null || range .isEmpty () ? "" : range ) + "(" + cfg .getSQL (isPrepared ()) + ") " ;
38103811
3811- //// SELECT .. FROM(SELECT ..) .. WHERE .. 格式需要把子查询中的预编译值提前
3812- //// 如果外查询 SELECT concat(`name`,?) 这种 SELECT 里也有预编译值,那就不能这样简单反向
3813- //List<Object> subPvl = cfg.getPreparedValueList();
3814- //if (subPvl != null && subPvl.isEmpty() == false) {
3815- // List<Object> pvl = getPreparedValueList();
3816- //
3817- // if (pvl != null && pvl.isEmpty() == false) {
3818- // subPvl.addAll(pvl);
3819- // }
3820- // setPreparedValueList(subPvl);
3821- //}
3822-
3823- List <Object > subPvl = cfg .getPreparedValueList ();
3824- if (subPvl != null && subPvl .isEmpty () == false ) {
3825- List <Object > pvl = getPreparedValueList ();
3826-
3827- if (pvl == null || pvl .isEmpty ()) {
3828- pvl = subPvl ;
3829- }
3830- else {
3831- pvl .addAll (subPvl );
3832- }
3812+ //// SELECT .. FROM(SELECT ..) .. WHERE .. 格式需要把子查询中的预编译值提前
3813+ //// 如果外查询 SELECT concat(`name`,?) 这种 SELECT 里也有预编译值,那就不能这样简单反向
3814+ //List<Object> subPvl = cfg.getPreparedValueList();
3815+ //if (subPvl != null && subPvl.isEmpty() == false) {
3816+ // List<Object> pvl = getPreparedValueList();
3817+ //
3818+ // if (pvl != null && pvl.isEmpty() == false) {
3819+ // subPvl.addAll(pvl);
3820+ // }
3821+ // setPreparedValueList(subPvl);
3822+ //}
3823+
3824+ List <Object > subPvl = cfg .getPreparedValueList ();
3825+ if (subPvl != null && subPvl .isEmpty () == false ) {
3826+ List <Object > pvl = getPreparedValueList ();
3827+
3828+ if (pvl == null || pvl .isEmpty ()) {
3829+ pvl = subPvl ;
3830+ }
3831+ else {
3832+ pvl .addAll (subPvl );
3833+ }
38333834
3834- setPreparedValueList (pvl );
3835- }
3835+ setPreparedValueList (pvl );
3836+ }
38363837
3837- return sql ;
3838+ return sql ;
38383839 }
38393840
38403841 //key@:{} Subquery >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -4067,14 +4068,14 @@ protected String getOraclePageSql(String sql) {
40674068 * @throws Exception
40684069 */
40694070 private static String getConditionString (String table , AbstractSQLConfig config ) throws Exception {
4070- Subquery from = config .getFrom ();
4071- if (from != null ) {
4072- table = config .getSubqueryString (from ) + " AS " + config .getAliasWithQuote () + " " ;
4073- }
4071+ Subquery from = config .getFrom ();
4072+ if (from != null ) {
4073+ table = config .getSubqueryString (from ) + " AS " + config .getAliasWithQuote () + " " ;
4074+ }
40744075
4075- String join = config .getJoinString ();
4076+ String join = config .getJoinString ();
40764077
4077- String where = config .getWhereString (true );
4078+ String where = config .getWhereString (true );
40784079
40794080 //根据方法不同,聚合语句不同。GROUP BY 和 HAVING 可以加在 HEAD 上, HAVING 可以加在 PUT, DELETE 上,GET 全加,POST 全都不加
40804081 String aggregation ;
0 commit comments