/** * Specify the statement separator used in all SQL scripts, if a custom one. * <p>Defaults to {@code ";"} if not specified and falls back to {@code "\n"} * as a last resort; may be set to {@link ScriptUtils#EOF_STATEMENT_SEPARATOR} * to signal that each script contains a single statement without a separator. * @param separator the statement separator * @return {@code this}, to facilitate method chaining * @since 4.0.3 */ public EmbeddedDatabaseBuilder setSeparator(String separator) { this.databasePopulator.setSeparator(separator); return this; }
populator.setSeparator(mergedSqlConfig.getSeparator()); populator.setCommentPrefix(mergedSqlConfig.getCommentPrefix()); populator.setBlockCommentStartDelimiter(mergedSqlConfig.getBlockCommentStartDelimiter());
@Test public void scriptWithMultipleStatementsAndLongSeparator() throws Exception { databasePopulator.addScript(defaultSchema()); databasePopulator.addScript(resource("db-test-data-endings.sql")); databasePopulator.setSeparator("@@"); DatabasePopulatorUtils.execute(databasePopulator, db); assertThat(jdbcTemplate.queryForObject("select COUNT(NAME) from T_TEST where NAME='Keith'", Integer.class), equalTo(1)); assertThat(jdbcTemplate.queryForObject("select COUNT(NAME) from T_TEST where NAME='Dave'", Integer.class), equalTo(1)); }
@Test public void scriptWithMultipleStatementsAndWhitespaceSeparator() throws Exception { databasePopulator.addScript(defaultSchema()); databasePopulator.addScript(resource("db-test-data-whitespace.sql")); databasePopulator.setSeparator("/\n"); DatabasePopulatorUtils.execute(databasePopulator, db); assertThat(jdbcTemplate.queryForObject("select COUNT(NAME) from T_TEST where NAME='Keith'", Integer.class), equalTo(1)); assertThat(jdbcTemplate.queryForObject("select COUNT(NAME) from T_TEST where NAME='Dave'", Integer.class), equalTo(1)); }
@Test public void scriptWithMultipleStatementsAndMultipleNewlineSeparator() throws Exception { databasePopulator.addScript(defaultSchema()); databasePopulator.addScript(resource("db-test-data-multi-newline.sql")); databasePopulator.setSeparator("\n\n"); DatabasePopulatorUtils.execute(databasePopulator, db); assertThat(jdbcTemplate.queryForObject("select COUNT(NAME) from T_TEST where NAME='Keith'", Integer.class), equalTo(1)); assertThat(jdbcTemplate.queryForObject("select COUNT(NAME) from T_TEST where NAME='Dave'", Integer.class), equalTo(1)); }
/** * https://jira.spring.io/browse/SPR-15896 * * @since 5.0 */ @Test public void scriptWithH2Alias() throws Exception { databasePopulator.addScript(usersSchema()); databasePopulator.addScript(resource("db-test-data-h2-alias.sql")); // Set statement separator to double newline so that ";" is not // considered a statement separator within the source code of the // aliased function 'REVERSE'. databasePopulator.setSeparator("\n\n"); DatabasePopulatorUtils.execute(databasePopulator, db); String sql = "select REVERSE(first_name) from users where last_name='Brannen'"; assertThat(jdbcTemplate.queryForObject(sql, String.class), equalTo("maS")); }
@Test public void scriptWithoutStatementSeparator() throws Exception { databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR); databasePopulator.addScript(resource("drop-users-schema.sql")); databasePopulator.addScript(resource("users-schema-without-separator.sql")); databasePopulator.addScript(resource("users-data-without-separator.sql")); DatabasePopulatorUtils.execute(databasePopulator, db); assertUsersDatabaseCreated("Brannen"); }
/** * Specify the statement separator used in all SQL scripts, if a custom one. * <p>Defaults to {@code ";"} if not specified and falls back to {@code "\n"} * as a last resort; may be set to {@link ScriptUtils#EOF_STATEMENT_SEPARATOR} * to signal that each script contains a single statement without a separator. * @param separator the statement separator * @return {@code this}, to facilitate method chaining * @since 4.0.3 */ public EmbeddedDatabaseBuilder setSeparator(String separator) { this.databasePopulator.setSeparator(separator); return this; }
@Bean public DatabasePopulator databasePopulator() { ResourceDatabasePopulator schemaPopulator = new ResourceDatabasePopulator( new ClassPathResource("firebird-schema.sql")); schemaPopulator.setSeparator("!!"); DatabasePopulator dataPopulator = new ResourceDatabasePopulator( new ClassPathResource("firebird-data.sql")); return new CompositeDatabasePopulator(schemaPopulator, dataPopulator); }
private DatabasePopulator databaseStoreProcedurePopulator(DatabaseConfig databaseConfig) { final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); for(Resource schema : storedProcedureDefinitions){ populator.addScript(schema); } //stored procedure scripts (in snapshot-common-db) are delimited with the # sign //to get around this problem: http://stackoverflow.com/questions/15486516/using-springs-jdbcinitialize-database-how-do-i-run-a-script-with-a-stored-p populator.setSeparator("#"); return populator; }
private ResourceDatabasePopulator createPopulator(ClassPathResource script) { logger.info("Creating database populator using script '{}'", script.getPath()); ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSeparator(DB_TYPE_ORACLE.equals(dbType) ? "/" : ";"); populator.setIgnoreFailedDrops(true); populator.setSqlScriptEncoding(UTF_8.name()); populator.addScript(script); return populator; }
private ResourceDatabasePopulator createPopulator(ClassPathResource script) { logger.info("Creating database populator using script '{}'", script.getPath()); ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSeparator(DB_TYPE_ORACLE.equals(dbType) ? "/" : ";"); populator.setIgnoreFailedDrops(true); populator.setSqlScriptEncoding(UTF_8.name()); populator.addScript(script); return populator; }
private void applyScripts(String url) throws SQLException, IOException { log.info("Apply Scripts ..."); Connection connection = getConnection(url); DataSource ds = new SingleConnectionDataSource(connection, false); FileSystemScanner scanner = new FileSystemScanner(); for (String location : builder.locations) { File directory = new File(location); if (directory.exists() && directory.isDirectory()) { Resource[] resources = scanner.scanForResources(location, "", ".sql"); ResourceDatabasePopulator populator = new ResourceDatabasePopulator(resources); populator.setSeparator(builder.separator); populator.execute(ds); } else { // log not existing directory } } log.info("Scripts applied!"); }
/** * @param sqlFile the sql file to execute * @param shouldContinueOnError * @throws IOException */ protected void executeSQLResource(final String sqlFile, boolean shouldContinueOnError) throws IOException, SQLException { final Resource sqlResource = getSQLResource(sqlFolder, sqlFile); ResourceDatabasePopulator populate = new ResourceDatabasePopulator(); populate.setContinueOnError(shouldContinueOnError); populate.setIgnoreFailedDrops(true); populate.addScript(sqlResource); populate.setSeparator(getSeparator()); populate.execute(datasource); logger.info("Executed SQL script " + sqlResource.getURL().getFile()); }
/** * @param sqlFile the sql file to execute * @param shouldContinueOnError * @throws IOException */ protected void executeSQLResource(final String sqlFile, boolean shouldContinueOnError) throws IOException, SQLException { final Resource sqlResource = getSQLResource(sqlFolder, sqlFile); ResourceDatabasePopulator populate = new ResourceDatabasePopulator(); populate.setContinueOnError(shouldContinueOnError); populate.setIgnoreFailedDrops(true); populate.addScript(sqlResource); populate.setSeparator(getSeparator()); populate.execute(datasource); logger.info("Executed SQL script " + sqlResource.getURL().getFile()); }
@Bean @DependsOn("scriptsInitializer") public DataSourceInitializer createFunctionInitializer(final DataSource dataSource) { final DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSeparator("#"); populator.setSqlScriptEncoding(StandardCharsets.UTF_8.name()); populator.addScript(sqlCreateFunction); initializer.setDatabasePopulator(populator); initializer.setEnabled(isDatabaseInitializerEnabled()); return initializer; }
@Bean @DependsOn("scriptsInitializer") public DataSourceInitializer createFunctionInitializer(final DataSource dataSource) { final DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSeparator("#"); populator.setSqlScriptEncoding(StandardCharsets.UTF_8.name()); populator.addScript(sqlCreateFunction); initializer.setDatabasePopulator(populator); initializer.setEnabled(isDatabaseInitializerEnabled()); return initializer; }
private void runScripts(List<Resource> resources, DataSource dataSource, DataSourceProperties dataSourceProperties) { if (resources.isEmpty()) { return; } ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setContinueOnError(dataSourceProperties.isContinueOnError()); populator.setSeparator(dataSourceProperties.getSeparator()); if (dataSourceProperties.getSqlScriptEncoding() != null) { populator.setSqlScriptEncoding(dataSourceProperties.getSqlScriptEncoding().name()); } for (Resource resource : resources) { populator.addScript(resource); } DatabasePopulatorUtils.execute(populator, dataSource); }
@Bean @DependsOn("scriptsInitializer") public DataSourceInitializer createFunctionInitializer(final DataSource dataSource) { final DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSeparator("#"); populator.setSqlScriptEncoding("UTF-8"); populator.addScript(sqlCreateFunction); initializer.setDatabasePopulator(populator); initializer.setEnabled(isDatabaseInitializerEnabled()); return initializer; }
private void runScripts(List<Resource> resources, DataSource dataSource) { if (resources.isEmpty()) { return; } ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setContinueOnError(configuration.isContinueOnError()); populator.setSeparator(configuration.getConfigPropertyValue(SpringDataSourceConfigProperties.SEPARATOR, ";")); String encoding = configuration.getConfigPropertyValue(SpringDataSourceConfigProperties.SQL_SCRIPT_ENCODING, null); if (encoding != null) { populator.setSqlScriptEncoding(encoding); } for (Resource resource : resources) { populator.addScript(resource); } DatabasePopulatorUtils.execute(populator, dataSource); }