/** Fills the table with a result set */
  public void materialise(Session session) {

    PersistentStore store;

    // table constructors
    if (isDataExpression) {
      store = session.sessionData.getSubqueryRowStore(table);

      dataExpression.insertValuesIntoSubqueryTable(session, store);

      return;
    }

    Result result = queryExpression.getResult(session, isExistsPredicate ? 1 : 0);

    if (uniqueRows) {
      RowSetNavigatorData navigator = ((RowSetNavigatorData) result.getNavigator());

      navigator.removeDuplicates();
    }

    store = session.sessionData.getSubqueryRowStore(table);

    table.insertResult(store, result);
    result.getNavigator().close();
  }