Skip to content

Commit aa04470

Browse files
committed
Trigger
1 parent 09e4e4a commit aa04470

File tree

4 files changed

+177
-0
lines changed

4 files changed

+177
-0
lines changed

src/database/trigger.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
const vscode = require(`vscode`);
3+
const {instance} = vscode.extensions.getExtension(`halcyontechltd.code-for-ibmi`).exports;
4+
5+
module.exports = class View {
6+
constructor(schema, viewName) {
7+
this.schema = schema.toUpperCase();
8+
this.name = viewName.toUpperCase();
9+
}
10+
11+
async getInfo() {
12+
const content = instance.getContent();
13+
14+
const [info] = await content.runSQL([
15+
`SELECT * FROM QSYS2.SYSTRIGGERS`,
16+
`WHERE TRIGGER_SCHEMA = '${this.schema}' AND TRIGGER_NAME = '${this.name}'`
17+
].join(` `));
18+
19+
return info;
20+
}
21+
}

src/panels/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ module.exports = {
22
table: require(`./table`),
33
view: require(`./view`),
44
procedure: require(`./procedure`),
5+
trigger: require(`./trigger`),
56
};

src/panels/trigger/index.js

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
2+
const vscode = require(`vscode`);
3+
const Tools = require(`../tools`);
4+
5+
const Statement = require(`../../database/statement`);
6+
const Trigger = require(`../../database/trigger`);
7+
8+
const checkValues = {
9+
N: `None`,
10+
C: `Cascaded`,
11+
Y: `Local`
12+
}
13+
14+
module.exports = class ViewPanel {
15+
/**
16+
* @param {string} schema
17+
* @param {string} trigger
18+
* @param {vscode.Uri} extensionUri
19+
*/
20+
constructor(schema, trigger, extensionUri) {
21+
this.schema = schema;
22+
this.trigger = trigger;
23+
24+
this.extensionUri = extensionUri;
25+
26+
/** @type {vscode.WebviewPanel} */
27+
this.panel = undefined;
28+
}
29+
30+
async render() {
31+
if (this.panel) return;
32+
33+
this.panel = vscode.window.createWebviewPanel(
34+
`view`,
35+
`View ${this.trigger}`,
36+
vscode.ViewColumn.Active,
37+
{
38+
enableScripts: true,
39+
}
40+
);
41+
42+
this.panel.webview.html = Tools.getLoadingHTML(this.panel.webview, this.extensionUri);
43+
this.panel.webview.html = await this._getContent();
44+
}
45+
46+
async _getContent() {
47+
const toolkitUri = Tools.getUri(this.panel.webview, this.extensionUri, [
48+
`node_modules`,
49+
`@vscode`,
50+
`webview-ui-toolkit`,
51+
`dist`,
52+
`toolkit.js`,
53+
]);
54+
55+
const trigger = new Trigger(this.schema, this.trigger);
56+
57+
Tools.setLoadingText(this.panel.webview, `Fetching base info`);
58+
const info = await trigger.getInfo();
59+
60+
Tools.setLoadingText(this.panel.webview, `Rendering`);
61+
62+
return /*html*/ `
63+
<!DOCTYPE html>
64+
<html lang="en">
65+
<head>
66+
<meta charset="UTF-8">
67+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
68+
<script type="module" src="${toolkitUri}"></script>
69+
<style type="text/css">
70+
.component {
71+
margin-bottom: 0.5rem;
72+
}
73+
</style>
74+
<script>
75+
</script>
76+
<title>Table</title>
77+
</head>
78+
<body>
79+
<section class="tables">
80+
${Tools.generateTabs([
81+
{
82+
title: `View`,
83+
content: Tools.generateFields([
84+
{
85+
label: `Table name`,
86+
value: info.EVENT_OBJECT_TABLE,
87+
},
88+
{
89+
label: `Table schema`,
90+
value: info.EVENT_OBJECT_SCHEMA,
91+
},
92+
{
93+
label: `Program name`,
94+
value: info.TRIGGER_PROGRAM_NAME
95+
},
96+
{
97+
label: `Program schema`,
98+
value: info.TRIGGER_PROGRAM_LIBRARY
99+
},
100+
{
101+
label: `Enabled`,
102+
value: info.ENABLED === `Y` ? `Yes` : `No`
103+
},
104+
{
105+
label: `Considerd secure for row and column access control`,
106+
value: info.SECURE === `Y` ? `Yes` : `No`
107+
},
108+
{
109+
label: `Called on both Db2 Mirror nodes`,
110+
value: info.MIRRORED === `Y` ? `Yes` : `No`
111+
},
112+
{
113+
label: `Event`,
114+
value: info.EVENT_MANIPULATION
115+
},
116+
{
117+
label: `When to run`,
118+
value: info.ACTION_TIMING
119+
},
120+
{
121+
label: `Multi-threaded job action`,
122+
value: info.MULTITHREADED_JOB_ACTION
123+
},
124+
{
125+
label: `Created`,
126+
value: info.CREATED,
127+
size: 50
128+
},
129+
{
130+
label: `Definer`,
131+
value: info.TRIGGER_DEFINER
132+
},
133+
{
134+
label: `Text`,
135+
value: info.TRIGGER_TEXT,
136+
size: 50
137+
},
138+
{
139+
label: `Comment`,
140+
value: info.LONG_COMMENT,
141+
size: 50
142+
}
143+
])
144+
}
145+
])}
146+
</section>
147+
</body>
148+
</html>
149+
`;
150+
}
151+
}

src/views/schemaBrowser.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ module.exports = class schemaBrowser {
9696
panel = new Panels.procedure(schema, object, context.extensionUri);
9797
panel.render();
9898
break;
99+
case `trigger`:
100+
panel = new Panels.trigger(schema, object, context.extensionUri);
101+
panel.render();
102+
break;
99103
}
100104
}
101105
}),

0 commit comments

Comments
 (0)