Set<String>[] valueRanges = new Set[columns.length];
Set<String>[] valueRanges = new Set[columnAttr.length];
	protected Result internalExecute(SessionContents sc, int sequence) {		IConsequence.Result conseq = new IConsequence.Result();		// identify all columns (attributes) assigned		// ignoring columns which have been set by this table		int noOfMatchingRows = 0;		Set<String>[] valueRanges = new Set[columns.length];		List<Integer> assignedIndices = new LinkedList<Integer>();		for (int i = 0; i < columns.length; i++) {			AbstractAttribute attr = columns[i];			if (attr.isAssigned() && attr.getSequence() < sequence) {				assignedIndices.add(new Integer(i));			}			valueRanges[i] = new HashSet<String>();		}		// iterate over rows and find included values per column		for (int i = 0; i < values.length; i++) {			boolean matchingRow = true;			for (Integer col : assignedIndices) {				if (columns[col.intValue()].equalsTo(sc, values[i][col.intValue()]).equals(						FuzzyBoolEnum.FALSE)) {					matchingRow = false;					break;				}			}			if (matchingRow) {				noOfMatchingRows++;				for (int j = 0; j < values[0].length; j++) {					valueRanges[j].add(values[i][j]);				}			}		}		// for Enumerations include values		for (int j = 0; j < values[0].length; j++) {			// ignore the currently set attribute			if (columns[j].getSequence() == 1)				continue;			String[] applicableVals = (String[]) valueRanges[j].toArray(new String[valueRanges[j]					.size()]);			if (columns[j] instanceof Enumeration) {				Logger.getInstance().debug(						"Table: " + columns[j].getName() + " includes: "								+ Logger.arrayToString(applicableVals));				if (applicableVals.length == 0) {					conseq.setViolation("Invalid value combination " + getColumnNames());				}				IConsequence.Result res = ((Enumeration) columns[j]).include(sc, applicableVals,						sequence);				conseq.merge(res);			}		}		// for identified arbits set value		AbstractRule.Result result = new AbstractRule.Result(conseq);		// if only one row or none matches we have a result		result.setHasFired(noOfMatchingRows < 2);		return result;	}