diff --git a/package.json b/package.json index 44b39903..64a8f9f8 100644 --- a/package.json +++ b/package.json @@ -363,6 +363,11 @@ "title": "Get Authorities", "category": "Db2 for i" }, + { + "command": "vscode-db2i.getObjectLocks", + "title": "Get Object Locks", + "category": "Db2 for i" + }, { "command": "vscode-db2i.clearData", "title": "Clear...", @@ -963,6 +968,11 @@ "when": "viewItem == table || viewItem == view || viewItem == alias || viewItem == constraint || viewItem == function || viewItem == variable || viewItem == index || viewItem == procedure || viewItem == sequence || viewItem == package || viewItem == trigger || viewItem == type", "group": "db2workWith@4" }, + { + "command": "vscode-db2i.getObjectLocks", + "when": "viewItem == table || viewItem == view || viewItem == alias || viewItem == constraint || viewItem == function || viewItem == variable || viewItem == index || viewItem == procedure || viewItem == sequence || viewItem == package || viewItem == trigger || viewItem == type", + "group": "db2workWith@5" + }, { "command": "vscode-db2i.clearData", "when": "viewItem == table", diff --git a/src/views/schemaBrowser/contributes.json b/src/views/schemaBrowser/contributes.json index 12f4bcee..c5dfb936 100644 --- a/src/views/schemaBrowser/contributes.json +++ b/src/views/schemaBrowser/contributes.json @@ -54,6 +54,11 @@ "title": "Get Authorities", "category": "Db2 for i" }, + { + "command": "vscode-db2i.getObjectLocks", + "title": "Get Object Locks", + "category": "Db2 for i" + }, { "command": "vscode-db2i.clearData", "title": "Clear...", @@ -167,6 +172,11 @@ "when": "viewItem == table || viewItem == view || viewItem == alias || viewItem == constraint || viewItem == function || viewItem == variable || viewItem == index || viewItem == procedure || viewItem == sequence || viewItem == package || viewItem == trigger || viewItem == type", "group": "db2workWith@4" }, + { + "command": "vscode-db2i.getObjectLocks", + "when": "viewItem == table || viewItem == view || viewItem == alias || viewItem == function || viewItem == variable || viewItem == index || viewItem == procedure || viewItem == sequence || viewItem == package || viewItem == trigger || viewItem == type", + "group": "db2workWith@5" + }, { "command": "vscode-db2i.clearData", "when": "viewItem == table", diff --git a/src/views/schemaBrowser/index.ts b/src/views/schemaBrowser/index.ts index 7320a4a2..3387e17d 100644 --- a/src/views/schemaBrowser/index.ts +++ b/src/views/schemaBrowser/index.ts @@ -10,7 +10,7 @@ import Configuration from "../../configuration"; import Types from "../types"; import Statement from "../../database/statement"; import { getCopyUi } from "./copyUI"; -import { getAdvisedIndexesStatement, getIndexesStatement, getMTIStatement, getAuthoritiesStatement } from "./statements"; +import { getAdvisedIndexesStatement, getIndexesStatement, getMTIStatement, getAuthoritiesStatement, getObjectLocksStatement } from "./statements"; const viewItem = { "tables": `table`, @@ -197,7 +197,18 @@ export default class schemaBrowser { }); } }), - + + vscode.commands.registerCommand(`vscode-db2i.getObjectLocks`, async (object: SQLObject) => { + if (object) { + const content = getObjectLocksStatement(object.schema, object.name, object.type.toUpperCase(), object.tableType); + vscode.commands.executeCommand(`vscode-db2i.runEditorStatement`, { + content, + qualifier: `statement`, + open: false, + }); + } + }), + vscode.commands.registerCommand(`vscode-db2i.advisedIndexes`, async (object: SQLObject|SchemaItem) => { //table if (object) { let content: string|undefined; diff --git a/src/views/schemaBrowser/statements.ts b/src/views/schemaBrowser/statements.ts index b7ead8dc..dc0fcb39 100644 --- a/src/views/schemaBrowser/statements.ts +++ b/src/views/schemaBrowser/statements.ts @@ -264,7 +264,40 @@ export function getAuthoritiesStatement(schema: string, table: string, objectTyp if (objectType === 'TABLE' && tableType != 'T') { sql += ` and object_type = '*FILE'`; } else { - sql += ` and sql_object_type = '${objectType}'`; + sql += ` and sql_object_type = '${objectType}'`; } return sql; +} + +export function getObjectLocksStatement(schema: string, table: string, objectType: string, tableType: string): string { + let sql: string = ` + select + system_table_member "Member", + member_lock_type "Member Lock Type", + lock_state "Lock State", + lock_status "Lock Status", + lock_scope "Scope", + substr(job_name, locate_in_string(job_name, '/', -1) + 1) "Job Name", + substr(job_name, locate_in_string(job_name, '/', 1) + 1, locate_in_string(job_name, '/', -1) - locate_in_string(job_name, '/', 1) - 1) "Job User", + substr(job_name, 1, locate_in_string(job_name, '/', 1) - 1) "Job Number", + thread_id "Thread", + lock_space_id "Lock Space", + lock_count "Lock Count", + program_library_name "Program Library", + program_name "Program Name", + module_library_name "Module Library", + module_name "Module Name", + procedure_name "Procedure Name", + statement_id "Statement ID", + machine_instruction "Instruction" + from qsys2.object_lock_info + where object_schema = '${schema}' + and object_name = '${table}' + `; + if (objectType === 'TABLE' && tableType != 'T') { + sql += ` and object_type = '*FILE'`; + } else { + sql += ` and sql_object_type = '${objectType.toUpperCase()}'`; + } + return sql; } \ No newline at end of file