diff options
author | Eike Stepper | 2011-01-08 10:21:54 +0000 |
---|---|---|
committer | Eike Stepper | 2011-01-08 10:21:54 +0000 |
commit | 208f5b89bfb9d1b8b11344b88090e18a2688f206 (patch) | |
tree | e197496f402dc1c373ad5120b8cf8a63a4080d71 | |
parent | e8b48d7ea8e2eba2ccb1dd6b6b2d4b3a3cc0f0a4 (diff) | |
download | cdo-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
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"); |