| 1 package com.daffodilwoods.daffodildb.client; 2 3 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata.*; 4 5 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata._RowReader; 6 7 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata.SelectKeyColumnInformation; 8 9 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata.AllColumnRowReader; 10 11 import com.daffodilwoods.database.sqlinitiator.*; 12 import com.daffodilwoods.database.resource.*; 13 import com.daffodilwoods.database.general.*; 14 15 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 16 17 import java.util.Comparator ; 18 import com.daffodilwoods.database.utility.*; 19 import com.daffodilwoods.daffodildb.server.sql99.dql.queryexpression.*; 20 import com.daffodilwoods.daffodildb.utils.comparator.SuperComparator; 21 public class RSBKeyComparator implements Comparator { 22 23 SuperComparator comparator; 24 _RowReader rowReader; 25 26 public RSBKeyComparator(SuperComparator comparator0,_RowReader rowReader0) { 27 comparator = comparator0; 28 rowReader = rowReader0; 29 } 30 31 public int compare(Object first, Object second) { 32 if(first == null || second == null){ 33 return 0; 34 } 35 Object key1 = ((RecordSetBuffer.RBTreeLocationId)first).rowKey; 36 Object key2 = ((RecordSetBuffer.RBTreeLocationId)second).rowKey; 37 try { 38 return comparator.compare(key1,key2); 39 } 40 catch (ClassCastException ex) { 41 throw ex; 42 } 43 catch(DException de){ 44 } 45 throw new UnsupportedOperationException ("Method not supported"); 46 } 47 48 public Object getOrderValues(Object values) throws DException { 49 return ((_AllColumnRowReader)rowReader).getKey(values); 50 51 } 52 53 SuperComparator getComparator() throws DException{ 54 return comparator; 55 } 56 57 public int compare1(Object object1,Object object2){ 58 try { 59 if(object1 == null || object2 == null) 60 return 0; 61 Object [] first = (Object [])object1; 62 Object [] second = (Object [])object2; 63 int length = first.length; 64 int state = 0; 65 boolean flag = false; 66 for (int i = 0; i < length; i++) { 67 if(first[i] != null && second[i] == null) { 68 if(state == 0) 69 state = 1; 70 continue; 71 } 72 if(first[i] == null && second[i] != null){ 73 if(state == 0) 74 state = -1; 75 continue; 76 } 77 if(first[i] == null && second[i] == null) 78 continue; 79 80 int cmp = compareResult(second[i],first[i]); 81 82 if(cmp != 0) 83 return state == -1 || state == 1 ? state : cmp; 84 else 85 flag = true; 86 } 87 return flag ? 0 : state; 88 } 89 catch (ClassCastException ex) { 90 throw ex; 91 } 92 } 93 94 private int compareResult(Object first, Object second) { 95 try{ 96 IgnoreValue i2 = (IgnoreValue)second; 97 return 0; 98 }catch(ClassCastException cce1){ } 99 if (first instanceof String ) 100 return String.CASE_INSENSITIVE_ORDER.compare(first,second); 101 if (first instanceof Boolean ){ 102 boolean f1 = ((Boolean )first).booleanValue(); 103 boolean f2 = ((Boolean )second).booleanValue(); 104 return f1 ^ f2 ? f1 ? 1 : -1 : 0; 105 } 106 return ((Comparable )first).compareTo(second); 107 } 108 109 } 110 | Popular Tags |