public String getSqlOutputString(ModelResource modelResource) throws ModelWorkspaceException {
    List transformations = modelResource.getModelTransformations().getTransformations();
    int nTransforms = transformations.size();
    int initBufferSize = nTransforms * 200;
    StringBuffer sb = new StringBuffer(initBufferSize);
    String relativeTablePath = null;
    boolean hasMissingSelects = false;
    boolean hasMissingInserts = false;
    boolean hasMissingUpdates = false;
    boolean hasMissingDeletes = false;

    for (Iterator iter = transformations.iterator(); iter.hasNext(); ) {
      Object obj = iter.next();
      String rowString = null;
      if (obj instanceof SqlTransformationMappingRoot) {
        EObject table = ((SqlTransformationMappingRoot) obj).getTarget();
        relativeTablePath = ModelerCore.getModelEditor().getModelRelativePath(table).toString();

        String userString = TransformationHelper.getSelectSqlString(obj);

        if (userString != null && relativeTablePath != null) {
          rowString = createRowForFile(QueryValidator.SELECT_TRNS, relativeTablePath, userString);
          if (rowString != null && rowString.length() > 0) {
            sb.append(rowString);
          }
        } else {
          hasMissingSelects = true;
        }

        // Now check if updates allowed
        boolean tableSupportsUpdates = TransformationHelper.tableSupportsUpdate(table);
        if (tableSupportsUpdates) {
          if (TransformationHelper.supportsInsert((EObject) obj, null)) {
            userString = TransformationHelper.getInsertSqlString(obj);

            if (userString != null && relativeTablePath != null) {
              rowString =
                  createRowForFile(QueryValidator.INSERT_TRNS, relativeTablePath, userString);
              if (rowString != null && rowString.length() > 0) {
                sb.append(rowString);
              }
            } else {
              hasMissingInserts = true;
            }
          }
          if (TransformationHelper.supportsUpdate((EObject) obj, null)) {
            userString = TransformationHelper.getUpdateSqlString(obj);

            if (userString != null && relativeTablePath != null) {
              rowString =
                  createRowForFile(QueryValidator.UPDATE_TRNS, relativeTablePath, userString);
              if (rowString != null && rowString.length() > 0) {
                sb.append(rowString);
              }
            } else {
              hasMissingUpdates = true;
            }
          }
          if (TransformationHelper.supportsDelete((EObject) obj, null)) {
            userString = TransformationHelper.getDeleteSqlString(obj);

            if (userString != null && relativeTablePath != null) {
              rowString =
                  createRowForFile(QueryValidator.DELETE_TRNS, relativeTablePath, userString);
              if (rowString != null && rowString.length() > 0) {
                sb.append(rowString);
              }
            } else {
              hasMissingDeletes = true;
            }
          }
        }
      }
    }

    // If operations are missing, specify in the error message
    if (hasMissingSelects || hasMissingInserts || hasMissingUpdates || hasMissingDeletes) {
      int count = 0;
      StringBuffer msgBuff =
          new StringBuffer(
              UiConstants.Util.getString(
                  "ExportTransformationSqlToTextAction.exportQueryProblem",
                  modelResource.getItemName())); // $NON-NLS-1$
      msgBuff.append(SPACE + LEFT_BRACKET);
      if (hasMissingSelects) {
        msgBuff.append(ISQLConstants.SQL_TYPE_SELECT_STRING);
        count++;
      }
      if (hasMissingInserts) {
        if (count > 0) msgBuff.append(SPACE + DELIMETER + SPACE);
        msgBuff.append(ISQLConstants.SQL_TYPE_INSERT_STRING);
        count++;
      }
      if (hasMissingUpdates) {
        if (count > 0) msgBuff.append(SPACE + DELIMETER + SPACE);
        msgBuff.append(ISQLConstants.SQL_TYPE_UPDATE_STRING);
        count++;
      }
      if (hasMissingDeletes) {
        if (count > 0) msgBuff.append(SPACE + DELIMETER + SPACE);
        msgBuff.append(ISQLConstants.SQL_TYPE_DELETE_STRING);
        count++;
      }
      msgBuff.append(RIGHT_BRACKET);
      UiConstants.Util.log(IStatus.ERROR, msgBuff.toString());
    }

    return sb.toString();
  }