private void importScript(NamedReader namedReader, List<Exporter> exporters) throws Exception { BufferedReader reader = new BufferedReader(namedReader.getReader()); String[] statements = importSqlCommandExtractor.extractCommands(reader); if (statements != null) { for (String statement : statements) { if (statement != null) { String trimmedSql = statement.trim(); if (trimmedSql.endsWith(";")) { trimmedSql = trimmedSql.substring(0, statement.length() - 1); } if (!StringHelper.isEmpty(trimmedSql)) { try { for (Exporter exporter : exporters) { if (exporter.acceptsImportScripts()) { exporter.export(trimmedSql); } } } catch (Exception e) { throw new ImportScriptException( "Error during statement execution (file: '" + namedReader.getName() + "'): " + trimmedSql, e); } } } } } }
public void execute(Target output, Type type) { if ((outputFile == null && output == Target.NONE) || type == SchemaExport.Type.NONE) { return; } exceptions.clear(); LOG.runningHbm2ddlSchemaExport(); final List<NamedReader> importFileReaders = new ArrayList<NamedReader>(); for (String currentFile : importFiles.split(",")) { try { final String resourceName = currentFile.trim(); InputStream stream = ConfigHelper.getResourceAsStream(resourceName); importFileReaders.add(new NamedReader(resourceName, stream)); } catch (HibernateException e) { LOG.debugf("Import file not found: %s", currentFile); } } final List<Exporter> exporters = new ArrayList<Exporter>(); try { // prepare exporters // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (output.doScript()) { exporters.add(new ScriptExporter()); } if (outputFile != null) { exporters.add(new FileExporter(outputFile)); } if (output.doExport()) { exporters.add(new DatabaseExporter(connectionHelper, sqlExceptionHelper)); } // perform exporters // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (type.doDrop()) { perform(dropSQL, exporters); } if (type.doCreate()) { perform(createSQL, exporters); if (!importFileReaders.isEmpty()) { for (NamedReader namedReader : importFileReaders) { importScript(namedReader, exporters); } } } } catch (Exception e) { exceptions.add(e); LOG.schemaExportUnsuccessful(e); } finally { // release exporters // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (Exporter exporter : exporters) { try { exporter.release(); } catch (Exception ignore) { } } // release the named readers from import scripts for (NamedReader namedReader : importFileReaders) { try { namedReader.getReader().close(); } catch (Exception ignore) { } } LOG.schemaExportComplete(); } }