Browse Source

Verify support for H2 database aliases in SQL scripts

This commit introduces a test to demonstrate how to define an alias in
an SQL script executed against an embedded H2 database.

Issue: SPR-15896
pull/1508/head
Sam Brannen 7 years ago
parent
commit
4e81ee5fdf
  1. 4
      spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabasePopulatorTests.java
  2. 24
      spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/H2DatabasePopulatorTests.java
  3. 10
      spring-jdbc/src/test/resources/org/springframework/jdbc/datasource/init/db-test-data-h2-alias.sql

4
spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabasePopulatorTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -38,7 +38,7 @@ import static org.mockito.Mockito.*; @@ -38,7 +38,7 @@ import static org.mockito.Mockito.*;
*/
public abstract class AbstractDatabasePopulatorTests extends AbstractDatabaseInitializationTests {
private final ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
protected final ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
@Test

24
spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/H2DatabasePopulatorTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,8 +16,12 @@ @@ -16,8 +16,12 @@
package org.springframework.jdbc.datasource.init;
import org.junit.Test;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
/**
* @author Sam Brannen
* @since 4.0.3
@ -28,4 +32,22 @@ public class H2DatabasePopulatorTests extends AbstractDatabasePopulatorTests { @@ -28,4 +32,22 @@ public class H2DatabasePopulatorTests extends AbstractDatabasePopulatorTests {
return EmbeddedDatabaseType.H2;
}
/**
* 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"));
}
}

10
spring-jdbc/src/test/resources/org/springframework/jdbc/datasource/init/db-test-data-h2-alias.sql

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
DROP ALIAS IF EXISTS REVERSE;
-- REVERSE function borrowed from http://www.h2database.com/html/grammar.html#create_alias
CREATE ALIAS REVERSE AS $$
String reverse(String s) {
return new StringBuilder(s).reverse().toString();
}
$$;
INSERT INTO users(first_name, last_name) values('Sam', 'Brannen');
Loading…
Cancel
Save