Commit 2e14765f authored by Luna Riegel's avatar Luna Riegel
Browse files

Feature: Implement DB configuration handling

parent 0423dc6a
...@@ -20,8 +20,9 @@ import java.io.File; ...@@ -20,8 +20,9 @@ import java.io.File;
public record EmbeddedDatabaseConfiguration(String databaseName, String databaseDirectory, int connectionPoolSize, public record EmbeddedDatabaseConfiguration(String databaseName, String databaseDirectory, int connectionPoolSize,
boolean inMemoryMode, boolean attemptFallback, boolean debugMode, boolean tempFileMode) { boolean inMemoryMode, boolean attemptFallback, boolean debugMode, boolean tempFileMode) {
private static final String IN_MEMORY_PREFIX= "jdbc:h2:mem"; private static final String IN_MEMORY_PREFIX= "mem:";
private static final String AUTO_SERVER_PARAMETER = ";AUTO_SERVER=TRUE"; private static final String AUTO_SERVER_PARAMETER = ";AUTO_SERVER=TRUE";
private static final String FILE_PREFIX = "file://";
/** /**
* Instantiates the default configuration for the embedded database. * Instantiates the default configuration for the embedded database.
*/ */
...@@ -40,7 +41,7 @@ public record EmbeddedDatabaseConfiguration(String databaseName, String database ...@@ -40,7 +41,7 @@ public record EmbeddedDatabaseConfiguration(String databaseName, String database
} }
public String getH2FileUrl(){ public String getH2FileUrl(){
return databaseDirectory + databaseName; return FILE_PREFIX + databaseDirectory + databaseName;
} }
public String getH2ParametersSuffix(){ public String getH2ParametersSuffix(){
......
...@@ -19,9 +19,12 @@ import org.h2gis.utilities.wrapper.DataSourceWrapper; ...@@ -19,9 +19,12 @@ import org.h2gis.utilities.wrapper.DataSourceWrapper;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InvalidClassException; import java.io.InvalidClassException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
...@@ -38,12 +41,23 @@ public class EmbeddedDatabaseHandler { ...@@ -38,12 +41,23 @@ public class EmbeddedDatabaseHandler {
private static final Logger logger = LogManager.getLogger(EmbeddedDatabaseHandler.class); private static final Logger logger = LogManager.getLogger(EmbeddedDatabaseHandler.class);
private final EmbeddedDatabaseConfiguration config; private final EmbeddedDatabaseConfiguration config;
private DataSourceWrapper dataSource; private DataSourceWrapper dataSource;
private File tempLoc = null;
public EmbeddedDatabaseHandler(EmbeddedDatabaseConfiguration dbConfig){ public EmbeddedDatabaseHandler(EmbeddedDatabaseConfiguration dbConfig){
config = dbConfig; config = dbConfig;
String jdbcUrl; String jdbcUrl;
try { try {
if (config.inMemoryMode()) {
jdbcUrl = createEmbeddedDataBase(config.getInMemoryH2Url());
} else if (config.tempFileMode()){
Path tmpDir = Files.createTempDirectory(config.databaseDirectory());
tmpDir.toFile().deleteOnExit();
String tempFileUrl = tmpDir.resolve(config.databaseName()).toFile().getAbsolutePath();
jdbcUrl = createEmbeddedDataBase(tempFileUrl);
tempLoc = new File(tempFileUrl);
} else {
jdbcUrl = createEmbeddedDataBase(config.getH2FileUrl()); jdbcUrl = createEmbeddedDataBase(config.getH2FileUrl());
}
logger.debug("1] {}",jdbcUrl); logger.debug("1] {}",jdbcUrl);
} catch (Exception e) { } catch (Exception e) {
...@@ -86,6 +100,10 @@ public class EmbeddedDatabaseHandler { ...@@ -86,6 +100,10 @@ public class EmbeddedDatabaseHandler {
} }
} }
public File getTempLoc(){
return this.tempLoc;
}
public void setupFeaturesTable() { public void setupFeaturesTable() {
try (Connection con = dataSource.getConnection()) { try (Connection con = dataSource.getConnection()) {
......
...@@ -24,7 +24,10 @@ import java.util.List; ...@@ -24,7 +24,10 @@ import java.util.List;
import static de.hft.stuttgart.citydoctor2.database.SerializationTest.assertCityObjectEquality; import static de.hft.stuttgart.citydoctor2.database.SerializationTest.assertCityObjectEquality;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
public class EmbeddedDataBaseHandlerTest { public class EmbeddedDataBaseHandlerTest {
...@@ -38,7 +41,26 @@ public class EmbeddedDataBaseHandlerTest { ...@@ -38,7 +41,26 @@ public class EmbeddedDataBaseHandlerTest {
fail(e.getMessage()); fail(e.getMessage());
} }
} }
//TODO: FIX Test failures
@Test
public void testTempFileConfiguration(){
EmbeddedDatabaseConfiguration tempFileconfig = new EmbeddedDatabaseConfiguration("database",
"inTempConfig",1, false,false,
false,true);
assertNull(handler.getTempLoc());
EmbeddedDatabaseHandler tempHandler = new EmbeddedDatabaseHandler(tempFileconfig);
assertTrue(tempHandler.getTempLoc().exists());
}
@Test
public void testInMemoryConfiguration(){
EmbeddedDatabaseConfiguration inMemoryConfig = new EmbeddedDatabaseConfiguration("database",
"irrelevant",1, true,false,
false,false);
EmbeddedDatabaseHandler memHandler = new EmbeddedDatabaseHandler(inMemoryConfig);
assertFalse(memHandler.getTempLoc().exists());
}
@Test @Test
public void testGetBboxIntersectingObjects() { public void testGetBboxIntersectingObjects() {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment