cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ble...@apache.org
Subject [1/4] cassandra git commit: Refactor Restriction hierarchy
Date Fri, 15 Apr 2016 19:14:48 GMT
Repository: cassandra
Updated Branches:
  refs/heads/trunk dc569c9e0 -> 831bebdba


http://git-wip-us.apache.org/repos/asf/cassandra/blob/831bebdb/test/unit/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSetTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSetTest.java b/test/unit/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSetTest.java
deleted file mode 100644
index abbd36b..0000000
--- a/test/unit/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSetTest.java
+++ /dev/null
@@ -1,1919 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cassandra.cql3.restrictions;
-
-import java.nio.ByteBuffer;
-import java.util.*;
-
-import com.google.common.collect.Iterables;
-import org.junit.Test;
-
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
-import org.apache.cassandra.cql3.*;
-import org.apache.cassandra.cql3.Term.MultiItemTerminal;
-import org.apache.cassandra.cql3.statements.Bound;
-
-import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.Int32Type;
-import org.apache.cassandra.db.marshal.ReversedType;
-import org.apache.cassandra.utils.ByteBufferUtil;
-
-import static java.util.Arrays.asList;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public class PrimaryKeyRestrictionSetTest
-{
-    @Test
-    public void testBoundsAsClusteringWithNoRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC);
-
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-    }
-
-    /**
-     * Test 'clustering_0 = 1' with only one clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithOneEqRestrictionsAndOneClusteringColumn()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC);
-
-        ByteBuffer clustering_0 = ByteBufferUtil.bytes(1);
-        Restriction eq = newSingleEq(cfMetaData, 0, clustering_0);
-
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, clustering_0);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, clustering_0);
-    }
-
-    /**
-     * Test 'clustering_1 = 1' with 2 clustering columns
-     */
-    @Test
-    public void testBoundsAsClusteringWithOneEqRestrictionsAndTwoClusteringColumns()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer clustering_0 = ByteBufferUtil.bytes(1);
-        Restriction eq = newSingleEq(cfMetaData, 0, clustering_0);
-
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, clustering_0);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, clustering_0);
-    }
-
-    /**
-     * Test 'clustering_0 IN (1, 2, 3)' with only one clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithOneInRestrictionsAndOneClusteringColumn()
-    {
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        Restriction in = newSingleIN(cfMetaData, 0, value1, value2, value3);
-
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(in);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), true, value2);
-        assertStartBound(get(bounds, 2), true, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-        assertEndBound(get(bounds, 1), true, value2);
-        assertEndBound(get(bounds, 2), true, value3);
-    }
-
-    /**
-     * Test slice restriction (e.g 'clustering_0 > 1') with only one clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithSliceRestrictionsAndOneClusteringColumn()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        Restriction slice = newSingleSlice(cfMetaData, 0, Bound.START, false, value1);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.START, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.END, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.END, false, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.START, false, value1);
-        Restriction slice2 = newSingleSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value2);
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.START, true, value1);
-        slice2 = newSingleSlice(cfMetaData, 0, Bound.END, true, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value2);
-    }
-
-    /**
-     * Test slice restriction (e.g 'clustering_0 > 1') with only one descending clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithSliceRestrictionsAndOneDescendingClusteringColumn()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.DESC, Sort.DESC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        Restriction slice = newSingleSlice(cfMetaData, 0, Bound.START, false, value1);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.START, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.END, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.END, false, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.START, false, value1);
-        Restriction slice2 = newSingleSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-
-        slice = newSingleSlice(cfMetaData, 0, Bound.START, true, value1);
-        slice2 = newSingleSlice(cfMetaData, 0, Bound.END, true, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-    }
-
-    /**
-     * Test 'clustering_0 = 1 AND clustering_1 IN (1, 2, 3)'
-     */
-    @Test
-    public void testBoundsAsClusteringWithEqAndInRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        Restriction eq = newSingleEq(cfMetaData, 0, value1);
-        Restriction in = newSingleIN(cfMetaData, 1, value1, value2, value3);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(in);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value1);
-        assertStartBound(get(bounds, 1), true, value1, value2);
-        assertStartBound(get(bounds, 2), true, value1, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value1);
-        assertEndBound(get(bounds, 1), true, value1, value2);
-        assertEndBound(get(bounds, 2), true, value1, value3);
-    }
-
-    /**
-     * Test equal and slice restrictions (e.g 'clustering_0 = 0 clustering_1 > 1')
-     */
-    @Test
-    public void testBoundsAsClusteringWithEqAndSliceRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-
-        Restriction eq = newSingleEq(cfMetaData, 0, value3);
-
-        Restriction slice = newSingleSlice(cfMetaData, 1, Bound.START, false, value1);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value3, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value3);
-
-        slice = newSingleSlice(cfMetaData, 1, Bound.START, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value3, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value3);
-
-        slice = newSingleSlice(cfMetaData, 1, Bound.END, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value3, value1);
-
-        slice = newSingleSlice(cfMetaData, 1, Bound.END, false, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value3, value1);
-
-        slice = newSingleSlice(cfMetaData, 1, Bound.START, false, value1);
-        Restriction slice2 = newSingleSlice(cfMetaData, 1, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value3, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value3, value2);
-
-        slice = newSingleSlice(cfMetaData, 1, Bound.START, true, value1);
-        slice2 = newSingleSlice(cfMetaData, 1, Bound.END, true, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq).mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value3, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value3, value2);
-    }
-
-    /**
-     * Test '(clustering_0, clustering_1) = (1, 2)' with two clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiEqRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        Restriction eq = newMultiEq(cfMetaData, 0, value1, value2);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(eq);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-    }
-
-    /**
-     * Test '(clustering_0, clustering_1) IN ((1, 2), (2, 3))' with two clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiInRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        Restriction in = newMultiIN(cfMetaData, 0, asList(value1, value2), asList(value2, value3));
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(in);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), true, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-        assertEndBound(get(bounds, 1), true, value2, value3);
-    }
-
-    /**
-     * Test multi-column slice restrictions (e.g '(clustering_0) > (1)') with only one clustering column
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithOneClusteringColumn()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC);
-
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value2);
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value2);
-    }
-
-    /**
-     * Test multi-column slice restrictions (e.g '(clustering_0) > (1)') with only one clustering column in reverse
-     * order
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithOneDescendingClusteringColumn()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.DESC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-    }
-
-    /**
-     * Test multi-column slice restrictions (e.g '(clustering_0, clustering_1) > (1, 2)')
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithTwoClusteringColumn()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        // (clustering_0, clustering1) > (1, 2)
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        // (clustering_0, clustering1) >= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        // (clustering_0, clustering1) <= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-
-        // (clustering_0, clustering1) < (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-
-        // (clustering_0, clustering1) > (1, 2) AND (clustering_0) < (2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value2);
-
-        // (clustering_0, clustering1) >= (1, 2) AND (clustering_0, clustering1) <= (2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value2, value1);
-    }
-
-    /**
-     * Test multi-column slice restrictions with 2 descending clustering columns (e.g '(clustering_0, clustering_1) > (1, 2)')
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithTwoDescendingClusteringColumns()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.DESC, Sort.DESC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        // (clustering_0, clustering1) > (1, 2)
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-
-        // (clustering_0, clustering1) >= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-
-        // (clustering_0, clustering1) <= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        // (clustering_0, clustering1) < (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-
-        // (clustering_0, clustering1) > (1, 2) AND (clustering_0) < (2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-
-        // (clustering_0, clustering1) >= (1, 2) AND (clustering_0, clustering1) <= (2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value2, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-    }
-
-    /**
-     * Test multi-column slice restrictions with 1 descending clustering column and 1 ascending
-     * (e.g '(clustering_0, clustering_1) > (1, 2)')
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithOneDescendingAndOneAscendingClusteringColumns()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.DESC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        // (clustering_0, clustering1) > (1, 2)
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), true, value1);
-
-        // (clustering_0, clustering1) >= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), true, value1);
-
-        // (clustering_0, clustering1) <= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-        assertEmptyEnd(get(bounds, 1));
-
-        // (clustering_0, clustering1) < (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEmptyEnd(get(bounds, 1));
-
-        // (clustering_0, clustering1) > (1, 2) AND (clustering_0) < (2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), false, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), true, value1);
-
-        // (clustering_0) > (1) AND (clustering_0, clustering1) < (2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value2);
-        assertStartBound(get(bounds, 1), false, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value2, value1);
-        assertEndBound(get(bounds, 1), false, value1);
-
-        // (clustering_0, clustering1) >= (1, 2) AND (clustering_0, clustering1) <= (2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertStartBound(get(bounds, 0), true, value2);
-        assertStartBound(get(bounds, 1), false, value2);
-        assertStartBound(get(bounds, 2), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertEndBound(get(bounds, 0), true, value2, value1);
-        assertEndBound(get(bounds, 1), false, value1);
-        assertEndBound(get(bounds, 2), true, value1);
-    }
-
-    /**
-     * Test multi-column slice restrictions with 1 descending clustering column and 1 ascending
-     * (e.g '(clustering_0, clustering_1) > (1, 2)')
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithOneAscendingAndOneDescendingClusteringColumns()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.DESC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-
-        // (clustering_0, clustering1) > (1, 2)
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEmptyEnd(get(bounds, 1));
-
-        // (clustering_0, clustering1) >= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-        assertEmptyEnd(get(bounds, 1));
-
-        // (clustering_0, clustering1) <= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), true, value1);
-
-        // (clustering_0, clustering1) < (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), true, value1);
-
-        // (clustering_0, clustering1) > (1, 2) AND (clustering_0) < (2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), false, value2);
-
-        // (clustering_0, clustering1) >= (1, 2) AND (clustering_0, clustering1) <= (2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-        assertStartBound(get(bounds, 2), true, value2, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-        assertEndBound(get(bounds, 1), false, value2);
-        assertEndBound(get(bounds, 2), true, value2);
-    }
-
-    /**
-     * Test multi-column slice restrictions with 2 ascending clustering column and 2 descending
-     * (e.g '(clustering_0, clustering1, clustering_3, clustering4) > (1, 2, 3, 4)')
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithTwoAscendingAndTwoDescendingClusteringColumns()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC, Sort.DESC, Sort.DESC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        ByteBuffer value4 = ByteBufferUtil.bytes(4);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) > (1, 2, 3, 4)
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2, value3, value4);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2, value3, value4);
-        assertEmptyEnd(get(bounds, 1));
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2, clustering_3) > (2, 3, 4)
-        Restriction eq = newSingleEq(cfMetaData, 0, value1);
-        slice = newMultiSlice(cfMetaData, 1, Bound.START, false, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-        restrictions = restrictions.mergeWith(eq);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 1), true, value1);
-
-        // clustering_0 IN (1, 2) AND (clustering_1, clustering_2, clustering_3) > (2, 3, 4)
-        Restriction in = newSingleIN(cfMetaData, 0, value1, value2);
-        slice = newMultiSlice(cfMetaData, 1, Bound.START, false, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-        restrictions = restrictions.mergeWith(in);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-        assertStartBound(get(bounds, 2), true, value2, value2);
-        assertStartBound(get(bounds, 3), false, value2, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 1), true, value1);
-        assertEndBound(get(bounds, 2), false, value2, value2, value3, value4);
-        assertEndBound(get(bounds, 3), true, value2);
-
-        // (clustering_0, clustering1) >= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEmptyEnd(get(bounds, 0));
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) >= (1, 2, 3, 4)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3, value4);
-        assertEmptyEnd(get(bounds, 1));
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) <= (1, 2, 3, 4)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), true, value1, value2, value3, value4);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), true, value1, value2);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) < (1, 2, 3, 4)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), false, value1, value2, value3, value4);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), true, value1, value2);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) > (1, 2, 3, 4) AND (clustering_0, clustering_1) < (2, 3)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2, value3, value4);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2, value3);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 1), false, value2, value3);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) >= (1, 2, 3, 4) AND (clustering_0, clustering1, clustering_2, clustering_3) <= (4, 3, 2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2, value3, value4);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value4, value3, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2);
-        assertStartBound(get(bounds, 1), false, value1, value2);
-        assertStartBound(get(bounds, 2), true, value4, value3, value2, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 1), false, value4, value3);
-        assertEndBound(get(bounds, 2), true, value4, value3);
-    }
-
-    /**
-     * Test multi-column slice restrictions with ascending, descending, ascending and descending columns
-     * (e.g '(clustering_0, clustering1, clustering_3, clustering4) > (1, 2, 3, 4)')
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiSliceRestrictionsWithAscendingDescendingColumnMix()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.DESC, Sort.ASC, Sort.DESC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        ByteBuffer value4 = ByteBufferUtil.bytes(4);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) > (1, 2, 3, 4)
-        Restriction slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2, value3, value4);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), true, value1, value2, value3);
-        assertStartBound(get(bounds, 2), false, value1, value2, value3);
-        assertStartBound(get(bounds, 3), false, value1);
-
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), false, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 2), true, value1, value2);
-        assertEmptyEnd(get(bounds, 3));
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2, clustering_3) > (2, 3, 4)
-        Restriction eq = newSingleEq(cfMetaData, 0, value1);
-        slice = newMultiSlice(cfMetaData, 1, Bound.START, false, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-        restrictions = restrictions.mergeWith(eq);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), true, value1, value2, value3);
-        assertStartBound(get(bounds, 2), false, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(3, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), false, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 2), true, value1, value2);
-
-        // (clustering_0, clustering1) >= (1, 2)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-        assertEmptyEnd(get(bounds, 1));
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) >= (1, 2, 3, 4)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), true, value1, value2, value3);
-        assertStartBound(get(bounds, 2), false, value1, value2, value3);
-        assertStartBound(get(bounds, 3), false, value1);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), true, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 2), true, value1, value2);
-        assertEmptyEnd(get(bounds, 3));
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) <= (1, 2, 3, 4)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, true, value1, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), true, value1, value2);
-        assertStartBound(get(bounds, 2), true, value1, value2, value3, value4);
-        assertStartBound(get(bounds, 3), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), false, value1, value2, value3);
-        assertEndBound(get(bounds, 2), true, value1, value2, value3);
-        assertEndBound(get(bounds, 3), true, value1);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) < (1, 2, 3, 4)
-        slice = newMultiSlice(cfMetaData, 0, Bound.END, false, value1, value2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEmptyStart(get(bounds, 0));
-        assertStartBound(get(bounds, 1), true, value1, value2);
-        assertStartBound(get(bounds, 2), false, value1, value2, value3, value4);
-        assertStartBound(get(bounds, 3), false, value1, value2);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(4, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1);
-        assertEndBound(get(bounds, 1), false, value1, value2, value3);
-        assertEndBound(get(bounds, 2), true, value1, value2, value3);
-        assertEndBound(get(bounds, 3), true, value1);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) > (1, 2, 3, 4) AND (clustering_0, clustering_1) < (2, 3)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, false, value1, value2, value3, value4);
-        Restriction slice2 = newMultiSlice(cfMetaData, 0, Bound.END, false, value2, value3);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(5, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), true, value1, value2, value3);
-        assertStartBound(get(bounds, 2), false, value1, value2, value3);
-        assertStartBound(get(bounds, 3), false, value1);
-        assertStartBound(get(bounds, 4), false, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(5, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), false, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 2), true, value1, value2);
-        assertEndBound(get(bounds, 3), false, value2);
-        assertEndBound(get(bounds, 4), true, value2);
-
-        // (clustering_0, clustering1, clustering_2, clustering_3) >= (1, 2, 3, 4) AND (clustering_0, clustering1, clustering_2, clustering_3) <= (4, 3, 2, 1)
-        slice = newMultiSlice(cfMetaData, 0, Bound.START, true, value1, value2, value3, value4);
-        slice2 = newMultiSlice(cfMetaData, 0, Bound.END, true, value4, value3, value2, value1);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(slice).mergeWith(slice2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(7, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1);
-        assertStartBound(get(bounds, 1), true, value1, value2, value3);
-        assertStartBound(get(bounds, 2), false, value1, value2, value3);
-        assertStartBound(get(bounds, 3), false, value1);
-        assertStartBound(get(bounds, 4), true, value4, value3);
-        assertStartBound(get(bounds, 5), true, value4, value3, value2, value1);
-        assertStartBound(get(bounds, 6), false, value4, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(7, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value2);
-        assertEndBound(get(bounds, 1), true, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 2), true, value1, value2);
-        assertEndBound(get(bounds, 3), false, value4);
-        assertEndBound(get(bounds, 4), false, value4, value3, value2);
-        assertEndBound(get(bounds, 5), true, value4, value3, value2);
-        assertEndBound(get(bounds, 6), true, value4);
-    }
-
-    /**
-     * Test mixing single and multi equals restrictions (e.g. clustering_0 = 1 AND (clustering_1, clustering_2) = (2, 3))
-     */
-    @Test
-    public void testBoundsAsClusteringWithSingleEqAndMultiEqRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC, Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        ByteBuffer value4 = ByteBufferUtil.bytes(4);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) = (2, 3)
-        Restriction singleEq = newSingleEq(cfMetaData, 0, value1);
-        Restriction multiEq = newMultiEq(cfMetaData, 1, value2, value3);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(multiEq);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3);
-
-        // clustering_0 = 1 AND clustering_1 = 2 AND (clustering_2, clustering_3) = (3, 4)
-        singleEq = newSingleEq(cfMetaData, 0, value1);
-        Restriction singleEq2 = newSingleEq(cfMetaData, 1, value2);
-        multiEq = newMultiEq(cfMetaData, 2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(singleEq2).mergeWith(multiEq);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3, value4);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3, value4);
-
-        // (clustering_0, clustering_1) = (1, 2) AND clustering_2 = 3
-        singleEq = newSingleEq(cfMetaData, 2, value3);
-        multiEq = newMultiEq(cfMetaData, 0, value1, value2);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(multiEq);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) = (2, 3) AND clustering_3 = 4
-        singleEq = newSingleEq(cfMetaData, 0, value1);
-        singleEq2 = newSingleEq(cfMetaData, 3, value4);
-        multiEq = newMultiEq(cfMetaData, 1, value2, value3);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(multiEq).mergeWith(singleEq2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3, value4);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3, value4);
-    }
-
-    /**
-     * Test clustering_0 = 1 AND (clustering_1, clustering_2) IN ((2, 3), (4, 5))
-     */
-    @Test
-    public void testBoundsAsClusteringWithSingleEqAndMultiINRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC, Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        ByteBuffer value4 = ByteBufferUtil.bytes(4);
-        ByteBuffer value5 = ByteBufferUtil.bytes(5);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) IN ((2, 3), (4, 5))
-        Restriction singleEq = newSingleEq(cfMetaData, 0, value1);
-        Restriction multiIN = newMultiIN(cfMetaData, 1, asList(value2, value3), asList(value4, value5));
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(multiIN);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3);
-        assertStartBound(get(bounds, 1), true, value1, value4, value5);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3);
-        assertEndBound(get(bounds, 1), true, value1, value4, value5);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) IN ((2, 3))
-        singleEq = newSingleEq(cfMetaData, 0, value1);
-        multiIN = newMultiIN(cfMetaData, 1, asList(value2, value3));
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiIN).mergeWith(singleEq);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3);
-
-        // clustering_0 = 1 AND clustering_1 = 5 AND (clustering_2, clustering_3) IN ((2, 3), (4, 5))
-        singleEq = newSingleEq(cfMetaData, 0, value1);
-        Restriction singleEq2 = newSingleEq(cfMetaData, 1, value5);
-        multiIN = newMultiIN(cfMetaData, 2, asList(value2, value3), asList(value4, value5));
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(multiIN).mergeWith(singleEq2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value5, value2, value3);
-        assertStartBound(get(bounds, 1), true, value1, value5, value4, value5);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value5, value2, value3);
-        assertEndBound(get(bounds, 1), true, value1, value5, value4, value5);
-    }
-
-    /**
-     * Test mixing single equal restrictions with multi-column slice restrictions
-     * (e.g. clustering_0 = 1 AND (clustering_1, clustering_2) > (2, 3))
-     */
-    @Test
-    public void testBoundsAsClusteringWithSingleEqAndSliceRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        ByteBuffer value4 = ByteBufferUtil.bytes(4);
-        ByteBuffer value5 = ByteBufferUtil.bytes(5);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) > (2, 3)
-        Restriction singleEq = newSingleEq(cfMetaData, 0, value1);
-        Restriction multiSlice = newMultiSlice(cfMetaData, 1, Bound.START, false, value2, value3);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(singleEq).mergeWith(multiSlice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) > (2, 3) AND (clustering_1) < (4)
-        singleEq = newSingleEq(cfMetaData, 0, value1);
-        multiSlice = newMultiSlice(cfMetaData, 1, Bound.START, false, value2, value3);
-        Restriction multiSlice2 = newMultiSlice(cfMetaData, 1, Bound.END, false, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiSlice2).mergeWith(singleEq).mergeWith(multiSlice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), false, value1, value4);
-
-        // clustering_0 = 1 AND (clustering_1, clustering_2) => (2, 3) AND (clustering_1, clustering_2) <= (4, 5)
-        singleEq = newSingleEq(cfMetaData, 0, value1);
-        multiSlice = newMultiSlice(cfMetaData, 1, Bound.START, true, value2, value3);
-        multiSlice2 = newMultiSlice(cfMetaData, 1, Bound.END, true, value4, value5);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiSlice2).mergeWith(singleEq).mergeWith(multiSlice);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value4, value5);
-    }
-
-    /**
-     * Test mixing multi equal restrictions with single-column slice restrictions
-     * (e.g. clustering_0 = 1 AND (clustering_1, clustering_2) > (2, 3))
-     */
-    @Test
-    public void testBoundsAsClusteringWithMultiEqAndSingleSliceRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-
-        // (clustering_0, clustering_1) = (1, 2) AND clustering_2 > 3
-        Restriction multiEq = newMultiEq(cfMetaData, 0, value1, value2);
-        Restriction singleSlice = newSingleSlice(cfMetaData, 2, Bound.START, false, value3);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiEq).mergeWith(singleSlice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2, value3);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-    }
-
-    @Test
-    public void testBoundsAsClusteringWithSeveralMultiColumnRestrictions()
-    {
-        CFMetaData cfMetaData = newCFMetaData(Sort.ASC, Sort.ASC, Sort.ASC, Sort.ASC);
-
-        ByteBuffer value1 = ByteBufferUtil.bytes(1);
-        ByteBuffer value2 = ByteBufferUtil.bytes(2);
-        ByteBuffer value3 = ByteBufferUtil.bytes(3);
-        ByteBuffer value4 = ByteBufferUtil.bytes(4);
-        ByteBuffer value5 = ByteBufferUtil.bytes(5);
-
-        // (clustering_0, clustering_1) = (1, 2) AND (clustering_2, clustering_3) > (3, 4)
-        Restriction multiEq = newMultiEq(cfMetaData, 0, value1, value2);
-        Restriction multiSlice = newMultiSlice(cfMetaData, 2, Bound.START, false, value3, value4);
-        PrimaryKeyRestrictions restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiEq).mergeWith(multiSlice);
-
-        SortedSet<Slice.Bound> bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), false, value1, value2, value3, value4);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2);
-
-        // (clustering_0, clustering_1) = (1, 2) AND (clustering_2, clustering_3) IN ((3, 4), (4, 5))
-        multiEq = newMultiEq(cfMetaData, 0, value1, value2);
-        Restriction multiIN = newMultiIN(cfMetaData, 2, asList(value3, value4), asList(value4, value5));
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiEq).mergeWith(multiIN);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3, value4);
-        assertStartBound(get(bounds, 1), true, value1, value2, value4, value5);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(2, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3, value4);
-        assertEndBound(get(bounds, 1), true, value1, value2, value4, value5);
-
-        // (clustering_0, clustering_1) = (1, 2) AND (clustering_2, clustering_3) = (3, 4)
-        multiEq = newMultiEq(cfMetaData, 0, value1, value2);
-        Restriction multiEq2 = newMultiEq(cfMetaData, 2, value3, value4);
-        restrictions = new PrimaryKeyRestrictionSet(cfMetaData.comparator, false);
-        restrictions = restrictions.mergeWith(multiEq).mergeWith(multiEq2);
-
-        bounds = restrictions.boundsAsClustering(Bound.START, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertStartBound(get(bounds, 0), true, value1, value2, value3, value4);
-
-        bounds = restrictions.boundsAsClustering(Bound.END, QueryOptions.DEFAULT);
-        assertEquals(1, bounds.size());
-        assertEndBound(get(bounds, 0), true, value1, value2, value3, value4);
-    }
-
-    /**
-     * Asserts that the specified <code>Bound</code> is an empty start.
-     *
-     * @param bound the bound to check
-     */
-    private static void assertEmptyStart(Slice.Bound bound)
-    {
-        assertEquals(Slice.Bound.BOTTOM, bound);
-    }
-
-    /**
-     * Asserts that the specified <code>Bound</code> is an empty end.
-     *
-     * @param bound the bound to check
-     */
-    private static void assertEmptyEnd(Slice.Bound bound)
-    {
-        assertEquals(Slice.Bound.TOP, bound);
-    }
-
-    /**
-     * Asserts that the specified <code>Slice.Bound</code> is a start with the specified elements.
-     *
-     * @param bound the bound to check
-     * @param isInclusive if the bound is expected to be inclusive
-     * @param elements the expected elements of the clustering
-     */
-    private static void assertStartBound(Slice.Bound bound, boolean isInclusive, ByteBuffer... elements)
-    {
-        assertBound(bound, true, isInclusive, elements);
-    }
-
-    /**
-     * Asserts that the specified <code>Slice.Bound</code> is a end with the specified elements.
-     *
-     * @param bound the bound to check
-     * @param isInclusive if the bound is expected to be inclusive
-     * @param elements the expected elements of the clustering
-     */
-    private static void assertEndBound(Slice.Bound bound, boolean isInclusive, ByteBuffer... elements)
-    {
-        assertBound(bound, false, isInclusive, elements);
-    }
-
-    private static void assertBound(Slice.Bound bound, boolean isStart, boolean isInclusive, ByteBuffer... elements)
-    {
-        assertEquals("the bound size is not the expected one:", elements.length, bound.size());
-        assertEquals("the bound should be a " + (isStart ? "start" : "end") + " but is a " + (bound.isStart() ? "start" : "end"), isStart, bound.isStart());
-        assertEquals("the bound inclusiveness is not the expected one", isInclusive, bound.isInclusive());
-        for (int i = 0, m = elements.length; i < m; i++)
-        {
-            ByteBuffer element = elements[i];
-            assertTrue(String.format("the element %s of the bound is not the expected one: expected %s but was %s",
-                                     i,
-                                     ByteBufferUtil.toInt(element),
-                                     ByteBufferUtil.toInt(bound.get(i))),
-                       element.equals(bound.get(i)));
-        }
-    }
-
-    /**
-     * Creates a new <code>CFMetaData</code> instance.
-     *
-     * @param numberOfClusteringColumns the number of clustering column
-     * @return a new <code>CFMetaData</code> instance
-     */
-    private static CFMetaData newCFMetaData(Sort... sorts)
-    {
-        List<AbstractType<?>> types = new ArrayList<>();
-
-        for (Sort sort : sorts)
-            types.add(sort == Sort.ASC ? Int32Type.instance : ReversedType.getInstance(Int32Type.instance));
-
-        CFMetaData.Builder builder = CFMetaData.Builder.create("keyspace", "test")
-                                                       .addPartitionKey("partition_key", Int32Type.instance);
-
-        for (int i = 0; i < sorts.length; i++)
-            builder.addClusteringColumn("clustering_" + i, types.get(i));
-
-        return builder.build();
-    }
-
-    /**
-     * Creates a new <code>SingleColumnRestriction.EQ</code> instance for the specified clustering column.
-     *
-     * @param cfMetaData the column family meta data
-     * @param index the clustering column index
-     * @param value the equality value
-     * @return a new <code>SingleColumnRestriction.EQ</code> instance for the specified clustering column
-     */
-    private static Restriction newSingleEq(CFMetaData cfMetaData, int index, ByteBuffer val

<TRUNCATED>

Mime
View raw message