Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-01-08 10:21:54 +0000
committerEike Stepper2011-01-08 10:21:54 +0000
commit208f5b89bfb9d1b8b11344b88090e18a2688f206 (patch)
treee197496f402dc1c373ad5120b8cf8a63a4080d71
parente8b48d7ea8e2eba2ccb1dd6b6b2d4b3a3cc0f0a4 (diff)
downloadcdo-208f5b89bfb9d1b8b11344b88090e18a2688f206.tar.gz
cdo-208f5b89bfb9d1b8b11344b88090e18a2688f206.tar.xz
cdo-208f5b89bfb9d1b8b11344b88090e18a2688f206.zip
[333794] [DB] ArrayIndexOutOfBoundsException when reading featuremaps through XyzMappingStrategyWithRanges
https://bugs.eclipse.org/bugs/show_bug.cgi?id=333794
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java52
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java29
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java7
3 files changed, 46 insertions, 42 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java
index f7c6daa8d3..f1ca350e40 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AuditFeatureMapTableMappingWithRanges.java
@@ -11,7 +11,7 @@
* Christopher Albert - Bug 254455: [DB] Support FeatureMaps bug 254455
* Victor Roldan Betancort - Bug 283998: [DB] Chunk reading for multiple chunks fails
* Lothar Werzinger - Bug 296440: [DB] Change RDB schema to improve scalability of to-many references in audit mode
- * Stefan Winkler - cleanup, merge and maintenance
+ * Stefan Winkler - cleanup, merge and maintenance
* Stefan Winkler - Bug 285426: [DB] Implement user-defined typeMapping support
* Stefan Winkler - Bug 329025: [DB] Support branching for range-based mapping strategy
*/
@@ -117,14 +117,15 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
*/
private Map<Long, ITypeMapping> typeMappings;
+ private List<DBType> dbTypes;
+
// --------- SQL strings - see initSQLStrings() -----------------
+
private String sqlSelectChunksPrefix;
private String sqlOrderByIndex;
- protected String sqlInsert;
-
- private List<DBType> dbTypes;
+ private String sqlInsert;
private String sqlRemoveEntry;
@@ -192,11 +193,6 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
table.addIndex(Type.NON_UNIQUE, tagField);
}
- public Collection<IDBTable> getDBTables()
- {
- return Arrays.asList(table);
- }
-
private void initSQLStrings()
{
String tableName = getTable().getName();
@@ -237,32 +233,29 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
builder = new StringBuilder("INSERT INTO "); //$NON-NLS-1$
builder.append(tableName);
builder.append("("); //$NON-NLS-1$
- builder.append(CDODBSchema.LIST_REVISION_ID);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.LIST_REVISION_VERSION_ADDED);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.LIST_REVISION_VERSION_REMOVED);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.LIST_IDX);
- builder.append(","); //$NON-NLS-1$
- builder.append(CDODBSchema.LIST_VALUE);
+ builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_TAG);
for (int i = 0; i < columnNames.size(); i++)
{
- builder.append(columnNames.get(i));
builder.append(", "); //$NON-NLS-1$
+ builder.append(columnNames.get(i));
}
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_TAG);
- builder.append(") VALUES (?, ?, ?, ?, ?, "); //$NON-NLS-1$
+ builder.append(") VALUES (?, ?, ?, ?, ?"); //$NON-NLS-1$
for (int i = 0; i < columnNames.size(); i++)
{
- builder.append("?, "); //$NON-NLS-1$
+ builder.append(", ?"); //$NON-NLS-1$
}
- builder.append("?, ?)"); //$NON-NLS-1$
+ builder.append(")"); //$NON-NLS-1$
sqlInsert = builder.toString();
// ----------------- remove current entry -----------------
@@ -363,6 +356,11 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
return dbTypes;
}
+ public Collection<IDBTable> getDBTables()
+ {
+ return Arrays.asList(table);
+ }
+
protected final IDBTable getTable()
{
return table;
@@ -1046,7 +1044,9 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
int stmtIndex = 1;
pstmt.setLong(stmtIndex++, CDOIDUtil.getLong(id));
pstmt.setInt(stmtIndex++, version);
+ pstmt.setNull(stmtIndex++, DBType.INTEGER.getCode()); // versionRemoved
pstmt.setInt(stmtIndex++, index);
+ pstmt.setLong(stmtIndex++, tag);
for (int i = 0; i < columnNames.size(); i++)
{
@@ -1060,8 +1060,6 @@ public class AuditFeatureMapTableMappingWithRanges extends BasicAbstractListTabl
}
}
- pstmt.setInt(stmtIndex++, index);
- pstmt.setLong(stmtIndex++, tag);
CDODBUtil.sqlUpdate(pstmt, true);
}
catch (SQLException e)
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java
index 6f8ecd4347..1c8a02da63 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/BranchingFeatureMapTableMappingWithRanges.java
@@ -237,30 +237,30 @@ public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractList
builder.append(tableName);
builder.append("("); //$NON-NLS-1$
builder.append(CDODBSchema.FEATUREMAP_REVISION_ID);
- builder.append(","); //$NON-NLS-1$
+ builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.FEATUREMAP_BRANCH);
- builder.append(","); //$NON-NLS-1$
+ builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.FEATUREMAP_VERSION_ADDED);
- builder.append(","); //$NON-NLS-1$
+ builder.append(", "); //$NON-NLS-1$
builder.append(CDODBSchema.FEATUREMAP_VERSION_REMOVED);
- builder.append(","); //$NON-NLS-1$
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_IDX);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(CDODBSchema.FEATUREMAP_TAG);
for (int i = 0; i < columnNames.size(); i++)
{
- builder.append(columnNames.get(i));
builder.append(", "); //$NON-NLS-1$
+ builder.append(columnNames.get(i));
}
- builder.append(CDODBSchema.FEATUREMAP_IDX);
- builder.append(", "); //$NON-NLS-1$
- builder.append(CDODBSchema.FEATUREMAP_TAG);
- builder.append(") VALUES (?, ?, ?, ?, "); //$NON-NLS-1$
+ builder.append(") VALUES (?, ?, ?, ?, ?, ?"); //$NON-NLS-1$
for (int i = 0; i < columnNames.size(); i++)
{
- builder.append("?, "); //$NON-NLS-1$
+ builder.append(", ?"); //$NON-NLS-1$
}
- builder.append("?, ?)"); //$NON-NLS-1$
+ builder.append(")"); //$NON-NLS-1$
sqlInsert = builder.toString();
// ----------------- remove current entry -----------------
@@ -1220,6 +1220,8 @@ public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractList
pstmt.setInt(stmtIndex++, branchId);
pstmt.setInt(stmtIndex++, version);
pstmt.setNull(stmtIndex++, DBType.INTEGER.getCode()); // versionRemoved
+ pstmt.setInt(stmtIndex++, index);
+ pstmt.setLong(stmtIndex++, tag);
for (int i = 0; i < columnNames.size(); i++)
{
@@ -1233,8 +1235,6 @@ public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractList
}
}
- pstmt.setInt(stmtIndex++, index);
- pstmt.setLong(stmtIndex++, tag);
CDODBUtil.sqlUpdate(pstmt, true);
}
catch (SQLException e)
@@ -1280,6 +1280,7 @@ public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractList
pstmt.setInt(stmtIndex++, versionAdded);
pstmt.setNull(stmtIndex++, versionRemoved);
pstmt.setInt(stmtIndex++, index);
+ pstmt.setLong(stmtIndex++, tag);
for (int i = 0; i < columnNames.size(); i++)
{
@@ -1293,8 +1294,6 @@ public class BranchingFeatureMapTableMappingWithRanges extends BasicAbstractList
}
}
- pstmt.setInt(stmtIndex++, index);
- pstmt.setLong(stmtIndex++, tag);
CDODBUtil.sqlUpdate(pstmt, true);
}
catch (SQLException e)
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java
index 807e292da7..5fe7df2d41 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java
@@ -197,8 +197,15 @@ public class BackupTest extends AbstractCDOTest
System.out.println(baos.toString());
}
+ /**
+ * TODO
+ * {@link org.eclipse.emf.cdo.server.IStoreAccessor.Raw#rawStore(org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision, org.eclipse.net4j.util.om.monitor.OMMonitor)
+ * rawStore()} is not adequate with range-based list mappings because they need deltas!
+ */
public void testImport() throws Exception
{
+ skipTest(getRepositoryConfig().getName().contains("range-based"));
+
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/res1");

Back to the top