mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
3.6 KiB
3.6 KiB
DBAL Capability Implementation
This document maps the capabilities declared in api/schema/capabilities.yaml to concrete implementations so reviewers can verify the runtime actually delivers what it advertises.
| Capability | Supported By | Status | Implementation Notes |
|---|---|---|---|
transactions |
TypeScript PrismaAdapter + C++ SqlAdapter |
✅ | Example: ts/src/adapters/prisma-adapter.ts and C++ SqlAdapter wrap Prisma/libpq transactions with ACL validation. |
nested_transactions |
Prisma client | ✅ | Prisma supports SAVEPOINTs; the TypeScript adapter handles them via raw transactions (see prisma-adapter.ts). The C++ path currently runs SQL statements inside single transactions but uses the SqlAdapter scaffolding to add nested support later. |
joins |
Prisma, SQLite | ✅ | Prisma adapter uses findMany with includes; the SQLite stub demonstrates how to shape JOINs before SQL adapters are ready. C++ SqlAdapter executes SQL that can contain joins once runQuery is wired. |
full_text_search |
SQLite, MongoDB | ⚠️ | Supported via SQLite's FTS extension and MongoDB's text indexes; Prisma exposes contains filters. The C++ adapter relies on Prisma to offer search for now and falls back to Postgres to_tsvector when extended. |
ttl |
MongoDB | ⚠️ | TTL indexes exist in MongoDB adapters; other adapters require polling/cleanup jobs. |
json_queries |
Prisma, SQLite, MongoDB | ✅ | Prisma adapter exposes JSON filters; C++ RequestsClient + Native Prisma bridge can POST JSON filters to the Next.js API for @prisma/client. |
aggregations |
Prisma, SQLite, MongoDB | ✅ | Prisma adapter supports aggregate queries; SQL adapters can run COUNT/SUM. |
relations |
Prisma, SQLite | ✅ | Prisma adapter handles relations via include, while SQL adapters map foreign keys consistently once SQL statements cover them. |
migrations |
Prisma (automatic) | ✅ | prisma migrate workflows run ahead of TS/C++ builds; refer to prisma/migrations and package.json scripts. |
schema_introspection |
Prisma, SQLite | ✅ | Prisma schema is generated from DBAL (prisma/schema.prisma), keeping DBAL as the source of truth. |
connection_pooling |
Prisma + cpr HTTP client | ✅ | Prisma client manages pools for TypeScript; C++ SqlPool plus RequestsClient ensures safe reuse of HTTP/SQL connections. |
read_replicas |
Prisma (optional) | ⚠️ | Prisma supports multiple datasources; DBAL proxies to the configured DATABASE_URL and allows future replica awareness through NativePrismaAdapter. |
Cross-Cutting Features
- Native Prisma bridge –
NativePrismaAdaptercallsfrontends/nextjs/src/app/api/native-prisma/route.ts, which validatesDBAL_NATIVE_PRISMA_TOKEN, translates$n/?placeholders into aPrisma.sqltemplate, and executes the request through the shared Prisma client so the daemon can "speak native Prisma" without embedding Node. - Capability detection –
dbal/shared/tools/conformancescripts run both TypeScript and C++ implementations against shared YAML contracts forapi/schema. - Graceful degradation – SQL adapters default to returning meaningful
dbal::Errorvalues (sql_adapter.hpp), ensuring non-supported features degrade with clear error messages.
For concrete test coverage, see:
dbal/development/tests– Vitest suites covering Prisma adapter behaviors.dbal/production/tests– C++ unit tests that target entity CRUDs and will eventually target the SQL adapters oncerunQueryis implemented.- Playwright suites in
frontends/nextjs/e2everify the UI paths that rely on DBAL capabilities.