adelapena commented on code in PR #2118:
URL: https://github.com/apache/cassandra/pull/2118#discussion_r1093074349


##########
src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java:
##########
@@ -266,6 +266,7 @@ public Term fromJSONObject(Object parsed)
     @Override
     public String toJSONString(ByteBuffer buffer, ProtocolVersion 
protocolVersion)
     {
+        //TODO suport toJSONString for AbstractCompositeType

Review Comment:
   ```suggestion
           // TODO: suport toJSONString (CASSANDRA-18177)
   ```



##########
src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java:
##########
@@ -88,7 +93,8 @@ public Term fromJSONObject(Object parsed)
     @Override
     public String toJSONString(ByteBuffer buffer, ProtocolVersion 
protocolVersion)
     {
-        throw new UnsupportedOperationException();
+        assert baseType != null && !baseType.equals(this) : 
"PartitionerDefinedOrder's toJSONString method need a baseType but now is null 
or with a not euqal type.";

Review Comment:
   ```suggestion
           assert baseType != null && !baseType.equals(this)
           : "PartitionerDefinedOrder's toJSONString method needs a baseType 
but now it is null or with a not equals type.";
   ```



##########
src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java:
##########
@@ -138,6 +144,38 @@ public TypeSerializer<ByteBuffer> getSerializer()
     @Override
     public String toString()
     {
+        if(baseType != null)
+        {
+            return String.format("%s(%s:%s)", getClass().getName(),  
partitioner.getClass().getName(), baseType.toString()); 

Review Comment:
   ```suggestion
               return String.format("%s(%s:%s)", getClass().getName(),  
partitioner.getClass().getName(), baseType); 
   ```



##########
src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java:
##########
@@ -138,6 +144,38 @@ public TypeSerializer<ByteBuffer> getSerializer()
     @Override
     public String toString()
     {
+        if(baseType != null)

Review Comment:
   ```suggestion
           if (baseType != null)
   ```



##########
src/java/org/apache/cassandra/db/marshal/TypeParser.java:
##########
@@ -131,6 +138,59 @@ public AbstractType<?> parse() throws SyntaxException, 
ConfigurationException
             return getAbstractType(name);
     }
 
+    /**
+     * parse PartitionOrdering from old version of PartitionOrdering' string 
format 
+     * */
+    private static  AbstractType<?> defaultParsePartitionOrdering(TypeParser 
typeParser)

Review Comment:
   ```suggestion
       private static AbstractType<?> defaultParsePartitionOrdering(TypeParser 
typeParser)
   ```



##########
src/java/org/apache/cassandra/index/internal/CassandraIndex.java:
##########
@@ -735,12 +736,18 @@ public static TableMetadata 
indexCfsMetadata(TableMetadata baseCfsMetadata, Inde
         ColumnMetadata indexedColumn = target.left;
         AbstractType<?> indexedValueType = 
utils.getIndexedValueType(indexedColumn);
 
+        AbstractType<?> indexedTablePartitionKeyType =  
baseCfsMetadata.partitioner.partitionOrdering();

Review Comment:
   ```suggestion
           AbstractType<?> indexedTablePartitionKeyType = 
baseCfsMetadata.partitioner.partitionOrdering();
   ```



##########
src/java/org/apache/cassandra/db/marshal/TypeParser.java:
##########
@@ -167,14 +227,14 @@ else if (str.charAt(idx) != ',' && str.charAt(idx) != ')')
         }
         throw new SyntaxException(String.format("Syntax error parsing '%s' at 
char %d: unexpected end of string", str, idx));
     }
-
+    

Review Comment:
   ```suggestion
   
   ```



##########
src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java:
##########
@@ -18,45 +18,50 @@
 package org.apache.cassandra.db.marshal;
 
 import java.nio.ByteBuffer;
-import java.util.Iterator;
 
-import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.cql3.Term;
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.PartitionPosition;
-import org.apache.cassandra.serializers.TypeSerializer;
-import org.apache.cassandra.serializers.MarshalException;
 import org.apache.cassandra.dht.IPartitioner;
+import org.apache.cassandra.serializers.MarshalException;
+import org.apache.cassandra.serializers.TypeSerializer;
 import org.apache.cassandra.transport.ProtocolVersion;
 import org.apache.cassandra.utils.bytecomparable.ByteComparable;
 import org.apache.cassandra.utils.bytecomparable.ByteComparable.Version;
 import org.apache.cassandra.utils.bytecomparable.ByteSource;
-import org.apache.cassandra.utils.FBUtilities;
+
 
 /** for sorting columns representing row keys in the row ordering as 
determined by a partitioner.
  * Not intended for user-defined CFs, and will in fact error out if used with 
such. */
 public class PartitionerDefinedOrder extends AbstractType<ByteBuffer>
 {
     private final IPartitioner partitioner;
-
+    private final AbstractType<?> baseType; 
+    
     public PartitionerDefinedOrder(IPartitioner partitioner)
     {
         super(ComparisonType.CUSTOM);
         this.partitioner = partitioner;
+        this.baseType = null;
+    }
+
+    public PartitionerDefinedOrder(IPartitioner partitioner, AbstractType<?> 
baseType)
+    {
+        super(ComparisonType.CUSTOM);
+        this.partitioner = partitioner;
+        this.baseType = baseType;
     }
 
     public static AbstractType<?> getInstance(TypeParser parser)
     {
-        IPartitioner partitioner = DatabaseDescriptor.getPartitioner();
-        Iterator<String> argIterator = 
parser.getKeyValueParameters().keySet().iterator();
-        if (argIterator.hasNext())
-        {
-            partitioner = FBUtilities.newPartitioner(argIterator.next());
-            assert !argIterator.hasNext();
-        }
-        return partitioner.partitionOrdering();
+        return parser.getPartitionerDefinedOrder();
     }
 
+    public AbstractType<?> withBaseType(AbstractType<?> baseType)
+    {
+        return new PartitionerDefinedOrder(this.partitioner, baseType);

Review Comment:
   ```suggestion
           return new PartitionerDefinedOrder(partitioner, baseType);
   ```



##########
src/java/org/apache/cassandra/index/internal/CassandraIndex.java:
##########
@@ -735,12 +736,18 @@ public static TableMetadata 
indexCfsMetadata(TableMetadata baseCfsMetadata, Inde
         ColumnMetadata indexedColumn = target.left;
         AbstractType<?> indexedValueType = 
utils.getIndexedValueType(indexedColumn);
 
+        AbstractType<?> indexedTablePartitionKeyType =  
baseCfsMetadata.partitioner.partitionOrdering();
+        if(indexedTablePartitionKeyType instanceof PartitionerDefinedOrder)
+        {
+            PartitionerDefinedOrder tmp = 
(PartitionerDefinedOrder)indexedTablePartitionKeyType;

Review Comment:
   ```suggestion
               PartitionerDefinedOrder tmp = (PartitionerDefinedOrder) 
indexedTablePartitionKeyType;
   ```



##########
src/java/org/apache/cassandra/index/internal/composites/RegularColumnIndex.java:
##########
@@ -76,7 +76,7 @@ public <T> CBuilder buildIndexClusteringPrefix(ByteBuffer 
partitionKey,
         // base table partition should be returned for any mathching index 
entry.
         return builder;
     }
-
+    

Review Comment:
   ```suggestion
   
   ```



##########
src/java/org/apache/cassandra/tools/Util.java:
##########
@@ -335,6 +338,15 @@ public static TableMetadata metadataFromSSTable(Descriptor 
desc) throws IOExcept
         {
             builder.addClusteringColumn("clustering" + (i > 0 ? i : ""), 
header.getClusteringTypes().get(i));
         }
+        if (SecondaryIndexManager.isIndexColumnFamily(desc.cfname))
+        {
+            String index = SecondaryIndexManager.getIndexName(desc.cfname);
+            // Just set the Kind of index to CUSTOM, which is an irrelevant 
parameter that does't make any effect on the result

Review Comment:
   ```suggestion
               // Just set the Kind of index to CUSTOM, which is an irrelevant 
parameter that doesn't make any effect on the result
   ```



##########
test/unit/org/apache/cassandra/SchemaLoader.java:
##########
@@ -390,7 +390,7 @@ public static TableMetadata.Builder staticCFMD(String 
ksName, String cfName)
                                  .addStaticColumn("val", AsciiType.instance)
                                  .addRegularColumn("val2", AsciiType.instance);
     }
-
+    

Review Comment:
   ```suggestion
   
   ```



##########
test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java:
##########
@@ -105,4 +109,119 @@ public void testParsePartitionerOrder() throws 
ConfigurationException, SyntaxExc
         }
         assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
     }
+    
+    @Test
+    public void testParsePartitionerOrderWithBaseType()
+    {
+        // default partitioner
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+
+        // PartitionerDefinedOrder's base type is not composite type
+        differentBaseTypeValidation(Int32Type.instance);
+        // PartitionerDefinedOrder's base type is  composite type
+        
differentBaseTypeValidation(CompositeType.getInstance(Int32Type.instance, 
UTF8Type.instance));
+        // PartitionerDefinedOrder's base type is  tuple type
+        differentBaseTypeValidation(new 
TupleType(Lists.newArrayList(Int32Type.instance, UTF8Type.instance)));
+        // PartitionerDefinedOrder's base type is  ReversedType
+        
differentBaseTypeValidation(ReversedType.getInstance(Int32Type.instance));
+        // PartitionerDefinedOrder's base type is  CollectionType

Review Comment:
   ```suggestion
           // PartitionerDefinedOrder's base type is CollectionType
   ```



##########
test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java:
##########
@@ -105,4 +109,119 @@ public void testParsePartitionerOrder() throws 
ConfigurationException, SyntaxExc
         }
         assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
     }
+    
+    @Test
+    public void testParsePartitionerOrderWithBaseType()
+    {
+        // default partitioner
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+
+        // PartitionerDefinedOrder's base type is not composite type
+        differentBaseTypeValidation(Int32Type.instance);
+        // PartitionerDefinedOrder's base type is  composite type
+        
differentBaseTypeValidation(CompositeType.getInstance(Int32Type.instance, 
UTF8Type.instance));
+        // PartitionerDefinedOrder's base type is  tuple type

Review Comment:
   ```suggestion
           // PartitionerDefinedOrder's base type is tuple type
   ```



##########
test/unit/org/apache/cassandra/SchemaLoader.java:
##########
@@ -252,7 +252,7 @@ public static void schemaDefinition(String testName) throws 
ConfigurationExcepti
         if 
(Boolean.parseBoolean(System.getProperty("cassandra.test.compression", 
"false")))
             useCompression(schema, 
compressionParams(CompressionParams.DEFAULT_CHUNK_LENGTH));
     }
-
+    

Review Comment:
   ```suggestion
   
   ```



##########
test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java:
##########
@@ -105,4 +109,119 @@ public void testParsePartitionerOrder() throws 
ConfigurationException, SyntaxExc
         }
         assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
     }
+    
+    @Test
+    public void testParsePartitionerOrderWithBaseType()
+    {
+        // default partitioner
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+
+        // PartitionerDefinedOrder's base type is not composite type
+        differentBaseTypeValidation(Int32Type.instance);
+        // PartitionerDefinedOrder's base type is  composite type
+        
differentBaseTypeValidation(CompositeType.getInstance(Int32Type.instance, 
UTF8Type.instance));
+        // PartitionerDefinedOrder's base type is  tuple type
+        differentBaseTypeValidation(new 
TupleType(Lists.newArrayList(Int32Type.instance, UTF8Type.instance)));
+        // PartitionerDefinedOrder's base type is  ReversedType
+        
differentBaseTypeValidation(ReversedType.getInstance(Int32Type.instance));
+        // PartitionerDefinedOrder's base type is  CollectionType
+        differentBaseTypeValidation(MapType.getInstance(Int32Type.instance, 
UTF8Type.instance, false));
+    }
+
+    @Test
+    public void testParsePartitionerOrderMistMatch()
+    {
+        for (IPartitioner partitioner: new IPartitioner[] { 
Murmur3Partitioner.instance,
+                                                            
ByteOrderedPartitioner.instance,
+                                                            
RandomPartitioner.instance,
+                                                            
OrderPreservingPartitioner.instance })
+        {
+            AbstractType<?> type = partitioner.partitionOrdering();
+            if (type instanceof PartitionerDefinedOrder)
+            {
+                PartitionerDefinedOrder tmp = (PartitionerDefinedOrder) type;
+                type = tmp.withBaseType(Int32Type.instance);
+                boolean result = 
partitioner.partitionOrdering().equals(TypeParser.parse(type.toString()));
+                assertFalse(result);
+            }
+            else
+            {
+                // ByteOrderedPartitioner.instance and 
OrderPreservingPartitioner.instance's partitionOrdering will not be 
PartitionerDefinedOrder
+                boolean result = 
partitioner.partitionOrdering().equals(TypeParser.parse(type.toString()));
+                assertTrue(result);
+            }
+        }
+
+        assertEquals(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+    }
+
+    @Test
+    public void testParsePartitionerOrderWithErrorFormat()
+    {
+        for (IPartitioner partitioner: new IPartitioner[] { 
Murmur3Partitioner.instance,
+                                                            
ByteOrderedPartitioner.instance,
+                                                            
RandomPartitioner.instance,
+                                                            
OrderPreservingPartitioner.instance })
+        {
+            AbstractType<?> type = partitioner.partitionOrdering();
+            if (type instanceof PartitionerDefinedOrder)
+            {
+                // only Murmur3Partitioner and RandomPartitioner's 
partitionOrdering() are instanceof PartitionerDefinedOrder
+                String msgPartitioner = partitioner instanceof 
Murmur3Partitioner ? "Murmur3Partitioner" : "RandomPartitioner";
+                // error format 
PartitionerDefinedOrder(org.apache.cassandra.dht.Murmur3Partitioner,
+                String tmpStr1 =  type.toString().replace(')', ',');
+                try
+                {
+                    TypeParser.parse(tmpStr1);
+                    fail();
+                }
+                catch (Throwable t)
+                {
+                    assertTrue(t.getCause().getMessage().contains("Syntax 
error parsing 
'org.apache.cassandra.db.marshal.PartitionerDefinedOrder(org.apache.cassandra.dht."
 + msgPartitioner + ",: for msg unexpected character ','"));
+                }
+
+                // error format 
PartitionerDefinedOrder(org.apache.cassandra.dht.Murmur3Partitioner>
+                String tmpStr2 =  type.toString().replace(')', '>');
+                try
+                {
+                    TypeParser.parse(tmpStr2);
+                    fail();
+                }
+                catch (Throwable t)
+                {
+                    assertTrue(t.getCause().getMessage().contains("Syntax 
error parsing 
'org.apache.cassandra.db.marshal.PartitionerDefinedOrder(org.apache.cassandra.dht."
 + msgPartitioner + ">: for msg unexpected character '>'"));
+                }
+
+                // error format 
PartitionerDefinedOrder(org.apache.cassandra.dht.Murmur3Partitioner>
+                String tmpStr3 =  type.toString().replace(')', ':');
+                try
+                {
+                    TypeParser.parse(tmpStr3);
+                    fail();
+                }
+                catch (Throwable t)
+                {
+                    assertTrue(t.getCause().getMessage().contains("Unable to 
find abstract-type class 'org.apache.cassandra.db.marshal.'"));
+                }
+            }
+        }
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+    }
+
+    private void differentBaseTypeValidation(AbstractType baseType)

Review Comment:
   ```suggestion
       private void differentBaseTypeValidation(AbstractType<?> baseType)
   ```



##########
src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java:
##########
@@ -138,6 +144,38 @@ public TypeSerializer<ByteBuffer> getSerializer()
     @Override
     public String toString()
     {
+        if(baseType != null)
+        {
+            return String.format("%s(%s:%s)", getClass().getName(),  
partitioner.getClass().getName(), baseType.toString()); 
+        }
         return String.format("%s(%s)", getClass().getName(), 
partitioner.getClass().getName());
     }
+    
+    public AbstractType<?>  getBaseType() 
+    { 
+        return baseType;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj)
+        {
+            return true;
+        }
+        if (obj instanceof PartitionerDefinedOrder)
+        {
+            PartitionerDefinedOrder other = (PartitionerDefinedOrder) obj;
+            if (baseType == null && other.baseType == null)
+            {
+                return this.partitioner.equals(other.partitioner);
+            }
+            else if (baseType != null && other.baseType != null)
+            {
+                return this.baseType.equals(other.baseType) && 
this.partitioner.equals(other.partitioner);
+            }
+            return false;

Review Comment:
   ```suggestion
               return partitioner.equals(other.partitioner) && 
Objects.equals(baseType, other.baseType);
   ```



##########
src/java/org/apache/cassandra/db/marshal/TypeParser.java:
##########
@@ -131,6 +138,59 @@ public AbstractType<?> parse() throws SyntaxException, 
ConfigurationException
             return getAbstractType(name);
     }
 
+    /**
+     * parse PartitionOrdering from old version of PartitionOrdering' string 
format 
+     * */
+    private static  AbstractType<?> defaultParsePartitionOrdering(TypeParser 
typeParser)
+    {
+        IPartitioner partitioner = DatabaseDescriptor.getPartitioner();
+        Iterator<String> argIterator = 
typeParser.getKeyValueParameters().keySet().iterator();
+        if (argIterator.hasNext())
+        {
+            partitioner = FBUtilities.newPartitioner(argIterator.next());
+            assert !argIterator.hasNext();
+        }
+        return partitioner.partitionOrdering();
+    }
+
+    /**
+     * parse and return the real PartitionerDefinedOrder from the string 
variable str
+     * the str format can be like PartitionerDefinedOrder(<partitioner>) or
+     * PartitionerDefinedOrder(<partitioner>:<baseType>)
+     * */

Review Comment:
   ```suggestion
        * Parse and return the real {@link PartitionerDefinedOrder} from the 
string variable {@link #str}.
        * The {@link #str} format can be like {@code 
PartitionerDefinedOrder(<partitioner>)} or
        * {@code PartitionerDefinedOrder(<partitioner>:<baseType>)}.
        */
   ```



##########
src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java:
##########
@@ -138,6 +144,38 @@ public TypeSerializer<ByteBuffer> getSerializer()
     @Override
     public String toString()
     {
+        if(baseType != null)
+        {
+            return String.format("%s(%s:%s)", getClass().getName(),  
partitioner.getClass().getName(), baseType.toString()); 
+        }
         return String.format("%s(%s)", getClass().getName(), 
partitioner.getClass().getName());
     }
+    
+    public AbstractType<?>  getBaseType() 

Review Comment:
   ```suggestion
       @Nullable
       public AbstractType<?>  getBaseType()
   ```



##########
src/java/org/apache/cassandra/index/internal/CassandraIndex.java:
##########
@@ -735,12 +736,18 @@ public static TableMetadata 
indexCfsMetadata(TableMetadata baseCfsMetadata, Inde
         ColumnMetadata indexedColumn = target.left;
         AbstractType<?> indexedValueType = 
utils.getIndexedValueType(indexedColumn);
 
+        AbstractType<?> indexedTablePartitionKeyType =  
baseCfsMetadata.partitioner.partitionOrdering();
+        if(indexedTablePartitionKeyType instanceof PartitionerDefinedOrder)

Review Comment:
   ```suggestion
           if (indexedTablePartitionKeyType instanceof PartitionerDefinedOrder)
   ```



##########
src/java/org/apache/cassandra/index/internal/CassandraIndexFunctions.java:
##########
@@ -183,6 +212,22 @@ public TableMetadata.Builder 
addIndexClusteringColumns(TableMetadata.Builder bui
             builder.addClusteringColumn("cell_path", 
((CollectionType)columnDef.type).nameComparator());
             return builder;
         }
+
+        @Override
+        public AbstractType<?> getIndexedPartitionKeyType(ColumnMetadata 
indexedColumn)
+        {
+            assert indexedColumn.type.isCollection() ;
+            switch (((CollectionType<?>)indexedColumn.type).kind)
+            {
+                case LIST:
+                    return ((ListType<?>)indexedColumn.type).getElementsType();
+                case SET:
+                    return ((SetType<?>)indexedColumn.type).getElementsType();
+                case MAP:
+                    return ((MapType<?, ?>)indexedColumn.type).getValuesType();

Review Comment:
   ```suggestion
               switch (((CollectionType<?>) indexedColumn.type).kind)
               {
                   case LIST:
                       return ((ListType<?>) 
indexedColumn.type).getElementsType();
                   case SET:
                       return ((SetType<?>) 
indexedColumn.type).getElementsType();
                   case MAP:
                       return ((MapType<?, ?>) 
indexedColumn.type).getValuesType();
   ```



##########
src/java/org/apache/cassandra/tools/SSTableExport.java:
##########
@@ -71,8 +72,15 @@
 
     static
     {
-        DatabaseDescriptor.clientInitialization();
-
+        if (Boolean.getBoolean(Util.ALLOW_TOOL_REINIT_FOR_TEST))
+        {
+            DatabaseDescriptor.clientInitialization(false);//Necessary for 
testing
+        }
+        else 
+        {
+            DatabaseDescriptor.clientInitialization();
+        }

Review Comment:
   ```suggestion
           
DatabaseDescriptor.clientInitialization(!Boolean.getBoolean(Util.ALLOW_TOOL_REINIT_FOR_TEST));
   ```



##########
src/java/org/apache/cassandra/db/marshal/TypeParser.java:
##########
@@ -131,6 +138,59 @@ public AbstractType<?> parse() throws SyntaxException, 
ConfigurationException
             return getAbstractType(name);
     }
 
+    /**
+     * parse PartitionOrdering from old version of PartitionOrdering' string 
format 
+     * */

Review Comment:
   ```suggestion
        * Parse PartitionOrdering from old version of PartitionOrdering' string 
format 
        */
   ```



##########
src/java/org/apache/cassandra/db/marshal/TypeParser.java:
##########
@@ -167,14 +227,14 @@ else if (str.charAt(idx) != ',' && str.charAt(idx) != ')')
         }
         throw new SyntaxException(String.format("Syntax error parsing '%s' at 
char %d: unexpected end of string", str, idx));
     }
-
+    
     public List<AbstractType<?>> getTypeParameters() throws SyntaxException, 
ConfigurationException
     {
         List<AbstractType<?>> list = new ArrayList<>();
 
         if (isEOS())
             return list;
-
+        

Review Comment:
   ```suggestion
   
   ```



##########
test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java:
##########
@@ -105,4 +109,119 @@ public void testParsePartitionerOrder() throws 
ConfigurationException, SyntaxExc
         }
         assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
     }
+    
+    @Test
+    public void testParsePartitionerOrderWithBaseType()
+    {
+        // default partitioner
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+
+        // PartitionerDefinedOrder's base type is not composite type
+        differentBaseTypeValidation(Int32Type.instance);
+        // PartitionerDefinedOrder's base type is  composite type

Review Comment:
   ```suggestion
           // PartitionerDefinedOrder's base type is composite type
   ```



##########
test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java:
##########
@@ -105,4 +109,119 @@ public void testParsePartitionerOrder() throws 
ConfigurationException, SyntaxExc
         }
         assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
     }
+    
+    @Test
+    public void testParsePartitionerOrderWithBaseType()
+    {
+        // default partitioner
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+
+        // PartitionerDefinedOrder's base type is not composite type
+        differentBaseTypeValidation(Int32Type.instance);
+        // PartitionerDefinedOrder's base type is  composite type
+        
differentBaseTypeValidation(CompositeType.getInstance(Int32Type.instance, 
UTF8Type.instance));
+        // PartitionerDefinedOrder's base type is  tuple type
+        differentBaseTypeValidation(new 
TupleType(Lists.newArrayList(Int32Type.instance, UTF8Type.instance)));
+        // PartitionerDefinedOrder's base type is  ReversedType
+        
differentBaseTypeValidation(ReversedType.getInstance(Int32Type.instance));
+        // PartitionerDefinedOrder's base type is  CollectionType
+        differentBaseTypeValidation(MapType.getInstance(Int32Type.instance, 
UTF8Type.instance, false));
+    }
+
+    @Test
+    public void testParsePartitionerOrderMistMatch()
+    {
+        for (IPartitioner partitioner: new IPartitioner[] { 
Murmur3Partitioner.instance,
+                                                            
ByteOrderedPartitioner.instance,
+                                                            
RandomPartitioner.instance,
+                                                            
OrderPreservingPartitioner.instance })

Review Comment:
   This block is repeated four times in this class, we might want to 
encapsulate it into a method:
   ```java
   private static void assertForEachPartitioner(Consumer<IPartitioner> consumer)
   {
       for (IPartitioner partitioner : new IPartitioner[] { 
Murmur3Partitioner.instance,
                                                            
ByteOrderedPartitioner.instance,
                                                            
RandomPartitioner.instance,
                                                            
OrderPreservingPartitioner.instance })
       {
           consumer.accept(partitioner);
       }
   }
   ```



##########
test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java:
##########
@@ -105,4 +109,119 @@ public void testParsePartitionerOrder() throws 
ConfigurationException, SyntaxExc
         }
         assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
     }
+    
+    @Test
+    public void testParsePartitionerOrderWithBaseType()
+    {
+        // default partitioner
+        assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), 
TypeParser.parse("PartitionerDefinedOrder"));
+
+        // PartitionerDefinedOrder's base type is not composite type
+        differentBaseTypeValidation(Int32Type.instance);
+        // PartitionerDefinedOrder's base type is  composite type
+        
differentBaseTypeValidation(CompositeType.getInstance(Int32Type.instance, 
UTF8Type.instance));
+        // PartitionerDefinedOrder's base type is  tuple type
+        differentBaseTypeValidation(new 
TupleType(Lists.newArrayList(Int32Type.instance, UTF8Type.instance)));
+        // PartitionerDefinedOrder's base type is  ReversedType

Review Comment:
   ```suggestion
           // PartitionerDefinedOrder's base type is ReversedType
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to