SQOOP-2787: MySql import and export fails with 5.1 server and 5.1.17+ drivers
    (Sowmya Ramesh via Venkat Ranganathan)
diff --git a/src/java/org/apache/sqoop/SqoopOptions.java b/src/java/org/apache/sqoop/SqoopOptions.java
index db92b30..4d30007 100644
--- a/src/java/org/apache/sqoop/SqoopOptions.java
+++ b/src/java/org/apache/sqoop/SqoopOptions.java
@@ -231,6 +231,7 @@
   private boolean areInputDelimsManuallySet;
 
   private Configuration conf;
+  private String toolName;
 
   public static final int DEFAULT_NUM_MAPPERS = 4;
 
@@ -2595,4 +2596,12 @@
   public void setCustomToolOptions(Map<String, String> customToolOptions) {
     this.customToolOptions = customToolOptions;
   }
+
+    public String getToolName() {
+        return this.toolName;
+    }
+
+    public void setToolName(String toolName) {
+        this.toolName = toolName;
+    }
 }
diff --git a/src/java/org/apache/sqoop/manager/MySQLManager.java b/src/java/org/apache/sqoop/manager/MySQLManager.java
index e1d5a36..3c2276f 100644
--- a/src/java/org/apache/sqoop/manager/MySQLManager.java
+++ b/src/java/org/apache/sqoop/manager/MySQLManager.java
@@ -59,6 +59,8 @@
   // set to true after we warn the user that we can use direct fastpath.
   private static boolean warningPrinted = false;
 
+  private static final String EXPORT_OPERATION = "export";
+
   public MySQLManager(final SqoopOptions opts) {
     super(DRIVER_CLASS, opts);
   }
@@ -67,7 +69,14 @@
   protected void initOptionDefaults() {
     if (options.getFetchSize() == null) {
       LOG.info("Preparing to use a MySQL streaming resultset.");
-      options.setFetchSize(Integer.MIN_VALUE);
+        String operation = options.getToolName();
+      if (StringUtils.isNotBlank(operation) && operation.equalsIgnoreCase(EXPORT_OPERATION)) {
+          // Set fetch size to zero for export operation, see SQOOP-2787 for more details. Setting fetchsize to 0
+          // would not overwhelm the JVM as the queries during export are primarily metadata queries
+          options.setFetchSize(0);
+      } else {
+          options.setFetchSize(Integer.MIN_VALUE);
+      }
     } else if (
         !options.getFetchSize().equals(Integer.MIN_VALUE)
         && !options.getFetchSize().equals(0)) {
diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
index a7f6aec..9c810a9 100644
--- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
+++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
@@ -253,6 +253,8 @@
    */
   protected boolean init(SqoopOptions sqoopOpts) {
     // Get the connection to the database.
+      // Set the tool name in sqoop options
+      sqoopOpts.setToolName(getToolName());
     try {
       JobData data = new JobData(sqoopOpts, this);
       this.manager = new ConnFactory(sqoopOpts.getConf()).getManager(data);