feat: add SSH config aliases and PostgreSQL extensions
This commit is contained in:
1 parent
8b035d0989
commit
f800d80f90
35 files changed
+1191
-33
No files matched your search
@@ -132,6 +132,8 @@ export const listFunctions = forward("listFunctions");
|
||||
export const listSequences = forward("listSequences");
|
||||
export const listRules = forward("listRules");
|
||||
export const listOwners = forward("listOwners");
|
||||
export const listExtensions = forward("listExtensions");
|
||||
export const listAvailableExtensions = forward("listAvailableExtensions");
|
||||
export const prepareSchemaDiff = forward("prepareSchemaDiff");
|
||||
export const generateSchemaSyncSql = forward("generateSchemaSyncSql");
|
||||
|
||||
@@ -240,6 +242,7 @@ export const deleteAiConversation = forward("deleteAiConversation");
|
||||
|
||||
// System
|
||||
export const listSystemFonts = forward("listSystemFonts");
|
||||
export const listSshConfigHosts = forward("listSshConfigHosts");
|
||||
|
||||
// SQL File Execution
|
||||
export const previewSqlFile = forward("previewSqlFile");
|
||||
|
||||
@@ -14,6 +14,7 @@ import type {
|
||||
IndexInfo,
|
||||
ForeignKeyInfo,
|
||||
TriggerInfo,
|
||||
ExtensionInfo,
|
||||
FunctionInfo,
|
||||
SequenceInfo,
|
||||
RuleInfo,
|
||||
@@ -29,6 +30,7 @@ import type {
|
||||
SavedSqlFile,
|
||||
SavedSqlFolder,
|
||||
SavedSqlLibrary,
|
||||
SshConfigHostEntry,
|
||||
} from "@/types/database";
|
||||
import type { CollectionInfo } from "@/types/database";
|
||||
import type { SchemaDiffPreparation, SchemaDiffPreparationOptions, TableDiff, FunctionDiff, SequenceDiff, RuleDiff, OwnerDiff } from "@/lib/schema/schemaDiff";
|
||||
@@ -242,6 +244,10 @@ export async function listSystemFonts(): Promise<string[]> {
|
||||
return get("/api/system/fonts");
|
||||
}
|
||||
|
||||
export async function listSshConfigHosts(): Promise<SshConfigHostEntry[]> {
|
||||
return get("/api/ssh/config-hosts");
|
||||
}
|
||||
|
||||
export async function listPlugins(): Promise<InstalledPlugin[]> {
|
||||
return get("/api/plugins");
|
||||
}
|
||||
@@ -605,6 +611,14 @@ export async function listOwners(connectionId: string, database: string, schema:
|
||||
return get(`/api/schema/owners?${qs({ connection_id: connectionId, database, schema })}`);
|
||||
}
|
||||
|
||||
export async function listExtensions(connectionId: string, database: string, schema: string): Promise<ExtensionInfo[]> {
|
||||
return get(`/api/schema/extensions?${qs({ connection_id: connectionId, database, schema })}`);
|
||||
}
|
||||
|
||||
export async function listAvailableExtensions(connectionId: string, database: string): Promise<ExtensionInfo[]> {
|
||||
return get(`/api/schema/available-extensions?${qs({ connection_id: connectionId, database })}`);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Query
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -20,6 +20,7 @@ import type {
|
||||
SequenceInfo,
|
||||
RuleInfo,
|
||||
OwnerInfo,
|
||||
ExtensionInfo,
|
||||
QueryResult,
|
||||
SqlReferenceAnalysis,
|
||||
DatabaseType,
|
||||
@@ -30,6 +31,7 @@ import type {
|
||||
SavedSqlFile,
|
||||
SavedSqlFolder,
|
||||
SavedSqlLibrary,
|
||||
SshConfigHostEntry,
|
||||
} from "@/types/database";
|
||||
import type { CollectionInfo } from "@/types/database";
|
||||
import type { SidebarObjectKind } from "@/lib/database/databaseObjectCapabilities";
|
||||
@@ -495,6 +497,10 @@ export async function listSystemFonts(): Promise<string[]> {
|
||||
return invoke("list_system_fonts");
|
||||
}
|
||||
|
||||
export async function listSshConfigHosts(): Promise<SshConfigHostEntry[]> {
|
||||
return invoke("list_ssh_config_hosts");
|
||||
}
|
||||
|
||||
export async function pendingOpenSqlFiles(): Promise<string[]> {
|
||||
return invoke("pending_open_sql_files");
|
||||
}
|
||||
@@ -990,6 +996,14 @@ export async function listOwners(connectionId: string, database: string, schema:
|
||||
return invoke("list_owners", { connectionId, database, schema });
|
||||
}
|
||||
|
||||
export async function listExtensions(connectionId: string, database: string, schema: string): Promise<ExtensionInfo[]> {
|
||||
return invoke("list_extensions", { connectionId, database, schema });
|
||||
}
|
||||
|
||||
export async function listAvailableExtensions(connectionId: string, database: string): Promise<ExtensionInfo[]> {
|
||||
return invoke("list_available_extensions", { connectionId, database });
|
||||
}
|
||||
|
||||
export async function saveConnections(configs: ConnectionConfig[]): Promise<void> {
|
||||
return invoke("save_connections", { configs });
|
||||
}
|
||||
|
||||
@@ -122,3 +122,24 @@ function quotePostgresIdentifier(value: string): string {
|
||||
function quoteSqlLiteral(value: string): string {
|
||||
return `'${value.replace(/'/g, "''")}'`;
|
||||
}
|
||||
|
||||
export function buildCreateExtensionSql(name: string, schema?: string | null): string {
|
||||
const extName = quotePostgresIdentifier(name);
|
||||
if (schema) {
|
||||
return `CREATE EXTENSION ${extName} WITH SCHEMA ${quotePostgresIdentifier(schema)};`;
|
||||
}
|
||||
return `CREATE EXTENSION ${extName};`;
|
||||
}
|
||||
|
||||
export function buildDropExtensionSql(name: string, cascade = false): string {
|
||||
const extName = quotePostgresIdentifier(name);
|
||||
return cascade ? `DROP EXTENSION ${extName} CASCADE;` : `DROP EXTENSION ${extName};`;
|
||||
}
|
||||
|
||||
export function buildListAvailableExtensionsSql(schema?: string | null): string {
|
||||
// pg_available_extensions shows extensions available for installation
|
||||
if (schema) {
|
||||
return `SELECT name, default_version, comment FROM pg_catalog.pg_available_extensions WHERE installed_version IS NULL ORDER BY name`;
|
||||
}
|
||||
return `SELECT name, default_version, comment FROM pg_catalog.pg_available_extensions WHERE installed_version IS NULL ORDER BY name`;
|
||||
}
|
||||
Reference in new issue
Block a user