fix: deterministic code-point string collation for column store + aggregation
Replace localeCompare (default-locale, non-deterministic across environments — unsafe for a persisted sorted index) with UTF-8 byte / code-point order via a shared compareCodePoints() helper. String ordering is now deterministic and byte-identical to the native column store / aggregation sort, so results are the same with or without the native accelerator. Covers the aggregate orderBy sort and all 5 column-store comparison sites (tail buffer, merge sort, binary search). Adds compareCodePoints unit tests.
This commit is contained in:
parent
fe4f5df8c9
commit
547721ae14
6 changed files with 92 additions and 6 deletions
|
|
@ -26,6 +26,7 @@ import type {
|
|||
MetricState
|
||||
} from '../types/brainy.types.js'
|
||||
import { matchesMetadataFilter } from '../utils/metadataFilter.js'
|
||||
import { compareCodePoints } from '../utils/collation.js'
|
||||
import { bucketTimestamp } from './timeWindows.js'
|
||||
import { NounType } from '../types/graphTypes.js'
|
||||
|
||||
|
|
@ -685,7 +686,7 @@ export class AggregationIndex {
|
|||
if (typeof aVal === 'number' && typeof bVal === 'number') {
|
||||
return (aVal - bVal) * dir
|
||||
}
|
||||
return String(aVal).localeCompare(String(bVal)) * dir
|
||||
return compareCodePoints(String(aVal), String(bVal)) * dir
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue