1 package com.daffodilwoods.daffodildb.server.sql99.common; 2 3 import com.daffodilwoods.daffodildb.server.sql99.expression. 4 booleanvalueexpression.*; 5 import com.daffodilwoods.daffodildb.server.sql99.common.TypeConstants; 6 import java.util.ArrayList ; 7 import com.daffodilwoods.database.resource.DException; 8 9 20 public class ConditionArray 21 implements TypeConstants { 22 23 public ArrayList conditionArray; 24 public ConditionArray() { 25 conditionArray = new ArrayList (); 26 } 27 28 public ConditionArray(ArrayList conditionArray) { 29 this.conditionArray = conditionArray; 30 } 31 32 public void addCondition(booleanvalueexpression condition) throws DException { 33 conditionArray.add(condition); 34 } 35 36 41 public TableDetails[] getTableDetails() throws DException { 42 ArrayList tableDetails = new ArrayList (); 43 for (int i = 0, size = conditionArray.size(); i < size; i++) { 44 ColumnDetails[] cds = ( (booleanvalueexpression) conditionArray.get(i)). 45 getColumnDetails(); 46 TableDetails[] tds = getTableDetailsOfRefernceType(cds); 47 for (int j = 0; j < tds.length; j++) { 48 if (!tableDetails.contains(tds[j])) { 49 tableDetails.add(tds[j]); 50 } 51 } 52 } 53 return (TableDetails[]) tableDetails.toArray(new TableDetails[tableDetails. 54 size()]); 55 } 56 57 62 public TableDetails[] getTableDetails(TableDetails[] leftTableDetails) throws 63 DException { 64 ArrayList tableDetails = new ArrayList (); 65 for (int i = 0, size = conditionArray.size(); i < size; i++) { 66 booleanvalueexpression cond = (booleanvalueexpression) conditionArray.get( 67 i); 68 ColumnDetails[] cds = cond.getColumnDetails(); 69 TableDetails[] tds = getTableDetailsOfRefernceType(cds); 70 if (cond.isNullPredicate() && containsTD(leftTableDetails, tds)) { 71 continue; 72 } 73 for (int j = 0; j < tds.length; j++) { 74 if (!tableDetails.contains(tds[j])) { 75 tableDetails.add(tds[j]); 76 } 77 } 78 } 79 return tableDetails.isEmpty() ? null : 80 (TableDetails[]) tableDetails.toArray(new TableDetails[tableDetails. 81 size()]); 82 } 83 84 private boolean containsTD(TableDetails[] scope, TableDetails[] target) throws 85 DException { 86 if (scope == null || target == null) { 87 return false; 88 } 89 for (int i = 0; i < scope.length; i++) { 90 for (int j = 0; j < target.length; j++) { 91 if (target[j] == scope[i]) { 92 return true; 93 } 94 } 95 } 96 return false; 97 } 98 99 public String toString() { 100 return conditionArray.toString(); 101 } 102 103 public TableDetails[] getTableDetailsOfRefernceType(ColumnDetails[] 104 columnDetails) throws DException { 105 ArrayList aList = new ArrayList (5); 106 for (int i = 0; i < columnDetails.length; i++) { 107 if (columnDetails[i].getType() == REFERENCE) { 108 TableDetails table = columnDetails[i].getTableDetails(); 109 if (!aList.contains(table)) 110 aList.add(table); 111 } 112 } 113 return (TableDetails[]) aList.toArray(new TableDetails[aList.size()]); 114 } 115 116 public Object clone() throws CloneNotSupportedException { 117 ConditionArray array = new ConditionArray( (ArrayList ) conditionArray.clone()); 118 return array; 119 } 120 121 } 122 | Popular Tags |