Repository navigation
Troubleshooting
Confirm that the selected table has an endpoint for the exact operation and that the endpoint includes the server-resolved role key. NONE is an explicit deny; an absent role is also rejected.
Check the intersection of requested fields, allowed, and disallowed. For joined fields, inspect the policy on the joined table as well.
Inspect resolved $user and $data values, table qualification, operator shape, and the logical combination of request filters with policy filters.
Remember that request and policy where expressions are combined. Temporarily reduce the case to one condition at a time in a non-production test environment.
Verify the payload shape, whether data is an object or array, and whether transition logic compares the intended $data field to the correct current column.
Only INNER and LEFT are exported join types. Confirm that both table names exist in the structure, every field exists in the Drizzle schema, and the role may access joined fields.
Check the trigger type, endpoint placement, and whether disable_triggers is enabled. Nested trigger queries may intentionally disable triggers to avoid recursion.
Queries inside a TRANSACTION phase run sequentially. Separate top-level phases are constructed and executed through Promise.all; do not rely on ordering between them.
- Reproduce with one table, endpoint, role, and field.
- Validate the raw request against
StructuredQuery. - Verify the authenticated user and role created by the server.
- Inspect the relevant endpoint permission object.
- Remove joins and triggers, then reintroduce them individually.
- Run the closest repository test or add a denied-path regression test.
- Capture internal errors securely without returning them to clients.
Start Here
Learn & Build
- Learn VoidQL
- Build with VoidQL
- Query Operations
- Authorization Patterns
- Validation & Workflows
- Triggers & Extensibility
Use & Reference
Internals & Project