public void validateForFile(ScriptRunner pScriptRunner, PromotionFile pPromotionFile)
  throws ExPromote {    
    List<Closeable> lStreamsToClose = new ArrayList<Closeable>();
    try {
      for(ScriptExecutable lExecutable : mExecutableList){
        if(lExecutable instanceof ScriptSQL){
          //If this fails an error will be thrown    
          String lStatementString = ((ScriptSQL) lExecutable).getParsedSQL();
          try {
            //Replace substitution variables in the statement
            lStatementString = replaceSubstitutionVariables(lStatementString, pPromotionFile);
            
            //"practice" a bind with a null prepared statement
            bind(null, ((ScriptSQL) lExecutable).getBindList(), pScriptRunner, pPromotionFile, null);
          }
          catch (ExLoader e) {
            throw new ExPromote("Validation of " + mName + " loader failed for file " + pPromotionFile.getFilePath() + ": " + e.getMessage(), e);
          }
          catch (SQLException e) {
            throw new ExPromote("Validation of prepare " + mName + " loader failed for file " + pPromotionFile.getFilePath() + ": " + e.getMessage(), e);
          }

        }
      }
    }
    finally {
      //Close all open FileInputStreams and Readers
      closeCloseables(pPromotionFile, lStreamsToClose);
    }
  }