extend the ListDatabasesRequest to allow more information to be returned (#10186)

* database detail

* revert sts change

* reuse databaseInfo interface
This commit is contained in:
Alan Ren
2020-04-28 13:32:19 -07:00
committed by GitHub
parent 7b6d24c3c6
commit 4ec281313f
7 changed files with 14 additions and 9 deletions

3
src/sql/azdata.d.ts vendored
View File

@@ -599,6 +599,7 @@ declare module 'azdata' {
// List Databases Request ---------------------------------------------------------------------- // List Databases Request ----------------------------------------------------------------------
export interface ListDatabasesResult { export interface ListDatabasesResult {
databaseNames: Array<string>; databaseNames: Array<string>;
databases?: Array<DatabaseInfo>;
} }
/** /**
@@ -725,7 +726,7 @@ declare module 'azdata' {
export interface MetadataProvider extends DataProvider { export interface MetadataProvider extends DataProvider {
getMetadata(connectionUri: string): Thenable<ProviderMetadata>; getMetadata(connectionUri: string): Thenable<ProviderMetadata>;
getDatabases(connectionUri: string): Thenable<string[]>; getDatabases(connectionUri: string): Thenable<string[] | DatabaseInfo[]>;
getTableInfo(connectionUri: string, metadata: ObjectMetadata): Thenable<ColumnMetadata[]>; getTableInfo(connectionUri: string, metadata: ObjectMetadata): Thenable<ColumnMetadata[]>;

View File

@@ -16,7 +16,7 @@ export interface IMetadataService {
getMetadata(connectionUri: string): Thenable<azdata.ProviderMetadata | undefined>; getMetadata(connectionUri: string): Thenable<azdata.ProviderMetadata | undefined>;
getDatabaseNames(connectionUri: string): Thenable<string[]>; getDatabases(connectionUri: string): Thenable<string[] | azdata.DatabaseInfo[]>;
getTableInfo(connectionUri: string, metadata: azdata.ObjectMetadata): Thenable<azdata.ColumnMetadata[] | undefined>; getTableInfo(connectionUri: string, metadata: azdata.ObjectMetadata): Thenable<azdata.ColumnMetadata[] | undefined>;
@@ -49,7 +49,7 @@ export class MetadataService implements IMetadataService {
return Promise.resolve(undefined); return Promise.resolve(undefined);
} }
public getDatabaseNames(connectionUri: string): Thenable<string[]> { public getDatabases(connectionUri: string): Thenable<string[] | azdata.DatabaseInfo[]> {
let providerId: string = this._connectionService.getProviderIdFromUri(connectionUri); let providerId: string = this._connectionService.getProviderIdFromUri(connectionUri);
if (providerId) { if (providerId) {
let provider = this._providers[providerId]; let provider = this._providers[providerId];

View File

@@ -210,7 +210,7 @@ export class MainThreadDataProtocol extends Disposable implements MainThreadData
getMetadata(connectionUri: string): Thenable<azdata.ProviderMetadata> { getMetadata(connectionUri: string): Thenable<azdata.ProviderMetadata> {
return self._proxy.$getMetadata(handle, connectionUri); return self._proxy.$getMetadata(handle, connectionUri);
}, },
getDatabases(connectionUri: string): Thenable<string[]> { getDatabases(connectionUri: string): Thenable<string[] | azdata.DatabaseInfo[]> {
return self._proxy.$getDatabases(handle, connectionUri); return self._proxy.$getDatabases(handle, connectionUri);
}, },
getTableInfo(connectionUri: string, metadata: azdata.ObjectMetadata): Thenable<azdata.ColumnMetadata[]> { getTableInfo(connectionUri: string, metadata: azdata.ObjectMetadata): Thenable<azdata.ColumnMetadata[]> {

View File

@@ -411,7 +411,7 @@ export class ExtHostDataProtocol extends ExtHostDataProtocolShape {
return this._resolveProvider<azdata.MetadataProvider>(handle).getMetadata(connectionUri); return this._resolveProvider<azdata.MetadataProvider>(handle).getMetadata(connectionUri);
} }
public $getDatabases(handle: number, connectionUri: string): Thenable<string[]> { public $getDatabases(handle: number, connectionUri: string): Thenable<string[] | azdata.DatabaseInfo[]> {
return this._resolveProvider<azdata.MetadataProvider>(handle).getDatabases(connectionUri); return this._resolveProvider<azdata.MetadataProvider>(handle).getDatabases(connectionUri);
} }

View File

@@ -113,7 +113,7 @@ export abstract class ExtHostDataProtocolShape {
*/ */
$getMetadata(handle: number, connectionUri: string): Thenable<azdata.ProviderMetadata> { throw ni(); } $getMetadata(handle: number, connectionUri: string): Thenable<azdata.ProviderMetadata> { throw ni(); }
$getDatabases(handle: number, connectionUri: string): Thenable<string[]> { throw ni(); } $getDatabases(handle: number, connectionUri: string): Thenable<string[] | azdata.DatabaseInfo[]> { throw ni(); }
$getTableInfo(handle: number, connectionUri: string, metadata: azdata.ObjectMetadata): Thenable<azdata.ColumnMetadata[]> { throw ni(); } $getTableInfo(handle: number, connectionUri: string, metadata: azdata.ObjectMetadata): Thenable<azdata.ColumnMetadata[]> { throw ni(); }

View File

@@ -27,6 +27,7 @@ import { ScrollbarVisibility } from 'vs/base/common/scrollable';
import { subscriptionToDisposable } from 'sql/base/browser/lifecycle'; import { subscriptionToDisposable } from 'sql/base/browser/lifecycle';
import { ObjectMetadataWrapper } from 'sql/workbench/contrib/dashboard/browser/widgets/explorer/objectMetadataWrapper'; import { ObjectMetadataWrapper } from 'sql/workbench/contrib/dashboard/browser/widgets/explorer/objectMetadataWrapper';
import { status, alert } from 'vs/base/browser/ui/aria/aria'; import { status, alert } from 'vs/base/browser/ui/aria/aria';
import { isStringArray } from 'vs/base/common/types';
@Component({ @Component({
selector: 'explorer-widget', selector: 'explorer-widget',
@@ -131,10 +132,13 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
))); )));
} else { } else {
const currentProfile = this._bootstrap.connectionManagementService.connectionInfo.connectionProfile; const currentProfile = this._bootstrap.connectionManagementService.connectionInfo.connectionProfile;
this._register(subscriptionToDisposable(this._bootstrap.metadataService.databaseNames.subscribe( this._register(subscriptionToDisposable(this._bootstrap.metadataService.databases.subscribe(
data => { data => {
// Handle the case where there is no metadata service // Handle the case where there is no metadata service
data = data || []; data = data || [];
if (!isStringArray(data)) {
data = data.map(item => item.options['name'] as string);
}
const profileData = data.map(d => { const profileData = data.map(d => {
const profile = new ConnectionProfile(this.capabilitiesService, currentProfile); const profile = new ConnectionProfile(this.capabilitiesService, currentProfile);
profile.databaseName = d; profile.databaseName = d;

View File

@@ -36,8 +36,8 @@ export class SingleConnectionMetadataService {
return Observable.fromPromise(this._metadataService.getMetadata(this._uri)); return Observable.fromPromise(this._metadataService.getMetadata(this._uri));
} }
get databaseNames(): Observable<string[]> { get databases(): Observable<string[] | DatabaseInfo[]> {
return Observable.fromPromise(this._metadataService.getDatabaseNames(this._uri)); return Observable.fromPromise(this._metadataService.getDatabases(this._uri));
} }
} }