public class InvoiceRepository {
   public Set selectWhereGracePeriodPast(Date aDate){
      // To nie jest reguła, a raczej specjalizowane zapytanie
      String sql = whereGracePeriodPast_SQL(aDate);
      ResultSet queryResultSet =
         SQLDatabaseInterface.instance().executeQuery(sql);
      return buildInvoicesFromResultSet(queryResultSet);
   }

   public String whereGracePeriodPast_SQL(Date aDate) {
      return
         "SELECT * FROM INVOICE, CUSTOMER" +
         " WHERE INVOICE.CUST_ID = CUSTOMER.ID" +
         " AND INVOICE.DUE_DATE + CUSTOMER.GRACE_PERIOD" +
         " < " + SQLUtility.dateAsSQL(aDate);
   }

   public Set selectSatisfying(InvoiceSpecification spec) {
      return spec.satisfyingElementsFrom(this);
   }
}
