Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion development/plugin-development.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ A plugin is a macOS loadable bundle target with `WRAPPER_EXTENSION = tableplugin

| Key | Type | Required | Purpose |
|-----|------|----------|---------|
| `TableProPluginKitVersion` | integer | Yes | The PluginKit ABI the plugin was built against. Current value: 38 |
| `TableProPluginKitVersion` | integer | Yes | The PluginKit ABI the plugin was built against. Current value: 39 |
| `TableProProvidesDatabaseTypeIds` | array of strings | Recommended | Database type IDs the plugin serves, which is what makes lazy loading possible |
| `CFBundleShortVersionString` | string | Yes | Plugin version, read by registry update checks |
| `TableProMinAppVersion` | string | No | The loader rejects the plugin on an older app |
Expand Down
4 changes: 2 additions & 2 deletions development/plugin-registry.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,13 @@ The app filters `binaries` to the running architecture, keeps those whose `plugi
"binaries": [
{
"architecture": "arm64",
"pluginKitVersion": 38,
"pluginKitVersion": 39,
"downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-oracle-v1.0.26/OracleDriver-arm64.zip",
"sha256": "<sha256>"
},
{
"architecture": "x86_64",
"pluginKitVersion": 38,
"pluginKitVersion": 39,
"downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-oracle-v1.0.26/OracleDriver-x86_64.zip",
"sha256": "<sha256>"
}
Expand Down
20 changes: 14 additions & 6 deletions features/change-tracking.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,25 @@ Double-click a cell, or press `Enter` on it. `Enter` commits the edit to the que
<img className="hidden dark:block" src="/images/date-picker-editor-dark.png" alt="Cell editor" />
</Frame>

Right-click an editable cell and open **Set Value** for the common ones without typing: **Empty** on text, `SET` and binary columns, **NULL** on a nullable column, **Default** on a column the server fills in, and date functions such as `NOW()` or `CURRENT_DATE` on date columns.
Right-click an editable cell and open **Set Value** to set it without typing. Each item appears only where the column takes it:

- **Empty** on text, `SET` and binary columns.
- **NULL** on a nullable column.
- **Default** on a column the server fills in. SQLite, libSQL, Turso, Cloudflare D1, ClickHouse, Databend, Snowflake, Trino, Cassandra and ScyllaDB take it on a new row only.
- The database's own date and time functions on a date or time column, such as `NOW()` on MySQL or `CURRENT_TIMESTAMP` on SQLite.
- **Generate UUID** (version 4) and **Generate UUIDv7** (ordered by creation time) on a `uuid` or `uniqueidentifier` column, and on a text or binary column whose display format is UUID. A foreign key column and a Cassandra `timeuuid` column get neither.

Select several cells first to set all of them at once; Generate UUID gives each cell its own value. With whole rows selected, the clicked column changes on every selected row. **Edit > Set Value** holds the same items for the focused cell or the selection, and [Settings > Keyboard](/features/keyboard-shortcuts#customizing-shortcuts) assigns them shortcuts.

On MongoDB, Firestore and the Firebase Realtime Database a document can lack a field altogether, and on Bigtable a row can lack a cell; the grid shows either as **No Field**. **Remove Field** on the same right-click menu deletes the field rather than storing NULL. Bigtable stores no NULL, so **NULL** and **Remove Field** both delete the cell. See [missing fields and null](/databases/mongodb#missing-fields-and-null).

## Adding and deleting rows

- **Add Row** (`Cmd+Shift+N`), the **+** button, or **Edit > Add Row**. The row appears at the bottom with the cursor in its first writable cell. Later edits fold into the INSERT rather than queueing as updates.
- **Duplicate Row** (`Cmd+Shift+D`) on the right-click menu copies a row and resets its primary key and its identity columns to `DEFAULT`, so the database assigns new ones.
- **Add Row** (`Cmd+Shift+N`), the **+** button, or **Edit > Add Row**. The row appears at the bottom with the cursor in its first writable cell. A UUID primary key the server does not fill gets a new UUID, and the cursor skips it. Later edits fold into the INSERT rather than queueing as updates.
- **Duplicate Row** (`Cmd+Shift+D`) on the right-click menu copies a row and resets its primary key and its identity columns to `DEFAULT`, so the database assigns new ones. A UUID primary key the server does not fill gets a new UUID instead.
- **Delete**: select rows by their row numbers (`Shift`-click for a range, `Cmd`-click for separate rows) and press `Delete`. They stay visible with a strikethrough, and saving asks "Delete 5 rows?" before they go.
- **Paste** on the right-click menu inserts copied rows as new rows.
- **Fill Column** on the header right-click menu writes one value into every loaded row. It is absent on primary key columns and on columns the server owns.
- **Paste** on the right-click menu inserts copied rows as new rows, with a new UUID in a UUID primary key the server does not fill.
- **Fill Column** on the header right-click menu writes one value, NULL, or a new UUID or UUIDv7 per row into every loaded row. It is absent on primary key columns and on columns the server owns.

A new row starts at `DEFAULT` in every column the server fills in. That covers a column with a default expression, and an identity or `AUTO_INCREMENT` column, which carries no default of its own. The INSERT leaves those columns out, so the server assigns them.

Expand Down Expand Up @@ -74,7 +82,7 @@ Individual columns stay read-only where the server owns them: generated, compute

## Saving

Press `Cmd+S`, or click the toolbar checkmark. Values go out as bound parameters; `DEFAULT` and SQL functions such as `NOW()` are written into the statement as they stand.
Press `Cmd+S`, or click the toolbar checkmark. Values go out as bound parameters; `DEFAULT` and the functions picked from **Set Value** or the inspector are written into the statement as they stand. Typing one of those functions into a date or time cell does the same. Text typed into any other column is saved as typed, even when it reads like `now()`, and a pending function cell is drawn like a pending `DEFAULT`.

| Change | Generated SQL |
|--------|--------------|
Expand Down
2 changes: 1 addition & 1 deletion features/data-grid.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ Step back with **View > Back** (`Ctrl+Cmd+[`) and **View > Forward** (`Ctrl+Cmd+

Press `Cmd+Option+I`, or click the button at the trailing end of the toolbar, to open the inspector beside the grid. The table and which row of how many is selected sit under the [pane's header](/features/connection-window#the-trailing-pane), and **Fields** and **JSON** are the two renderings of that row, picked from the header's ellipsis menu. [Cell and Row Viewers](/features/json-viewer) covers both. Turn on **Auto-show inspector on row select** in [Settings > Data](/customization/data-settings) to open it whenever a row is picked, in a query result as well as a table.

Short values sit on one line, label leading and value trailing. Long text, JSON, PHP, binary and images take the full width. Long text and JSON carry a resize handle; PHP, binary and images draw at a fixed height. `Tab` and `Shift+Tab` move between fields; the menu at the trailing edge of each field carries **Set NULL**, **Set DEFAULT**, **SQL Functions**, and **Set EMPTY** on a text, `SET` or binary field, with `Ctrl+Option+N` and `Ctrl+Option+D` as shortcuts for the first two. Search filters the list by column name or stored value, and the pencil button narrows it to fields already edited.
Short values sit on one line, label leading and value trailing. Long text, JSON, PHP, binary and images take the full width. Long text and JSON carry a resize handle; PHP, binary and images draw at a fixed height. `Tab` and `Shift+Tab` move between fields; the menu at the trailing edge of each field carries the same values as [Set Value](/features/change-tracking#editing-a-cell): **Set NULL**, **Set DEFAULT**, **Set EMPTY**, **Generate UUID** and **Generate UUIDv7** where the column takes them, and **SQL Functions** with the date and time functions that fit it. `Ctrl+Option+N` and `Ctrl+Option+D` set NULL and DEFAULT. With several rows selected, Generate UUID gives each row its own value. Search filters the list by column name or stored value, and the pencil button narrows it to fields already edited.

With no row selected and a table open, the inspector shows that table's size, row count, engine, collation and timestamps, as far as the database reports them. They are read only while the inspector is open.

Expand Down
2 changes: 1 addition & 1 deletion features/json-viewer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ The text box, the JSON editor and the map each carry a drag handle under them, w

**Open in Window** detaches a JSON, PHP or text value into its own resizable window; on an editable row, edits there join the same pending changes as the field. An image and a map detach read-only. The expand button on a JSON, PHP, long text or geometry field grows it to fill the inspector's height with the other fields still listed around it; click it again to shrink it back. Binary and image fields draw at a fixed height and carry no expand button, and neither does a geometry field stored as bytes, whose map still takes the drag handle.

Every field carries a menu at its trailing edge, and right-clicking the field opens the same one. **Set NULL**, **Set DEFAULT**, **Set EMPTY** and **SQL Functions** need an editable field, and **Set EMPTY** a text, `SET` or binary one; `Ctrl+Option+N` and `Ctrl+Option+D` reach the first two from the keyboard. **Copy Value** is always there, and a read-only field keeps its text selectable.
Every field carries a menu at its trailing edge, and right-clicking the field opens the same one. **Set NULL**, **Set DEFAULT**, **Set EMPTY**, **Generate UUID**, **Generate UUIDv7** and **SQL Functions** need an editable field and appear only where the column takes them, as in [Set Value](/features/change-tracking#editing-a-cell); `Ctrl+Option+N` and `Ctrl+Option+D` set NULL and DEFAULT from the keyboard. **Copy Value** is always there, and a read-only field keeps its text selectable.

With no row selected, the inspector describes the table the tab is bound to: data, index and total size, row count, average row size, engine, collation, and creation and update dates, as far as the database reports them. A tab with no table of its own, such as a query, leaves it empty. On a Structure tab it follows the structure grid and names the selected column.

Expand Down
4 changes: 3 additions & 1 deletion features/keyboard-shortcuts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ Every row except the five find rows is built into the editor and cannot be rebou
| Add row | `Cmd+Shift+N` |
| Duplicate row | `Cmd+Shift+D` |
| Restore Previous Values | none by default, rebindable |
| Set Value to Empty, NULL or Default | none by default, rebindable |
| Generate UUID, Generate UUIDv7 | none by default, rebindable |
| Delete selected rows | `Delete` or `Cmd+Delete` |
| Truncate table (tables selected in the sidebar) | `Option+Delete` |
| Preview FK reference | `Space` |
Expand Down Expand Up @@ -278,7 +280,7 @@ With the drawer open (`Cmd+Y`) and its entry list focused, `Return` loads the se
| Set the focused field to NULL | `Ctrl+Option+N` |
| Set the focused field to its DEFAULT | `Ctrl+Option+D` |

`Ctrl+Option+N` and `Ctrl+Option+D` skip a field the server owns and a column definition on a Structure tab, neither of which takes either state.
`Ctrl+Option+N` and `Ctrl+Option+D` work only where the field's menu offers **Set NULL** or **Set DEFAULT**, and no other command can be bound to them.

## Welcome window

Expand Down
Loading