Add findNodes Object Explorer API (#916)

This commit is contained in:
Matt Irvine
2018-03-16 13:37:24 -07:00
committed by GitHub
parent 75ab5c1a36
commit 38bedea0bd
9 changed files with 72 additions and 0 deletions

View File

@@ -68,6 +68,8 @@ export interface IObjectExplorerService {
getServerTreeView(): ServerTreeView;
findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames?: string[]): Thenable<sqlops.NodeInfo[]>;
getActiveConnectionNodes(): TreeNode[];
getTreeNode(connectionId: string, nodePath: string): Thenable<TreeNode>;
@@ -447,6 +449,24 @@ export class ObjectExplorerService implements IObjectExplorerService {
return this._serverTreeView;
}
public findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames?: string[]): Thenable<sqlops.NodeInfo[]> {
let rootNode = this._activeObjectExplorerNodes[connectionId];
if (!rootNode) {
return Promise.resolve([]);
}
let sessionId = rootNode.session.sessionId;
return this._providers[this._sessions[sessionId].connection.providerName].findNodes({
type: type,
name: name,
schema: schema,
database: database,
parentObjectNames: parentObjectNames,
sessionId: sessionId
}).then(response => {
return response.nodes;
});
}
public getActiveConnectionNodes(): TreeNode[] {
return Object.values(this._activeObjectExplorerNodes);
}

27
src/sql/sqlops.d.ts vendored
View File

@@ -129,6 +129,18 @@ declare module 'sqlops' {
*/
export function getActiveConnectionNodes(): Thenable<ObjectExplorerNode[]>;
/**
* Find Object Explorer nodes that match the given information
* @param {string} connectionId The id of the connection that the node exists on
* @param {string} type The type of the object to retrieve
* @param {string} schema The schema of the object, if applicable
* @param {string} name The name of the object
* @param {string} database The database the object exists under, if applicable
* @param {string[]} parentObjectNames A list of names of parent objects in the tree, ordered from highest to lowest level
* (for example when searching for a table's column, provide the name of its parent table for this argument)
*/
export function findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<ObjectExplorerNode[]>;
/**
* Interface for representing and interacting with items in Object Explorer
*/
@@ -942,6 +954,15 @@ declare module 'sqlops' {
nodePath: string;
}
export interface FindNodesInfo {
sessionId: string;
type: string;
schema: string;
name: string;
database: string;
parentObjectNames: string[];
}
export interface ObjectExplorerCloseSessionInfo {
sessionId: string;
}
@@ -951,6 +972,10 @@ declare module 'sqlops' {
success: boolean;
}
export interface ObjectExplorerFindNodesResponse {
nodes: NodeInfo[];
}
export interface ObjectExplorerProvider extends DataProvider {
createNewSession(connInfo: ConnectionInfo): Thenable<ObjectExplorerSessionResponse>;
@@ -960,6 +985,8 @@ declare module 'sqlops' {
closeSession(closeSessionInfo: ObjectExplorerCloseSessionInfo): Thenable<ObjectExplorerCloseSessionResponse>;
findNodes(findNodesInfo: FindNodesInfo): Thenable<ObjectExplorerFindNodesResponse>;
registerOnSessionCreated(handler: (response: ObjectExplorerSession) => any);
registerOnExpandCompleted(handler: (response: ObjectExplorerExpandInfo) => any);

View File

@@ -299,6 +299,10 @@ export class ExtHostDataProtocol extends ExtHostDataProtocolShape {
return this._resolveProvider<sqlops.ObjectExplorerProvider>(handle).closeSession(closeSessionInfo);
}
public $findNodes(handle: number, findNodesInfo: sqlops.FindNodesInfo): Thenable<sqlops.ObjectExplorerFindNodesResponse> {
return this._resolveProvider<sqlops.ObjectExplorerProvider>(handle).findNodes(findNodesInfo);
}
public $onObjectExplorerSessionCreated(handle: number, response: sqlops.ObjectExplorerSession): void {
this._proxy.$onObjectExplorerSessionCreated(handle, response);
}

View File

@@ -26,6 +26,10 @@ export class ExtHostObjectExplorer implements ExtHostObjectExplorerShape {
public $getActiveConnectionNodes(): Thenable<sqlops.objectexplorer.ObjectExplorerNode[]> {
return this._proxy.$getActiveConnectionNodes().then(results => results.map(result => new ExtHostObjectExplorerNode(result.nodeInfo, result.connectionId, this._proxy)));
}
public $findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<sqlops.objectexplorer.ObjectExplorerNode[]> {
return this._proxy.$findNodes(connectionId, type, schema, name, database, parentObjectNames).then(results => results.map(result => new ExtHostObjectExplorerNode(result, connectionId, this._proxy)));
}
}
class ExtHostObjectExplorerNode implements sqlops.objectexplorer.ObjectExplorerNode {

View File

@@ -232,6 +232,9 @@ export class MainThreadDataProtocol implements MainThreadDataProtocolShape {
},
closeSession(closeSessionInfo: sqlops.ObjectExplorerCloseSessionInfo): Thenable<sqlops.ObjectExplorerCloseSessionResponse> {
return self._proxy.$closeObjectExplorerSession(handle, closeSessionInfo);
},
findNodes(findNodesInfo: sqlops.FindNodesInfo): Thenable<sqlops.ObjectExplorerFindNodesResponse> {
return self._proxy.$findNodes(handle, findNodesInfo);
}
});

View File

@@ -69,4 +69,8 @@ export class MainThreadObjectExplorer implements MainThreadObjectExplorerShape {
public $isExpanded(connectionId: string, nodePath: string): Thenable<boolean> {
return this._objectExplorerService.getTreeNode(connectionId, nodePath).then(treeNode => treeNode.isExpanded());
}
public $findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<sqlops.NodeInfo[]> {
return this._objectExplorerService.findNodes(connectionId, type, schema, name, database, parentObjectNames);
}
}

View File

@@ -114,6 +114,9 @@ export function createApiFactory(
},
getActiveConnectionNodes(): Thenable<sqlops.objectexplorer.ObjectExplorerNode[]> {
return extHostObjectExplorer.$getActiveConnectionNodes();
},
findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<sqlops.objectexplorer.ObjectExplorerNode[]> {
return extHostObjectExplorer.$findNodes(connectionId, type, schema, name, database, parentObjectNames);
}
};

View File

@@ -100,6 +100,8 @@ export abstract class ExtHostDataProtocolShape {
$closeObjectExplorerSession(handle: number, closeSessionInfo: sqlops.ObjectExplorerCloseSessionInfo): Thenable<sqlops.ObjectExplorerCloseSessionResponse> { throw ni(); }
$findNodes(handle: number, findNodesInfo: sqlops.FindNodesInfo): Thenable<sqlops.ObjectExplorerFindNodesResponse> { throw ni(); }
/**
* Tasks
*/
@@ -498,4 +500,5 @@ export interface MainThreadObjectExplorerShape extends IDisposable {
$setSelected(connectionId: string, nodePath: string, selected: boolean, clearOtherSelections?: boolean): Thenable<void>;
$getChildren(connectionId: string, nodePath: string): Thenable<sqlops.NodeInfo[]>;
$isExpanded(connectionId: string, nodePath: string): Thenable<boolean>;
$findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<sqlops.NodeInfo[]>;
}