You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/03/30 17:14:05 UTC

svn commit: r929163 - in /cassandra/trunk: src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/db/filter/ test/system/ test/unit/org/apache/cassandra/db/ test/unit/org/apache/cassandra/tools/

Author: jbellis
Date: Tue Mar 30 15:14:03 2010
New Revision: 929163

URL: http://svn.apache.org/viewvc?rev=929163&view=rev
Log:
separate QueryFilter from IFilter, make QueryFilter handle both the top-level and subcolumn filtering transparently to caller.
patch by jbellis; reviewed by johano for CASSANDRA-917

Added:
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/IFilter.java   (with props)
Modified:
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
    cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java
    cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
    cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
    cassandra/trunk/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
    cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
    cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
    cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/ColumnIterator.java
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
    cassandra/trunk/test/system/test_thrift_server.py
    cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush1Test.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush2Test.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSubColumnTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Tue Mar 30 15:14:03 2010
@@ -705,12 +705,12 @@ public class ColumnFamilyStore implement
 
     public ColumnFamily getColumnFamily(String key, QueryPath path, byte[] start, byte[] finish, List<byte[]> bitmasks, boolean reversed, int limit)
     {
-        return getColumnFamily(new SliceQueryFilter(key, path, start, finish, bitmasks, reversed, limit));
+        return getColumnFamily(QueryFilter.getSliceFilter(key, path, start, finish, bitmasks, reversed, limit));
     }
 
     public ColumnFamily getColumnFamily(String key, QueryPath path, byte[] start, byte[] finish, boolean reversed, int limit)
     {
-        return getColumnFamily(new SliceQueryFilter(key, path, start, finish, reversed, limit));
+        return getColumnFamily(QueryFilter.getSliceFilter(key, path, start, finish, null, reversed, limit));
     }
 
     public ColumnFamily getColumnFamily(QueryFilter filter)
@@ -723,7 +723,7 @@ public class ColumnFamilyStore implement
         ColumnFamily cached;
         if ((cached = ssTables_.getRowCache().get(key)) == null)
         {
-            cached = getTopLevelColumns(new IdentityQueryFilter(key, new QueryPath(columnFamily_)), Integer.MIN_VALUE);
+            cached = getTopLevelColumns(QueryFilter.getIdentityFilter(key, new QueryPath(columnFamily_)), Integer.MIN_VALUE);
             if (cached == null)
                 return null;
             ssTables_.getRowCache().put(key, cached);
@@ -743,46 +743,18 @@ public class ColumnFamilyStore implement
         long start = System.nanoTime();
         try
         {
-            if (filter.path.superColumnName == null)
-            {
-                if (ssTables_.getRowCache().getCapacity() == 0)
-                    return removeDeleted(getTopLevelColumns(filter, gcBefore), gcBefore);
-
-                ColumnFamily cached = cacheRow(filter.key);
-                ColumnIterator ci = filter.getMemColumnIterator(memtable_, cached, getComparator()); // TODO passing memtable here is confusing since it's almost entirely unused
-                ColumnFamily returnCF = ci.getColumnFamily();
-                filter.collectCollatedColumns(returnCF, ci, gcBefore);
-                return removeDeleted(returnCF, gcBefore);
-            }
-
-            // we are querying subcolumns of a supercolumn: fetch the supercolumn with NQF, then filter in-memory.
-            ColumnFamily cf;
-            SuperColumn sc;
             if (ssTables_.getRowCache().getCapacity() == 0)
-            {
-                QueryFilter nameFilter = new NamesQueryFilter(filter.key, new QueryPath(columnFamily_), filter.path.superColumnName);
-                cf = getTopLevelColumns(nameFilter, gcBefore);
-                if (cf == null || cf.getColumnCount() == 0)
-                    return cf;
-
-                assert cf.getSortedColumns().size() == 1;
-                sc = (SuperColumn)cf.getSortedColumns().iterator().next();
-            }
-            else
-            {
-                cf = cacheRow(filter.key);
-                if (cf == null)
-                    return null;
-                sc = (SuperColumn)cf.getColumn(filter.path.superColumnName);
-                if (sc == null)
-                    return null;
-                sc = (SuperColumn)sc.cloneMe();
-            }
-            
-            SuperColumn scFiltered = filter.filterSuperColumn(sc, gcBefore);
-            ColumnFamily cfFiltered = cf.cloneMeShallow();
-            cfFiltered.addColumn(scFiltered);
-            return removeDeleted(cfFiltered, gcBefore);
+                return removeDeleted(getTopLevelColumns(filter, gcBefore), gcBefore);
+
+            ColumnFamily cached = cacheRow(filter.key);
+            if (cached == null)
+                return null;
+            ColumnIterator ci = filter.getMemtableColumnIterator(cached, getComparator(), gcBefore);
+            ColumnFamily returnCF = ci.getColumnFamily().cloneMeShallow();
+            filter.collectCollatedColumns(returnCF, ci, gcBefore);
+            // TODO this is necessary because when we collate supercolumns together, we don't check
+            // their subcolumns for relevance, so we need to do a second prune post facto here.
+            return removeDeleted(returnCF, gcBefore);
         }
         finally
         {
@@ -794,39 +766,42 @@ public class ColumnFamilyStore implement
     {
         // we are querying top-level columns, do a merging fetch with indexes.
         List<ColumnIterator> iterators = new ArrayList<ColumnIterator>();
+        final ColumnFamily returnCF = ColumnFamily.create(table_, columnFamily_);
         try
         {
-            final ColumnFamily returnCF;
             ColumnIterator iter;
 
             /* add the current memtable */
             Table.flusherLock.readLock().lock();
             try
             {
-                iter = filter.getMemColumnIterator(memtable_, getComparator());
-                // TODO this is a little subtle: the Memtable ColumnIterator has to be a shallow clone of the source CF,
-                // with deletion times set correctly, so we can use it as the "base" CF to add query results to.
-                // (for sstable ColumnIterators we do not care if it is a shallow clone or not.)
-                returnCF = iter.getColumnFamily();
+                iter = filter.getMemtableColumnIterator(memtable_, getComparator(), gcBefore);
             }
             finally
             {
                 Table.flusherLock.readLock().unlock();
             }
-            iterators.add(iter);
+            if (iter != null)
+            {
+                returnCF.delete(iter.getColumnFamily());
+                iterators.add(iter);
+            }
 
             /* add the memtables being flushed */
             for (Memtable memtable : getMemtablesPendingFlush())
             {
-                iter = filter.getMemColumnIterator(memtable, getComparator());
-                returnCF.delete(iter.getColumnFamily());
-                iterators.add(iter);
+                iter = filter.getMemtableColumnIterator(memtable, getComparator(), gcBefore);
+                if (iter != null)
+                {
+                    returnCF.delete(iter.getColumnFamily());
+                    iterators.add(iter);
+                }
             }
 
             /* add the SSTables on disk */
             for (SSTableReader sstable : ssTables_)
             {
-                iter = filter.getSSTableColumnIterator(sstable);
+                iter = filter.getSSTableColumnIterator(sstable, gcBefore);
                 if (iter.hasNext()) // initializes iter.CF
                 {
                     returnCF.delete(iter.getColumnFamily());
@@ -840,7 +815,7 @@ public class ColumnFamilyStore implement
                 return null;
 
             filter.collectCollatedColumns(returnCF, collated, gcBefore);
-            return returnCF;
+            return returnCF; // caller is responsible for final removeDeleted
         }
         finally
         {
@@ -1020,7 +995,9 @@ public class ColumnFamilyStore implement
             columnNameSet.addAll(columnNames);
         for (String key : keys)
         {
-            QueryFilter filter = sliceRange == null ? new NamesQueryFilter(key, queryPath, columnNameSet) : new SliceQueryFilter(key, queryPath, sliceRange.start, sliceRange.finish, sliceRange.bitmasks, sliceRange.reversed, sliceRange.count);
+            QueryFilter filter = sliceRange == null
+                                 ? QueryFilter.getNamesFilter(key, queryPath, columnNameSet)
+                                 : QueryFilter.getSliceFilter(key, queryPath, sliceRange.start, sliceRange.finish, sliceRange.bitmasks, sliceRange.reversed, sliceRange.count);
             rows.add(new Row(key, getColumnFamily(filter)));
         }
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java Tue Mar 30 15:14:03 2010
@@ -29,7 +29,6 @@ import java.util.concurrent.Future;
 import javax.management.*;
 
 import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.filter.SliceQueryFilter;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java Tue Mar 30 15:14:03 2010
@@ -23,6 +23,7 @@ import org.apache.cassandra.config.CFMet
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.config.KSMetaData;
 import org.apache.cassandra.db.commitlog.CommitLog;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.db.filter.SliceQueryFilter;
 import org.apache.cassandra.utils.FBUtilities;
@@ -283,7 +284,7 @@ public class DefsTable
     {
         Table defs = Table.open(Table.DEFINITIONS);
         ColumnFamilyStore cfStore = defs.getColumnFamilyStore(SCHEMA_CF);
-        SliceQueryFilter filter = new SliceQueryFilter(version.toString(), new QueryPath(SCHEMA_CF), "".getBytes(), "".getBytes(), false, 1024);
+        QueryFilter filter = QueryFilter.getSliceFilter(version.toString(), new QueryPath(SCHEMA_CF), "".getBytes(), "".getBytes(), null, false, 1024);
         ColumnFamily cf = cfStore.getColumnFamily(filter);
         Collection<KSMetaData> tables = new ArrayList<KSMetaData>();
         for (IColumn col : cf.getSortedColumns())

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java Tue Mar 30 15:14:03 2010
@@ -30,7 +30,6 @@ import org.slf4j.LoggerFactory;
 import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutor;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.filter.QueryFilter;
-import org.apache.cassandra.db.filter.SliceQueryFilter;
 import org.apache.cassandra.gms.FailureDetector;
 import org.apache.cassandra.gms.Gossiper;
 
@@ -42,7 +41,6 @@ import org.apache.cassandra.net.Message;
 import org.apache.cassandra.net.MessagingService;
 import org.apache.cassandra.service.*;
 import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.utils.WrappedRunnable;
 
@@ -120,7 +118,7 @@ public class HintedHandOffManager
         RowMutation rm = new RowMutation(tableName, key);
         for (ColumnFamilyStore cfstore : table.getColumnFamilyStores())
         {
-            ColumnFamily cf = cfstore.getColumnFamily(new IdentityQueryFilter(key, new QueryPath(cfstore.getColumnFamilyName())));
+            ColumnFamily cf = cfstore.getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfstore.getColumnFamilyName())));
             if (cf != null)
                 rm.add(cf);
         }
@@ -172,7 +170,7 @@ public class HintedHandOffManager
             byte[] startColumn = ArrayUtils.EMPTY_BYTE_ARRAY;
             while (true)
             {
-                QueryFilter filter = new SliceQueryFilter(tableName, new QueryPath(HINTS_CF), startColumn, ArrayUtils.EMPTY_BYTE_ARRAY, false, PAGE_SIZE);
+                QueryFilter filter = QueryFilter.getSliceFilter(tableName, new QueryPath(HINTS_CF), startColumn, ArrayUtils.EMPTY_BYTE_ARRAY, null, false, PAGE_SIZE);
                 ColumnFamily hintColumnFamily = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter), Integer.MAX_VALUE);
                 if (pagingFinished(hintColumnFamily, startColumn))
                     break;
@@ -236,7 +234,7 @@ public class HintedHandOffManager
             byte[] startColumn = ArrayUtils.EMPTY_BYTE_ARRAY;
             while (true)
             {
-                QueryFilter filter = new SliceQueryFilter(tableName, new QueryPath(HINTS_CF), startColumn, ArrayUtils.EMPTY_BYTE_ARRAY, false, PAGE_SIZE);
+                QueryFilter filter = QueryFilter.getSliceFilter(tableName, new QueryPath(HINTS_CF), startColumn, ArrayUtils.EMPTY_BYTE_ARRAY, null, false, PAGE_SIZE);
                 ColumnFamily hintColumnFamily = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter), Integer.MAX_VALUE);
                 if (pagingFinished(hintColumnFamily, startColumn))
                     break;

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java Tue Mar 30 15:14:03 2010
@@ -193,7 +193,7 @@ public class Memtable implements Compara
         return columnFamilies.isEmpty();
     }
 
-    private String getTableName()
+    public String getTableName()
     {
         return cfs.getTable().name;
     }
@@ -201,11 +201,10 @@ public class Memtable implements Compara
     /**
      * obtain an iterator of columns in this memtable in the specified order starting from a given column.
      */
-    public ColumnIterator getSliceIterator(ColumnFamily cf, SliceQueryFilter filter, AbstractType typeComparator)
+    public static ColumnIterator getSliceIterator(final ColumnFamily cf, SliceQueryFilter filter, AbstractType typeComparator)
     {
-        final ColumnFamily columnFamily = cf == null ? ColumnFamily.create(getTableName(), filter.getColumnFamilyName()) : cf.cloneMeShallow();
-
-        Collection<IColumn> rawColumns = (cf == null ? columnFamily : cf).getSortedColumns();
+        assert cf != null;
+        Collection<IColumn> rawColumns = cf.getSortedColumns();
         Collection<IColumn> filteredColumns = filter.applyPredicate(rawColumns);
 
         final IColumn columns[] = filteredColumns.toArray(new IColumn[0]);
@@ -213,7 +212,7 @@ public class Memtable implements Compara
         if (filter.reversed)
             ArrayUtils.reverse(columns);
         IColumn startIColumn;
-        final boolean isStandard = DatabaseDescriptor.getColumnFamilyType(getTableName(), filter.getColumnFamilyName()).equals("Standard");
+        final boolean isStandard = !cf.isSuper();
         if (isStandard)
             startIColumn = new Column(filter.start);
         else
@@ -240,7 +239,7 @@ public class Memtable implements Compara
 
             public ColumnFamily getColumnFamily()
             {
-                return columnFamily;
+                return cf;
             }
 
             public boolean hasNext()
@@ -256,10 +255,10 @@ public class Memtable implements Compara
         };
     }
 
-    public ColumnIterator getNamesIterator(final ColumnFamily cf, final NamesQueryFilter filter)
+    public static ColumnIterator getNamesIterator(final ColumnFamily cf, final NamesQueryFilter filter)
     {
-        final ColumnFamily columnFamily = cf == null ? ColumnFamily.create(getTableName(), filter.getColumnFamilyName()) : cf.cloneMeShallow();
-        final boolean isStandard = DatabaseDescriptor.getColumnFamilyType(getTableName(), filter.getColumnFamilyName()).equals("Standard");
+        assert cf != null;
+        final boolean isStandard = !cf.isSuper();
 
         return new SimpleAbstractColumnIterator()
         {
@@ -268,15 +267,11 @@ public class Memtable implements Compara
 
             public ColumnFamily getColumnFamily()
             {
-                return columnFamily;
+                return cf;
             }
 
             protected IColumn computeNext()
             {
-                if (cf == null)
-                {
-                    return endOfData();
-                }
                 while (iter.hasNext())
                 {
                     current = iter.next();

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java Tue Mar 30 15:14:03 2010
@@ -22,9 +22,9 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.*;
 
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.thrift.ColumnParent;
 import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.filter.NamesQueryFilter;
 
 public class SliceByNamesReadCommand extends ReadCommand
 {
@@ -53,7 +53,7 @@ public class SliceByNamesReadCommand ext
     @Override
     public Row getRow(Table table) throws IOException
     {        
-        return table.getRow(new NamesQueryFilter(key, queryPath, columnNames));
+        return table.getRow(QueryFilter.getNamesFilter(key, queryPath, columnNames));
     }
 
     @Override

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java Tue Mar 30 15:14:03 2010
@@ -20,11 +20,10 @@ package org.apache.cassandra.db;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
-import java.util.Collections;
 import java.util.List;
 
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.filter.SliceQueryFilter;
 import org.apache.cassandra.thrift.ColumnParent;
 import org.apache.cassandra.utils.ByteArrayListSerializer;
 
@@ -66,7 +65,7 @@ public class SliceFromReadCommand extend
     @Override
     public Row getRow(Table table) throws IOException
     {
-        return table.getRow(new SliceQueryFilter(key, queryPath, start, finish, bitmasks, reversed, count));
+        return table.getRow(QueryFilter.getSliceFilter(key, queryPath, start, finish, bitmasks, reversed, count));
     }
 
     @Override

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java Tue Mar 30 15:14:03 2010
@@ -23,7 +23,6 @@ import java.io.UnsupportedEncodingExcept
 import java.io.IOError;
 
 import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.filter.SliceQueryFilter;
 import org.apache.cassandra.utils.FBUtilities;
 
 import org.apache.commons.lang.ArrayUtils;
@@ -35,7 +34,6 @@ import org.apache.cassandra.dht.Token;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.db.filter.QueryFilter;
-import org.apache.cassandra.db.filter.NamesQueryFilter;
 import org.apache.cassandra.db.marshal.BytesType;
 import org.apache.cassandra.config.DatabaseDescriptor;
 
@@ -130,7 +128,7 @@ public class SystemTable
         columns.add(TOKEN);
         columns.add(GENERATION);
         columns.add(CLUSTERNAME);
-        QueryFilter filter = new NamesQueryFilter(LOCATION_KEY, new QueryPath(STATUS_CF), columns);
+        QueryFilter filter = QueryFilter.getNamesFilter(LOCATION_KEY, new QueryPath(STATUS_CF), columns);
         ColumnFamily cf = table.getColumnFamilyStore(STATUS_CF).getColumnFamily(filter);
 
         IPartitioner p = StorageService.getPartitioner();
@@ -203,7 +201,7 @@ public class SystemTable
     {
         Table table = null;
         table = Table.open(Table.SYSTEM_TABLE);
-        QueryFilter filter = new NamesQueryFilter(BOOTSTRAP_KEY, new QueryPath(STATUS_CF), BOOTSTRAP);
+        QueryFilter filter = QueryFilter.getNamesFilter(BOOTSTRAP_KEY, new QueryPath(STATUS_CF), BOOTSTRAP);
         ColumnFamily cf = table.getColumnFamilyStore(STATUS_CF).getColumnFamily(filter);
         return cf != null && cf.getColumn(BOOTSTRAP).value()[0] == 1;
     }
@@ -227,7 +225,7 @@ public class SystemTable
     public static ColumnFamily getDroppedCFs() throws IOException
     {
         ColumnFamilyStore cfs = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(SystemTable.STATUS_CF);
-        return cfs.getColumnFamily(new SliceQueryFilter(SystemTable.GRAVEYARD_KEY, new QueryPath(STATUS_CF), "".getBytes(), "".getBytes(), false, 100));
+        return cfs.getColumnFamily(QueryFilter.getSliceFilter(SystemTable.GRAVEYARD_KEY, new QueryPath(STATUS_CF), "".getBytes(), "".getBytes(), null, false, 100));
     }
     
     public static void deleteDroppedCfMarkers(Collection<IColumn> cols) throws IOException

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Tue Mar 30 15:14:03 2010
@@ -329,7 +329,7 @@ public class Table 
     {
         ColumnFamilyStore cfStore = columnFamilyStores.get(cfName);
         assert cfStore != null : "Column family " + cfName + " has not been defined";
-        return cfStore.getColumnFamily(new IdentityQueryFilter(key, new QueryPath(cfName)));
+        return cfStore.getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfName)));
     }
 
     public Row getRow(QueryFilter filter) throws IOException

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/ColumnIterator.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/ColumnIterator.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/ColumnIterator.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/ColumnIterator.java Tue Mar 30 15:14:03 2010
@@ -30,7 +30,7 @@ import org.apache.cassandra.db.ColumnFam
 public interface ColumnIterator extends Iterator<IColumn>
 {
     /**
-     *  returns the CF of the column being iterated.
+     *  returns the CF of the column being iterated.  Do not modify the returned CF; clone first.
      *  The CF is only guaranteed to be available after a call to next() or hasNext().
      */
     public abstract ColumnFamily getColumnFamily();

Added: cassandra/trunk/src/java/org/apache/cassandra/db/filter/IFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IFilter.java?rev=929163&view=auto
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/IFilter.java (added)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/IFilter.java Tue Mar 30 15:14:03 2010
@@ -0,0 +1,65 @@
+package org.apache.cassandra.db.filter;
+/*
+ *
+ * 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.
+ *
+ */
+
+import java.util.Comparator;
+import java.util.Iterator;
+
+import org.apache.cassandra.db.*;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.io.sstable.SSTableReader;
+
+/**
+ * Given an implementation-specific description of what columns to look for, provides methods
+ * to extract the desired columns from a Memtable, SSTable, or SuperColumn.  Either the get*ColumnIterator
+ * methods will be called, or filterSuperColumn, but not both on the same object.  QueryFilter
+ * takes care of putting the two together if subcolumn filtering needs to be done, based on the
+ * querypath that it knows (but that IFilter implementations are oblivious to).
+ */
+interface IFilter
+{
+    /**
+     * returns an iterator that returns columns from the given memtable
+     * matching the Filter criteria in sorted order.
+     */
+    public abstract ColumnIterator getMemtableColumnIterator(ColumnFamily cf, AbstractType comparator);
+
+    /**
+     * returns an iterator that returns columns from the given SSTable
+     * matching the Filter criteria in sorted order.
+     */
+    public abstract ColumnIterator getSSTableColumnIterator(SSTableReader sstable);
+
+    /**
+     * collects columns from reducedColumns into returnCF.  Termination is determined
+     * by the filter code, which should have some limit on the number of columns
+     * to avoid running out of memory on large rows.
+     */
+    public abstract void collectReducedColumns(IColumnContainer container, Iterator<IColumn> reducedColumns, int gcBefore);
+
+    /**
+     * subcolumns of a supercolumn are unindexed, so to pick out parts of those we operate in-memory.
+     * @param superColumn may be modified by filtering op.
+     */
+    public abstract SuperColumn filterSuperColumn(SuperColumn superColumn, int gcBefore);
+
+    public Comparator<IColumn> getColumnComparator(AbstractType comparator);
+}

Propchange: cassandra/trunk/src/java/org/apache/cassandra/db/filter/IFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java Tue Mar 30 15:14:03 2010
@@ -25,14 +25,14 @@ import org.apache.commons.lang.ArrayUtil
 
 import org.apache.cassandra.db.SuperColumn;
 
-public class IdentityQueryFilter extends SliceQueryFilter
+class IdentityQueryFilter extends SliceQueryFilter
 {
     /**
      * Only for use in testing; will read entire CF into memory.
      */
-    public IdentityQueryFilter(String key, QueryPath path)
+    public IdentityQueryFilter(String key)
     {
-        super(key, path, ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, Integer.MAX_VALUE);
+        super(key, ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, null, false, Integer.MAX_VALUE);
     }
 
     public SuperColumn filterSuperColumn(SuperColumn superColumn, int gcBefore)

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java Tue Mar 30 15:14:03 2010
@@ -21,28 +21,26 @@ package org.apache.cassandra.db.filter;
  */
 
 
-import java.io.IOException;
 import java.util.*;
 
 import org.apache.cassandra.io.sstable.SSTableReader;
-import org.apache.cassandra.utils.ReducingIterator;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.config.DatabaseDescriptor;
 
-public class NamesQueryFilter extends QueryFilter
+public class NamesQueryFilter implements IFilter
 {
+    private final String key;
     public final SortedSet<byte[]> columns;
 
-    public NamesQueryFilter(String key, QueryPath columnParent, SortedSet<byte[]> columns)
+    public NamesQueryFilter(String key, SortedSet<byte[]> columns)
     {
-        super(key, columnParent);
+        this.key = key;
         this.columns = columns;
     }
 
-    public NamesQueryFilter(String key, QueryPath columnParent, byte[] column)
+    public NamesQueryFilter(String key, byte[] column)
     {
-        this(key, columnParent, getSingleColumnSet(column));
+        this(key, getSingleColumnSet(column));
     }
 
     private static TreeSet<byte[]> getSingleColumnSet(byte[] column)
@@ -59,9 +57,9 @@ public class NamesQueryFilter extends Qu
         return set;
     }
 
-    public ColumnIterator getMemColumnIterator(Memtable memtable, ColumnFamily cf, AbstractType comparator)
+    public ColumnIterator getMemtableColumnIterator(ColumnFamily cf, AbstractType comparator)
     {
-        return memtable.getNamesIterator(cf, this);
+        return Memtable.getNamesIterator(cf, this);
     }
 
     public ColumnIterator getSSTableColumnIterator(SSTableReader sstable)
@@ -73,7 +71,7 @@ public class NamesQueryFilter extends Qu
     {
         for (IColumn column : superColumn.getSubColumns())
         {
-            if (!columns.contains(column.name()))
+            if (!columns.contains(column.name()) || !QueryFilter.isRelevant(column, superColumn, gcBefore))
             {
                 superColumn.remove(column.name());
             }
@@ -90,4 +88,9 @@ public class NamesQueryFilter extends Qu
                 container.addColumn(column);
         }
     }
+
+    public Comparator<IColumn> getColumnComparator(AbstractType comparator)
+    {
+        return QueryFilter.getColumnComparator(comparator);
+    }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java Tue Mar 30 15:14:03 2010
@@ -22,57 +22,54 @@ package org.apache.cassandra.db.filter;
 
 
 import java.io.IOException;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Arrays;
+import java.util.*;
 
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.utils.ReducingIterator;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.marshal.AbstractType;
 
-public abstract class QueryFilter
+public class QueryFilter
 {
     public final String key;
     public final QueryPath path;
+    private final IFilter filter;
+    private final IFilter superFilter;
 
-    protected QueryFilter(String key, QueryPath path)
+    protected QueryFilter(String key, QueryPath path, IFilter filter)
     {
         this.key = key;
         this.path = path;
+        this.filter = filter;
+        superFilter = path.superColumnName == null ? null : new NamesQueryFilter(key, path.superColumnName);
     }
 
-    /**
-     * returns an iterator that returns columns from the given memtable
-     * matching the Filter criteria in sorted order.
-     */
-    public abstract ColumnIterator getMemColumnIterator(Memtable memtable, ColumnFamily cf, AbstractType comparator);
-
-    public ColumnIterator getMemColumnIterator(Memtable memtable, AbstractType comparator)
+    public ColumnIterator getMemtableColumnIterator(Memtable memtable, AbstractType comparator, int gcBefore)
     {
-        return getMemColumnIterator(memtable, memtable.getColumnFamily(key), comparator);
+        ColumnFamily cf = memtable.getColumnFamily(key);
+        if (cf == null)
+            return null;
+        return getMemtableColumnIterator(cf, comparator, gcBefore);
     }
 
-    /**
-     * returns an iterator that returns columns from the given SSTable
-     * matching the Filter criteria in sorted order.
-     */
-    public abstract ColumnIterator getSSTableColumnIterator(SSTableReader sstable);
-
-    /**
-     * collects columns from reducedColumns into returnCF.  Termination is determined
-     * by the filter code, which should have some limit on the number of columns
-     * to avoid running out of memory on large rows.
-     */
-    public abstract void collectReducedColumns(IColumnContainer container, Iterator<IColumn> reducedColumns, int gcBefore);
+    // TODO move gcBefore into a field
+    public ColumnIterator getMemtableColumnIterator(ColumnFamily cf, AbstractType comparator, int gcBefore)
+    {
+        assert cf != null;
+        if (path.superColumnName == null)
+            return filter.getMemtableColumnIterator(cf, comparator);
+        return superFilter.getMemtableColumnIterator(cf, comparator);
+    }
 
-    /**
-     * subcolumns of a supercolumn are unindexed, so to pick out parts of those we operate in-memory.
-     * @param superColumn may be modified by filtering op.
-     */
-    public abstract SuperColumn filterSuperColumn(SuperColumn superColumn, int gcBefore);
+    // TODO move gcBefore into a field
+    public ColumnIterator getSSTableColumnIterator(SSTableReader sstable, int gcBefore)
+    {
+        if (path.superColumnName == null)
+            return filter.getSSTableColumnIterator(sstable);
+        return superFilter.getSSTableColumnIterator(sstable);
+    }
 
-    public Comparator<IColumn> getColumnComparator(final AbstractType comparator)
+    public static Comparator<IColumn> getColumnComparator(final AbstractType comparator)
     {
         return new Comparator<IColumn>()
         {
@@ -83,7 +80,7 @@ public abstract class QueryFilter
         };
     }
     
-    public void collectCollatedColumns(final ColumnFamily returnCF, Iterator<IColumn> collatedColumns, int gcBefore)
+    public void collectCollatedColumns(final ColumnFamily returnCF, Iterator<IColumn> collatedColumns, final int gcBefore)
     {
         // define a 'reduced' iterator that merges columns w/ the same name, which
         // greatly simplifies computing liveColumns in the presence of tombstones.
@@ -104,12 +101,14 @@ public abstract class QueryFilter
             protected IColumn getReduced()
             {
                 IColumn c = curCF.getSortedColumns().iterator().next();
+                if (superFilter != null)
+                    c = filter.filterSuperColumn((SuperColumn)c, gcBefore);
                 curCF.clear();
                 return c;
             }
         };
 
-        collectReducedColumns(returnCF, reduced, gcBefore);
+        (superFilter == null ? filter : superFilter).collectReducedColumns(returnCF, reduced, gcBefore);
     }
 
     public String getColumnFamilyName()
@@ -126,4 +125,47 @@ public abstract class QueryFilter
         return (!column.isMarkedForDelete() || column.getLocalDeletionTime() > gcBefore || maxChange > column.getMarkedForDeleteAt()) // (1)
                && (!container.isMarkedForDelete() || maxChange > container.getMarkedForDeleteAt()); // (2)
     }
+
+    /**
+     * @return a QueryFilter object to satisfy the given slice criteria:
+     * @param key the row to slice
+     * @param path path to the level to slice at (CF or SuperColumn)
+     * @param start column to start slice at, inclusive; empty for "the first column"
+     * @param finish column to stop slice at, inclusive; empty for "the last column"
+     * @param bitmasks we should probably remove this
+     * @param reversed true to start with the largest column (as determined by configured sort order) instead of smallest
+     * @param limit maximum number of non-deleted columns to return
+     */
+    public static QueryFilter getSliceFilter(String key, QueryPath path, byte[] start, byte[] finish, List<byte[]> bitmasks, boolean reversed, int limit)
+    {
+        return new QueryFilter(key, path, new SliceQueryFilter(key, start, finish, bitmasks, reversed, limit));
+    }
+
+    /**
+     * return a QueryFilter object that includes every column in the row.
+     * This is dangerous on large rows; avoid except for test code.
+     */
+    public static QueryFilter getIdentityFilter(String key, QueryPath path)
+    {
+        return new QueryFilter(key, path, new IdentityQueryFilter(key));
+    }
+
+    /**
+     * @return a QueryFilter object that will return columns matching the given names
+     * @param key the row to slice
+     * @param path path to the level to slice at (CF or SuperColumn)
+     * @param columns the column names to restrict the results to
+     */
+    public static QueryFilter getNamesFilter(String key, QueryPath path, SortedSet<byte[]> columns)
+    {
+        return new QueryFilter(key, path, new NamesQueryFilter(key, columns));
+    }
+
+    /**
+     * convenience method for creating a name filter matching a single column
+     */
+    public static QueryFilter getNamesFilter(String key, QueryPath path, byte[] column)
+    {
+        return new QueryFilter(key, path, new NamesQueryFilter(key, column));
+    }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java Tue Mar 30 15:14:03 2010
@@ -21,7 +21,6 @@ package org.apache.cassandra.db.filter;
  */
 
 
-import java.io.IOException;
 import java.util.*;
 
 import org.slf4j.Logger;
@@ -39,23 +38,20 @@ import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterators;
 
-public class SliceQueryFilter extends QueryFilter
+public class SliceQueryFilter implements IFilter
 {
     private static Logger logger = LoggerFactory.getLogger(SliceQueryFilter.class);
 
-    public final byte[] start, finish;
+    private final String key;
+    public final byte[] start;
+    public final byte[] finish;
     public final List<byte[]> bitmasks;
     public final boolean reversed;
     public final int count;
 
-    public SliceQueryFilter(String key, QueryPath columnParent, byte[] start, byte[] finish, boolean reversed, int count)
+    public SliceQueryFilter(String key, byte[] start, byte[] finish, List<byte[]> bitmasks, boolean reversed, int count)
     {
-        this(key, columnParent, start, finish, null, reversed, count);
-    }
-
-    public SliceQueryFilter(String key, QueryPath columnParent, byte[] start, byte[] finish, List<byte[]> bitmasks, boolean reversed, int count)
-    {
-        super(key, columnParent);
+        this.key = key;
         this.start = start;
         this.finish = finish;
         this.reversed = reversed;
@@ -63,9 +59,9 @@ public class SliceQueryFilter extends Qu
         this.bitmasks = bitmasks;
     }
 
-    public ColumnIterator getMemColumnIterator(Memtable memtable, ColumnFamily cf, AbstractType comparator)
+    public ColumnIterator getMemtableColumnIterator(ColumnFamily cf, AbstractType comparator)
     {
-        return memtable.getSliceIterator(cf, this, comparator);
+        return Memtable.getSliceIterator(cf, this, comparator);
     }
 
     public ColumnIterator getSSTableColumnIterator(SSTableReader sstable)
@@ -114,10 +110,9 @@ public class SliceQueryFilter extends Qu
         return scFiltered;
     }
 
-    @Override
     public Comparator<IColumn> getColumnComparator(AbstractType comparator)
     {
-        return reversed ? new ReverseComparator(super.getColumnComparator(comparator)) : super.getColumnComparator(comparator);
+        return reversed ? new ReverseComparator(QueryFilter.getColumnComparator(comparator)) : QueryFilter.getColumnComparator(comparator);
     }
 
     public void collectReducedColumns(IColumnContainer container, Iterator<IColumn> reducedColumns, int gcBefore)
@@ -132,7 +127,8 @@ public class SliceQueryFilter extends Qu
 
             IColumn column = reducedColumns.next();
             if (logger.isDebugEnabled())
-                logger.debug("collecting " + column.getString(comparator));
+                logger.debug(String.format("collecting %s of %s: %s",
+                                           liveColumns, count, column.getString(comparator)));
 
             if (finish.length > 0
                 && ((!reversed && comparator.compare(column.name(), finish) > 0))

Modified: cassandra/trunk/test/system/test_thrift_server.py
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_thrift_server.py?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_thrift_server.py (original)
+++ cassandra/trunk/test/system/test_thrift_server.py Tue Mar 30 15:14:03 2010
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # to run a single test, run from trunk/:
-# PYTHONPATH=test nosetests --tests=system.test_server:TestMutations.test_empty_range
+# PYTHONPATH=test nosetests --tests=system.test_thrift_server:TestMutations.test_empty_range
 
 import os, sys, time, struct
 

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java Tue Mar 30 15:14:03 2010
@@ -29,6 +29,7 @@ import org.junit.Test;
 import static junit.framework.Assert.assertEquals;
 import org.apache.cassandra.CleanupHelper;
 import org.apache.cassandra.Util;
+import org.apache.cassandra.db.filter.*;
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.utils.WrappedRunnable;
 
@@ -36,10 +37,6 @@ import java.net.InetAddress;
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.dht.CollatingOrderPreservingPartitioner;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
-import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.filter.SliceQueryFilter;
-import org.apache.cassandra.db.filter.NamesQueryFilter;
 import org.apache.cassandra.io.sstable.SSTableReader;
 
 public class ColumnFamilyStoreTest extends CleanupHelper
@@ -70,7 +67,7 @@ public class ColumnFamilyStoreTest exten
         List<SSTableReader> ssTables = table.getAllSSTablesOnDisk();
         assertEquals(1, ssTables.size());
         ssTables.get(0).forceFilterFailures();
-        ColumnFamily cf = store.getColumnFamily(new IdentityQueryFilter("key2", new QueryPath("Standard1", null, "Column1".getBytes())));
+        ColumnFamily cf = store.getColumnFamily(QueryFilter.getIdentityFilter("key2", new QueryPath("Standard1", null, "Column1".getBytes())));
         assertNull(cf);
     }
 
@@ -89,9 +86,9 @@ public class ColumnFamilyStoreTest exten
         {
             public void runMayThrow() throws IOException
             {
-                SliceQueryFilter sliceFilter = new SliceQueryFilter("key1", new QueryPath("Standard2", null, null), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 1);
+                QueryFilter sliceFilter = QueryFilter.getSliceFilter("key1", new QueryPath("Standard2", null, null), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, null, false, 1);
                 assertNull(store.getColumnFamily(sliceFilter));
-                NamesQueryFilter namesFilter = new NamesQueryFilter("key1", new QueryPath("Standard2", null, null), "a".getBytes());
+                QueryFilter namesFilter = QueryFilter.getNamesFilter("key1", new QueryPath("Standard2", null, null), "a".getBytes());
                 assertNull(store.getColumnFamily(namesFilter));
             }
         };

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java Tue Mar 30 15:14:03 2010
@@ -30,7 +30,7 @@ import java.util.concurrent.Future;
 import org.junit.Test;
 
 import org.apache.cassandra.CleanupHelper;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.utils.FBUtilities;
@@ -85,13 +85,13 @@ public class CompactionsPurgeTest extend
         rm.apply();
         cfs.forceBlockingFlush();
         CompactionManager.instance.doCompaction(cfs, sstablesIncomplete, CompactionManager.getDefaultGCBefore());
-        ColumnFamily cf = cfs.getColumnFamily(new IdentityQueryFilter(key, new QueryPath(cfName)));
+        ColumnFamily cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfName)));
         assert cf.getColumnCount() == 10;
 
         // major compact and test that all columns but the resurrected one is completely gone
         CompactionManager.instance.submitMajor(cfs, 0, Integer.MAX_VALUE).get();
         cfs.invalidateCachedRow(key);
-        cf = cfs.getColumnFamily(new IdentityQueryFilter(key, new QueryPath(cfName)));
+        cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfName)));
         assertColumns(cf, "5");
         assert cf.getColumn(String.valueOf(5).getBytes()) != null;
     }
@@ -130,7 +130,7 @@ public class CompactionsPurgeTest extend
         // compact and test that the row is completely gone
         CompactionManager.instance.submitMajor(store, 0, Integer.MAX_VALUE).get();
         assert store.getSSTables().isEmpty();
-        ColumnFamily cf = table.getColumnFamilyStore(cfName).getColumnFamily(new IdentityQueryFilter(key, new QueryPath(cfName)));
+        ColumnFamily cf = table.getColumnFamilyStore(cfName).getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfName)));
         assert cf == null : cf;
     }
 }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java Tue Mar 30 15:14:03 2010
@@ -25,6 +25,7 @@ import org.apache.cassandra.config.Datab
 import org.apache.cassandra.config.KSMetaData;
 import org.apache.cassandra.db.commitlog.CommitLog;
 import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.db.filter.SliceQueryFilter;
 import org.apache.cassandra.db.marshal.BytesType;
@@ -109,7 +110,7 @@ public class DefsTest extends CleanupHel
         assert store != null;
         store.forceBlockingFlush();
         
-        ColumnFamily cfam = store.getColumnFamily(new NamesQueryFilter("key0", new QueryPath(cf), "col0".getBytes()));
+        ColumnFamily cfam = store.getColumnFamily(QueryFilter.getNamesFilter("key0", new QueryPath(cf), "col0".getBytes()));
         assert cfam.getColumn("col0".getBytes()) != null;
         IColumn col = cfam.getColumn("col0".getBytes());
         assert Arrays.equals("value0".getBytes(), col.value());
@@ -187,7 +188,7 @@ public class DefsTest extends CleanupHel
         // do some reads.
         store = Table.open(oldCfm.tableName).getColumnFamilyStore(newCfmName);
         assert store != null;
-        ColumnFamily cfam = store.getColumnFamily(new SliceQueryFilter("key0", new QueryPath(newCfmName), "".getBytes(), "".getBytes(), false, 1000));
+        ColumnFamily cfam = store.getColumnFamily(QueryFilter.getSliceFilter("key0", new QueryPath(newCfmName), "".getBytes(), "".getBytes(), null, false, 1000));
         assert cfam.getSortedColumns().size() == 100; // should be good enough?
         
         // do some writes
@@ -196,7 +197,7 @@ public class DefsTest extends CleanupHel
         rm.apply();
         store.forceBlockingFlush();
         
-        cfam = store.getColumnFamily(new NamesQueryFilter("key0", new QueryPath(newCfmName), "col5".getBytes()));
+        cfam = store.getColumnFamily(QueryFilter.getNamesFilter("key0", new QueryPath(newCfmName), "col5".getBytes()));
         assert cfam.getColumnCount() == 1;
         assert Arrays.equals(cfam.getColumn("col5".getBytes()).value(), "updated".getBytes());
     }
@@ -222,7 +223,7 @@ public class DefsTest extends CleanupHel
         assert store != null;
         store.forceBlockingFlush();
         
-        ColumnFamily cfam = store.getColumnFamily(new NamesQueryFilter("key0", new QueryPath(newCf.cfName), "col0".getBytes()));
+        ColumnFamily cfam = store.getColumnFamily(QueryFilter.getNamesFilter("key0", new QueryPath(newCf.cfName), "col0".getBytes()));
         assert cfam.getColumn("col0".getBytes()) != null;
         IColumn col = cfam.getColumn("col0".getBytes());
         assert Arrays.equals("value0".getBytes(), col.value());
@@ -342,7 +343,7 @@ public class DefsTest extends CleanupHel
         SortedSet<byte[]> cols = new TreeSet<byte[]>(new BytesType());
         cols.add("col0".getBytes());
         cols.add("col1".getBytes());
-        ColumnFamily cfam = store.getColumnFamily(new NamesQueryFilter("renameKs", new QueryPath(cfName), cols));
+        ColumnFamily cfam = store.getColumnFamily(QueryFilter.getNamesFilter("renameKs", new QueryPath(cfName), cols));
         assert cfam.getColumnCount() == cols.size();
         // tests new write.
         assert Arrays.equals(cfam.getColumn("col0".getBytes()).value(), "newvalue".getBytes());

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyTest.java Tue Mar 30 15:14:03 2010
@@ -24,7 +24,7 @@ import java.util.concurrent.ExecutionExc
 import org.junit.Test;
 
 import static junit.framework.Assert.assertNull;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.CleanupHelper;
 
@@ -47,7 +47,7 @@ public class RemoveColumnFamilyTest exte
         rm.delete(new QueryPath("Standard1"), 1);
         rm.apply();
 
-        ColumnFamily retrieved = store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Standard1", null, "Column1".getBytes())));
+        ColumnFamily retrieved = store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Standard1", null, "Column1".getBytes())));
         assert retrieved.isMarkedForDelete();
         assertNull(retrieved.getColumn("Column1".getBytes()));
         assertNull(ColumnFamilyStore.removeDeleted(retrieved, Integer.MAX_VALUE));

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush1Test.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush1Test.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush1Test.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush1Test.java Tue Mar 30 15:14:03 2010
@@ -24,7 +24,7 @@ import java.util.concurrent.ExecutionExc
 import org.junit.Test;
 
 import static junit.framework.Assert.assertNull;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.CleanupHelper;
 
@@ -49,7 +49,7 @@ public class RemoveColumnFamilyWithFlush
         rm.delete(new QueryPath("Standard1"), 1);
         rm.apply();
 
-        ColumnFamily retrieved = store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Standard1")));
+        ColumnFamily retrieved = store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Standard1")));
         assert retrieved.isMarkedForDelete();
         assertNull(retrieved.getColumn("Column1".getBytes()));
         assertNull(ColumnFamilyStore.removeDeleted(retrieved, Integer.MAX_VALUE));

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush2Test.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush2Test.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush2Test.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush2Test.java Tue Mar 30 15:14:03 2010
@@ -24,7 +24,7 @@ import java.util.concurrent.ExecutionExc
 import org.junit.Test;
 
 import static junit.framework.Assert.assertNull;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.CleanupHelper;
 
@@ -47,7 +47,7 @@ public class RemoveColumnFamilyWithFlush
         rm.apply();
         store.forceBlockingFlush();
 
-        ColumnFamily retrieved = store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Standard1", null, "Column1".getBytes())));
+        ColumnFamily retrieved = store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Standard1", null, "Column1".getBytes())));
         assert retrieved.isMarkedForDelete();
         assertNull(retrieved.getColumn("Column1".getBytes()));
         assertNull(ColumnFamilyStore.removeDeleted(retrieved, Integer.MAX_VALUE));

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnTest.java Tue Mar 30 15:14:03 2010
@@ -24,8 +24,8 @@ import java.util.concurrent.ExecutionExc
 import org.junit.Test;
 
 import static junit.framework.Assert.assertNull;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
 import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.CleanupHelper;
 
@@ -49,9 +49,9 @@ public class RemoveColumnTest extends Cl
         rm.delete(new QueryPath("Standard1", null, "Column1".getBytes()), 1);
         rm.apply();
 
-        ColumnFamily retrieved = store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Standard1"), "Column1".getBytes()));
+        ColumnFamily retrieved = store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Standard1"), "Column1".getBytes()));
         assert retrieved.getColumn("Column1".getBytes()).isMarkedForDelete();
         assertNull(ColumnFamilyStore.removeDeleted(retrieved, Integer.MAX_VALUE));
-        assertNull(ColumnFamilyStore.removeDeleted(store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Standard1"))), Integer.MAX_VALUE));
+        assertNull(ColumnFamilyStore.removeDeleted(store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Standard1"))), Integer.MAX_VALUE));
     }
 }
\ No newline at end of file

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSubColumnTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSubColumnTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSubColumnTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSubColumnTest.java Tue Mar 30 15:14:03 2010
@@ -24,7 +24,7 @@ import java.util.concurrent.ExecutionExc
 import org.junit.Test;
 
 import static junit.framework.Assert.assertNull;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import static org.apache.cassandra.Util.addMutation;
 import static org.apache.cassandra.Util.getBytes;
@@ -50,7 +50,7 @@ public class RemoveSubColumnTest extends
         rm.delete(new QueryPath("Super1", "SC1".getBytes(), getBytes(1)), 1);
         rm.apply();
 
-        ColumnFamily retrieved = store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Super1", "SC1".getBytes())));
+        ColumnFamily retrieved = store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Super1", "SC1".getBytes())));
         assert retrieved.getColumn("SC1".getBytes()).getSubColumn(getBytes(1)).isMarkedForDelete();
         assertNull(ColumnFamilyStore.removeDeleted(retrieved, Integer.MAX_VALUE));
     }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java Tue Mar 30 15:14:03 2010
@@ -27,8 +27,7 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertEquals;
 
 import org.apache.cassandra.Util;
-import org.apache.cassandra.db.filter.IdentityQueryFilter;
-import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import static org.apache.cassandra.Util.addMutation;
 import static org.apache.cassandra.Util.getBytes;
@@ -92,26 +91,26 @@ public class RemoveSuperColumnTest exten
     private void validateRemoveSubColumn() throws IOException
     {
         ColumnFamilyStore store = Table.open("Keyspace1").getColumnFamilyStore("Super3");
-        assertNull(store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Super3", "SC1".getBytes()), Util.getBytes(1)), Integer.MAX_VALUE));
-        assertNotNull(store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Super3", "SC1".getBytes()), Util.getBytes(2)), Integer.MAX_VALUE));
+        assertNull(store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Super3", "SC1".getBytes()), Util.getBytes(1)), Integer.MAX_VALUE));
+        assertNotNull(store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Super3", "SC1".getBytes()), Util.getBytes(2)), Integer.MAX_VALUE));
     }
 
     private void validateRemoveTwoSources() throws IOException
     {
         ColumnFamilyStore store = Table.open("Keyspace1").getColumnFamilyStore("Super1");
-        ColumnFamily resolved = store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Super1"), "SC1".getBytes()));
+        ColumnFamily resolved = store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Super1"), "SC1".getBytes()));
         assert resolved.getSortedColumns().iterator().next().getMarkedForDeleteAt() == 1 : resolved;
         assert resolved.getSortedColumns().iterator().next().getSubColumns().size() == 0 : resolved;
         assertNull(ColumnFamilyStore.removeDeleted(resolved, Integer.MAX_VALUE));
-        assertNull(store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Super1"), "SC1".getBytes()), Integer.MAX_VALUE));
-        assertNull(store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Super1")), Integer.MAX_VALUE));
-        assertNull(ColumnFamilyStore.removeDeleted(store.getColumnFamily(new IdentityQueryFilter("key1", new QueryPath("Super1"))), Integer.MAX_VALUE));
+        assertNull(store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Super1"), "SC1".getBytes()), Integer.MAX_VALUE));
+        assertNull(store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Super1")), Integer.MAX_VALUE));
+        assertNull(ColumnFamilyStore.removeDeleted(store.getColumnFamily(QueryFilter.getIdentityFilter("key1", new QueryPath("Super1"))), Integer.MAX_VALUE));
     }
 
     private void validateRemoveCompacted() throws IOException
     {
         ColumnFamilyStore store = Table.open("Keyspace1").getColumnFamilyStore("Super1");
-        ColumnFamily resolved = store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Super1"), "SC1".getBytes()));
+        ColumnFamily resolved = store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Super1"), "SC1".getBytes()));
         assert resolved.getSortedColumns().iterator().next().getMarkedForDeleteAt() == 1;
         Collection<IColumn> subColumns = resolved.getSortedColumns().iterator().next().getSubColumns();
         assert subColumns.size() == 0;
@@ -152,7 +151,7 @@ public class RemoveSuperColumnTest exten
     private void validateRemoveWithNewData() throws IOException
     {
         ColumnFamilyStore store = Table.open("Keyspace1").getColumnFamilyStore("Super2");
-        ColumnFamily resolved = store.getColumnFamily(new NamesQueryFilter("key1", new QueryPath("Super2", "SC1".getBytes()), getBytes(2)), Integer.MAX_VALUE);
+        ColumnFamily resolved = store.getColumnFamily(QueryFilter.getNamesFilter("key1", new QueryPath("Super2", "SC1".getBytes()), getBytes(2)), Integer.MAX_VALUE);
         Collection<IColumn> subColumns = resolved.getSortedColumns().iterator().next().getSubColumns();
         assert subColumns.size() == 1;
         assert subColumns.iterator().next().timestamp() == 2;
@@ -174,7 +173,7 @@ public class RemoveSuperColumnTest exten
         rm = new RowMutation("Keyspace1", key);
         rm.delete(new QueryPath("Super2", "SC1".getBytes()), 1);
         rm.apply();
-        assertNull(store.getColumnFamily(new NamesQueryFilter(key, new QueryPath("Super2"), "SC1".getBytes()), Integer.MAX_VALUE));
+        assertNull(store.getColumnFamily(QueryFilter.getNamesFilter(key, new QueryPath("Super2"), "SC1".getBytes()), Integer.MAX_VALUE));
 
         // resurrect
         rm = new RowMutation("Keyspace1", key);
@@ -182,7 +181,7 @@ public class RemoveSuperColumnTest exten
         rm.apply();
 
         // validate
-        ColumnFamily resolved = store.getColumnFamily(new NamesQueryFilter(key, new QueryPath("Super2"), "SC1".getBytes()), Integer.MAX_VALUE);
+        ColumnFamily resolved = store.getColumnFamily(QueryFilter.getNamesFilter(key, new QueryPath("Super2"), "SC1".getBytes()), Integer.MAX_VALUE);
         Collection<IColumn> subColumns = resolved.getSortedColumns().iterator().next().getSubColumns();
         assert subColumns.size() == 1;
         assert subColumns.iterator().next().timestamp() == 2;

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java Tue Mar 30 15:14:03 2010
@@ -34,6 +34,7 @@ import org.junit.Test;
 
 import static junit.framework.Assert.*;
 import org.apache.cassandra.CleanupHelper;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.utils.WrappedRunnable;
 import static org.apache.cassandra.Util.column;
 import static org.apache.cassandra.Util.getBytes;
@@ -76,13 +77,13 @@ public class TableTest extends CleanupHe
             {
                 ColumnFamily cf;
 
-                cf = cfStore.getColumnFamily(new NamesQueryFilter(TEST_KEY, new QueryPath("Standard3"), new TreeSet<byte[]>()));
+                cf = cfStore.getColumnFamily(QueryFilter.getNamesFilter(TEST_KEY, new QueryPath("Standard3"), new TreeSet<byte[]>()));
                 assertColumns(cf);
 
-                cf = cfStore.getColumnFamily(new SliceQueryFilter(TEST_KEY, new QueryPath("Standard3"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 0));
+                cf = cfStore.getColumnFamily(QueryFilter.getSliceFilter(TEST_KEY, new QueryPath("Standard3"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, null, false, 0));
                 assertColumns(cf);
 
-                cf = cfStore.getColumnFamily(new NamesQueryFilter(TEST_KEY, new QueryPath("Standard3"), "col99".getBytes()));
+                cf = cfStore.getColumnFamily(QueryFilter.getNamesFilter(TEST_KEY, new QueryPath("Standard3"), "col99".getBytes()));
                 assertColumns(cf);
             }
         };
@@ -109,10 +110,10 @@ public class TableTest extends CleanupHe
             {
                 ColumnFamily cf;
 
-                cf = cfStore.getColumnFamily(new NamesQueryFilter(TEST_KEY, new QueryPath("Standard1"), "col1".getBytes()));
+                cf = cfStore.getColumnFamily(QueryFilter.getNamesFilter(TEST_KEY, new QueryPath("Standard1"), "col1".getBytes()));
                 assertColumns(cf, "col1");
 
-                cf = cfStore.getColumnFamily(new NamesQueryFilter(TEST_KEY, new QueryPath("Standard1"), "col3".getBytes()));
+                cf = cfStore.getColumnFamily(QueryFilter.getNamesFilter(TEST_KEY, new QueryPath("Standard1"), "col3".getBytes()));
                 assertColumns(cf, "col3");
             }
         };

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java Tue Mar 30 15:14:03 2010
@@ -28,6 +28,8 @@ import static org.junit.Assert.assertEqu
 
 import org.apache.cassandra.CleanupHelper;
 import static org.apache.cassandra.Util.getBytes;
+
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.db.filter.NamesQueryFilter;
 import org.apache.cassandra.db.marshal.LongType;
@@ -104,7 +106,7 @@ public class TimeSortTest extends Cleanu
         TreeSet<byte[]> columnNames = new TreeSet<byte[]>(new LongType());
         columnNames.add(getBytes(10));
         columnNames.add(getBytes(0));
-        cf = cfStore.getColumnFamily(new NamesQueryFilter("900", new QueryPath("StandardLong1"), columnNames));
+        cf = cfStore.getColumnFamily(QueryFilter.getNamesFilter("900", new QueryPath("StandardLong1"), columnNames));
         assert "c".equals(new String(cf.getColumn(getBytes(0)).value()));
         assert "c".equals(new String(cf.getColumn(getBytes(10)).value()));
     }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java Tue Mar 30 15:14:03 2010
@@ -26,6 +26,7 @@ import java.util.Arrays;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.io.sstable.SSTableReader;
@@ -213,13 +214,13 @@ public class SSTableExportTest
         SSTableImport.importJson(tempJson.getPath(), "Keyspace1", "Standard1", tempSS2.getPath());        
         
         reader = SSTableReader.open(tempSS2.getPath(), DatabaseDescriptor.getPartitioner());
-        NamesQueryFilter qf = new NamesQueryFilter("rowA", new QueryPath("Standard1", null, null), "name".getBytes());
-        ColumnFamily cf = qf.getSSTableColumnIterator(reader).getColumnFamily();
+        QueryFilter qf = QueryFilter.getNamesFilter("rowA", new QueryPath("Standard1", null, null), "name".getBytes());
+        ColumnFamily cf = qf.getSSTableColumnIterator(reader, Integer.MAX_VALUE).getColumnFamily();
         assertTrue(cf != null);
         assertTrue(Arrays.equals(cf.getColumn("name".getBytes()).value(), hexToBytes("76616c")));
 
-        qf = new NamesQueryFilter("rowExclude", new QueryPath("Standard1", null, null), "name".getBytes());
-        cf = qf.getSSTableColumnIterator(reader).getColumnFamily();
+        qf = QueryFilter.getNamesFilter("rowExclude", new QueryPath("Standard1", null, null), "name".getBytes());
+        cf = qf.getSSTableColumnIterator(reader, Integer.MAX_VALUE).getColumnFamily();
         assert cf == null;
 
     }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java?rev=929163&r1=929162&r2=929163&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java Tue Mar 30 15:14:03 2010
@@ -25,6 +25,7 @@ import org.apache.cassandra.config.Datab
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.IColumn;
 import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import static org.apache.cassandra.utils.FBUtilities.hexToBytes;
@@ -44,8 +45,8 @@ public class SSTableImportTest
 
         // Verify results
         SSTableReader reader = SSTableReader.open(tempSS.getPath(), DatabaseDescriptor.getPartitioner());
-        NamesQueryFilter qf = new NamesQueryFilter("rowA", new QueryPath("Standard1", null, null), "colAA".getBytes());
-        ColumnFamily cf = qf.getSSTableColumnIterator(reader).getColumnFamily();
+        QueryFilter qf = QueryFilter.getNamesFilter("rowA", new QueryPath("Standard1", null, null), "colAA".getBytes());
+        ColumnFamily cf = qf.getSSTableColumnIterator(reader, Integer.MAX_VALUE).getColumnFamily();
         assert Arrays.equals(cf.getColumn("colAA".getBytes()).value(), hexToBytes("76616c4141"));
     }
 
@@ -58,8 +59,8 @@ public class SSTableImportTest
         
         // Verify results
         SSTableReader reader = SSTableReader.open(tempSS.getPath(), DatabaseDescriptor.getPartitioner());
-        NamesQueryFilter qf = new NamesQueryFilter("rowA", new QueryPath("Super4", null, null), "superA".getBytes());
-        ColumnFamily cf = qf.getSSTableColumnIterator(reader).getColumnFamily();
+        QueryFilter qf = QueryFilter.getNamesFilter("rowA", new QueryPath("Super4", null, null), "superA".getBytes());
+        ColumnFamily cf = qf.getSSTableColumnIterator(reader, Integer.MAX_VALUE).getColumnFamily();
         IColumn superCol = cf.getColumn("superA".getBytes());
         assert Arrays.equals(superCol.getSubColumn("colAA".getBytes()).value(), hexToBytes("76616c75654141"));
     }