@@ -157,7 +157,7 @@ public abstract class AbstractSQLConfig<T extends Object> implements SQLConfig<T
157
157
// TODO 改成更好的正则,校验前面为单词,中间为操作符,后面为值
158
158
PATTERN_FUNCTION = Pattern .compile ("^[A-Za-z0-9%,:_@&~`!=\\ <\\ >\\ |\\ [\\ ]\\ {\\ } /\\ .\\ +\\ -\\ *\\ ^\\ ?\\ (\\ )\\ $]+$" );
159
159
160
- TABLE_KEY_MAP = new HashMap <String , String >();
160
+ TABLE_KEY_MAP = new HashMap <>();
161
161
TABLE_KEY_MAP .put (Table .class .getSimpleName (), Table .TABLE_NAME );
162
162
TABLE_KEY_MAP .put (Column .class .getSimpleName (), Column .TABLE_NAME );
163
163
TABLE_KEY_MAP .put (PgClass .class .getSimpleName (), PgClass .TABLE_NAME );
@@ -195,9 +195,15 @@ public abstract class AbstractSQLConfig<T extends Object> implements SQLConfig<T
195
195
DATABASE_LIST .add (DATABASE_HIVE );
196
196
DATABASE_LIST .add (DATABASE_PRESTO );
197
197
DATABASE_LIST .add (DATABASE_TRINO );
198
+ DATABASE_LIST .add (DATABASE_MILVUS );
198
199
DATABASE_LIST .add (DATABASE_INFLUXDB );
199
200
DATABASE_LIST .add (DATABASE_TDENGINE );
201
+ DATABASE_LIST .add (DATABASE_SNOWFLAKE );
202
+ DATABASE_LIST .add (DATABASE_DATABRICKS );
200
203
DATABASE_LIST .add (DATABASE_REDIS );
204
+ DATABASE_LIST .add (DATABASE_MONGODB );
205
+ DATABASE_LIST .add (DATABASE_CASSANDRA );
206
+ DATABASE_LIST .add (DATABASE_KAFKA );
201
207
DATABASE_LIST .add (DATABASE_MQ );
202
208
203
209
RAW_MAP = new LinkedHashMap <>(); // 保证顺序,避免配置冲突等意外情况
@@ -1189,6 +1195,14 @@ public static boolean isPresto(String db) {
1189
1195
return DATABASE_PRESTO .equals (db );
1190
1196
}
1191
1197
1198
+ @ Override
1199
+ public boolean isTrino () {
1200
+ return isTrino (getSQLDatabase ());
1201
+ }
1202
+ public static boolean isTrino (String db ) {
1203
+ return DATABASE_TRINO .equals (db );
1204
+ }
1205
+
1192
1206
@ Override
1193
1207
public boolean isSnowflake () {
1194
1208
return isSnowflake (getSQLDatabase ());
@@ -1214,11 +1228,11 @@ public static boolean isCassandra(String db) {
1214
1228
}
1215
1229
1216
1230
@ Override
1217
- public boolean isTrino () {
1218
- return isTrino (getSQLDatabase ());
1231
+ public boolean isMilvus () {
1232
+ return isMilvus (getSQLDatabase ());
1219
1233
}
1220
- public static boolean isTrino (String db ) {
1221
- return DATABASE_TRINO .equals (db );
1234
+ public static boolean isMilvus (String db ) {
1235
+ return DATABASE_MILVUS .equals (db );
1222
1236
}
1223
1237
1224
1238
@ Override
@@ -1245,20 +1259,36 @@ public static boolean isRedis(String db) {
1245
1259
return DATABASE_REDIS .equals (db );
1246
1260
}
1247
1261
1262
+ @ Override
1263
+ public boolean isMongoDB () {
1264
+ return isMongoDB (getSQLDatabase ());
1265
+ }
1266
+ public static boolean isMongoDB (String db ) {
1267
+ return DATABASE_MONGODB .equals (db );
1268
+ }
1269
+
1270
+ @ Override
1271
+ public boolean isKafka () {
1272
+ return isKafka (getSQLDatabase ());
1273
+ }
1274
+ public static boolean isKafka (String db ) {
1275
+ return DATABASE_KAFKA .equals (db );
1276
+ }
1277
+
1248
1278
@ Override
1249
1279
public boolean isMQ () {
1250
1280
return isMQ (getSQLDatabase ());
1251
1281
}
1252
1282
public static boolean isMQ (String db ) {
1253
- return DATABASE_MQ .equals (db );
1283
+ return DATABASE_MQ .equals (db ) || isKafka ( db ) ;
1254
1284
}
1255
1285
1256
1286
@ Override
1257
1287
public String getQuote () {
1258
1288
if (isElasticsearch ()) {
1259
1289
return "" ;
1260
1290
}
1261
- return isMySQL () || isMariaDB () || isTiDB () || isClickHouse () || isTDengine () ? "`" : "\" " ;
1291
+ return isMySQL () || isMariaDB () || isTiDB () || isClickHouse () || isTDengine () || isMilvus () ? "`" : "\" " ;
1262
1292
}
1263
1293
1264
1294
public String quote (String s ) {
@@ -1272,6 +1302,7 @@ public String getSchema() {
1272
1302
}
1273
1303
1274
1304
@ NotNull
1305
+ @ Override
1275
1306
public String getSQLSchema () {
1276
1307
String table = getTable ();
1277
1308
//强制,避免因为全局默认的 @schema 自动填充进来,导致这几个类的 schema 为 sys 等其它值
@@ -1953,14 +1984,14 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
1953
1984
}
1954
1985
1955
1986
// 简单点, 后台配置就带上 AS
1956
- // int index = expression.lastIndexOf(":");
1957
- // String alias = expression.substring(index+1);
1958
- // boolean hasAlias = StringUtil.isName(alias);
1959
- // String pre = index > 0 && hasAlias ? expression.substring(0, index) : expression;
1960
- // if (RAW_MAP.containsValue(pre) || "".equals(RAW_MAP.get(pre))) { // newSQLConfig 提前处理好的
1961
- // expression = pre + (hasAlias ? " AS " + alias : "");
1962
- // continue;
1963
- // }
1987
+ int index = expression .lastIndexOf (":" );
1988
+ String alias = expression .substring (index +1 );
1989
+ boolean hasAlias = StringUtil .isName (alias );
1990
+ String pre = index > 0 && hasAlias ? expression .substring (0 , index ) : expression ;
1991
+ if (RAW_MAP .containsValue (pre ) || "" .equals (RAW_MAP .get (pre ))) { // newSQLConfig 提前处理好的
1992
+ keys [ i ] = pre + (hasAlias ? " AS " + alias : "" );
1993
+ continue ;
1994
+ }
1964
1995
}
1965
1996
1966
1997
if (expression .length () > 100 ) {
@@ -2001,6 +2032,16 @@ public String parseSQLExpression(String key, String expression, boolean containR
2001
2032
* @return
2002
2033
*/
2003
2034
public String parseSQLExpression (String key , String expression , boolean containRaw , boolean allowAlias , String example ) {
2035
+ if (containRaw ) {
2036
+ String s = RAW_MAP .get (expression );
2037
+ if ("" .equals (s )) {
2038
+ return expression ;
2039
+ }
2040
+ if (s != null ) {
2041
+ return s ;
2042
+ }
2043
+ }
2044
+
2004
2045
String quote = getQuote ();
2005
2046
int start = expression .indexOf ('(' );
2006
2047
if (start < 0 ) {
@@ -2578,9 +2619,22 @@ public static int getOffset(int page, int count) {
2578
2619
*/
2579
2620
@ JSONField (serialize = false )
2580
2621
public String getLimitString () {
2581
- if (count <= 0 || RequestMethod .isHeadMethod (getMethod (), true )) {
2622
+ int count = getCount ();
2623
+
2624
+ if (isMilvus ()) {
2625
+ if (count == 0 ) {
2626
+ Parser <T > parser = getParser ();
2627
+ count = parser == null ? AbstractParser .MAX_QUERY_COUNT : parser .getMaxQueryCount ();
2628
+ }
2629
+
2630
+ int offset = getOffset (getPage (), count );
2631
+ return " LIMIT " + offset + ", " + count ; // 目前 moql-transx 的限制
2632
+ }
2633
+
2634
+ if (count <= 0 || RequestMethod .isHeadMethod (getMethod (), true )) { // TODO HEAD 真的不需要 LIMIT ?
2582
2635
return "" ;
2583
2636
}
2637
+
2584
2638
return getLimitString (
2585
2639
getPage ()
2586
2640
, getCount ()
0 commit comments