@@ -236,8 +236,9 @@ public String getTable() {
236236 @ JSONField (serialize = false )
237237 @ Override
238238 public String getSQLTable () {
239- String t = TABLE_KEY_MAP .containsKey (table ) ? TABLE_KEY_MAP .get (table ) : table ;
240- return DATABASE_POSTGRESQL .equalsIgnoreCase (getDatabase ()) ? t .toLowerCase () : t ;
239+ // String t = TABLE_KEY_MAP.containsKey(table) ? TABLE_KEY_MAP.get(table) : table;
240+ //如果要强制小写,则可在子类重写这个方法再 toLowerCase return DATABASE_POSTGRESQL.equalsIgnoreCase(getDatabase()) ? t.toLowerCase() : t;
241+ return TABLE_KEY_MAP .containsKey (table ) ? TABLE_KEY_MAP .get (table ) : table ;
241242 }
242243 @ JSONField (serialize = false )
243244 @ Override
@@ -257,7 +258,8 @@ public String getAlias() {
257258 }
258259 String q = getQuote ();
259260 //getTable 不能小写,因为Verifier用大小写敏感的名称判断权限
260- return q + (DATABASE_POSTGRESQL .equalsIgnoreCase (getDatabase ()) ? alias .toLowerCase () : alias ) + q ;
261+ //如果要强制小写,则可在子类重写这个方法再 toLowerCase return q + (DATABASE_POSTGRESQL.equalsIgnoreCase(getDatabase()) ? alias.toLowerCase() : alias) + q;
262+ return q + alias + q ;
261263 }
262264 @ Override
263265 public AbstractSQLConfig setAlias (String alias ) {
@@ -490,21 +492,24 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
490492 }
491493 }
492494 }
493- return SQL .count (column != null && column .size () == 1 ? column .get (0 ) : "*" );
495+ return SQL .count (column != null && column .size () == 1 ? getKey ( column .get (0 ) ) : "*" );
494496 case POST :
495497 if (column == null || column .isEmpty ()) {
496498 throw new IllegalArgumentException ("POST 请求必须在Table内设置要保存的 key:value !" );
497499 }
498500
499- if ( isPrepared ()) { //不能通过 ? 来代替,SELECT 'id','name' 返回的就是 id:"id", name:"name",而不是数据库里的值!
500- for ( String c : column ) {
501- if ( StringUtil . isName ( c ) == false ) {
502- throw new IllegalArgumentException ( "POST请求: 每一个 key:value 中的key都必须是1个单词!" );
503- }
501+ String s = "" ;
502+ boolean pfirst = true ;
503+ for ( String c : column ) {
504+ if ( isPrepared () && StringUtil . isName ( c ) == false ) { //不能通过 ? 来代替,SELECT 'id','name' 返回的就是 id:"id", name:"name",而不是数据库里的值!
505+ throw new IllegalArgumentException ( "POST请求: 每一个 key:value 中的key都必须是1个单词!" );
504506 }
507+ s += ((pfirst ? "" : "," ) + getKey (c ));
508+
509+ pfirst = false ;
505510 }
506511
507- return "(" + StringUtil . getString ( column . toArray ()) + ")" ;
512+ return "(" + s + ")" ;
508513 case GET :
509514 case GETS :
510515 boolean isQuery = RequestMethod .isQueryMethod (method );
@@ -1015,7 +1020,7 @@ else if ("!".equals(ce.getKey())) {
10151020
10161021 SQLConfig jc ;
10171022 String js ;
1018-
1023+
10191024 boolean changed = false ;
10201025 //各种 JOIN 没办法统一用 & | !连接,只能按优先级,和 @combine 一样?
10211026 for (Join j : joinList ) {
@@ -1204,7 +1209,7 @@ public String getCompareString(String key, Object value, String type) throws Exc
12041209 if (StringUtil .isName (key ) == false ) {
12051210 throw new IllegalArgumentException (key + type + ":value 中key不合法!比较运算 [>, <, >=, <=] 不支持 [&, !, |] 中任何逻辑运算符 !" );
12061211 }
1207-
1212+
12081213 return getKey (key ) + " " + type + " " + (value instanceof Subquery ? getSubqueryString ((Subquery ) value ) : getValue (value ));
12091214 }
12101215
@@ -1349,6 +1354,9 @@ public String getRegExpString(String key, Object[] values, int type, boolean ign
13491354 */
13501355 @ JSONField (serialize = false )
13511356 public String getRegExpString (String key , String value , boolean ignoreCase ) {
1357+ if (DATABASE_POSTGRESQL .equals (getDatabase ())) {
1358+ return getKey (key ) + " ~" + (ignoreCase ? "* " : " " ) + getValue (value );
1359+ }
13521360 return getKey (key ) + " REGEXP " + (ignoreCase ? "" : "BINARY " ) + getValue (value );
13531361 }
13541362 //~ regexp >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -1583,14 +1591,20 @@ public String getContainString(String key, Object[] childs, int type) throws Ill
15831591 if (childs [i ] instanceof String ) {
15841592 childs [i ] = "\" " + childs [i ] + "\" " ;
15851593 }
1586- condition += (i <= 0 ? "" : (Logic .isAnd (type ) ? AND : OR ))
1587- + "json_contains(" + getKey (key ) + ", " + getValue (childs [i ]) + ")" ;
1594+
1595+ if (DATABASE_POSTGRESQL .equalsIgnoreCase (getDatabase ())) {
1596+ condition += (i <= 0 ? "" : (Logic .isAnd (type ) ? AND : OR ))
1597+ + getKey (key ) + " @> " + getValue (childs [i ]);
1598+ } else {
1599+ condition += (i <= 0 ? "" : (Logic .isAnd (type ) ? AND : OR ))
1600+ + "json_contains(" + getKey (key ) + ", " + getValue (childs [i ]) + ")" ;
1601+ }
15881602 }
15891603 }
15901604 if (condition .isEmpty ()) {
1591- condition = (SQL .isNull (key , true ) + OR + getLikeString (key , "[]" )); // key = '[]' 无结果!
1605+ condition = (getKey ( key ) + SQL .isNull (true ) + OR + getLikeString (key , "[]" )); // key = '[]' 无结果!
15921606 } else {
1593- condition = (SQL .isNull (key , false ) + AND + "(" + condition + ")" );
1607+ condition = (getKey ( key ) + SQL .isNull (false ) + AND + "(" + condition + ")" );
15941608 }
15951609 }
15961610 if (condition .isEmpty ()) {
@@ -1692,7 +1706,7 @@ public String getSetString(RequestMethod method, Map<String, Object> content, bo
16921706 value = content .get (key );
16931707 key = getRealKey (method , key , false , true , verifyName , quote );
16941708
1695- setString += (isFirst ? "" : ", " ) + (key + "=" + (keyType == 1 ? getAddString (key , value ) : (keyType == 2
1709+ setString += (isFirst ? "" : ", " ) + (getKey ( key ) + "=" + (keyType == 1 ? getAddString (key , value ) : (keyType == 2
16961710 ? getRemoveString (key , value ) : getValue (value )) ) );
16971711
16981712 isFirst = false ;
@@ -1714,10 +1728,10 @@ public String getSetString(RequestMethod method, Map<String, Object> content, bo
17141728 @ JSONField (serialize = false )
17151729 public String getAddString (String key , Object value ) throws IllegalArgumentException {
17161730 if (value instanceof Number ) {
1717- return key + " + " + value ;
1731+ return getKey ( key ) + " + " + value ;
17181732 }
17191733 if (value instanceof String ) {
1720- return " CONCAT (" + key + ", " + getValue (value ) + ") " ;
1734+ return " CONCAT (" + getKey ( key ) + ", " + getValue (value ) + ") " ;
17211735 }
17221736 throw new IllegalArgumentException (key + "+ 对应的值 " + value + " 不是Number,String,Array中的任何一种!" );
17231737 }
@@ -1730,10 +1744,10 @@ public String getAddString(String key, Object value) throws IllegalArgumentExcep
17301744 @ JSONField (serialize = false )
17311745 public String getRemoveString (String key , Object value ) throws IllegalArgumentException {
17321746 if (value instanceof Number ) {
1733- return key + " - " + value ;
1747+ return getKey ( key ) + " - " + value ;
17341748 }
17351749 if (value instanceof String ) {
1736- return SQL .replace (key , (String ) getValue (value ), "" );// " replace(" + key + ", '" + value + "', '') ";
1750+ return SQL .replace (getKey ( key ) , (String ) getValue (value ), "" );// " replace(" + key + ", '" + value + "', '') ";
17371751 }
17381752 throw new IllegalArgumentException (key + "- 对应的值 " + value + " 不是Number,String,Array中的任何一种!" );
17391753 }
@@ -1868,10 +1882,12 @@ public String getJoinString() throws Exception {
18681882
18691883 jt = jc .getTable ();
18701884 tn = j .getTargetName ();
1871- if (DATABASE_POSTGRESQL .equalsIgnoreCase (getDatabase ())) {
1872- jt = jt .toLowerCase ();
1873- tn = tn .toLowerCase ();
1874- }
1885+
1886+ //如果要强制小写,则可在子类重写这个方法再 toLowerCase
1887+ // if (DATABASE_POSTGRESQL.equalsIgnoreCase(getDatabase())) {
1888+ // jt = jt.toLowerCase();
1889+ // tn = tn.toLowerCase();
1890+ // }
18751891
18761892 switch (j .getJoinType ()) { //TODO $ SELF JOIN
18771893 // case "@": // APP JOIN
0 commit comments