Author: vmassol
Date: 2008-01-29 12:20:47 +0100 (Tue, 29 Jan 2008)
New Revision: 7150
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
Log:
XWIKI-2044: Modify the database migrator that aligns RCS Diffs data so that it
can be executed even after the migrator that removes RCS data from the document
table has executed
* Made it work with all Databases (was only working with MySQL)
* Improved message logs
* Fixed migration forcing
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
2008-01-29 10:47:34 UTC (rev 7149)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
2008-01-29 11:20:47 UTC (rev 7150)
@@ -200,7 +200,7 @@
continue;
}
if (migrator.getVersion().compareTo(curversion) >= 0) {
- XWikiMigration migration = new XWikiMigration(migrator,
true);
+ XWikiMigration migration = new XWikiMigration(migrator,
false);
neededMigrations.put(migrator.getVersion(), migration);
}
}
@@ -213,8 +213,10 @@
LOG.info("List of migrations that will be executed:");
for (Iterator it = neededMigrationsAsCollection.iterator();
it.hasNext();) {
XWikiMigration migration = (XWikiMigration) it.next();
- LOG.info(" " + migration.migrator.getName() + " - " +
migration.migrator.getDescription()
- + (migration.isForced ? " (forced)" : ""));
+ if (migration.isForced ||
migration.migrator.shouldExecute(this.startupVersion)) {
+ LOG.info(" " + migration.migrator.getName() + " - " +
migration.migrator.getDescription()
+ + (migration.isForced ? " (forced)" : ""));
+ }
}
} else {
LOG.info("No storage migration required since current version
is [" + curversion.toString() + "]");
@@ -248,13 +250,18 @@
XWikiDBVersion curversion = getDBVersion(context);
for (Iterator it = migrations.iterator(); it.hasNext();) {
XWikiMigration migration = (XWikiMigration) it.next();
- if (LOG.isInfoEnabled()) {
- LOG.info("Running migration [" + migration.migrator.getName()
+ "] with version ["
- + migration.migrator.getVersion() + "]");
- }
if (migration.isForced ||
migration.migrator.shouldExecute(this.startupVersion)) {
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Running migration [" +
migration.migrator.getName() + "] with version ["
+ + migration.migrator.getVersion() + "]");
+ }
migration.migrator.migrate(this, context);
+ } else {
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Skipping uneeded migration [" +
migration.migrator.getName() + "] with version ["
+ + migration.migrator.getVersion() + "]");
+ }
}
if (migration.migrator.getVersion().compareTo(curversion) > 0) {
@@ -263,6 +270,7 @@
LOG.info("New storage version is now [" +
getDBVersion(context) + "]");
}
}
+
}
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
2008-01-29 10:47:34 UTC (rev 7149)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
2008-01-29 11:20:47 UTC (rev 7150)
@@ -24,17 +24,18 @@
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
+import org.hibernate.Query;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.doc.rcs.XWikiRCSNodeContent;
+import com.xpn.xwiki.doc.rcs.XWikiRCSNodeId;
+import com.xpn.xwiki.doc.rcs.XWikiPatch;
import com.xpn.xwiki.store.migration.XWikiDBVersion;
import com.xpn.xwiki.store.XWikiHibernateBaseStore;
import com.xpn.xwiki.store.XWikiHibernateVersioningStore;
-import java.sql.Statement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.PreparedStatement;
+import java.util.Iterator;
/**
* Migration for XWIKI1878: Fix xwikircs table isdiff data not matching RCS
state of some revisions (when the state
@@ -93,34 +94,34 @@
public Object doInHibernate(Session session) throws
HibernateException, XWikiException
{
try {
- Statement stmt = session.connection().createStatement();
- ResultSet rs;
- try {
- rs = stmt.executeQuery("select xwikircs.XWR_DOCID,
xwikircs.XWR_VERSION1, xwikircs.XWR_VERSION2, xwikidoc.XWD_FULLNAME from
xwikircs, xwikidoc where xwikidoc.XWD_ID = xwikircs.XWR_DOCID and XWR_ISDIFF =
b'1' and XWR_PATCH like '<?xml%'");
- } catch (SQLException e) {
- // Means the xwikircs table doesn't exist which isn't
normal.
- throw new
XWikiException(XWikiException.MODULE_XWIKI_STORE,
- XWikiException.ERROR_XWIKI_STORE_MIGRATION,
"Failed to get RCS data", e);
- }
+ Query query = session.createQuery("select rcs.id,
rcs.patch, doc.fullName "
+ + "from XWikiDocument as doc, XWikiRCSNodeContent as
rcs where "
+ + "doc.id = rcs.id.docId and rcs.patch.diff = true and
rcs.patch.content like '<?xml%'");
+ Iterator it = query.list().iterator();
+
Transaction originalTransaction =
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).getTransaction(context);
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setSession(null,
context);
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setTransaction(null,
context);
- PreparedStatement updateStatement =
session.connection().prepareStatement("update xwikircs set XWR_ISDIFF = b'0'
where XWR_DOCID=? and XWR_VERSION1=? and XWR_VERSION2=?");
- while (rs.next()) {
+ while (it.hasNext()) {
+ Object[] result = (Object[]) it.next();
if (LOG.isInfoEnabled()) {
- LOG.info("Fixing document [" + rs.getString(4) +
"]...");
+ LOG.info("Fixing document [" + result[2] + "]...");
}
- updateStatement.setLong(1, rs.getLong(1));
- updateStatement.setInt(2, rs.getInt(2));
- updateStatement.setInt(3, rs.getInt(3));
- updateStatement.executeUpdate();
+
+ // Reconstruct a XWikiRCSNodeContent object with
isDiff set to false and update it.
+ XWikiRCSNodeId nodeId = (XWikiRCSNodeId) result[0];
+ XWikiRCSNodeContent fixedNodeContent = new
XWikiRCSNodeContent(nodeId);
+ XWikiPatch patch = (XWikiPatch) result[1];
+ patch.setDiff(false);
+ fixedNodeContent.setPatch(patch);
+
+ session.update(fixedNodeContent);
}
- updateStatement.close();
- stmt.close();
+
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setSession(session,
context);
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setTransaction(originalTransaction,
context);
- } catch (SQLException e) {
+ } catch (Exception e) {
throw new XWikiException(XWikiException.MODULE_XWIKI_STORE,
XWikiException.ERROR_XWIKI_STORE_MIGRATION, getName()
+ " migration failed", e);
}
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications