Replace direct Trino HTTPS configuration with nginx reverse proxy
for TLS termination, following Trino docs best practices. Add
http-server.process-forwarded=true to Trino config. Remove alpha
warning from TrinoForm.vue.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- buildSchemaFilter now uses escapeString() to escape single quotes in
schema, only, and ignore filter values.
- Trino driver now wraps this.db with wrapIdentifier() in all queries
(listSchemas, listTables, listTableColumns, buildPaginatedQuery).
- Trino listTableColumns escapes table and schema string literals.
- Added unit tests for SQL injection in buildSchemaFilter and Trino.
- listTables(null) no longer returns []. Uses buildSchemaFilter() to
optionally filter by schema, matching the PostgreSQL driver pattern.
- SSL/TLS connections now work. Certificate files (CA, cert, key) are
read and passed to trino-client. When no certs are provided,
rejectUnauthorized defaults to false (trust server cert).
- Removed server:ssl from Trino disabledFeatures so the SSL toggle
appears in the connection form.
- URL parser now auto-enables ssl for https:// URLs.
- Added integration tests for listTables and SSL (with HTTPS-enabled
Trino testcontainer).
- Added unit tests for SSL config propagation.
- Updated Trino connection docs (EN + ES) with SSL section.
- Add connectionFolderId/queryFolderId to ReorderResult interface
- Update cloud modules to apply folder_id from reorder response
- Update test mocks to include folder_id
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add dedicated reorder API endpoint that returns all affected siblings
- Fix position collisions by updating all sibling positions from API response
- Unify local and cloud workspace reorder actions with same interface
- Fix local workspace bug where unsorted state caused incorrect positions
- Add pendingSaveIds tracking to prevent poll from overwriting optimistic updates
- Add comprehensive unit tests for reorder scenarios
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
TypeORM @ManyToOne relation fields were initialized to null (= null),
making them own properties that cls.merge() copied into every transport.
On the next save, TypeORM treated the explicit null relation as "unset
this FK", resetting connectionFolderId/queryFolderId in-memory even
though the SQL write was correct.
Fix: remove = null initializers from all @ManyToOne relation fields so
they are not own properties when unloaded. TypeORM then uses the
explicit FK column value exclusively.
Also moves foldersWithConnections from ConnectionSidebar into the
connectionFolders store module as a parameterized getter, and adds a
moveToFolder action to both local and cloud connection folder modules.
Adds tests for the appdb save handler and the store module.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add entity-level deletion guards to QueryFolder and ConnectionFolder:
if a folder still has queries/connections, .remove() throws a
descriptive error before touching the database. This mirrors the
cloud API behaviour where non-empty folders cannot be deleted.
Unit tests (18 total, 9 per model) cover:
- Basic save/retrieve
- Deletion blocked when folder contains items (checks error message,
count wording, singular vs plural)
- Deletion succeeds when folder is empty
- Deletion succeeds after items are moved out (items survive)
- Parent folder relationship is persisted correctly
- Deleting a parent folder (no direct items) succeeds and sets
child folder parentId to NULL via DB-level SET NULL
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>