Skip to content

Commit

Permalink
Merge pull request #444 from KxSystems/KXI-32280
Browse files Browse the repository at this point in the history
  • Loading branch information
Philip-Carneiro-KX authored Oct 17, 2024
2 parents d11a299 + 844755f commit 2e5c1a0
Show file tree
Hide file tree
Showing 5 changed files with 399 additions and 421 deletions.
123 changes: 0 additions & 123 deletions src/models/serverObject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
* specific language governing permissions and limitations under the License.
*/

import { LocalConnection } from "../classes/localConnection";
import { loadServerObjects } from "../commands/serverCommand";
import { ext } from "../extensionVariables";

export interface ServerObject {
id: number;
pid: number;
Expand All @@ -25,122 +21,3 @@ export interface ServerObject {
context: object;
isNs: boolean;
}

export async function loadNamespaces(root?: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const ns = serverObjects.filter((value) => {
return value.isNs ? value : undefined;
});

const sorted = sortObjects(ns);

return getNamespaces(sorted, root);
}
return new Array<ServerObject>();
}

export async function loadDictionaries(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const dicts = serverObjects.filter((value) => {
return value.typeNum === 99 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return sortObjects(dicts);
}
return new Array<ServerObject>();
}

export async function loadFunctions(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const funcs = serverObjects.filter((value) => {
return value.typeNum === 100 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return sortObjects(funcs);
}
return new Array<ServerObject>();
}

export async function loadTables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const tables = serverObjects.filter((value) => {
return value.typeNum === 98 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return sortObjects(tables);
}
return new Array<ServerObject>();
}

export async function loadVariables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
const views = await loadViews();

if (serverObjects !== undefined) {
const vars = serverObjects.filter((value) => {
return views.indexOf(value.name) === -1 &&
value.typeNum < 98 &&
!value.isNs &&
value.namespace === ns
? value
: undefined;
});
return sortObjects(vars);
}
return new Array<ServerObject>();
}

export async function loadViews(): Promise<string[]> {
if (ext.activeConnection instanceof LocalConnection) {
const rawViewArray = await ext.activeConnection?.executeQuery("views`");
const views = rawViewArray?.filter((item: any) => {
return item !== "s#" && item !== "" && item !== ",";
});
const sorted = views?.sort((object1: any, object2: any) => {
if (object1 < object2) {
return -1;
} else if (object1 > object2) {
return 1;
}
return 0;
});
return sorted ?? new Array<string>();
}
return new Array<string>();
}

function getNamespaces(input: ServerObject[], root = "."): ServerObject[] {
const output: ServerObject[] = [];

input.forEach((v, i) => {
let index = -1;
if (root === v.namespace) {
index = i;
}

if (index != -1) {
output.push(v);
}
});

return output;
}

function sortObjects(input: ServerObject[]): ServerObject[] {
const sorted = input.sort((object1, object2) => {
if (object1.fname < object2.fname) {
return -1;
} else if (object1.fname > object2.fname) {
return 1;
}
return 0;
});
return sorted;
}
29 changes: 15 additions & 14 deletions src/services/kdbTreeProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,6 @@ import {
commands,
} from "vscode";
import { ext } from "../extensionVariables";
import {
loadDictionaries,
loadFunctions,
loadNamespaces,
loadTables,
loadVariables,
loadViews,
} from "../models/serverObject";
import {
getInsightsAlias,
getServerAlias,
Expand All @@ -53,6 +45,7 @@ import {
Server,
ServerDetails,
} from "../models/connectionsModels";
import { KdbTreeService } from "./kdbTreeService";

export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
private _onDidChangeTreeData: EventEmitter<
Expand Down Expand Up @@ -214,7 +207,7 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {

/* istanbul ignore next */
private async getNamespaces(connLabel?: string): Promise<QNamespaceNode[]> {
const ns = await loadNamespaces();
const ns = await KdbTreeService.loadNamespaces();
const result = ns.map(
(x) =>
new QNamespaceNode(
Expand Down Expand Up @@ -272,7 +265,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
serverType instanceof QCategoryNode ? serverType.connLabel : "";
if (serverType.label === ext.qObjectCategories[0]) {
// dictionaries
const dicts = await loadDictionaries(serverType.contextValue ?? "");
const dicts = await KdbTreeService.loadDictionaries(
serverType.contextValue ?? "",
);
const result = dicts.map(
(x) =>
new QServerNode(
Expand All @@ -291,7 +286,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[1]) {
// functions
const funcs = await loadFunctions(serverType.contextValue ?? "");
const funcs = await KdbTreeService.loadFunctions(
serverType.contextValue ?? "",
);
const result = funcs.map(
(x) =>
new QServerNode(
Expand All @@ -310,7 +307,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[2]) {
// tables
const tables = await loadTables(serverType.contextValue ?? "");
const tables = await KdbTreeService.loadTables(
serverType.contextValue ?? "",
);
const result = tables.map(
(x) =>
new QServerNode(
Expand All @@ -329,7 +328,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[3]) {
// variables
const vars = await loadVariables(serverType.contextValue ?? "");
const vars = await KdbTreeService.loadVariables(
serverType.contextValue ?? "",
);
const result = vars.map(
(x) =>
new QServerNode(
Expand All @@ -348,7 +349,7 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[4]) {
// views
const views = await loadViews();
const views = await KdbTreeService.loadViews();
const result = views.map(
(x) =>
new QServerNode(
Expand Down
128 changes: 128 additions & 0 deletions src/services/kdbTreeService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import { ServerObject } from "../models/serverObject";
import { ext } from "../extensionVariables";
import { loadServerObjects } from "../commands/serverCommand";
import { LocalConnection } from "../classes/localConnection";

export class KdbTreeService {
static async loadNamespaces(root?: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const ns = serverObjects.filter((value) => {
return value.isNs ? value : undefined;
});

const sorted = KdbTreeService.sortObjects(ns);

return KdbTreeService.getNamespaces(sorted, root);
}
return new Array<ServerObject>();
}

static async loadDictionaries(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const dicts = serverObjects.filter((value) => {
return value.typeNum === 99 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(dicts);
}
return new Array<ServerObject>();
}

static async loadFunctions(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const funcs = serverObjects.filter((value) => {
return value.typeNum === 100 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(funcs);
}
return new Array<ServerObject>();
}

static async loadTables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const tables = serverObjects.filter((value) => {
return value.typeNum === 98 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(tables);
}
return new Array<ServerObject>();
}

static async loadVariables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
const views = await KdbTreeService.loadViews();

if (serverObjects !== undefined) {
const vars = serverObjects.filter((value) => {
return views.indexOf(value.name) === -1 &&
value.typeNum < 98 &&
!value.isNs &&
value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(vars);
}
return new Array<ServerObject>();
}

static async loadViews(): Promise<string[]> {
if (ext.activeConnection instanceof LocalConnection) {
const rawViewArray = await ext.activeConnection?.executeQuery("views`");
const views = rawViewArray?.filter((item: any) => {
return item !== "s#" && item !== "" && item !== ",";
});
const sorted = views?.sort((object1: any, object2: any) => {
if (object1 < object2) {
return -1;
} else if (object1 > object2) {
return 1;
}
return 0;
});
return sorted ?? new Array<string>();
}
return new Array<string>();
}

private static getNamespaces(
input: ServerObject[],
root = ".",
): ServerObject[] {
const output: ServerObject[] = [];

input.forEach((v, i) => {
let index = -1;
if (root === v.namespace) {
index = i;
}

if (index != -1) {
output.push(v);
}
});

return output;
}

private static sortObjects(input: ServerObject[]): ServerObject[] {
const sorted = input.sort((object1, object2) => {
if (object1.fname < object2.fname) {
return -1;
} else if (object1.fname > object2.fname) {
return 1;
}
return 0;
});
return sorted;
}
}
Loading

0 comments on commit 2e5c1a0

Please sign in to comment.