FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

fix: improve Kingbase compatibility · APIJSON/APIJSON@6d4fc16 · GitHub

Commit 6d4fc16

Browse files
authored andcommitted
fix: improve Kingbase compatibility
1 parent 112d8dd commit 6d4fc16

4 files changed

Lines changed: 1051 additions & 58 deletions

File tree

‎APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java‎

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)

Back | FazBrowse Home | New Git URL