Skip to content

Commit cbb2666

Browse files
committed
Preview contents button
1 parent a6e123d commit cbb2666

File tree

5 files changed

+131
-110
lines changed

5 files changed

+131
-110
lines changed

global.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,10 @@ interface SQLParm {
2424
IS_NULLABLE: "Y" | "N",
2525
DEFAULT?: string,
2626
LONG_COMMENT?: string
27+
}
28+
29+
interface StatementInfo {
30+
content: string,
31+
type: "statement"|"json"|"csv"|"cl"|"sql",
32+
open?: boolean
2733
}

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@
131131
{
132132
"command": "vscode-db2i.generateSQL",
133133
"title": "Generate SQL",
134-
"category": "Db2 for i",
135-
"icon": "$(add)"
134+
"category": "Db2 for i"
136135
},
137136
{
138-
"command": "vscode-db2i.generateSelect",
139-
"title": "Generate SELECT",
140-
"category": "Db2 for i"
137+
"command": "vscode-db2i.getResultSet",
138+
"title": "View contents",
139+
"category": "Db2 for i",
140+
"icon": "$(output)"
141141
},
142142
{
143143
"command": "vscode-db2i.setCurrentSchema",
@@ -195,9 +195,9 @@
195195
"group": "db2@1"
196196
},
197197
{
198-
"command": "vscode-db2i.generateSelect",
198+
"command": "vscode-db2i.getResultSet",
199199
"when": "viewItem == table || viewItem == view || viewItem == alias",
200-
"group": "db2@1"
200+
"group": "inline"
201201
},
202202
{
203203
"command": "vscode-db2i.generateSQL",

src/language/results/html.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ exports.generateScroller = (basicSelect) => {
124124
scroller.rowsData = data.rows;
125125
}
126126
127+
console.log('row check');
127128
if (data.rows.length < limit) {
129+
console.log("No more rows");
128130
noMoreRows = true;
129131
}
130132

src/language/results/index.js

Lines changed: 109 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -113,137 +113,147 @@ exports.initialise = (context) => {
113113
context.subscriptions.push(
114114
vscode.window.registerWebviewViewProvider(`vscode-db2i.resultset`, resultSetProvider),
115115

116-
vscode.commands.registerCommand(`vscode-db2i.runEditorStatement`, async () => {
117-
const instance = getInstance();
118-
const config = instance.getConfig();
119-
const content = instance.getContent();
120-
const editor = vscode.window.activeTextEditor;
121-
122-
if (editor.document.languageId === `sql`) {
123-
const statement = this.parseStatement(editor);
124-
125-
if (statement.content.trim().length > 0) {
126-
try {
127-
if (statement.type === `cl`) {
128-
const commandResult = await vscode.commands.executeCommand(`code-for-ibmi.runCommand`, {
129-
command: statement.content,
130-
environment: `ile`
131-
});
132-
133-
if (commandResult.code === 0 || commandResult.code === null) {
134-
vscode.window.showInformationMessage(`Command executed successfuly.`);
135-
} else {
136-
vscode.window.showErrorMessage(`Command failed to run.`);
137-
}
116+
vscode.commands.registerCommand(`vscode-db2i.runEditorStatement`,
117+
/**
118+
* @param {StatementInfo} [options]
119+
*/
120+
async (options) => {
121+
const instance = getInstance();
122+
const config = instance.getConfig();
123+
const content = instance.getContent();
124+
const editor = vscode.window.activeTextEditor;
138125

139-
let output = ``;
140-
if (commandResult.stderr.length > 0) output += `${commandResult.stderr}\n\n`;
141-
if (commandResult.stdout.length > 0) output += `${commandResult.stdout}\n\n`;
126+
if (options || (editor && editor.document.languageId === `sql`)) {
127+
/** @type {StatementInfo} */
128+
const statement = options || this.parseStatement(editor);
142129

143-
const textDoc = await vscode.workspace.openTextDocument({language: `txt`, content: output});
144-
await vscode.window.showTextDocument(textDoc, {
145-
preserveFocus: true,
146-
preview: true
147-
});
130+
if (statement.open) {
131+
const textDoc = await vscode.workspace.openTextDocument({language: `sql`, content: statement.content});
132+
await vscode.window.showTextDocument(textDoc);
133+
}
148134

149-
} else {
150-
if (statement.type === `statement` && this.isBasicStatement(statement.content)) {
151-
// If it's a basic statement, we can let it scroll!
152-
resultSetProvider.setScrolling(statement.content);
135+
if (statement.content.trim().length > 0) {
136+
try {
137+
if (statement.type === `cl`) {
138+
const commandResult = await vscode.commands.executeCommand(`code-for-ibmi.runCommand`, {
139+
command: statement.content,
140+
environment: `ile`
141+
});
142+
143+
if (commandResult.code === 0 || commandResult.code === null) {
144+
vscode.window.showInformationMessage(`Command executed successfuly.`);
145+
} else {
146+
vscode.window.showErrorMessage(`Command failed to run.`);
147+
}
148+
149+
let output = ``;
150+
if (commandResult.stderr.length > 0) output += `${commandResult.stderr}\n\n`;
151+
if (commandResult.stdout.length > 0) output += `${commandResult.stdout}\n\n`;
152+
153+
const textDoc = await vscode.workspace.openTextDocument({language: `txt`, content: output});
154+
await vscode.window.showTextDocument(textDoc, {
155+
preserveFocus: true,
156+
preview: true
157+
});
153158

154159
} else {
155-
// Otherwise... it's a bit complicated.
156-
statement.content = [
157-
`SET CURRENT SCHEMA = '${config.currentLibrary.toUpperCase()}'`,
158-
statement.content
159-
].join(`;\n`);
160+
if (statement.type === `statement` && this.isBasicStatement(statement.content)) {
161+
// If it's a basic statement, we can let it scroll!
162+
resultSetProvider.setScrolling(statement.content);
160163

161-
if (statement.type === `statement`) {
162-
resultSetProvider.setLoadingText(`Executing statement...`);
163-
}
164+
} else {
165+
// Otherwise... it's a bit complicated.
166+
statement.content = [
167+
`SET CURRENT SCHEMA = '${config.currentLibrary.toUpperCase()}'`,
168+
statement.content
169+
].join(`;\n`);
164170

165-
const data = await content.runSQL(statement.content);
171+
if (statement.type === `statement`) {
172+
resultSetProvider.setLoadingText(`Executing statement...`);
173+
}
166174

167-
if (data.length > 0) {
168-
switch (statement.type) {
169-
case `statement`:
170-
resultSetProvider.setResults(data);
171-
break;
175+
const data = await content.runSQL(statement.content);
172176

173-
case `csv`:
174-
case `json`:
175-
case `sql`:
176-
let content = ``;
177+
if (data.length > 0) {
177178
switch (statement.type) {
178-
case `csv`: content = csv.stringify(data, {
179-
header: true,
180-
quoted_string: true,
181-
}); break;
182-
case `json`: content = JSON.stringify(data, null, 2); break;
183-
184-
case `sql`:
185-
const keys = Object.keys(data[0]);
186-
187-
const insertStatement = [
188-
`insert into TABLE (`,
189-
` ${keys.join(`, `)}`,
190-
`) values `,
191-
data.map(
192-
row => ` (${keys.map(key => {
193-
if (row[key] === null) return `null`;
194-
if (typeof row[key] === `string`) return `'${row[key].replace(/'/g, `''`)}'`;
195-
return row[key];
196-
}).join(`, `)})`
197-
).join(`,\n`),
198-
];
199-
content = insertStatement.join(`\n`);
179+
case `statement`:
180+
resultSetProvider.setResults(data);
200181
break;
201-
}
202182

203-
const textDoc = await vscode.workspace.openTextDocument({language: statement.type, content});
204-
await vscode.window.showTextDocument(textDoc);
205-
break;
206-
}
183+
case `csv`:
184+
case `json`:
185+
case `sql`:
186+
let content = ``;
187+
switch (statement.type) {
188+
case `csv`: content = csv.stringify(data, {
189+
header: true,
190+
quoted_string: true,
191+
}); break;
192+
case `json`: content = JSON.stringify(data, null, 2); break;
193+
194+
case `sql`:
195+
const keys = Object.keys(data[0]);
196+
197+
const insertStatement = [
198+
`insert into TABLE (`,
199+
` ${keys.join(`, `)}`,
200+
`) values `,
201+
data.map(
202+
row => ` (${keys.map(key => {
203+
if (row[key] === null) return `null`;
204+
if (typeof row[key] === `string`) return `'${row[key].replace(/'/g, `''`)}'`;
205+
return row[key];
206+
}).join(`, `)})`
207+
).join(`,\n`),
208+
];
209+
content = insertStatement.join(`\n`);
210+
break;
211+
}
212+
213+
const textDoc = await vscode.workspace.openTextDocument({language: statement.type, content});
214+
await vscode.window.showTextDocument(textDoc);
215+
break;
216+
}
207217

208-
} else {
209-
if (statement.type === `statement`) {
210-
resultSetProvider.setError(`Query executed with no data returned.`);
211218
} else {
212-
vscode.window.showInformationMessage(`Query executed with no data returned.`);
219+
if (statement.type === `statement`) {
220+
resultSetProvider.setError(`Query executed with no data returned.`);
221+
} else {
222+
vscode.window.showInformationMessage(`Query executed with no data returned.`);
223+
}
213224
}
214225
}
215226
}
216-
}
217227

218-
} catch (e) {
219-
let errorText;
220-
if (typeof e === `string`) {
221-
errorText = e.length > 0 ? e : `An error occurred when executing the statement.`;
222-
} else {
223-
errorText = e.message || `Error running SQL statement.`;
224-
}
228+
} catch (e) {
229+
let errorText;
230+
if (typeof e === `string`) {
231+
errorText = e.length > 0 ? e : `An error occurred when executing the statement.`;
232+
} else {
233+
errorText = e.message || `Error running SQL statement.`;
234+
}
225235

226-
if (statement.type === `statement`) {
227-
resultSetProvider.setError(errorText);
228-
} else {
229-
vscode.window.showErrorMessage(errorText);
236+
if (statement.type === `statement`) {
237+
resultSetProvider.setError(errorText);
238+
} else {
239+
vscode.window.showErrorMessage(errorText);
240+
}
230241
}
231242
}
232243
}
233-
}
234-
}),
244+
}),
235245
)
236246
}
237247

238248
exports.isBasicStatement = (statement) => {
239249
const basicStatement = statement.trim().toUpperCase();
240250

241-
return statement.startsWith(`SELECT`) && !statement.includes(`LIMIT`);
251+
return basicStatement.startsWith(`SELECT`) && !basicStatement.includes(`LIMIT`);
242252
}
243253

244254
/**
245255
* @param {vscode.TextEditor} editor
246-
* @returns {{type: "statement"|"cl"|"json"|"csv"|"sql", content: string}} Statement
256+
* @returns {StatementInfo} Statement
247257
*/
248258
exports.parseStatement = (editor) => {
249259
const document = editor.document;

src/views/schemaBrowser.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,14 @@ module.exports = class schemaBrowser {
107107
}
108108
}),
109109

110-
vscode.commands.registerCommand(`vscode-db2i.generateSelect`, async (object) => {
110+
vscode.commands.registerCommand(`vscode-db2i.getResultSet`, async (object) => {
111111
if (object && object instanceof SQLObject) {
112-
const content = `SELECT * FROM ${object.schema}.${object.name} as a;`;
113-
const textDoc = await vscode.workspace.openTextDocument({language: `sql`, content});
114-
await vscode.window.showTextDocument(textDoc);
112+
const content = `SELECT * FROM ${object.schema}.${object.name} as a`;
113+
vscode.commands.executeCommand(`vscode-db2i.runEditorStatement`, {
114+
content,
115+
type: `statement`,
116+
open: true,
117+
});
115118
}
116119
}),
117120

0 commit comments

Comments
 (0)