diff --git a/README.md b/README.md
index 47cc8881d..b32f41886 100644
--- a/README.md
+++ b/README.md
@@ -46,14 +46,14 @@ https://github.com/sagframe/sqltoy-online-doc/blob/master/docs/sqltoy/search.md
# 码云地址: https://gitee.com/sagacity/sagacity-sqltoy
# 最新版本
-* 5.6.10 LTS (jdk17+/springboot3.x)/5.6.10.jre8 (兼容5.2.x/5.3.x版本) 发版日期: 2024-5-27
+* 5.6.11 LTS (jdk17+/springboot3.x)/5.6.11.jre8 (兼容5.2.x/5.3.x版本) 发版日期: 2024-7-12
```xml
com.sagframe
sagacity-sqltoy-spring-starter
-
- 5.6.10
+
+ 5.6.11
```
* 5.2.105 LTS (jdk1.8+) 发版日期: 2024-6-6
diff --git a/trunk/sqltoy-orm-core/pom.xml b/trunk/sqltoy-orm-core/pom.xml
index feb327933..01ac141c4 100644
--- a/trunk/sqltoy-orm-core/pom.xml
+++ b/trunk/sqltoy-orm-core/pom.xml
@@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.sagframe
- 5.6.11.RC4
+ 5.6.11
sagacity-sqltoy
sqltoy core code
sagacity-sqltoy
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java
index 04e65f3ae..54ba5c787 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java
@@ -2,6 +2,7 @@
import static java.lang.System.out;
+import java.lang.reflect.Proxy;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -327,6 +328,10 @@ public static String getFirstTrace() {
// 避免异常发生
if (i + 1 < length) {
traceElement = stackTraceElements[i + 1];
+ //判断是否代理类,是代理类继续向上推一层
+ if ((i + 2) < length && Proxy.isProxyClass(traceElement.getClass())) {
+ traceElement = stackTraceElements[i + 2];
+ }
className = traceElement.getClassName();
method = traceElement.getMethodName();
lineNumber = traceElement.getLineNumber();
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/dialect/utils/DialectExtUtils.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/dialect/utils/DialectExtUtils.java
index 76f5a310e..ac99c273c 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/dialect/utils/DialectExtUtils.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/dialect/utils/DialectExtUtils.java
@@ -463,7 +463,7 @@ public static String mergeIgnore(IUnifyFieldsHandler unifyFieldsHandler, Integer
}
/**
- * @TODO 针对postgresql\kingbase\guassdb等数据库
+ * @TODO 针对postgresql\kingbase\guassdb\mogdb等数据库
* @param unifyFieldsHandler
* @param dbType
* @param entityMeta
@@ -487,7 +487,8 @@ public static String insertIgnore(IUnifyFieldsHandler unifyFieldsHandler, Intege
StringBuilder values = new StringBuilder(columnSize * 2 - 1);
if (dbType == DBType.GAUSSDB) {
sql.append("insert ignore into ");
- } else {
+ } // mogdb支持insert into do nothing
+ else {
sql.append("insert into ");
}
sql.append(entityMeta.getSchemaTable(tableName, dbType));
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/FunctionUtils.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/FunctionUtils.java
index d77257973..2411ee58f 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/FunctionUtils.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/FunctionUtils.java
@@ -117,7 +117,11 @@ private static String replaceFunction(String sqlContent, int dbType, IFunction f
if (StringUtil.matches(functionParams, function.regex())) {
functionParams = replaceFunction(functionParams, dbType, function);
}
- args = StringUtil.splitExcludeSymMark(functionParams, ",", SqlToyConstants.filters);
+ if (functionParams == null || functionParams.trim().equals("")) {
+ args = null;
+ } else {
+ args = StringUtil.splitExcludeSymMark(functionParams, ",", SqlToyConstants.filters);
+ }
} else {
args = null;
endMarkIndex = matcher.end() - 1;
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Concat.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Concat.java
index efd883808..4832874a5 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Concat.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Concat.java
@@ -24,7 +24,7 @@ public class Concat extends IFunction {
*/
@Override
public String dialects() {
- return "oracle";
+ return super.ALL;
}
/*
@@ -45,20 +45,20 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length < 3) {
+ return super.IGNORE;
+ }
// 只针对oracle数据库,其他数据库原样返回
- if (dialect == DBType.ORACLE || dialect == DBType.OCEANBASE || dialect == DBType.DM
- || dialect == DBType.ORACLE11) {
- // 超过2个参数
- if (args != null && args.length > 2) {
- StringBuilder result = new StringBuilder();
- for (int i = 0; i < args.length; i++) {
- if (i > 0) {
- result.append("||");
- }
- result.append(args[i].replace("\\'", "''"));
+ if (dialect == DBType.ORACLE || dialect == DBType.ORACLE11) {
+ // 超过2个参数(oracle 支持2个参数
+ StringBuilder result = new StringBuilder();
+ for (int i = 0; i < args.length; i++) {
+ if (i > 0) {
+ result.append("||");
}
- return result.toString();
+ result.append(args[i].replace("\\'", "''"));
}
+ return result.toString();
}
return super.IGNORE;
}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ConcatWs.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ConcatWs.java
index 36c6e419f..3acf191a7 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ConcatWs.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ConcatWs.java
@@ -24,7 +24,7 @@ public class ConcatWs extends IFunction {
*/
@Override
public String dialects() {
- return "oracle";
+ return super.ALL;
}
/*
@@ -45,12 +45,11 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
- if (args.length < 2) {
+ if (args == null || args.length < 2) {
return super.IGNORE;
}
- // 只针对oracle数据库,其他数据库原样返回
- if (dialect == DBType.ORACLE || dialect == DBType.OCEANBASE || dialect == DBType.DM
- || dialect == DBType.ORACLE11) {
+ // oracle 不支持concat_ws
+ if (dialect == DBType.ORACLE || dialect == DBType.ORACLE11) {
StringBuilder result = new StringBuilder();
String split = args[0].replace("\\'", "''");
for (int i = 1; i < args.length; i++) {
@@ -60,6 +59,13 @@ public String wrap(int dialect, String functionName, boolean hasArgs, String...
result.append(args[i].replace("\\'", "''"));
}
return result.toString();
+ } else if (dialect == DBType.DM) {
+ String splitStr = args[0].trim();
+ // dm concat_ws不支持双引号包装分割符号
+ if (splitStr.startsWith("\"") && splitStr.endsWith("\"")) {
+ args[0] = "'" + splitStr.substring(1, splitStr.length() - 1) + "'";
+ return wrapArgs("concat_ws", args);
+ }
}
return super.IGNORE;
}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/DateFormat.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/DateFormat.java
index 0be792a58..a0a45df83 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/DateFormat.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/DateFormat.java
@@ -46,6 +46,9 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length < 2) {
+ return super.IGNORE;
+ }
String format;
switch (dialect) {
case DBType.POSTGRESQL:
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Decode.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Decode.java
index c9ad1f66e..b8aa87ab8 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Decode.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Decode.java
@@ -39,6 +39,9 @@ public String dialects() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length < 2) {
+ return super.IGNORE;
+ }
/*
* if (dialect == DBType.MYSQL || dialect == DBType.MYSQL8) { return
* wrapArgs("ELT", args); } else
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Instr.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Instr.java
index 6812846a3..ce2f0f3c7 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Instr.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Instr.java
@@ -45,6 +45,9 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length == 0) {
+ return super.IGNORE;
+ }
String[] realArgs;
String funLow = functionName.toLowerCase();
if ("position".equals(funLow)) {
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Length.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Length.java
index 1db365d87..0d6705f63 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Length.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Length.java
@@ -45,6 +45,9 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length == 0) {
+ return super.IGNORE;
+ }
String funLow = functionName.toLowerCase();
if (dialect == DBType.SQLSERVER) {
if ("datalength".equals(funLow)) {
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Nvl.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Nvl.java
index e1239cb1e..37309fe9a 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Nvl.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Nvl.java
@@ -47,6 +47,9 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length == 0) {
+ return super.IGNORE;
+ }
String funLow = functionName.toLowerCase();
if (dialect == DBType.SQLSERVER) {
return wrapArgs("isnull", args);
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/SubStr.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/SubStr.java
index 0373571ee..bbe791424 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/SubStr.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/SubStr.java
@@ -38,9 +38,12 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length == 0) {
+ return super.IGNORE;
+ }
if (dialect == DBType.POSTGRESQL || dialect == DBType.POSTGRESQL15 || dialect == DBType.GAUSSDB
|| dialect == DBType.MOGDB || dialect == DBType.SQLSERVER || dialect == DBType.H2) {
- if (dialect == DBType.SQLSERVER && args != null && args.length == 2) {
+ if (dialect == DBType.SQLSERVER && args.length == 2) {
return "substring(" + args[0] + "," + args[1] + ",len(" + args[0] + "))";
}
return wrapArgs("substring", args);
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToChar.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToChar.java
index 536a3731f..c90299c3e 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToChar.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToChar.java
@@ -29,7 +29,7 @@ public String dialects() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
- if (args.length == 1) {
+ if (args == null || args.length < 2) {
return super.IGNORE;
}
String format;
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToDate.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToDate.java
index 70c96a1ac..b60b0f2a2 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToDate.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToDate.java
@@ -19,7 +19,7 @@ public class ToDate extends IFunction {
@Override
public String dialects() {
- return "oracle,dm,mysql,sqlserver,h2";
+ return ALL;
}
/*
@@ -39,8 +39,11 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length == 0) {
+ return super.IGNORE;
+ }
if (dialect == DBType.SQLSERVER) {
- if (args != null && args.length == 1) {
+ if (args.length == 1) {
if (args[0].length() > 12) {
return "convert(datetime," + args[0] + ")";
}
@@ -48,26 +51,22 @@ public String wrap(int dialect, String functionName, boolean hasArgs, String...
}
}
if (dialect == DBType.ORACLE || dialect == DBType.ORACLE11) {
- if (args != null) {
- if (args.length > 1) {
- return wrapArgs("to_date", args);
+ if (args.length > 1) {
+ return wrapArgs("to_date", args);
+ } else {
+ if (args[0].length() > 12) {
+ return "to_date(" + args[0] + ",'yyyy-MM-dd HH:mm:ss')";
} else {
- if (args[0].length() > 12) {
- return "to_date(" + args[0] + ",'yyyy-MM-dd HH:mm:ss')";
- } else {
- return "to_date(" + args[0] + ",'yyyy-MM-dd')";
- }
+ return "to_date(" + args[0] + ",'yyyy-MM-dd')";
}
}
}
if (dialect == DBType.H2) {
- if (args != null) {
- if (args != null && args.length == 1) {
- if (args[0].length() > 12) {
- return "formatdatetime(" + args[0] + ",'yyyy-MM-dd HH:mm:ss')";
- } else {
- return "formatdatetime(" + args[0] + ",'yyyy-MM-dd')";
- }
+ if (args.length == 1) {
+ if (args[0].length() > 12) {
+ return "formatdatetime(" + args[0] + ",'yyyy-MM-dd HH:mm:ss')";
+ } else {
+ return "formatdatetime(" + args[0] + ",'yyyy-MM-dd')";
}
}
}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToNumber.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToNumber.java
index db5093ff4..1fa5d89cd 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToNumber.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/ToNumber.java
@@ -28,7 +28,7 @@ public Pattern regex() {
@Override
public String dialects() {
- return "db2,oracle,dm";
+ return ALL;
}
/*
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Trim.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Trim.java
index 815e55245..abe427848 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Trim.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/function/impl/Trim.java
@@ -45,6 +45,9 @@ public Pattern regex() {
*/
@Override
public String wrap(int dialect, String functionName, boolean hasArgs, String... args) {
+ if (args == null || args.length == 0) {
+ return super.IGNORE;
+ }
if (dialect == DBType.SQLSERVER) {
return "rtrim(ltrim(" + args[0] + "))";
}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/SqlUtil.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/SqlUtil.java
index e17eb58cb..ce8eff1ab 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/SqlUtil.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/SqlUtil.java
@@ -749,7 +749,10 @@ public static String clearMark(String sql) {
int markIndex = sql.indexOf("", markIndex);
- if (endMarkIndex == -1 || endMarkIndex == sql.length() - 3) {
+ // update 2024-7-8 兼容sql中存在收尾的情况
+ if (endMarkIndex == -1) {
+ break;
+ } else if (endMarkIndex == sql.length() - 3) {
sql = sql.substring(0, markIndex);
break;
} else {
@@ -761,7 +764,10 @@ public static String clearMark(String sql) {
markIndex = StringUtil.matchIndex(sql, maskPattern);
while (markIndex != -1) {
endMarkIndex = sql.indexOf("*/", markIndex);
- if (endMarkIndex == -1 || endMarkIndex == sql.length() - 2) {
+ // update 2024-7-8 兼容sql中存在/* 但没有*/收尾的情况
+ if (endMarkIndex == -1) {
+ break;
+ } else if (endMarkIndex == sql.length() - 2) {
sql = sql.substring(0, markIndex);
break;
} else {
diff --git a/trunk/sqltoy-orm-solon-plugin/pom.xml b/trunk/sqltoy-orm-solon-plugin/pom.xml
index 5e8191830..fad5d0879 100644
--- a/trunk/sqltoy-orm-solon-plugin/pom.xml
+++ b/trunk/sqltoy-orm-solon-plugin/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.sagframe
- 5.6.11.RC4
+ 5.6.11
sagacity-sqltoy-solon-plugin
sagacity-sqltoy-solon-plugin
@@ -16,8 +16,8 @@
UTF-8
- 2.8.4
- 1.6.4
+ 2.8.5
+ 1.6.5
3.12.14
2.0.13
3.1.8
diff --git a/trunk/sqltoy-orm-spring-starter/pom.xml b/trunk/sqltoy-orm-spring-starter/pom.xml
index 27e5abec9..e50ce13ba 100644
--- a/trunk/sqltoy-orm-spring-starter/pom.xml
+++ b/trunk/sqltoy-orm-spring-starter/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.sagframe
- 5.6.11.RC4
+ 5.6.11
sagacity-sqltoy-spring-starter
sagacity-sqltoy-spring-starter
sqltoy springboot starter
diff --git a/trunk/sqltoy-orm-spring/pom.xml b/trunk/sqltoy-orm-spring/pom.xml
index c97ed1f19..b4b4b9f64 100644
--- a/trunk/sqltoy-orm-spring/pom.xml
+++ b/trunk/sqltoy-orm-spring/pom.xml
@@ -3,14 +3,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.sagframe
- 5.6.11.RC4
+ 5.6.11
sagacity-sqltoy-spring
sagacity-sqltoy-spring
sagacity-sqltoy-spring
https://github.com/sagframe/sagacity-sqltoy
UTF-8
- 6.1.10
+ 6.1.11
3.2.7
3.2.7
4.2.7