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) {