Skip to content

Bug: Query operations don't handle pagination (200 record limit) #166

@leogdion

Description

@leogdion

Problem

Query operations are limited to 200 records and don't handle continuationMarker for pagination:

  1. Bushel: BushelCloudKitService.queryRecords() returns max 200 records (line 71)
  2. Celestra: Delete operations won't remove all records if count exceeds 200

The OpenAPI-generated types include continuationMarker fields, but they're never used.

Proposed Solution

  1. Implement continuation marker handling in query operations
  2. Add recursive/iterative query pattern:
func queryAllRecords(recordType: String) async throws -> [RecordInfo] {
    var allRecords: [RecordInfo] = []
    var continuationMarker: String? = nil
    
    repeat {
        let (records, marker) = try await queryRecords(
            recordType: recordType,
            continuationMarker: continuationMarker
        )
        allRecords.append(contentsOf: records)
        continuationMarker = marker
    } while continuationMarker != nil
    
    return allRecords
}
  1. Update batch delete operations to handle pagination

Impact

  • Data Loss: Queries silently truncate large result sets
  • Incomplete Operations: Delete operations leave orphaned records
  • User Confusion: No indication that results are incomplete

Files Affected

  • Examples/Bushel/Sources/BushelImages/CloudKit/BushelCloudKitService.swift:71
  • Examples/Celestra/Sources/Celestra/Services/CloudKitService+Celestra.swift
  • Sources/MistKit/Service/CloudKitService+RecordManaging.swift:52
  • Sources/MistKit/Generated/Types.swift (continuationMarker fields exist but unused)

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions