SQOOP-3081: use OracleEscapeUtils.escapeIdentifier
in OracleUpsertOutputFormat instead of inline
appending quotes

(Anna Szonyi via Attila Szabo)
diff --git a/src/java/org/apache/sqoop/mapreduce/OracleUpsertOutputFormat.java b/src/java/org/apache/sqoop/mapreduce/OracleUpsertOutputFormat.java
index 88754e7..79a4efd 100644
--- a/src/java/org/apache/sqoop/mapreduce/OracleUpsertOutputFormat.java
+++ b/src/java/org/apache/sqoop/mapreduce/OracleUpsertOutputFormat.java
@@ -22,12 +22,14 @@
 import java.sql.SQLException;
 import java.util.LinkedHashSet;
 import java.util.Set;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.mapreduce.RecordWriter;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 import com.cloudera.sqoop.lib.SqoopRecord;
 import com.cloudera.sqoop.mapreduce.UpdateOutputFormat;
+import org.apache.sqoop.manager.oracle.OracleUtils;
 
 /**
  * Update an existing table with new value if the table already
@@ -71,7 +73,7 @@
       // lookup table for update columns
       Set<String> updateKeyLookup = new LinkedHashSet<String>();
       for (String updateKey : updateCols) {
-        updateKeyLookup.add('"' + updateKey + '"');
+        updateKeyLookup.add(OracleUtils.escapeIdentifier(updateKey, isOracleEscapingDisabled()));
       }
 
       StringBuilder sb = new StringBuilder();
@@ -85,7 +87,8 @@
         } else {
           sb.append(" AND ");
         }
-        sb.append('"' + updateCols[i] + '"').append(" = ?");
+        sb.append(OracleUtils.escapeIdentifier(updateCols[i], isOracleEscapingDisabled()));
+        sb.append(" = ?");
       }
       sb.append(" )");
 
@@ -127,5 +130,9 @@
 
       return sb.toString();
     }
+
+    private boolean isOracleEscapingDisabled() {
+      return OracleUtils.isOracleEscapingDisabled(getConf());
+    }
   }
 }
diff --git a/src/test/com/cloudera/sqoop/manager/OracleExportTest.java b/src/test/com/cloudera/sqoop/manager/OracleExportTest.java
index 382eb92..07d672f 100644
--- a/src/test/com/cloudera/sqoop/manager/OracleExportTest.java
+++ b/src/test/com/cloudera/sqoop/manager/OracleExportTest.java
@@ -277,4 +277,18 @@
         "--update-key", "ID", "--update-mode", "allowinsert", "--oracle-escaping-disabled", "false")));
     verifyExport(TOTAL_RECORDS);
   }
+
+  /** Make sure mixed update/insert export work correctly. */
+  public void testUpsertTextExportWithEscapingDisabled() throws IOException, SQLException {
+    final int TOTAL_RECORDS = 10;
+    createTextFile(0, TOTAL_RECORDS, false);
+    createTable();
+    // first time will be insert.
+    runExport(getArgv(true, 10, 10, newStrArray(null,
+        "--update-key", "ID", "--update-mode", "allowinsert", "--oracle-escaping-disabled", "true")));
+    // second time will be update.
+    runExport(getArgv(true, 10, 10, newStrArray(null,
+        "--update-key", "ID", "--update-mode", "allowinsert", "--oracle-escaping-disabled", "true")));
+    verifyExport(TOTAL_RECORDS);
+  }
 }