From 7fc9f5cf667e2f923fe69c5b7d3e9fae8c64d7b7 Mon Sep 17 00:00:00 2001 From: dirtydishes Date: Tue, 20 Jan 2026 11:05:28 -0500 Subject: [PATCH] Add equity prints range query Adds a ClickHouse helper to fetch equity prints for a single underlying over a bounded time range with stable ts/seq ordering. --- packages/storage/src/clickhouse.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/storage/src/clickhouse.ts b/packages/storage/src/clickhouse.ts index 9a42b9f..730bdaf 100644 --- a/packages/storage/src/clickhouse.ts +++ b/packages/storage/src/clickhouse.ts @@ -773,6 +773,30 @@ export const fetchEquityPrintsAfter = async ( return EquityPrintSchema.array().parse(rows.map(normalizeEquityRow)); }; +export const fetchEquityPrintsRange = async ( + client: ClickHouseClient, + underlyingId: string, + startTs: number, + endTs: number, + limit: number +): Promise => { + const safeLimit = clampLimit(limit); + const safeStart = clampCursor(startTs); + const safeEnd = clampCursor(endTs); + const rangeStart = Math.min(safeStart, safeEnd); + const rangeEnd = Math.max(safeStart, safeEnd); + const safeUnderlying = quoteString(underlyingId); + + const result = await client.query({ + query: `SELECT * FROM ${EQUITY_PRINTS_TABLE} WHERE underlying_id = ${safeUnderlying} AND ts >= ${rangeStart} AND ts <= ${rangeEnd} ORDER BY ts DESC, seq DESC LIMIT ${safeLimit}`, + format: "JSONEachRow" + }); + + const rows = await result.json(); + const parsed = EquityPrintSchema.array().parse(rows.map(normalizeEquityRow)); + return parsed.reverse(); +}; + export const fetchEquityQuotesAfter = async ( client: ClickHouseClient, afterTs: number,