|
@@ -10,6 +10,7 @@ import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.StringJoiner;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
public class QueryCondition implements IFormat {
|
|
|
|
|
@@ -50,27 +51,31 @@ public class QueryCondition implements IFormat {
|
|
|
|
|
|
@Override
|
|
|
public String toSql(Map<String, String> tableAliasMap, Map<String, Object> paramMap) {
|
|
|
- StringJoiner joiner;
|
|
|
- if (ObjectUtil.isEmpty(queryConditionConnectList)) {
|
|
|
- joiner = new StringJoiner(StringPool.EMPTY);
|
|
|
- if (ObjectUtil.isEmpty(value)) {
|
|
|
+
|
|
|
+ String connectStr = queryConditionConnectList.stream().map(item -> item.toSql(tableAliasMap, paramMap)).collect(Collectors.joining());
|
|
|
+ if (ObjectUtil.isEmpty(value)) {
|
|
|
+ if (ObjectUtil.isEmpty(connectStr)) {
|
|
|
return StringPool.EMPTY;
|
|
|
}
|
|
|
- } else {
|
|
|
- joiner = new StringJoiner(StringPool.EMPTY, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET);
|
|
|
- if (ObjectUtil.isEmpty(value)) {
|
|
|
- queryConditionConnectList.forEach(item -> joiner.add(item.toSql(tableAliasMap, paramMap)));
|
|
|
- String sql = joiner.toString();
|
|
|
- if (sql.indexOf(SqlConstant.AND) == 0) {
|
|
|
- return sql.substring(SqlConstant.AND.length());
|
|
|
- }
|
|
|
- if (sql.indexOf(SqlConstant.OR) == 0) {
|
|
|
- return sql.substring(SqlConstant.OR.length());
|
|
|
- }
|
|
|
- return sql;
|
|
|
+
|
|
|
+ if (connectStr.startsWith(SqlConstant.AND)) {
|
|
|
+ connectStr = connectStr.substring(SqlConstant.AND.length());
|
|
|
+ } else if (connectStr.startsWith(SqlConstant.OR)) {
|
|
|
+ connectStr = connectStr.substring(SqlConstant.OR.length());
|
|
|
+ } else {
|
|
|
+ return StringPool.EMPTY;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((connectStr.contains(SqlConstant.AND) || connectStr.contains(SqlConstant.OR))
|
|
|
+ && !connectStr.startsWith(StringPool.LEFT_BRACKET)
|
|
|
+ && !connectStr.endsWith(StringPool.RIGHT_BRACKET)) {
|
|
|
+ return StringPool.LEFT_BRACKET + connectStr + StringPool.RIGHT_BRACKET;
|
|
|
}
|
|
|
+
|
|
|
+ return connectStr;
|
|
|
}
|
|
|
|
|
|
+ StringJoiner joiner = new StringJoiner(StringPool.EMPTY);
|
|
|
joiner.add(column.toSql(tableAliasMap, paramMap));
|
|
|
|
|
|
if (value instanceof IQueryColumn) {
|
|
@@ -120,8 +125,11 @@ public class QueryCondition implements IFormat {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- queryConditionConnectList.forEach(item -> joiner.add(item.toSql(tableAliasMap, paramMap)));
|
|
|
- return joiner.toString();
|
|
|
+ String sql = joiner.toString();
|
|
|
+ if (ObjectUtil.isEmpty(connectStr)) {
|
|
|
+ return sql;
|
|
|
+ }
|
|
|
+ return StringPool.LEFT_BRACKET + sql + StringPool.RIGHT_BRACKET;
|
|
|
}
|
|
|
|
|
|
}
|