diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 74b9fa62..9c978d71 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1723,6 +1723,10 @@ Player characters not simulated at macro level Macro simulation inventory utilities Build structure goal properly working from macro sim Repairability check when repairing structure +Fix viewport loading +Database warning handling +In memory database support +Fix test utils creating characters diff --git a/saves/testscene1/central.db b/saves/testscene1/central.db deleted file mode 100644 index 5034033f..00000000 Binary files a/saves/testscene1/central.db and /dev/null differ diff --git a/saves/testscene1/central.sqlite b/saves/testscene1/central.sqlite new file mode 100644 index 00000000..6f1881e0 Binary files /dev/null and b/saves/testscene1/central.sqlite differ diff --git a/src/main/java/electrosphere/engine/loadingthreads/ViewportLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ViewportLoading.java index a9b6a056..cd013fc1 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ViewportLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ViewportLoading.java @@ -15,6 +15,7 @@ import electrosphere.net.parser.net.message.TerrainMessage; import electrosphere.net.server.player.Player; import electrosphere.renderer.ui.elements.Window; import electrosphere.server.db.DatabaseController; +import electrosphere.server.db.DatabaseUtils; /** * Loads the viewport @@ -41,7 +42,7 @@ public class ViewportLoading { // //connect client to server LoggerInterface.loggerEngine.INFO("run server: " + Globals.RUN_SERVER + " run client: " + Globals.RUN_CLIENT); - Globals.dbController = new DatabaseController(); + ViewportLoading.initInMemoryDB(); LoadingUtils.initAuthenticationManager(true); Globals.clientUsername = "leveleditor"; Globals.clientPassword = AuthenticationManager.getHashedString("leveleditor"); @@ -79,4 +80,13 @@ public class ViewportLoading { ClientLoading.loadViewport(params); } + /** + * Initializes an in-memory db + */ + private static void initInMemoryDB(){ + Globals.dbController = new DatabaseController(); + Globals.dbController.connect(DatabaseController.IN_MEMORY_PATH); + DatabaseUtils.runScript(Globals.dbController,"createTables.sql"); + } + } diff --git a/src/main/java/electrosphere/server/db/DatabaseController.java b/src/main/java/electrosphere/server/db/DatabaseController.java index 6b614d50..1dd93efb 100644 --- a/src/main/java/electrosphere/server/db/DatabaseController.java +++ b/src/main/java/electrosphere/server/db/DatabaseController.java @@ -6,6 +6,7 @@ import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.SQLWarning; import java.util.Properties; /** @@ -17,6 +18,11 @@ public class DatabaseController { * file extension for allowed database files to open */ public static final String FILE_EXT = ".sqlite"; + + /** + * The in-memory path for database connections + */ + public static final String IN_MEMORY_PATH = ":memory:"; /** * The database connection @@ -39,8 +45,11 @@ public class DatabaseController { try { conn = DriverManager.getConnection(fullAddress, connectionProps); } catch (SQLException ex) { - LoggerInterface.loggerFileIO.ERROR("Failure to connect to db", ex); - ex.printStackTrace(); + String message = "" + + "Failure to connect to db\n" + + ex.getMessage() + + ""; + throw new Error(message); } } @@ -51,6 +60,9 @@ public class DatabaseController { * @return true if there is a result set, false if there is an update count or no result */ public boolean executePreparedStatement(String statementRaw, Object...arguments){ + if(conn == null){ + throw new Error("Connection not initialized!"); + } try { PreparedStatement statement = conn.prepareStatement(statementRaw); //Set arguments for prepared statements @@ -73,6 +85,10 @@ public class DatabaseController { } //actually execute boolean result = statement.execute(); + SQLWarning warning = statement.getWarnings(); + if(warning != null){ + LoggerInterface.loggerDB.WARNING(warning.toString()); + } statement.close(); return result; } catch (SQLException ex) { @@ -90,8 +106,7 @@ public class DatabaseController { public DatabaseResult executePreparedQuery(String statementRaw, Object...arguments){ DatabaseResult rVal = DatabaseResult.createQuery(statementRaw); if(conn == null){ - rVal.succeeded = false; - return rVal; + throw new Error("Connection not initialized!"); } try { PreparedStatement statement = conn.prepareStatement(statementRaw); @@ -116,6 +131,14 @@ public class DatabaseController { } //actually execute ResultSet results = statement.executeQuery(); + SQLWarning warning = results.getWarnings(); + if(warning != null){ + LoggerInterface.loggerDB.WARNING(warning.toString()); + } + warning = statement.getWarnings(); + if(warning != null){ + LoggerInterface.loggerDB.WARNING(warning.toString()); + } if(results != null){ rVal.addResultSet(results); } diff --git a/src/test/java/electrosphere/test/testutils/TestEngineUtils.java b/src/test/java/electrosphere/test/testutils/TestEngineUtils.java index 9034cd43..ae37feb7 100644 --- a/src/test/java/electrosphere/test/testutils/TestEngineUtils.java +++ b/src/test/java/electrosphere/test/testutils/TestEngineUtils.java @@ -14,9 +14,9 @@ import electrosphere.engine.loadingthreads.LoadingThread; import electrosphere.entity.Entity; import electrosphere.entity.types.creature.CreatureTemplate; import electrosphere.net.server.ServerConnectionHandler; -import electrosphere.net.server.protocol.CharacterProtocol; import electrosphere.server.datacell.utils.EntityLookupUtils; import electrosphere.server.macro.character.PlayerCharacterCreation; +import electrosphere.server.macro.character.Character; /** * Utils for testing the engine @@ -164,7 +164,8 @@ public class TestEngineUtils { CreatureTemplate creatureTemplate = CreatureTemplate.createDefault("human"); ServerConnectionHandler serverConnection = Globals.server.getFirstConnection(); serverConnection.setCreatureTemplate(creatureTemplate); - serverConnection.setCharacterId(CharacterProtocol.SPAWN_EXISTING_TEMPLATE); + Character chara = Globals.characterService.createCharacter(creatureTemplate, serverConnection.getPlayerId()); + serverConnection.setCharacterId(chara.getId()); PlayerCharacterCreation.spawnPlayerCharacter(serverConnection); }