private void fetchPrimaryColumns()

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,");
			}
		}
	}