public List<List<Integer>> diff(SelectResult other) {
		// check null
		if (this.fieldNames == null || this.records == null || other == null
				|| other.fieldNames == null || other.records == null) {
			throw new RuntimeException("cannot compare null values");
		}
		// check size
		if (this.fieldNames.length != other.fieldNames.length
				|| this.records.size() != other.records.size()) {
			throw new RuntimeException(
					"cannot compare values with different sizes");
		}

		// compare all fields
		List<List<Integer>> d = new LinkedList<List<Integer>>();

		for (int i = 0; i < this.records.size(); i++) {
			Record r1 = this.records.get(i);
			Record r2 = other.records.get(i);

			List<Integer> indexes = r1.diff(r2);

			if (!indexes.isEmpty()) {
				d.add(indexes);
			}
		}
		return d;
	}