mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +08:00
feat: 添加 With 构建支持深度克隆。
This commit is contained in:
parent
e33ee947b5
commit
1a179780e3
@ -267,6 +267,7 @@ public class BaseQueryWrapper<T extends BaseQueryWrapper<T>> implements CloneSup
|
||||
try {
|
||||
T clone = (T) super.clone();
|
||||
// deep clone ...
|
||||
clone.with = ObjectUtil.clone(this.with);
|
||||
clone.queryTables = CollectionUtil.cloneArrayList(this.queryTables);
|
||||
clone.selectColumns = CollectionUtil.cloneArrayList(this.selectColumns);
|
||||
clone.joins = CollectionUtil.cloneArrayList(this.joins);
|
||||
|
||||
@ -17,13 +17,14 @@ package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.FlexConsts;
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.exception.FlexExceptions;
|
||||
import com.mybatisflex.core.util.ArrayUtil;
|
||||
import com.mybatisflex.core.util.CollectionUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class With implements Serializable {
|
||||
public class With implements CloneSupport<With> {
|
||||
|
||||
private boolean recursive;
|
||||
private List<WithItem> withItems;
|
||||
@ -79,4 +80,17 @@ public class With implements Serializable {
|
||||
}
|
||||
return paramValues;
|
||||
}
|
||||
|
||||
@Override
|
||||
public With clone() {
|
||||
try {
|
||||
With clone = (With) super.clone();
|
||||
// deep clone ...
|
||||
clone.withItems = CollectionUtil.cloneArrayList(this.withItems);
|
||||
return clone;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw FlexExceptions.wrap(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
|
||||
public interface WithDetail {
|
||||
public interface WithDetail extends CloneSupport<WithDetail> {
|
||||
|
||||
String toSql(IDialect dialect);
|
||||
|
||||
|
||||
@ -16,13 +16,14 @@
|
||||
package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.exception.FlexExceptions;
|
||||
import com.mybatisflex.core.util.CollectionUtil;
|
||||
import com.mybatisflex.core.util.ObjectUtil;
|
||||
import com.mybatisflex.core.util.StringUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
public class WithItem implements Serializable {
|
||||
public class WithItem implements CloneSupport<WithItem> {
|
||||
|
||||
private String name;
|
||||
private List<String> params;
|
||||
@ -64,7 +65,7 @@ public class WithItem implements Serializable {
|
||||
public String toSql(IDialect dialect) {
|
||||
StringBuilder sql = new StringBuilder(name);
|
||||
if (CollectionUtil.isNotEmpty(params)){
|
||||
sql.append("(").append(StringUtil.join(", ",params)).append(")");
|
||||
sql.append("(").append(StringUtil.join(", ", params)).append(")");
|
||||
}
|
||||
sql.append(" AS (");
|
||||
sql.append(withDetail.toSql(dialect));
|
||||
@ -74,4 +75,18 @@ public class WithItem implements Serializable {
|
||||
public Object[] getParamValues() {
|
||||
return withDetail.getParamValues();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WithItem clone() {
|
||||
try {
|
||||
WithItem clone = (WithItem) super.clone();
|
||||
// deep clone ...
|
||||
clone.withDetail = ObjectUtil.clone(this.withDetail);
|
||||
clone.params = CollectionUtil.newArrayList(this.params);
|
||||
return clone;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw FlexExceptions.wrap(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,8 +16,9 @@
|
||||
package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.exception.FlexExceptions;
|
||||
|
||||
public class WithSelectDetail implements WithDetail{
|
||||
public class WithSelectDetail implements WithDetail {
|
||||
|
||||
private QueryWrapper queryWrapper;
|
||||
|
||||
@ -45,4 +46,17 @@ public class WithSelectDetail implements WithDetail{
|
||||
public Object[] getParamValues() {
|
||||
return queryWrapper.getValueArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WithSelectDetail clone() {
|
||||
try {
|
||||
WithSelectDetail clone = (WithSelectDetail) super.clone();
|
||||
// deep clone ...
|
||||
clone.queryWrapper = this.queryWrapper.clone();
|
||||
return clone;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw FlexExceptions.wrap(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,8 +16,9 @@
|
||||
package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.exception.FlexExceptions;
|
||||
|
||||
public class WithStringDetail implements WithDetail{
|
||||
public class WithStringDetail implements WithDetail {
|
||||
|
||||
private String rawSQL;
|
||||
private Object[] params;
|
||||
@ -52,4 +53,14 @@ public class WithStringDetail implements WithDetail{
|
||||
public Object[] getParamValues() {
|
||||
return params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WithStringDetail clone() {
|
||||
try {
|
||||
return (WithStringDetail) super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw FlexExceptions.wrap(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,12 +16,14 @@
|
||||
package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.exception.FlexExceptions;
|
||||
import com.mybatisflex.core.util.CollectionUtil;
|
||||
import com.mybatisflex.core.util.StringUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class WithValuesDetail implements WithDetail{
|
||||
public class WithValuesDetail implements WithDetail {
|
||||
|
||||
private List<Object> values;
|
||||
private QueryWrapper queryWrapper;
|
||||
@ -49,7 +51,7 @@ public class WithValuesDetail implements WithDetail{
|
||||
stringValues.add(String.valueOf(value));
|
||||
}
|
||||
StringBuilder sql = new StringBuilder("VALUES (")
|
||||
.append(StringUtil.join(", ",stringValues)).append(") ");
|
||||
.append(StringUtil.join(", ", stringValues)).append(") ");
|
||||
return sql.append(dialect.buildNoSelectSql(queryWrapper)).toString();
|
||||
}
|
||||
|
||||
@ -57,4 +59,18 @@ public class WithValuesDetail implements WithDetail{
|
||||
public Object[] getParamValues() {
|
||||
return queryWrapper.getValueArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WithValuesDetail clone() {
|
||||
try {
|
||||
WithValuesDetail clone = (WithValuesDetail) super.clone();
|
||||
// deep clone ...
|
||||
clone.values = CollectionUtil.newArrayList(this.values);
|
||||
clone.queryWrapper = this.queryWrapper.clone();
|
||||
return clone;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw FlexExceptions.wrap(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user