in src/main/java/com/datacompare/service/FetchMetadata.java [324:406]
private void fetchPrimaryColumns(Connection connection, String schemaName, String tableName,
Map<Integer, String> primaryKeyMap, String sourceSortKey, String sourcePrimaryKey, boolean sourceHasNoUniqueKey, StringBuilder sortKey,
StringBuilder primaryKey, StringBuilder uniqueKeyCol) throws Exception {
if(!sourceHasNoUniqueKey) {
ResultSet rs = null;
try {
rs = connection.getMetaData().getPrimaryKeys(null, schemaName, tableName);
while (rs.next()) {
String colName = rs.getString("COLUMN_NAME");
Integer pkPosition = rs.getInt("KEY_SEQ");
primaryKeyMap.put(pkPosition, colName);
}
if (sourceSortKey != null && sourceSortKey.trim().length() > 0) {
sortKey.append(sourceSortKey.toLowerCase());
primaryKey.append(sourcePrimaryKey.toLowerCase());
} else if (primaryKeyMap != null && primaryKeyMap.size() > 0) {
sortKey.append(StringUtils.join(primaryKeyMap.values(),","));
primaryKey.append(primaryKeyMap.get(1));
this.setSortKey(sortKey.toString());
this.setPrimaryKey(primaryKey.toString());
}
} catch (Exception e) {
logger.error(getDbType(), e);
} finally {
new JdbcUtil().closeResultSet(rs);
}
}
if (sortKey.toString().isEmpty()) {
setHasNoUniqueKey(true);
//throw new Exception(getDbType() + " Database Table " + schemaName + "." + tableName + " PRIMARY Key not found.");
}
if (!sortKey.toString().isEmpty() && sortKey.toString().contains(",")) {
String primaryKeyColsTemp = sortKey.toString().replaceAll(",", "),").replaceFirst("\\)\\,", ",") + ")";
String primaryKeyColsTempArray[] = primaryKeyColsTemp.split("\\)\\,");
for (int i = 0; i < primaryKeyColsTempArray.length; i++) {
primaryKeyColsTemp = "concat(" + convertDateToTimeStamp(primaryKeyColsTemp);
}
uniqueKeyCol.append(primaryKeyColsTemp + " AS key1 ,");
} else if(!primaryKey.toString().isEmpty()) {
uniqueKeyCol.append(primaryKey + " AS key1 ,");
} else if(isHasNoUniqueKey()) {
if("ORACLE".equals(getDbType())) {
uniqueKeyCol.append("ROWNUM AS key1,");
} else if("POSTGRESQL".equals(getDbType())) {
uniqueKeyCol.append("row_number() over() as key1,");
} else if("SQLSERVER".equals(getDbType())) {
//TODO
uniqueKeyCol.append("ROWNUM AS key1,");
}
}
}