Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expose internal switch #39

Merged
merged 1 commit into from
Nov 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion arex-compare-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>arex-compare-parent</artifactId>
<groupId>com.arextest</groupId>
<version>0.1.29</version>
<version>0.1.20</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
/**
* Created by rchen9 on 2023/4/13.
*/
public class GuidFilter implements Predicate<LogEntity> {
private static final String GUID_PATTERN = "[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}";
public class UuidFilter implements Predicate<LogEntity> {
private static final String UUID_PATTERN = "[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}";

@Override
public boolean test(LogEntity logEntity) {
Expand All @@ -19,18 +19,18 @@ public boolean test(LogEntity logEntity) {
Object baseValue = logEntity.getBaseValue();
Object testValue = logEntity.getTestValue();
if (baseValue != null && testValue != null) {
return !isGuid((String) baseValue, (String) testValue);
return !isUuid((String) baseValue, (String) testValue);
}
}
return true;
}

public static boolean isGuid(String baseStr, String testStr) {
public static boolean isUuid(String baseStr, String testStr) {

if (baseStr.length() != 36 || testStr.length() != 36) {
return false;
}

return Pattern.matches(GUID_PATTERN, baseStr) && Pattern.matches(GUID_PATTERN, testStr);
return Pattern.matches(UUID_PATTERN, baseStr) && Pattern.matches(UUID_PATTERN, testStr);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public class CompareOptions {
*/
private Boolean nullEqualsEmpty = null;
/**
* This option is tru, the select statement does not compare
* This option is true, the select statement does not compare
*/
private Boolean selectIgnoreCompare = null;

Expand All @@ -92,6 +92,11 @@ public class CompareOptions {
*/
private Boolean nullEqualsNotExist;

/**
* This option is true, the uuid is ignored when comparing
*/
private Boolean uuidIgnore;

public CompareOptions() {
}

Expand Down Expand Up @@ -245,6 +250,11 @@ public CompareOptions putNullEqualsNotExist(Boolean nullEqualsNotExist) {
return this;
}

public CompareOptions putUuidIgnore(Boolean uuidIgnore) {
this.uuidIgnore = uuidIgnore;
return this;
}

public String getCategoryType() {
return categoryType;
}
Expand Down Expand Up @@ -296,4 +306,8 @@ public Long getIgnoredTimePrecision() {
public Boolean getNullEqualsNotExist() {
return nullEqualsNotExist;
}

public Boolean getUuidIgnore() {
return uuidIgnore;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,23 @@ public class GlobalOptions {
*/
private Set<String> ignoreNodeSet;

/**
* This option is true, the select statement does not compare
*/
private Boolean selectIgnoreCompare;

/**
* only compare the overlapping columns
* ignore the non-overlapping columns
* This configuration works only when compareType is CompareType.DATABASE
*/
private Boolean onlyCompareCoincidentColumn;

/**
* This option is true, the uuid is ignored when comparing
*/
private Boolean uuidIgnore;

public GlobalOptions() {
this.nameToLower = false;
this.nullEqualsEmpty = false;
Expand Down Expand Up @@ -81,6 +98,21 @@ public GlobalOptions putIgnoreNodeSet(Set<String> ignoreNodeSet) {
return this;
}

public GlobalOptions putSelectIgnoreCompare(boolean selectIgnoreCompare) {
this.selectIgnoreCompare = selectIgnoreCompare;
return this;
}

public GlobalOptions putOnlyCompareCoincidentColumn(boolean onlyCompareCoincidentColumn) {
this.onlyCompareCoincidentColumn = onlyCompareCoincidentColumn;
return this;
}

public GlobalOptions putUuidIgnore(boolean uuidIgnore) {
this.uuidIgnore = uuidIgnore;
return this;
}

public String getPluginJarUrl() {
return pluginJarUrl;
}
Expand All @@ -105,4 +137,16 @@ public Set<String> getIgnoreNodeSet() {
return ignoreNodeSet;
}

public Boolean getSelectIgnoreCompare() {
return selectIgnoreCompare;
}

public Boolean getOnlyCompareCoincidentColumn() {
return onlyCompareCoincidentColumn;
}

public Boolean getUuidIgnore() {
return uuidIgnore;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ public class RulesConfig {

private boolean nullEqualsNotExist;

private boolean uuidIgnore;

public RulesConfig() {
}

Expand Down Expand Up @@ -190,4 +192,12 @@ public boolean isNullEqualsNotExist() {
public void setNullEqualsNotExist(boolean nullEqualsNotExist) {
this.nullEqualsNotExist = nullEqualsNotExist;
}

public boolean isUuidIgnore() {
return uuidIgnore;
}

public void setUuidIgnore(boolean uuidIgnore) {
this.uuidIgnore = uuidIgnore;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import com.arextest.diff.handler.keycompute.KeyCompute;
import com.arextest.diff.handler.log.LogProcess;
import com.arextest.diff.handler.log.filterrules.ArexPrefixFilter;
import com.arextest.diff.handler.log.filterrules.GuidFilter;
import com.arextest.diff.handler.log.filterrules.UuidFilter;
import com.arextest.diff.handler.log.filterrules.OnlyCompareSameColumnsFilter;
import com.arextest.diff.handler.log.filterrules.TimePrecisionFilter;
import com.arextest.diff.handler.metric.TimeConsumerWatch;
Expand Down Expand Up @@ -117,7 +117,10 @@ public CompareResult jsonCompare(RulesConfig rulesConfig) {
LogProcess logProcess = new LogProcess();
logProcess.setRulesConfig(rulesConfig);
logProcess.appendFilterRules(Arrays.asList(new TimePrecisionFilter(rulesConfig.getIgnoredTimePrecision()),
new ArexPrefixFilter(), new GuidFilter()));
new ArexPrefixFilter()));
if (rulesConfig.isUuidIgnore()) {
logProcess.appendFilterRules(new UuidFilter());
}
if (rulesConfig.isOnlyCompareCoincidentColumn()) {
logProcess.appendFilterRules(new OnlyCompareSameColumnsFilter());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.arextest.diff.utils;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
Expand All @@ -16,7 +17,7 @@
import com.arextest.diff.handler.keycompute.KeyCompute;
import com.arextest.diff.handler.log.LogProcess;
import com.arextest.diff.handler.log.filterrules.ArexPrefixFilter;
import com.arextest.diff.handler.log.filterrules.GuidFilter;
import com.arextest.diff.handler.log.filterrules.UuidFilter;
import com.arextest.diff.handler.log.filterrules.TimePrecisionFilter;
import com.arextest.diff.handler.metric.TimeConsumerWatch;
import com.arextest.diff.handler.metric.TimeMetricLabel;
Expand Down Expand Up @@ -108,7 +109,10 @@ public CompareResult jsonCompare(RulesConfig rulesConfig) {
LogProcess logProcess = new LogProcess();
logProcess.setRulesConfig(rulesConfig);
logProcess.appendFilterRules(Arrays.asList(new TimePrecisionFilter(rulesConfig.getIgnoredTimePrecision()),
new ArexPrefixFilter(), new GuidFilter()));
new ArexPrefixFilter()));
if (rulesConfig.isUuidIgnore()) {
logProcess.appendFilterRules(Collections.singletonList(new UuidFilter()));
}
logs = compareHandler.doHandler(rulesConfig, keyComputeResponse, msgStructureFuture,
msgWhiteObj.getBaseObj(), msgWhiteObj.getTestObj(), logProcess);
timeConsumerWatch.end(TimeMetricLabel.COMPARE_HANDLER);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,15 @@ private static void globalOptionsToRules(GlobalOptions globalOptions, RulesConfi
if (globalOptions.getIgnoreNodeSet() != null) {
rulesConfig.setIgnoreNodeSet(globalOptions.getIgnoreNodeSet());
}
if (globalOptions.getOnlyCompareCoincidentColumn() != null) {
rulesConfig.setOnlyCompareCoincidentColumn(globalOptions.getOnlyCompareCoincidentColumn());
}
if (globalOptions.getSelectIgnoreCompare() != null) {
rulesConfig.setSelectIgnoreCompare(globalOptions.getSelectIgnoreCompare());
}
if (globalOptions.getUuidIgnore() != null) {
rulesConfig.setUuidIgnore(globalOptions.getUuidIgnore());
}
}

private static void optionsToRules(CompareOptions compareOptions, RulesConfig rulesConfig) {
Expand Down Expand Up @@ -87,6 +96,9 @@ private static void optionsToRules(CompareOptions compareOptions, RulesConfig ru
if (compareOptions.getNullEqualsNotExist() != null) {
rulesConfig.setNullEqualsNotExist(compareOptions.getNullEqualsNotExist());
}
if (compareOptions.getUuidIgnore() != null) {
rulesConfig.setUuidIgnore(compareOptions.getUuidIgnore());
}
}

private static Map<List<String>, DecompressConfig> decompressConfigConvert(List<DecompressConfig> decompressConfigList) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void testCompare() throws Exception {

CompareResult result = sdk.compare(str1, str2, compareOptions);
long end = System.currentTimeMillis();
Assert.assertEquals(result.getLogs().size(), 7);
Assert.assertEquals(7, result.getLogs().size());
System.out.println("toatal cost:" + (end - start) + " ms");
}

Expand Down Expand Up @@ -105,7 +105,7 @@ public void testSQLCompare() {
compareOptions.putSelectIgnoreCompare(true);

CompareResult result = sdk.compare(str1, str2, compareOptions);
Assert.assertEquals(result.getLogs().size(), 1);
Assert.assertEquals(1, result.getLogs().size());
}

@Test
Expand All @@ -123,7 +123,7 @@ public void testTimePrecisionFilter() {
CompareOptions compareOptions = CompareOptions.options();

CompareResult result = sdk.compare(str1, str2, compareOptions);
Assert.assertEquals(result.getLogs().size(), 0);
Assert.assertEquals(0, result.getLogs().size());
}

@Test
Expand All @@ -135,7 +135,7 @@ public void testNullAndNotExist() {
String str2 = "{\"arr\":null}";
CompareOptions compareOptions = CompareOptions.options();
CompareResult result = sdk.compare(str1, str2, compareOptions);
Assert.assertEquals(result.getLogs().size(), 0);
Assert.assertEquals(0, result.getLogs().size());
}

@Test
Expand All @@ -144,16 +144,16 @@ public void testArexPrefixFilter() {
String str1 = "{\"array\":\"http://www.baidu.com\"}";
String str2 = "{\"array\":\"http://arex_www.baidu.com\"}";
CompareResult result = sdk.compare(str1, str2);
Assert.assertEquals(result.getLogs().size(), 0);
Assert.assertEquals(0, result.getLogs().size());
}

@Test
public void testGuidFilter() {
public void testUuidFilter() {
CompareSDK sdk = new CompareSDK();
String str1 = "{\"guid\":\"f4c6d9c9-9d8f-4b1f-9d5c-6e9d7a8c6b2e\"}";
String str2 = "{\"guid\":\"f4c6d9c9-9d8f-4b1f-9d5c-6e9d7a8c6b2f\"}";
String str1 = "{\"uuid\":\"f4c6d9c9-9d8f-4b1f-9d5c-6e9d7a8c6b2e\"}";
String str2 = "{\"uuid\":\"f4c6d9c9-9d8f-4b1f-9d5c-6e9d7a8c6b2f\"}";
CompareResult result = sdk.compare(str1, str2);
Assert.assertEquals(result.getLogs().size(), 0);
Assert.assertEquals( 1, result.getLogs().size());
}

@Test
Expand All @@ -173,7 +173,7 @@ public void testIgnoreSelectSql() {
compareOptions.putSelectIgnoreCompare(true);

CompareResult result = sdk.compare(str1, str2, compareOptions);
Assert.assertEquals(result.getCode(), 0);
Assert.assertEquals( 0, result.getCode());
}

@Test
Expand Down Expand Up @@ -261,7 +261,7 @@ public void testProcedureExec() {
compareOptions.putCategoryType(CategoryType.DATABASE);

CompareResult result = compareSDK.compare(str1, str2, compareOptions);
Assert.assertEquals(result.getLogs().size(), 1);
Assert.assertEquals(1, result.getLogs().size());
}

@Test
Expand All @@ -280,7 +280,7 @@ public void addRootCompress() {

CompareResult result = sdk.compare(str1, str2, compareOptions);

Assert.assertEquals(result.getProcessedBaseMsg(), "{\"name\":\"google\"}");
Assert.assertEquals( "{\"name\":\"google\"}", result.getProcessedBaseMsg());
}

@Test
Expand All @@ -295,7 +295,61 @@ public void testSqlBodyNull(){
compareOptions.putCategoryType(CategoryType.DATABASE);

CompareResult result = compareSDK.compare(str1, str2, compareOptions);
Assert.assertEquals(result.getLogs().size(), 2);
Assert.assertEquals(2, result.getLogs().size());

}

@Test
public void testGlobalOptionsSelectIgnoreCompare() {
CompareSDK sdk = new CompareSDK();
sdk.getGlobalOptions().putSelectIgnoreCompare(true);

String str1 = "{\"dbname\":\"dbmame\",\"body\":\"SELECT e.c3, e.c4, e.c5 FROM t1 e JOIN t2 d USING (id) " +
"WHERE c2 = 'SA_REP' AND c6 = 2500 ORDER BY e.c3 FOR UPDATE OF e ;\"}";

String str2 = "{\"dbname\":\"dbmame\",\"body\":\"SELECT e.c3, e.c4, e.c5 FROM t1 e JOIN t2 d USING (id)" +
" WHERE c2 = 'SA_REP' AND c6 = 2300 ORDER BY e.c3 FOR UPDATE OF e ;\"}";

CompareOptions compareOptions = CompareOptions.options();
compareOptions.putExclusions(Arrays.asList("body"));
compareOptions.putCategoryType(CategoryType.DATABASE);

CompareResult result = sdk.compare(str1, str2, compareOptions);
Assert.assertEquals(0, result.getCode());
}

@Test
public void testGlobalOptionsOnlyCompareCoincidentColumn() {
CompareSDK sdk = new CompareSDK();
sdk.getGlobalOptions().putOnlyCompareCoincidentColumn(true);

String str1 = "{\"dbname\":\"dbmame\",\"body\":\"REPLACE INTO "
+ "orderTable(OrderId, InfoId, DataChange_LastTime, userdata_location) "
+ "VALUES (36768383786, 36768317034, '2023-05-14 18:00:34.556', '')\"}";

String str2 = "{\"dbname\":\"dbmame\",\"body\":\"REPLACE INTO "
+ "orderTable(OrderId, InfoId, DataChange_LastTime, userdata_location1) "
+ "VALUES (36768383786, 36768317034, '2023-05-14 18:00:34.556', '')\"}";

CompareOptions compareOptions = CompareOptions.options();
compareOptions.putExclusions(Arrays.asList("body"));
compareOptions.putCategoryType(CategoryType.DATABASE);

CompareResult result = sdk.compare(str1, str2, compareOptions);
Assert.assertEquals(0, result.getCode());
}

@Test
public void testGlobalOptionsUuidIgnore() {

CompareSDK sdk = new CompareSDK();
sdk.getGlobalOptions().putUuidIgnore(true);

String str1 = "{\"uuid\":\"5a6798c4-e57c-481d-b6b7-00f5866350c0\"}";
String str2 = "{\"uuid\":\"41cd4916-9ff5-413e-812a-5f620e2ae589\"}";

CompareResult result = sdk.compare(str1, str2);
Assert.assertEquals(0, result.getCode());
}

}
Loading