Query pipeline
This is the whole path from a typed question to a returned number. Each stage below cites the file that implements it, so you can check the claim rather than take it. Scroll to step through the pipeline.
Execution
Snyte registers the connected source's schema, then asks the configured model to translate the question into SQL against that schema. Translation failing is a hard error, not a fallback to something approximate: if the model returns no SQL, the query fails rather than inventing a result.
query_service_enhanced.go — RegisterDatabaseSchema, ConvertNaturalLanguageToSQL
The generated SQL is written onto the query record rather than discarded after execution. This is what makes an answer reviewable after the fact, and it is the difference between an analytics tool an auditor will accept and one they will not.
query_service.go — progress 40, 'SQL generated'
Every query carries the caller's organization scope. On the decision tables, Postgres row-level security enforces it a second time in the database, keyed on a transaction-local setting that matches no rows when it is unset — so the failure mode is an empty result, never another tenant's data. Coverage is currently those six tables; elsewhere the scope is an application predicate.
org_rls.go · migrations/000026_decision_rls.up.sql (phase 1, six tables)
Snyte queries the connected system in place rather than replicating it into a Snyte-side store. Progress is emitted over a WebSocket around the real execution boundaries, so a long query reports where it actually is instead of animating a fake progress bar.
query_service_enhanced.go — runSelectQuery, 'never simulated, never mocked'
Columns, rows, and elapsed time are written to a result cache keyed on a hash of the statement and the data source set, with a one-hour expiry. The cache is keyed on the SQL, so a differently-worded question that compiles to the same statement hits it.
query_service_enhanced.go — generateQueryHash, SetQueryCache, ExpiresAt +1h
Completion writes an audit event that is queryable per user, per organization, and system-wide. Authentication and security events go to the same log, so the question 'who asked what, and when' has one answer rather than three.
audit_service.go — LogEvent, LogAuthEvent, GetOrganizationEvents
Sources
The catalog below is transcribed from the API. Coverage is not uniform: some entries are full SQL connectors with schema discovery, and some are event-ingestion mappings that do not answer ad-hoc queries. Ask us which ones matter for your stack before you assume.
36 connector types across 15 categories, declared in the API catalog. Depth varies by entry: some are full SQL connectors with schema discovery, others are event-ingestion mappings that do not answer ad-hoc queries. Ask which ones cover your stack before assuming.
Relational
Relational
Relational
Relational
Relational
Warehouse
Warehouse
Warehouse
Warehouse
Analytics engine
Analytics engine
Document
Search
Files
Files
API
CRM
CRM
CRM
Product events
Product events
Product events
BI tools
BI tools
BI tools
Observability
Observability
Observability
Execution
Execution
Execution
Execution
Support
Support
Revenue
Enterprise systems
Interfaces
Query progress is broadcast to the user and to a per-query room, so a shared dashboard reflects a long-running query as it moves.
wsinfra — NewQueryProgressMessage, GetQueryRoomID
Dashboards can be embedded into another application by token. Treat this as early: the token store is in-process today, so it does not survive a restart or scale horizontally.
embed_service.go — token issuance, in-memory store
Queries can be scheduled and results exported for distribution outside the product.
export_service.go, schedules surface
Next
The fastest evaluation is a session against one of your own sources with your own reviewers watching the trace.