@@ -1185,31 +1185,31 @@ public boolean isKingBase() {
11851185 return isKingBase (gainSQLDatabase ());
11861186 }
11871187 public static boolean isKingBase (String db ) {
1188- return DATABASE_KINGBASE . equals (db ) || isKingBaseMySQL ( db ) || isKingBaseOracle ( db ) || isKingBaseSQLServer ( db );
1188+ return KingbaseSQLDialect . from (db ). isKingbase ( );
11891189 }
11901190
11911191 @ Override
11921192 public boolean isKingBaseMySQL () {
11931193 return isKingBaseMySQL (gainSQLDatabase ());
11941194 }
11951195 public static boolean isKingBaseMySQL (String db ) {
1196- return DATABASE_KINGBASE_MYSQL . equals (db );
1196+ return KingbaseSQLDialect . from (db ). isMySQL ( );
11971197 }
11981198
11991199 @ Override
12001200 public boolean isKingBaseOracle () {
12011201 return isKingBaseOracle (gainSQLDatabase ());
12021202 }
12031203 public static boolean isKingBaseOracle (String db ) {
1204- return DATABASE_KINGBASE_ORACLE . equals (db );
1204+ return KingbaseSQLDialect . from (db ). isOracle ( );
12051205 }
12061206
12071207 @ Override
12081208 public boolean isKingBaseSQLServer () {
12091209 return isKingBaseSQLServer (gainSQLDatabase ());
12101210 }
12111211 public static boolean isKingBaseSQLServer (String db ) {
1212- return DATABASE_KINGBASE_SQLSERVER . equals (db );
1212+ return KingbaseSQLDialect . from (db ). isSQLServer ( );
12131213 }
12141214
12151215 @ Override
@@ -1426,7 +1426,11 @@ public String getQuote() { // MongoDB 同时支持 `tbl` 反引号 和 "col"
14261426 if (isElasticsearch () || isManticore () || isIoTDB () || isSurrealDB ()) {
14271427 return "" ;
14281428 }
1429- return isMySQL () || isMariaDB () || isTiDB () || isClickHouse () || isTDengine () || isMilvus () || isDoris () || isStarRocks () || isKingBaseMySQL () ? "`" : "\" " ;
1429+ KingbaseSQLDialect kingbaseDialect = KingbaseSQLDialect .from (gainSQLDatabase ());
1430+ if (kingbaseDialect .isKingbase ()) {
1431+ return kingbaseDialect .getIdentifierQuote ();
1432+ }
1433+ return isMySQL () || isMariaDB () || isTiDB () || isClickHouse () || isTDengine () || isMilvus () || isDoris () || isStarRocks () ? "`" : "\" " ;
14301434 }
14311435
14321436 public String quote (String s ) {
@@ -3110,6 +3114,12 @@ else if (isSurrealDB()) {
31103114 }
31113115 }
31123116
3117+ KingbaseSQLDialect kingbaseDialect = KingbaseSQLDialect .from (gainSQLDatabase ());
3118+ String kingbaseLimit = kingbaseDialect .getSelectLimit (getOffset (page , count ), count );
3119+ if (kingbaseLimit != null ) {
3120+ return kingbaseLimit ;
3121+ }
3122+
31133123 boolean isOracle = isOracle ();
31143124 return gainLimitString (page , count , isTSQL (), isOracle || isDameng () || isKingBaseOracle (), isPresto () || isTrino ());
31153125 }
@@ -4662,10 +4672,10 @@ public String gainContainString(String key, String column, Object[] childs, int
46624672 condition += (gainKey (column ) + " @> " + gainValue (key , column , newJSONArray (c )));
46634673 // operator does not exist: jsonb @> character varying "[" + c + "]");
46644674 }
4665- else if (isKingBase ()) {
4675+ else if (isKingBase () && isKingBaseOracle () == false ) {
46664676 condition += (gainKey (column ) + "::jsonb @> " + gainValue (key , column , newJSONArray (c )) + "::jsonb" );
46674677 }
4668- else if (isOracle () || isDameng ()) {
4678+ else if (isOracle () || isDameng () || isKingBaseOracle () ) {
46694679 condition += ("json_textcontains(" + gainKey (column ) + ", " + (StringUtil .isEmpty (path , true )
46704680 ? "'$'" : gainValue (key , column , path )) + ", " + gainValue (key , column , c == null ? null : c .toString ()) + ")" );
46714681 }
@@ -5029,20 +5039,23 @@ public static <T, M extends Map<String, Object>, L extends List<Object>> String
50295039 return "ALTER TABLE " + tablePath + " UPDATE" + config .gainSetString () + config .gainWhereString (true );
50305040 }
50315041 cSql = "UPDATE " + tablePath + config .gainSetString () + config .gainWhereString (true )
5032- + (config .isMySQL () || config .isKingBaseMySQL () ? config .gainLimitString () : "" );
5042+ + (config .isMySQL () || KingbaseSQLDialect . from ( config .gainSQLDatabase ()). supportsDmlLimit () ? config .gainLimitString () : "" );
50335043 cSql = buildWithAsExprSql (config , cSql );
50345044 return cSql ;
50355045 case DELETE :
50365046 if (config .isClickHouse ()){
50375047 return "ALTER TABLE " + tablePath + " DELETE" + config .gainWhereString (true );
50385048 }
50395049 cSql = "DELETE FROM " + tablePath + config .gainWhereString (true )
5040- + (config .isMySQL () || config .isKingBaseMySQL () ? config .gainLimitString () : "" ); // PostgreSQL 不允许 LIMIT
5050+ + (config .isMySQL () || KingbaseSQLDialect . from ( config .gainSQLDatabase ()). supportsDmlLimit () ? config .gainLimitString () : "" ); // PostgreSQL 不允许 LIMIT
50415051 cSql = buildWithAsExprSql (config , cSql );
50425052 return cSql ;
50435053 default :
5044- String explain = config .isExplain () ? (config .isSQLServer () || config .isKingBaseSQLServer () ? "SET STATISTICS PROFILE ON "
5045- : (config .isOracle () || config .isDameng () || config .isKingBaseOracle () ? "EXPLAIN PLAN FOR " : "EXPLAIN " )) : "" ;
5054+ KingbaseSQLDialect kingbaseDialect = KingbaseSQLDialect .from (config .gainSQLDatabase ());
5055+ String kingbaseExplain = kingbaseDialect .getExplainPrefix ();
5056+ String explain = config .isExplain () ? (kingbaseExplain != null ? kingbaseExplain
5057+ : (config .isSQLServer () ? "SET STATISTICS PROFILE ON "
5058+ : (config .isOracle () || config .isDameng () ? "EXPLAIN PLAN FOR " : "EXPLAIN " ))) : "" ;
50465059 if (config .isTest () && RequestMethod .isGetMethod (config .getMethod (), true )) { // FIXME 为啥是 code 而不是 count ?
50475060 String q = config .getQuote (); // 生成 SELECT ( (24 >=0 AND 24 <3) ) AS `code` LIMIT 1 OFFSET 0
50485061 return explain + "SELECT " + config .gainWhereString (false )
@@ -5459,11 +5472,11 @@ else if ("{}".equals(rt) || "<>".equals(rt)) {
54595472 sql += (first ? ON : AND ) + (isNot ? "( " : "" ) + gainCondition (isNot , arrKeyPath
54605473 + " IS NOT NULL AND " + arrKeyPath + " @> " + itemKeyPath ) + (isNot ? ") " : "" );
54615474 }
5462- else if (isKingBase ()) {
5475+ else if (isKingBase () && isKingBaseOracle () == false ) {
54635476 sql += (first ? ON : AND ) + (isNot ? "( " : "" ) + gainCondition (isNot , arrKeyPath
54645477 + " IS NOT NULL AND " + arrKeyPath + "::jsonb @> " + itemKeyPath + "::jsonb" ) + (isNot ? ") " : "" );
54655478 }
5466- else if (isOracle () || isDameng ()) {
5479+ else if (isOracle () || isDameng () || isKingBaseOracle () ) {
54675480 sql += (first ? ON : AND ) + (isNot ? "( " : "" ) + gainCondition (isNot , arrKeyPath
54685481 + " IS NOT NULL AND json_textcontains(" + arrKeyPath
54695482 + ", '$', " + itemKeyPath + ")" ) + (isNot ? ") " : "" );
0 commit comments