mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
feat: add operateType param for DynamicSchemaProcessor
This commit is contained in:
parent
ee559c0f02
commit
19ae7ecdb6
@ -35,8 +35,8 @@ public interface IDialect {
|
|||||||
return TableManager.getRealTable(table, operateType);
|
return TableManager.getRealTable(table, operateType);
|
||||||
}
|
}
|
||||||
|
|
||||||
default String getRealSchema(String schema, String table) {
|
default String getRealSchema(String schema, String table, OperateType operateType) {
|
||||||
return TableManager.getRealSchema(schema, table);
|
return TableManager.getRealSchema(schema, table, operateType);
|
||||||
}
|
}
|
||||||
|
|
||||||
String forHint(String hintString);
|
String forHint(String hintString);
|
||||||
@ -113,6 +113,7 @@ public interface IDialect {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限处理
|
* 权限处理
|
||||||
|
*
|
||||||
* @param tableInfo tableInfo
|
* @param tableInfo tableInfo
|
||||||
* @param sql sql
|
* @param sql sql
|
||||||
* @param operateType 操作类型
|
* @param operateType 操作类型
|
||||||
|
|||||||
@ -144,7 +144,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(INSERT_INTO);
|
sql.append(INSERT_INTO);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table, OperateType.INSERT))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(table));
|
sql.append(wrap(table));
|
||||||
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
||||||
@ -180,7 +180,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(INSERT_INTO);
|
sql.append(INSERT_INTO);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table, OperateType.INSERT))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(table));
|
sql.append(wrap(table));
|
||||||
sql.append(BLANK).append(BRACKET_LEFT)
|
sql.append(BLANK).append(BRACKET_LEFT)
|
||||||
@ -197,7 +197,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(DELETE_FROM);
|
sql.append(DELETE_FROM);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table, OperateType.DELETE))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(table));
|
sql.append(wrap(table));
|
||||||
sql.append(WHERE);
|
sql.append(WHERE);
|
||||||
@ -218,7 +218,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(DELETE_FROM);
|
sql.append(DELETE_FROM);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table, OperateType.DELETE))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append(wrap(table));
|
sql.append(wrap(table));
|
||||||
@ -269,7 +269,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
sql.append(UPDATE);
|
sql.append(UPDATE);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table, OperateType.UPDATE))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append(wrap(table)).append(SET);
|
sql.append(wrap(table)).append(SET);
|
||||||
@ -370,7 +370,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
String table = getRealTable(tableName, OperateType.SELECT);
|
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, OperateType.SELECT))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(table)).append(WHERE);
|
sql.append(wrap(table)).append(WHERE);
|
||||||
for (int i = 0; i < primaryKeys.length; i++) {
|
for (int i = 0; i < primaryKeys.length; i++) {
|
||||||
@ -548,7 +548,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
QueryTable queryTable = queryTables.get(0);
|
QueryTable queryTable = queryTables.get(0);
|
||||||
String table = getRealTable(queryTable.getName(), OperateType.DELETE);
|
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, OperateType.DELETE))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sqlBuilder.append(BLANK).append(wrap(getRealTable(table, OperateType.DELETE)));
|
sqlBuilder.append(BLANK).append(wrap(getRealTable(table, OperateType.DELETE)));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -171,7 +171,7 @@ public class OracleDialect extends CommonsDialectImpl {
|
|||||||
|
|
||||||
String table = getRealTable(tableName, OperateType.INSERT);
|
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, OperateType.INSERT)) + REFERENCE + wrap(table)
|
||||||
: wrap(table);
|
: wrap(table);
|
||||||
String questionStrings = SqlUtil.buildSqlParamPlaceholder(attrs.size());
|
String questionStrings = SqlUtil.buildSqlParamPlaceholder(attrs.size());
|
||||||
|
|
||||||
|
|||||||
@ -979,7 +979,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
|||||||
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(), OperateType.SELECT);
|
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, OperateType.SELECT)) + 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(), OperateType.SELECT)) + SqlConsts.REFERENCE + dialect.wrap(name);
|
return dialect.wrap(dialect.getRealTable(selectTable.getName(), OperateType.SELECT)) + SqlConsts.REFERENCE + dialect.wrap(name);
|
||||||
|
|||||||
@ -110,7 +110,7 @@ public class QueryTable implements CloneSupport<QueryTable> {
|
|||||||
String sql;
|
String sql;
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
String table = dialect.getRealTable(name, operateType);
|
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, operateType)) + "." + dialect.wrap(table) + WrapperUtil.buildAlias(alias, dialect);
|
||||||
} else {
|
} else {
|
||||||
sql = dialect.wrap(dialect.getRealTable(name, operateType)) + WrapperUtil.buildAlias(alias, dialect);
|
sql = dialect.wrap(dialect.getRealTable(name, operateType)) + WrapperUtil.buildAlias(alias, dialect);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,8 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.mybatisflex.core.table;
|
package com.mybatisflex.core.table;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.dialect.OperateType;
|
||||||
|
|
||||||
public interface DynamicSchemaProcessor {
|
public interface DynamicSchemaProcessor {
|
||||||
|
|
||||||
String process(String schema, String table);
|
String process(String schema, String table, OperateType operateType);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -183,7 +183,7 @@ public class TableInfo {
|
|||||||
public String getWrapSchemaAndTableName(IDialect dialect, OperateType operateType) {
|
public String getWrapSchemaAndTableName(IDialect dialect, OperateType operateType) {
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
String table = dialect.getRealTable(tableName, operateType);
|
String table = dialect.getRealTable(tableName, operateType);
|
||||||
return dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table);
|
return dialect.wrap(dialect.getRealSchema(schema, table, operateType)) + "." + dialect.wrap(table);
|
||||||
} else {
|
} else {
|
||||||
return dialect.wrap(dialect.getRealTable(tableName, operateType));
|
return dialect.wrap(dialect.getRealTable(tableName, operateType));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -98,7 +98,7 @@ public class TableManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static String getRealSchema(String schema, String table) {
|
public static String getRealSchema(String schema, String table, OperateType operateType) {
|
||||||
Map<String, String> mapping = schemaMappingTL.get();
|
Map<String, String> mapping = schemaMappingTL.get();
|
||||||
if (mapping != null) {
|
if (mapping != null) {
|
||||||
String dynamicSchema = mapping.get(schema);
|
String dynamicSchema = mapping.get(schema);
|
||||||
@ -111,7 +111,7 @@ public class TableManager {
|
|||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
String dynamicSchema = dynamicSchemaProcessor.process(schema, table);
|
String dynamicSchema = dynamicSchemaProcessor.process(schema, table, operateType);
|
||||||
return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema;
|
return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@ spring:
|
|||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://localhost:3306/flex_test
|
url: jdbc:mysql://localhost:3306/flex_test
|
||||||
username: root
|
username: root
|
||||||
password: 12345678
|
password: 123456
|
||||||
# driver-class-name:
|
# driver-class-name:
|
||||||
# datasource:
|
# datasource:
|
||||||
# driver-class-name: org.h2.Driver
|
# driver-class-name: org.h2.Driver
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user