| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 112d8dd commit 6d4fc16
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1185,31 +1185,31 @@ public boolean isKingBase() { | |||
| 1185 | 1185 | return isKingBase(gainSQLDatabase()); | |
| 1186 | 1186 | } | |
| 1187 | 1187 | public static boolean isKingBase(String db) { | |
| 1188 | - return DATABASE_KINGBASE.equals(db) || isKingBaseMySQL(db) || isKingBaseOracle(db) || isKingBaseSQLServer(db); | ||
| 1188 | + return KingbaseSQLDialect.from(db).isKingbase(); | ||
| 1189 | 1189 | } | |
| 1190 | 1190 | ||
| 1191 | 1191 | @Override | |
| 1192 | 1192 | public boolean isKingBaseMySQL() { | |
| 1193 | 1193 | return isKingBaseMySQL(gainSQLDatabase()); | |
| 1194 | 1194 | } | |
| 1195 | 1195 | public static boolean isKingBaseMySQL(String db) { | |
| 1196 | - return DATABASE_KINGBASE_MYSQL.equals(db); | ||
| 1196 | + return KingbaseSQLDialect.from(db).isMySQL(); | ||
| 1197 | 1197 | } | |
| 1198 | 1198 | ||
| 1199 | 1199 | @Override | |
| 1200 | 1200 | public boolean isKingBaseOracle() { | |
| 1201 | 1201 | return isKingBaseOracle(gainSQLDatabase()); | |
| 1202 | 1202 | } | |
| 1203 | 1203 | public static boolean isKingBaseOracle(String db) { | |
| 1204 | - return DATABASE_KINGBASE_ORACLE.equals(db); | ||
| 1204 | + return KingbaseSQLDialect.from(db).isOracle(); | ||
| 1205 | 1205 | } | |
| 1206 | 1206 | ||
| 1207 | 1207 | @Override | |
| 1208 | 1208 | public boolean isKingBaseSQLServer() { | |
| 1209 | 1209 | return isKingBaseSQLServer(gainSQLDatabase()); | |
| 1210 | 1210 | } | |
| 1211 | 1211 | public static boolean isKingBaseSQLServer(String db) { | |
| 1212 | - return DATABASE_KINGBASE_SQLSERVER.equals(db); | ||
| 1212 | + return KingbaseSQLDialect.from(db).isSQLServer(); | ||
| 1213 | 1213 | } | |
| 1214 | 1214 | ||
| 1215 | 1215 | @Override | |
@@ -1426,7 +1426,11 @@ public String getQuote() { // MongoDB 同时支持 `tbl` 反引号 和 "col" | |||
| 1426 | 1426 | if(isElasticsearch() || isManticore() || isIoTDB() || isSurrealDB()) { | |
| 1427 | 1427 | return ""; | |
| 1428 | 1428 | } | |
| 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() ? "`" : "\""; | ||
| 1430 | 1434 | } | |
| 1431 | 1435 | ||
| 1432 | 1436 | public String quote(String s) { | |
@@ -3110,6 +3114,12 @@ else if (isSurrealDB()) { | |||
| 3110 | 3114 | } | |
| 3111 | 3115 | } | |
| 3112 | 3116 | ||
| 3117 | + KingbaseSQLDialect kingbaseDialect = KingbaseSQLDialect.from(gainSQLDatabase()); | ||
| 3118 | + String kingbaseLimit = kingbaseDialect.getSelectLimit(getOffset(page, count), count); | ||
| 3119 | + if (kingbaseLimit != null) { | ||
| 3120 | + return kingbaseLimit; | ||
| 3121 | + } | ||
| 3122 | + | ||
| 3113 | 3123 | boolean isOracle = isOracle(); | |
| 3114 | 3124 | return gainLimitString(page, count, isTSQL(), isOracle || isDameng() || isKingBaseOracle(), isPresto() || isTrino()); | |
| 3115 | 3125 | } | |
@@ -4662,10 +4672,10 @@ public String gainContainString(String key, String column, Object[] childs, int | |||
| 4662 | 4672 | condition += (gainKey(column) + " @> " + gainValue(key, column, newJSONArray(c))); | |
| 4663 | 4673 | // operator does not exist: jsonb @> character varying "[" + c + "]"); | |
| 4664 | 4674 | } | |
| 4665 | - else if (isKingBase()) { | ||
| 4675 | + else if (isKingBase() && isKingBaseOracle() == false) { | ||
| 4666 | 4676 | condition += (gainKey(column) + "::jsonb @> " + gainValue(key, column, newJSONArray(c)) + "::jsonb"); | |
| 4667 | 4677 | } | |
| 4668 | - else if (isOracle() || isDameng()) { | ||
| 4678 | + else if (isOracle() || isDameng() || isKingBaseOracle()) { | ||
| 4669 | 4679 | condition += ("json_textcontains(" + gainKey(column) + ", " + (StringUtil.isEmpty(path, true) | |
| 4670 | 4680 | ? "'$'" : gainValue(key, column, path)) + ", " + gainValue(key, column, c == null ? null : c.toString()) + ")"); | |
| 4671 | 4681 | } | |
@@ -5029,20 +5039,23 @@ public static <T, M extends Map<String, Object>, L extends List<Object>> String | |||
| 5029 | 5039 | return "ALTER TABLE " + tablePath + " UPDATE" + config.gainSetString() + config.gainWhereString(true); | |
| 5030 | 5040 | } | |
| 5031 | 5041 | 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() : ""); | ||
| 5033 | 5043 | cSql = buildWithAsExprSql(config, cSql); | |
| 5034 | 5044 | return cSql; | |
| 5035 | 5045 | case DELETE: | |
| 5036 | 5046 | if(config.isClickHouse()){ | |
| 5037 | 5047 | return "ALTER TABLE " + tablePath + " DELETE" + config.gainWhereString(true); | |
| 5038 | 5048 | } | |
| 5039 | 5049 | 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 | ||
| 5041 | 5051 | cSql = buildWithAsExprSql(config, cSql); | |
| 5042 | 5052 | return cSql; | |
| 5043 | 5053 | 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 "))) : ""; | ||
| 5046 | 5059 | if (config.isTest() && RequestMethod.isGetMethod(config.getMethod(), true)) { // FIXME 为啥是 code 而不是 count ? | |
| 5047 | 5060 | String q = config.getQuote(); // 生成 SELECT ( (24 >=0 AND 24 <3) ) AS `code` LIMIT 1 OFFSET 0 | |
| 5048 | 5061 | return explain + "SELECT " + config.gainWhereString(false) | |
@@ -5459,11 +5472,11 @@ else if ("{}".equals(rt) || "<>".equals(rt)) { | |||
| 5459 | 5472 | sql += (first ? ON : AND) + (isNot ? "( " : "") + gainCondition(isNot, arrKeyPath | |
| 5460 | 5473 | + " IS NOT NULL AND " + arrKeyPath + " @> " + itemKeyPath) + (isNot ? ") " : ""); | |
| 5461 | 5474 | } | |
| 5462 | - else if (isKingBase()) { | ||
| 5475 | + else if (isKingBase() && isKingBaseOracle() == false) { | ||
| 5463 | 5476 | sql += (first ? ON : AND) + (isNot ? "( " : "") + gainCondition(isNot, arrKeyPath | |
| 5464 | 5477 | + " IS NOT NULL AND " + arrKeyPath + "::jsonb @> " + itemKeyPath + "::jsonb") + (isNot ? ") " : ""); | |
| 5465 | 5478 | } | |
| 5466 | - else if (isOracle() || isDameng()) { | ||
| 5479 | + else if (isOracle() || isDameng() || isKingBaseOracle()) { | ||
| 5467 | 5480 | sql += (first ? ON : AND) + (isNot ? "( " : "") + gainCondition(isNot, arrKeyPath | |
| 5468 | 5481 | + " IS NOT NULL AND json_textcontains(" + arrKeyPath | |
| 5469 | 5482 | + ", '$', " + itemKeyPath + ")") + (isNot ? ") " : ""); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments