You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ma...@apache.org on 2016/12/16 11:31:07 UTC

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

Repository: sqoop
Updated Branches:
  refs/heads/trunk bde0ed1e7 -> d1e6c5f52


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

(Anna Szonyi via Attila Szabo)


Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/d1e6c5f5
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/d1e6c5f5
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/d1e6c5f5

Branch: refs/heads/trunk
Commit: d1e6c5f52f8913a619cfe77c87970d7938c84844
Parents: bde0ed1
Author: Attila Szabo <ma...@apache.org>
Authored: Fri Dec 16 12:29:09 2016 +0100
Committer: Attila Szabo <ma...@apache.org>
Committed: Fri Dec 16 12:29:09 2016 +0100

----------------------------------------------------------------------
 .../sqoop/mapreduce/OracleUpsertOutputFormat.java     | 11 +++++++++--
 .../com/cloudera/sqoop/manager/OracleExportTest.java  | 14 ++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/d1e6c5f5/src/java/org/apache/sqoop/mapreduce/OracleUpsertOutputFormat.java
----------------------------------------------------------------------
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.io.IOException;
 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 @@ public class OracleUpsertOutputFormat<K extends SqoopRecord, V>
       // 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 @@ public class OracleUpsertOutputFormat<K extends SqoopRecord, V>
         } else {
           sb.append(" AND ");
         }
-        sb.append('"' + updateCols[i] + '"').append(" = ?");
+        sb.append(OracleUtils.escapeIdentifier(updateCols[i], isOracleEscapingDisabled()));
+        sb.append(" = ?");
       }
       sb.append(" )");
 
@@ -127,5 +130,9 @@ public class OracleUpsertOutputFormat<K extends SqoopRecord, V>
 
       return sb.toString();
     }
+
+    private boolean isOracleEscapingDisabled() {
+      return OracleUtils.isOracleEscapingDisabled(getConf());
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/d1e6c5f5/src/test/com/cloudera/sqoop/manager/OracleExportTest.java
----------------------------------------------------------------------
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 @@ public class OracleExportTest extends TestExport {
         "--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);
+  }
 }