feat: add column sort, SQL formatter, table stats, insert dialog, saved queries & sessions monitor

- Column sort by header click in table view (ASC/DESC/none cycle, server-side)
- SQL formatter with Format button and Shift+Alt+F keybinding (sql-formatter)
- Table size and row count display in schema tree via pg_class
- Insert row dialog with column type hints and auto-skip for identity columns
- Saved queries (bookmarks) with CRUD backend, sidebar panel, and save dialog
- Active sessions monitor (pg_stat_activity) with auto-refresh, cancel & terminate

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-12 11:52:05 +03:00
parent ab72eeee80
commit 9d54167023
29 changed files with 1223 additions and 18 deletions

View File

@@ -4,10 +4,13 @@ import type {
QueryResult,
PaginatedQueryResult,
SchemaObject,
ColumnDetail,
ColumnInfo,
ConstraintInfo,
IndexInfo,
HistoryEntry,
SavedQuery,
SessionInfo,
DatabaseInfo,
CreateDatabaseParams,
RoleInfo,
@@ -79,6 +82,12 @@ export const getTableColumns = (
table: string
) => invoke<ColumnInfo[]>("get_table_columns", { connectionId, schema, table });
export const getColumnDetails = (
connectionId: string,
schema: string,
table: string
) => invoke<ColumnDetail[]>("get_column_details", { connectionId, schema, table });
export const getTableConstraints = (
connectionId: string,
schema: string,
@@ -151,6 +160,16 @@ export const getHistory = (params?: {
export const clearHistory = () => invoke<void>("clear_history");
// Saved Queries
export const listSavedQueries = (params?: { search?: string }) =>
invoke<SavedQuery[]>("list_saved_queries", { search: params?.search });
export const saveQuery = (query: SavedQuery) =>
invoke<void>("save_query", { query });
export const deleteSavedQuery = (id: string) =>
invoke<void>("delete_saved_query", { id });
// Completion schema
export const getCompletionSchema = (connectionId: string) =>
invoke<Record<string, Record<string, string[]>>>(
@@ -201,3 +220,13 @@ export const grantRevoke = (connectionId: string, params: GrantRevokeParams) =>
export const manageRoleMembership = (connectionId: string, params: RoleMembershipParams) =>
invoke<void>("manage_role_membership", { connectionId, params });
// Sessions
export const listSessions = (connectionId: string) =>
invoke<SessionInfo[]>("list_sessions", { connectionId });
export const cancelQuery = (connectionId: string, pid: number) =>
invoke<boolean>("cancel_query", { connectionId, pid });
export const terminateBackend = (connectionId: string, pid: number) =>
invoke<boolean>("terminate_backend", { connectionId, pid });