1 package com.daffodilwoods.daffodildb.server.sql99.dql.iterator.table; 2 3 import com.daffodilwoods.daffodildb.server.sql99.common.*; 4 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 5 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.set.*; 6 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 7 import com.daffodilwoods.daffodildb.utils.field.*; 8 import com.daffodilwoods.database.resource.*; 9 10 25 public class NaturalFullJoinUnionIterator extends FullJoinUnionIterator { 26 27 30 private Object [][] commonColumns; 31 32 39 public NaturalFullJoinUnionIterator(_Iterator leftIterator0, _Iterator rightIterator0, Object [][] commonColumns0) throws DException { 40 super(leftIterator0, rightIterator0); 41 commonColumns = modifyMapping(commonColumns0); 42 } 43 44 51 private Object [][] modifyMapping(Object [][] commonColumns0) { 52 Object [][] newMapping = new Object [commonColumns0.length][3]; 53 for (int i = 0; i < commonColumns0.length; i++) { 54 ColumnDetails column = (ColumnDetails) commonColumns0[i][0]; 55 newMapping[i][0] = column.getColumn(); 56 newMapping[i][1] = column; 57 newMapping[i][2] = commonColumns0[i][1]; 58 } 59 return newMapping; 60 } 61 62 68 77 public Object getColumnValues(_Reference reference) throws DException { 78 reference = getAppropriateReference(reference); 79 if (state == FIRSTISCURRENT) { 80 return leftIterator.getColumnValues(reference); 81 } else if (state == SECONDISCURRENT) { 82 return rightIterator.getColumnValues(reference); 83 } 84 throw new DException("DSE3518", null); 85 } 86 87 96 public Object getColumnValues(_Reference[] references) throws DException { 97 references = getAppropriateReference(references); 98 if (state == FIRSTISCURRENT) { 99 return leftIterator.getColumnValues(references); 100 } else if (state == SECONDISCURRENT) { 101 return rightIterator.getColumnValues(references); 102 } 103 throw new DException("DSE3518", null); 104 } 105 106 114 public FieldBase field(_Reference reference) throws com.daffodilwoods.database.resource.DException { 115 reference = getAppropriateReference(reference); 116 return state == FIRSTISCURRENT ? leftIterator.field(reference) : 117 rightIterator.field(reference); 118 } 119 120 128 public FieldBase[] fields(_Reference[] references) throws com.daffodilwoods.database.resource.DException { 129 references = getAppropriateReference(references); 130 return state == FIRSTISCURRENT ? leftIterator.fields(references) : 131 rightIterator.fields(references); 132 } 133 134 141 private _Reference getAppropriateReference(_Reference reference) throws DException { 142 for (int i = 0; i < commonColumns.length; i++) { 143 if ( ( (String ) commonColumns[i][0]).equalsIgnoreCase(reference.getColumn())) { 144 if (state == FIRSTISCURRENT) { 145 return (_Reference) commonColumns[i][1]; 146 } 147 return (_Reference) commonColumns[i][2]; 148 } 149 } 150 return reference; 151 } 152 153 160 private _Reference[] getAppropriateReference(_Reference[] reference) throws DException { 161 _Reference[] newReferences = new _Reference[reference.length]; 162 for (int i = 0; i < reference.length; i++) { 163 newReferences[i] = getAppropriateReference(reference[i]); 164 } 165 return newReferences; 166 } 167 } 168 | Popular Tags |