@Override public HeavyweightIterator<T> iterator() { HeavyweightIterator<T> result = source.iterator(); if (result.hasNext()) result.next(); return result; }
private void populate() { this.state = MapperState.POPULATING; LOGGER.debug("Populating key mapper for table {} on database {}", identity.getTableName(), dbId); HeavyweightIterator<Object[]> iterator = identity.createNkPkIterator(connection, dbId, root, database); while (iterator.hasNext()) { Object[] nkPkTuple = iterator.next(); Object pk = identity.extractPK(nkPkTuple); String nk = identity.extractNK(nkPkTuple); store(pk, nk); } this.state = MapperState.POPULATED; }
@Override public boolean hasNext() { if (subNkPkIterator.hasNext()) return true; while (subNkPkIterator != null && !subNkPkIterator.hasNext() && ownerPkIterator.hasNext()) { IOUtil.close(subNkPkIterator); createSubNkPkIterator(connection, dbId); } return (subNkPkIterator != null && subNkPkIterator.hasNext()); }
private void createSubNkPkIterator(Connection connection, String dbId) { if (ownerPkIterator.hasNext()) { Object ownerPk = ownerPkIterator.next(); ownerNK = mapper.getNaturalKey(dbId, identityProvider.getIdentity(parentTableNames[0]), ownerPk); // TODO v1.0 support multiple owners if (ownerNK == null) throw new InvalidIdentityDefinitionError(tableName + " row with PK " + ownerPk + " cannot be found. Most likely this is a subsequent fault of a parent's identity" + " definition: " + ArrayFormat.format(parentTableNames)); String query = SQLUtil.substituteMarkers(subNkPkQuery, "?", ownerPk, dialect); subNkPkIterator = new ArrayResultSetIterator(connection, query); } else subNkPkIterator = null; }