@@ -14,13 +14,23 @@ import {
14
14
NODE_ID_DELIMITER ,
15
15
NodeType ,
16
16
NodeData ,
17
- DATA_DEFAULT_LAKEHOUSE_CONNECTION_NAME ,
18
- DATA_DEFAULT_ATHENA_CONNECTION_NAME ,
19
- DATA_DEFAULT_IAM_CONNECTION_NAME ,
17
+ DATA_DEFAULT_LAKEHOUSE_CONNECTION_NAME_REGEXP ,
18
+ DATA_DEFAULT_ATHENA_CONNECTION_NAME_REGEXP ,
19
+ DATA_DEFAULT_IAM_CONNECTION_NAME_REGEXP ,
20
20
AWS_DATA_CATALOG ,
21
21
DatabaseObjects ,
22
+ NO_DATA_FOUND_MESSAGE ,
22
23
} from './types'
23
- import { getLabel , isLeafNode , getIconForNodeType , getTooltip , createColumnTreeItem , getColumnType } from './utils'
24
+ import {
25
+ getLabel ,
26
+ isLeafNode ,
27
+ getIconForNodeType ,
28
+ getTooltip ,
29
+ createColumnTreeItem ,
30
+ getColumnType ,
31
+ createErrorItem ,
32
+ } from './utils'
33
+ import { createPlaceholderItem } from '../../../shared/treeview/utils'
24
34
import { Column , Database , Table } from '@aws-sdk/client-glue'
25
35
import { ConnectionCredentialsProvider } from '../../auth/providers/connectionCredentialsProvider'
26
36
@@ -68,7 +78,9 @@ export class LakehouseNode implements TreeNode {
68
78
this . isLoading = false
69
79
this . logger . error ( `Failed to get children for node ${ this . data . id } : ${ ( err as Error ) . message } ` )
70
80
71
- return [ createErrorNode ( `${ this . id } ${ NODE_ID_DELIMITER } error` , err as Error , this ) ]
81
+ const errorMessage = ( err as Error ) . message
82
+ void vscode . window . showErrorMessage ( errorMessage )
83
+ return [ createErrorItem ( errorMessage , 'getChildren' , this . id ) as LakehouseNode ]
72
84
}
73
85
}
74
86
@@ -142,9 +154,9 @@ export function createLakehouseConnectionNode(
142
154
143
155
// Check if this is a default connection
144
156
const isDefaultConnection =
145
- connection . name . startsWith ( DATA_DEFAULT_LAKEHOUSE_CONNECTION_NAME ) ||
146
- connection . name . startsWith ( DATA_DEFAULT_ATHENA_CONNECTION_NAME ) ||
147
- connection . name . startsWith ( DATA_DEFAULT_IAM_CONNECTION_NAME )
157
+ DATA_DEFAULT_IAM_CONNECTION_NAME_REGEXP . test ( connection . name ) ||
158
+ DATA_DEFAULT_LAKEHOUSE_CONNECTION_NAME_REGEXP . test ( connection . name ) ||
159
+ DATA_DEFAULT_ATHENA_CONNECTION_NAME_REGEXP . test ( connection . name )
148
160
149
161
// Follow the reference pattern with Promise.allSettled
150
162
const [ awsDataCatalogResult , catalogsResult ] = await Promise . allSettled ( [
@@ -161,30 +173,24 @@ export function createLakehouseConnectionNode(
161
173
const errors : LakehouseNode [ ] = [ ]
162
174
163
175
if ( awsDataCatalogResult . status === 'rejected' ) {
164
- errors . push (
165
- createErrorNode (
166
- `${ node . id } ${ NODE_ID_DELIMITER } aws-catalog-error` ,
167
- awsDataCatalogResult . reason as Error ,
168
- node
169
- )
170
- )
176
+ const errorMessage = ( awsDataCatalogResult . reason as Error ) . message
177
+ void vscode . window . showErrorMessage ( errorMessage )
178
+ errors . push ( createErrorItem ( errorMessage , 'aws-data-catalog' , node . id ) as LakehouseNode )
171
179
}
172
180
173
181
if ( catalogsResult . status === 'rejected' ) {
174
- errors . push (
175
- createErrorNode (
176
- `${ node . id } ${ NODE_ID_DELIMITER } catalogs-error` ,
177
- catalogsResult . reason as Error ,
178
- node
179
- )
180
- )
182
+ const errorMessage = ( catalogsResult . reason as Error ) . message
183
+ void vscode . window . showErrorMessage ( errorMessage )
184
+ errors . push ( createErrorItem ( errorMessage , 'catalogs' , node . id ) as LakehouseNode )
181
185
}
182
186
183
187
const allNodes = [ ...awsDataCatalog , ...apiCatalogs , ...errors ]
184
- return allNodes . length > 0 ? allNodes : [ createEmptyNode ( ` ${ node . id } ${ NODE_ID_DELIMITER } empty` , node ) ]
188
+ return allNodes . length > 0 ? allNodes : [ createPlaceholderItem ( NO_DATA_FOUND_MESSAGE ) as LakehouseNode ]
185
189
} catch ( err ) {
186
190
logger . error ( `Failed to get Lakehouse catalogs: ${ ( err as Error ) . message } ` )
187
- throw err
191
+ const errorMessage = ( err as Error ) . message
192
+ void vscode . window . showErrorMessage ( errorMessage )
193
+ return [ createErrorItem ( errorMessage , 'lakehouse-catalogs' , node . id ) as LakehouseNode ]
188
194
}
189
195
}
190
196
)
@@ -391,7 +397,9 @@ function createCatalogNode(
391
397
)
392
398
} catch ( err ) {
393
399
logger . error ( `Failed to get databases for catalog ${ catalogId } : ${ ( err as Error ) . message } ` )
394
- throw err
400
+ const errorMessage = ( err as Error ) . message
401
+ void vscode . window . showErrorMessage ( errorMessage )
402
+ return [ createErrorItem ( errorMessage , 'catalog-databases' , node . id ) as LakehouseNode ]
395
403
}
396
404
}
397
405
)
@@ -459,10 +467,12 @@ function createDatabaseNode(
459
467
460
468
return containerNodes . length > 0
461
469
? containerNodes
462
- : [ createEmptyNode ( ` ${ node . id } ${ NODE_ID_DELIMITER } empty` , node ) ]
470
+ : [ createPlaceholderItem ( NO_DATA_FOUND_MESSAGE ) as LakehouseNode ]
463
471
} catch ( err ) {
464
472
logger . error ( `Failed to get tables for database ${ databaseName } : ${ ( err as Error ) . message } ` )
465
- throw err
473
+ const errorMessage = ( err as Error ) . message
474
+ void vscode . window . showErrorMessage ( errorMessage )
475
+ return [ createErrorItem ( errorMessage , 'database-tables' , node . id ) as LakehouseNode ]
466
476
}
467
477
}
468
478
)
@@ -559,27 +569,3 @@ function createContainerNode(
559
569
}
560
570
)
561
571
}
562
-
563
- /**
564
- * Creates an error node
565
- */
566
- function createErrorNode ( id : string , error : Error , parent ?: LakehouseNode ) : LakehouseNode {
567
- return new LakehouseNode ( {
568
- id,
569
- nodeType : NodeType . ERROR ,
570
- value : error ,
571
- parent,
572
- } )
573
- }
574
-
575
- /**
576
- * Creates an empty node
577
- */
578
- function createEmptyNode ( id : string , parent ?: LakehouseNode ) : LakehouseNode {
579
- return new LakehouseNode ( {
580
- id,
581
- nodeType : NodeType . EMPTY ,
582
- value : 'No catalogs found' ,
583
- parent,
584
- } )
585
- }
0 commit comments