1 package com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata; 2 3 import java.io.*; 4 5 import com.daffodilwoods.daffodildb.utils.comparator.*; 6 import com.daffodilwoods.database.utility.*; 7 8 19 20 public class KeyComparator extends SuperComparator implements Serializable { 21 22 25 26 private boolean[] orderSpecifications; 27 28 KeyComparator(boolean[] orderSpecifications1) { 29 orderSpecifications = orderSpecifications1; 30 } 31 32 43 44 public int compare(Object object1, Object object2) { 45 try { 46 if (object1 == null || object2 == null) { 47 return 0; 48 } 49 Object [] first = (Object []) object1; 50 Object [] second = (Object []) object2; 51 int length = first.length; 52 int state = 0; 53 boolean flag = false; 54 for (int i = 0; i < length; i++) { 55 if (first[i] != null && second[i] == null) { 56 if (state == 0) { 57 state = 1; 58 } 59 continue; 60 } 61 if (first[i] == null && second[i] != null) { 62 if (state == 0) { 63 state = -1; 64 } 65 continue; 66 } 67 if (first[i] == null && second[i] == null) { 68 continue; 69 } 70 int cmp = orderSpecifications[i] ? compareResult(first[i], second[i]) 71 : compareResult(second[i], first[i]); 72 if (cmp != 0) { 73 return state == -1 || state == 1 ? state : cmp; 74 } else { 75 flag = true; 76 } 77 } 78 return flag ? 0 : state; 79 } catch (ClassCastException ex) { 80 throw ex; 81 } 82 } 83 84 90 91 private int compareResult(Object first, Object second) { 92 if (first instanceof String ) { 93 return String.CASE_INSENSITIVE_ORDER.compare(first, second); 94 } 95 if (first instanceof Boolean ) { 96 boolean f1 = ( (Boolean ) first).booleanValue(); 97 boolean f2 = ( (Boolean ) second).booleanValue(); 98 return f1 ^ f2 ? f1 ? 1 : -1 : 0; 99 } 100 return ( (Comparable ) first).compareTo(second); 101 } 102 103 } 104 | Popular Tags |