!438 动态表名配置方法添加参数

Merge pull request !438 from wtjperi2003/动态表名添加参数
This commit is contained in:
Michael Yang 2024-03-16 02:01:01 +00:00 committed by Gitee
commit ee559c0f02
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
13 changed files with 67 additions and 51 deletions

View File

@ -31,8 +31,8 @@ public interface IDialect {
String wrapColumnAlias(String keyword); String wrapColumnAlias(String keyword);
default String getRealTable(String table) { default String getRealTable(String table, OperateType operateType) {
return TableManager.getRealTable(table); return TableManager.getRealTable(table,operateType);
} }
default String getRealSchema(String schema, String table) { default String getRealSchema(String schema, String table) {

View File

@ -18,5 +18,8 @@ public enum OperateType {
* 删除 * 删除
*/ */
DELETE, DELETE,
; /**
* 增加
*/
INSERT;
} }

View File

@ -140,7 +140,7 @@ public class CommonsDialectImpl implements IDialect {
index++; index++;
} }
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.INSERT);
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(INSERT_INTO); sql.append(INSERT_INTO);
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
@ -176,7 +176,7 @@ public class CommonsDialectImpl implements IDialect {
} }
} }
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.INSERT);
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(INSERT_INTO); sql.append(INSERT_INTO);
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
@ -193,7 +193,7 @@ public class CommonsDialectImpl implements IDialect {
@Override @Override
public String forDeleteById(String schema, String tableName, String[] primaryKeys) { public String forDeleteById(String schema, String tableName, String[] primaryKeys) {
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.DELETE);
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(DELETE_FROM); sql.append(DELETE_FROM);
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
@ -214,7 +214,7 @@ public class CommonsDialectImpl implements IDialect {
@Override @Override
public String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids) { public String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids) {
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.DELETE);
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(DELETE_FROM); sql.append(DELETE_FROM);
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
@ -261,7 +261,7 @@ public class CommonsDialectImpl implements IDialect {
@Override @Override
public String forUpdateById(String schema, String tableName, Row row) { public String forUpdateById(String schema, String tableName, Row row) {
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.UPDATE);
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row); Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
Map<String, RawValue> rawValueMap = RowCPI.getRawValueMap(row); Map<String, RawValue> rawValueMap = RowCPI.getRawValueMap(row);
@ -317,7 +317,7 @@ public class CommonsDialectImpl implements IDialect {
//fix: support schema //fix: support schema
QueryTable queryTable = queryTables.get(0); QueryTable queryTable = queryTables.get(0);
sqlBuilder.append(UPDATE).append(queryTable.toSql(this)).append(SET); sqlBuilder.append(UPDATE).append(queryTable.toSql(this,OperateType.UPDATE)).append(SET);
int index = 0; int index = 0;
for (String modifyAttr : modifyAttrs) { for (String modifyAttr : modifyAttrs) {
if (index > 0) { if (index > 0) {
@ -335,7 +335,7 @@ public class CommonsDialectImpl implements IDialect {
index++; index++;
} }
buildJoinSql(sqlBuilder, queryWrapper, queryTables); buildJoinSql(sqlBuilder, queryWrapper, queryTables,OperateType.UPDATE);
buildWhereSql(sqlBuilder, queryWrapper, queryTables, false); buildWhereSql(sqlBuilder, queryWrapper, queryTables, false);
buildGroupBySql(sqlBuilder, queryWrapper, queryTables); buildGroupBySql(sqlBuilder, queryWrapper, queryTables);
buildHavingSql(sqlBuilder, queryWrapper, queryTables); buildHavingSql(sqlBuilder, queryWrapper, queryTables);
@ -367,7 +367,7 @@ public class CommonsDialectImpl implements IDialect {
@Override @Override
public String forSelectOneById(String schema, String tableName, String[] primaryKeys, Object[] primaryValues) { public String forSelectOneById(String schema, String tableName, String[] primaryKeys, Object[] primaryValues) {
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.SELECT);
StringBuilder sql = new StringBuilder(SELECT_ALL_FROM); StringBuilder sql = new StringBuilder(SELECT_ALL_FROM);
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
@ -438,9 +438,9 @@ public class CommonsDialectImpl implements IDialect {
buildSelectColumnSql(sqlBuilder, allTables, selectColumns, CPI.getHint(queryWrapper)); buildSelectColumnSql(sqlBuilder, allTables, selectColumns, CPI.getHint(queryWrapper));
sqlBuilder.append(FROM).append(StringUtil.join(DELIMITER, queryTables, queryTable -> queryTable.toSql(this))); sqlBuilder.append(FROM).append(StringUtil.join(DELIMITER, queryTables, queryTable -> queryTable.toSql(this,OperateType.SELECT)));
buildJoinSql(sqlBuilder, queryWrapper, allTables); buildJoinSql(sqlBuilder, queryWrapper, allTables,OperateType.SELECT);
buildWhereSql(sqlBuilder, queryWrapper, allTables, true); buildWhereSql(sqlBuilder, queryWrapper, allTables, true);
buildGroupBySql(sqlBuilder, queryWrapper, allTables); buildGroupBySql(sqlBuilder, queryWrapper, allTables);
buildHavingSql(sqlBuilder, queryWrapper, allTables); buildHavingSql(sqlBuilder, queryWrapper, allTables);
@ -474,7 +474,7 @@ public class CommonsDialectImpl implements IDialect {
public String buildNoSelectSql(QueryWrapper queryWrapper) { public String buildNoSelectSql(QueryWrapper queryWrapper) {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
buildJoinSql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST); buildJoinSql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST,OperateType.SELECT);
buildWhereSql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST, true); buildWhereSql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST, true);
buildGroupBySql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST); buildGroupBySql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST);
buildHavingSql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST); buildHavingSql(sqlBuilder, queryWrapper, Collections.EMPTY_LIST);
@ -546,17 +546,17 @@ public class CommonsDialectImpl implements IDialect {
throw new IllegalArgumentException("Delete with join sql must has 1 table only. but current has " + queryTables.size()); throw new IllegalArgumentException("Delete with join sql must has 1 table only. but current has " + queryTables.size());
} }
QueryTable queryTable = queryTables.get(0); QueryTable queryTable = queryTables.get(0);
String table = getRealTable(queryTable.getName()); String table = getRealTable(queryTable.getName(),OperateType.DELETE);
if (StringUtil.isNotBlank(queryTable.getSchema())) { if (StringUtil.isNotBlank(queryTable.getSchema())) {
sqlBuilder.append(wrap(getRealSchema(queryTable.getSchema(), table))).append(REFERENCE); sqlBuilder.append(wrap(getRealSchema(queryTable.getSchema(), table))).append(REFERENCE);
} }
sqlBuilder.append(BLANK).append(wrap(getRealTable(table))); sqlBuilder.append(BLANK).append(wrap(getRealTable(table,OperateType.DELETE)));
} }
sqlBuilder.append(FROM).append(StringUtil.join(DELIMITER, queryTables, queryTable -> queryTable.toSql(this))); sqlBuilder.append(FROM).append(StringUtil.join(DELIMITER, queryTables, queryTable -> queryTable.toSql(this,OperateType.DELETE)));
buildJoinSql(sqlBuilder, queryWrapper, allTables); buildJoinSql(sqlBuilder, queryWrapper, allTables,OperateType.DELETE);
buildWhereSql(sqlBuilder, queryWrapper, allTables, false); buildWhereSql(sqlBuilder, queryWrapper, allTables, false);
buildGroupBySql(sqlBuilder, queryWrapper, allTables); buildGroupBySql(sqlBuilder, queryWrapper, allTables);
buildHavingSql(sqlBuilder, queryWrapper, allTables); buildHavingSql(sqlBuilder, queryWrapper, allTables);
@ -591,7 +591,7 @@ public class CommonsDialectImpl implements IDialect {
@Override @Override
public String forInsertEntity(TableInfo tableInfo, Object entity, boolean ignoreNulls) { public String forInsertEntity(TableInfo tableInfo, Object entity, boolean ignoreNulls) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(INSERT_INTO).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(INSERT_INTO).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.INSERT));
String[] insertColumns = tableInfo.obtainInsertColumns(entity, ignoreNulls); String[] insertColumns = tableInfo.obtainInsertColumns(entity, ignoreNulls);
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns(); Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
@ -623,7 +623,7 @@ public class CommonsDialectImpl implements IDialect {
public String forInsertEntityWithPk(TableInfo tableInfo, Object entity, boolean ignoreNulls) { public String forInsertEntityWithPk(TableInfo tableInfo, Object entity, boolean ignoreNulls) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(INSERT_INTO).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(INSERT_INTO).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.INSERT));
String[] insertColumns = tableInfo.obtainInsertColumnsWithPk(entity, ignoreNulls); String[] insertColumns = tableInfo.obtainInsertColumnsWithPk(entity, ignoreNulls);
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns(); Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
@ -650,7 +650,7 @@ public class CommonsDialectImpl implements IDialect {
@Override @Override
public String forInsertEntityBatch(TableInfo tableInfo, List<?> entities) { public String forInsertEntityBatch(TableInfo tableInfo, List<?> entities) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(INSERT_INTO).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(INSERT_INTO).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.INSERT));
String[] insertColumns = tableInfo.obtainInsertColumns(null, false); String[] insertColumns = tableInfo.obtainInsertColumns(null, false);
String[] warpedInsertColumns = new String[insertColumns.length]; String[] warpedInsertColumns = new String[insertColumns.length];
for (int i = 0; i < insertColumns.length; i++) { for (int i = 0; i < insertColumns.length; i++) {
@ -696,7 +696,7 @@ public class CommonsDialectImpl implements IDialect {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
String[] primaryKeys = tableInfo.getPrimaryColumns(); String[] primaryKeys = tableInfo.getPrimaryColumns();
sql.append(UPDATE).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(UPDATE).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.UPDATE));
sql.append(SET).append(buildLogicDeletedSet(logicDeleteColumn, tableInfo)); sql.append(SET).append(buildLogicDeletedSet(logicDeleteColumn, tableInfo));
sql.append(WHERE); sql.append(WHERE);
for (int i = 0; i < primaryKeys.length; i++) { for (int i = 0; i < primaryKeys.length; i++) {
@ -734,7 +734,7 @@ public class CommonsDialectImpl implements IDialect {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(UPDATE); sql.append(UPDATE);
sql.append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(tableInfo.getWrapSchemaAndTableName(this,OperateType.UPDATE));
sql.append(SET).append(buildLogicDeletedSet(logicDeleteColumn, tableInfo)); sql.append(SET).append(buildLogicDeletedSet(logicDeleteColumn, tableInfo));
sql.append(WHERE); sql.append(WHERE);
sql.append(BRACKET_LEFT); sql.append(BRACKET_LEFT);
@ -793,11 +793,11 @@ public class CommonsDialectImpl implements IDialect {
//ignore selectColumns //ignore selectColumns
StringBuilder sqlBuilder = new StringBuilder(UPDATE).append(forHint(CPI.getHint(queryWrapper))); StringBuilder sqlBuilder = new StringBuilder(UPDATE).append(forHint(CPI.getHint(queryWrapper)));
sqlBuilder.append(tableInfo.getWrapSchemaAndTableName(this)); sqlBuilder.append(tableInfo.getWrapSchemaAndTableName(this,OperateType.DELETE));
sqlBuilder.append(SET).append(buildLogicDeletedSet(logicDeleteColumn, tableInfo)); sqlBuilder.append(SET).append(buildLogicDeletedSet(logicDeleteColumn, tableInfo));
buildJoinSql(sqlBuilder, queryWrapper, allTables); buildJoinSql(sqlBuilder, queryWrapper, allTables,OperateType.DELETE);
buildWhereSql(sqlBuilder, queryWrapper, allTables, false); buildWhereSql(sqlBuilder, queryWrapper, allTables, false);
buildGroupBySql(sqlBuilder, queryWrapper, allTables); buildGroupBySql(sqlBuilder, queryWrapper, allTables);
buildHavingSql(sqlBuilder, queryWrapper, allTables); buildHavingSql(sqlBuilder, queryWrapper, allTables);
@ -818,7 +818,7 @@ public class CommonsDialectImpl implements IDialect {
Map<String, RawValue> rawValueMap = tableInfo.obtainUpdateRawValueMap(entity); Map<String, RawValue> rawValueMap = tableInfo.obtainUpdateRawValueMap(entity);
String[] primaryKeys = tableInfo.getPrimaryColumns(); String[] primaryKeys = tableInfo.getPrimaryColumns();
sql.append(UPDATE).append(tableInfo.getWrapSchemaAndTableName(this)).append(SET); sql.append(UPDATE).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.UPDATE)).append(SET);
StringJoiner stringJoiner = new StringJoiner(DELIMITER); StringJoiner stringJoiner = new StringJoiner(DELIMITER);
@ -884,10 +884,10 @@ public class CommonsDialectImpl implements IDialect {
Map<String, RawValue> rawValueMap = tableInfo.obtainUpdateRawValueMap(entity); Map<String, RawValue> rawValueMap = tableInfo.obtainUpdateRawValueMap(entity);
sqlBuilder.append(UPDATE).append(forHint(CPI.getHint(queryWrapper))); sqlBuilder.append(UPDATE).append(forHint(CPI.getHint(queryWrapper)));
sqlBuilder.append(tableInfo.getWrapSchemaAndTableName(this)); sqlBuilder.append(tableInfo.getWrapSchemaAndTableName(this,OperateType.UPDATE));
List<QueryTable> queryTables = CPI.getQueryTables(queryWrapper); List<QueryTable> queryTables = CPI.getQueryTables(queryWrapper);
buildJoinSql(sqlBuilder, queryWrapper, queryTables); buildJoinSql(sqlBuilder, queryWrapper, queryTables,OperateType.UPDATE);
sqlBuilder.append(SET); sqlBuilder.append(SET);
@ -946,7 +946,7 @@ public class CommonsDialectImpl implements IDialect {
public String forSelectOneEntityById(TableInfo tableInfo) { public String forSelectOneEntityById(TableInfo tableInfo) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
buildSelectColumnSql(sql, null, null, null); buildSelectColumnSql(sql, null, null, null);
sql.append(FROM).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(FROM).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.SELECT));
sql.append(WHERE); sql.append(WHERE);
String[] pKeys = tableInfo.getPrimaryColumns(); String[] pKeys = tableInfo.getPrimaryColumns();
for (int i = 0; i < pKeys.length; i++) { for (int i = 0; i < pKeys.length; i++) {
@ -974,7 +974,7 @@ public class CommonsDialectImpl implements IDialect {
public String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues) { public String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
buildSelectColumnSql(sql, null, tableInfo.getDefaultQueryColumn(), null); buildSelectColumnSql(sql, null, tableInfo.getDefaultQueryColumn(), null);
sql.append(FROM).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(FROM).append(tableInfo.getWrapSchemaAndTableName(this,OperateType.SELECT));
sql.append(WHERE); sql.append(WHERE);
String[] primaryKeys = tableInfo.getPrimaryColumns(); String[] primaryKeys = tableInfo.getPrimaryColumns();
@ -1026,7 +1026,7 @@ public class CommonsDialectImpl implements IDialect {
} }
protected boolean buildJoinSql(StringBuilder sqlBuilder, QueryWrapper queryWrapper, List<QueryTable> queryTables) { protected boolean buildJoinSql(StringBuilder sqlBuilder, QueryWrapper queryWrapper, List<QueryTable> queryTables, OperateType operateType) {
List<Join> joins = CPI.getJoins(queryWrapper); List<Join> joins = CPI.getJoins(queryWrapper);
boolean joinSuccess = false; boolean joinSuccess = false;
if (joins != null && !joins.isEmpty()) { if (joins != null && !joins.isEmpty()) {
@ -1034,7 +1034,7 @@ public class CommonsDialectImpl implements IDialect {
if (!join.checkEffective()) { if (!join.checkEffective()) {
continue; continue;
} }
sqlBuilder.append(join.toSql(queryTables, this)); sqlBuilder.append(join.toSql(queryTables, this,operateType));
joinSuccess = true; joinSuccess = true;
} }
} }

View File

@ -18,6 +18,7 @@ package com.mybatisflex.core.dialect.impl;
import com.mybatisflex.core.constant.SqlConsts; import com.mybatisflex.core.constant.SqlConsts;
import com.mybatisflex.core.dialect.KeywordWrap; import com.mybatisflex.core.dialect.KeywordWrap;
import com.mybatisflex.core.dialect.LimitOffsetProcessor; import com.mybatisflex.core.dialect.LimitOffsetProcessor;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.row.Row; import com.mybatisflex.core.row.Row;
import com.mybatisflex.core.row.RowCPI; import com.mybatisflex.core.row.RowCPI;
import com.mybatisflex.core.table.TableInfo; import com.mybatisflex.core.table.TableInfo;
@ -121,7 +122,7 @@ public class OracleDialect extends CommonsDialectImpl {
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns(); Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
for (int i = 0; i < entities.size(); i++) { for (int i = 0; i < entities.size(); i++) {
sql.append(INTO).append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(INTO).append(tableInfo.getWrapSchemaAndTableName(this, OperateType.INSERT));
sql.append(BLANK).append(BRACKET_LEFT).append(StringUtil.join(DELIMITER, warpedInsertColumns)).append(BRACKET_RIGHT); sql.append(BLANK).append(BRACKET_LEFT).append(StringUtil.join(DELIMITER, warpedInsertColumns)).append(BRACKET_RIGHT);
sql.append(VALUES); sql.append(VALUES);
@ -168,7 +169,7 @@ public class OracleDialect extends CommonsDialectImpl {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append(INSERT_ALL); sql.append(INSERT_ALL);
String table = getRealTable(tableName); String table = getRealTable(tableName,OperateType.INSERT);
String tableNameWrap = StringUtil.isNotBlank(schema) String tableNameWrap = StringUtil.isNotBlank(schema)
? wrap(getRealSchema(schema,table)) + REFERENCE + wrap(table) ? wrap(getRealSchema(schema,table)) + REFERENCE + wrap(table)
: wrap(table); : wrap(table);

View File

@ -17,6 +17,7 @@ package com.mybatisflex.core.query;
import com.mybatisflex.core.constant.SqlConsts; import com.mybatisflex.core.constant.SqlConsts;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.util.ObjectUtil; import com.mybatisflex.core.util.ObjectUtil;
@ -99,10 +100,10 @@ public class Join implements CloneSupport<Join> {
this.effective = fn.get(); this.effective = fn.get();
} }
public String toSql(List<QueryTable> queryTables, IDialect dialect) { public String toSql(List<QueryTable> queryTables, IDialect dialect, OperateType operateType) {
//left join, right join, inner join ... //left join, right join, inner join ...
StringBuilder sql = new StringBuilder(type); StringBuilder sql = new StringBuilder(type);
sql.append(queryTable.toSql(dialect)); sql.append(queryTable.toSql(dialect,operateType));
//left join xxx as xxx2 on xxx2.id = xxx3.other //left join xxx as xxx2 on xxx2.id = xxx3.other
List<QueryTable> newQueryTables = new ArrayList<>(queryTables); List<QueryTable> newQueryTables = new ArrayList<>(queryTables);

View File

@ -19,6 +19,7 @@ package com.mybatisflex.core.query;
import com.mybatisflex.core.constant.SqlConsts; import com.mybatisflex.core.constant.SqlConsts;
import com.mybatisflex.core.constant.SqlOperator; import com.mybatisflex.core.constant.SqlOperator;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.util.CollectionUtil; import com.mybatisflex.core.util.CollectionUtil;
import com.mybatisflex.core.util.LambdaGetter; import com.mybatisflex.core.util.LambdaGetter;
@ -977,11 +978,11 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
if (StringUtil.isNotBlank(selectTable.alias)) { if (StringUtil.isNotBlank(selectTable.alias)) {
return dialect.wrap(selectTable.alias) + SqlConsts.REFERENCE + dialect.wrap(name); return dialect.wrap(selectTable.alias) + SqlConsts.REFERENCE + dialect.wrap(name);
} else if (StringUtil.isNotBlank(selectTable.getSchema()) && StringUtil.isNotBlank(selectTable.getName())) { } else if (StringUtil.isNotBlank(selectTable.getSchema()) && StringUtil.isNotBlank(selectTable.getName())) {
String realTable = dialect.getRealTable(selectTable.getName()); String realTable = dialect.getRealTable(selectTable.getName(), OperateType.SELECT);
return dialect.wrap(dialect.getRealSchema(selectTable.schema, realTable)) + SqlConsts.REFERENCE + dialect.wrap(realTable) return dialect.wrap(dialect.getRealSchema(selectTable.schema, realTable)) + SqlConsts.REFERENCE + dialect.wrap(realTable)
+ SqlConsts.REFERENCE + dialect.wrap(name); + SqlConsts.REFERENCE + dialect.wrap(name);
} else if (StringUtil.isNotBlank(selectTable.getName())) { } else if (StringUtil.isNotBlank(selectTable.getName())) {
return dialect.wrap(dialect.getRealTable(selectTable.getName())) + SqlConsts.REFERENCE + dialect.wrap(name); return dialect.wrap(dialect.getRealTable(selectTable.getName(),OperateType.SELECT)) + SqlConsts.REFERENCE + dialect.wrap(name);
} else { } else {
return dialect.wrap(name); return dialect.wrap(name);
} }

View File

@ -17,6 +17,7 @@ package com.mybatisflex.core.query;
import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.FlexConsts;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
@ -105,13 +106,13 @@ public class QueryTable implements CloneSupport<QueryTable> {
return FlexConsts.EMPTY_ARRAY; return FlexConsts.EMPTY_ARRAY;
} }
public String toSql(IDialect dialect) { public String toSql(IDialect dialect, OperateType operateType) {
String sql; String sql;
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
String table = dialect.getRealTable(name); String table = dialect.getRealTable(name,operateType);
sql = dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table) + WrapperUtil.buildAlias(alias, dialect); sql = dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table) + WrapperUtil.buildAlias(alias, dialect);
} else { } else {
sql = dialect.wrap(dialect.getRealTable(name)) + WrapperUtil.buildAlias(alias, dialect); sql = dialect.wrap(dialect.getRealTable(name,operateType)) + WrapperUtil.buildAlias(alias, dialect);
} }
return sql; return sql;
} }

View File

@ -17,6 +17,7 @@
package com.mybatisflex.core.query; package com.mybatisflex.core.query;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
import java.util.Objects; import java.util.Objects;
@ -36,7 +37,7 @@ public class RawQueryTable extends QueryTable {
} }
@Override @Override
public String toSql(IDialect dialect) { public String toSql(IDialect dialect, OperateType operateType) {
return this.content + WrapperUtil.buildAlias(alias, dialect); return this.content + WrapperUtil.buildAlias(alias, dialect);
} }

View File

@ -16,6 +16,7 @@
package com.mybatisflex.core.query; package com.mybatisflex.core.query;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
/** /**
@ -46,7 +47,7 @@ public class SelectQueryTable extends QueryTable {
} }
@Override @Override
public String toSql(IDialect dialect) { public String toSql(IDialect dialect, OperateType operateType) {
String sql = dialect.buildSelectSql(queryWrapper); String sql = dialect.buildSelectSql(queryWrapper);
if (StringUtil.isNotBlank(alias)) { if (StringUtil.isNotBlank(alias)) {
return WrapperUtil.withAlias(sql, alias, dialect); return WrapperUtil.withAlias(sql, alias, dialect);

View File

@ -15,8 +15,10 @@
*/ */
package com.mybatisflex.core.table; package com.mybatisflex.core.table;
import com.mybatisflex.core.dialect.OperateType;
public interface DynamicTableProcessor { public interface DynamicTableProcessor {
String process(String tableName); String process(String tableName, OperateType operateType);
} }

View File

@ -25,6 +25,7 @@ import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.constant.SqlConsts; import com.mybatisflex.core.constant.SqlConsts;
import com.mybatisflex.core.constant.SqlOperator; import com.mybatisflex.core.constant.SqlOperator;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.exception.locale.LocalizedFormats; import com.mybatisflex.core.exception.locale.LocalizedFormats;
import com.mybatisflex.core.logicdelete.LogicDeleteManager; import com.mybatisflex.core.logicdelete.LogicDeleteManager;
@ -179,12 +180,12 @@ public class TableInfo {
return StringUtil.buildSchemaWithTable(schema, tableName); return StringUtil.buildSchemaWithTable(schema, tableName);
} }
public String getWrapSchemaAndTableName(IDialect dialect) { public String getWrapSchemaAndTableName(IDialect dialect, OperateType operateType) {
if (StringUtil.isNotBlank(schema)) { if (StringUtil.isNotBlank(schema)) {
String table = dialect.getRealTable(tableName); String table = dialect.getRealTable(tableName,operateType);
return dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table); return dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table);
} else { } else {
return dialect.wrap(dialect.getRealTable(tableName)); return dialect.wrap(dialect.getRealTable(tableName,operateType));
} }
} }

View File

@ -15,6 +15,7 @@
*/ */
package com.mybatisflex.core.table; package com.mybatisflex.core.table;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
import java.util.HashMap; import java.util.HashMap;
@ -78,7 +79,7 @@ public class TableManager {
} }
public static String getRealTable(String tableName) { public static String getRealTable(String tableName, OperateType operateType) {
Map<String, String> mapping = tableNameMappingTL.get(); Map<String, String> mapping = tableNameMappingTL.get();
if (mapping != null) { if (mapping != null) {
@ -92,7 +93,7 @@ public class TableManager {
return tableName; return tableName;
} }
String dynamicTableName = dynamicTableProcessor.process(tableName); String dynamicTableName = dynamicTableProcessor.process(tableName,operateType);
return StringUtil.isNotBlank(dynamicTableName) ? dynamicTableName : tableName; return StringUtil.isNotBlank(dynamicTableName) ? dynamicTableName : tableName;
} }

View File

@ -123,7 +123,10 @@ public class AccountSqlTester {
.where(ACCOUNT01.ID.ge(100)) .where(ACCOUNT01.ID.ge(100))
.and(ACCOUNT.SEX.eq(1)); .and(ACCOUNT.SEX.eq(1));
TableManager.setDynamicTableProcessor(tableName -> tableName + "_01"); TableManager.setDynamicTableProcessor((tableName,operateType) ->{
System.out.println(operateType);
return tableName + "_01";
});
Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` " + Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` " +
"LEFT JOIN `tb_account_01` ON `flex`.`tb_a01_01`.`id` = `tb_account_01`.`id` " + "LEFT JOIN `tb_account_01` ON `flex`.`tb_a01_01`.`id` = `tb_account_01`.`id` " +
@ -144,7 +147,7 @@ public class AccountSqlTester {
.where(ACCOUNT01.ID.ge(100)) .where(ACCOUNT01.ID.ge(100))
.and(ACCOUNT.SEX.eq(1)); .and(ACCOUNT.SEX.eq(1));
TableManager.setDynamicTableProcessor(original -> original + "_01"); TableManager.setDynamicTableProcessor((original,operateType) -> original + "_01");
Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` AS `a1` " + Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` AS `a1` " +
"LEFT JOIN `tb_account_01` ON `a1`.`id` = `tb_account_01`.`id` " + "LEFT JOIN `tb_account_01` ON `a1`.`id` = `tb_account_01`.`id` " +