Path: internal/service/data
Role: Row I/O (record jsonb), DSL queries, link_ref, calc_queue enqueue, bulk, export.
| File | Role |
|---|---|
vr_rows.go |
Create/Update/Delete/Get/list (record + version + enqueue self and link peers) |
link_write.go / record_cells.go |
link_ref binding; cache field hydrate |
query.go / query_exec.go |
ListRows, :query, SearchRows |
vr_fulltext.go / cascade.go |
Full text |
bulk.go |
Bulk upsert/delete |
Calc engine: internal/service/calc (queue + in-process worker). Design: record-calc.md.
/v1/data/tables/{id}/rows
→ meta.LoadColumns (catalog) + TableVTID
→ SQL on record or `{tenant_id}_record` (DataReadPool for query/export; DataPool for writes)
→ EmitEvent → EventBus (records.* / schema.*) → webhooks
- Filter / sort:
internal/dsl(type/attr/val) + VR JSONB predicates; link filterslink_ref(ARRAY_HAS/ empty); FTS is{"type":"FTS","val":"..."}; record ids are{"type":"IN","attr":"id","val":[...]}; lookup/formula/rollup filters readrecord.datacalc cache - Slow queries:
SLOW_QUERY_THRESHOLD_MSwarn - SQL statements: debug (
LOG_LEVEL=debug)
| Operation | Plane |
|---|---|
| Change table structure | /v1/admin/* → schema |
| Read/write rows | /v1/data/* → data |
meta/catalog— column metadata,vt_idshared.EmitEvent