Skip to content

Commit f00941e

Browse files
committed
Additional 260 updates
1 parent 686dd3b commit f00941e

File tree

2 files changed

+28
-19
lines changed

2 files changed

+28
-19
lines changed

force-app/repository/Cursor.cls

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
public virtual without sharing class Cursor {
2-
@TestVisible
3-
private static Integer maxFetchSize = 2000;
2+
public static final Integer MAX_FETCH_SIZE {
3+
get {
4+
MAX_FETCH_SIZE = MAX_FETCH_SIZE ?? maxRecordsPerFetchCall;
5+
return MAX_FETCH_SIZE;
6+
}
7+
private set;
8+
}
9+
410
private static final Integer MAX_FETCHES_PER_TRANSACTION = Limits.getLimitFetchCallsOnApexCursor();
11+
12+
@TestVisible
13+
private static Integer maxRecordsPerFetchCall = 2000;
14+
515
@TestVisible
616
private static Integer localFetchesMade;
717

818
private Integer cursorNumRecords;
9-
private Integer fetchesPerTransaction = 1;
19+
private Integer fetchesPerTransaction = MAX_FETCHES_PER_TRANSACTION;
1020
private final Database.Cursor cursor;
1121

1222
public Cursor(String finalQuery, Map<String, Object> bindVars, System.AccessLevel accessLevel) {
@@ -66,24 +76,22 @@ public virtual without sharing class Cursor {
6676
}
6777

6878
public virtual Integer getNumRecords() {
69-
// cache the value for now, as changes made to Apex Cursors currently have calling getNumRecords()
70-
// consume a SOQL query each time
7179
this.cursorNumRecords = this.cursorNumRecords ?? this.cursor?.getNumRecords() ?? 0;
7280
return this.cursorNumRecords;
7381
}
7482

7583
protected Integer getAdvanceBy(Integer start, Integer advanceBy) {
7684
Integer possibleFetchSize = Math.min(advanceBy, this.getNumRecords() - start);
77-
if (possibleFetchSize > maxFetchSize) {
85+
if (possibleFetchSize > maxRecordsPerFetchCall) {
7886
System.debug(
7987
System.LoggingLevel.DEBUG,
8088
'Fetch size: ' +
8189
possibleFetchSize +
8290
' exceeded platform max fetch size of ' +
83-
maxFetchSize +
91+
maxRecordsPerFetchCall +
8492
', defaulting to max fetch size'
8593
);
86-
possibleFetchSize = maxFetchSize;
94+
possibleFetchSize = maxRecordsPerFetchCall;
8795
} else if (possibleFetchSize < 0) {
8896
possibleFetchSize = 0;
8997
}

force-app/repository/CursorTest.cls

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ private class CursorTest {
1515
}
1616

1717
@IsTest
18-
static void itCapsMaxFetchSize() {
19-
Cursor.maxFetchSize = 20;
18+
static void itCapsmaxRecordsPerFetchCall() {
19+
Cursor.maxRecordsPerFetchCall = 20;
20+
Integer oneMoreThanMaxFetch = Cursor.maxRecordsPerFetchCall + 1;
21+
2022
List<Account> accounts = new List<Account>();
21-
for (Integer i = 0; i < Cursor.maxFetchSize + 1; i++) {
23+
for (Integer i = 0; i < oneMoreThanMaxFetch; i++) {
2224
accounts.add(new Account(Name = 'Fetch ' + i));
2325
}
2426
insert accounts;
2527

26-
Integer oneMoreThanMaxFetch = Cursor.maxFetchSize + 1;
2728
Exception ex;
2829
List<SObject> results;
2930
Cursor instance = new Cursor('SELECT Id FROM Account', new Map<String, Object>(), System.AccessLevel.SYSTEM_MODE);
@@ -34,27 +35,27 @@ private class CursorTest {
3435
}
3536

3637
Assert.areEqual(null, ex?.getMessage());
37-
Assert.areEqual(Cursor.maxFetchSize, results.size());
38-
Assert.areEqual(1, Cursor.localFetchesMade);
38+
Assert.areEqual(2, Cursor.localFetchesMade);
39+
Assert.areEqual(oneMoreThanMaxFetch, results.size());
3940
}
4041

4142
@IsTest
4243
static void itFetchesMultipleTimesPerTransactionWhenMoreThanMaxFetch() {
43-
Cursor.maxFetchSize = 20;
44+
Cursor.maxRecordsPerFetchCall = 20;
4445
List<Account> accounts = new List<Account>();
4546
Set<String> expectedFetchNames = new Set<String>();
46-
for (Integer i = 0; i < Cursor.maxFetchSize + 1; i++) {
47+
for (Integer i = 0; i < Cursor.maxRecordsPerFetchCall + 1; i++) {
4748
String accountName = 'Fetch' + i;
4849
expectedFetchNames.add(accountName);
4950
accounts.add(new Account(Name = accountName));
5051
}
5152
insert accounts;
5253

53-
Integer oneMoreThanMaxFetch = Cursor.maxFetchSize + 1;
54+
Integer oneMoreThanMaxFetch = Cursor.maxRecordsPerFetchCall + 1;
5455
Cursor instance = new Cursor('SELECT Name FROM Account', new Map<String, Object>(), System.AccessLevel.SYSTEM_MODE);
5556
List<SObject> results = instance.setFetchesPerTransaction(2).fetch(0, oneMoreThanMaxFetch);
5657

57-
Assert.areEqual(Cursor.maxFetchSize + 1, results.size());
58+
Assert.areEqual(Cursor.maxRecordsPerFetchCall + 1, results.size());
5859
Assert.areEqual(2, Cursor.localFetchesMade);
5960
Set<String> actuallyFetchedNames = new Set<String>();
6061
for (Account account : (List<Account>) results) {
@@ -65,7 +66,7 @@ private class CursorTest {
6566

6667
@IsTest
6768
static void itFetchesMultipleTimesPerTransaction() {
68-
Cursor.maxFetchSize = 1;
69+
Cursor.maxRecordsPerFetchCall = 1;
6970
insert new List<Account>{ new Account(Name = 'One'), new Account(Name = 'Two') };
7071

7172
Cursor instance = new Cursor('SELECT Id FROM Account', new Map<String, Object>(), System.AccessLevel.SYSTEM_MODE)

0 commit comments

Comments
 (0)