Skip to content

Commit

Permalink
代码调整.
Browse files Browse the repository at this point in the history
  • Loading branch information
nieqiurong committed May 14, 2024
1 parent 23d5359 commit 875b980
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -194,18 +194,18 @@ protected void dealOperationResult(OperationResult operationResult) {
}

public OperationResult processInsert(Insert insertStmt, BoundSql boundSql) {
OperationResult result = new OperationResult();
result.setOperation("insert");
final Table table = insertStmt.getTable();
final Set<String> ignoredColumns = ignoredTableColumns.get(table.getName().toUpperCase());
if (ignoredColumns != null && ignoredColumns.stream().anyMatch("*"::equals)) {
result.setTableName(table.getName() + ":*");
result.setRecordStatus(false);
return result;
String operation = SqlCommandType.INSERT.name().toLowerCase();
Table table = insertStmt.getTable();
String tableName = table.getName();
Optional<OperationResult> optionalOperationResult = ignoredTableColumns(tableName, operation);
if (optionalOperationResult.isPresent()) {
return optionalOperationResult.get();
}
result.setTableName(table.getName());
OperationResult result = new OperationResult();
result.setOperation(operation);
result.setTableName(tableName);
result.setRecordStatus(true);
Map<String, Object> updatedColumnDatas = getUpdatedColumnDatas(result.getTableName(), boundSql, insertStmt);
Map<String, Object> updatedColumnDatas = getUpdatedColumnDatas(tableName, boundSql, insertStmt);
result.buildDataStr(compareAndGetUpdatedColumnDatas(result.getTableName(), null, updatedColumnDatas));
return result;
}
Expand All @@ -214,22 +214,18 @@ public OperationResult processUpdate(Update updateStmt, MappedStatement mappedSt
Expression where = updateStmt.getWhere();
PlainSelect selectBody = new PlainSelect();
Table table = updateStmt.getTable();
final Set<String> ignoredColumns = ignoredTableColumns.get(table.getName().toUpperCase());
if (ignoredColumns != null) {
if (ignoredColumns.stream().anyMatch("*"::equals)) {
OperationResult result = new OperationResult();
result.setOperation("update");
result.setTableName(table.getName() + ":*");
result.setRecordStatus(false);
return result;
}
String tableName = table.getName();
String operation = SqlCommandType.UPDATE.name().toLowerCase();
Optional<OperationResult> optionalOperationResult = ignoredTableColumns(tableName, operation);
if (optionalOperationResult.isPresent()) {
return optionalOperationResult.get();
}
selectBody.setFromItem(table);
List<Column> updateColumns = new ArrayList<>();
for (UpdateSet updateSet : updateStmt.getUpdateSets()) {
updateColumns.addAll(updateSet.getColumns());
}
Columns2SelectItemsResult buildColumns2SelectItems = buildColumns2SelectItems(table.getName(), updateColumns);
Columns2SelectItemsResult buildColumns2SelectItems = buildColumns2SelectItems(tableName, updateColumns);
selectBody.setSelectItems(buildColumns2SelectItems.getSelectItems());
selectBody.setWhere(where);
SelectItem<PlainSelect> plainSelectSelectItem = new SelectItem<>(selectBody);
Expand All @@ -244,16 +240,30 @@ public OperationResult processUpdate(Update updateStmt, MappedStatement mappedSt
boundSql4Select.setAdditionalParameter(ety.getKey(), ety.getValue());
}
}
Map<String, Object> updatedColumnDatas = getUpdatedColumnDatas(table.getName(), boundSql, updateStmt);
Map<String, Object> updatedColumnDatas = getUpdatedColumnDatas(tableName, boundSql, updateStmt);
OriginalDataObj originalData = buildOriginalObjectData(updatedColumnDatas, selectBody, buildColumns2SelectItems.getPk(), mappedStatement, boundSql4Select, connection);
OperationResult result = new OperationResult();
result.setOperation("update");
result.setTableName(table.getName());
result.setOperation(operation);
result.setTableName(tableName);
result.setRecordStatus(true);
result.buildDataStr(compareAndGetUpdatedColumnDatas(result.getTableName(), originalData, updatedColumnDatas));
return result;
}

private Optional<OperationResult> ignoredTableColumns(String table, String operation) {
final Set<String> ignoredColumns = ignoredTableColumns.get(table.toUpperCase());
if (ignoredColumns != null) {
if (ignoredColumns.stream().anyMatch("*"::equals)) {
OperationResult result = new OperationResult();
result.setOperation(operation);
result.setTableName(table + ":*");
result.setRecordStatus(false);
return Optional.of(result);
}
}
return Optional.empty();
}

private TableInfo getTableInfoByTableName(String tableName) {
for (TableInfo tableInfo : TableInfoHelper.getTableInfos()) {
if (tableName.equalsIgnoreCase(tableInfo.getTableName())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.plugins.inner.DataChangeRecorderInnerInterceptor;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.update.Update;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -29,31 +30,34 @@ public void initProperties() {
@Test
void setProperties() throws Exception {
final Object ignoreAllColumns = getFieldValue(interceptor, "ignoreAllColumns");
Assertions.assertTrue(Set.of("COLUMN1", "COLUMN2").equals(ignoreAllColumns));

Assertions.assertEquals(Set.of("COLUMN1", "COLUMN2"), ignoreAllColumns);
final Object ignoredTableColumns = getFieldValue(interceptor, "ignoredTableColumns");
Assertions.assertTrue(Map.of("H2USER", Set.of("*"), "TABLE_NAME1", Set.of("COLUMN1", "COLUMN2")).equals(ignoredTableColumns));
Assertions.assertEquals(Map.of("H2USER", Set.of("*"), "TABLE_NAME1", Set.of("COLUMN1", "COLUMN2")), ignoredTableColumns);
}



private Object getFieldValue(Object obj, String fieldName) throws NoSuchFieldException, IllegalAccessException {
final Field field = DataChangeRecorderInnerInterceptor.class.getDeclaredField(fieldName);
field.setAccessible(true);
final Object fieldValue = field.get(obj);
field.setAccessible(false);
return fieldValue;
return field.get(obj);
}

@Test
void processInsert() throws Exception{
void processInsert() {
final Insert insert = new Insert();
insert.setTable(new Table("H2USER"));
final DataChangeRecorderInnerInterceptor.OperationResult operationResult = interceptor.processInsert(insert, null);
Assertions.assertEquals(operationResult.getTableName(), "H2USER:*");
Assertions.assertFalse(operationResult.isRecordStatus());
Assertions.assertEquals(operationResult.getChangedData(), null);

Assertions.assertNull(operationResult.getChangedData());
}

@Test
void processUpdate() {
final Update update = new Update();
update.setTable(new Table("H2USER"));
final DataChangeRecorderInnerInterceptor.OperationResult operationResult = interceptor.processUpdate(update, null, null, null);
Assertions.assertEquals(operationResult.getTableName(), "H2USER:*");
Assertions.assertFalse(operationResult.isRecordStatus());
Assertions.assertNull(operationResult.getChangedData());
}
}

0 comments on commit 875b980

Please sign in to comment.