Skip to content

Commit 1903877

Browse files
author
Peng Ren
committed
Add better connection management UI and subprocess for running connection
1 parent 467377b commit 1903877

8 files changed

Lines changed: 753 additions & 171 deletions

File tree

media/connection-editor.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
const vscode = acquireVsCodeApi();
2+
3+
function maskPasswordInUri(uri) {
4+
try {
5+
return uri.replace(
6+
/(:\/\/[^:/?#]+):([^@]+)@/,
7+
(_, prefix) => prefix + ":***@",
8+
);
9+
} catch {
10+
return uri;
11+
}
12+
}
13+
214
const initial = window.__SQL4ALL_CONNECTION_EDITOR__ || {
315
name: "",
416
connection: {
@@ -324,8 +336,9 @@ if (dbTypeWidget) {
324336
// Restore the saved connection string if it was manually edited
325337
if (initial.connection.connectionString) {
326338
const connStringEl = document.getElementById("connectionString");
327-
if (connStringEl.value !== initial.connection.connectionString) {
328-
connStringEl.value = initial.connection.connectionString;
339+
const maskedConnectionString = maskPasswordInUri(initial.connection.connectionString);
340+
if (connStringEl.value !== maskedConnectionString) {
341+
connStringEl.value = maskedConnectionString;
329342
connStringEl.dataset.manuallyEdited = "true";
330343
}
331344
}

media/sql-executor.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,13 @@ body.is-resizing {
749749
color: var(--vscode-testing-iconFailed, #ff8f8f);
750750
}
751751

752+
.no-data-cell {
753+
text-align: center;
754+
padding: 24px !important;
755+
color: var(--text-secondary);
756+
font-style: italic;
757+
}
758+
752759
body.vscode-light #queryEditor .cm-keyword,
753760
body.vscode-high-contrast-light #queryEditor .cm-keyword {
754761
color: #0000ff;

media/sql-executor.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,12 @@ function renderResultsTable(payload, elapsedSeconds) {
231231
return;
232232
}
233233

234-
if (rows.length === 0 || columns.length === 0) {
234+
if (columns.length === 0) {
235235
setResultMetrics(0, 0);
236236
setExportState(false);
237-
renderPlaceholder("Execution returned no rows.", "neutral");
237+
renderPlaceholder("Execution returned no data.", "neutral");
238238
setResultStatus(
239-
`Execution completed with no returned rows. (${utils.formatElapsedSeconds(elapsedSeconds || 0)}s)`,
239+
`Execution completed with no returned data. (${utils.formatElapsedSeconds(elapsedSeconds || 0)}s)`,
240240
"neutral",
241241
);
242242
return;
@@ -264,6 +264,26 @@ function renderResultsTable(payload, elapsedSeconds) {
264264
table.appendChild(thead);
265265

266266
const tbody = document.createElement("tbody");
267+
268+
if (rows.length === 0) {
269+
setResultMetrics(0, 0);
270+
setExportState(false);
271+
const tr = document.createElement("tr");
272+
const td = document.createElement("td");
273+
td.colSpan = columns.length + 1;
274+
td.className = "no-data-cell";
275+
td.textContent = "No data";
276+
tr.appendChild(td);
277+
tbody.appendChild(tr);
278+
table.appendChild(tbody);
279+
container.innerHTML = "";
280+
container.appendChild(table);
281+
setResultStatus(
282+
`Returned 0 rows. (${utils.formatElapsedSeconds(elapsedSeconds || 0)}s)`,
283+
"neutral",
284+
);
285+
return;
286+
}
267287
rows.forEach((row, index) => {
268288
const tr = document.createElement("tr");
269289

package.json

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"displayName": "SQL For ALL",
44
"publisher": "sql4all",
55
"description": "Query SQL/NoSQL Databases using SQL — powered by SQLAlchemy",
6-
"version": "0.4.1",
6+
"version": "0.5.0",
77
"license": "MIT",
88
"engines": {
99
"vscode": "^1.110.0"
@@ -79,12 +79,6 @@
7979
"category": "SQL4ALL",
8080
"icon": "$(trash)"
8181
},
82-
{
83-
"command": "sql4all.refreshConnections",
84-
"title": "Refresh Connections",
85-
"category": "SQL4ALL",
86-
"icon": "$(refresh)"
87-
},
8882
{
8983
"command": "sql4all.selectPythonExecutable",
9084
"title": "SQL4ALL: Select Python Executable",
@@ -109,6 +103,18 @@
109103
"category": "SQL4ALL",
110104
"icon": "$(plug)"
111105
},
106+
{
107+
"command": "sql4all.disconnectDatabase",
108+
"title": "Disconnect...",
109+
"category": "SQL4ALL",
110+
"icon": "$(debug-disconnect)"
111+
},
112+
{
113+
"command": "sql4all.refreshConnection",
114+
"title": "Refresh...",
115+
"category": "SQL4ALL",
116+
"icon": "$(refresh)"
117+
},
112118
{
113119
"command": "sql4all.exportConnections",
114120
"title": "Export Connections",
@@ -148,11 +154,6 @@
148154
"when": "view == sql4all.connections",
149155
"group": "navigation@1"
150156
},
151-
{
152-
"command": "sql4all.refreshConnections",
153-
"when": "view == sql4all.connections",
154-
"group": "navigation@2"
155-
},
156157
{
157158
"command": "sql4all.importConnections",
158159
"when": "view == sql4all.connections",
@@ -167,27 +168,37 @@
167168
"view/item/context": [
168169
{
169170
"command": "sql4all.connectConnection",
170-
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem",
171+
"when": "view == sql4all.connections && viewItem =~ /^sql4all\\.connectionItem/",
171172
"group": "inline@1"
172173
},
173174
{
174175
"command": "sql4all.connectDatabase",
175176
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem",
176177
"group": "1_connect@1"
177178
},
179+
{
180+
"command": "sql4all.disconnectDatabase",
181+
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem.connected",
182+
"group": "1_connect@2"
183+
},
184+
{
185+
"command": "sql4all.refreshConnection",
186+
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem.connected",
187+
"group": "1_connect@3"
188+
},
178189
{
179190
"command": "sql4all.editConnection",
180-
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem",
191+
"when": "view == sql4all.connections && viewItem =~ /^sql4all\\.connectionItem/",
181192
"group": "2_manage@1"
182193
},
183194
{
184195
"command": "sql4all.deleteConnection",
185-
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem",
196+
"when": "view == sql4all.connections && viewItem =~ /^sql4all\\.connectionItem/",
186197
"group": "2_manage@2"
187198
},
188199
{
189200
"command": "sql4all.reloadDriver",
190-
"when": "view == sql4all.connections && viewItem == sql4all.connectionItem",
201+
"when": "view == sql4all.connections && viewItem =~ /^sql4all\\.connectionItem/",
191202
"group": "3_driver@1"
192203
},
193204
{

0 commit comments

Comments
 (0)