@@ -51,7 +51,7 @@ public class BQValidation {
5151
5252 public static boolean validateSalesforceAndBQRecordValues (String objectName , String bqTable ) throws
5353 IOException , InterruptedException {
54- String uniqueRecordId = SalesforceClient .queryObjectId (objectName );
54+ List < String > uniqueRecordIds = SalesforceClient .queryObjectId (objectName );
5555
5656 List <JsonObject > bigQueryResponse = new ArrayList <>();
5757 List <Object > bigQueryRows = new ArrayList <>();
@@ -60,8 +60,11 @@ public static boolean validateSalesforceAndBQRecordValues(String objectName, Str
6060 JsonObject jsonData = gson .fromJson (String .valueOf (rows ), JsonObject .class );
6161 bigQueryResponse .add (jsonData );
6262 }
63- List <JsonObject > sObjectResponse ;
64- sObjectResponse = SalesforceClient .queryObject (uniqueRecordId , objectName );
63+ List <JsonObject > sObjectResponse = new ArrayList <>();
64+ for (String recordId : uniqueRecordIds ) {
65+ JsonObject record = SalesforceClient .queryObject (recordId , objectName );
66+ sObjectResponse .add (record );
67+ }
6568 return compareSalesforceAndJsonData (sObjectResponse , bigQueryResponse , bqTable );
6669 }
6770
@@ -82,9 +85,12 @@ public static boolean validateSalesforceMultiObjectToBQRecordValues() throws IOE
8285 JsonObject jsonData = gson .fromJson (String .valueOf (row ), JsonObject .class );
8386 bigQueryResponse .add (jsonData );
8487 }
85- String uniqueRecordId = SalesforceClient .queryObjectId (currentObject );
86- List <JsonObject > sObjectResponse ;
87- sObjectResponse = SalesforceClient .queryObject (uniqueRecordId , currentObject );
88+ List <String > uniqueRecordIds = SalesforceClient .queryObjectId (currentObject );
89+ List <JsonObject > sObjectResponse = new ArrayList <>();
90+ for (String recordId : uniqueRecordIds ) {
91+ JsonObject record = SalesforceClient .queryObject (recordId , currentObject );
92+ sObjectResponse .add (record );
93+ }
8894 boolean isValid = compareSalesforceAndJsonData (
8995 sObjectResponse , bigQueryResponse , currentTargetTable );
9096
@@ -141,14 +147,9 @@ public static boolean compareSalesforceAndJsonData(List<JsonObject> salesforceDa
141147 Assert .fail ("bigQueryData is null" );
142148 return result ;
143149 }
144- int jsonObjectIdx = 0 ;
145- if (salesforceData .size () > 0 ) {
146- salesforceData .get (jsonObjectIdx ).entrySet ().size ();
147- }
148- // Get the column count of the first JsonObject in bigQueryData
149- int columnCountSource = 0 ;
150- if (bigQueryData .size () > 0 ) {
151- columnCountSource = bigQueryData .get (jsonObjectIdx ).entrySet ().size ();
150+ if (salesforceData .isEmpty () || bigQueryData .isEmpty ()) {
151+ Assert .fail ("One or both datasets are empty" );
152+ return result ;
152153 }
153154
154155 BigQuery bigQuery = BigQueryOptions .getDefaultInstance ().getService ();
@@ -158,39 +159,39 @@ public static boolean compareSalesforceAndJsonData(List<JsonObject> salesforceDa
158159 TableId tableRef = TableId .of (projectId , dataset , tableName );
159160 // Get the table schema
160161 Schema schema = bigQuery .getTable (tableRef ).getDefinition ().getSchema ();
161- // Iterate over the fields
162- int currentColumnCount = 1 ;
163- while (currentColumnCount <= columnCountSource ) {
162+
163+ for (int rowIndex = 0 ; rowIndex < salesforceData .size (); rowIndex ++) {
164+ JsonObject salesforceRow = salesforceData .get (rowIndex );
165+ JsonObject bigQueryRow = bigQueryData .get (rowIndex );
166+
164167 for (Field field : schema .getFields ()) {
165168 String columnName = field .getName ();
166169 String columnType = field .getType ().toString ();
167170
168171 switch (columnType ) {
169172
170173 case "BOOLEAN" :
171- boolean sourceAsBoolean = salesforceData . get ( jsonObjectIdx ) .get (columnName ).getAsBoolean ();
172- boolean targetAsBoolean = bigQueryData . get ( jsonObjectIdx ) .get (columnName ).getAsBoolean ();
174+ boolean sourceAsBoolean = salesforceRow .get (columnName ).getAsBoolean ();
175+ boolean targetAsBoolean = bigQueryRow .get (columnName ).getAsBoolean ();
173176 Assert .assertEquals ("Different values found for column : %s" , sourceAsBoolean , targetAsBoolean );
174177 break ;
175178
176179 case "FLOAT" :
177- double sourceVal = salesforceData . get ( jsonObjectIdx ) .get (columnName ).getAsDouble ();
178- double targetVal = bigQueryData . get ( jsonObjectIdx ) .get (columnName ).getAsDouble ();
180+ double sourceVal = salesforceRow .get (columnName ).getAsDouble ();
181+ double targetVal = bigQueryRow .get (columnName ).getAsDouble ();
179182 Assert .assertEquals (String .format ("Different values found for column: %s" , columnName ), 0 ,
180183 Double .compare (sourceVal , targetVal ));
181184 break ;
182185
183186 case "TIMESTAMP" :
184187 OffsetDateTime sourceTimestamp = OffsetDateTime .parse (
185- salesforceData .get (jsonObjectIdx )
186- .get (columnName )
188+ salesforceRow .get (columnName )
187189 .getAsString (),
188190 DateTimeFormatter .ofPattern ("yyyy-MM-dd'T'HH:mm:ss.SSSZ" )
189191 );
190192
191193 OffsetDateTime targetTimestamp = OffsetDateTime .parse (
192- bigQueryData .get (jsonObjectIdx )
193- .get (columnName )
194+ bigQueryRow .get (columnName )
194195 .getAsString ()
195196 );
196197 Assert .assertEquals ("Different values found for column : %s" , sourceTimestamp , targetTimestamp );
@@ -200,23 +201,21 @@ public static boolean compareSalesforceAndJsonData(List<JsonObject> salesforceDa
200201 DateTimeFormatter formatterSource = DateTimeFormatter .ofPattern ("HH:mm:ss.SSSX" );
201202 DateTimeFormatter formatterTarget = DateTimeFormatter .ofPattern ("HH:mm:ss" );
202203 LocalTime sourceTime = LocalTime .parse (
203- salesforceData .get (jsonObjectIdx )
204- .get (columnName )
204+ salesforceRow .get (columnName )
205205 .getAsString (), formatterSource
206206 );
207207 LocalTime targetTime = LocalTime .parse (
208- bigQueryData .get (jsonObjectIdx )
209- .get (columnName )
208+ bigQueryRow .get (columnName )
210209 .getAsString (), formatterTarget
211210 );
212211 Assert .assertEquals ("Different values found for column : %s" , sourceTime , targetTime );
213212 break ;
214213
215214 case "DATE" :
216- JsonElement jsonElementSource = salesforceData . get ( jsonObjectIdx ) .get (columnName );
215+ JsonElement jsonElementSource = salesforceRow .get (columnName );
217216 Date sourceDate = (jsonElementSource != null && !jsonElementSource .isJsonNull ()) ? Date .valueOf (
218217 jsonElementSource .getAsString ()) : null ;
219- JsonElement jsonElementTarget = bigQueryData . get ( jsonObjectIdx ) .get (columnName );
218+ JsonElement jsonElementTarget = bigQueryRow .get (columnName );
220219 Date targetDate = (jsonElementTarget != null && !jsonElementTarget .isJsonNull ()) ? Date .valueOf (
221220 jsonElementTarget .getAsString ()) : null ;
222221 Assert .assertEquals ("Different values found for column : %s" , sourceDate , targetDate );
@@ -231,21 +230,19 @@ public static boolean compareSalesforceAndJsonData(List<JsonObject> salesforceDa
231230 if (columnName .equals ("Col_GeoLocation__c" )) {
232231 break ;
233232 } else {
234- JsonElement sourceElement = salesforceData . get ( jsonObjectIdx ) .get (columnName );
233+ JsonElement sourceElement = salesforceRow .get (columnName );
235234 String sourceString = (sourceElement != null && !sourceElement .isJsonNull ())
236235 ? sourceElement .getAsString () : null ;
237- JsonElement targetElement = bigQueryData . get ( jsonObjectIdx ) .get (columnName );
236+ JsonElement targetElement = bigQueryRow .get (columnName );
238237 String targetString = (targetElement != null && !targetElement .isJsonNull ())
239238 ? targetElement .getAsString () : null ;
240239 Assert .assertEquals (String .format ("Different values found for column : %s" , columnName ),
241240 String .valueOf (sourceString ), String .valueOf (targetString ));
242- break ;
241+ }
242+ break ;
243243 }
244244 }
245- currentColumnCount ++;
246245 }
247- jsonObjectIdx ++;
248- }
249246 Assert .assertFalse ("Number of rows in Source table is greater than the number of rows in Target table" ,
250247 salesforceData .size () > bigQueryData .size ());
251248 return true ;
0 commit comments