Source:
<code>public static CleanableFile openCleanableFile( String sql, SQLFirehoseDatabaseConnector sqlFirehoseDatabaseConnector, ObjectMapper objectMapper, boolean foldCase, File tempFile ) throws IOException { <START> Preconditions.checkNotNull(sqlFirehoseDatabaseConnector, "SQL Metadata Connector not configured!"); <END> try (FileOutputStream fos = new FileOutputStream(tempFile)) { final JsonGenerator jg = objectMapper.getFactory().createGenerator(fos); sqlFirehoseDatabaseConnector.retryWithHandle( (handle) -> { ResultIterator<Map<String, Object>> resultIterator = handle.createQuery( sql ).map( (index, r, ctx) -> { Map<String, Object> resultRow = foldCase ? new CaseFoldedMap() : new HashMap<>(); ResultSetMetaData resultMetadata; try { resultMetadata = r.getMetaData(); } catch (SQLException e) { throw new ResultSetException("Unable to obtain metadata from result set", e, ctx); } try { for (int i = 1; i <= resultMetadata.getColumnCount(); i++) { String key = resultMetadata.getColumnName(i); String alias = resultMetadata.getColumnLabel(i); Object value = r.getObject(i); resultRow.put(alias != null ? alias : key, value); } } catch (SQLException e) { throw new ResultSetException("Unable to access specific metadata from " + "result set metadata", e, ctx); } return resultRow; } ).iterator(); jg.writeStartArray(); while (resultIterator.hasNext()) { jg.writeObject(resultIterator.next()); } jg.writeEndArray(); jg.close(); return null; }, (exception) -> { final boolean isStatementException = exception instanceof StatementException || (exception instanceof CallbackFailedException && exception.getCause() instanceof StatementException); return sqlFirehoseDatabaseConnector.isTransientException(exception) && !(isStatementException); } ); } return new CleanableFile() { @Override public File file() { return tempFile; } @Override public void close() { if (!tempFile.delete()) { LOG.warn("Failed to remove file[%s]", tempFile.getAbsolutePath()); } } }; }</code><technical_language>Is this possible? annotations this NonNull If this null, I checked constructor - right now, is possiblilty create temp files cleaned if exception is thrown this line</technical_language>

Target:
public static CleanableFile openCleanableFile( String sql, SQLFirehoseDatabaseConnector sqlFirehoseDatabaseConnector, ObjectMapper objectMapper, boolean foldCase, File tempFile ) throws IOException { try (FileOutputStream fos = new FileOutputStream(tempFile); final JsonGenerator jg = objectMapper.getFactory().createGenerator(fos);) { sqlFirehoseDatabaseConnector.retryWithHandle( (handle) -> { ResultIterator<Map<String, Object>> resultIterator = handle.createQuery( sql ).map( (index, r, ctx) -> { Map<String, Object> resultRow = foldCase ? new CaseFoldedMap() : new HashMap<>(); ResultSetMetaData resultMetadata; try { resultMetadata = r.getMetaData(); } catch (SQLException e) { throw new ResultSetException("Unable to obtain metadata from result set", e, ctx); } try { for (int i = 1; i <= resultMetadata.getColumnCount(); i++) { String key = resultMetadata.getColumnName(i); String alias = resultMetadata.getColumnLabel(i); Object value = r.getObject(i); resultRow.put(alias != null ? alias : key, value); } } catch (SQLException e) { throw new ResultSetException("Unable to access specific metadata from " + "result set metadata", e, ctx); } return resultRow; } ).iterator(); jg.writeStartArray(); while (resultIterator.hasNext()) { jg.writeObject(resultIterator.next()); } jg.writeEndArray(); jg.close(); return null; }, (exception) -> sqlFirehoseDatabaseConnector.isTransientException(exception) && !(SQLMetadataStorageActionHandler.isStatementException(exception)) ); return new CleanableFile() { @Override public File file() { return tempFile; } @Override public void close() { if (!tempFile.delete()) { LOG.warn("Failed to remove file[%s]", tempFile.getAbsolutePath()); } } }; } catch (Exception e) { if (!tempFile.delete()) { LOG.warn("Failed to remove file[%s]", tempFile.getAbsolutePath()); } throw new IOException(e); } }