Skip to content

Commit 9fb48e9

Browse files
Merge pull request #336 from data-integrations/pk-chunk-check-dev
Moved the pk chunking check to SplitUtil class
2 parents ee75057 + 771edba commit 9fb48e9

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

src/main/java/io/cdap/plugin/salesforce/plugin/source/batch/util/SalesforceSourceConstants.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public class SalesforceSourceConstants {
5757
public static final int MIN_PK_CHUNK_SIZE = 1;
5858
// https://developer.salesforce.com/docs/atlas.en-us.252.0.api_asynch.meta/api_asynch/
5959
// async_api_headers_enable_pk_chunking.htm
60+
// **Always use lowercase names** to ensure consistency, especially if the sObject name is manually provided.
61+
// Update this list with each API version upgrade.
6062
public static final List<String> SUPPORTED_OBJECTS_WITH_PK_CHUNK = Arrays.asList("account",
6163
"accountcontactrelation",
6264
"accountteammember",
@@ -108,7 +110,7 @@ public class SalesforceSourceConstants {
108110
"loginhistory",
109111
"loyaltyaggrpointexprledger",
110112
"loyaltyledger",
111-
"LoyaltyLedgerTraceability",
113+
"loyaltyledgertraceability",
112114
"loyaltymembercurrency",
113115
"loyaltymembertier",
114116
"loyaltypartnerproduct",

src/main/java/io/cdap/plugin/salesforce/plugin/source/batch/util/SalesforceSplitUtil.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.cdap.plugin.salesforce.plugin.source.batch.util;
1717

18+
import com.google.common.base.Strings;
1819
import com.sforce.async.AsyncApiException;
1920
import com.sforce.async.AsyncExceptionCode;
2021
import com.sforce.async.BatchInfo;
@@ -252,4 +253,18 @@ public static RetryPolicy<Object> getRetryPolicy(Long initialRetryDuration, Long
252253
return RetryPolicy.builder().withMaxRetries(0).build();
253254
}
254255
}
256+
257+
// This is added for UCS use case only to identify the objects where PK chunking needs to be enabled by default.
258+
public static boolean isPkChunkingSupported(String sobjectName) {
259+
if (!Strings.isNullOrEmpty(sobjectName)) {
260+
return SalesforceSourceConstants.SUPPORTED_OBJECTS_WITH_PK_CHUNK.contains(sobjectName.toLowerCase())
261+
|| isCustomObject(sobjectName);
262+
}
263+
return false;
264+
}
265+
266+
// This is added only for UCS use case.
267+
private static boolean isCustomObject(String sobjectName) {
268+
return sobjectName.toLowerCase().endsWith("__c");
269+
}
255270
}

src/test/java/io/cdap/plugin/salesforce/SalesforceBulkUtilTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import com.sforce.async.BulkConnection;
2424
import com.sforce.async.ConcurrencyMode;
2525
import com.sforce.async.JobInfo;
26+
import io.cdap.plugin.salesforce.plugin.source.batch.util.SalesforceSourceConstants;
27+
import io.cdap.plugin.salesforce.plugin.source.batch.util.SalesforceSplitUtil;
28+
import org.junit.Assert;
2629
import org.junit.Before;
2730
import org.junit.Test;
2831

@@ -83,4 +86,25 @@ public void testAwaitCompletionBatchCompleted() throws Exception {
8386
// Call the awaitCompletion method and verify that it completes successfully
8487
SalesforceBulkUtil.awaitCompletion(bulkConnection, job, Collections.singletonList(batchInfo), true);
8588
}
89+
90+
@Test
91+
public void testPKChunkingEnabledForSobjectsWithAllCases() {
92+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("Account"));
93+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("account"));
94+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("aCcOuNt"));
95+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("Case"));
96+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("CONTACT"));
97+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("test_custom__c"));
98+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("Test_custom__c"));
99+
Assert.assertTrue(SalesforceSplitUtil.isPkChunkingSupported("TEST_CUSTOM__C"));
100+
Assert.assertFalse(SalesforceSplitUtil.isPkChunkingSupported("Not_Supported"));
101+
Assert.assertFalse(SalesforceSplitUtil.isPkChunkingSupported("notsupported"));
102+
}
103+
104+
@Test
105+
public void testPKChunkingSupportedListContainsNoUpperCaseValues() {
106+
// SUPPORTED_OBJECTS_WITH_PK_CHUNK list must have only lower case values.
107+
Assert.assertFalse(SalesforceSourceConstants.SUPPORTED_OBJECTS_WITH_PK_CHUNK.stream()
108+
.anyMatch(s -> s.matches(".*[A-Z].*")));
109+
}
86110
}

0 commit comments

Comments
 (0)