pull method
Future<List<SyncRecord> >
pull({
- required String collection,
- DateTime? since,
- int? limit,
- int? offset,
- SyncFilter? filter,
override
Pull data from backend with optional pagination and filtering
Parameters:
collection: Collection name to pull fromsince: Only pull records modified after this timestamplimit: Maximum number of records to pulloffset: Number of records to skip (for pagination)filter: Optional sync filter for selective synchronization
Implementation
@override
Future<List<SyncRecord>> pull({
required String collection,
DateTime? since,
int? limit,
int? offset,
SyncFilter? filter,
}) async {
final Result result;
final effectiveSince = filter?.since ?? since;
final effectiveLimit = filter?.limit ?? limit;
if (effectiveSince != null) {
result = await connection.execute(
Sql.named('''
SELECT record_id, data, updated_at, version
FROM $collection
WHERE updated_at > @since
ORDER BY updated_at ASC
${effectiveLimit != null ? 'LIMIT @limit' : ''}
${offset != null ? 'OFFSET @offset' : ''}
'''),
parameters: {
'since': effectiveSince,
if (effectiveLimit != null) 'limit': effectiveLimit,
if (offset != null) 'offset': offset,
},
);
} else {
result = await connection.execute(
Sql.named('''
SELECT record_id, data, updated_at, version
FROM $collection
ORDER BY updated_at ASC
${effectiveLimit != null ? 'LIMIT @limit' : ''}
${offset != null ? 'OFFSET @offset' : ''}
'''),
parameters: {
if (effectiveLimit != null) 'limit': effectiveLimit,
if (offset != null) 'offset': offset,
},
);
}
return result.map((row) {
var recordData = row[1] as Map<String, dynamic>;
if (filter != null) {
recordData = filter.applyFieldFilter(recordData);
}
return SyncRecord(
recordId: row[0] as String,
data: recordData,
updatedAt: row[2] as DateTime,
version: row[3] as int,
);
}).toList();
}