This repository has been archived by the owner on Feb 8, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathextension.js
89 lines (75 loc) · 4.16 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const vscode = require('vscode');
const {getSqlScriptAsInsertAsync} = require('./scriptInsertAs.js');
const {getSqlScriptAsUpdateAsync} = require('./scriptUpdateAs.js');
const {getSqlScriptAsSelectAsync} = require('./scriptSelectAs.js');
const {getDeleteSqlScript} = require('./scriptDeleteAs.js');
const {
getSqlScriptAsDropAndCreateStoredProcedureAsync,
} = require("./scriptSPAs.js");
const sqlUtils = require('./scriptSqlUtils.js');
const { getSqlScriptAsDropAndCreateFunctionAsync } = require('./scriptFuncAs.js');
const databaseNotFoundMessage = 'Database name not found.';
function tryGetBestDatabaseName(context)
{
let databaseName = context.connectionProfile.databaseName;
if (databaseName)
return databaseName;
//In Macos, in some cases, the database name is not available in the connection profile.
//In this case, we try to get the database name from metadata.urn
const metadataUrn = context.nodeInfo.metadata.urn;
if (metadataUrn) {
const regex = /\/Database\[@Name='([^']*)'\]/;
const match = metadataUrn.match(regex);
if (match) return match[1];
}
return null;
}
async function handleCommand(context, getScriptFunc, clipboard = false, identityOn = false) {
let databaseName = tryGetBestDatabaseName(context);
if (!databaseName) {
vscode.window.showErrorMessage(databaseNotFoundMessage);
return;
}
let schemaName = context.nodeInfo.metadata.schema;
let tableName = context.nodeInfo.metadata.name;
try {
let scriptText = await getScriptFunc(context.connectionProfile, databaseName, schemaName, tableName, identityOn);
if (clipboard) {
await vscode.env.clipboard.writeText(scriptText);
vscode.window.showInformationMessage('Script copied to clipboard.');
} else {
await vscode.commands.executeCommand('newQuery');
let editor = vscode.window.activeTextEditor;
editor.edit(edit => {
edit.insert(new vscode.Position(0, 0), scriptText);
});
}
} catch (reason) {
vscode.window.showErrorMessage(reason.message);
}
}
function activate(context) {
const commands = [
{ name: "extraSqlScriptAs.insertTableToClipboard", func: getSqlScriptAsInsertAsync, clipboard: true },
{ name: "extraSqlScriptAs.insertTable", func: getSqlScriptAsInsertAsync },
{ name: "extraSqlScriptAs.insertTableToClipboardIdentityOn", func: getSqlScriptAsInsertAsync, clipboard: true, identityOn: true },
{ name: "extraSqlScriptAs.insertTableIdentityOn", func: getSqlScriptAsInsertAsync, identityOn: true },
{ name: "extraSqlScriptAs.updateTableToClipboard", func: getSqlScriptAsUpdateAsync, clipboard: true },
{ name: "extraSqlScriptAs.updateTable", func: getSqlScriptAsUpdateAsync },
{ name: "extraSqlScriptAs.deleteTableToClipboard", func: (profile, db, schema, table) => Promise.resolve(getDeleteSqlScript(profile, db, schema, table)), clipboard: true },
{ name: "extraSqlScriptAs.deleteTable", func: (profile, db, schema, table) => Promise.resolve(getDeleteSqlScript(profile, db, schema, table)) },
{ name: "extraSqlScriptAs.selectTableToClipboard", func: getSqlScriptAsSelectAsync, clipboard: true },
{ name: "extraSqlScriptAs.selectTable", func: getSqlScriptAsSelectAsync },
{ name: "extraSqlScriptAs.dropAndCreateStoredProcedureToClipboard", func: getSqlScriptAsDropAndCreateStoredProcedureAsync, clipboard: true },
{ name: "extraSqlScriptAs.dropAndCreateStoredProcedure", func: getSqlScriptAsDropAndCreateStoredProcedureAsync },
{ name: "extraSqlScriptAs.dropAndCreateFunctionToClipboard", func: getSqlScriptAsDropAndCreateFunctionAsync, clipboard: true },
{ name: "extraSqlScriptAs.dropAndCreateFunction", func: getSqlScriptAsDropAndCreateFunctionAsync },
];
for (const { name, func, clipboard, identityOn } of commands) {
let command = vscode.commands.registerCommand(name, context => handleCommand(context, func, clipboard, identityOn));
context.subscriptions.push(command);
}
}
function deactivate() {}
exports.activate = activate;
exports.deactivate = deactivate;