SQOOP-2909: Oracle related ImportTest fails after SQOOP-2737
(Attila Szabo via Jarek Jarcec Cecho)
diff --git a/src/test/oraoop/table_tst_product_part.xml b/src/test/oraoop/table_tst_product_part.xml
index 6014476..b5c5352 100644
--- a/src/test/oraoop/table_tst_product_part.xml
+++ b/src/test/oraoop/table_tst_product_part.xml
@@ -88,7 +88,7 @@
<uniqueKeyColumn>product_code</uniqueKeyColumn>
</uniqueKeyColumns>
<partitionClause>
- PARTITION BY RANGE(sell_from_date)
+ PARTITION BY RANGE("sell_from_date")
(
PARTITION tst_product_part_1 values less than (to_date(''' || to_char(add_months(sysdate,-9),'DD/MM/YYYY') || ''',''DD/MM/YYYY'')),
PARTITION tst_product_part_2 values less than (to_date(''' || to_char(add_months(sysdate,-6),'DD/MM/YYYY') || ''',''DD/MM/YYYY'')),
diff --git a/src/test/oraoop/table_tst_product_part_iot.xml b/src/test/oraoop/table_tst_product_part_iot.xml
index b09015b..97e487c 100644
--- a/src/test/oraoop/table_tst_product_part_iot.xml
+++ b/src/test/oraoop/table_tst_product_part_iot.xml
@@ -89,7 +89,7 @@
</uniqueKeyColumns>
<indexOrganizedTable>true</indexOrganizedTable>
<partitionClause>
- PARTITION BY HASH(product_id)
+ PARTITION BY HASH("product_id")
PARTITIONS 4
</partitionClause>
</table>
\ No newline at end of file
diff --git a/src/test/oraoop/table_tst_product_subpart.xml b/src/test/oraoop/table_tst_product_subpart.xml
index 4883244..137d99d 100644
--- a/src/test/oraoop/table_tst_product_subpart.xml
+++ b/src/test/oraoop/table_tst_product_subpart.xml
@@ -88,8 +88,8 @@
<uniqueKeyColumn>product_code</uniqueKeyColumn>
</uniqueKeyColumns>
<partitionClause>
- PARTITION BY RANGE(sell_from_date)
- SUBPARTITION BY HASH(supplier_code)
+ PARTITION BY RANGE("sell_from_date")
+ SUBPARTITION BY HASH("supplier_code")
SUBPARTITIONS 2
(
PARTITION tst_product_part_1 values less than (to_date(''' || to_char(add_months(sysdate,-9),'DD/MM/YYYY') || ''',''DD/MM/YYYY'')),
diff --git a/src/test/oraoop/table_tst_product_with_white_space.xml b/src/test/oraoop/table_tst_product_with_white_space.xml
new file mode 100644
index 0000000..65e97aa
--- /dev/null
+++ b/src/test/oraoop/table_tst_product_with_white_space.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<table>
+ <name>TST_Pr OdUCT</name>
+ <columns>
+ <column>
+ <name>product_id</name>
+ <dataType>INTEGER</dataType>
+ <dataExpression>id</dataExpression>
+ </column>
+ <column>
+ <name>supplier_code</name>
+ <dataType>VARCHAR2 (30)</dataType>
+ <dataExpression>TO_CHAR (id - MOD (id, 5000),'FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')</dataExpression>
+ </column>
+ <column>
+ <name>product_code</name>
+ <dataType>VARCHAR2 (30)</dataType>
+ <dataExpression>TO_CHAR (MOD (id, 100000), 'FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')</dataExpression>
+ </column>
+ <column>
+ <name>product_descr</name>
+ <dataType>VARCHAR2 (255)</dataType>
+ <dataExpression>DBMS_RANDOM.string ('x', ROUND (DBMS_RANDOM.VALUE (1, 100)))</dataExpression>
+ </column>
+ <column>
+ <name>product_long_descr</name>
+ <dataType>VARCHAR2 (4000)</dataType>
+ <dataExpression>DBMS_RANDOM.string ('x', ROUND (DBMS_RANDOM.VALUE (1, 200)))</dataExpression>
+ </column>
+ <column>
+ <name>product_cost_price</name>
+ <dataType>NUMBER</dataType>
+ <dataExpression>ROUND (DBMS_RANDOM.VALUE (0, 100000), 2)</dataExpression>
+ </column>
+ <column>
+ <name>sell_from_date</name>
+ <dataType>DATE</dataType>
+ <dataExpression>TRUNC (SYSDATE + DBMS_RANDOM.VALUE (-365, 365))</dataExpression>
+ </column>
+ <column>
+ <name>sell_price</name>
+ <dataType>NUMBER</dataType>
+ <dataExpression>ROUND (DBMS_RANDOM.VALUE (0, 200000), 2)</dataExpression>
+ </column>
+ <column>
+ <name>create_user</name>
+ <dataType>VARCHAR2 (30)</dataType>
+ <dataExpression>DBMS_RANDOM.string ('U', 30)</dataExpression>
+ </column>
+ <column>
+ <name>crea te_time</name>
+ <dataType>TIMESTAMP</dataType>
+ <dataExpression>TO_TIMESTAMP (TO_CHAR (SYSDATE + DBMS_RANDOM.VALUE (-730, 0),'YYYYMMDDHH24MISS') || '.' || TRUNC (TO_CHAR (DBMS_RANDOM.VALUE * 999999999)), 'YYYYMMDDHH24MISSXFF')</dataExpression>
+ </column>
+ <column>
+ <name>last_update_user</name>
+ <dataType>VARCHAR2 (30)</dataType>
+ <dataExpression>DBMS_RANDOM.string ('U', 30)</dataExpression>
+ </column>
+ <column>
+ <name>last_update_time</name>
+ <dataType>TIMESTAMP</dataType>
+ <dataExpression>TO_TIMESTAMP (TO_CHAR (SYSDATE + DBMS_RANDOM.VALUE (-730, 0),'YYYYMMDDHH24MISS') || '.' || TRUNC (TO_CHAR (DBMS_RANDOM.VALUE * 999999999)), 'YYYYMMDDHH24MISSXFF')</dataExpression>
+ </column>
+ </columns>
+ <primaryKeyColumns>
+ <primaryKeyColumn>product_id</primaryKeyColumn>
+ </primaryKeyColumns>
+ <uniqueKeyColumns>
+ <uniqueKeyColumn>supplier_code</uniqueKeyColumn>
+ <uniqueKeyColumn>product_code</uniqueKeyColumn>
+ </uniqueKeyColumns>
+</table>
\ No newline at end of file
diff --git a/src/test/org/apache/sqoop/manager/oracle/ImportTest.java b/src/test/org/apache/sqoop/manager/oracle/ImportTest.java
index b2134c6..cf03cc0 100644
--- a/src/test/org/apache/sqoop/manager/oracle/ImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/ImportTest.java
@@ -36,7 +36,23 @@
createTable("table_tst_product.xml");
try {
- int retCode = runImport("tst_product", getSqoopConf(), false);
+ int retCode = runImport("TST_PRODUCT", getSqoopConf(), false);
+ Assert.assertEquals("Return code should be 0", 0, retCode);
+
+ } finally {
+ cleanupFolders();
+ closeTestEnvConnection();
+ }
+ }
+
+
+ @Test
+ public void testProductWithWhiteSpaceImport() throws Exception {
+ setSqoopTargetDirectory(getSqoopTargetDirectory() + "tst_product");
+ createTable("table_tst_product_with_white_space.xml");
+
+ try {
+ int retCode = runImport("TST_Pr OdUCT", getSqoopConf(), false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -51,7 +67,7 @@
createTable("table_tst_product_part.xml");
try {
- int retCode = runImport("tst_product_part", getSqoopConf(), false);
+ int retCode = runImport("TST_PRODUCT_PART", getSqoopConf(), false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -70,7 +86,7 @@
OraOopConstants.OraOopOracleDataChunkMethod.PARTITION.toString());
try {
- int retCode = runImport("tst_product_part", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_PART", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -91,7 +107,7 @@
"tst_product_part_1,tst_product_part_2,\"tst_product_pa#rt_6\"");
try {
- int retCode = runImport("tst_product_part", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_PART", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -115,7 +131,7 @@
+"tst_product_part_3,\"tst_product_pa#rt_6\"");
try {
- int retCode = runImport("tst_product_part", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_PART", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -130,7 +146,7 @@
createTable("table_tst_product_subpart.xml");
try {
- int retCode = runImport("tst_product_subpart", getSqoopConf(), false);
+ int retCode = runImport("TST_PRODUCT_SUBPART", getSqoopConf(), false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -149,7 +165,7 @@
OraOopConstants.OraOopOracleDataChunkMethod.PARTITION.toString());
try {
- int retCode = runImport("tst_product_subpart", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_SUBPART", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -172,7 +188,7 @@
+"TST_PRODUCT_PART_3,TST_PRODUCT_PART_4");
try {
- int retCode = runImport("tst_product_subpart", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_SUBPART", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -193,7 +209,7 @@
"TST_PRODUCT_PART_1,TST_PRODUCT_PART_2,TST_PRODUCT_PART_3");
try {
- int retCode = runImport("tst_product_subpart", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_SUBPART", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -214,7 +230,7 @@
sqoopConf.setBoolean(OraOopConstants.ORAOOP_IMPORT_CONSISTENT_READ, true);
try {
- int retCode = runImport("tst_product", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
@@ -248,7 +264,7 @@
OraOopConstants.OraOopOracleDataChunkMethod.PARTITION.toString());
try {
- int retCode = runImport("tst_product_part_iot", sqoopConf, false);
+ int retCode = runImport("TST_PRODUCT_PART_IOT", sqoopConf, false);
Assert.assertEquals("Return code should be 0", 0, retCode);
} finally {
diff --git a/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java b/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
index 6d0cf89..9fe4821 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
@@ -141,7 +141,7 @@
}
protected int countTable(String inputTableName, List<String> partitionList) {
- String tableName = inputTableName;
+ String tableName = org.apache.sqoop.manager.oracle.OracleUtils.escapeIdentifier(inputTableName);
if (tableName.startsWith("\"\"") && tableName.endsWith("\"\"")) {
// Table names may be double quoted to work around Sqoop issue
tableName = tableName.substring(1, tableName.length() - 1);
diff --git a/src/test/org/apache/sqoop/manager/oracle/util/OracleData.java b/src/test/org/apache/sqoop/manager/oracle/util/OracleData.java
index 3f16e04..8846f65 100644
--- a/src/test/org/apache/sqoop/manager/oracle/util/OracleData.java
+++ b/src/test/org/apache/sqoop/manager/oracle/util/OracleData.java
@@ -27,6 +27,7 @@
import org.apache.commons.io.IOUtils;
import org.apache.sqoop.manager.oracle.OraOopTestCase;
+import org.apache.sqoop.manager.oracle.OracleUtils;
/**
* Class to load an Oracle table with data based on configuration file.
@@ -51,7 +52,7 @@
StringBuilder result = new StringBuilder();
String delim = "";
for (OracleDataDefinition column : tableDefinition.getColumnList()) {
- result.append(delim).append(column.getColumnName()).append(" ").append(
+ result.append(delim).append(OracleUtils.escapeIdentifier(column.getColumnName())).append(" ").append(
column.getDataType());
delim = ",\n";
}
@@ -62,7 +63,7 @@
getDataExpression(List<OracleDataDefinition> columnList) {
StringBuilder result = new StringBuilder();
for (OracleDataDefinition column : columnList) {
- result.append("l_ret_rec.").append(column.getColumnName()).append(" := ")
+ result.append("l_ret_rec.").append(OracleUtils.escapeIdentifier(column.getColumnName())).append(" := ")
.append(column.getDataExpression()).append(";\n");
}
return result.toString();
@@ -126,7 +127,7 @@
StringBuilder keyColumnList = new StringBuilder();
String delim = "";
for (String column : columns) {
- keyColumnList.append(delim).append(column);
+ keyColumnList.append(delim).append(OracleUtils.escapeIdentifier(column));
delim = ",";
}
result = keyColumnList.toString();