diff options
author | Victor Roldan Betancort | 2010-01-12 11:58:03 +0000 |
---|---|---|
committer | Victor Roldan Betancort | 2010-01-12 11:58:03 +0000 |
commit | b530162c2ede27c87bac2d09daf045acfecccc50 (patch) | |
tree | a4606a5a30c44173e30d198d7d8ff106db60dc2d /plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java | |
parent | 96f64df9f09c6a16193f957522bf76af7bb0a3f7 (diff) | |
download | cdo-b530162c2ede27c87bac2d09daf045acfecccc50.tar.gz cdo-b530162c2ede27c87bac2d09daf045acfecccc50.tar.xz cdo-b530162c2ede27c87bac2d09daf045acfecccc50.zip |
[DB] Chunk reading for multiple chunks fail
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java index 04ac422b6c..2b98d4bdee 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreChunkReader.java @@ -8,6 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation * Stefan Winkler - Bug 283998: [DB] Chunk reading for multiple chunks fails + * Victor Roldan Betancort - Bug 283998: [DB] Chunk reading for multiple chunks fails */ package org.eclipse.emf.cdo.server.internal.db; @@ -31,8 +32,6 @@ public class DBStoreChunkReader extends StoreChunkReader implements IDBStoreChun private StringBuilder builder = new StringBuilder(); - private boolean firstChunk = true; - public DBStoreChunkReader(DBStoreAccessor accessor, CDORevision revision, EStructuralFeature feature) { super(accessor, revision, feature); @@ -51,18 +50,10 @@ public class DBStoreChunkReader extends StoreChunkReader implements IDBStoreChun public void addSimpleChunk(int index) { super.addSimpleChunk(index); - if (firstChunk) - { - builder.append(" AND ("); //$NON-NLS-1$ - firstChunk = false; - } - else - { - builder.append(" OR "); //$NON-NLS-1$ - } + prepareAddition(); builder.append(CDODBSchema.LIST_IDX); - builder.append("="); //$NON-NLS-1$ + builder.append('='); builder.append(index); } @@ -70,15 +61,7 @@ public class DBStoreChunkReader extends StoreChunkReader implements IDBStoreChun public void addRangedChunk(int fromIndex, int toIndex) { super.addRangedChunk(fromIndex, toIndex); - if (firstChunk) - { - builder.append(" AND ("); //$NON-NLS-1$ - firstChunk = false; - } - else - { - builder.append(" OR "); //$NON-NLS-1$ - } + prepareAddition(); builder.append(CDODBSchema.LIST_IDX); builder.append(" BETWEEN "); //$NON-NLS-1$ @@ -90,13 +73,22 @@ public class DBStoreChunkReader extends StoreChunkReader implements IDBStoreChun public List<Chunk> executeRead() { List<Chunk> chunks = getChunks(); - - if (!firstChunk) - { // at least one chunk queried -> close parantheses. - builder.append(")"); //$NON-NLS-1$ + if (chunks.size() > 1) + { + builder.insert(0, '('); + builder.append(')'); } referenceMapping.readChunks(this, chunks, builder.toString()); return chunks; } + + private void prepareAddition() + { + // If not empty, a chunk has been already added, and the next condition needs to be OR-ed + if (builder.length() > 0) + { + builder.append(" OR "); //$NON-NLS-1$ + } + } } |