11import { getParsedIframeInfo , RPCs } from 'web'
22import { getAllRelevantTablesForSelectedDb , getRelevantTablesForSelectedDb , getTablesWithFields , validateTablesInDB } from './getDatabaseSchema' ;
3- import { getAllRelevantModelsForSelectedDb , getDatabaseInfo , getDatabases , getTableData } from './metabaseAPIHelpers' ;
3+ import { getAllRelevantModelsForSelectedDb , getDatabaseInfo , getDatabases , getTableData , handleEmpty } from './metabaseAPIHelpers' ;
44import { getAndFormatOutputTable , getSqlErrorMessage } from './operations' ;
55import { DashboardInfo } from './dashboard/types' ;
66import { getDashboardAppState } from './dashboard/appState' ;
@@ -116,13 +116,23 @@ export async function convertDOMtoStateSQLQueryV2(pageType: MetabasePageType, cu
116116 const isEmbedded = getParsedIframeInfo ( ) . isEmbedded
117117 const sqlQuery = get ( currentCard , 'dataset_query.native.query' , '' ) || ''
118118 const dbId = currentDBId
119- const limitedEntities = await getLimitedEntities ( sqlQuery , currentDBId ) ;
120- const selectedDatabaseInfo = dbId ? await getDatabaseInfo ( dbId ) : undefined ;
119+ const selectedDatabaseInfo = dbId ? await handleEmpty ( getDatabaseInfo ( dbId ) , {
120+ name : 'Unknown Database' ,
121+ description : '' ,
122+ id : dbId ,
123+ dialect : 'unknown' ,
124+ dbms_version : {
125+ flavor : 'unknown' ,
126+ version : 'unknown' ,
127+ semantic_version : [ 0 , 0 , 0 ]
128+ }
129+ } ) : undefined ;
130+ const limitedEntities = await handleEmpty ( getLimitedEntities ( sqlQuery , currentDBId ) , [ ] ) ;
121131 const sqlErrorMessage = await getSqlErrorMessage ( ) ;
122132 const appStateType = pageType === 'sql' ? MetabaseAppStateType . SQLEditor : MetabaseAppStateType . RandomPage ;
123133 let relevantTablesWithFields : FormattedTable [ ] = [ ]
124134 {
125- const dbTables = await getAllRelevantTablesForSelectedDb ( dbId || 0 )
135+ const dbTables = await handleEmpty ( getAllRelevantTablesForSelectedDb ( dbId || 0 ) , [ ] )
126136 const sqlTables = await getTablesFromSqlRegex ( sqlQuery )
127137 const defaultSchema = selectedDatabaseInfo ?. default_schema
128138 // Apply default schema to tables if needed
@@ -158,9 +168,19 @@ export async function convertDOMtoStateSQLQuery(currentDBId: number) {
158168 // const dbId = _.get(hashMetadata, 'dataset_query.database');
159169 const fullUrl = await RPCs . queryURL ( ) ;
160170 const url = new URL ( fullUrl ) . origin ;
161- const availableDatabases = ( await getDatabases ( ) ) ?. data ?. map ( ( { name } ) => name ) ;
171+ const availableDatabases = ( await handleEmpty ( getDatabases ( ) , { total : 0 , data : [ ] } ) ) ?. data ?. map ( ( { name } ) => name ) ;
162172 const dbId = currentDBId ;
163- const selectedDatabaseInfo = dbId ? await getDatabaseInfo ( dbId ) : undefined ;
173+ const selectedDatabaseInfo = dbId ? await handleEmpty ( getDatabaseInfo ( dbId ) , {
174+ name : 'Unknown Database' ,
175+ description : '' ,
176+ id : dbId ,
177+ dialect : 'unknown' ,
178+ dbms_version : {
179+ flavor : 'unknown' ,
180+ version : 'unknown' ,
181+ semantic_version : [ 0 , 0 , 0 ]
182+ }
183+ } ) : undefined ;
164184 const defaultSchema = selectedDatabaseInfo ?. default_schema ;
165185 let sqlQuery = await getCurrentQuery ( ) ;
166186 const appSettings = RPCs . getAppSettings ( ) ;
@@ -173,17 +193,17 @@ export async function convertDOMtoStateSQLQuery(currentDBId: number) {
173193 }
174194 } )
175195 }
176- let relevantTablesWithFields = await getTablesWithFields ( appSettings . tableDiff , appSettings . drMode , false , sqlTables , [ ] , dbId ) ;
196+ let relevantTablesWithFields = await handleEmpty ( getTablesWithFields ( appSettings . tableDiff , appSettings . drMode , false , sqlTables , [ ] , dbId ) , [ ] ) ;
177197 // add defaultSchema back to relevantTablesWithFields. kind of hacky but whatever
178198 relevantTablesWithFields = relevantTablesWithFields . map ( table => {
179199 if ( table . schema === undefined || table . schema === '' ) {
180200 table . schema = defaultSchema || 'unknown'
181201 }
182202 return table
183203 } )
184- const allModels = dbId ? await getAllRelevantModelsForSelectedDb ( dbId ) : [ ]
204+ const allModels = dbId ? await handleEmpty ( getAllRelevantModelsForSelectedDb ( dbId ) , [ ] ) : [ ]
185205 const relevantModels = await getSelectedAndRelevantModels ( sqlQuery || "" , appSettings . selectedModels , allModels )
186- const relevantModelsWithFields = await getModelsWithFields ( relevantModels )
206+ const relevantModelsWithFields = await handleEmpty ( getModelsWithFields ( relevantModels ) , [ ] )
187207 const allFormattedTables = [ ...relevantTablesWithFields , ...relevantModelsWithFields ]
188208 const tableContextYAML = getTableContextYAML ( allFormattedTables , null , appSettings . drMode ) ;
189209 sqlQuery = modifySqlForMetabaseModels ( sqlQuery || "" , relevantModels )
0 commit comments