Skip to content

Commit 87d11c9

Browse files
author
guyplusplus
committed
remove duplicated code
1 parent 284c5e2 commit 87d11c9

File tree

1 file changed

+49
-84
lines changed

1 file changed

+49
-84
lines changed
Lines changed: 49 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.geckotechnology.mySqlDataCompare;
22

33
import java.sql.ResultSet;
4+
import java.sql.SQLException;
45
import java.sql.Statement;
56
import java.util.ArrayList;
67

@@ -36,113 +37,37 @@ public void compareTable(Table table) throws Exception {
3637
ResultSet masterResultSet = masterStatement.executeQuery(selectSQL.toString());
3738
Statement slaveStatement = slaveSchemaReader.createStatement();
3839
ResultSet slaveResultSet = slaveStatement.executeQuery(selectSQL.toString());
39-
ArrayList<OneRow> masterRows = new ArrayList<OneRow>();
40-
ArrayList<OneRow> slaveRows = new ArrayList<OneRow>();
40+
ArrayList<OneRow> unmatchedMasterRows = new ArrayList<OneRow>();
41+
ArrayList<OneRow> unmatchedSlaveRows = new ArrayList<OneRow>();
4142
boolean hasMasterResultSetNext = true;
4243
boolean hasSlaveResultSetNext = true;
44+
4345
while(hasMasterResultSetNext && hasSlaveResultSetNext) {
44-
4546
//Get 1 row from master DB
4647
if(hasMasterResultSetNext && masterResultSet.next()) {
47-
OneRow masterOneRow = new OneRow(masterResultSet.getString(1), masterResultSet.getString(2));
4848
masterTotalRetrievedRows++;
49-
int slaveRowIndex = slaveRows.indexOf(masterOneRow);
50-
if(slaveRowIndex != -1) {
51-
//slave row matching PK has been found
52-
OneRow slaveOneRow = slaveRows.get(slaveRowIndex);
53-
if(!slaveOneRow.getMd5().equals(masterOneRow.getMd5())) {
54-
//PK are same but the MD5 are different
55-
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
56-
table.getTableName(),
57-
DifferenceType.DATA_ROW_DIFFERENT_MD5,
58-
pkColumnsTuple + "=("+ masterOneRow.getPk() + ")"));
59-
}
60-
slaveRows.remove(slaveRowIndex);
61-
if(slaveRowIndex != 0) {
62-
//we found older records, meaning it was not matched
63-
for(int i = 0; i<slaveRowIndex; i++) {
64-
OneRow removedSlaveOneRaw = slaveRows.remove(0);
65-
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
66-
table.getTableName(),
67-
DifferenceType.DATA_ROW_EXCESS_IN_SLAVE_TABLE,
68-
pkColumnsTuple + "=("+ removedSlaveOneRaw.getPk() + ")"));
69-
}
70-
}
71-
//remove all master rows if required
72-
if(masterRows.size() > 0) {
73-
for(OneRow unmatchedMasterOneRow:masterRows) {
74-
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
75-
table.getTableName(),
76-
DifferenceType.DATA_ROW_MISSING_IN_SLAVE_TABLE,
77-
pkColumnsTuple + "=("+ unmatchedMasterOneRow.getPk() + ")"));
78-
}
79-
masterRows = new ArrayList<OneRow>();
80-
}
81-
}
82-
else {
83-
//no matching PK, so add to masterRows
84-
masterRows.add(masterOneRow);
85-
}
49+
processOneRow(table, pkColumnsTuple, true, masterResultSet, unmatchedMasterRows, unmatchedSlaveRows);
8650
}
8751
else
8852
hasMasterResultSetNext = false;
89-
9053
//Get 1 row from slave DB
9154
if(hasSlaveResultSetNext && slaveResultSet.next()) {
92-
OneRow slaveOneRow = new OneRow(slaveResultSet.getString(1), slaveResultSet.getString(2));
9355
slaveTotalRetrievedRows++;
94-
int masterRowIndex = masterRows.indexOf(slaveOneRow);
95-
if(masterRowIndex != -1) {
96-
//slave row matching PK has been found
97-
OneRow masterOneRow = masterRows.get(masterRowIndex);
98-
if(!slaveOneRow.getMd5().equals(masterOneRow.getMd5())) {
99-
//PK are same but the MD5 are different
100-
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
101-
table.getTableName(),
102-
DifferenceType.DATA_ROW_DIFFERENT_MD5,
103-
pkColumnsTuple + "=("+ masterOneRow.getPk() + ")"));
104-
}
105-
masterRows.remove(masterRowIndex);
106-
if(masterRowIndex != 0) {
107-
//we found older records, meaning it was not matched
108-
for(int i = 0; i<masterRowIndex; i++) {
109-
OneRow removedMasterOneRaw = masterRows.remove(0);
110-
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
111-
table.getTableName(),
112-
DifferenceType.DATA_ROW_MISSING_IN_SLAVE_TABLE,
113-
pkColumnsTuple + "=("+ removedMasterOneRaw.getPk() + ")"));
114-
}
115-
}
116-
//remove all slave rows if required
117-
if(slaveRows.size() > 0) {
118-
for(OneRow unmatchedSlaveOneRow:slaveRows) {
119-
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
120-
table.getTableName(),
121-
DifferenceType.DATA_ROW_EXCESS_IN_SLAVE_TABLE,
122-
pkColumnsTuple + "=("+ unmatchedSlaveOneRow.getPk() + ")"));
123-
}
124-
slaveRows = new ArrayList<OneRow>();
125-
}
126-
}
127-
else {
128-
//no matching PK, so add to slaveRows
129-
slaveRows.add(slaveOneRow);
130-
}
56+
processOneRow(table, pkColumnsTuple, false, slaveResultSet, unmatchedSlaveRows, unmatchedMasterRows);
13157
}
13258
else
13359
hasSlaveResultSetNext = false;
134-
13560
}
13661

13762
//rows not found in slave table
138-
for(OneRow unmatchedMasterOneRow:masterRows) {
63+
for(OneRow unmatchedMasterOneRow:unmatchedMasterRows) {
13964
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
14065
table.getTableName(),
14166
DifferenceType.DATA_ROW_MISSING_IN_SLAVE_TABLE,
14267
pkColumnsTuple + "=("+ unmatchedMasterOneRow.getPk() + ")"));
14368
}
14469
//rows not found in master table
145-
for(OneRow unmatchedSlaveOneRow:slaveRows) {
70+
for(OneRow unmatchedSlaveOneRow:unmatchedSlaveRows) {
14671
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
14772
table.getTableName(),
14873
DifferenceType.DATA_ROW_EXCESS_IN_SLAVE_TABLE,
@@ -153,6 +78,47 @@ public void compareTable(Table table) throws Exception {
15378
masterResultSet.close();
15479
masterStatement.close();
15580
}
81+
82+
private void processOneRow(Table table, String pkColumnsTuple, boolean isSourceMaster,
83+
ResultSet sourceResultSet, ArrayList<OneRow> unmatchedSourceRows, ArrayList<OneRow> unmatchedTargetRows) throws SQLException {
84+
OneRow sourceOneRow = new OneRow(sourceResultSet.getString(1), sourceResultSet.getString(2));
85+
int targetRowIndex = unmatchedTargetRows.indexOf(sourceOneRow);
86+
if(targetRowIndex != -1) {
87+
//target row matching PK has been found, it can be removed immediately from targetRows
88+
OneRow targetOneRow = unmatchedTargetRows.remove(targetRowIndex);
89+
if(!targetOneRow.getMd5().equals(sourceOneRow.getMd5())) {
90+
//PK are same but the MD5 are different
91+
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
92+
table.getTableName(),
93+
DifferenceType.DATA_ROW_DIFFERENT_MD5,
94+
pkColumnsTuple + "=("+ sourceOneRow.getPk() + ")"));
95+
}
96+
if(targetRowIndex != 0) {
97+
//we found older records, meaning it was not matched
98+
for(int i = 0; i<targetRowIndex; i++) {
99+
OneRow removedTargetOneRaw = unmatchedTargetRows.remove(0);
100+
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
101+
table.getTableName(),
102+
(isSourceMaster ? DifferenceType.DATA_ROW_EXCESS_IN_SLAVE_TABLE : DifferenceType.DATA_ROW_MISSING_IN_SLAVE_TABLE),
103+
pkColumnsTuple + "=("+ removedTargetOneRaw.getPk() + ")"));
104+
}
105+
}
106+
//remove all source rows if required
107+
if(unmatchedSourceRows.size() > 0) {
108+
for(OneRow unmatchedSourceOneRow:unmatchedSourceRows) {
109+
dataDifferences.add(new SchemaDifference(Criticality.ERROR,
110+
table.getTableName(),
111+
(isSourceMaster ? DifferenceType.DATA_ROW_MISSING_IN_SLAVE_TABLE : DifferenceType.DATA_ROW_EXCESS_IN_SLAVE_TABLE),
112+
pkColumnsTuple + "=("+ unmatchedSourceOneRow.getPk() + ")"));
113+
}
114+
unmatchedSourceRows.clear();
115+
}
116+
}
117+
else {
118+
//no matching PK, so add to source rows
119+
unmatchedSourceRows.add(sourceOneRow);
120+
}
121+
}
156122

157123
public int calculateCriticalityCount(SchemaDifference.Criticality criticality) {
158124
int count = 0;
@@ -172,5 +138,4 @@ public void printDataDifferenceDetails() {
172138
}
173139
}
174140

175-
176141
}

0 commit comments

Comments
 (0)