From 74d08d1e60b8c3836d191022b77531f74a931430 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Tue, 20 Oct 2026 00:35:13 +0700 Subject: [PATCH] chore(releases): record 0.82.0 and re-check engines --- docs/rebuild/design/architecture.md | 4 +- .../content/de/databases/duckdb-client.json | 4 +- .../data/content/de/databases/etcd-gui.json | 2 +- .../content/de/databases/mongodb-client.json | 2 +- .../content/de/databases/mysql-client.json | 2 +- .../data/content/de/databases/redis-gui.json | 2 +- .../content/de/databases/sqlite-client.json | 2 +- resources/data/content/de/engines.json | 4 +- .../content/de/features/data-editing.json | 1 - .../data/content/de/features/schema.json | 2 +- .../content/en/databases/duckdb-client.json | 4 +- .../data/content/en/databases/etcd-gui.json | 2 +- .../content/en/databases/mongodb-client.json | 2 +- .../content/en/databases/mysql-client.json | 2 +- .../data/content/en/databases/redis-gui.json | 2 +- .../content/en/databases/sqlite-client.json | 2 +- resources/data/content/en/engines.json | 4 +- .../content/en/features/data-editing.json | 1 - .../data/content/en/features/schema.json | 2 +- .../content/es/databases/duckdb-client.json | 4 +- .../data/content/es/databases/etcd-gui.json | 2 +- .../content/es/databases/mongodb-client.json | 2 +- .../content/es/databases/mysql-client.json | 2 +- .../data/content/es/databases/redis-gui.json | 2 +- .../content/es/databases/sqlite-client.json | 2 +- resources/data/content/es/engines.json | 4 +- .../content/es/features/data-editing.json | 1 - .../data/content/es/features/schema.json | 2 +- .../content/fr/databases/duckdb-client.json | 4 +- .../data/content/fr/databases/etcd-gui.json | 2 +- .../content/fr/databases/mongodb-client.json | 2 +- .../content/fr/databases/mysql-client.json | 2 +- .../data/content/fr/databases/redis-gui.json | 2 +- .../content/fr/databases/sqlite-client.json | 2 +- resources/data/content/fr/engines.json | 4 +- .../content/fr/features/data-editing.json | 1 - .../data/content/fr/features/schema.json | 2 +- .../content/id/databases/duckdb-client.json | 4 +- .../data/content/id/databases/etcd-gui.json | 2 +- .../content/id/databases/mongodb-client.json | 2 +- .../content/id/databases/mysql-client.json | 2 +- .../data/content/id/databases/redis-gui.json | 2 +- .../content/id/databases/sqlite-client.json | 2 +- resources/data/content/id/engines.json | 4 +- .../content/id/features/data-editing.json | 1 - .../data/content/id/features/schema.json | 2 +- .../content/it/databases/duckdb-client.json | 4 +- .../data/content/it/databases/etcd-gui.json | 2 +- .../content/it/databases/mongodb-client.json | 2 +- .../content/it/databases/mysql-client.json | 2 +- .../data/content/it/databases/redis-gui.json | 2 +- .../content/it/databases/sqlite-client.json | 2 +- resources/data/content/it/engines.json | 4 +- .../content/it/features/data-editing.json | 1 - .../data/content/it/features/schema.json | 2 +- .../content/ja/databases/duckdb-client.json | 4 +- .../data/content/ja/databases/etcd-gui.json | 2 +- .../content/ja/databases/mongodb-client.json | 2 +- .../content/ja/databases/mysql-client.json | 2 +- .../data/content/ja/databases/redis-gui.json | 2 +- .../content/ja/databases/sqlite-client.json | 2 +- resources/data/content/ja/engines.json | 4 +- .../content/ja/features/data-editing.json | 1 - .../data/content/ja/features/schema.json | 2 +- .../content/ko/databases/duckdb-client.json | 4 +- .../data/content/ko/databases/etcd-gui.json | 2 +- .../content/ko/databases/mongodb-client.json | 2 +- .../content/ko/databases/mysql-client.json | 2 +- .../data/content/ko/databases/redis-gui.json | 2 +- .../content/ko/databases/sqlite-client.json | 2 +- resources/data/content/ko/engines.json | 4 +- .../content/ko/features/data-editing.json | 1 - .../data/content/ko/features/schema.json | 2 +- .../pt-BR/databases/duckdb-client.json | 4 +- .../content/pt-BR/databases/etcd-gui.json | 2 +- .../pt-BR/databases/mongodb-client.json | 2 +- .../content/pt-BR/databases/mysql-client.json | 2 +- .../content/pt-BR/databases/redis-gui.json | 2 +- .../pt-BR/databases/sqlite-client.json | 2 +- resources/data/content/pt-BR/engines.json | 4 +- .../content/pt-BR/features/data-editing.json | 1 - .../data/content/pt-BR/features/schema.json | 2 +- .../content/vi/databases/duckdb-client.json | 4 +- .../data/content/vi/databases/etcd-gui.json | 2 +- .../content/vi/databases/mongodb-client.json | 2 +- .../content/vi/databases/mysql-client.json | 2 +- .../data/content/vi/databases/redis-gui.json | 2 +- .../content/vi/databases/sqlite-client.json | 2 +- resources/data/content/vi/engines.json | 4 +- .../content/vi/features/data-editing.json | 1 - .../data/content/vi/features/schema.json | 2 +- .../zh-Hans/databases/duckdb-client.json | 4 +- .../content/zh-Hans/databases/etcd-gui.json | 2 +- .../zh-Hans/databases/mongodb-client.json | 2 +- .../zh-Hans/databases/mysql-client.json | 2 +- .../content/zh-Hans/databases/redis-gui.json | 2 +- .../zh-Hans/databases/sqlite-client.json | 2 +- resources/data/content/zh-Hans/engines.json | 4 +- .../zh-Hans/features/data-editing.json | 1 - .../data/content/zh-Hans/features/schema.json | 2 +- .../zh-Hant/databases/duckdb-client.json | 4 +- .../content/zh-Hant/databases/etcd-gui.json | 2 +- .../zh-Hant/databases/mongodb-client.json | 2 +- .../zh-Hant/databases/mysql-client.json | 2 +- .../content/zh-Hant/databases/redis-gui.json | 2 +- .../zh-Hant/databases/sqlite-client.json | 2 +- resources/data/content/zh-Hant/engines.json | 4 +- .../zh-Hant/features/data-editing.json | 1 - .../data/content/zh-Hant/features/schema.json | 2 +- resources/data/engines.json | 328 +++++++++--------- resources/data/platforms.json | 10 +- resources/js/lib/data/engines.ts | 2 +- tests/Feature/Data/EnginesDataTest.php | 31 +- tests/Support/app-ui-labels.php | 2 + 114 files changed, 291 insertions(+), 338 deletions(-) diff --git a/docs/rebuild/design/architecture.md b/docs/rebuild/design/architecture.md index 5365a383..80e57b3f 100644 --- a/docs/rebuild/design/architecture.md +++ b/docs/rebuild/design/architecture.md @@ -526,9 +526,9 @@ the fields the IA and positioning read. }, "versionFloor": { "text": "…", "enforced": false, "evidence": "…" }, // or null "bundledVersion": null, // the embedded library version (SQLite, DuckDB), else null - "limits": [{ "id": "…", "value": null, "evidence": "file:line" }], + "limits": [{ "id": "…", "value": null, "evidence": "file:line" }], // an app path at macTag, or "TableProApp/docs:page.mdx:line" at docsCommit "ios": { "inPicker": false, "openable": false, "appearsAfterSync": false }, - "verified": { "macTag": "v0.77.0", "iosCommit": "…", "date": "2026-10-02" } + "verified": { "macTag": "v0.82.0", "iosCommit": "…", "docsCommit": "…", "date": "2026-10-19" } }] ``` diff --git a/resources/data/content/de/databases/duckdb-client.json b/resources/data/content/de/databases/duckdb-client.json index 5389c92e..a54c53a4 100644 --- a/resources/data/content/de/databases/duckdb-client.json +++ b/resources/data/content/de/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Die Datei teilen und sichern", "paragraphs": [ "Solange TablePro eine Datei hält, können die duckdb-CLI, ein Notebook oder ein dbt-Lauf sie nicht öffnen. Setze Release the File Lock After, um die Datei nach einigen inaktiven Minuten freizugeben und bei der nächsten Abfrage wieder zu übernehmen, oder Open the File Read-Only, damit mehrere Leser sie teilen können. Database > Release File Lock gibt sie sofort frei und behält deine Tabs. Die Freigabe wird mit Begründung abgelehnt, wenn die Sitzung eine offene Transaktion, temporäre Tabelle, eingebundene Datenbank oder geänderte Einstellung hält.", - "Das Server-Dashboard zeigt Datenbankgröße, Blockgröße, Gesamtzahl der Blöcke, Speicherlimit und Threads.", "Backup Dump braucht keine Installation, da {dumpTool} den Dump über die offene Verbindung schreibt. Wähle eine .duckdb-Datei zum späteren Wiederherstellen in TablePro oder einen Ordner mit schema.sql, load.sql und einer Parquet-Datei pro Tabelle, die pandas, Spark und BigQuery direkt lesen. Restore Dump stoppt beim ersten Objekt, dessen Name bereits vergeben ist." ] }, diff --git a/resources/data/content/de/databases/etcd-gui.json b/resources/data/content/de/databases/etcd-gui.json index 6aa61556..b289294e 100644 --- a/resources/data/content/de/databases/etcd-gui.json +++ b/resources/data/content/de/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Setze Key Prefix Root, etwa /app, um eine Verbindung auf einen Teilbaum zu begrenzen. Die Seitenleiste gruppiert Schlüssel nach ihrem ersten Pfadsegment darunter; jeder Schlüssel ist eine Zeile mit Wert, Version, Änderungs- und Erstellungsrevision sowie Lease.", "Das Speichern einer Änderung sendet Befehle. Ein neuer Wert oder Lease schreibt den Schlüssel erneut; ein NULL-Lease entfernt den Lease, und beim Umbenennen wird der neue Name geschrieben und der alte gelöscht. Revisionsspalten gehören etcd; ihre Bearbeitung stoppt daher das Speichern und nennt die Spalte.", "Nutze Befehle im etcdctl-Stil für Schlüssel, Watches, Leases, Mitglieder, Endpunkte, Kompaktierung und Zugriffsrechte, mit Flag-Vervollständigung. Nicht unterstützte Befehle werden vor dem Senden abgelehnt.", - "Der etcd-Treiber kann keine schreibgeschützte Sitzung öffnen, daher behandelt Safe Mode jeden Befehl als Schreibzugriff: Auf den Stufen Alert und Safe Mode fragt jeder Befehl zuerst nach; Read-Only blockiert alle." + "Safe Mode führt get, watch und die Befehle, die nur auflisten oder berichten, als Lesezugriffe aus und zählt jeden anderen Befehl als Schreibzugriff." ] }, { diff --git a/resources/data/content/de/databases/mongodb-client.json b/resources/data/content/de/databases/mongodb-client.json index 83c435bb..1b825b5a 100644 --- a/resources/data/content/de/databases/mongodb-client.json +++ b/resources/data/content/de/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Sieh Felder der obersten Ebene als Spalten und verschachtelte Objekte als Extended JSON. Zellenänderungen erhalten Typen wie Datumswerte und ObjectIds. Verschachtelte Änderungen aktualisieren nur den geänderten Pfad, etwa address.city.", "Insert Document und Edit Document nutzen Extended JSON. Edit Document liest das Serverdokument erneut und verhindert das Speichern, wenn es inzwischen geändert wurde oder verschwunden ist. Remove Field sendet $unset.", "Die Filterleiste reicht bis in verschachtelte Objekte und Arrays von Objekten, sodass du direkt nach customer.country und items.sku filtern kannst. Ein Feld mit GeoJSON öffnet sich in der Kartenansicht.", - "Safe Mode behandelt jede MongoDB-Anweisung als Schreibzugriff, da der Treiber keine schreibgeschützte Sitzung öffnen kann. Die Stufen Alert und Safe Mode fragen bei jeder Anweisung nach; Read-Only blockiert alle." + "Safe Mode führt eine Anweisung als Lesezugriff aus, wenn sie ein einzelner lesender Aufruf ist, etwa find, countDocuments oder ein aggregate ohne $out oder $merge. Jedes andere JavaScript zählt als Schreibzugriff." ] }, { diff --git a/resources/data/content/de/databases/mysql-client.json b/resources/data/content/de/databases/mysql-client.json index e246a403..26f1e577 100644 --- a/resources/data/content/de/databases/mysql-client.json +++ b/resources/data/content/de/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "Kann TablePro über einen lokalen MySQL-Socket verbinden?", - "answer": "Nein. Verbindungen nutzen TCP, daher muss auf dem Server der Netzwerkzugriff aktiviert sein. Um einen Socket auf einem entfernten Server zu erreichen, leite ihn über einen SSH-Tunnel weiter." + "answer": "Ja, für einen Server auf diesem Mac. Stelle Connect Using auf Socket und gib den Pfad seiner Socket-Datei ein. Host und Port verschwinden aus dem Formular, und ein SSH-Tunnel erreicht keine Socket-Datei." }, { "id": "mysqldump", diff --git a/resources/data/content/de/databases/redis-gui.json b/resources/data/content/de/databases/redis-gui.json index bac51007..e954f6c8 100644 --- a/resources/data/content/de/databases/redis-gui.json +++ b/resources/data/content/de/databases/redis-gui.json @@ -38,7 +38,7 @@ "Durchsuche Schlüssel in durch Doppelpunkte getrennten Ordnern oder wähle ein anderes Trennzeichen. Jede Zeile zeigt Typ, TTL, Länge und Wert. Collections zeigen ihre ersten Einträge; Nicht-UTF-8-Werte öffnen sich im Hex-Editor.", "Bearbeite Schlüsselnamen, TTLs und String-Werte im Raster. Add Row erstellt Hashes, Listen, Sets, Sorted Sets oder Strings. Filtere Namen und Typen serverseitig mit SCAN MATCH und SCAN TYPE.", "Führe Befehle mit Anführungszeichen im redis-cli-Stil aus. Unbekannte Befehle werden unverändert gesendet. DB 3 GET key adressiert eine andere Datenbank, ohne die Sitzung zu ändern. In MULTI bleiben Antworten bis EXEC in der Warteschlange.", - "Safe Mode zählt jeden Redis-Befehl einschließlich GET als Schreibzugriff; die Stufen Alert und Safe Mode fragen bei jedem nach, Read-Only blockiert alle. FLUSHDB und FLUSHALL fragen auch bei Silent nach." + "Safe Mode führt Befehle aus seiner Liste der Lesebefehle, etwa GET, als Lesezugriff aus und zählt jeden anderen Befehl als Schreibzugriff. FLUSHDB und FLUSHALL fragen auch bei Silent nach." ] }, { diff --git a/resources/data/content/de/databases/sqlite-client.json b/resources/data/content/de/databases/sqlite-client.json index 9b7d5a50..661cfed7 100644 --- a/resources/data/content/de/databases/sqlite-client.json +++ b/resources/data/content/de/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Warten und sichern", "paragraphs": [ - "Die Tabellenwartung führt VACUUM, ANALYZE, REINDEX und eine Integritätsprüfung aus und zeigt jede davon vorher als SQL. Das Server-Dashboard zeigt Dateigröße, Seitenzahl, Seitengröße, Journal-Modus und Cachegröße.", + "Die Tabellenwartung führt VACUUM, ANALYZE, REINDEX und eine Integritätsprüfung aus und zeigt jede davon vorher als SQL.", "Backup Dump schreibt die Datenbank mit {dumpTool} in eine .sql-Datei; Restore Dump führt eine solche Datei auf einer Datenbank aus." ] }, diff --git a/resources/data/content/de/engines.json b/resources/data/content/de/engines.json index 4fc69d64..d624211c 100644 --- a/resources/data/content/de/engines.json +++ b/resources/data/content/de/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN-Diagramme, Benutzer und Sitzungen; Backups mit mysqldump.", "limits": { - "tcp-only": "Verbindungen verwenden Host und Port über TCP. Lokale Unix-Sockets werden nicht unterstützt.", "load-data-local-refused": "Der Treiber verweigert LOAD DATA LOCAL INFILE. Lade Dateien stattdessen über „Importieren“." } }, @@ -188,8 +187,7 @@ "tagline": "Query-DSL-Konsole; Dokumentbearbeitung anhand von _id.", "limits": { "no-opensearch": "OpenSearch wird nicht unterstützt.", - "aliases-not-listed": "Aliasse und Datenstreams werden nicht in der Seitenleiste angezeigt. Sprich sie in der Konsole mit ihrem Namen an.", - "no-ssh": "SSH-Tunnel werden nicht unterstützt." + "aliases-not-listed": "Aliasse und Datenstreams werden nicht in der Seitenleiste angezeigt. Sprich sie in der Konsole mit ihrem Namen an." } }, "etcd": { diff --git a/resources/data/content/de/features/data-editing.json b/resources/data/content/de/features/data-editing.json index f129cdea..51383d0d 100644 --- a/resources/data/content/de/features/data-editing.json +++ b/resources/data/content/de/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind ist kein Backup. Es macht weder Trigger noch Kaskaden noch Änderungen außerhalb von TablePro rückgängig und stellt keine Zeilen ohne Primärschlüssel, Werte über {rewindMaxValue} MB oder serverberechnete Werte wieder her.", "Ein UPDATE ohne WHERE ist ein gewöhnlicher Schreibvorgang: Nachgefragt wird nur auf Alert oder einer strengeren Stufe.", - "Auf {everyStatementWrites} zählt der Safe Mode jede Anweisung als Schreibvorgang; Alert fragt daher auch vor Lesevorgängen und Read-Only blockiert sie.", "Das Ergebnis eines Joins, einer CTE oder UNION ist in der Datentabelle schreibgeschützt; öffne zum Bearbeiten die Tabelle." ], "docs": [ diff --git a/resources/data/content/de/features/schema.json b/resources/data/content/de/features/schema.json index f852e001..195e30f8 100644 --- a/resources/data/content/de/features/schema.json +++ b/resources/data/content/de/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server-Dashboard", "paragraphs": [ - "Das Server-Dashboard zeigt laufende Sitzungen, Servermetriken und langsame Abfragen im gewählten Aktualisierungsintervall. Sofern das System es zulässt, kannst du über ihre Zeile eine laufende Abfrage abbrechen oder eine Sitzung beenden; beides durchläuft den Safe Mode der Verbindung. Auf SQLite, DuckDB und Typesense zeigt es nur Metriken." + "Das Server-Dashboard zeigt laufende Sitzungen, Servermetriken und langsame Abfragen im gewählten Aktualisierungsintervall. Sofern das System es zulässt, kannst du über ihre Zeile eine laufende Abfrage abbrechen oder eine Sitzung beenden; beides durchläuft den Safe Mode der Verbindung. Auf Typesense zeigt es nur Metriken." ], "engines": [ { diff --git a/resources/data/content/en/databases/duckdb-client.json b/resources/data/content/en/databases/duckdb-client.json index 8dbc8f55..81c478da 100644 --- a/resources/data/content/en/databases/duckdb-client.json +++ b/resources/data/content/en/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Share the file and back it up", "paragraphs": [ "While TablePro holds a file, the duckdb CLI, a notebook or a dbt run cannot open it. Set Release the File Lock After to hand the file back after some idle minutes and take it again on the next query, or Open the File Read-Only so several readers can share it. Database > Release File Lock hands it back at once and keeps your tabs. A release is refused, with the reason, while the session holds an open transaction, a temporary table, an attached database or a changed setting.", - "The Server Dashboard shows the database’s size, block size, total blocks, memory limit and threads.", "Backup Dump needs nothing installed, because {dumpTool} writes it over the open connection. Choose a .duckdb file to restore into TablePro later, or a folder holding schema.sql, load.sql and one Parquet file per table, which pandas, Spark and BigQuery read directly. Restore Dump stops at the first object whose name is already taken." ] }, diff --git a/resources/data/content/en/databases/etcd-gui.json b/resources/data/content/en/databases/etcd-gui.json index 5daebe67..66cf99f8 100644 --- a/resources/data/content/en/databases/etcd-gui.json +++ b/resources/data/content/en/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Set Key Prefix Root, such as /app, to scope a connection to one subtree. The sidebar groups keys by their first path segment under it, and each key is a row with its value, version, mod and create revisions, and lease.", "Saving an edit sends commands. A new value or lease puts the key again, a NULL lease removes the lease, and renaming a key puts the new name and deletes the old one. The revision columns belong to etcd, so an edit to one stops the save and names the column.", "Run etcdctl-style key, watch, lease, member, endpoint, compaction and access-control commands with command and flag completion. Unsupported commands are rejected before reaching the server.", - "The etcd driver cannot open a read-only session, so Safe Mode treats every command as a write: at the Alert and Safe Mode levels each one asks first, and Read-Only blocks them all." + "Safe Mode runs get, watch and the commands that only list or report as reads, and counts every other command as a write." ] }, { diff --git a/resources/data/content/en/databases/mongodb-client.json b/resources/data/content/en/databases/mongodb-client.json index f0d57b80..035905f1 100644 --- a/resources/data/content/en/databases/mongodb-client.json +++ b/resources/data/content/en/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Browse top-level fields as columns and nested objects as Extended JSON. Cell edits preserve types such as dates and ObjectIds. Nested edits update only the changed path, such as address.city.", "Insert Document and Edit Document use Extended JSON. Edit Document re-reads the server document and refuses to save if it changed or disappeared while open. Remove Field sends $unset.", "The filter bar reaches into nested objects and arrays of objects, so customer.country and items.sku filter directly. A field holding GeoJSON opens on the Map view.", - "Safe Mode treats every statement on a MongoDB connection as a write, because the driver cannot open a read-only session. The Alert and Safe Mode levels confirm each one, and Read-Only blocks them all." + "Safe Mode runs a statement as a read when it is one call that only reads, such as find, countDocuments or an aggregate without $out or $merge. Any other JavaScript counts as a write." ] }, { diff --git a/resources/data/content/en/databases/mysql-client.json b/resources/data/content/en/databases/mysql-client.json index 264eb6b7..4d324c21 100644 --- a/resources/data/content/en/databases/mysql-client.json +++ b/resources/data/content/en/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "Can TablePro connect through a local MySQL socket?", - "answer": "No. Connections use TCP, so the server needs networking turned on. To reach a socket on a remote server, forward it through an SSH tunnel." + "answer": "Yes, for a server on this Mac. Set Connect Using to Socket and enter the path of its socket file. Host and port leave the form, and an SSH tunnel cannot reach a socket file." }, { "id": "mysqldump", diff --git a/resources/data/content/en/databases/redis-gui.json b/resources/data/content/en/databases/redis-gui.json index a785d0c6..a49d1d83 100644 --- a/resources/data/content/en/databases/redis-gui.json +++ b/resources/data/content/en/databases/redis-gui.json @@ -38,7 +38,7 @@ "Browse keys by colon-separated folders, or choose another separator. Each row shows the key’s type, TTL, length and value. Collections show their first entries; non-UTF-8 values open in the hex editor.", "Edit key names, TTLs and string values in the grid. Add Row creates hashes, lists, sets, sorted sets or strings. Filter key names and types using server-side SCAN MATCH and SCAN TYPE.", "Run commands with redis-cli-style quoting. Unknown commands are sent as written. DB 3 GET key targets another database without changing the session. In MULTI, replies stay queued until EXEC.", - "Safe Mode counts every Redis command as a write, GET included, so the Alert and Safe Mode levels confirm each one and Read-Only blocks them all. FLUSHDB and FLUSHALL ask before they run, even at Silent." + "Safe Mode runs a command on its list of read commands, such as GET, as a read, and counts any other command as a write. FLUSHDB and FLUSHALL ask before they run, even at Silent." ] }, { diff --git a/resources/data/content/en/databases/sqlite-client.json b/resources/data/content/en/databases/sqlite-client.json index b453fb30..5fe26880 100644 --- a/resources/data/content/en/databases/sqlite-client.json +++ b/resources/data/content/en/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Maintain and back up", "paragraphs": [ - "Table maintenance runs VACUUM, ANALYZE, REINDEX and an integrity check, each shown as SQL before it runs. The Server Dashboard shows the file’s size, page count, page size, journal mode and cache size.", + "Table maintenance runs VACUUM, ANALYZE, REINDEX and an integrity check, each shown as SQL before it runs.", "Backup Dump writes the database to a .sql file with {dumpTool}, and Restore Dump runs such a file against a database." ] }, diff --git a/resources/data/content/en/engines.json b/resources/data/content/en/engines.json index 47cd3613..715c2e18 100644 --- a/resources/data/content/en/engines.json +++ b/resources/data/content/en/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN diagrams, users and sessions; mysqldump backups.", "limits": { - "tcp-only": "Connections use a host and port over TCP. A local Unix socket is not supported.", "load-data-local-refused": "The driver refuses LOAD DATA LOCAL INFILE. Load a file with Import instead." } }, @@ -188,8 +187,7 @@ "tagline": "Query DSL console; document edits by _id.", "limits": { "no-opensearch": "OpenSearch is not supported.", - "aliases-not-listed": "Aliases and data streams are not listed in the sidebar. Address them by name in the console.", - "no-ssh": "SSH tunnels are not supported." + "aliases-not-listed": "Aliases and data streams are not listed in the sidebar. Address them by name in the console." } }, "etcd": { diff --git a/resources/data/content/en/features/data-editing.json b/resources/data/content/en/features/data-editing.json index 55f07f9f..2396362a 100644 --- a/resources/data/content/en/features/data-editing.json +++ b/resources/data/content/en/features/data-editing.json @@ -113,7 +113,6 @@ "limits": [ "Data Rewind is not a backup. It does not undo triggers, cascades or changes made outside TablePro, and it cannot restore rows without a primary key, values over {rewindMaxValue} MB or values the server computed.", "An UPDATE without WHERE is an ordinary write: it asks first only at Alert or a stricter level.", - "On {everyStatementWrites}, Safe Mode counts every statement as a write, so Alert asks before reads too and Read-Only blocks them.", "The result of a join, a CTE or a UNION is read-only in the grid; open the table to edit it." ], "docs": [ diff --git a/resources/data/content/en/features/schema.json b/resources/data/content/en/features/schema.json index a2ad6e2a..0ba1fb0c 100644 --- a/resources/data/content/en/features/schema.json +++ b/resources/data/content/en/features/schema.json @@ -91,7 +91,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "The Server Dashboard shows live sessions, server metrics and slow queries, refreshed at the interval you pick. Where the engine allows it, cancel a running query or terminate a session from its row; both go through the connection’s Safe Mode. On SQLite, DuckDB and Typesense it shows metrics only." + "The Server Dashboard shows live sessions, server metrics and slow queries, refreshed at the interval you pick. Where the engine allows it, cancel a running query or terminate a session from its row; both go through the connection’s Safe Mode. On Typesense it shows metrics only." ], "engines": [{ "label": "Server Dashboard", "list": "dashboard" }], "asset": "mac-server-dashboard-postgresql" diff --git a/resources/data/content/es/databases/duckdb-client.json b/resources/data/content/es/databases/duckdb-client.json index a2af2f8e..6b48e1b9 100644 --- a/resources/data/content/es/databases/duckdb-client.json +++ b/resources/data/content/es/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Comparte el archivo y haz copias de seguridad", "paragraphs": [ "Mientras TablePro tiene el archivo bloqueado, la CLI duckdb, un notebook o una ejecución de dbt no pueden abrirlo. Configura Release the File Lock After para liberarlo tras unos minutos de inactividad y recuperarlo en la siguiente consulta, o Open the File Read-Only para compartirlo entre varios lectores. Database > Release File Lock lo libera de inmediato y conserva tus pestañas. Se rechaza la liberación, indicando el motivo, si la sesión mantiene una transacción abierta, una tabla temporal, una base adjunta o un ajuste modificado.", - "El Server Dashboard muestra el tamaño de la base, el tamaño de bloque, los bloques totales, el límite de memoria y los hilos.", "Backup Dump no requiere instalar nada, porque {dumpTool} lo escribe mediante la conexión abierta. Elige un archivo .duckdb para restaurarlo después en TablePro, o una carpeta con schema.sql, load.sql y un archivo Parquet por tabla, que pandas, Spark y BigQuery leen directamente. Restore Dump se detiene en el primer objeto cuyo nombre ya esté ocupado." ] }, diff --git a/resources/data/content/es/databases/etcd-gui.json b/resources/data/content/es/databases/etcd-gui.json index 8722876d..57102654 100644 --- a/resources/data/content/es/databases/etcd-gui.json +++ b/resources/data/content/es/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Configura Key Prefix Root, como /app, para limitar una conexión a un subárbol. La barra lateral agrupa las claves por el primer segmento de ruta bajo esa raíz, y cada clave es una fila con valor, versión, revisiones de modificación y creación, y arrendamiento.", "Guardar una edición envía comandos. Un valor o arrendamiento nuevo vuelve a escribir la clave; un arrendamiento NULL lo elimina; renombrar una clave escribe el nombre nuevo y borra el antiguo. Las columnas de revisión pertenecen a etcd, así que editarlas detiene el guardado e indica la columna.", "Usa comandos al estilo etcdctl para claves, watches, leases, miembros, endpoints, compactación y permisos, con autocompletado de opciones. Los comandos no admitidos se rechazan antes de enviarlos.", - "El controlador etcd no puede abrir una sesión de solo lectura, así que Safe Mode considera todo comando una escritura: en los niveles Alert y Safe Mode pide permiso cada vez, y Read-Only los bloquea todos." + "Safe Mode ejecuta como lecturas get, watch y los comandos que solo listan o informan, y considera escritura cualquier otro comando." ] }, { diff --git a/resources/data/content/es/databases/mongodb-client.json b/resources/data/content/es/databases/mongodb-client.json index a63e2e8e..a6e55fd3 100644 --- a/resources/data/content/es/databases/mongodb-client.json +++ b/resources/data/content/es/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Consulta campos de primer nivel como columnas y objetos anidados como Extended JSON. Las ediciones conservan tipos como fechas y ObjectIds. Los cambios anidados solo actualizan la ruta modificada, como address.city.", "Insert Document y Edit Document usan Extended JSON. Edit Document vuelve a leer el documento del servidor y rechaza guardar si cambió o desapareció mientras estaba abierto. Remove Field envía $unset.", "La barra de filtros llega a objetos anidados y a arrays de objetos, así que customer.country e items.sku filtran directamente. Un campo con GeoJSON se abre en la vista de mapa.", - "Safe Mode trata todas las sentencias de una conexión MongoDB como escrituras porque el controlador no puede abrir una sesión de solo lectura. Los niveles Alert y Safe Mode confirman cada una; Read-Only las bloquea todas." + "Safe Mode ejecuta una sentencia como lectura cuando es una sola llamada que solo lee, como find, countDocuments o un aggregate sin $out ni $merge. Cualquier otro JavaScript cuenta como escritura." ] }, { diff --git a/resources/data/content/es/databases/mysql-client.json b/resources/data/content/es/databases/mysql-client.json index a9c16c7a..e45344ac 100644 --- a/resources/data/content/es/databases/mysql-client.json +++ b/resources/data/content/es/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "¿Puede TablePro conectarse mediante un socket MySQL local?", - "answer": "No. Las conexiones usan TCP, así que el servidor necesita tener la red activada. Para acceder a un socket remoto, reenvíalo por un túnel SSH." + "answer": "Sí, para un servidor en este Mac. Pon Connect Using en Socket e indica la ruta de su archivo de socket. El host y el puerto salen del formulario, y un túnel SSH no llega a un archivo de socket." }, { "id": "mysqldump", diff --git a/resources/data/content/es/databases/redis-gui.json b/resources/data/content/es/databases/redis-gui.json index 414ae255..d201e453 100644 --- a/resources/data/content/es/databases/redis-gui.json +++ b/resources/data/content/es/databases/redis-gui.json @@ -38,7 +38,7 @@ "Explora claves en carpetas separadas por dos puntos o elige otro separador. Cada fila muestra tipo, TTL, longitud y valor. Las colecciones muestran sus primeras entradas; los valores no UTF-8 se abren en el editor hexadecimal.", "Edita nombres de clave, TTL y valores de cadenas en la cuadrícula. Add Row crea hashes, listas, sets, sorted sets o cadenas. Filtra nombres y tipos en el servidor con SCAN MATCH y SCAN TYPE.", "Ejecuta comandos con las reglas de comillas de redis-cli. Los comandos desconocidos se envían tal cual. DB 3 GET key apunta a otra base sin cambiar la sesión. En MULTI, las respuestas quedan en cola hasta EXEC.", - "Safe Mode considera escritura todo comando de Redis, incluido GET, así que los niveles Alert y Safe Mode confirman cada uno y Read-Only los bloquea todos. FLUSHDB y FLUSHALL preguntan antes de ejecutarse, incluso en Silent." + "Safe Mode ejecuta como lectura los comandos de su lista de lectura, como GET, y considera escritura cualquier otro comando. FLUSHDB y FLUSHALL preguntan antes de ejecutarse, incluso en Silent." ] }, { diff --git a/resources/data/content/es/databases/sqlite-client.json b/resources/data/content/es/databases/sqlite-client.json index 05e9cb97..d5438626 100644 --- a/resources/data/content/es/databases/sqlite-client.json +++ b/resources/data/content/es/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Mantén y haz copias de seguridad", "paragraphs": [ - "El mantenimiento ejecuta VACUUM, ANALYZE, REINDEX y una comprobación de integridad, mostrando antes el SQL. El Server Dashboard muestra el tamaño del archivo, el número y el tamaño de las páginas, el modo de journal y el tamaño de la caché.", + "El mantenimiento ejecuta VACUUM, ANALYZE, REINDEX y una comprobación de integridad, mostrando antes el SQL.", "Backup Dump escribe la base en un archivo .sql con {dumpTool}; Restore Dump ejecuta ese archivo sobre una base." ] }, diff --git a/resources/data/content/es/engines.json b/resources/data/content/es/engines.json index 78282d8a..bf51f7ac 100644 --- a/resources/data/content/es/engines.json +++ b/resources/data/content/es/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "Diagramas EXPLAIN, usuarios y sesiones; copias de seguridad con mysqldump.", "limits": { - "tcp-only": "Las conexiones usan host y puerto mediante TCP. Los sockets Unix locales no son compatibles.", "load-data-local-refused": "El controlador rechaza LOAD DATA LOCAL INFILE. Carga archivos mediante Importar." } }, @@ -188,8 +187,7 @@ "tagline": "Consola Query DSL; edición de documentos por _id.", "limits": { "no-opensearch": "OpenSearch no es compatible.", - "aliases-not-listed": "Los alias y streams de datos no aparecen en la barra lateral. Usa sus nombres en la consola.", - "no-ssh": "Los túneles SSH no son compatibles." + "aliases-not-listed": "Los alias y streams de datos no aparecen en la barra lateral. Usa sus nombres en la consola." } }, "etcd": { diff --git a/resources/data/content/es/features/data-editing.json b/resources/data/content/es/features/data-editing.json index 6ad97b43..4def298a 100644 --- a/resources/data/content/es/features/data-editing.json +++ b/resources/data/content/es/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind no es una copia de seguridad. No deshace triggers, cascadas ni cambios fuera de TablePro y no restaura filas sin clave primaria, valores superiores a {rewindMaxValue} MB ni valores calculados por el servidor.", "UPDATE sin WHERE es una escritura normal: solo pregunta primero en Alert o niveles más estrictos.", - "En {everyStatementWrites}, Safe Mode cuenta cada sentencia como escritura; Alert pregunta también antes de lecturas y Read-Only las bloquea.", "El resultado de join, CTE o UNION es de solo lectura en la cuadrícula; abre la tabla para editar." ], "docs": [ diff --git a/resources/data/content/es/features/schema.json b/resources/data/content/es/features/schema.json index 81f4989d..12717d41 100644 --- a/resources/data/content/es/features/schema.json +++ b/resources/data/content/es/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "El Server Dashboard muestra sesiones en directo, métricas y consultas lentas, actualizadas al intervalo elegido. Si el motor lo permite, cancela una consulta en ejecución o termina una sesión desde su fila; ambas acciones pasan por el Safe Mode de la conexión. En SQLite, DuckDB y Typesense solo muestra métricas." + "El Server Dashboard muestra sesiones en directo, métricas y consultas lentas, actualizadas al intervalo elegido. Si el motor lo permite, cancela una consulta en ejecución o termina una sesión desde su fila; ambas acciones pasan por el Safe Mode de la conexión. En Typesense solo muestra métricas." ], "engines": [ { diff --git a/resources/data/content/fr/databases/duckdb-client.json b/resources/data/content/fr/databases/duckdb-client.json index 2dc93475..5478a312 100644 --- a/resources/data/content/fr/databases/duckdb-client.json +++ b/resources/data/content/fr/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Partagez le fichier et sauvegardez-le", "paragraphs": [ "Tant que TablePro verrouille un fichier, la CLI duckdb, un notebook ou une exécution dbt ne peuvent pas l’ouvrir. Définissez Libérer le verrou du fichier après (Release the File Lock After) pour le rendre après quelques minutes d’inactivité et le reprendre à la prochaine requête, ou Ouvrir le fichier en lecture seule (Open the File Read-Only) pour permettre plusieurs lecteurs. Base de données > Libérer le verrou du fichier (Database > Release File Lock) le rend immédiatement et conserve vos onglets. La libération est refusée, avec sa raison, si la session conserve une transaction ouverte, une table temporaire, une base attachée ou un paramètre modifié.", - "Server Dashboard affiche la taille de la base, la taille des blocs, le nombre total de blocs, la limite mémoire et les threads.", "Backup Dump ne nécessite aucune installation, car {dumpTool} l’écrit via la connexion ouverte. Choisissez un fichier .duckdb à restaurer plus tard dans TablePro, ou un dossier contenant schema.sql, load.sql et un fichier Parquet par table, lisible directement par pandas, Spark et BigQuery. Restore Dump s’arrête au premier objet dont le nom est déjà pris." ] }, diff --git a/resources/data/content/fr/databases/etcd-gui.json b/resources/data/content/fr/databases/etcd-gui.json index 0a56d6ba..b6f8c15e 100644 --- a/resources/data/content/fr/databases/etcd-gui.json +++ b/resources/data/content/fr/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Définissez Racine du préfixe de clé (Key Prefix Root), par exemple /app, pour limiter une connexion à un sous-arbre. La barre latérale regroupe les clés par leur premier segment de chemin sous cette racine ; chaque clé est une ligne avec valeur, version, révisions de modification et de création, et bail.", "Enregistrer une modification envoie des commandes. Une nouvelle valeur ou un nouveau bail réécrit la clé, un bail NULL retire le bail, et renommer une clé écrit le nouveau nom et supprime l’ancien. Les colonnes de révision appartiennent à etcd ; les modifier bloque donc l’enregistrement et nomme la colonne.", "Utilisez les commandes de type etcdctl pour clés, watches, baux, membres, endpoints, compactage et droits d’accès, avec complétion des options. Les commandes non prises en charge sont rejetées avant envoi.", - "Le pilote etcd ne peut pas ouvrir de session en lecture seule ; Safe Mode traite donc chaque commande comme une écriture : aux niveaux Alert et Safe Mode, chacune demande confirmation, tandis que Read-Only les bloque toutes." + "Safe Mode exécute comme lectures get, watch et les commandes qui ne font que lister ou rendre compte, et compte toute autre commande comme écriture." ] }, { diff --git a/resources/data/content/fr/databases/mongodb-client.json b/resources/data/content/fr/databases/mongodb-client.json index c30619b8..df143def 100644 --- a/resources/data/content/fr/databases/mongodb-client.json +++ b/resources/data/content/fr/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Consultez les champs de premier niveau en colonnes et les objets imbriqués en Extended JSON. Les modifications de cellules préservent les types comme les dates et ObjectIds. Les modifications imbriquées ne changent que le chemin concerné, comme address.city.", "Insert Document et Edit Document utilisent Extended JSON. Edit Document relit le document du serveur et refuse l’enregistrement s’il a changé ou disparu pendant son ouverture. Supprimer le champ (Remove Field) envoie $unset.", "La barre de filtres descend dans les objets imbriqués et les tableaux d’objets : vous pouvez filtrer directement sur customer.country et items.sku. Un champ contenant du GeoJSON s’ouvre dans la vue Carte.", - "Safe Mode traite toute instruction MongoDB comme une écriture, car le pilote ne peut pas ouvrir de session en lecture seule. Les niveaux Alert et Safe Mode demandent confirmation pour chaque instruction ; Read-Only les bloque toutes." + "Safe Mode exécute une instruction comme lecture quand c’est un seul appel qui ne fait que lire, comme find, countDocuments ou un aggregate sans $out ni $merge. Tout autre JavaScript compte comme écriture." ] }, { diff --git a/resources/data/content/fr/databases/mysql-client.json b/resources/data/content/fr/databases/mysql-client.json index a6e886a0..ed03ec9e 100644 --- a/resources/data/content/fr/databases/mysql-client.json +++ b/resources/data/content/fr/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "TablePro peut-il se connecter par socket MySQL local ?", - "answer": "Non. Les connexions utilisent TCP ; le réseau doit donc être activé sur le serveur. Pour atteindre un socket sur un serveur distant, redirigez-le via un tunnel SSH." + "answer": "Oui, pour un serveur sur ce Mac. Réglez Connect Using sur Socket et indiquez le chemin de son fichier socket. L’hôte et le port quittent le formulaire, et un tunnel SSH ne peut pas atteindre un fichier socket." }, { "id": "mysqldump", diff --git a/resources/data/content/fr/databases/redis-gui.json b/resources/data/content/fr/databases/redis-gui.json index d47f5bc6..ffe8d134 100644 --- a/resources/data/content/fr/databases/redis-gui.json +++ b/resources/data/content/fr/databases/redis-gui.json @@ -38,7 +38,7 @@ "Parcourez les clés en dossiers séparés par des deux-points, ou choisissez un autre séparateur. Chaque ligne affiche type, TTL, longueur et valeur. Les collections montrent leurs premières entrées ; les valeurs non UTF-8 s’ouvrent dans l’éditeur hexadécimal.", "Modifiez noms de clés, TTL et valeurs de chaînes dans la grille. Add Row crée hashes, listes, sets, sorted sets ou chaînes. Filtrez noms et types côté serveur avec SCAN MATCH et SCAN TYPE.", "Exécutez les commandes avec les règles de guillemets de redis-cli. Les commandes inconnues sont envoyées telles quelles. DB 3 GET key cible une autre base sans changer la session. Dans MULTI, les réponses restent en attente jusqu’à EXEC.", - "Safe Mode compte toute commande Redis, même GET, comme écriture ; les niveaux Alert et Safe Mode demandent confirmation pour chacune, et Read-Only les bloque toutes. FLUSHDB et FLUSHALL demandent confirmation même au niveau Silent." + "Safe Mode exécute comme lecture les commandes de sa liste de lecture, comme GET, et compte toute autre commande comme écriture. FLUSHDB et FLUSHALL demandent confirmation même au niveau Silent." ] }, { diff --git a/resources/data/content/fr/databases/sqlite-client.json b/resources/data/content/fr/databases/sqlite-client.json index 82077f7c..88bed19f 100644 --- a/resources/data/content/fr/databases/sqlite-client.json +++ b/resources/data/content/fr/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Entretenez et sauvegardez", "paragraphs": [ - "La maintenance des tables exécute VACUUM, ANALYZE, REINDEX et un contrôle d’intégrité, chacun affiché en SQL avant de s’exécuter. Server Dashboard affiche la taille du fichier, le nombre et la taille des pages, le mode de journal et la taille du cache.", + "La maintenance des tables exécute VACUUM, ANALYZE, REINDEX et un contrôle d’intégrité, chacun affiché en SQL avant de s’exécuter.", "Backup Dump écrit la base dans un fichier .sql avec {dumpTool}, et Restore Dump exécute un tel fichier sur une base." ] }, diff --git a/resources/data/content/fr/engines.json b/resources/data/content/fr/engines.json index 9d2bfe1b..460b1bfe 100644 --- a/resources/data/content/fr/engines.json +++ b/resources/data/content/fr/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "Diagrammes EXPLAIN, utilisateurs et sessions ; sauvegardes avec mysqldump.", "limits": { - "tcp-only": "Les connexions utilisent un hôte et un port via TCP. Les sockets Unix locaux ne sont pas pris en charge.", "load-data-local-refused": "Le pilote refuse LOAD DATA LOCAL INFILE. Chargez un fichier via Importer." } }, @@ -188,8 +187,7 @@ "tagline": "Console Query DSL ; édition de documents par _id.", "limits": { "no-opensearch": "OpenSearch n’est pas pris en charge.", - "aliases-not-listed": "Les alias et flux de données ne sont pas listés dans la barre latérale. Adressez-les par nom dans la console.", - "no-ssh": "Les tunnels SSH ne sont pas pris en charge." + "aliases-not-listed": "Les alias et flux de données ne sont pas listés dans la barre latérale. Adressez-les par nom dans la console." } }, "etcd": { diff --git a/resources/data/content/fr/features/data-editing.json b/resources/data/content/fr/features/data-editing.json index 2af761ba..af335924 100644 --- a/resources/data/content/fr/features/data-editing.json +++ b/resources/data/content/fr/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind n’est pas une sauvegarde. Il n’annule ni les déclencheurs, ni les cascades, ni les changements effectués hors de TablePro, et ne peut restaurer ni les lignes sans clé primaire, ni les valeurs de plus de {rewindMaxValue} Mo, ni les valeurs calculées par le serveur.", "Un UPDATE sans WHERE est une écriture ordinaire : il ne demande confirmation qu’au niveau Alert ou à un niveau plus strict.", - "Sur {everyStatementWrites}, Safe Mode compte toute instruction comme écriture ; Alert demande donc aussi confirmation avant les lectures et Read-Only les bloque.", "Le résultat d’une jointure, CTE ou UNION est en lecture seule dans la grille ; ouvrez la table pour la modifier." ], "docs": [ diff --git a/resources/data/content/fr/features/schema.json b/resources/data/content/fr/features/schema.json index e793ec45..f7d2622d 100644 --- a/resources/data/content/fr/features/schema.json +++ b/resources/data/content/fr/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard affiche les sessions actives, les métriques du serveur et les requêtes lentes, actualisées à l’intervalle de votre choix. Si le moteur le permet, annulez une requête en cours ou mettez fin à une session depuis sa ligne ; les deux passent par le Safe Mode de la connexion. Sur SQLite, DuckDB et Typesense, seules les métriques sont affichées." + "Server Dashboard affiche les sessions actives, les métriques du serveur et les requêtes lentes, actualisées à l’intervalle de votre choix. Si le moteur le permet, annulez une requête en cours ou mettez fin à une session depuis sa ligne ; les deux passent par le Safe Mode de la connexion. Sur Typesense, seules les métriques sont affichées." ], "engines": [ { diff --git a/resources/data/content/id/databases/duckdb-client.json b/resources/data/content/id/databases/duckdb-client.json index 28e6d5c2..b14e6c8c 100644 --- a/resources/data/content/id/databases/duckdb-client.json +++ b/resources/data/content/id/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Bagikan file dan cadangkan", "paragraphs": [ "Selama TablePro memegang file, CLI duckdb, notebook, atau proses dbt tidak dapat membukanya. Atur Release the File Lock After agar file dilepas setelah beberapa menit tidak aktif dan diambil kembali pada kueri berikutnya, atau Open the File Read-Only agar beberapa pembaca dapat mengaksesnya. Database > Release File Lock langsung melepaskannya sambil mempertahankan tab. Pelepasan ditolak dengan alasannya selama sesi memiliki transaksi terbuka, tabel sementara, database terlampir, atau pengaturan yang diubah.", - "Server Dashboard menampilkan ukuran database, ukuran blok, total blok, batas memori, dan thread.", "Backup Dump tidak memerlukan pemasangan karena {dumpTool} menulis melalui koneksi terbuka. Pilih file .duckdb untuk dipulihkan di TablePro nanti, atau folder berisi schema.sql, load.sql, dan satu file Parquet per tabel yang dapat dibaca langsung oleh pandas, Spark, dan BigQuery. Restore Dump berhenti pada objek pertama yang namanya sudah digunakan." ] }, diff --git a/resources/data/content/id/databases/etcd-gui.json b/resources/data/content/id/databases/etcd-gui.json index 47730532..a8fd2c59 100644 --- a/resources/data/content/id/databases/etcd-gui.json +++ b/resources/data/content/id/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Tetapkan Key Prefix Root, seperti /app, untuk membatasi koneksi pada satu subpohon. Sidebar mengelompokkan kunci berdasarkan segmen jalur pertama di bawahnya, dan setiap kunci berupa baris dengan nilai, versi, revisi perubahan dan pembuatan, serta lease.", "Menyimpan perubahan mengirim perintah. Nilai atau lease baru menulis ulang kunci, lease NULL menghapus lease, dan mengganti nama kunci menulis nama baru serta menghapus nama lama. Kolom revisi dikelola etcd, sehingga mengeditnya menghentikan penyimpanan dan menyebutkan kolom tersebut.", "Jalankan perintah bergaya etcdctl untuk kunci, watch, lease, member, endpoint, pemadatan, dan kontrol akses, dengan pelengkapan perintah dan flag. Perintah yang tidak didukung ditolak sebelum mencapai server.", - "Driver etcd tidak dapat membuka sesi hanya baca, sehingga Safe Mode menganggap setiap perintah sebagai penulisan: pada level Alert dan Safe Mode, setiap perintah meminta konfirmasi terlebih dahulu, dan Read-Only memblokir semuanya." + "Safe Mode menjalankan get, watch, dan perintah yang hanya menampilkan daftar atau laporan sebagai pembacaan, serta menganggap perintah lain sebagai penulisan." ] }, { diff --git a/resources/data/content/id/databases/mongodb-client.json b/resources/data/content/id/databases/mongodb-client.json index 146e3138..986803ee 100644 --- a/resources/data/content/id/databases/mongodb-client.json +++ b/resources/data/content/id/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Telusuri bidang tingkat atas sebagai kolom dan objek bertumpuk sebagai Extended JSON. Pengeditan sel mempertahankan tipe seperti tanggal dan ObjectIds. Pengeditan bertingkat hanya memperbarui jalur yang diubah, seperti address.city.", "Insert Document dan Edit Document menggunakan Extended JSON. Edit Document membaca ulang dokumen server dan menolak menyimpan jika dokumen berubah atau hilang saat terbuka. Remove Field mengirimkan $unset.", "Bilah filter mengakses objek bertingkat dan array objek, sehingga customer.country serta items.sku dapat difilter langsung. Bidang yang berisi GeoJSON dibuka pada Tampilan Peta.", - "Safe Mode menganggap setiap pernyataan pada koneksi MongoDB sebagai penulisan karena driver tidak dapat membuka sesi hanya baca. Level Alert dan Safe Mode mengonfirmasi masing-masing, dan Read-Only memblokir semuanya." + "Safe Mode menjalankan pernyataan sebagai pembacaan jika pernyataan itu satu panggilan yang hanya membaca, seperti find, countDocuments, atau aggregate tanpa $out atau $merge. JavaScript lainnya dianggap penulisan." ] }, { diff --git a/resources/data/content/id/databases/mysql-client.json b/resources/data/content/id/databases/mysql-client.json index 04ba5494..6c80fd39 100644 --- a/resources/data/content/id/databases/mysql-client.json +++ b/resources/data/content/id/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "Apakah TablePro dapat terhubung melalui socket MySQL lokal?", - "answer": "Tidak. Koneksi menggunakan TCP, sehingga jaringan server harus aktif. Untuk mengakses socket pada server jarak jauh, teruskan melalui tunnel SSH." + "answer": "Ya, untuk server di Mac ini. Setel Connect Using ke Socket lalu masukkan path file socket-nya. Host dan port hilang dari formulir, dan tunnel SSH tidak dapat menjangkau file socket." }, { "id": "mysqldump", diff --git a/resources/data/content/id/databases/redis-gui.json b/resources/data/content/id/databases/redis-gui.json index 31a07b20..c34c5c21 100644 --- a/resources/data/content/id/databases/redis-gui.json +++ b/resources/data/content/id/databases/redis-gui.json @@ -38,7 +38,7 @@ "Telusuri kunci berdasarkan folder yang dipisahkan titik dua, atau pilih pemisah lain. Setiap baris menunjukkan jenis kunci, TTL, panjang dan nilai. Koleksi menampilkan entri pertamanya; nilai non-UTF-8 terbuka di hex editor.", "Edit nama kunci, TTL dan nilai string di grid. Add Row membuat hash, daftar, set, set atau string yang diurutkan. Filter nama dan jenis kunci menggunakan SCAN MATCH dan SCAN TYPE sisi server.", "Jalankan perintah dengan kutipan gaya redis-cli. Perintah yang tidak diketahui dikirim seperti yang tertulis. DB 3 GET key menargetkan database lain tanpa mengubah sesi. Di MULTI, balasan tetap dalam antrian hingga EXEC.", - "Safe Mode menganggap setiap perintah Redis sebagai penulisan, termasuk GET, sehingga level Alert dan Safe Mode mengonfirmasi setiap perintah, dan Read-Only memblokir semuanya. FLUSHDB dan FLUSHALL meminta konfirmasi sebelum berjalan, bahkan pada Silent." + "Safe Mode menjalankan perintah dalam daftar perintah bacanya, seperti GET, sebagai pembacaan, dan menganggap perintah lain sebagai penulisan. FLUSHDB dan FLUSHALL meminta konfirmasi sebelum berjalan, bahkan pada Silent." ] }, { diff --git a/resources/data/content/id/databases/sqlite-client.json b/resources/data/content/id/databases/sqlite-client.json index 4922dc04..768a26dd 100644 --- a/resources/data/content/id/databases/sqlite-client.json +++ b/resources/data/content/id/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Pemeliharaan dan pencadangan", "paragraphs": [ - "Pemeliharaan tabel menjalankan VACUUM, ANALYZE, REINDEX, dan pemeriksaan integritas, masing-masing ditampilkan sebagai SQL sebelum dijalankan. Server Dashboard menampilkan ukuran file, jumlah halaman, ukuran halaman, mode journal, dan ukuran cache.", + "Pemeliharaan tabel menjalankan VACUUM, ANALYZE, REINDEX, dan pemeriksaan integritas, masing-masing ditampilkan sebagai SQL sebelum dijalankan.", "Backup Dump menulis database ke file .sql menggunakan {dumpTool}, dan Restore Dump menjalankan file tersebut pada database." ] }, diff --git a/resources/data/content/id/engines.json b/resources/data/content/id/engines.json index e27297e7..b68561be 100644 --- a/resources/data/content/id/engines.json +++ b/resources/data/content/id/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "diagram EXPLAIN, pengguna dan sesi; cadangan mysqldump.", "limits": { - "tcp-only": "Koneksi memakai host dan port melalui TCP. Socket Unix lokal tidak didukung.", "load-data-local-refused": "Driver menolak LOAD DATA LOCAL INFILE. Muat file melalui Impor." } }, @@ -188,8 +187,7 @@ "tagline": "Konsol Query DSL; edit dokumen berdasarkan _id.", "limits": { "no-opensearch": "OpenSearch tidak didukung.", - "aliases-not-listed": "Alias dan data stream tidak tercantum di sidebar. Akses dengan namanya di konsol.", - "no-ssh": "Tunnel SSH tidak didukung." + "aliases-not-listed": "Alias dan data stream tidak tercantum di sidebar. Akses dengan namanya di konsol." } }, "etcd": { diff --git a/resources/data/content/id/features/data-editing.json b/resources/data/content/id/features/data-editing.json index 05a2c447..07fd85d0 100644 --- a/resources/data/content/id/features/data-editing.json +++ b/resources/data/content/id/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind bukan cadangan. Fitur ini tidak mengurungkan trigger, perubahan berantai, atau perubahan di luar TablePro, dan tidak dapat memulihkan baris tanpa primary key, nilai di atas {rewindMaxValue} MB, atau nilai yang dihitung server.", "UPDATE tanpa WHERE adalah penulisan biasa: konfirmasi hanya diminta pada level Alert atau lebih ketat.", - "Pada {everyStatementWrites}, Safe Mode menganggap setiap pernyataan sebagai penulisan, sehingga Alert juga meminta konfirmasi sebelum membaca dan Read-Only memblokirnya.", "Hasil join, CTE, atau UNION hanya-baca di grid; buka tabel untuk mengeditnya." ], "docs": [ diff --git a/resources/data/content/id/features/schema.json b/resources/data/content/id/features/schema.json index c644e30f..45f438ba 100644 --- a/resources/data/content/id/features/schema.json +++ b/resources/data/content/id/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard menampilkan sesi aktif, metrik server, dan kueri lambat, diperbarui pada interval pilihan Anda. Jika mesin mengizinkan, batalkan kueri yang berjalan atau akhiri sesi dari barisnya; keduanya melewati Safe Mode koneksi. Pada SQLite, DuckDB, dan Typesense, hanya metrik yang ditampilkan." + "Server Dashboard menampilkan sesi aktif, metrik server, dan kueri lambat, diperbarui pada interval pilihan Anda. Jika mesin mengizinkan, batalkan kueri yang berjalan atau akhiri sesi dari barisnya; keduanya melewati Safe Mode koneksi. Pada Typesense, hanya metrik yang ditampilkan." ], "engines": [ { diff --git a/resources/data/content/it/databases/duckdb-client.json b/resources/data/content/it/databases/duckdb-client.json index 6db70f7e..fc1b7863 100644 --- a/resources/data/content/it/databases/duckdb-client.json +++ b/resources/data/content/it/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Condividi il file e crea un backup", "paragraphs": [ "Mentre TablePro mantiene aperto un file, la CLI duckdb, un notebook o un’esecuzione di dbt non possono aprirlo. Imposta Release the File Lock After per liberare il file dopo qualche minuto di inattività e riprenderlo alla query successiva, oppure Open the File Read-Only per consentire più lettori. Database > Release File Lock lo libera subito e mantiene le schede. Il rilascio viene rifiutato, con il motivo, se la sessione mantiene una transazione aperta, una tabella temporanea, un database collegato o un’imposto modificata.", - "Il Server Dashboard mostra dimensione del database, dimensione dei blocchi, numero totale di blocchi, limite di memoria e thread.", "Backup Dump non richiede installazioni, perché {dumpTool} scrive tramite la connessione aperta. Scegli un file .duckdb da ripristinare successivamente in TablePro oppure una cartella con schema.sql, load.sql e un file Parquet per tabella, leggibili direttamente da pandas, Spark e BigQuery. Restore Dump si ferma al primo oggetto il cui nome è già usato." ] }, diff --git a/resources/data/content/it/databases/etcd-gui.json b/resources/data/content/it/databases/etcd-gui.json index e4d41dad..b0d66e4a 100644 --- a/resources/data/content/it/databases/etcd-gui.json +++ b/resources/data/content/it/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Imposta Key Prefix Root, per esempio /app, per limitare una connessione a un sottoalbero. La barra laterale raggruppa le chiavi per il primo segmento del percorso sottostante e ogni chiave è una riga con valore, versione, revisioni di modifica e creazione e lease.", "Salvare una modifica invia comandi. Un nuovo valore o lease riscrive la chiave, un lease NULL rimuove il lease e rinominare una chiave scrive il nuovo nome ed elimina il vecchio. Le colonne delle revisioni appartengono a etcd, quindi modificarne una interrompe il salvataggio e indica la colonna.", "Esegui comandi in stile etcdctl per chiavi, watch, lease, membri, endpoint, compattazione e controllo degli accessi, con completamento di comandi e flag. I comandi non supportati vengono rifiutati prima di raggiungere il server.", - "Il driver etcd non può aprire una sessione in sola lettura, quindi Safe Mode considera ogni comando una scrittura: ai livelli Alert e Safe Mode chiede prima conferma per ciascuno e Read-Only li blocca tutti." + "Safe Mode esegue come letture get, watch e i comandi che si limitano a elencare o riportare, e considera ogni altro comando una scrittura." ] }, { diff --git a/resources/data/content/it/databases/mongodb-client.json b/resources/data/content/it/databases/mongodb-client.json index e95e7cf9..122003b0 100644 --- a/resources/data/content/it/databases/mongodb-client.json +++ b/resources/data/content/it/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Sfoglia i campi di livello superiore come colonne e gli oggetti nidificati come JSON esteso. Le modifiche alle celle preservano tipi come date e ObjectId. Le modifiche nidificate aggiornano solo il percorso modificato, ad esempio address.city.", "Insert Document ed Edit Document usano Extended JSON. Edit Document rilegge il documento sul server e rifiuta il salvataggio se nel frattempo è cambiato o scomparso. Remove Field invia $unset.", "La barra dei filtri accede a oggetti annidati e array di oggetti, quindi customer.country e items.sku filtrano direttamente. Un campo contenente GeoJSON si apre nella vista Mappa.", - "Safe Mode considera ogni istruzione su una connessione MongoDB una scrittura, perché il driver non può aprire una sessione in sola lettura. I livelli Alert e Safe Mode confermano ciascuna e Read-Only le blocca tutte." + "Safe Mode esegue un’istruzione come lettura quando è una sola chiamata che legge soltanto, come find, countDocuments o un aggregate senza $out né $merge. Qualsiasi altro JavaScript conta come scrittura." ] }, { diff --git a/resources/data/content/it/databases/mysql-client.json b/resources/data/content/it/databases/mysql-client.json index 6f39fdf9..29184041 100644 --- a/resources/data/content/it/databases/mysql-client.json +++ b/resources/data/content/it/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "TablePro può connettersi tramite un socket MySQL locale?", - "answer": "No. Le connessioni usano TCP, quindi il server deve avere la rete attiva. Per raggiungere un socket su un server remoto, inoltralo tramite un tunnel SSH." + "answer": "Sì, per un server su questo Mac. Imposta Connect Using su Socket e inserisci il percorso del suo file socket. Host e porta escono dal modulo, e un tunnel SSH non può raggiungere un file socket." }, { "id": "mysqldump", diff --git a/resources/data/content/it/databases/redis-gui.json b/resources/data/content/it/databases/redis-gui.json index caa23f25..219cea77 100644 --- a/resources/data/content/it/databases/redis-gui.json +++ b/resources/data/content/it/databases/redis-gui.json @@ -38,7 +38,7 @@ "Sfoglia le chiavi per cartelle separate da due punti o scegli un altro separatore. Ogni riga mostra il tipo di chiave, TTL, lunghezza e valore. Le collezioni mostrano i loro primi ingressi; i valori non UTF-8 si aprono nell'editor esadecimale.", "Modifica nomi di chiavi, TTL e valori stringa nella griglia. Add Row crea hash, elenchi, insiemi, insiemi ordinati o stringhe. Filtra i nomi e i tipi di chiave utilizzando SCAN MATCH e SCAN TYPE lato server.", "Esegui comandi con virgolette in stile redis-cli. I comandi sconosciuti vengono inviati come scritti. DB 3 GET key prende di mira un altro database senza modificare la sessione. In MULTI, le risposte rimangono in coda fino a EXEC.", - "Safe Mode considera ogni comando Redis una scrittura, GET incluso, quindi i livelli Alert e Safe Mode confermano ciascuno e Read-Only li blocca tutti. FLUSHDB e FLUSHALL chiedono conferma prima dell’esecuzione anche a livello Silent." + "Safe Mode esegue come lettura i comandi del suo elenco di letture, come GET, e considera ogni altro comando una scrittura. FLUSHDB e FLUSHALL chiedono conferma prima dell’esecuzione anche a livello Silent." ] }, { diff --git a/resources/data/content/it/databases/sqlite-client.json b/resources/data/content/it/databases/sqlite-client.json index 4e876ee4..da540530 100644 --- a/resources/data/content/it/databases/sqlite-client.json +++ b/resources/data/content/it/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Manutenzione e backup", "paragraphs": [ - "La manutenzione delle tabelle esegue VACUUM, ANALYZE, REINDEX e un controllo di integrità, ciascuno mostrato come SQL prima dell’esecuzione. Il Server Dashboard mostra dimensione del file, numero e dimensione delle pagine, modalità journal e dimensione della cache.", + "La manutenzione delle tabelle esegue VACUUM, ANALYZE, REINDEX e un controllo di integrità, ciascuno mostrato come SQL prima dell’esecuzione.", "Backup Dump scrive il database in un file .sql con {dumpTool} e Restore Dump esegue un file di questo tipo su un database." ] }, diff --git a/resources/data/content/it/engines.json b/resources/data/content/it/engines.json index 65b77f40..b13af08b 100644 --- a/resources/data/content/it/engines.json +++ b/resources/data/content/it/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN diagrammi, utenti e sessioni; backup di mysqldump.", "limits": { - "tcp-only": "Le connessioni usano host e porta tramite TCP. Un socket Unix locale non è supportato.", "load-data-local-refused": "Il driver rifiuta LOAD DATA LOCAL INFILE. Carica un file tramite Importazione." } }, @@ -188,8 +187,7 @@ "tagline": "Console Query DSL; modifica documenti tramite _id.", "limits": { "no-opensearch": "OpenSearch non è supportato.", - "aliases-not-listed": "Alias e data stream non sono elencati nella barra laterale. Indicali per nome nella console.", - "no-ssh": "I tunnel SSH non sono supportati." + "aliases-not-listed": "Alias e data stream non sono elencati nella barra laterale. Indicali per nome nella console." } }, "etcd": { diff --git a/resources/data/content/it/features/data-editing.json b/resources/data/content/it/features/data-editing.json index 14f563b9..65ac51d7 100644 --- a/resources/data/content/it/features/data-editing.json +++ b/resources/data/content/it/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind non è un backup. Non annulla trigger, modifiche a cascata o modifiche esterne a TablePro e non può recuperare righe senza chiave primaria, valori oltre {rewindMaxValue} MB o valori calcolati dal server.", "Un UPDATE senza WHERE è una scrittura ordinaria: chiede prima conferma solo al livello Alert o a uno più restrittivo.", - "Su {everyStatementWrites}, Safe Mode considera ogni istruzione una scrittura, quindi Alert chiede conferma anche prima delle letture e Read-Only le blocca.", "Il risultato di un join, una CTE o una UNION è in sola lettura nella griglia; apri la tabella per modificarla." ], "docs": [ diff --git a/resources/data/content/it/features/schema.json b/resources/data/content/it/features/schema.json index e95683c2..3d39135e 100644 --- a/resources/data/content/it/features/schema.json +++ b/resources/data/content/it/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Il Server Dashboard mostra sessioni attive, metriche del server e query lente, aggiornate all’intervallo scelto. Quando il motore lo consente, annulla una query in esecuzione o termina una sessione dalla sua riga; entrambe le azioni passano attraverso il livello Safe Mode della connessione. Su SQLite, DuckDB e Typesense mostra solo metriche." + "Il Server Dashboard mostra sessioni attive, metriche del server e query lente, aggiornate all’intervallo scelto. Quando il motore lo consente, annulla una query in esecuzione o termina una sessione dalla sua riga; entrambe le azioni passano attraverso il livello Safe Mode della connessione. Su Typesense mostra solo metriche." ], "engines": [ { diff --git a/resources/data/content/ja/databases/duckdb-client.json b/resources/data/content/ja/databases/duckdb-client.json index 39caf029..b8a26b42 100644 --- a/resources/data/content/ja/databases/duckdb-client.json +++ b/resources/data/content/ja/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "ファイルの共有とバックアップ", "paragraphs": [ "TablePro がファイルを保持する間は duckdb CLI、ノートブックや dbt 実行が開けません。Release the File Lock After でアイドル数分後にファイルを返し、次のクエリで再取得できます。Open the File Read-Only なら複数の読み取り側で共有できます。Database > Release File Lock はタブを残したまますぐ返します。セッションが開いたトランザクション、一時テーブル、アタッチしたデータベースや変更した設定を保持している場合は、理由とともに解放を拒否します。", - "Server Dashboard はデータベースサイズ、ブロックサイズ、総ブロック数、メモリ上限とスレッド数を表示します。", "Backup Dump は {dumpTool} が開いている接続で書き込むため、インストール不要です。後で TablePro に復元する .duckdb ファイル、または schema.sql、load.sql とテーブルごとの Parquet を含むフォルダーを選べます。後者は pandas、Spark、BigQuery が直接読み取れます。Restore Dump は、最初に名前が既に使われているオブジェクトで停止します。" ] }, diff --git a/resources/data/content/ja/databases/etcd-gui.json b/resources/data/content/ja/databases/etcd-gui.json index 42b7faac..381ac5a2 100644 --- a/resources/data/content/ja/databases/etcd-gui.json +++ b/resources/data/content/ja/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Key Prefix Root に /app などを設定し、接続を一つのサブツリーに限定します。サイドバーはその下の最初のパス要素でキーをまとめ、各行にキーの値、バージョン、変更・作成リビジョンとリースを表示します。", "編集の保存はコマンドを送信します。値やリースの変更はキーを再度 put し、NULL リースはリースを解除、キーの名前変更は新しい名前を put して古い名前を削除します。リビジョン列は etcd が管理するため、変更すると保存を止めて列名を示します。", "etcdctl 形式でキー、watch、リース、メンバー、エンドポイント、コンパクション、アクセス制御のコマンドを実行できます。コマンドとフラグを補完し、未対応のコマンドはサーバーに送る前に拒否します。", - "etcd ドライバーは読み取り専用セッションを開けないため、Safe Mode はすべてのコマンドを書き込みとして扱います。Alert と Safe Mode レベルでは毎回確認し、Read-Only ではすべてをブロックします。" + "Safe Mode は get、watch と、一覧表示や状態報告だけのコマンドを読み取りとして実行し、それ以外のコマンドは書き込みとみなします。" ] }, { diff --git a/resources/data/content/ja/databases/mongodb-client.json b/resources/data/content/ja/databases/mongodb-client.json index 9f2307b7..fff4cfad 100644 --- a/resources/data/content/ja/databases/mongodb-client.json +++ b/resources/data/content/ja/databases/mongodb-client.json @@ -44,7 +44,7 @@ "最上位フィールドは列、ネストしたオブジェクトは Extended JSON で表示します。セル編集は日付や ObjectId などの型を保持します。ネストした編集は address.city のように変更したパスだけを更新します。", "Insert Document と Edit Document は Extended JSON を使います。Edit Document はサーバーのドキュメントを再読込し、編集中に変更や削除があれば保存を拒否します。Remove Field は $unset を送ります。", "フィルターバー は入れ子オブジェクトやオブジェクトの配列に対応し、customer.country と items.sku を直接絞り込めます。GeoJSON のフィールドは マップビュー で開きます。", - "ドライバーが読み取り専用セッションを開けないため、Safe Mode は MongoDB のすべての文を書き込みとして扱います。Alert と Safe Mode レベルは毎回確認し、Read-Only はすべてブロックします。" + "Safe Mode は、find、countDocuments、$out も $merge も含まない aggregate のように、読み取るだけの 1 回の呼び出しを読み取りとして実行します。それ以外の JavaScript は書き込みとみなします。" ] }, { diff --git a/resources/data/content/ja/databases/mysql-client.json b/resources/data/content/ja/databases/mysql-client.json index 61bcef2a..7b3fd7f0 100644 --- a/resources/data/content/ja/databases/mysql-client.json +++ b/resources/data/content/ja/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "ローカルの MySQL ソケット経由で接続できますか?", - "answer": "できません。接続は TCP を使うため、サーバーのネットワーク機能を有効にする必要があります。リモートサーバーのソケットには SSH トンネルで転送してアクセスしてください。" + "answer": "この Mac 上のサーバーなら接続できます。Connect Using を Socket にして、ソケットファイルのパスを入力してください。ホストとポートはフォームから消え、SSH トンネルはソケットファイルに届きません。" }, { "id": "mysqldump", diff --git a/resources/data/content/ja/databases/redis-gui.json b/resources/data/content/ja/databases/redis-gui.json index ef566de4..7e3c924f 100644 --- a/resources/data/content/ja/databases/redis-gui.json +++ b/resources/data/content/ja/databases/redis-gui.json @@ -38,7 +38,7 @@ "コロン区切りのフォルダーでキーを参照でき、区切り文字も変更できます。各行に型、TTL、長さ、値を表示します。コレクションは先頭の項目を表示し、UTF-8 以外の値は 16 進エディターで開きます。", "グリッドでキー名、TTL、文字列値を編集できます。Add Row はハッシュ、リスト、セット、ソート済みセット、文字列を作成します。SCAN MATCH と SCAN TYPE でサーバー側のキー名・型フィルターを使えます。", "redis-cli 形式の引用規則でコマンドを実行します。未知のコマンドはそのまま送ります。DB 3 GET key はセッションを変えずに別のデータベースを対象にします。MULTI の応答は EXEC まで保留します。", - "Safe Mode は GET も含むすべての Redis コマンドを書き込みとするため、Alert と Safe Mode レベルは毎回確認し、Read-Only はすべてブロックします。FLUSHDB と FLUSHALL は Silent でも実行前に確認します。" + "Safe Mode は GET など読み取りコマンドの一覧にあるコマンドを読み取りとして実行し、それ以外のコマンドは書き込みとみなします。FLUSHDB と FLUSHALL は Silent でも実行前に確認します。" ] }, { diff --git a/resources/data/content/ja/databases/sqlite-client.json b/resources/data/content/ja/databases/sqlite-client.json index e4704d09..94542b08 100644 --- a/resources/data/content/ja/databases/sqlite-client.json +++ b/resources/data/content/ja/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "保守とバックアップ", "paragraphs": [ - "テーブル保守は VACUUM、ANALYZE、REINDEX と整合性検査を実行し、それぞれ実行前に SQL を表示します。Server Dashboard はファイルサイズ、ページ数、ページサイズ、ジャーナルモードとキャッシュサイズを表示します。", + "テーブル保守は VACUUM、ANALYZE、REINDEX と整合性検査を実行し、それぞれ実行前に SQL を表示します。", "Backup Dump は {dumpTool} でデータベースを .sql ファイルに書き込み、Restore Dump はそのような .sql ファイルをデータベースに対して実行します。" ] }, diff --git a/resources/data/content/ja/engines.json b/resources/data/content/ja/engines.json index 36956f5d..cf1e3bd4 100644 --- a/resources/data/content/ja/engines.json +++ b/resources/data/content/ja/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN 図、ユーザーとセッション。mysqldump バックアップ。", "limits": { - "tcp-only": "ホストとポートを指定して TCP で接続します。ローカル Unix ソケットは非対応です。", "load-data-local-refused": "ドライバーは LOAD DATA LOCAL INFILE を拒否します。代わりに Import でファイルを取り込んでください。" } }, @@ -188,8 +187,7 @@ "tagline": "Query DSL コンソール。_id でドキュメント編集。", "limits": { "no-opensearch": "OpenSearch は非対応です。", - "aliases-not-listed": "エイリアスとデータストリームはサイドバーに表示しません。コンソールで名前を指定してください。", - "no-ssh": "SSH トンネルは非対応です。" + "aliases-not-listed": "エイリアスとデータストリームはサイドバーに表示しません。コンソールで名前を指定してください。" } }, "etcd": { diff --git a/resources/data/content/ja/features/data-editing.json b/resources/data/content/ja/features/data-editing.json index 3083c6b4..e24fe3b3 100644 --- a/resources/data/content/ja/features/data-editing.json +++ b/resources/data/content/ja/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind はバックアップではありません。トリガー、カスケードや TablePro 外の変更は戻せず、主キーのない行、{rewindMaxValue} MB を超える値やサーバーが計算した値は復元できません。", "WHERE のない UPDATE は通常の書き込みです。Alert 以上のレベルの場合にだけ事前確認します。", - "{everyStatementWrites} では Safe Mode がすべての文を書き込みとみなすため、Alert は読み取り前も確認し、Read-Only は読み取りも拒否します。", "JOIN、CTE、UNION の結果はグリッドで読み取り専用です。編集するにはテーブルを開いてください。" ], "docs": [ diff --git a/resources/data/content/ja/features/schema.json b/resources/data/content/ja/features/schema.json index 2157fea7..d6e8fdc3 100644 --- a/resources/data/content/ja/features/schema.json +++ b/resources/data/content/ja/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard はライブセッション、サーバーメトリクスと遅いクエリを、選んだ間隔で更新して表示します。エンジンが許可する場合、その行から実行中のクエリをキャンセルしたりセッションを終了したりできます。どちらも接続の Safe Mode を通します。SQLite、DuckDB、Typesense ではメトリクスだけを表示します。" + "Server Dashboard はライブセッション、サーバーメトリクスと遅いクエリを、選んだ間隔で更新して表示します。エンジンが許可する場合、その行から実行中のクエリをキャンセルしたりセッションを終了したりできます。どちらも接続の Safe Mode を通します。Typesense ではメトリクスだけを表示します。" ], "engines": [ { diff --git a/resources/data/content/ko/databases/duckdb-client.json b/resources/data/content/ko/databases/duckdb-client.json index bb8172c7..b5bf2021 100644 --- a/resources/data/content/ko/databases/duckdb-client.json +++ b/resources/data/content/ko/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "파일 공유 및 백업", "paragraphs": [ "TablePro가 파일을 잡고 있으면 duckdb CLI, 노트북이나 dbt 실행이 열 수 없습니다. Release the File Lock After로 몇 분간 유휴 상태 후 파일을 반환하고 다음 쿼리에서 다시 잡거나 Open the File Read-Only로 여러 읽기 프로세스가 공유하게 합니다. 데이터베이스 > Release File Lock(Database > Release File Lock)은 탭을 유지하며 즉시 반환합니다. 열린 트랜잭션, 임시 테이블, 연결된 데이터베이스 또는 변경 설정을 세션이 보유하면 이유를 표시하며 해제를 거부합니다.", - "Server Dashboard는 데이터베이스 크기, 블록 크기, 총 블록 수, 메모리 제한과 스레드를 보여 줍니다.", "Backup Dump는 {dumpTool}이 열린 연결로 기록하므로 설치가 필요 없습니다. 나중에 TablePro에서 복원할 .duckdb 파일이나 schema.sql, load.sql과 테이블별 Parquet 파일 폴더를 선택하며 pandas, Spark와 BigQuery가 직접 읽습니다. Restore Dump는 이름이 이미 사용 중인 첫 객체에서 중단합니다." ] }, diff --git a/resources/data/content/ko/databases/etcd-gui.json b/resources/data/content/ko/databases/etcd-gui.json index 3cb922f3..a251a8ba 100644 --- a/resources/data/content/ko/databases/etcd-gui.json +++ b/resources/data/content/ko/databases/etcd-gui.json @@ -37,7 +37,7 @@ "키 접두사 루트(Key Prefix Root)에 /app 등을 넣어 연결 범위를 하위 트리 하나로 제한합니다. 사이드바는 그 아래 첫 경로 구간으로 키를 묶고 각 행에 값, 버전, 수정·생성 리비전과 리스를 표시합니다.", "편집 저장은 명령을 전송합니다. 새 값·리스는 키를 다시 put, NULL 리스는 리스를 제거, 이름 변경은 새 이름을 put하고 기존 이름을 삭제합니다. 리비전 열은 etcd가 관리해 수정하면 저장을 멈추고 열을 알립니다.", "etcdctl 방식의 키, watch, 리스, 멤버, 엔드포인트, 압축, 접근 제어 명령을 실행하세요. 명령과 플래그 자동 완성을 제공하며 지원하지 않는 명령은 서버에 보내기 전에 거부합니다.", - "etcd 드라이버는 읽기 전용 세션을 열 수 없어 Safe Mode가 모든 명령을 쓰기로 취급합니다. Alert·Safe Mode 수준은 매번 확인하고 Read-Only는 모두 차단합니다." + "Safe Mode는 get, watch와 목록이나 상태만 보여 주는 명령을 읽기로 실행하고, 그 밖의 명령은 쓰기로 취급합니다." ] }, { diff --git a/resources/data/content/ko/databases/mongodb-client.json b/resources/data/content/ko/databases/mongodb-client.json index 6571e461..dac54f46 100644 --- a/resources/data/content/ko/databases/mongodb-client.json +++ b/resources/data/content/ko/databases/mongodb-client.json @@ -44,7 +44,7 @@ "최상위 필드는 열로, 중첩 객체는 Extended JSON으로 표시합니다. 셀 편집은 날짜, ObjectId 등 타입을 유지합니다. 중첩 편집은 address.city처럼 변경된 경로만 업데이트합니다.", "Insert Document와 Edit Document는 Extended JSON을 사용합니다. Edit Document는 서버 문서를 다시 읽고 편집 중 변경되거나 삭제되었으면 저장을 거부합니다. Remove Field는 $unset을 보냅니다.", "필터 바는 중첩 객체·객체 배열 안에 접근해 customer.country·items.sku를 바로 필터링합니다. GeoJSON 필드는 지도 보기로 열립니다.", - "드라이버가 읽기 전용 세션을 열 수 없어 Safe Mode는 MongoDB 연결의 모든 명령문을 쓰기로 취급합니다. Alert와 Safe Mode 수준은 명령문마다 확인하고 Read-Only는 모두 차단합니다." + "Safe Mode는 find, countDocuments, $out이나 $merge가 없는 aggregate처럼 읽기만 하는 호출 하나를 읽기로 실행합니다. 그 밖의 JavaScript는 쓰기로 취급합니다." ] }, { diff --git a/resources/data/content/ko/databases/mysql-client.json b/resources/data/content/ko/databases/mysql-client.json index 97b7ce2a..26564707 100644 --- a/resources/data/content/ko/databases/mysql-client.json +++ b/resources/data/content/ko/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "로컬 MySQL 소켓으로 연결할 수 있나요?", - "answer": "아니요. 연결은 TCP를 사용하므로 서버의 네트워킹을 켜야 합니다. 원격 서버의 소켓에 접근하려면 SSH 터널로 전달하세요." + "answer": "이 Mac의 서버라면 가능합니다. Connect Using을 Socket으로 설정하고 소켓 파일 경로를 입력하세요. 호스트와 포트는 폼에서 사라지며, SSH 터널로는 소켓 파일에 닿을 수 없습니다." }, { "id": "mysqldump", diff --git a/resources/data/content/ko/databases/redis-gui.json b/resources/data/content/ko/databases/redis-gui.json index 3a79d609..6b81ad19 100644 --- a/resources/data/content/ko/databases/redis-gui.json +++ b/resources/data/content/ko/databases/redis-gui.json @@ -38,7 +38,7 @@ "콜론으로 나눈 폴더로 키를 탐색하거나 다른 구분자를 선택하세요. 각 행에 타입, TTL, 길이, 값이 표시됩니다. 컬렉션은 첫 항목들을 보여 주고 UTF-8이 아닌 값은 16진수 편집기로 엽니다.", "그리드에서 키 이름, TTL, 문자열 값을 편집하세요. Add Row는 해시, 목록, 집합, 정렬 집합, 문자열을 만듭니다. 서버 측 SCAN MATCH와 SCAN TYPE으로 키 이름과 타입을 필터링합니다.", "redis-cli 방식의 따옴표 규칙으로 명령을 실행하세요. 알 수 없는 명령은 그대로 전송됩니다. DB 3 GET key는 세션을 바꾸지 않고 다른 데이터베이스를 대상으로 합니다. MULTI의 응답은 EXEC까지 대기합니다.", - "Safe Mode는 GET까지 모든 Redis 명령을 쓰기로 취급해 Alert와 Safe Mode 수준은 명령마다 확인하고 Read-Only는 모두 차단합니다. FLUSHDB·FLUSHALL은 Silent에서도 실행 전 확인합니다." + "Safe Mode는 GET 같은 읽기 명령 목록에 있는 명령은 읽기로 실행하고, 그 밖의 명령은 쓰기로 취급합니다. FLUSHDB·FLUSHALL은 Silent에서도 실행 전 확인합니다." ] }, { diff --git a/resources/data/content/ko/databases/sqlite-client.json b/resources/data/content/ko/databases/sqlite-client.json index ff277744..3a71cc3c 100644 --- a/resources/data/content/ko/databases/sqlite-client.json +++ b/resources/data/content/ko/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "유지 관리 및 백업", "paragraphs": [ - "테이블 유지 관리는 VACUUM, ANALYZE, REINDEX와 무결성 검사를 실행하며 각각 먼저 SQL을 보여 줍니다. Server Dashboard는 파일 크기, 페이지 수·크기, 저널 모드와 캐시 크기를 표시합니다.", + "테이블 유지 관리는 VACUUM, ANALYZE, REINDEX와 무결성 검사를 실행하며 각각 먼저 SQL을 보여 줍니다.", "Backup Dump는 {dumpTool}로 데이터베이스를 .sql 파일에 기록하고 Restore Dump는 해당 파일을 데이터베이스에서 실행합니다." ] }, diff --git a/resources/data/content/ko/engines.json b/resources/data/content/ko/engines.json index 9468dde6..565b47c4 100644 --- a/resources/data/content/ko/engines.json +++ b/resources/data/content/ko/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN 다이어그램, 사용자, 세션; mysqldump 백업.", "limits": { - "tcp-only": "호스트와 포트를 통해 TCP로 연결합니다. 로컬 Unix 소켓은 지원하지 않습니다.", "load-data-local-refused": "드라이버는 LOAD DATA LOCAL INFILE을 거부합니다. 대신 Import로 파일을 가져오세요." } }, @@ -188,8 +187,7 @@ "tagline": "Query DSL 콘솔; _id로 문서 편집.", "limits": { "no-opensearch": "OpenSearch는 지원하지 않습니다.", - "aliases-not-listed": "별칭과 데이터 스트림은 사이드바에 표시되지 않습니다. 콘솔에서 이름으로 지정하세요.", - "no-ssh": "SSH 터널은 지원하지 않습니다." + "aliases-not-listed": "별칭과 데이터 스트림은 사이드바에 표시되지 않습니다. 콘솔에서 이름으로 지정하세요." } }, "etcd": { diff --git a/resources/data/content/ko/features/data-editing.json b/resources/data/content/ko/features/data-editing.json index 7bf8975e..014e81e3 100644 --- a/resources/data/content/ko/features/data-editing.json +++ b/resources/data/content/ko/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind는 백업이 아닙니다. 트리거, 연쇄 작업 또는 TablePro 외부의 변경을 되돌리지 않으며 기본 키 없는 행, {rewindMaxValue} MB를 넘는 값 또는 서버가 계산한 값을 복원할 수 없습니다.", "WHERE 없는 UPDATE는 일반 쓰기 작업으로 Alert 이상의 수준에서만 먼저 확인합니다.", - "{everyStatementWrites}에서는 Safe Mode가 모든 명령문을 쓰기로 간주하므로 Alert가 읽기 전에도 확인하고 Read-Only는 읽기도 차단합니다.", "조인, CTE 또는 UNION의 결과는 그리드에서 읽기 전용입니다. 편집하려면 테이블을 여세요." ], "docs": [ diff --git a/resources/data/content/ko/features/schema.json b/resources/data/content/ko/features/schema.json index 3dd8f9f8..67b4c079 100644 --- a/resources/data/content/ko/features/schema.json +++ b/resources/data/content/ko/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard는 선택한 주기로 갱신되는 실시간 세션, 서버 지표 및 느린 쿼리를 보여 줍니다. 엔진이 허용하면 해당 행에서 실행 중인 쿼리를 취소하거나 세션을 종료할 수 있으며 두 작업 모두 연결의 Safe Mode를 거칩니다. SQLite, DuckDB 및 Typesense에서는 지표만 표시합니다." + "Server Dashboard는 선택한 주기로 갱신되는 실시간 세션, 서버 지표 및 느린 쿼리를 보여 줍니다. 엔진이 허용하면 해당 행에서 실행 중인 쿼리를 취소하거나 세션을 종료할 수 있으며 두 작업 모두 연결의 Safe Mode를 거칩니다. Typesense에서는 지표만 표시합니다." ], "engines": [ { diff --git a/resources/data/content/pt-BR/databases/duckdb-client.json b/resources/data/content/pt-BR/databases/duckdb-client.json index a15f3a69..fc3eb323 100644 --- a/resources/data/content/pt-BR/databases/duckdb-client.json +++ b/resources/data/content/pt-BR/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Compartilhe o arquivo e faça backups", "paragraphs": [ "Enquanto TablePro mantém um arquivo aberto, a CLI duckdb, um notebook ou uma execução de dbt não podem abri-lo. Defina Release the File Lock After para liberar o arquivo após alguns minutos de inatividade e retomá-lo na próxima consulta, ou Open the File Read-Only para permitir vários leitores. Database > Release File Lock o libera imediatamente e mantém as abas. A liberação é recusada, com a justificativa, enquanto a sessão mantém uma transação aberta, uma tabela temporária, um banco anexado ou uma configuração alterada.", - "O Server Dashboard mostra o tamanho do banco, o tamanho e a quantidade total de blocos, o limite de memória e as threads.", "Backup Dump não exige instalar nada, pois {dumpTool} grava pela conexão aberta. Escolha um arquivo .duckdb para restaurar depois no TablePro, ou uma pasta contendo schema.sql, load.sql e um arquivo Parquet por tabela, que pandas, Spark e BigQuery leem diretamente. Restore Dump para no primeiro objeto cujo nome já está em uso." ] }, diff --git a/resources/data/content/pt-BR/databases/etcd-gui.json b/resources/data/content/pt-BR/databases/etcd-gui.json index f5bf4cf7..4ed304dc 100644 --- a/resources/data/content/pt-BR/databases/etcd-gui.json +++ b/resources/data/content/pt-BR/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Defina Key Prefix Root, como /app, para limitar uma conexão a uma subárvore. A barra lateral agrupa as chaves pelo primeiro segmento do caminho abaixo dela, e cada chave aparece como uma linha com seu valor, versão, revisões de modificação e criação, e lease.", "Salvar uma edição envia comandos. Um novo valor ou lease grava novamente a chave, um lease NULL remove o lease, e renomear uma chave grava o novo nome e exclui o antigo. As colunas de revisão pertencem ao etcd, portanto editá-las interrompe o salvamento e informa o nome da coluna.", "Execute comandos no estilo etcdctl para chaves, watch, leases, membros, endpoints, compactação e controle de acesso, com preenchimento de comandos e flags. Comandos não suportados são rejeitados antes de chegar ao servidor.", - "O driver de etcd não pode abrir uma sessão somente leitura, portanto Safe Mode trata todos os comandos como gravações: nos níveis Alert e Safe Mode, cada um pede confirmação antes de executar, e Read-Only bloqueia todos." + "Safe Mode executa como leitura get, watch e os comandos que apenas listam ou informam, e considera gravação qualquer outro comando." ] }, { diff --git a/resources/data/content/pt-BR/databases/mongodb-client.json b/resources/data/content/pt-BR/databases/mongodb-client.json index 439b0268..57edc9c7 100644 --- a/resources/data/content/pt-BR/databases/mongodb-client.json +++ b/resources/data/content/pt-BR/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Procure campos de nível superior como colunas e objetos aninhados como JSON estendido. As edições de células preservam tipos como datas e ObjectIds. As edições aninhadas atualizam apenas o caminho alterado, como address.city.", "Insert Document e Edit Document usam Extended JSON. Edit Document relê o documento no servidor e recusa o salvamento se ele mudou ou foi removido enquanto estava aberto. Remove Field envia $unset.", "A barra de filtros acessa objetos aninhados e arrays de objetos, portanto customer.country e items.sku filtram diretamente. Um campo com GeoJSON abre na visualização Mapa.", - "Safe Mode trata todas as instruções de uma conexão MongoDB como gravação, pois o driver não pode abrir uma sessão somente leitura. Os níveis Alert e Safe Mode confirmam cada uma, e Read-Only bloqueia todas." + "Safe Mode executa uma instrução como leitura quando ela é uma única chamada que só lê, como find, countDocuments ou um aggregate sem $out nem $merge. Qualquer outro JavaScript conta como gravação." ] }, { diff --git a/resources/data/content/pt-BR/databases/mysql-client.json b/resources/data/content/pt-BR/databases/mysql-client.json index cd411222..0c19175b 100644 --- a/resources/data/content/pt-BR/databases/mysql-client.json +++ b/resources/data/content/pt-BR/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "TablePro pode se conectar por um socket MySQL local?", - "answer": "Não. As conexões usam TCP, portanto a rede precisa estar ativada no servidor. Para acessar um socket em um servidor remoto, encaminhe-o por um túnel SSH." + "answer": "Sim, para um servidor neste Mac. Defina Connect Using como Socket e informe o caminho do arquivo de socket. Host e porta saem do formulário, e um túnel SSH não alcança um arquivo de socket." }, { "id": "mysqldump", diff --git a/resources/data/content/pt-BR/databases/redis-gui.json b/resources/data/content/pt-BR/databases/redis-gui.json index be846bdb..335f6e74 100644 --- a/resources/data/content/pt-BR/databases/redis-gui.json +++ b/resources/data/content/pt-BR/databases/redis-gui.json @@ -38,7 +38,7 @@ "Navegue pelas chaves por pastas separadas por dois pontos ou escolha outro separador. Cada linha mostra o tipo, TTL, comprimento e valor da chave. As coleções mostram suas primeiras entradas; valores não UTF-8 abertos no editor hexadecimal.", "Edite nomes de chaves, TTLs e valores de string na grade. Add Row cria hashes, listas, conjuntos, conjuntos classificados ou strings. Filtre nomes e tipos de chaves usando SCAN MATCH e SCAN TYPE do lado do servidor.", "Execute comandos com aspas no estilo redis-cli. Comandos desconhecidos são enviados conforme escritos. DB 3 GET key tem como alvo outro banco de dados sem alterar a sessão. Em MULTI, as respostas permanecem na fila até EXEC.", - "Safe Mode considera todos os comandos Redis como gravação, inclusive GET, portanto os níveis Alert e Safe Mode confirmam cada um, e Read-Only bloqueia todos. FLUSHDB e FLUSHALL pedem confirmação antes de executar, mesmo em Silent." + "Safe Mode executa como leitura os comandos da sua lista de leitura, como GET, e considera gravação qualquer outro comando. FLUSHDB e FLUSHALL pedem confirmação antes de executar, mesmo em Silent." ] }, { diff --git a/resources/data/content/pt-BR/databases/sqlite-client.json b/resources/data/content/pt-BR/databases/sqlite-client.json index 4427405e..02c48185 100644 --- a/resources/data/content/pt-BR/databases/sqlite-client.json +++ b/resources/data/content/pt-BR/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Faça manutenção e backups", "paragraphs": [ - "A manutenção de tabelas executa VACUUM, ANALYZE, REINDEX e uma verificação de integridade, cada um mostrado como SQL antes da execução. O Server Dashboard mostra o tamanho do arquivo, a quantidade e o tamanho das páginas, o modo de journal e o tamanho do cache.", + "A manutenção de tabelas executa VACUUM, ANALYZE, REINDEX e uma verificação de integridade, cada um mostrado como SQL antes da execução.", "Backup Dump grava o banco em um arquivo .sql com {dumpTool}, e Restore Dump executa um arquivo desse tipo em um banco de dados." ] }, diff --git a/resources/data/content/pt-BR/engines.json b/resources/data/content/pt-BR/engines.json index 9313d342..505c8aec 100644 --- a/resources/data/content/pt-BR/engines.json +++ b/resources/data/content/pt-BR/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "Diagramas EXPLAIN, usuários e sessões; backups do mysqldump.", "limits": { - "tcp-only": "As conexões usam host e porta por TCP. Sockets Unix locais não são compatíveis.", "load-data-local-refused": "O driver recusa LOAD DATA LOCAL INFILE. Carregue um arquivo pela Importação." } }, @@ -188,8 +187,7 @@ "tagline": "Console Query DSL; edição de documentos por _id.", "limits": { "no-opensearch": "OpenSearch não é compatível.", - "aliases-not-listed": "Aliases e data streams não aparecem na barra lateral. Use seus nomes no console.", - "no-ssh": "Túneis SSH não são compatíveis." + "aliases-not-listed": "Aliases e data streams não aparecem na barra lateral. Use seus nomes no console." } }, "etcd": { diff --git a/resources/data/content/pt-BR/features/data-editing.json b/resources/data/content/pt-BR/features/data-editing.json index d4edbbae..692f7fc9 100644 --- a/resources/data/content/pt-BR/features/data-editing.json +++ b/resources/data/content/pt-BR/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind não é um backup. Não desfaz triggers, cascatas nem mudanças feitas fora do TablePro e não pode restaurar linhas sem chave primária, valores acima de {rewindMaxValue} MB nem valores calculados pelo servidor.", "UPDATE sem WHERE é uma gravação comum: pede confirmação apenas no nível Alert ou mais rigoroso.", - "Em {everyStatementWrites}, o Safe Mode considera toda instrução uma gravação, portanto Alert também pede confirmação antes de ler e Read-Only bloqueia as leituras.", "O resultado de um join, CTE ou UNION é somente leitura na grade; abra a tabela para editá-la." ], "docs": [ diff --git a/resources/data/content/pt-BR/features/schema.json b/resources/data/content/pt-BR/features/schema.json index 12cec846..3667a1cb 100644 --- a/resources/data/content/pt-BR/features/schema.json +++ b/resources/data/content/pt-BR/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "O Server Dashboard mostra sessões ativas, métricas do servidor e consultas lentas, atualizadas no intervalo escolhido. Quando o mecanismo permite, cancele uma consulta em execução ou encerre uma sessão a partir de sua linha; as duas ações passam pelo Safe Mode da conexão. No SQLite, DuckDB e Typesense, mostra apenas métricas." + "O Server Dashboard mostra sessões ativas, métricas do servidor e consultas lentas, atualizadas no intervalo escolhido. Quando o mecanismo permite, cancele uma consulta em execução ou encerre uma sessão a partir de sua linha; as duas ações passam pelo Safe Mode da conexão. No Typesense, mostra apenas métricas." ], "engines": [ { diff --git a/resources/data/content/vi/databases/duckdb-client.json b/resources/data/content/vi/databases/duckdb-client.json index 92b9da58..f9186878 100644 --- a/resources/data/content/vi/databases/duckdb-client.json +++ b/resources/data/content/vi/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "Chia sẻ file và sao lưu", "paragraphs": [ "Khi TablePro đang giữ một file, CLI duckdb, một notebook hay một lần chạy dbt đều không mở được file đó. Hãy đặt Release the File Lock After để trả file lại sau một số phút không hoạt động và lấy lại ở query tiếp theo, hoặc bật Open the File Read-Only để nhiều tiến trình cùng đọc. Cơ sở dữ liệu > Release File Lock (Database > Release File Lock) trả file ngay lập tức mà vẫn giữ các tab của bạn. Việc trả file bị từ chối, kèm lý do, khi session còn một transaction đang mở, một temporary table, một cơ sở dữ liệu đã attach hoặc một setting đã đổi.", - "Server Dashboard hiển thị dung lượng cơ sở dữ liệu, kích thước block, tổng số block, giới hạn bộ nhớ và số thread.", "Backup Dump không cần cài gì, vì {dumpTool} tự ghi bản sao lưu qua connection đang mở. Hãy chọn một file .duckdb nếu sau này muốn khôi phục vào TablePro, hoặc một thư mục gồm schema.sql, load.sql và mỗi table một file Parquet, mà pandas, Spark và BigQuery đọc trực tiếp được. Restore Dump dừng ở đối tượng đầu tiên có tên đã tồn tại." ] }, diff --git a/resources/data/content/vi/databases/etcd-gui.json b/resources/data/content/vi/databases/etcd-gui.json index 1997dead..57700e0a 100644 --- a/resources/data/content/vi/databases/etcd-gui.json +++ b/resources/data/content/vi/databases/etcd-gui.json @@ -37,7 +37,7 @@ "Đặt Tiền tố gốc (Key Prefix Root), chẳng hạn /app, để giới hạn connection trong một nhánh key. Sidebar nhóm key theo đoạn đường dẫn đầu tiên bên dưới tiền tố đó, và mỗi key là một dòng gồm value, version, mod revision, create revision và lease.", "Khi lưu, mỗi thay đổi được gửi đi dưới dạng lệnh. Value hoặc lease mới sẽ put lại key, đặt lease thành NULL sẽ gỡ lease, còn đổi tên key sẽ put tên mới rồi xóa key cũ. Các cột revision do etcd quản lý, nên sửa một cột trong số đó sẽ chặn thao tác lưu và nêu tên cột.", "Chạy command kiểu etcdctl cho key, watch, lease, member, endpoint, compaction và quyền truy cập, có gợi ý command và flag. Command không hỗ trợ bị từ chối trước khi tới server.", - "Driver etcd không mở được session chỉ đọc, nên Safe Mode coi mọi lệnh là thao tác ghi: ở mức Alert và Safe Mode, lệnh nào cũng hỏi trước, còn mức Read-Only chặn tất cả." + "Safe Mode coi get, watch và các lệnh chỉ liệt kê hay báo cáo trạng thái là thao tác đọc, còn mọi lệnh khác là thao tác ghi." ] }, { diff --git a/resources/data/content/vi/databases/mongodb-client.json b/resources/data/content/vi/databases/mongodb-client.json index 845adebb..b075825e 100644 --- a/resources/data/content/vi/databases/mongodb-client.json +++ b/resources/data/content/vi/databases/mongodb-client.json @@ -44,7 +44,7 @@ "Xem field cấp cao nhất dạng cột và object lồng dạng Extended JSON. Sửa ô giữ kiểu như date và ObjectId. Sửa lồng chỉ update path đã đổi, như address.city.", "Insert Document và Edit Document dùng Extended JSON. Edit Document đọc lại document server và từ chối lưu nếu đã đổi hoặc biến mất khi đang mở. Remove Field gửi $unset.", "Thanh lọc đi được vào object lồng nhau và mảng object, nên bạn lọc thẳng theo customer.country hay items.sku. Field chứa GeoJSON mở được trên Map view.", - "Safe Mode coi mọi câu lệnh trên connection MongoDB là thao tác ghi, vì driver không mở được session chỉ đọc. Các mức Alert và Safe Mode hỏi xác nhận từng câu, còn Read-Only chặn tất cả." + "Safe Mode coi một câu lệnh là thao tác đọc khi nó chỉ là một lời gọi đọc dữ liệu, như find, countDocuments hoặc aggregate không có $out hay $merge. Mọi đoạn JavaScript khác được coi là thao tác ghi." ] }, { diff --git a/resources/data/content/vi/databases/mysql-client.json b/resources/data/content/vi/databases/mysql-client.json index b40937a6..20bd4eab 100644 --- a/resources/data/content/vi/databases/mysql-client.json +++ b/resources/data/content/vi/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "TablePro có kết nối được qua socket MySQL cục bộ không?", - "answer": "Không. Connection dùng TCP, nên server cần bật networking. Để truy cập một socket trên server từ xa, hãy chuyển tiếp nó qua SSH tunnel." + "answer": "Có, với server trên chính máy Mac này. Đặt Connect Using thành Socket rồi nhập đường dẫn tới file socket. Host và port không còn trong form, và SSH tunnel không đi tới được file socket." }, { "id": "mysqldump", diff --git a/resources/data/content/vi/databases/redis-gui.json b/resources/data/content/vi/databases/redis-gui.json index 352a21ef..49bf5e8a 100644 --- a/resources/data/content/vi/databases/redis-gui.json +++ b/resources/data/content/vi/databases/redis-gui.json @@ -38,7 +38,7 @@ "Xem key theo thư mục phân tách bằng dấu hai chấm, hoặc chọn dấu khác. Mỗi dòng hiển thị kiểu key, TTL, độ dài và giá trị. Collection hiện các mục đầu; giá trị không phải UTF-8 mở trong hex editor.", "Sửa tên key, TTL và string trong data grid. Add Row tạo hash, list, set, sorted set hoặc string. Lọc tên và kiểu key bằng SCAN MATCH và SCAN TYPE phía server.", "Chạy command với quy tắc quote kiểu redis-cli. Command chưa biết gửi nguyên văn. DB 3 GET key tới cơ sở dữ liệu khác mà không đổi session. Trong MULTI, response chờ tới EXEC.", - "Safe Mode coi mọi lệnh Redis là thao tác ghi, kể cả GET, nên các mức Alert và Safe Mode hỏi xác nhận từng lệnh, còn Read-Only chặn tất cả. FLUSHDB và FLUSHALL luôn hỏi trước khi chạy, kể cả ở mức Silent." + "Safe Mode coi các lệnh nằm trong danh sách lệnh đọc, chẳng hạn GET, là thao tác đọc, còn mọi lệnh khác là thao tác ghi. FLUSHDB và FLUSHALL luôn hỏi trước khi chạy, kể cả ở mức Silent." ] }, { diff --git a/resources/data/content/vi/databases/sqlite-client.json b/resources/data/content/vi/databases/sqlite-client.json index 48964459..19689d12 100644 --- a/resources/data/content/vi/databases/sqlite-client.json +++ b/resources/data/content/vi/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "Bảo trì và sao lưu", "paragraphs": [ - "Phần bảo trì table chạy VACUUM, ANALYZE, REINDEX và kiểm tra tính toàn vẹn, mỗi thao tác đều hiển thị SQL trước khi chạy. Server Dashboard hiển thị dung lượng file, số page, kích thước page, journal mode và kích thước cache.", + "Phần bảo trì table chạy VACUUM, ANALYZE, REINDEX và kiểm tra tính toàn vẹn, mỗi thao tác đều hiển thị SQL trước khi chạy.", "Backup Dump ghi cơ sở dữ liệu ra một file .sql bằng {dumpTool}, và Restore Dump chạy một file như vậy vào cơ sở dữ liệu." ] }, diff --git a/resources/data/content/vi/engines.json b/resources/data/content/vi/engines.json index 3e3431c4..2d824957 100644 --- a/resources/data/content/vi/engines.json +++ b/resources/data/content/vi/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN diagram, user và session; backup mysqldump.", "limits": { - "tcp-only": "Connection dùng host và port qua TCP. Không hỗ trợ Unix socket cục bộ.", "load-data-local-refused": "Driver từ chối LOAD DATA LOCAL INFILE. Hãy nạp file bằng Import." } }, @@ -188,8 +187,7 @@ "tagline": "Console Query DSL; sửa document theo _id.", "limits": { "no-opensearch": "Không hỗ trợ OpenSearch.", - "aliases-not-listed": "Alias và data stream không được liệt kê trong sidebar. Hãy gọi chúng theo tên trong console.", - "no-ssh": "Không hỗ trợ SSH tunnel." + "aliases-not-listed": "Alias và data stream không được liệt kê trong sidebar. Hãy gọi chúng theo tên trong console." } }, "etcd": { diff --git a/resources/data/content/vi/features/data-editing.json b/resources/data/content/vi/features/data-editing.json index 96ebfc49..c879344e 100644 --- a/resources/data/content/vi/features/data-editing.json +++ b/resources/data/content/vi/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind không phải là bản sao lưu. Tính năng này không hoàn tác trigger, cascade hay thay đổi từ bên ngoài TablePro, và không khôi phục được dòng không có khóa chính, giá trị lớn hơn {rewindMaxValue} MB hay giá trị do server tính ra.", "UPDATE không có WHERE là một câu lệnh ghi bình thường: chỉ được hỏi lại từ mức Alert trở lên.", - "Trên {everyStatementWrites}, Safe Mode coi mọi câu lệnh là câu lệnh ghi, nên Alert hỏi cả trước khi đọc và Read-Only chặn luôn việc đọc.", "Kết quả của query có JOIN, CTE hay UNION chỉ đọc trong data grid; hãy mở chính table đó để sửa." ], "docs": [ diff --git a/resources/data/content/vi/features/schema.json b/resources/data/content/vi/features/schema.json index adf1efe6..af5d2203 100644 --- a/resources/data/content/vi/features/schema.json +++ b/resources/data/content/vi/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard hiển thị các session đang chạy, chỉ số của server và các query chậm, làm mới theo khoảng thời gian bạn chọn. Nếu engine cho phép, bạn có thể hủy một query đang chạy hoặc kết thúc một session ngay trên dòng của nó; cả hai đều đi qua Safe Mode của connection. Trên SQLite, DuckDB và Typesense, dashboard chỉ hiển thị chỉ số." + "Server Dashboard hiển thị các session đang chạy, chỉ số của server và các query chậm, làm mới theo khoảng thời gian bạn chọn. Nếu engine cho phép, bạn có thể hủy một query đang chạy hoặc kết thúc một session ngay trên dòng của nó; cả hai đều đi qua Safe Mode của connection. Trên Typesense, dashboard chỉ hiển thị chỉ số." ], "engines": [ { diff --git a/resources/data/content/zh-Hans/databases/duckdb-client.json b/resources/data/content/zh-Hans/databases/duckdb-client.json index 034535ba..dba5b305 100644 --- a/resources/data/content/zh-Hans/databases/duckdb-client.json +++ b/resources/data/content/zh-Hans/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "共享文件并备份", "paragraphs": [ "TablePro 持有文件时,duckdb CLI、notebook 或 dbt 无法打开。设置 Release the File Lock After 可在空闲数分钟后释放,下次查询再获取;Open the File Read-Only 允许多个读取者共享。数据库 > Release File Lock(Database > Release File Lock)立即释放并保留标签页。会话若持有未结束事务、临时表、挂载数据库或已修改设置,会拒绝释放并说明原因。", - "Server Dashboard 显示数据库大小、块大小、总块数、内存上限和线程数。", "Backup Dump 无需安装,因为 {dumpTool} 通过已打开连接写入。可选择供日后在 TablePro 还原的 .duckdb 文件,或含 schema.sql、load.sql 及每表一个 Parquet 文件的文件夹,pandas、Spark 和 BigQuery 可直接读取。Restore Dump 在首个名称已被占用的对象处停止。" ] }, diff --git a/resources/data/content/zh-Hans/databases/etcd-gui.json b/resources/data/content/zh-Hans/databases/etcd-gui.json index 8084e367..bbea3912 100644 --- a/resources/data/content/zh-Hans/databases/etcd-gui.json +++ b/resources/data/content/zh-Hans/databases/etcd-gui.json @@ -37,7 +37,7 @@ "设置键前缀根(Key Prefix Root)(如 /app)将连接限制于一个子树。侧边栏按其下第一个路径段分组,每个键一行,显示值、版本、修改和创建修订号及租约。", "保存编辑发送命令。新值或租约重新 put 键,NULL 租约移除租约,重命名先 put 新名再删除旧名。修订号列由 etcd 管理,编辑会停止保存并指出列名。", "运行 etcdctl 风格的键、watch、租约、成员、端点、压缩和访问控制命令,支持命令及标志补全。不支持的命令会在发送到服务器前被拒绝。", - "etcd 驱动无法打开只读会话,因此 Safe Mode 将所有命令视为写入:Alert、Safe Mode 级别每次先确认,Read-Only 全部阻止。" + "Safe Mode 将 get、watch 以及只列出或报告状态的命令作为读取运行,其他命令均视为写入。" ] }, { diff --git a/resources/data/content/zh-Hans/databases/mongodb-client.json b/resources/data/content/zh-Hans/databases/mongodb-client.json index 123e8383..7a93e9fa 100644 --- a/resources/data/content/zh-Hans/databases/mongodb-client.json +++ b/resources/data/content/zh-Hans/databases/mongodb-client.json @@ -44,7 +44,7 @@ "顶层字段显示为列,嵌套对象显示为 Extended JSON。单元格编辑保留日期、ObjectId 等类型。嵌套编辑仅更新已更改路径,例如 address.city。", "Insert Document 和 Edit Document 使用 Extended JSON。Edit Document 会重新读取服务器文档;若编辑期间文档已更改或消失,则拒绝保存。Remove Field 发送 $unset。", "筛选栏可访问嵌套对象和对象数组,直接筛选 customer.country、items.sku。GeoJSON 字段在地图视图打开。", - "驱动无法打开只读会话,所以 Safe Mode 将 MongoDB 连接的所有语句视为写入。Alert、Safe Mode 级别逐条确认,Read-Only 全部阻止。" + "Safe Mode 只把单个只读调用作为读取运行,如 find、countDocuments 或不含 $out、$merge 的 aggregate。其他 JavaScript 均视为写入。" ] }, { diff --git a/resources/data/content/zh-Hans/databases/mysql-client.json b/resources/data/content/zh-Hans/databases/mysql-client.json index 80f82302..07a82859 100644 --- a/resources/data/content/zh-Hans/databases/mysql-client.json +++ b/resources/data/content/zh-Hans/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "能通过本地 MySQL socket 连接吗?", - "answer": "不能。连接使用 TCP,服务器需开启网络功能。要访问远程服务器上的 socket,请通过 SSH 隧道转发。" + "answer": "可以,限本机上的服务器。将 Connect Using 设为 Socket,然后输入其 socket 文件路径。主机和端口会从表单中消失,SSH 隧道也无法到达 socket 文件。" }, { "id": "mysqldump", diff --git a/resources/data/content/zh-Hans/databases/redis-gui.json b/resources/data/content/zh-Hans/databases/redis-gui.json index bc7931f1..e259ac82 100644 --- a/resources/data/content/zh-Hans/databases/redis-gui.json +++ b/resources/data/content/zh-Hans/databases/redis-gui.json @@ -38,7 +38,7 @@ "按冒号分隔的文件夹浏览键,也可选择其他分隔符。每行显示键类型、TTL、长度和值。集合显示前几个条目;非 UTF-8 值在十六进制编辑器中打开。", "在表格中编辑键名、TTL 和字符串值。Add Row 可创建哈希、列表、集合、有序集合或字符串。通过服务器端 SCAN MATCH 和 SCAN TYPE 筛选键名和类型。", "使用 redis-cli 风格引号规则运行命令。未知命令按原样发送。DB 3 GET key 可访问另一个数据库而不改变会话。MULTI 中的响应会排队,直到 EXEC。", - "Safe Mode 将包括 GET 的所有 Redis 命令视为写入,Alert、Safe Mode 级别逐条确认,Read-Only 全部阻止。FLUSHDB、FLUSHALL 即使 Silent 也先确认。" + "Safe Mode 将读取命令列表中的命令(如 GET)作为读取运行,其他命令均视为写入。FLUSHDB、FLUSHALL 即使 Silent 也先确认。" ] }, { diff --git a/resources/data/content/zh-Hans/databases/sqlite-client.json b/resources/data/content/zh-Hans/databases/sqlite-client.json index b8a40241..a2c290fa 100644 --- a/resources/data/content/zh-Hans/databases/sqlite-client.json +++ b/resources/data/content/zh-Hans/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "维护和备份", "paragraphs": [ - "表维护运行 VACUUM、ANALYZE、REINDEX 和完整性检查,每项执行前均显示 SQL。Server Dashboard 显示文件大小、页数、页大小、日志模式和缓存大小。", + "表维护运行 VACUUM、ANALYZE、REINDEX 和完整性检查,每项执行前均显示 SQL。", "Backup Dump 使用 {dumpTool} 将数据库写入 .sql 文件,Restore Dump 对数据库运行此类文件。" ] }, diff --git a/resources/data/content/zh-Hans/engines.json b/resources/data/content/zh-Hans/engines.json index 15394e51..0b540038 100644 --- a/resources/data/content/zh-Hans/engines.json +++ b/resources/data/content/zh-Hans/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN 图、用户和会话;mysqldump 备份。", "limits": { - "tcp-only": "连接使用主机和端口,通过 TCP 建立。不支持本地 Unix 套接字。", "load-data-local-refused": "驱动拒绝 LOAD DATA LOCAL INFILE。请改用 Import 加载文件。" } }, @@ -188,8 +187,7 @@ "tagline": "Query DSL 控制台;按 _id 编辑文档。", "limits": { "no-opensearch": "不支持 OpenSearch。", - "aliases-not-listed": "侧边栏不列出别名和数据流。请在控制台通过名称访问。", - "no-ssh": "不支持 SSH 隧道。" + "aliases-not-listed": "侧边栏不列出别名和数据流。请在控制台通过名称访问。" } }, "etcd": { diff --git a/resources/data/content/zh-Hans/features/data-editing.json b/resources/data/content/zh-Hans/features/data-editing.json index bd11e901..68aefa40 100644 --- a/resources/data/content/zh-Hans/features/data-editing.json +++ b/resources/data/content/zh-Hans/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind 不是备份。它不能撤销触发器、级联操作或 TablePro 外部的修改,也无法还原无主键的行、超过 {rewindMaxValue} MB 的值或服务器计算的值。", "无 WHERE 的 UPDATE 属于普通写入,仅在 Alert 或更严格级别下先询问。", - "在 {everyStatementWrites} 上,Safe Mode 将每条语句视为写入,因此 Alert 在读取前也询问,Read-Only 则阻止读取。", "JOIN、CTE 或 UNION 的结果在网格中只读;请打开表进行编辑。" ], "docs": [ diff --git a/resources/data/content/zh-Hans/features/schema.json b/resources/data/content/zh-Hans/features/schema.json index 96bf131c..aab92a6c 100644 --- a/resources/data/content/zh-Hans/features/schema.json +++ b/resources/data/content/zh-Hans/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard 按所选间隔刷新实时会话、服务器指标和慢查询。引擎允许时,可从对应行取消运行中的查询或终止会话,两项操作均遵循连接的 Safe Mode。在 SQLite、DuckDB 和 Typesense 上仅显示指标。" + "Server Dashboard 按所选间隔刷新实时会话、服务器指标和慢查询。引擎允许时,可从对应行取消运行中的查询或终止会话,两项操作均遵循连接的 Safe Mode。在 Typesense 上仅显示指标。" ], "engines": [ { diff --git a/resources/data/content/zh-Hant/databases/duckdb-client.json b/resources/data/content/zh-Hant/databases/duckdb-client.json index 93a8ff0d..3b47f6c0 100644 --- a/resources/data/content/zh-Hant/databases/duckdb-client.json +++ b/resources/data/content/zh-Hant/databases/duckdb-client.json @@ -22,8 +22,7 @@ "backup": "/features/import-export#backup", "explain": "/features/querying#performance", "editing": "/features/data-editing#edit", - "structure": "/features/schema#structure", - "dashboard": "/features/schema#server-dashboard" + "structure": "/features/schema#structure" }, "sections": [ { @@ -56,7 +55,6 @@ "title": "共用檔案並備份", "paragraphs": [ "TablePro 持有檔案時,duckdb CLI、notebook 或 dbt 無法開啟。設定 Release the File Lock After 可在閒置數分鐘後釋放,下次查詢再取得;Open the File Read-Only 允許多個讀取者共用。資料庫 > Release File Lock(Database > Release File Lock)立即釋放並保留分頁。工作階段若持有未結束交易、暫存資料表、附加資料庫或已修改設定,會拒絕釋放並說明原因。", - "Server Dashboard 顯示資料庫大小、區塊大小、總區塊數、記憶體上限和執行緒數。", "Backup Dump 無須安裝,因為 {dumpTool} 透過已開啟連線寫入。可選擇供日後在 TablePro 還原的 .duckdb 檔案,或含 schema.sql、load.sql 及每個資料表一個 Parquet 檔案的資料夾,pandas、Spark 和 BigQuery 可直接讀取。Restore Dump 在首個名稱已被占用的物件處停止。" ] }, diff --git a/resources/data/content/zh-Hant/databases/etcd-gui.json b/resources/data/content/zh-Hant/databases/etcd-gui.json index 9b94013b..09a701fa 100644 --- a/resources/data/content/zh-Hant/databases/etcd-gui.json +++ b/resources/data/content/zh-Hant/databases/etcd-gui.json @@ -37,7 +37,7 @@ "設定索引鍵前綴根目錄(Key Prefix Root)(如 /app)將連線限制於一個子樹。側邊欄依其下第一個路徑區段分組,每個索引鍵一列,顯示值、版本、修改和建立修訂號及租約。", "儲存編輯傳送指令。新值或租約重新 put 索引鍵,NULL 租約移除租約,重新命名先 put 新名稱再刪除舊名稱。修訂號欄由 etcd 管理,編輯會停止儲存並指出欄名。", "執行 etcdctl 風格的鍵、watch、租約、成員、端點、壓縮和存取控制命令,支援命令及旗標自動完成。不支援的命令會在傳送到伺服器前被拒絕。", - "etcd 驅動程式無法開啟唯讀工作階段,因此 Safe Mode 將所有指令視為寫入:Alert、Safe Mode 等級每次先確認,Read-Only 全部阻擋。" + "Safe Mode 將 get、watch 以及只列出或回報狀態的指令作為讀取執行,其他指令均視為寫入。" ] }, { diff --git a/resources/data/content/zh-Hant/databases/mongodb-client.json b/resources/data/content/zh-Hant/databases/mongodb-client.json index 95a9080e..ee39c56b 100644 --- a/resources/data/content/zh-Hant/databases/mongodb-client.json +++ b/resources/data/content/zh-Hant/databases/mongodb-client.json @@ -44,7 +44,7 @@ "頂層欄位顯示為欄,巢狀物件顯示為 Extended JSON。儲存格編輯保留日期、ObjectId 等型別。巢狀編輯僅更新已變更路徑,例如 address.city。", "Insert Document 和 Edit Document 使用 Extended JSON。Edit Document 會重新讀取伺服器文件;若編輯期間文件已變更或消失,則拒絕儲存。Remove Field 傳送 $unset。", "篩選列可存取巢狀物件和物件陣列,直接篩選 customer.country、items.sku。GeoJSON 欄位在地圖檢視開啟。", - "驅動程式無法開啟唯讀工作階段,所以 Safe Mode 將 MongoDB 連線的所有陳述式視為寫入。Alert、Safe Mode 等級逐一確認,Read-Only 全部阻擋。" + "Safe Mode 只把單一唯讀呼叫作為讀取執行,如 find、countDocuments 或不含 $out、$merge 的 aggregate。其他 JavaScript 均視為寫入。" ] }, { diff --git a/resources/data/content/zh-Hant/databases/mysql-client.json b/resources/data/content/zh-Hant/databases/mysql-client.json index 66b7c509..0cc13b11 100644 --- a/resources/data/content/zh-Hant/databases/mysql-client.json +++ b/resources/data/content/zh-Hant/databases/mysql-client.json @@ -154,7 +154,7 @@ { "id": "socket", "question": "能透過本機 MySQL socket 連線嗎?", - "answer": "不能。連線使用 TCP,伺服器需開啟網路功能。要存取遠端伺服器上的 socket,請透過 SSH 通道轉送。" + "answer": "可以,限本機上的伺服器。將 Connect Using 設為 Socket,然後輸入其 socket 檔案路徑。主機和連接埠會從表單中消失,SSH 通道也無法到達 socket 檔案。" }, { "id": "mysqldump", diff --git a/resources/data/content/zh-Hant/databases/redis-gui.json b/resources/data/content/zh-Hant/databases/redis-gui.json index 2e852b80..2269acb2 100644 --- a/resources/data/content/zh-Hant/databases/redis-gui.json +++ b/resources/data/content/zh-Hant/databases/redis-gui.json @@ -38,7 +38,7 @@ "依冒號分隔的資料夾瀏覽鍵,也可選擇其他分隔符。每列顯示鍵型別、TTL、長度和值。集合顯示前幾個項目;非 UTF-8 值在十六進位編輯器中開啟。", "在表格中編輯鍵名、TTL 和字串值。Add Row 可建立雜湊、清單、集合、有序集合或字串。透過伺服器端 SCAN MATCH 和 SCAN TYPE 篩選鍵名和型別。", "使用 redis-cli 風格引號規則執行命令。未知命令依原樣傳送。DB 3 GET key 可存取另一個資料庫而不改變工作階段。MULTI 中的回應會排隊,直到 EXEC。", - "Safe Mode 將包括 GET 的所有 Redis 指令視為寫入,Alert、Safe Mode 等級逐一確認,Read-Only 全部阻擋。FLUSHDB、FLUSHALL 即使 Silent 也先確認。" + "Safe Mode 將讀取指令清單中的指令(如 GET)作為讀取執行,其他指令均視為寫入。FLUSHDB、FLUSHALL 即使 Silent 也先確認。" ] }, { diff --git a/resources/data/content/zh-Hant/databases/sqlite-client.json b/resources/data/content/zh-Hant/databases/sqlite-client.json index f7c9f196..229c8eec 100644 --- a/resources/data/content/zh-Hant/databases/sqlite-client.json +++ b/resources/data/content/zh-Hant/databases/sqlite-client.json @@ -58,7 +58,7 @@ "id": "operate", "title": "維護與備份", "paragraphs": [ - "資料表維護執行 VACUUM、ANALYZE、REINDEX 和完整性檢查,每項執行前均顯示 SQL。Server Dashboard 顯示檔案大小、頁數、頁大小、日誌模式和快取大小。", + "資料表維護執行 VACUUM、ANALYZE、REINDEX 和完整性檢查,每項執行前均顯示 SQL。", "Backup Dump 使用 {dumpTool} 將資料庫寫入 .sql 檔案,Restore Dump 對資料庫執行此類檔案。" ] }, diff --git a/resources/data/content/zh-Hant/engines.json b/resources/data/content/zh-Hant/engines.json index daab91c2..d2ffda5a 100644 --- a/resources/data/content/zh-Hant/engines.json +++ b/resources/data/content/zh-Hant/engines.json @@ -8,7 +8,6 @@ "mysql": { "tagline": "EXPLAIN 圖、使用者和工作階段;mysqldump 備份。", "limits": { - "tcp-only": "連線使用主機和連接埠,透過 TCP 建立。不支援本機 Unix Socket。", "load-data-local-refused": "驅動程式拒絕 LOAD DATA LOCAL INFILE。請改用 Import 載入檔案。" } }, @@ -188,8 +187,7 @@ "tagline": "Query DSL 主控台;依 _id 編輯文件。", "limits": { "no-opensearch": "不支援 OpenSearch。", - "aliases-not-listed": "側邊欄不列出別名和資料串流。請在主控台透過名稱存取。", - "no-ssh": "不支援 SSH 通道。" + "aliases-not-listed": "側邊欄不列出別名和資料串流。請在主控台透過名稱存取。" } }, "etcd": { diff --git a/resources/data/content/zh-Hant/features/data-editing.json b/resources/data/content/zh-Hant/features/data-editing.json index fd51e41f..02d30722 100644 --- a/resources/data/content/zh-Hant/features/data-editing.json +++ b/resources/data/content/zh-Hant/features/data-editing.json @@ -164,7 +164,6 @@ "limits": [ "Data Rewind 不是備份。它不能復原觸發程序、串聯操作或 TablePro 外部的修改,也無法還原無主索引鍵的列、超過 {rewindMaxValue} MB 的值或伺服器計算的值。", "無 WHERE 的 UPDATE 屬於一般寫入,僅在 Alert 或更嚴格等級下先詢問。", - "在 {everyStatementWrites} 上,Safe Mode 將每個陳述式視為寫入,因此 Alert 在讀取前也詢問,Read-Only 則阻止讀取。", "JOIN、CTE 或 UNION 的結果在格線中唯讀;請開啟資料表進行編輯。" ], "docs": [ diff --git a/resources/data/content/zh-Hant/features/schema.json b/resources/data/content/zh-Hant/features/schema.json index d302a76b..264d2973 100644 --- a/resources/data/content/zh-Hant/features/schema.json +++ b/resources/data/content/zh-Hant/features/schema.json @@ -104,7 +104,7 @@ "id": "server-dashboard", "title": "Server Dashboard", "paragraphs": [ - "Server Dashboard 依所選間隔重新整理即時工作階段、伺服器指標與慢查詢。引擎允許時,可從對應列取消執行中的查詢或終止工作階段,兩項操作均遵循連線的 Safe Mode。在 SQLite、DuckDB 與 Typesense 上僅顯示指標。" + "Server Dashboard 依所選間隔重新整理即時工作階段、伺服器指標與慢查詢。引擎允許時,可從對應列取消執行中的查詢或終止工作階段,兩項操作均遵循連線的 Safe Mode。在 Typesense 上僅顯示指標。" ], "engines": [ { diff --git a/resources/data/engines.json b/resources/data/engines.json index f6293e05..30e38f57 100644 --- a/resources/data/engines.json +++ b/resources/data/engines.json @@ -38,17 +38,17 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "9.1", "enforced": false, "evidence": "docs/databases/postgresql.mdx:21" }, + "versionFloor": { "text": "9.1", "enforced": false, "evidence": "TableProApp/docs:databases/postgresql.mdx:21" }, "bundledVersion": null, "limits": [ { "id": "column-reorder-script-only", "value": null, - "evidence": "Plugins/PostgreSQLDriverPlugin/PostgreSQLPluginDriver+ColumnReorder.swift:13-43" + "evidence": "Plugins/PostgreSQLDriverPlugin/PostgreSQLPluginDriver+ColumnReorder.swift:14-44" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "mysql", @@ -89,22 +89,17 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "5.7", "enforced": false, "evidence": "docs/databases/mysql.mdx:3" }, + "versionFloor": { "text": "4.1", "enforced": false, "evidence": "TableProApp/docs:databases/mysql.mdx:6,130" }, "bundledVersion": null, "limits": [ - { - "id": "tcp-only", - "value": null, - "evidence": "Plugins/MySQLDriverPlugin/MariaDBPluginConnection.swift:336-337" - }, { "id": "load-data-local-refused", "value": null, - "evidence": "Plugins/MySQLDriverPlugin/MariaDBPluginConnection.swift:339-340" + "evidence": "Plugins/MySQLDriverPlugin/MariaDBPluginConnection.swift:418-419" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "sqlserver", @@ -120,7 +115,7 @@ "distribution": "registry", "driverPlugin": "mssql", "sinceAppVersion": "0.14.0", - "minAppVersion": "0.76.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "SQL", "defaultPort": 1433, @@ -145,13 +140,13 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "2012", "enforced": false, "evidence": "docs/databases/mssql.mdx:8" }, + "versionFloor": { "text": "2012", "enforced": false, "evidence": "TableProApp/docs:databases/mssql.mdx:8" }, "bundledVersion": null, "limits": [ - { "id": "no-named-instances", "value": null, "evidence": "docs/databases/mssql.mdx:8" }, - { "id": "no-ntlm", "value": null, "evidence": "docs/databases/mssql.mdx:147" }, - { "id": "no-explain", "value": null, "evidence": "docs/features/explain-visualization.mdx:134-155" }, - { "id": "scripts-not-in-transaction", "value": null, "evidence": "CHANGELOG.md:485 [0.76.0]" }, + { "id": "no-named-instances", "value": null, "evidence": "TableProApp/docs:databases/mssql.mdx:8" }, + { "id": "no-ntlm", "value": null, "evidence": "TableProApp/docs:databases/mssql.mdx:150" }, + { "id": "no-explain", "value": null, "evidence": "TableProApp/docs:features/explain-visualization.mdx:136-155" }, + { "id": "scripts-not-in-transaction", "value": null, "evidence": "TableProApp/docs:databases/mssql.mdx:124" }, { "id": "ios-tls-not-verified", "value": null, @@ -159,7 +154,7 @@ } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "sqlite", @@ -191,7 +186,7 @@ "schemaEditing": "full", "explain": ["Query Plan"], "explainView": "diagram", - "dashboard": true, + "dashboard": false, "usersRoles": false, "awsIam": false, "awsSignIn": false, @@ -203,22 +198,22 @@ "versionFloor": null, "bundledVersion": "3.53.4", "limits": [ - { "id": "no-encryption", "value": null, "evidence": "docs/databases/sqlite.mdx:119" }, + { "id": "no-encryption", "value": null, "evidence": "TableProApp/docs:databases/sqlite.mdx:119" }, { "id": "no-primary-key-changes", "value": null, - "evidence": "TablePro/Core/Plugins/PluginMetadataRegistry+CuratedDefaults.swift:682 @v0.76.1" + "evidence": "TablePro/Core/Plugins/PluginMetadataRegistry+CuratedDefaults.swift:694" }, { "id": "ios-file-copied", "value": null, "evidence": "TableProMobile/TableProMobile/Platform/IOSDriverFactory.swift:80-127 @232e8dae6" }, - { "id": "extensions-local-file-only", "value": null, "evidence": "docs/databases/sqlite.mdx:120 @v0.77.0" }, - { "id": "attached-files-not-listed", "value": null, "evidence": "docs/databases/sqlite.mdx:52 @v0.77.0" } + { "id": "extensions-local-file-only", "value": null, "evidence": "TableProApp/docs:databases/sqlite.mdx:120" }, + { "id": "attached-files-not-listed", "value": null, "evidence": "TableProApp/docs:databases/sqlite.mdx:52" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "mongodb", @@ -234,7 +229,7 @@ "distribution": "registry", "driverPlugin": "mongodb", "sinceAppVersion": "0.10.0", - "minAppVersion": "0.76.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "MQL", "defaultPort": 27017, @@ -256,18 +251,18 @@ "awsSignIn": true, "cloudSqlProxy": false, "nativeDump": "mongodump", - "readOnlyMode": false, + "readOnlyMode": true, "alwaysReadOnly": false }, "versionFloor": { "text": "4.0", "enforced": true, "evidence": "Plugins/MongoDBDriverPlugin/MongoFieldDataProbe.swift:15" }, "bundledVersion": null, "limits": [ - { "id": "no-transactions", "value": null, "evidence": "docs/databases/mongodb.mdx:385" }, - { "id": "no-gridfs-or-change-streams", "value": null, "evidence": "docs/databases/mongodb.mdx:391" }, - { "id": "no-pipeline-builder", "value": null, "evidence": "docs/databases/mongodb.mdx:237" } + { "id": "no-transactions", "value": null, "evidence": "TableProApp/docs:databases/mongodb.mdx:385" }, + { "id": "no-gridfs-or-change-streams", "value": null, "evidence": "TableProApp/docs:databases/mongodb.mdx:391" }, + { "id": "no-pipeline-builder", "value": null, "evidence": "TableProApp/docs:databases/mongodb.mdx:237" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "redis", @@ -305,19 +300,19 @@ "awsSignIn": true, "cloudSqlProxy": false, "nativeDump": null, - "readOnlyMode": false, + "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/redis.mdx:31" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/redis.mdx:31" }, "bundledVersion": null, "limits": [ - { "id": "string-values-only", "value": null, "evidence": "docs/databases/redis.mdx:113-115" }, - { "id": "no-pubsub", "value": null, "evidence": "docs/databases/redis.mdx:168" }, + { "id": "string-values-only", "value": null, "evidence": "TableProApp/docs:databases/redis.mdx:113,115" }, + { "id": "no-pubsub", "value": null, "evidence": "TableProApp/docs:databases/redis.mdx:168" }, { "id": "key-tree-cap", "value": 50000, "evidence": "TablePro/ViewModels/RedisKeyTreeViewModel.swift:19" }, { "id": "filter-match-cap", "value": 10000, - "evidence": "Plugins/RedisDriverPlugin/RedisPluginDriver.swift:37" + "evidence": "Plugins/RedisDriverPlugin/RedisPluginDriver.swift:38" }, { "id": "cluster-db0-only", @@ -331,7 +326,7 @@ } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "mariadb", @@ -372,14 +367,14 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "10.x", "enforced": false, "evidence": "docs/databases/mariadb.mdx:6" }, + "versionFloor": { "text": "10.x", "enforced": false, "evidence": "TableProApp/docs:databases/mariadb.mdx:6" }, "bundledVersion": null, "limits": [ - { "id": "no-cloud-sql-proxy", "value": null, "evidence": "docs/databases/mariadb.mdx:36" }, - { "id": "roles-listed-as-users", "value": null, "evidence": "docs/databases/mariadb.mdx:37" } + { "id": "no-cloud-sql-proxy", "value": null, "evidence": "TableProApp/docs:databases/mariadb.mdx:37" }, + { "id": "roles-listed-as-users", "value": null, "evidence": "TableProApp/docs:databases/mariadb.mdx:38" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "tidb", @@ -420,15 +415,15 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/tidb.mdx:6" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/tidb.mdx:6" }, "bundledVersion": null, "limits": [ - { "id": "no-triggers-or-routines", "value": null, "evidence": "docs/databases/tidb.mdx:41" }, - { "id": "no-dashboard-or-dump", "value": null, "evidence": "docs/databases/tidb.mdx:42" }, - { "id": "structure-sync-same-engine", "value": null, "evidence": "docs/databases/tidb.mdx:44 @v0.77.0" } + { "id": "no-triggers-or-routines", "value": null, "evidence": "TableProApp/docs:databases/tidb.mdx:41" }, + { "id": "no-dashboard-or-dump", "value": null, "evidence": "TableProApp/docs:databases/tidb.mdx:42" }, + { "id": "structure-sync-same-engine", "value": null, "evidence": "TableProApp/docs:databases/tidb.mdx:44" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "oceanbase", @@ -469,15 +464,15 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/oceanbase.mdx:6" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/oceanbase.mdx:6" }, "bundledVersion": null, "limits": [ - { "id": "mysql-mode-only", "value": null, "evidence": "docs/databases/oceanbase.mdx:6,47" }, - { "id": "no-dashboard-or-dump", "value": null, "evidence": "docs/databases/oceanbase.mdx:48" }, - { "id": "structure-sync-same-engine", "value": null, "evidence": "docs/databases/oceanbase.mdx:49 @v0.77.0" } + { "id": "mysql-mode-only", "value": null, "evidence": "TableProApp/docs:databases/oceanbase.mdx:6,47" }, + { "id": "no-dashboard-or-dump", "value": null, "evidence": "TableProApp/docs:databases/oceanbase.mdx:48" }, + { "id": "structure-sync-same-engine", "value": null, "evidence": "TableProApp/docs:databases/oceanbase.mdx:49" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "databend", @@ -518,16 +513,16 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/databend.mdx:26" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/databend.mdx:26" }, "bundledVersion": null, "limits": [ - { "id": "no-keys-or-indexes", "value": null, "evidence": "docs/databases/databend.mdx:44-51" }, - { "id": "no-compare-sync", "value": null, "evidence": "docs/databases/databend.mdx:44-51" }, - { "id": "no-url-scheme", "value": null, "evidence": "docs/databases/databend.mdx:30" }, - { "id": "not-on-ios", "value": null, "evidence": "docs/databases/databend.mdx:51" } + { "id": "no-keys-or-indexes", "value": null, "evidence": "TableProApp/docs:databases/databend.mdx:38,45" }, + { "id": "no-compare-sync", "value": null, "evidence": "TableProApp/docs:databases/databend.mdx:49" }, + { "id": "no-url-scheme", "value": null, "evidence": "TableProApp/docs:databases/databend.mdx:30" }, + { "id": "not-on-ios", "value": null, "evidence": "TableProApp/docs:databases/databend.mdx:51" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "redshift", @@ -568,15 +563,15 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/redshift.mdx:16" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/redshift.mdx:16" }, "bundledVersion": null, "limits": [ { "id": "no-aws-iam", "value": null, - "evidence": "TablePro/Core/Plugins/PluginMetadataRegistry+CuratedDefaults.swift:498 @v0.76.1" + "evidence": "TablePro/Core/Plugins/PluginMetadataRegistry+CuratedDefaults.swift:509" }, - { "id": "structure-read-only", "value": null, "evidence": "docs/databases/redshift.mdx:53" }, + { "id": "structure-read-only", "value": null, "evidence": "TableProApp/docs:databases/redshift.mdx:53" }, { "id": "ios-synced-only", "value": null, @@ -584,7 +579,7 @@ } ], "ios": { "inPicker": false, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "cockroachdb", @@ -625,18 +620,18 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/cockroachdb.mdx:6" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/cockroachdb.mdx:6" }, "bundledVersion": null, "limits": [ - { "id": "structure-read-only", "value": null, "evidence": "docs/databases/cockroachdb.mdx:52" }, + { "id": "structure-read-only", "value": null, "evidence": "TableProApp/docs:databases/cockroachdb.mdx:52" }, { "id": "no-dump-or-maintenance", "value": null, - "evidence": "TablePro/Core/Database/NativeDumpRegistry.swift:36-53" + "evidence": "TableProApp/docs:databases/cockroachdb.mdx:53-54" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "pglite", @@ -680,12 +675,12 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "needs-socket-server", "value": null, "evidence": "docs/databases/pglite.mdx:6,19" }, - { "id": "single-client", "value": null, "evidence": "docs/databases/pglite.mdx:50-53" }, - { "id": "cancel-has-no-effect", "value": null, "evidence": "docs/databases/pglite.mdx:52 @v0.77.0" } + { "id": "needs-socket-server", "value": null, "evidence": "TableProApp/docs:databases/pglite.mdx:6,19" }, + { "id": "single-client", "value": null, "evidence": "TableProApp/docs:databases/pglite.mdx:50" }, + { "id": "cancel-has-no-effect", "value": null, "evidence": "TableProApp/docs:databases/pglite.mdx:52" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "oracle", @@ -701,7 +696,7 @@ "distribution": "registry", "driverPlugin": "oracle", "sinceAppVersion": "0.15.0", - "minAppVersion": "0.76.1", + "minAppVersion": "0.79.0", "state": "published", "queryLanguage": "SQL", "defaultPort": 1521, @@ -733,17 +728,17 @@ }, "bundledVersion": null, "limits": [ - { "id": "no-wallet-os-auth-kerberos-ldap", "value": null, "evidence": "docs/databases/oracle.mdx:68,162" }, - { "id": "no-explain", "value": null, "evidence": "docs/features/explain-visualization.mdx:134-155" }, - { "id": "no-users-roles", "value": null, "evidence": "docs/databases/oracle.mdx:165" }, + { "id": "no-wallet-os-auth-kerberos-ldap", "value": null, "evidence": "TableProApp/docs:databases/oracle.mdx:68,164" }, + { "id": "no-explain", "value": null, "evidence": "TableProApp/docs:features/explain-visualization.mdx:136-155" }, + { "id": "no-users-roles", "value": null, "evidence": "TableProApp/docs:databases/oracle.mdx:167" }, { "id": "no-packages", "value": null, - "evidence": "Plugins/OracleDriverPlugin/OracleObjectQueries.swift:25-26" + "evidence": "Plugins/OracleDriverPlugin/OracleObjectQueries.swift:47-49,64" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "clickhouse", @@ -784,24 +779,24 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/clickhouse.mdx:6" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/clickhouse.mdx:6" }, "bundledVersion": null, "limits": [ - { "id": "http-only", "value": null, "evidence": "docs/databases/clickhouse.mdx:6" }, - { "id": "tls-off-by-default", "value": null, "evidence": "docs/databases/clickhouse.mdx:73" }, + { "id": "http-only", "value": null, "evidence": "TableProApp/docs:databases/clickhouse.mdx:6" }, + { "id": "tls-off-by-default", "value": null, "evidence": "TableProApp/docs:databases/clickhouse.mdx:73" }, { "id": "no-foreign-keys-or-transactions", "value": null, - "evidence": "Plugins/ClickHouseDriverPlugin/ClickHousePlugin.swift:182" + "evidence": "Plugins/ClickHouseDriverPlugin/ClickHousePlugin.swift:35,203" }, { "id": "set-does-not-persist", "value": null, - "evidence": "Plugins/ClickHouseDriverPlugin/ClickHousePluginDriver+Http.swift:14-71" + "evidence": "TableProApp/docs:databases/clickhouse.mdx:88" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "duckdb", @@ -817,7 +812,7 @@ "distribution": "registry", "driverPlugin": "duckdb", "sinceAppVersion": "0.17.0", - "minAppVersion": "0.76.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "SQL", "defaultPort": null, @@ -833,7 +828,7 @@ "schemaEditing": "full", "explain": ["Explain"], "explainView": "diagram", - "dashboard": true, + "dashboard": false, "usersRoles": false, "awsIam": false, "awsSignIn": false, @@ -845,16 +840,16 @@ "versionFloor": null, "bundledVersion": "1.5.2", "limits": [ - { "id": "one-writer-per-file", "value": null, "evidence": "docs/databases/duckdb.mdx:90" }, + { "id": "one-writer-per-file", "value": null, "evidence": "TableProApp/docs:databases/duckdb.mdx:90" }, { "id": "extensions-download-on-first-use", "value": null, - "evidence": "scripts/duckdb-macos-extensions.cmake @v0.77.0" + "evidence": "scripts/duckdb-macos-extensions.cmake:12-23" }, - { "id": "remote-quack-experimental", "value": null, "evidence": "docs/databases/duckdb.mdx:47" } + { "id": "remote-quack-experimental", "value": null, "evidence": "TableProApp/docs:databases/duckdb.mdx:47" } ], "ios": { "inPicker": true, "openable": true, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "cassandra", @@ -870,7 +865,7 @@ "distribution": "registry", "driverPlugin": "cassandra", "sinceAppVersion": "0.18.0", - "minAppVersion": "0.76.1", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "CQL", "defaultPort": 9042, @@ -895,16 +890,16 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "3.0", "enforced": false, "evidence": "docs/databases/cassandra.mdx:8" }, + "versionFloor": { "text": "3.0", "enforced": false, "evidence": "TableProApp/docs:databases/cassandra.mdx:8" }, "bundledVersion": null, "limits": [ - { "id": "scalar-edits-only", "value": null, "evidence": "docs/databases/cassandra.mdx:81" }, - { "id": "no-consistency-level", "value": null, "evidence": "docs/databases/cassandra.mdx:27" }, - { "id": "no-astra-bundle", "value": null, "evidence": "docs/databases/cassandra.mdx:105" }, - { "id": "no-views-or-types-in-sidebar", "value": null, "evidence": "docs/databases/cassandra.mdx:103" } + { "id": "scalar-edits-only", "value": null, "evidence": "TableProApp/docs:databases/cassandra.mdx:81" }, + { "id": "no-consistency-level", "value": null, "evidence": "TableProApp/docs:databases/cassandra.mdx:27" }, + { "id": "no-astra-bundle", "value": null, "evidence": "TableProApp/docs:databases/cassandra.mdx:105" }, + { "id": "no-views-or-types-in-sidebar", "value": null, "evidence": "TableProApp/docs:databases/cassandra.mdx:103" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "scylladb", @@ -920,7 +915,7 @@ "distribution": "registry", "driverPlugin": "cassandra", "sinceAppVersion": "0.18.0", - "minAppVersion": "0.76.1", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "CQL", "defaultPort": 9042, @@ -949,7 +944,7 @@ "bundledVersion": null, "limits": [], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "dynamodb", @@ -993,11 +988,11 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "one-account-and-region", "value": null, "evidence": "docs/databases/dynamodb.mdx:23" }, - { "id": "no-dax-or-truncate", "value": null, "evidence": "docs/databases/dynamodb.mdx:185,188" } + { "id": "one-account-and-region", "value": null, "evidence": "TableProApp/docs:databases/dynamodb.mdx:23" }, + { "id": "no-dax-or-truncate", "value": null, "evidence": "TableProApp/docs:databases/dynamodb.mdx:185,188" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "bigquery", @@ -1041,11 +1036,11 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "structure-read-only", "value": null, "evidence": "docs/databases/bigquery.mdx:77" }, - { "id": "no-transactions", "value": null, "evidence": "docs/databases/bigquery.mdx:85" } + { "id": "structure-read-only", "value": null, "evidence": "TableProApp/docs:databases/bigquery.mdx:77" }, + { "id": "no-transactions", "value": null, "evidence": "TableProApp/docs:databases/bigquery.mdx:85" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "snowflake", @@ -1092,11 +1087,11 @@ { "id": "duo-passcode-only", "value": null, - "evidence": "Plugins/SnowflakeDriverPlugin/SnowflakeConnection.swift:204" + "evidence": "Plugins/SnowflakeDriverPlugin/SnowflakeConnection.swift:203-205" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "cloudflare-d1", @@ -1143,11 +1138,11 @@ { "id": "no-session-state-or-transactions", "value": null, - "evidence": "docs/databases/cloudflare-d1.mdx:70" + "evidence": "TableProApp/docs:databases/cloudflare-d1.mdx:70-71" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "turso", @@ -1191,11 +1186,11 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "no-database-switching-or-branches", "value": null, "evidence": "docs/databases/libsql.mdx:80" }, - { "id": "no-embedded-replicas", "value": null, "evidence": "docs/databases/libsql.mdx:75" } + { "id": "no-database-switching-or-branches", "value": null, "evidence": "TableProApp/docs:databases/libsql.mdx:80" }, + { "id": "no-embedded-replicas", "value": null, "evidence": "TableProApp/docs:databases/libsql.mdx:75" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "libsql", @@ -1242,11 +1237,11 @@ { "id": "dump-local-file-only", "value": null, - "evidence": "TablePro/Core/Database/NativeDumpRegistry.swift:60-67" + "evidence": "TablePro/Core/Database/NativeDumpRegistry.swift:60-71" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "elasticsearch", @@ -1262,7 +1257,7 @@ "distribution": "registry", "driverPlugin": "elasticsearch", "sinceAppVersion": "0.53.0", - "minAppVersion": "0.76.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "Query DSL", "defaultPort": 9200, @@ -1271,7 +1266,7 @@ "monogram": "ES", "docsSlug": "elasticsearch", "capabilities": { - "ssh": false, + "ssh": true, "ssl": true, "import": false, "export": true, @@ -1287,15 +1282,14 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "7.x", "enforced": false, "evidence": "docs/databases/elasticsearch.mdx:8" }, + "versionFloor": { "text": "7.x", "enforced": false, "evidence": "TableProApp/docs:databases/elasticsearch.mdx:8" }, "bundledVersion": null, "limits": [ - { "id": "no-opensearch", "value": null, "evidence": "docs/databases/elasticsearch.mdx:83" }, - { "id": "aliases-not-listed", "value": null, "evidence": "docs/databases/elasticsearch.mdx:77" }, - { "id": "no-ssh", "value": null, "evidence": "docs/databases/elasticsearch.mdx:82" } + { "id": "no-opensearch", "value": null, "evidence": "TableProApp/docs:databases/elasticsearch.mdx:95" }, + { "id": "aliases-not-listed", "value": null, "evidence": "TableProApp/docs:databases/elasticsearch.mdx:89" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "etcd", @@ -1333,18 +1327,18 @@ "awsSignIn": false, "cloudSqlProxy": false, "nativeDump": null, - "readOnlyMode": false, + "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "3.2", "enforced": false, "evidence": "docs/databases/etcd.mdx:8" }, + "versionFloor": { "text": "3.2", "enforced": false, "evidence": "TableProApp/docs:databases/etcd.mdx:8" }, "bundledVersion": null, "limits": [ - { "id": "no-txn", "value": null, "evidence": "docs/databases/etcd.mdx:74" }, - { "id": "json-gateway-only", "value": null, "evidence": "docs/databases/etcd.mdx:8" }, - { "id": "watch-collects-until-timeout", "value": null, "evidence": "docs/databases/etcd.mdx:81" } + { "id": "no-txn", "value": null, "evidence": "TableProApp/docs:databases/etcd.mdx:74" }, + { "id": "json-gateway-only", "value": null, "evidence": "TableProApp/docs:databases/etcd.mdx:8" }, + { "id": "watch-collects-until-timeout", "value": null, "evidence": "TableProApp/docs:databases/etcd.mdx:81" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "kafka", @@ -1385,15 +1379,15 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "0.11", "enforced": false, "evidence": "docs/databases/kafka.mdx:17" }, + "versionFloor": { "text": "0.11", "enforced": false, "evidence": "TableProApp/docs:databases/kafka.mdx:17" }, "bundledVersion": null, "limits": [ - { "id": "no-schema-registry", "value": null, "evidence": "docs/databases/kafka.mdx:152" }, - { "id": "no-topic-create-or-offset-reset", "value": null, "evidence": "docs/databases/kafka.mdx:155" }, - { "id": "approximate-counts", "value": null, "evidence": "docs/databases/kafka.mdx:149" } + { "id": "no-schema-registry", "value": null, "evidence": "TableProApp/docs:databases/kafka.mdx:151" }, + { "id": "no-topic-create-or-offset-reset", "value": null, "evidence": "TableProApp/docs:databases/kafka.mdx:154" }, + { "id": "approximate-counts", "value": null, "evidence": "TableProApp/docs:databases/kafka.mdx:148" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "surrealdb", @@ -1434,14 +1428,14 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "2.0", "enforced": true, "evidence": "Plugins/SurrealDBDriverPlugin/SurrealDBError.swift:31 @v0.77.0" }, + "versionFloor": { "text": "2.0", "enforced": true, "evidence": "Plugins/SurrealDBDriverPlugin/SurrealDBError.swift:31" }, "bundledVersion": null, "limits": [ - { "id": "no-syntax-highlighting", "value": null, "evidence": "docs/databases/surrealdb.mdx:109" }, - { "id": "no-live-queries", "value": null, "evidence": "docs/databases/surrealdb.mdx:105" } + { "id": "no-syntax-highlighting", "value": null, "evidence": "TableProApp/docs:databases/surrealdb.mdx:109" }, + { "id": "no-live-queries", "value": null, "evidence": "TableProApp/docs:databases/surrealdb.mdx:105" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "teradata", @@ -1457,7 +1451,7 @@ "distribution": "registry", "driverPlugin": "teradata", "sinceAppVersion": "0.58.0", - "minAppVersion": "0.76.1", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "SQL", "defaultPort": 1025, @@ -1482,14 +1476,14 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": null, "enforced": false, "evidence": "docs/databases/teradata.mdx:17" }, + "versionFloor": { "text": null, "enforced": false, "evidence": "TableProApp/docs:databases/teradata.mdx:17" }, "bundledVersion": null, "limits": [ - { "id": "ldap-kerberos-jwt-refused", "value": null, "evidence": "docs/databases/teradata.mdx:67" }, - { "id": "foreign-keys-not-listed", "value": null, "evidence": "docs/databases/teradata.mdx:65" } + { "id": "ldap-kerberos-jwt-refused", "value": null, "evidence": "TableProApp/docs:databases/teradata.mdx:67" }, + { "id": "foreign-keys-not-listed", "value": null, "evidence": "TableProApp/docs:databases/teradata.mdx:65" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "trino", @@ -1505,7 +1499,7 @@ "distribution": "registry", "driverPlugin": "trino", "sinceAppVersion": "0.59.0", - "minAppVersion": "0.76.1", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "SQL", "defaultPort": 8080, @@ -1533,11 +1527,11 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "no-presto", "value": null, "evidence": "docs/databases/trino.mdx:116" }, - { "id": "no-kerberos-or-oauth", "value": null, "evidence": "docs/databases/trino.mdx:112" } + { "id": "no-presto", "value": null, "evidence": "TableProApp/docs:databases/trino.mdx:116" }, + { "id": "no-kerberos-or-oauth", "value": null, "evidence": "TableProApp/docs:databases/trino.mdx:112" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "beancount", @@ -1584,12 +1578,12 @@ { "id": "projected-tables", "value": 23, - "evidence": "Plugins/BeancountDriverPlugin/BeancountPluginDriver+Projection.swift:127-306 @v0.76.1" + "evidence": "Plugins/BeancountDriverPlugin/BeancountPluginDriver+Projection.swift:127-306" }, - { "id": "needs-ledger-tool", "value": null, "evidence": "docs/databases/beancount.mdx:8" } + { "id": "needs-ledger-tool", "value": null, "evidence": "TableProApp/docs:databases/beancount.mdx:8" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "spanner", @@ -1605,7 +1599,7 @@ "distribution": "registry", "driverPlugin": "spanner", "sinceAppVersion": "0.74.0", - "minAppVersion": "0.76.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "SQL", "defaultPort": null, @@ -1633,10 +1627,10 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "structure-read-only", "value": null, "evidence": "docs/databases/spanner.mdx:101" } + { "id": "structure-read-only", "value": null, "evidence": "TableProApp/docs:databases/spanner.mdx:101" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "typesense", @@ -1652,7 +1646,7 @@ "distribution": "registry", "driverPlugin": "typesense", "sinceAppVersion": "0.73.0", - "minAppVersion": "0.75.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "Typesense API", "defaultPort": 8108, @@ -1661,7 +1655,7 @@ "monogram": "TS", "docsSlug": "typesense", "capabilities": { - "ssh": false, + "ssh": true, "ssl": true, "import": false, "export": true, @@ -1677,13 +1671,13 @@ "readOnlyMode": true, "alwaysReadOnly": false }, - "versionFloor": { "text": "26.0", "enforced": false, "evidence": "docs/databases/typesense.mdx:8" }, + "versionFloor": { "text": "26.0", "enforced": false, "evidence": "TableProApp/docs:databases/typesense.mdx:8" }, "bundledVersion": null, "limits": [ - { "id": "api-keys-as-users", "value": null, "evidence": "docs/databases/typesense.mdx:33,93" } + { "id": "api-keys-as-users", "value": null, "evidence": "TableProApp/docs:databases/typesense.mdx:35,95" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "weaviate", @@ -1708,7 +1702,7 @@ "monogram": "WV", "docsSlug": "weaviate", "capabilities": { - "ssh": false, + "ssh": true, "ssl": true, "import": false, "export": true, @@ -1727,10 +1721,10 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "graphql-reads-rest-writes", "value": null, "evidence": "docs/databases/weaviate.mdx:8" } + { "id": "graphql-reads-rest-writes", "value": null, "evidence": "TableProApp/docs:databases/weaviate.mdx:8" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "cloudflare-r2-sql", @@ -1774,12 +1768,12 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "rows-per-query", "value": 10000, "evidence": "docs/databases/cloudflare-r2-sql.mdx:62" }, - { "id": "no-offset", "value": null, "evidence": "docs/databases/cloudflare-r2-sql.mdx:62" }, - { "id": "billed-per-scan", "value": null, "evidence": "docs/databases/cloudflare-r2-sql.mdx:62" } + { "id": "rows-per-query", "value": 10000, "evidence": "TableProApp/docs:databases/cloudflare-r2-sql.mdx:86" }, + { "id": "no-offset", "value": null, "evidence": "TableProApp/docs:databases/cloudflare-r2-sql.mdx:87" }, + { "id": "billed-per-scan", "value": null, "evidence": "TableProApp/docs:databases/cloudflare-r2-sql.mdx:8,81" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "dameng", @@ -1795,7 +1789,7 @@ "distribution": "registry", "driverPlugin": "dameng", "sinceAppVersion": "0.66.0", - "minAppVersion": "0.76.0", + "minAppVersion": "0.77.0", "state": "published", "queryLanguage": "SQL", "defaultPort": 5236, @@ -1823,10 +1817,10 @@ "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "no-tls", "value": null, "evidence": "docs/databases/dameng.mdx:47" } + { "id": "no-tls", "value": null, "evidence": "TableProApp/docs:databases/dameng.mdx:47" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } }, { "id": "sap-hana", @@ -1842,7 +1836,7 @@ "distribution": "registry", "driverPlugin": "hana", "sinceAppVersion": "0.77.0", - "minAppVersion": "0.77.0", + "minAppVersion": "0.79.0", "state": "published", "queryLanguage": "SQL", "defaultPort": 443, @@ -1864,16 +1858,16 @@ "awsSignIn": false, "cloudSqlProxy": false, "nativeDump": null, - "readOnlyMode": false, + "readOnlyMode": true, "alwaysReadOnly": false }, "versionFloor": null, "bundledVersion": null, "limits": [ - { "id": "no-tunnels", "value": null, "evidence": "docs/databases/sap-hana.mdx:113" }, - { "id": "unsupported-auth-methods", "value": null, "evidence": "docs/databases/sap-hana.mdx:56" } + { "id": "no-tunnels", "value": null, "evidence": "TableProApp/docs:databases/sap-hana.mdx:113" }, + { "id": "unsupported-auth-methods", "value": null, "evidence": "TableProApp/docs:databases/sap-hana.mdx:56" } ], "ios": { "inPicker": false, "openable": false, "appearsAfterSync": true }, - "verified": { "macTag": "v0.78.0", "iosCommit": "232e8dae6", "date": "2026-10-08" } + "verified": { "macTag": "v0.82.0", "iosCommit": "232e8dae6", "docsCommit": "d735bb755", "date": "2026-10-19" } } ] diff --git a/resources/data/platforms.json b/resources/data/platforms.json index ad5b29c0..1c614fe2 100644 --- a/resources/data/platforms.json +++ b/resources/data/platforms.json @@ -1,5 +1,5 @@ { - "verifiedAt": "2026-10-08", + "verifiedAt": "2026-10-19", "platforms": [ { "id": "mac", @@ -31,11 +31,11 @@ } ], "release": { - "version": "0.78.0", - "build": "137", - "publishedAt": "2026-10-07" + "version": "0.82.0", + "build": "820099", + "publishedAt": "2026-10-19" }, - "floorVersion": "0.78.0", + "floorVersion": "0.82.0", "appLanguages": ["en", "vi", "zh-Hans", "zh-Hant", "ko", "tr", "fr"] }, { diff --git a/resources/js/lib/data/engines.ts b/resources/js/lib/data/engines.ts index 8990fe2b..3696f271 100644 --- a/resources/js/lib/data/engines.ts +++ b/resources/js/lib/data/engines.ts @@ -128,5 +128,5 @@ export interface Engine { bundledVersion: string | null; limits: EngineLimit[]; ios: EngineIos; - verified: { macTag: string; iosCommit: string; date: string }; + verified: { macTag: string; iosCommit: string; docsCommit: string; date: string }; } diff --git a/tests/Feature/Data/EnginesDataTest.php b/tests/Feature/Data/EnginesDataTest.php index 2b3dd78c..19e87fd5 100644 --- a/tests/Feature/Data/EnginesDataTest.php +++ b/tests/Feature/Data/EnginesDataTest.php @@ -126,7 +126,7 @@ function enginesWhere(Closure $test): array } expect(enginesById()['sap-hana']['sinceAppVersion'])->toBe('0.77.0'); - expect(enginesById()['sap-hana']['minAppVersion'])->toBe('0.77.0'); + expect(enginesById()['sap-hana']['minAppVersion'])->toBe('0.79.0'); }); it('places every engine on its own page, a family section or the hub', function (): void { @@ -228,7 +228,7 @@ function enginesWhere(Closure $test): array it('pins the capability lists the feature pages derive', function (): void { expect(enginesWhere(fn(array $engine): bool => $engine['capabilities']['dashboard']))->toEqualCanonicalizing([ - 'postgresql', 'redshift', 'cockroachdb', 'mysql', 'mariadb', 'sqlserver', 'clickhouse', 'duckdb', 'sqlite', 'typesense', + 'postgresql', 'redshift', 'cockroachdb', 'mysql', 'mariadb', 'sqlserver', 'clickhouse', 'typesense', ]); // TiDB: MySQLPluginDriver.swift:116-129 gives every flavor but Databend `.userManagement`, and docs/databases/tidb.mdx:34 says it works (v0.78.0). expect(enginesWhere(fn(array $engine): bool => $engine['capabilities']['usersRoles']))->toEqualCanonicalizing([ @@ -250,9 +250,7 @@ function enginesWhere(Closure $test): array expect(enginesWhere(fn(array $engine): bool => $engine['capabilities']['cloudSqlProxy']))->toEqualCanonicalizing([ 'mysql', 'postgresql', 'sqlserver', ]); - expect(enginesWhere(fn(array $engine): bool => ! $engine['capabilities']['readOnlyMode']))->toEqualCanonicalizing([ - 'redis', 'mongodb', 'etcd', 'sap-hana', - ]); + expect(enginesWhere(fn(array $engine): bool => ! $engine['capabilities']['readOnlyMode']))->toBe([]); expect(enginesWhere(fn(array $engine): bool => $engine['capabilities']['alwaysReadOnly']))->toEqualCanonicalizing([ 'beancount', 'cloudflare-r2-sql', ]); @@ -373,7 +371,7 @@ function enginesWhere(Closure $test): array expect(array_column($engines['mongodb']['limits'], 'id'))->toContain('no-pipeline-builder'); }); -// A null text is the docs saying there is no minimum (docs/databases/*.mdx at v0.78.0); Trino's docs say nothing. +// A null text is the docs saying there is no minimum (databases/*.mdx in TableProApp/docs); Trino's docs say nothing. it('says there is no minimum version only where the docs say so', function (): void { expect(enginesWhere(fn(array $engine): bool => $engine['versionFloor'] !== null && $engine['versionFloor']['text'] === null))->toEqualCanonicalizing([ 'redis', 'clickhouse', 'redshift', 'teradata', 'cockroachdb', 'databend', 'tidb', 'oceanbase', @@ -381,13 +379,32 @@ function enginesWhere(Closure $test): array foreach (enginesJson() as $engine) { if ($engine['versionFloor'] !== null && $engine['versionFloor']['text'] === null) { - expect($engine['versionFloor']['evidence'])->toMatch('#^docs/databases/[a-z0-9-]+\.mdx:\d+$#', "{$engine['id']}: no minimum needs the docs line that says so"); + expect($engine['versionFloor']['evidence'])->toMatch('#^TableProApp/docs:databases/[a-z0-9-]+\.mdx:\d+$#', "{$engine['id']}: no minimum needs the docs line that says so"); } } expect(enginesById()['trino']['versionFloor'])->toBeNull(); }); +// The docs left the app repository before v0.81.0, so a docs page is cited in TableProApp/docs at verified.docsCommit. +it('cites every piece of evidence as an app path or a TableProApp/docs page, with its lines', function (): void { + foreach (enginesJson() as $engine) { + expect(array_keys($engine['verified']))->toBe(['macTag', 'iosCommit', 'docsCommit', 'date']); + expect($engine['verified']['docsCommit'])->toMatch('/^[0-9a-f]{7,40}$/'); + + $references = array_column($engine['limits'], 'evidence'); + + if ($engine['versionFloor'] !== null) { + $references[] = $engine['versionFloor']['evidence']; + } + + foreach ($references as $reference) { + expect($reference)->toMatch('#^(TableProApp/docs:)?[\w./+-]+:\d+(-\d+)?(,\d+(-\d+)?)*( @[0-9a-f]{7,40})?$#', "{$engine['id']}: {$reference}"); + expect($reference)->not->toStartWith('docs/', "{$engine['id']}: {$reference} is an app path that no longer exists"); + } + } +}); + it('gives every engine with its own page a mark for the page header', function (): void { expect(enginesWhere(fn(array $engine): bool => $engine['page'] === 'own' && $engine['icon'] === null))->toBe([]); }); diff --git a/tests/Support/app-ui-labels.php b/tests/Support/app-ui-labels.php index d1ae90ff..ccc66f0a 100644 --- a/tests/Support/app-ui-labels.php +++ b/tests/Support/app-ui-labels.php @@ -23,6 +23,7 @@ 'CA Certificate' => ['fr' => 'Certificat d’autorité (CA)', 'ko' => 'CA 인증서', 'zh-Hans' => 'CA 证书', 'zh-Hant' => 'CA 憑證'], 'Catalog' => [], 'CLI Connection Name' => ['fr' => 'Nom de connexion CLI', 'ko' => 'CLI 연결 이름', 'zh-Hans' => 'CLI连接名称', 'zh-Hant' => 'CLI 連線名稱'], + 'Connect Using' => [], 'Connection Mode' => ['fr' => 'Mode de connexion', 'ko' => '연결 모드', 'zh-Hans' => '连接模式', 'zh-Hant' => '連線模式'], 'Connection Type' => ['fr' => 'Type de connexion', 'ko' => '연결 유형', 'zh-Hans' => '连接类型', 'zh-Hant' => '連線類型'], 'Continue' => ['fr' => 'Continuer', 'ko' => '계속', 'zh-Hans' => '继续', 'zh-Hant' => '繼續'], @@ -105,6 +106,7 @@ 'Share > Publish to Team Library…' => ['fr' => 'Partager > Publier dans la bibliothèque d’équipe…', 'ko' => '공유 > 팀 라이브러리에 게시…', 'zh-Hans' => '分享 > 发布到团队库…', 'zh-Hant' => '分享 > 發佈到團隊庫…'], 'Share anonymous usage data' => ['fr' => 'Partager des données d’utilisation anonymes', 'ko' => '익명 사용 데이터 공유', 'zh-Hans' => '共享匿名使用数据', 'zh-Hant' => '分享匿名使用資料'], 'Share Usage Data' => ['ko' => '사용 데이터 공유', 'zh-Hans' => '共享使用数据', 'zh-Hant' => '分享使用資料'], + 'Socket' => [], 'Sync Passwords' => ['ko' => '암호 동기화', 'zh-Hans' => '同步密码', 'zh-Hant' => '同步密碼'], 'TablePro > Check for Updates…' => ['fr' => 'TablePro > Rechercher les mises à jour…', 'ko' => 'TablePro > 업데이트 확인…', 'zh-Hans' => 'TablePro > 检查更新…', 'zh-Hant' => 'TablePro > 檢查更新…'], 'Terminate Session' => ['fr' => 'Mettre fin à la session', 'ko' => '세션 종료', 'zh-Hans' => '终止会话', 'zh-Hant' => '終止工作階段'],