| 277 | // Create a value extractor for raw rows that extracts ALL orderBy column values |
| 278 | // This is used for tracking sent values and building composite cursors |
| 279 | const rawRowValueExtractor = (row: Record<string, unknown>): unknown => { |
| 280 | if (orderByClause.length === 1) { |
| 281 | // Single column: return single value |
| 282 | return firstColumnValueExtractor(row) |
| 283 | } |
| 284 | if (allColumnExtractors) { |
| 285 | // Multi-column: return array of all values |
| 286 | return allColumnExtractors.map((extractor) => extractor(row)) |
| 287 | } |
| 288 | // Fallback (shouldn't happen) |
| 289 | return undefined |
| 290 | } |
| 291 | |
| 292 | orderByOptimizationInfo = { |
| 293 | alias: orderByAlias, |