code: @Override
  	protected int indexTable(final TableIndex tableIndex) {
  
  		int count = 0;
  
  		long offset = 0;
  		int chunkCount = 0;
  
  		while (chunkCount >= 0) {
  
  			final long chunkOffset = offset;
  
  			try {
  				// Iterate through each row and index as a single transaction
  				ConnectionSource connectionSource = getGeoPackage()
  						.getDatabase().getConnectionSource();
  				chunkCount = TransactionManager.callInTransaction(
  						connectionSource, new Callable<Integer>() {
  							public Integer call() throws Exception {
  
  								FeatureResultSet resultSet = featureDao
  										.queryForChunk(chunkLimit, chunkOffset);
  								int count = indexRows(tableIndex, resultSet);
  
  								return count;
  							}
  						});
  				if (chunkCount > 0) {
  					count += chunkCount;
  				}
  			} catch (SQLException e) {
  				throw new GeoPackageException(
  						"Failed to Index Table. GeoPackage: "
  								+ getGeoPackage().getName() + ", Table: "
  								+ getTableName(), e);
  			}
  
  			offset += chunkLimit;
  		}
  
  		// Update the last indexed time
  		if (progress == null || progress.isActive()) {
  			updateLastIndexed();
  		}
  
  		return count;
  	}
docs: {@inheritDoc}