@@ -287,67 +287,71 @@ public final void addTasksTo(
287287
288288 if (isAssessment ) {
289289 for (AssessmentQuery item : planner .generateAssessmentQueries ()) {
290- String formatString =
291- item .needsOverride
292- ? getOverrideableQuery (arguments , item .formatString , TABLE_STORAGE_METRICS )
293- : item .formatString ;
294- String whereCondition ;
295- // Check whether the overrides changed anything.
296- if (formatString .equals (item .formatString )) {
297- // Overrides either not applied or equal to default values.
298- whereCondition =
299- " WHERE deleted = FALSE AND schema_dropped IS NULL AND table_dropped IS NULL" ;
300- } else {
301- whereCondition = "" ;
302- }
303- // The condition is always passed to String.format. SHOW queries simply ignore it.
304- String query = String .format (formatString , ACCOUNT_USAGE_SCHEMA_NAME , whereCondition );
290+ String query = queryForAssessment (item , arguments );
305291 Task <?> task =
306292 new JdbcSelectTask (item .zipEntryName , query , TaskCategory .REQUIRED , TaskOptions .DEFAULT )
307293 .withHeaderTransformer (item .transformer ());
308294 out .add (task );
309295 }
310- } else {
311- if (!arguments .getDatabases ().isEmpty ()) {
312- TaskOptions taskOptions = TaskOptions .DEFAULT ;
313- for (String database : arguments .getDatabases ()) {
314- String formatString =
315- String .format (
316- "%s IN DATABASE %s" ,
317- SnowflakePlanner .SHOW_EXTERNAL_TABLES .formatString , databaseNameQuoted (database ));
318- addAssessmentQuery (
319- SnowflakePlanner .SHOW_EXTERNAL_TABLES .withFormatString (formatString ),
320- out ,
321- arguments ,
322- ACCOUNT_USAGE_SCHEMA_NAME ,
323- taskOptions );
324- // Next tasks will append to the same file.
325- taskOptions = taskOptions .withWriteMode (WriteMode .APPEND_EXISTING );
326- }
327- } else {
328- addAssessmentQuery (
329- SnowflakePlanner .SHOW_EXTERNAL_TABLES ,
330- out ,
331- arguments ,
332- ACCOUNT_USAGE_SCHEMA_NAME ,
333- TaskOptions .DEFAULT );
334- }
296+ return ;
297+ }
298+ ImmutableList <String > databases = arguments .getDatabases ();
299+
300+ if (databases .isEmpty ()) {
301+ AssessmentQuery query = SnowflakePlanner .SHOW_EXTERNAL_TABLES ;
302+ Task <?> task = convertAssessmentQuery (query , arguments , TaskOptions .DEFAULT );
303+ out .add (task );
304+ return ;
305+ }
306+
307+ TaskOptions taskOptions = TaskOptions .DEFAULT ;
308+
309+ for (String item : databases ) {
310+ String quotedName = databaseNameQuoted (item );
311+ AssessmentQuery baseQuery = SnowflakePlanner .SHOW_EXTERNAL_TABLES ;
312+
313+ String formatString = String .format ("%s IN DATABASE %s" , baseQuery .formatString , quotedName );
314+ AssessmentQuery query = baseQuery .withFormatString (formatString );
315+ Task <?> task = convertAssessmentQuery (query , arguments , taskOptions );
316+ out .add (task );
317+ // Next tasks will append to the same file.
318+ taskOptions = taskOptions .withWriteMode (WriteMode .APPEND_EXISTING );
319+ }
320+ }
321+
322+ private String queryForAssessment (AssessmentQuery item , ConnectorArguments arguments ) {
323+ MetadataView view = TABLE_STORAGE_METRICS ;
324+ String schema = ACCOUNT_USAGE_SCHEMA_NAME ;
325+ if (!item .needsOverride ) {
326+ return item .substitute (schema , "" );
327+ }
328+
329+ ConnectorProperty propertyQuery = PropertyAction .QUERY .toProperty (view );
330+ String overrideQuery = arguments .getDefinition (propertyQuery );
331+ if (overrideQuery != null ) {
332+ return String .format (overrideQuery , schema , "" );
335333 }
334+
335+ ConnectorProperty propertyWhere = PropertyAction .WHERE .toProperty (view );
336+ String overrideWhere = arguments .getDefinition (propertyWhere );
337+ if (overrideWhere != null ) {
338+ return item .substitute (schema , overrideWhere );
339+ }
340+
341+ String whereCondition =
342+ " WHERE deleted = FALSE AND schema_dropped IS NULL AND table_dropped IS NULL" ;
343+ return item .substitute (schema , whereCondition );
336344 }
337345
338- private void addAssessmentQuery (
346+ private Task <?> convertAssessmentQuery (
339347 @ Nonnull AssessmentQuery item ,
340- @ Nonnull List <? super Task <?>> out ,
341348 @ Nonnull ConnectorArguments arguments ,
342- @ Nonnull String AU ,
343349 @ Nonnull TaskOptions taskOptions ) {
344350 String formatString = overrideFormatString (item , arguments );
345- String query = String .format (formatString , AU , EMPTY_WHERE_CONDITION );
351+ String query = String .format (formatString , ACCOUNT_USAGE_SCHEMA_NAME , EMPTY_WHERE_CONDITION );
346352 String zipName = item .zipEntryName ;
347- Task <?> task =
348- new JdbcSelectTask (zipName , query , TaskCategory .REQUIRED , taskOptions )
349- .withHeaderTransformer (item .transformer ());
350- out .add (task );
353+ return new JdbcSelectTask (zipName , query , TaskCategory .REQUIRED , taskOptions )
354+ .withHeaderTransformer (item .transformer ());
351355 }
352356
353357 private String overrideFormatString (AssessmentQuery query , ConnectorArguments arguments ) {
0 commit comments