@@ -2120,6 +2120,7 @@ else if (SQL_FUNCTION_MAP.containsKey(fun) == false) {
21202120 private String [] parseArgsSplitWithComma (String param , boolean isColumn , boolean containRaw , boolean allowAlias ) {
21212121 // 以"," 分割参数
21222122 String quote = getQuote ();
2123+ boolean isKeyPrefix = isKeyPrefix ();
21232124 String tableAlias = getAliasWithQuote ();
21242125 String ckeys [] = StringUtil .split (param ); // 以","分割参数
21252126 if (ckeys != null && ckeys .length > 0 ) {
@@ -2190,28 +2191,41 @@ else if ("!=null".equals(ck)) {
21902191 // 以空格分割参数
21912192 String [] mkes = containRaw ? StringUtil .split (ck , " " , true ) : new String []{ ck };
21922193
2193- //如果参数中含有空格(少数情况) 比如 fun(arg1 arg2 arg3 ,arg4) 中的 arg1 arg2 arg3,比如 DISTINCT id
2194+ //如果参数中含有空格(少数情况) 比如 fun(arg1, arg2, arg3,arg4) 中的 arg1 arg2 arg3,比如 DISTINCT id
21942195 if (mkes != null && mkes .length >= 2 ) {
2195- origin = praseArgsSplitWithSpace (mkes );
2196+ origin = parseArgsSplitWithSpace (mkes );
21962197 } else {
2197- boolean isName = false ;
2198-
21992198 String mk = RAW_MAP .get (origin );
22002199 if (mk != null ) { // newSQLConfig 提前处理好的
22012200 if (mk .length () > 0 ) {
22022201 origin = mk ;
22032202 }
22042203 } else if (StringUtil .isNumer (origin )) {
22052204 //do nothing
2206- } else if (StringUtil .isName (origin )) {
2207- origin = quote + origin + quote ;
2208- isName = true ;
22092205 } else {
2210- origin = getValue (origin ).toString ();
2211- }
2206+ String [] keys = origin .split ("[.]" );
2207+ StringBuilder sb = new StringBuilder ();
2208+
2209+ int len = keys == null ? 0 : keys .length ;
2210+ if (len > 0 ) {
2211+ boolean first = true ;
2212+ for (String k : keys ) {
2213+ if (StringUtil .isName (k ) == false ) {
2214+ sb = null ;
2215+ break ;
2216+ }
2217+
2218+ sb .append (first ? "" : "." ).append (quote ).append (k ).append (quote );
2219+ first = false ;
2220+ }
2221+ }
22122222
2213- if (isName && isKeyPrefix ()) {
2214- origin = tableAlias + "." + origin ;
2223+ String s = sb == null ? null : sb .toString ();
2224+ if (StringUtil .isNotEmpty (s , true )) {
2225+ origin = (len == 1 && isKeyPrefix ? tableAlias + "." : "" ) + s ;
2226+ } else {
2227+ origin = getValue (origin ).toString ();
2228+ }
22152229 }
22162230
22172231 if (isColumn && StringUtil .isEmpty (alias , true ) == false ) {
@@ -2235,8 +2249,9 @@ else if ("!=null".equals(ck)) {
22352249 * @param mkes
22362250 * @return
22372251 */
2238- private String praseArgsSplitWithSpace (String mkes []) {
2252+ private String parseArgsSplitWithSpace (String mkes []) {
22392253 String quote = getQuote ();
2254+ boolean isKeyPrefix = isKeyPrefix ();
22402255 String tableAlias = getAliasWithQuote ();
22412256
22422257 // 包含空格的参数 肯定不包含别名 不用处理别名
@@ -2264,7 +2279,7 @@ private String praseArgsSplitWithSpace(String mkes[]) {
22642279 + " 中所有字符串 column 都必须必须为1个单词 !" );
22652280 }
22662281
2267- mkes [j ] = getKey (origin ). toString () ;
2282+ mkes [j ] = getKey (origin );
22682283 continue ;
22692284 }
22702285 else if (ck .startsWith ("'" ) && ck .endsWith ("'" )) {
@@ -2285,18 +2300,32 @@ else if (ck.contains("`") || ck.contains("'") || origin.startsWith("_") || origi
22852300 + " 中所有 arg 都必须是1个不以 _ 开头的单词 或者符合正则表达式 " + PATTERN_FUNCTION + " 且不包含连续减号 -- !DISTINCT 必须全大写,且后面必须有且只有 1 个空格!其它情况不允许空格!" );
22862301 }
22872302
2288- boolean isName = false ;
22892303 if (StringUtil .isNumer (origin )) {
22902304 //do nothing
2291- } else if (StringUtil .isName (origin )) {
2292- origin = quote + origin + quote ;
2293- isName = true ;
22942305 } else {
2295- origin = getValue (origin ).toString ();
2296- }
2306+ String [] keys = origin .split ("[.]" );
2307+ StringBuilder sb = new StringBuilder ();
2308+
2309+ int len = keys == null ? 0 : keys .length ;
2310+ if (len > 0 ) {
2311+ boolean first = true ;
2312+ for (String k : keys ) {
2313+ if (StringUtil .isName (k ) == false ) {
2314+ sb = null ;
2315+ break ;
2316+ }
22972317
2298- if (isName && isKeyPrefix ()) {
2299- origin = tableAlias + "." + origin ;
2318+ sb .append (first ? "" : "." ).append (quote ).append (k ).append (quote );
2319+ first = false ;
2320+ }
2321+ }
2322+
2323+ String s = sb == null ? null : sb .toString ();
2324+ if (StringUtil .isNotEmpty (s , true )) {
2325+ origin = (len == 1 && isKeyPrefix ? tableAlias + "." : "" ) + s ;
2326+ } else {
2327+ origin = getValue (origin ).toString ();
2328+ }
23002329 }
23012330
23022331 mkes [j ] = origin ;
@@ -2894,13 +2923,13 @@ protected String parseCombineExpression(RequestMethod method, String quote, Stri
28942923 } else {
28952924 wi = isHaving ? getHavingItem (quote , table , alias , column , (String ) value , containRaw ) : getWhereItem (column , value , method , verifyName );
28962925 }
2897-
2926+
28982927 if (1.0f *allCount /size > maxCombineRatio && maxCombineRatio > 0 ) {
28992928 throw new IllegalArgumentException (errPrefix + " 中字符 '" + s + "' 不合法!"
29002929 + "其中 key 数量 " + allCount + " / 条件键值对数量 " + size + " = " + (1.0f *allCount /size )
29012930 + " 已超过 最大倍数,必须在条件键值对数量 0-" + maxCombineRatio + " 倍内!" );
29022931 }
2903-
2932+
29042933 if (StringUtil .isEmpty (wi , true )) { // 转成 1=1 ?
29052934 throw new IllegalArgumentException (errPrefix + " 中字符 '" + key
29062935 + "' 对应的 " + column + ":value 不是有效条件键值对!" );
@@ -5127,7 +5156,7 @@ else if (userId instanceof Subquery) {}
51275156 if (StringUtil .equals (table , from .getConfig ().getTable ())) {
51285157 isFakeDelete = false ;
51295158 }
5130-
5159+
51315160 if (from .getConfig ().getJoinList () != null ) {
51325161 for (Join join : from .getConfig ().getJoinList ()) {
51335162 if (StringUtil .equals (table , join .getTable ())) {
@@ -5144,9 +5173,9 @@ else if (userId instanceof Subquery) {}
51445173 whereList .addAll (fakeDeleteMap .keySet ());
51455174 }
51465175 }
5147- }
5176+ }
51485177 }
5149-
5178+
51505179 if (StringUtil .isNotEmpty (combineExpr , true )) {
51515180 List <String > banKeyList = Arrays .asList (idKey , idInKey , userIdKey , userIdInKey );
51525181 for (String key : banKeyList ) {
@@ -5206,7 +5235,7 @@ else if (w.startsWith("!")) {
52065235 }
52075236
52085237 //条件>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5209-
5238+
52105239 Map <String , Object > tableContent = new LinkedHashMap <String , Object >();
52115240 Object value ;
52125241 for (String key : set ) {
@@ -5252,7 +5281,7 @@ else if (w.startsWith("!")) {
52525281 fakeDeleteMap .put (accessFakeDeleteMap .get ("deletedKey" ).toString (), accessFakeDeleteMap .get ("deletedValue" ));
52535282 config .setMethod (PUT );
52545283 config .setContent (fakeDeleteMap );
5255- }
5284+ }
52565285 }
52575286 }
52585287
0 commit comments