// TODO: 1) How to handle collisions? 2) Should we be cloning ColumnInfo or not? private static boolean add( RowResolver rrToAddTo, RowResolver rrToAddFrom, IntRef outputColPosRef, int numColumns) throws SemanticException { boolean hasDuplicates = false; String tabAlias; String colAlias; String[] qualifiedColName; int i = 0; int outputColPos = outputColPosRef == null ? 0 : outputColPosRef.val; for (ColumnInfo cInfoFrmInput : rrToAddFrom.getRowSchema().getSignature()) { if (numColumns >= 0 && i == numColumns) { break; } ColumnInfo newCI = null; String internalName = cInfoFrmInput.getInternalName(); qualifiedColName = rrToAddFrom.reverseLookup(internalName); tabAlias = qualifiedColName[0]; colAlias = qualifiedColName[1]; newCI = new ColumnInfo(cInfoFrmInput); newCI.setInternalName(SemanticAnalyzer.getColumnInternalName(outputColPos)); outputColPos++; boolean isUnique = rrToAddTo.putWithCheck(tabAlias, colAlias, internalName, newCI); hasDuplicates |= (!isUnique); qualifiedColName = rrToAddFrom.getAlternateMappings(internalName); if (qualifiedColName != null) { tabAlias = qualifiedColName[0]; colAlias = qualifiedColName[1]; rrToAddTo.put(tabAlias, colAlias, newCI); } i++; } if (outputColPosRef != null) { outputColPosRef.val = outputColPos; } return !hasDuplicates; }