protected void primaryKeyColumns(Connection connection, Table table, ProgressMeasure progressListener) {
        requireNonNulls(connection, table);

        final Schema schema = table.getParentOrThrow();

        final SqlSupplier<ResultSet> supplier = ()
            -> connection.getMetaData().getPrimaryKeys(jdbcCatalogLookupName(schema),
                jdbcSchemaLookupName(schema),
                metaDataTableNameForPrimaryKeys(table)
            );

        final TableChildMutator<PrimaryKeyColumn, ResultSet> mutator = (primaryKeyColumn, rs) -> {
            final String columnName = rs.getString("COLUMN_NAME");
            primaryKeyColumn.mutator().setId(columnName);
            primaryKeyColumn.mutator().setName(columnName);
            primaryKeyColumn.mutator().setOrdinalPosition(rs.getInt("KEY_SEQ"));
            extraInfo("primaryKeyColumns(, %s, ...) read %s", table.getId(), primaryKeyColumn);
        };

        tableChilds(PrimaryKeyColumn.class, table.mutator()::addNewPrimaryKeyColumn, supplier, mutator, progressListener);
        
        if (!table.isView() && table.primaryKeyColumns().noneMatch(pk -> true)) {
            LOGGER.warn("Table '" + table.getId() + "' does not have any primary key.");
        }
    }
@author  Emil Forslund
@author  Per Minborg
@since   3.0.0
runtime-parent/runtime-core/src/main/java/com/speedment/runtime/core/abstracts/AbstractDbmsMetadataHandler.java