Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 47e63feb1 -> 676b6a891 refs/heads/cassandra-3.9 ae816cb84 -> 02ebf875b refs/heads/trunk e9132b29a -> 0565690de
Fix encoding of cell names for super columns (CASSANDRA-12235 follow-up) patch by Sylvain Lebresne; reviewed by Aleksey Yeschenko for CASSANDRA-12335 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/676b6a89 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/676b6a89 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/676b6a89 Branch: refs/heads/cassandra-3.0 Commit: 676b6a891d110cbbc5278a0fe06c4d937648ddea Parents: 47e63fe Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Fri Aug 5 09:36:09 2016 +0200 Committer: Aleksey Yeschenko <alek...@apache.org> Committed: Mon Aug 8 18:40:31 2016 +0100 ---------------------------------------------------------------------- .../org/apache/cassandra/db/LegacyLayout.java | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/676b6a89/src/java/org/apache/cassandra/db/LegacyLayout.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/LegacyLayout.java b/src/java/org/apache/cassandra/db/LegacyLayout.java index 3feb1f4..1dd4c5d 100644 --- a/src/java/org/apache/cassandra/db/LegacyLayout.java +++ b/src/java/org/apache/cassandra/db/LegacyLayout.java @@ -264,6 +264,8 @@ public abstract class LegacyLayout // We use comparator.size() rather than clustering.size() because of static clusterings int clusteringSize = metadata.comparator.size(); int size = clusteringSize + (metadata.isDense() ? 0 : 1) + (collectionElement == null ? 0 : 1); + if (metadata.isSuper()) + size = clusteringSize + 1; ByteBuffer[] values = new ByteBuffer[size]; for (int i = 0; i < clusteringSize; i++) { @@ -282,10 +284,23 @@ public abstract class LegacyLayout values[i] = v; } - if (!metadata.isDense()) - values[clusteringSize] = columnName; - if (collectionElement != null) - values[clusteringSize + 1] = collectionElement; + if (metadata.isSuper()) + { + // We need to set the "column" (in thrift terms) name, i.e. the value corresponding to the subcomparator. + // What it is depends if this a cell for a declared "static" column or a "dynamic" column part of the + // super-column internal map. + assert columnName != null; // This should never be null for supercolumns, see decodeForSuperColumn() above + values[clusteringSize] = columnName.equals(CompactTables.SUPER_COLUMN_MAP_COLUMN) + ? collectionElement + : columnName; + } + else + { + if (!metadata.isDense()) + values[clusteringSize] = columnName; + if (collectionElement != null) + values[clusteringSize + 1] = collectionElement; + } return CompositeType.build(isStatic, values); }