Răsfoiți Sursa

Fixed problems with db install in UPDATE mode.

Fixed: Error because of already existing database.
Fixed: Error because of missing update folder in sql path.
HorridoJoho 4 ani în urmă
părinte
comite
3cf8f1f592

+ 36 - 33
src/main/java/com/l2jserver/cli/command/database/DatabaseInstallCommand.java

@@ -35,39 +35,40 @@ import picocli.CommandLine.Option;
 
 /**
  * Database install command.
+ * 
  * @author Zoey76
  * @version 1.0.2
  */
 @Command(name = "install")
 public class DatabaseInstallCommand extends AbstractCommand {
-	
+
 	@Option(names = "-sql", required = true, description = "SQL Files location")
 	private String path;
-	
+
 	@Option(names = "-url", description = "Database URL")
 	private String url;
-	
+
 	@Option(names = "-db", description = "Database Name")
 	private String name;
-	
+
 	@Option(names = "-u", description = "Database User")
 	private String user;
-	
+
 	@Option(names = "-p", description = "Database Password")
 	private String password;
-	
+
 	@Option(names = "-m", required = true, description = "Database installation mode")
 	private DatabaseInstallType mode;
-	
+
 	@Option(names = "-t", required = true, description = "Server Type")
 	private ServerType serverType;
-	
+
 	@Option(names = "-c", description = "Custom Tables")
 	private boolean customs;
-	
+
 	@Option(names = "-mods", description = "Mods Tables")
 	private boolean mods;
-	
+
 	@Override
 	public void run() {
 		// Validate files exists
@@ -76,55 +77,57 @@ public class DatabaseInstallCommand extends AbstractCommand {
 			System.err.println("The path does not exist!");
 			return;
 		}
-		
+
 		final AbstractDatabaseDAO databaseDAO = databaseDAO();
-		
-		databaseDAO.createDatabase();
-		
+
+		if (mode == DatabaseInstallType.FULL) {
+			databaseDAO.createDatabase();
+		}
+
 		databaseDAO.createDump();
-		
+
 		databaseDAO.updates(mode, sqlPath);
-		
+
 		databaseDAO.basic(sqlPath);
-		
+
 		if (customs) {
 			databaseDAO.custom(sqlPath);
 		}
-		
+
 		if (mods) {
 			databaseDAO.mods(sqlPath);
 		}
-		
+
 		System.out.println("Database installation complete.");
 	}
-	
+
 	private AbstractDatabaseDAO databaseDAO() {
 		switch (serverType) {
-			case GAME: {
-				overrideConfigs(Configuration.gameServer());
-				return new GameServerDatabaseDAO();
-			}
-			default:
-			case LOGIN: {
-				overrideConfigs(Configuration.loginServer());
-				return new LoginServerDatabaseDAO();
-			}
+		case GAME: {
+			overrideConfigs(Configuration.gameServer());
+			return new GameServerDatabaseDAO();
+		}
+		default:
+		case LOGIN: {
+			overrideConfigs(Configuration.loginServer());
+			return new LoginServerDatabaseDAO();
+		}
 		}
 	}
-	
+
 	private void overrideConfigs(Mutable databaseConfiguration) {
 		if (url != null) {
 			databaseConfiguration.setProperty("DatabaseURL", url);
 		}
-		
+
 		if (user != null) {
 			databaseConfiguration.setProperty("DatabaseUser", user);
 		}
-		
+
 		if (password != null) {
 			databaseConfiguration.setProperty("DatabasePassword", password);
 		}
-		
+
 		if (name != null) {
 			databaseConfiguration.setProperty("DatabaseName", name);
 		}

+ 26 - 23
src/main/java/com/l2jserver/cli/dao/AbstractDatabaseDAO.java

@@ -27,11 +27,12 @@ import com.l2jserver.cli.util.SQLFilter;
 
 /**
  * Database DAO.
+ * 
  * @author Zoey76
  * @version 1.0.0
  */
 public abstract class AbstractDatabaseDAO extends AbstractDAO {
-	
+
 	AbstractDatabaseDAO(ServerConfiguration server) {
 		super(server);
 	}
@@ -43,7 +44,7 @@ public abstract class AbstractDatabaseDAO extends AbstractDAO {
 			runSQLFiles(modsPath.listFiles(new SQLFilter()));
 		}
 	}
-	
+
 	public void custom(File sqlPath) {
 		final var customPath = new File(sqlPath, "custom");
 		if (customPath.exists()) {
@@ -51,35 +52,36 @@ public abstract class AbstractDatabaseDAO extends AbstractDAO {
 			runSQLFiles(customPath.listFiles(new SQLFilter()));
 		}
 	}
-	
+
 	public void basic(File sqlPath) {
 		System.out.println("Installing basic SQL scripts...");
 		runSQLFiles(sqlPath.listFiles(new SQLFilter()));
 	}
-	
+
 	protected void updates(DatabaseInstallType mode, String cleanup, File sqlPath) {
 		final var userPreferences = Preferences.userRoot();
 		final var updatePath = new File(sqlPath, "updates");
 		final var updatePreferences = getDatabase() + "_update";
-		
+
 		switch (mode) {
-			case FULL: {
-				System.out.println("Executing cleanup script...");
-				
-				runSQLFiles(new File(sqlPath, cleanup));
-				
-				if (updatePath.exists()) {
-					final var sb = new StringBuilder();
-					for (var sqlFile : updatePath.listFiles(new SQLFilter())) {
-						sb.append(sqlFile.getName() + ';');
-					}
-					userPreferences.put(updatePreferences, sb.toString());
+		case FULL: {
+			System.out.println("Executing cleanup script...");
+
+			runSQLFiles(new File(sqlPath, cleanup));
+
+			if (updatePath.exists()) {
+				final var sb = new StringBuilder();
+				for (var sqlFile : updatePath.listFiles(new SQLFilter())) {
+					sb.append(sqlFile.getName() + ';');
 				}
-				break;
+				userPreferences.put(updatePreferences, sb.toString());
 			}
-			case UPDATE: {
-				System.out.println("Installing update SQL scripts...");
-				final var updated = userPreferences.get(updatePreferences, "");
+			break;
+		}
+		case UPDATE: {
+			System.out.println("Installing update SQL scripts...");
+			final var updated = userPreferences.get(updatePreferences, "");
+			if (updatePath.exists()) {
 				for (var sqlFile : updatePath.listFiles(new SQLFilter())) {
 					if (!updated.contains(sqlFile.getName())) {
 						try {
@@ -93,15 +95,16 @@ public abstract class AbstractDatabaseDAO extends AbstractDAO {
 						userPreferences.put(updatePreferences, updated + sqlFile.getName() + ";");
 					}
 				}
-				break;
 			}
+			break;
+		}
 		}
 	}
-	
+
 	public void updates(DatabaseInstallType mode, File sqlPath) {
 		updates(mode, "cleanup/cleanup.sql", sqlPath);
 	}
-	
+
 	private void runSQLFiles(File... sqlFiles) {
 		for (var sqlFile : sqlFiles) {
 			try {