@Override
  public Set<DomainCreatePermission> getDomainCreatePostCreateSysPermissions(
      SQLConnection connection, Resource accessorResource) {
    SQLStatement statement = null;

    try {
      statement =
          connection.prepareStatement(
              sqlStrings
                  .SQL_findInGrantDomainCreatePermissionPostCreateSys_withoutInheritance_PostCreateSysPermissionID_PostCreateIsWithGrant_IsWithGrant_BY_AccessorID);
      statement.setResourceId(1, accessorResource);
      SQLResult resultSet = statement.executeQuery();

      // collect the create permissions that this resource has to domains directly
      Set<DomainCreatePermission> domainCreatePermissions = new HashSet<>();
      while (resultSet.next()) {
        domainCreatePermissions.add(getDomainCreatePostCreateSysPermission(resultSet));
      }
      resultSet.close();

      return domainCreatePermissions;
    } catch (SQLException e) {
      throw new RuntimeException(e);
    } finally {
      closeStatement(statement);
    }
  }
  @Override
  public void updateDomainCreatePostCreateSysPermissions(
      SQLConnection connection,
      Resource accessorResource,
      Resource grantorResource,
      Set<DomainCreatePermission> domainCreatePermissions) {
    SQLStatement statement = null;

    try {
      statement =
          connection.prepareStatement(
              sqlStrings
                  .SQL_updateInGrantDomainCreatePermissionPostCreateSys_SET_GrantorID_IsWithGrant_PostCreateIsWithGrant_BY_AccessorID_PostCreateSysPermissionID);
      for (DomainCreatePermission domainCreatePermission : domainCreatePermissions) {
        if (!domainCreatePermission.isSystemPermission()
            && domainCreatePermission.getPostCreateDomainPermission().isSystemPermission()) {
          statement.setResourceId(1, grantorResource);
          statement.setBoolean(2, domainCreatePermission.isWithGrantOption());
          statement.setBoolean(
              3, domainCreatePermission.getPostCreateDomainPermission().isWithGrantOption());
          statement.setResourceId(4, accessorResource);
          statement.setDomainSystemPermissionId(
              5, domainCreatePermission.getPostCreateDomainPermission().getSystemPermissionId());

          assertOneRowUpdated(statement.executeUpdate());
        }
      }
    } catch (SQLException e) {
      throw new RuntimeException(e);
    } finally {
      closeStatement(statement);
    }
  }
  @Override
  public void removeDomainCreatePostCreateSysPermissions(
      SQLConnection connection, Resource accessorResource) {
    SQLStatement statement = null;

    try {
      statement =
          connection.prepareStatement(
              sqlStrings.SQL_removeInGrantDomainCreatePermissionPostCreateSys_BY_AccessorID);
      statement.setResourceId(1, accessorResource);
      statement.executeUpdate();
    } catch (SQLException e) {
      throw new RuntimeException(e);
    } finally {
      closeStatement(statement);
    }
  }