SQOOP-2723: Oracle connector not working with lowercase columns

(David Robson via Jarek Jarcec Cecho)
diff --git a/src/docs/user/connectors.txt b/src/docs/user/connectors.txt
index c5ce4d6..7c54071 100644
--- a/src/docs/user/connectors.txt
+++ b/src/docs/user/connectors.txt
@@ -1743,6 +1743,13 @@
 +
 This is the equivalent of: `select "first name" from customers`
 
+If multiple columns need to be quoted, use::
+$ +sqoop import ... --table customers --columns "\"\"first name\",\"last
+name\",\"region name\"\""+
++
+This is the equivalent of: `select "first name", "last name", "region name"
+from customers`
+
 Confirm The Data Connector for Oracle and Hadoop Can Initialize The Oracle Session
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
diff --git a/src/java/org/apache/sqoop/manager/oracle/OraOopConnManager.java b/src/java/org/apache/sqoop/manager/oracle/OraOopConnManager.java
index 55a2b4c..9d74625 100644
--- a/src/java/org/apache/sqoop/manager/oracle/OraOopConnManager.java
+++ b/src/java/org/apache/sqoop/manager/oracle/OraOopConnManager.java
@@ -544,7 +544,7 @@
   @Override
   public String escapeColName(String colName) {
 
-    return super.escapeColName(colName); // <- See notes at top about escaped
+    return escapeOracleColumnName(colName); // <- See notes at top about escaped
                                          // column names
   }
 
diff --git a/src/java/org/apache/sqoop/manager/oracle/OraOopOracleQueries.java b/src/java/org/apache/sqoop/manager/oracle/OraOopOracleQueries.java
index ea64c6d..82e4266 100644
--- a/src/java/org/apache/sqoop/manager/oracle/OraOopOracleQueries.java
+++ b/src/java/org/apache/sqoop/manager/oracle/OraOopOracleQueries.java
@@ -680,7 +680,7 @@
       if (idx > 0) {
         columnList.append(",");
       }
-      columnList.append(result.get(idx).getName());
+      columnList.append("\"").append(result.get(idx).getName()).append("\"");
     }
     sql =
         String.format("SELECT %s FROM %s WHERE 0=1", columnList.toString(),
@@ -1176,12 +1176,12 @@
       if (insertClause.length() > 0) {
         insertClause.append(",");
       }
-      insertClause.append(String.format("target.%s", columnName));
+      insertClause.append(String.format("target.\"%s\"", columnName));
 
       if (valuesClause.length() > 0) {
         valuesClause.append(",");
       }
-      valuesClause.append(String.format("source.%s", columnName));
+      valuesClause.append(String.format("source.\"%s\"", columnName));
 
       if (!OraOopUtilities.stringArrayContains(mergeColumnNames, columnName,
           true)) {
@@ -1199,7 +1199,7 @@
           if (updateClause.length() > 0) {
             updateClause.append(",");
           }
-          updateClause.append(String.format("target.%1$s = source.%1$s",
+          updateClause.append(String.format("target.\"%1$s\" = source.\"%1$s\"",
               columnName));
 
         }
@@ -1244,12 +1244,12 @@
       if (targetColumnsClause.length() > 0) {
         targetColumnsClause.append(",");
       }
-      targetColumnsClause.append(String.format("a.%s", columnName));
+      targetColumnsClause.append(String.format("a.\"%s\"", columnName));
 
       if (sourceColumnsClause.length() > 0) {
         sourceColumnsClause.append(",");
       }
-      sourceColumnsClause.append(String.format("b.%s", columnName));
+      sourceColumnsClause.append(String.format("b.\"%s\"", columnName));
     }
 
     String sourceClause = sourceColumnsClause.toString();
@@ -1313,7 +1313,7 @@
       if (idx > 0) {
         columnClause.append(",");
       }
-      columnClause.append("a." + columnNames.get(idx));
+      columnClause.append("a.\"" + columnNames.get(idx) + "\"");
     }
 
     StringBuilder rowEqualityClause = new StringBuilder();
@@ -1339,9 +1339,9 @@
         rowEqualityClause.append("OR");
       }
 
-      rowEqualityClause.append(String.format("(a.%1$s <> b.%1$s "
-          + "OR (a.%1$s IS NULL AND b.%1$s IS NOT NULL) "
-          + "OR (a.%1$s IS NOT NULL AND b.%1$s IS NULL))", columnName));
+      rowEqualityClause.append(String.format("(a.\"%1$s\" <> b.\"%1$s\" "
+          + "OR (a.\"%1$s\" IS NULL AND b.\"%1$s\" IS NOT NULL) "
+          + "OR (a.\"%1$s\" IS NOT NULL AND b.\"%1$s\" IS NULL))", columnName));
     }
 
     String sqlJoin = null;
diff --git a/src/java/org/apache/sqoop/manager/oracle/OraOopOutputFormatBase.java b/src/java/org/apache/sqoop/manager/oracle/OraOopOutputFormatBase.java
index 7c4d1c5..8f7016a 100644
--- a/src/java/org/apache/sqoop/manager/oracle/OraOopOutputFormatBase.java
+++ b/src/java/org/apache/sqoop/manager/oracle/OraOopOutputFormatBase.java
@@ -354,7 +354,7 @@
         if (colCount > 0) {
           sqlNames.append("\n,");
         }
-        sqlNames.append(columnName);
+        sqlNames.append("\"").append(columnName).append("\"");
 
         // column values...
         if (colCount > 0) {