Skip to content
Draft
12 changes: 12 additions & 0 deletions .changeset/multi-source-filters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@hyperdx/app': minor
---

The filters sidebar works across every selected source. Facet fields and
values merge across sources, value counts are summed, "load more" fans out,
and pins (personal and team-shared) read as a union and apply to the whole
selection. Checking a value filters every source that has the field; a source
whose table lacks a filtered column is excluded from the results with a
visible reason on its status chip instead of silently returning unfiltered
rows. Filter pills and add-to-filter from the row side panel work across
sources too.
15 changes: 15 additions & 0 deletions .changeset/multi-source-search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
'@hyperdx/app': minor
'@hyperdx/common-utils': minor
---

Search across multiple sources at once. The search page's source selector can
now expand into a multi-select (up to 3 log/trace sources): results interleave
into one timestamp-ordered timeline with a per-row source badge, normalized
columns (Timestamp, Source, Service, Level, Message, and Duration when traces
are included), a histogram stacked by source, and an add-column picker over the
union of the selected sources' columns. Each source runs its own query
pipeline — sources on different connections work, and a failing source shows a
status chip instead of failing the whole search. Multi-source mode is
Lucene-only and shareable via URL; saved searches and alerts remain
single-source for now.
9 changes: 9 additions & 0 deletions .changeset/multi-source-select-builder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@hyperdx/common-utils': minor
---

Add a builder for search queries that project a canonical, source-independent
column set. Given a source, it emits that source's semantic expressions
(timestamp, service, severity/status, body/span name, duration) under shared
aliases, and pads columns a source doesn't have with NULL, so results from
different tables share one shape.
12 changes: 12 additions & 0 deletions .changeset/multi-source-sql-and-exclusion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@hyperdx/app': minor
'@hyperdx/common-utils': minor
---

SQL search now works across multiple sources, and a source that can't answer
the search says so. Previously multi-source search refused SQL outright, and a
Lucene query naming a field a source doesn't have silently returned nothing
from that source — the field resolved to a condition matching no rows. Both
languages now resolve the columns a search references against each source's
schema up front: sources that have them run the query, and a source that
doesn't is excluded with the missing column named on its status chip.
9 changes: 9 additions & 0 deletions .changeset/null-literal-select-alias.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@hyperdx/common-utils': patch
---

Fix `NULL AS "alias"` projections being dropped from the SELECT alias map. A
column projected as a NULL literal was omitted, so anything resolving a value
back to its source expression (for example building a WHERE clause that
identifies a specific row) treated the alias as a real table column and
produced SQL referencing a column that does not exist.
Loading