diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java index d712d3eea80..e4550bddf11 100644 --- a/Mage.Common/src/main/java/mage/utils/MageVersion.java +++ b/Mage.Common/src/main/java/mage/utils/MageVersion.java @@ -1,5 +1,7 @@ package mage.utils; +import mage.util.JarVersion; + import java.io.Serializable; /** diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index c4516c3ccd2..93363d0a30a 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -10,9 +10,6 @@ import com.j256.ormlite.stmt.Where; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.support.DatabaseConnection; import com.j256.ormlite.table.TableUtils; -import java.io.File; -import java.sql.SQLException; -import java.util.*; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SetType; @@ -20,6 +17,10 @@ import mage.constants.SuperType; import mage.util.RandomUtil; import org.apache.log4j.Logger; +import java.io.File; +import java.sql.SQLException; +import java.util.*; + /** * @author North */ @@ -43,9 +44,10 @@ public enum CardRepository { } try { ConnectionSource connectionSource = new JdbcConnectionSource(JDBC_URL); - boolean obsolete = RepositoryUtil.isDatabaseObsolete(connectionSource, VERSION_ENTITY_NAME, CARD_DB_VERSION); - if (obsolete) { + boolean isObsolete = RepositoryUtil.isDatabaseObsolete(connectionSource, VERSION_ENTITY_NAME, CARD_DB_VERSION); + boolean isNewBuild = RepositoryUtil.isNewBuildRun(connectionSource, VERSION_ENTITY_NAME, CardRepository.class); // recreate db on new build + if (isObsolete || isNewBuild) { TableUtils.dropTable(connectionSource, CardInfo.class, true); } @@ -483,9 +485,7 @@ public enum CardRepository { DatabaseConnection conn = cardDao.getConnectionSource().getReadWriteConnection(); conn.executeStatement("shutdown compact", 0); } - } catch (SQLException ex) { - } } diff --git a/Mage/src/main/java/mage/cards/repository/DatabaseBuild.java b/Mage/src/main/java/mage/cards/repository/DatabaseBuild.java new file mode 100644 index 00000000000..9914b5246f8 --- /dev/null +++ b/Mage/src/main/java/mage/cards/repository/DatabaseBuild.java @@ -0,0 +1,33 @@ +package mage.cards.repository; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +/** + * @author JayDi85 + */ +@DatabaseTable(tableName = "build") +public class DatabaseBuild { + + @DatabaseField + protected String entity; + + @DatabaseField(columnName = "last_build") + protected String lastBuild; + + public String getEntity() { + return entity; + } + + public void setEntity(String entity) { + this.entity = entity; + } + + public String getLastBuild() { + return lastBuild; + } + + public void setLastBuild(String lastBuild) { + this.lastBuild = lastBuild; + } +} diff --git a/Mage/src/main/java/mage/cards/repository/ExpansionRepository.java b/Mage/src/main/java/mage/cards/repository/ExpansionRepository.java index b36b5cc9e90..fe53c4c32cc 100644 --- a/Mage/src/main/java/mage/cards/repository/ExpansionRepository.java +++ b/Mage/src/main/java/mage/cards/repository/ExpansionRepository.java @@ -8,16 +8,16 @@ import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.SelectArg; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; +import org.apache.log4j.Logger; + import java.io.File; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; -import org.apache.log4j.Logger; /** - * * @author North */ public enum ExpansionRepository { @@ -42,9 +42,10 @@ public enum ExpansionRepository { } try { ConnectionSource connectionSource = new JdbcConnectionSource(JDBC_URL); - boolean obsolete = RepositoryUtil.isDatabaseObsolete(connectionSource, VERSION_ENTITY_NAME, EXPANSION_DB_VERSION); - if (obsolete) { + boolean isObsolete = RepositoryUtil.isDatabaseObsolete(connectionSource, VERSION_ENTITY_NAME, EXPANSION_DB_VERSION); + boolean isNewBuild = RepositoryUtil.isNewBuildRun(connectionSource, VERSION_ENTITY_NAME, ExpansionRepository.class); // recreate db on new build + if (isObsolete || isNewBuild) { TableUtils.dropTable(connectionSource, ExpansionInfo.class, true); } @@ -93,9 +94,9 @@ public enum ExpansionRepository { // only with boosters and cards GenericRawResults setsList = expansionDao.queryRaw( "select * from expansion e " - + " where e.boosters = 1 " - + " and exists(select (1) from card c where c.setcode = e.code) " - + " order by e.releasedate desc", + + " where e.boosters = 1 " + + " and exists(select (1) from card c where c.setcode = e.code) " + + " order by e.releasedate desc", expansionDao.getRawRowMapper()); List resList = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java b/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java index 15f4921f594..b794e8a4e79 100644 --- a/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java +++ b/Mage/src/main/java/mage/cards/repository/RepositoryUtil.java @@ -7,6 +7,8 @@ import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.SelectArg; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; +import mage.util.JarVersion; + import java.sql.SQLException; import java.util.List; @@ -33,6 +35,29 @@ public final class RepositoryUtil { return dbVersions.isEmpty(); } + public static boolean isNewBuildRun(ConnectionSource connectionSource, String entityName, Class clazz) throws SQLException { + // build time checks only for releases, not runtime (e.g. IDE debug) + String currentBuild = JarVersion.getBuildTime(clazz); + if (!JarVersion.isBuildTimeOk(currentBuild)) { + return false; + } + + TableUtils.createTableIfNotExists(connectionSource, DatabaseBuild.class); + Dao dbBuildDao = DaoManager.createDao(connectionSource, DatabaseBuild.class); + + QueryBuilder queryBuilder = dbBuildDao.queryBuilder(); + queryBuilder.where().eq("entity", new SelectArg(entityName)).and().eq("last_build", currentBuild); + List dbBuilds = dbBuildDao.query(queryBuilder.prepare()); + + if (dbBuilds.isEmpty()) { + DatabaseBuild dbBuild = new DatabaseBuild(); + dbBuild.setEntity(entityName); + dbBuild.setLastBuild(currentBuild); + dbBuildDao.create(dbBuild); + } + return dbBuilds.isEmpty(); + } + public static void updateVersion(ConnectionSource connectionSource, String entityName, long version) throws SQLException { TableUtils.createTableIfNotExists(connectionSource, DatabaseVersion.class); Dao dbVersionDao = DaoManager.createDao(connectionSource, DatabaseVersion.class); diff --git a/Mage.Common/src/main/java/mage/utils/JarVersion.java b/Mage/src/main/java/mage/util/JarVersion.java similarity index 88% rename from Mage.Common/src/main/java/mage/utils/JarVersion.java rename to Mage/src/main/java/mage/util/JarVersion.java index 3ad1ce17b69..e79adbbc2f9 100644 --- a/Mage.Common/src/main/java/mage/utils/JarVersion.java +++ b/Mage/src/main/java/mage/util/JarVersion.java @@ -1,4 +1,4 @@ -package mage.utils; +package mage.util; import org.apache.log4j.Logger; @@ -47,4 +47,11 @@ public class JarVersion { return JAR_BUILD_TIME_ERROR; } } + + public static boolean isBuildTimeOk(String buildTime) { + return buildTime != null + && !buildTime.isEmpty() + && !buildTime.equals(JAR_BUILD_TIME_ERROR) + && !buildTime.equals(JAR_BUILD_TIME_FROM_CLASSES); + } }