You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/07/30 20:44:37 UTC

[14/35] incubator-usergrid git commit: Fixes but with comparator ordering and uuid comparison when secondary compare fails

Fixes but with comparator ordering and uuid comparison when secondary compare fails


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/501da721
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/501da721
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/501da721

Branch: refs/heads/ug2-doc-update
Commit: 501da721b6f0e2ec45c94f5e21d7fad723121dc1
Parents: 84d7760
Author: Todd Nine <tn...@apigee.com>
Authored: Mon Jul 6 12:33:05 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
Committed: Mon Jul 6 12:33:05 2015 -0600

----------------------------------------------------------------------
 .../ir/result/SecondaryIndexSliceParser.java    | 93 ++++++++++++--------
 1 file changed, 56 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/501da721/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/SecondaryIndexSliceParser.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/SecondaryIndexSliceParser.java b/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/SecondaryIndexSliceParser.java
index d309c3d..bd1cc9f 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/SecondaryIndexSliceParser.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/SecondaryIndexSliceParser.java
@@ -100,7 +100,7 @@ public class SecondaryIndexSliceParser implements SliceParser {
          */
         public SecondaryIndexColumn( final UUID uuid, final Object value, final ByteBuffer columnNameBuffer,
                                      final Comparator<SecondaryIndexColumn> valueComparator,
-                                     final SliceCursorGenerator sliceCursorGenerator) {
+                                     final SliceCursorGenerator sliceCursorGenerator ) {
             super( uuid, columnNameBuffer, sliceCursorGenerator );
             this.value = value;
             this.valueComparator = valueComparator;
@@ -130,24 +130,24 @@ public class SecondaryIndexSliceParser implements SliceParser {
     static {
 
         final LongComparator longComparator = new LongComparator();
-        COMPARATOR_MAP.put( new MapKey( Long.class, false ), longComparator );
-        COMPARATOR_MAP.put( new MapKey( Long.class, true ), new ReverseComparator( longComparator ) );
+        COMPARATOR_MAP.put( new MapKey( Long.class, false ), new ForwardValueComparator( longComparator ) );
+        COMPARATOR_MAP.put( new MapKey( Long.class, true ), new ReverseValueComparator( longComparator ) );
 
         final StringComparator stringComparator = new StringComparator();
 
-        COMPARATOR_MAP.put( new MapKey( String.class, false ), stringComparator );
-        COMPARATOR_MAP.put( new MapKey( String.class, true ), new ReverseComparator( stringComparator ) );
+        COMPARATOR_MAP.put( new MapKey( String.class, false ), new ForwardValueComparator( stringComparator ) );
+        COMPARATOR_MAP.put( new MapKey( String.class, true ), new ReverseValueComparator( stringComparator ) );
 
 
         final UUIDComparator uuidComparator = new UUIDComparator();
 
-        COMPARATOR_MAP.put( new MapKey( UUID.class, false ), uuidComparator );
-        COMPARATOR_MAP.put( new MapKey( UUID.class, true ), new ReverseComparator( uuidComparator ) );
+        COMPARATOR_MAP.put( new MapKey( UUID.class, false ), new ForwardValueComparator( uuidComparator ) );
+        COMPARATOR_MAP.put( new MapKey( UUID.class, true ), new ReverseValueComparator( uuidComparator ) );
 
         final BigIntegerComparator bigIntegerComparator = new BigIntegerComparator();
 
-        COMPARATOR_MAP.put( new MapKey( BigInteger.class, false ), bigIntegerComparator );
-        COMPARATOR_MAP.put( new MapKey( BigInteger.class, true ), new ReverseComparator( bigIntegerComparator ) );
+        COMPARATOR_MAP.put( new MapKey( BigInteger.class, false ), new ForwardValueComparator( bigIntegerComparator ) );
+        COMPARATOR_MAP.put( new MapKey( BigInteger.class, true ), new ReverseValueComparator( bigIntegerComparator ) );
     }
 
 
@@ -192,23 +192,7 @@ public class SecondaryIndexSliceParser implements SliceParser {
     }
 
 
-    private static abstract class SecondaryIndexColumnComparator implements Comparator<SecondaryIndexColumn> {
-
-        /**
-         * If the result of compare is != 0 it is returned, otherwise the uuids are compared
-         */
-        protected int compareValues( final int compare, final SecondaryIndexColumn first,
-                                     SecondaryIndexColumn second ) {
-            if ( compare != 0 ) {
-                return compare;
-            }
-
-            return com.fasterxml.uuid.UUIDComparator.staticCompare( first.uuid, second.uuid );
-        }
-    }
-
-
-    private static final class LongComparator extends SecondaryIndexColumnComparator {
+    private static final class LongComparator implements Comparator<SecondaryIndexColumn> {
 
         @Override
         public int compare( final SecondaryIndexColumn first, final SecondaryIndexColumn second ) {
@@ -217,12 +201,12 @@ public class SecondaryIndexSliceParser implements SliceParser {
             final Long secondLong = ( Long ) second.value;
 
 
-            return compareValues( Long.compare( firstLong, secondLong ), first, second );
+            return Long.compare( firstLong, secondLong );
         }
     }
 
 
-    private static final class StringComparator extends SecondaryIndexColumnComparator {
+    private static final class StringComparator implements Comparator<SecondaryIndexColumn> {
         @Override
         public int compare( final SecondaryIndexColumn first, final SecondaryIndexColumn second ) {
 
@@ -234,49 +218,84 @@ public class SecondaryIndexSliceParser implements SliceParser {
             final String secondString = ( String ) second.value;
 
 
-            return compareValues( firstString.compareTo( secondString ), first, second );
+            return firstString.compareTo( secondString );
         }
     }
 
 
-    private static final class UUIDComparator extends SecondaryIndexColumnComparator {
+    private static final class UUIDComparator implements Comparator<SecondaryIndexColumn> {
         @Override
         public int compare( final SecondaryIndexColumn first, final SecondaryIndexColumn second ) {
             final UUID firstUUID = ( UUID ) first.value;
             final UUID secondUUID = ( UUID ) second.value;
 
 
-            return compareValues( UUIDUtils.compare( firstUUID, secondUUID ), first, second );
+            return UUIDUtils.compare( firstUUID, secondUUID );
         }
     }
 
 
-    private static final class BigIntegerComparator extends SecondaryIndexColumnComparator {
+    private static final class BigIntegerComparator implements Comparator<SecondaryIndexColumn> {
         @Override
         public int compare( final SecondaryIndexColumn first, final SecondaryIndexColumn second ) {
             final BigInteger firstInt = ( BigInteger ) first.value;
             final BigInteger secondInt = ( BigInteger ) second.value;
 
 
-            return compareValues( firstInt.compareTo( secondInt ), first, second );
+            return firstInt.compareTo( secondInt );
+        }
+    }
+
+
+    /**
+     * Delegates to the type comparator, if equal, sorts by UUID ascending always
+     */
+    private static final class ForwardValueComparator implements Comparator<SecondaryIndexColumn> {
+
+        private final Comparator<SecondaryIndexColumn> comparator;
+
+
+        private ForwardValueComparator( final Comparator<SecondaryIndexColumn> comparator ) {
+            this.comparator = comparator;
+        }
+
+
+        @Override
+        public int compare( final SecondaryIndexColumn first, final SecondaryIndexColumn second ) {
+
+            int compare = comparator.compare( first, second );
+
+            if ( compare == 0 ) {
+                return com.fasterxml.uuid.UUIDComparator.staticCompare( first.uuid, second.uuid );
+            }
+
+            return compare;
         }
     }
 
 
     /**
-     * Reversed our comparator
+     * Reversed our delegate comparator, if equal, compares by uuid ascending
      */
-    private static final class ReverseComparator implements Comparator<SecondaryIndexColumn> {
+    private static final class ReverseValueComparator implements Comparator<SecondaryIndexColumn> {
 
         private final Comparator<SecondaryIndexColumn> comparator;
 
 
-        private ReverseComparator( final Comparator<SecondaryIndexColumn> comparator ) {this.comparator = comparator;}
+        private ReverseValueComparator( final Comparator<SecondaryIndexColumn> comparator ) {
+            this.comparator = comparator;
+        }
 
 
         @Override
         public int compare( final SecondaryIndexColumn first, final SecondaryIndexColumn second ) {
-            return comparator.compare( first, second ) * -1;
+            int compare = comparator.compare( first, second ) * -1;
+
+            if ( compare == 0 ) {
+                return com.fasterxml.uuid.UUIDComparator.staticCompare( first.uuid, second.uuid );
+            }
+
+            return compare;
         }
     }
 }