1 package com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.constraintsystem; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.datasystem.utility.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.*; 8 import com.daffodilwoods.daffodildb.server.sql99.common.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*; 10 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 11 import com.daffodilwoods.daffodildb.utils.field.*; 12 import com.daffodilwoods.database.resource.*; 13 import com.daffodilwoods.daffodildb.utils.comparator.SuperComparator; 14 import com.daffodilwoods.database.utility.P; 15 16 22 23 24 public class MatchPartialReferencingExecuter extends ReferencingExecuter { 25 26 booleanvalueexpression condition; 27 28 35 public MatchPartialReferencingExecuter( _ReferentialConstraint referencingcnst,SuperComparator[] superComp ) throws DException{ 36 super(superComp); 37 referencingConstraint = referencingcnst; 38 referencedColumns = referencingcnst.getReferencedColumns() ; 39 referencingColumns = referencingcnst.getReferencingColumns() ; 40 condition = referencingcnst.getMatchingRowsBVE(true); 41 tableDetails = new TableDetails(); 42 tableDetails.setTableName(new String []{referencingConstraint.getReferencedTable().catalog,referencingConstraint.getReferencedTable().schema,referencingConstraint.getReferencedTable().name}); 43 } 44 45 53 public void checkReferencingConstraints( RecordVersion recordVersion , _ServerSession globalSess ) throws DException { 54 _Record record = recordVersion.getCurrentRecord(); 55 if( iterator == null ) { 56 tableDetails.cc = globalSess.getColumnCharacteristics(tableDetails.getQualifiedIdentifier()); 57 SetColumnProperties.setTableNamesAndDatatypesOfAllColumns(globalSess,condition.getColumnDetails(),new TableDetails[]{tableDetails},new ArrayList(),new ArrayList()); 58 _SingleTableExecuter singleTE = new ConditionSingleTableExecuter( null , tableDetails , globalSess , condition , null ); 59 iterator = globalSess.getIterator( referencingConstraint.getReferencedTable(), singleTE ); 60 } 61 Object [] values = setParameterValues(record); 62 if( check( values)) 63 return; 64 Object []array = (Object [])condition.getParameters(null); 65 iterator.setConditionVariableValue( getReferences(array) , values , 1 ); 66 checkReferentialConstraints(condition, values); 67 } 68 69 public Object [] setParameterValues( _Record record) throws DException { 70 int len = 2*referencingColumns.length; 71 Object [] columnValues = new Object [len]; 72 int i=0; 73 int j=0; 74 for( ; i<referencingColumns.length ; i++ ){ 75 Object value = record.getObject( referencingColumns[i] ); 76 columnValues[j++] = value ; 77 columnValues[j++] = value; 78 } 79 return columnValues; 80 } 81 82 private boolean check(Object [] temp) throws DException { 83 for( int i=0; i< temp.length; i++ ) 84 if( !((FieldBase)temp[i]).getNull()) 85 return false; 86 return true; 87 } 88 89 } 90 | Popular Tags |