You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ja...@apache.org on 2014/10/07 20:38:44 UTC
git commit: SQOOP-1477: Sqoop2: Make link and job name unique
identifier
Repository: sqoop
Updated Branches:
refs/heads/SQOOP-1367 d8bd2a9c2 -> 9f8f59514
SQOOP-1477: Sqoop2: Make link and job name unique identifier
(Abraham Elmahrek via Jarek Jarcec Cecho)
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/9f8f5951
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/9f8f5951
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/9f8f5951
Branch: refs/heads/SQOOP-1367
Commit: 9f8f5951430dda8123efdb9d208341ed9fa0eb4f
Parents: d8bd2a9
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Tue Oct 7 11:38:09 2014 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Tue Oct 7 11:38:09 2014 -0700
----------------------------------------------------------------------
.../sqoop/repository/RepositoryError.java | 2 +-
.../derby/DerbyRepositoryHandler.java | 18 +++--
.../repository/derby/DerbySchemaConstants.java | 10 +++
.../repository/derby/DerbySchemaQuery.java | 44 +++++-------
.../sqoop/repository/derby/DerbyTestCase.java | 19 ++++--
.../sqoop/repository/derby/TestInternals.java | 71 ++++++++++++++++++++
.../sqoop/repository/derby/TestJobHandling.java | 23 +++++--
.../repository/derby/TestLinkHandling.java | 12 ++++
8 files changed, 156 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java b/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
index 54e37d9..0c93b50 100644
--- a/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
+++ b/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
@@ -122,7 +122,7 @@ public enum RepositoryError implements ErrorCode {
JDBCREPO_0026("Upgrade required but not allowed"),
/** Invalid links or jobs when upgrading connector **/
- JDBCREPO_0027("Invalid links or jobs when upgrading connector");
+ JDBCREPO_0027("Invalid links or jobs when upgrading connector")
;
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
index 39702ca..73d8387 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
@@ -415,6 +415,10 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
// Wait to remove SQB_TYPE (IMPORT/EXPORT) until we update data.
// Data updates depend on knowledge of the type of job.
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_COLUMN_SQB_TYPE, conn);
+
+ // Add unique constraints on job and links.
+ runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_UNIQUE_CONSTRAINT_NAME, conn);
+ runQuery(QUERY_UPGRADE_TABLE_SQ_LINK_ADD_UNIQUE_CONSTRAINT_NAME, conn);
}
ResultSet rs = null;
@@ -849,7 +853,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
- stmt = conn.prepareStatement(STMT_SELECT_LINK_CHECK);
+ stmt = conn.prepareStatement(STMT_SELECT_LINK_CHECK_BY_ID);
stmt.setLong(1, id);
rs = stmt.executeQuery();
@@ -1164,9 +1168,9 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
job.getJobConfig(Direction.TO).getConfigs(),
conn);
createInputValues(STMT_INSERT_JOB_INPUT,
- job.getPersistenceId(),
- job.getDriverConfig().getConfigs(),
- conn);
+ job.getPersistenceId(),
+ job.getDriverConfig().getConfigs(),
+ conn);
} catch (SQLException ex) {
logException(ex, job);
@@ -1184,7 +1188,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
- stmt = conn.prepareStatement(STMT_SELECT_JOB_CHECK);
+ stmt = conn.prepareStatement(STMT_SELECT_JOB_CHECK_BY_ID);
stmt.setLong(1, id);
rs = stmt.executeQuery();
@@ -1279,7 +1283,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
public MJob findJob(long id, Connection conn) {
PreparedStatement stmt = null;
try {
- stmt = conn.prepareStatement(STMT_SELECT_JOB_SINGLE);
+ stmt = conn.prepareStatement(STMT_SELECT_JOB_SINGLE_BY_ID);
stmt.setLong(1, id);
List<MJob> jobs = loadJobs(stmt, conn);
@@ -1307,7 +1311,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
public List<MJob> findJobs(Connection conn) {
PreparedStatement stmt = null;
try {
- stmt = conn.prepareStatement(STMT_SELECT_JOB_ALL);
+ stmt = conn.prepareStatement(STMT_SELECT_JOB);
return loadJobs(stmt, conn);
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
index fc3ec18..ad749ed 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
@@ -133,6 +133,10 @@ public final class DerbySchemaConstants {
public static final String CONSTRAINT_SQ_LNK_SQC = SCHEMA_PREFIX + CONSTRAINT_SQ_LNK_SQC_NAME;
+ public static final String CONSTRAINT_SQ_LNK_NAME_UNIQUE_NAME = CONSTRAINT_PREFIX + "SQ_LNK_NAME_UNIQUE";
+
+ public static final String CONSTRAINT_SQ_LNK_NAME_UNIQUE = SCHEMA_PREFIX + CONSTRAINT_SQ_LNK_NAME_UNIQUE_NAME;
+
// SQ_JOB
public static final String TABLE_SQ_JOB_NAME = "SQ_JOB";
@@ -174,6 +178,12 @@ public final class DerbySchemaConstants {
public static final String CONSTRAINT_SQB_SQ_LNK_TO = SCHEMA_PREFIX + CONSTRAINT_SQB_SQ_LNK_TO_NAME;
+ public static final String CONSTRAINT_SQB_NAME_UNIQUE_NAME = CONSTRAINT_PREFIX + "SQB_NAME_UNIQUE";
+
+ public static final String CONSTRAINT_SQB_NAME_UNIQUE = SCHEMA_PREFIX + CONSTRAINT_SQB_NAME_UNIQUE_NAME;
+
+ // SQ_CONNECTION_INPUT
+
public static final String TABLE_SQ_LINK_INPUT_NAME =
"SQ_LINK_INPUT";
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
index 951d9b4..478afe2 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
@@ -694,7 +694,7 @@ public final class DerbySchemaQuery {
+ " WHERE " + COLUMN_SQ_LNK_CONNECTOR + " = ?";
// DML: Check if given link exists
- public static final String STMT_SELECT_LINK_CHECK =
+ public static final String STMT_SELECT_LINK_CHECK_BY_ID =
"SELECT count(*) FROM " + TABLE_SQ_LINK
+ " WHERE " + COLUMN_SQ_LNK_ID + " = ?";
@@ -743,7 +743,7 @@ public final class DerbySchemaQuery {
+ " WHERE " + COLUMN_SQB_ID + " = ?";
// DML: Check if given job exists
- public static final String STMT_SELECT_JOB_CHECK =
+ public static final String STMT_SELECT_JOB_CHECK_BY_ID =
"SELECT count(*) FROM " + TABLE_SQ_JOB
+ " WHERE " + COLUMN_SQB_ID + " = ?";
@@ -756,29 +756,8 @@ public final class DerbySchemaQuery {
+ " ON " + COLUMN_SQB_FROM_LINK + " = " + COLUMN_SQ_LNK_ID
+ " WHERE " + COLUMN_SQ_LNK_ID + " = ? ";
- // DML: Select one specific job
- public static final String STMT_SELECT_JOB_SINGLE =
- "SELECT "
- + "FROM_CONNECTOR." + COLUMN_SQ_LNK_CONNECTOR + ", "
- + "TO_CONNECTOR." + COLUMN_SQ_LNK_CONNECTOR + ", "
- + "job." + COLUMN_SQB_ID + ", "
- + "job." + COLUMN_SQB_NAME + ", "
- + "job." + COLUMN_SQB_FROM_LINK + ", "
- + "job." + COLUMN_SQB_TO_LINK + ", "
- + "job." + COLUMN_SQB_ENABLED + ", "
- + "job." + COLUMN_SQB_CREATION_USER + ", "
- + "job." + COLUMN_SQB_CREATION_DATE + ", "
- + "job." + COLUMN_SQB_UPDATE_USER + ", "
- + "job." + COLUMN_SQB_UPDATE_DATE
- + " FROM " + TABLE_SQ_JOB + " job"
- + " LEFT JOIN " + TABLE_SQ_LINK
- + " FROM_CONNECTOR ON " + COLUMN_SQB_FROM_LINK + " = FROM_CONNECTOR." + COLUMN_SQ_LNK_ID
- + " LEFT JOIN " + TABLE_SQ_LINK
- + " TO_CONNECTOR ON " + COLUMN_SQB_TO_LINK + " = TO_CONNECTOR." + COLUMN_SQ_LNK_ID
- + " WHERE " + COLUMN_SQB_ID + " = ?";
-
// DML: Select all jobs
- public static final String STMT_SELECT_JOB_ALL =
+ public static final String STMT_SELECT_JOB =
"SELECT "
+ "FROM_LINK." + COLUMN_SQ_LNK_CONNECTOR + ", "
+ "TO_LINK." + COLUMN_SQ_LNK_CONNECTOR + ", "
@@ -797,9 +776,14 @@ public final class DerbySchemaQuery {
+ " LEFT JOIN " + TABLE_SQ_LINK + " TO_LINK"
+ " ON " + COLUMN_SQB_TO_LINK + " = TO_LINK." + COLUMN_SQ_LNK_ID;
+ // DML: Select one specific job
+ public static final String STMT_SELECT_JOB_SINGLE_BY_ID =
+ STMT_SELECT_JOB + " WHERE " + COLUMN_SQB_ID + " = ?";
+
// DML: Select all jobs for a Connector
- public static final String STMT_SELECT_ALL_JOBS_FOR_CONNECTOR = STMT_SELECT_JOB_ALL
- + " WHERE FROM_LINK." + COLUMN_SQ_LNK_CONNECTOR + " = ? OR TO_LINK." + COLUMN_SQ_LNK_CONNECTOR + " = ?";
+ public static final String STMT_SELECT_ALL_JOBS_FOR_CONNECTOR = STMT_SELECT_JOB
+ + " WHERE FROM_LINK." + COLUMN_SQ_LNK_CONNECTOR + " = ? OR TO_LINK."
+ + COLUMN_SQ_LNK_CONNECTOR + " = ?";
// DML: Insert new submission
public static final String STMT_INSERT_SUBMISSION =
@@ -1066,6 +1050,14 @@ public final class DerbySchemaQuery {
public static final String QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_COLUMN_SQB_TYPE =
"ALTER TABLE " + TABLE_SQ_JOB + " DROP COLUMN " + COLUMN_SQB_TYPE;
+ public static final String QUERY_UPGRADE_TABLE_SQ_JOB_ADD_UNIQUE_CONSTRAINT_NAME =
+ "ALTER TABLE " + TABLE_SQ_JOB + " ADD CONSTRAINT "
+ + CONSTRAINT_SQB_NAME_UNIQUE + " UNIQUE (" + COLUMN_SQB_NAME + ")";
+
+ public static final String QUERY_UPGRADE_TABLE_SQ_LINK_ADD_UNIQUE_CONSTRAINT_NAME =
+ "ALTER TABLE " + TABLE_SQ_LINK + " ADD CONSTRAINT "
+ + CONSTRAINT_SQ_LNK_NAME_UNIQUE + " UNIQUE (" + COLUMN_SQ_LNK_NAME + ")";
+
private DerbySchemaQuery() {
// Disable explicit object creation
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
index bf72626..2da084f 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
@@ -37,12 +37,14 @@ import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_T
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_UPDATE_USER;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_ADD_CONSTRAINT_SQB_SQ_LNK_FROM;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_ADD_CONSTRAINT_SQB_SQ_LNK_TO;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_ADD_UNIQUE_CONSTRAINT_NAME;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_COLUMN_SQB_TYPE;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_CONSTRAINT_SQB_SQ_LNK;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_JOB_RENAME_COLUMN_SQB_LINK_TO_SQB_FROM_LINK;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_LINK_ADD_COLUMN_CREATION_USER;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_LINK_ADD_COLUMN_ENABLED;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_LINK_ADD_COLUMN_UPDATE_USER;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_LINK_ADD_UNIQUE_CONSTRAINT_NAME;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_SUBMISSION_ADD_COLUMN_CREATION_USER;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_UPGRADE_TABLE_SQ_SUBMISSION_ADD_COLUMN_UPDATE_USER;
import static org.junit.Assert.assertEquals;
@@ -152,11 +154,13 @@ abstract public class DerbyTestCase {
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_CONSTRAINT_SQB_SQ_LNK_FROM);
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_CONSTRAINT_SQB_SQ_LNK_TO);
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_COLUMN_SQB_TYPE);
+ runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_UNIQUE_CONSTRAINT_NAME);
+ runQuery(QUERY_UPGRADE_TABLE_SQ_LINK_ADD_UNIQUE_CONSTRAINT_NAME);
}
runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '" + version + "')");
runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) " +
- "VALUES('" + DerbyRepoConstants.SYSKEY_DRIVER_VERSION + "', '1')");
+ "VALUES('" + DerbyRepoConstants.SYSKEY_DRIVER_VERSION + "', '1')");
}
protected void createSchema() throws Exception {
@@ -169,13 +173,19 @@ abstract public class DerbyTestCase {
* @param query Query to execute
* @throws Exception
*/
- protected void runQuery(String query, String... args) throws Exception {
+ protected void runQuery(String query, Object... args) throws Exception {
PreparedStatement stmt = null;
try {
stmt = getDerbyDatabaseConnection().prepareStatement(query);
for (int i = 0; i < args.length; ++i) {
- stmt.setString(i + 1, args[i]);
+ if (args[i] instanceof String) {
+ stmt.setString(i + 1, (String)args[i]);
+ } else if (args[i] instanceof Long) {
+ stmt.setLong(i + 1, (Long)args[i]);
+ } else {
+ stmt.setString(i + 1, args[i].toString());
+ }
}
stmt.execute();
@@ -436,6 +446,7 @@ abstract public class DerbyTestCase {
* @throws Exception
*/
public void loadJobs(int version) throws Exception {
+ int index = 0;
switch (version) {
case 2:
for(String type : new String[] {"IMPORT", "EXPORT"}) {
@@ -468,7 +479,7 @@ abstract public class DerbyTestCase {
case 4:
for (String name : new String[]{"JA", "JB", "JC", "JD"}) {
runQuery("INSERT INTO SQOOP.SQ_JOB(SQB_NAME, SQB_FROM_LINK, SQB_TO_LINK)"
- + " VALUES('" + name + "', 1, 1)");
+ + " VALUES('" + name + index + "', 1, 1)");
}
// Odd IDs inputs have values
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java
index 1292168..0eb9df4 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java
@@ -17,10 +17,18 @@
*/
package org.apache.sqoop.repository.derby;
+import org.apache.sqoop.common.SqoopException;
import org.junit.Before;
import org.junit.Test;
import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -53,6 +61,17 @@ public class TestInternals extends DerbyTestCase {
assertTrue(handler.haveSuitableInternals(getDerbyDatabaseConnection()));
}
+ @Test(expected=SqoopException.class)
+ public void testUpgradeVersion2ToVersion4DuplicateFailure() throws Exception {
+ createSchema(2);
+ assertFalse(handler.haveSuitableInternals(getDerbyDatabaseConnection()));
+ loadConnectorAndDriverConfig(2);
+ loadLinks(2);
+ loadJobs(2);
+ handler.createOrUpdateInternals(getDerbyDatabaseConnection());
+ assertTrue(handler.haveSuitableInternals(getDerbyDatabaseConnection()));
+ }
+
@Test
public void testUpgradeVersion2ToVersion4() throws Exception {
createSchema(2);
@@ -60,10 +79,62 @@ public class TestInternals extends DerbyTestCase {
loadConnectorAndDriverConfig(2);
loadLinks(2);
loadJobs(2);
+ renameLinks();
+ renameJobs();
handler.createOrUpdateInternals(getDerbyDatabaseConnection());
assertTrue(handler.haveSuitableInternals(getDerbyDatabaseConnection()));
}
+ private Map<String, List<Long>> getNameIdMap(PreparedStatement ps) throws SQLException {
+ Map<String, List<Long>> nameIdMap = new TreeMap<String, List<Long>>();
+ ResultSet rs = null;
+
+ try {
+ rs = ps.executeQuery();
+ while(rs.next()) {
+ if (!nameIdMap.containsKey(rs.getString(1))) {
+ nameIdMap.put(rs.getString(1), new LinkedList<Long>());
+ }
+ nameIdMap.get(rs.getString(1)).add(rs.getLong(2));
+ }
+ } finally {
+ if(rs != null) {
+ rs.close();
+ }
+ if(ps != null) {
+ ps.close();
+ }
+ }
+
+ return nameIdMap;
+ }
+
+ private void renameLinks() throws Exception {
+ Map<String, List<Long>> nameIdMap =
+ getNameIdMap(getDerbyDatabaseConnection().prepareStatement("SELECT SQ_LNK_NAME, SQ_LNK_ID FROM SQOOP.SQ_LINK"));;
+
+ for (String name : nameIdMap.keySet()) {
+ if (nameIdMap.get(name).size() > 1) {
+ for (Long id : nameIdMap.get(name)) {
+ runQuery("UPDATE SQOOP.SQ_LINK SET SQ_LNK_NAME=? WHERE SQ_LNK_ID=?", name + "-" + id, id);
+ }
+ }
+ }
+ }
+
+ private void renameJobs() throws Exception {
+ Map<String, List<Long>> nameIdMap =
+ getNameIdMap(getDerbyDatabaseConnection().prepareStatement("SELECT SQB_NAME, SQB_ID FROM SQOOP.SQ_JOB"));;
+
+ for (String name : nameIdMap.keySet()) {
+ if (nameIdMap.get(name).size() > 1) {
+ for (Long id : nameIdMap.get(name)) {
+ runQuery("UPDATE SQOOP.SQ_JOB SET SQB_NAME=? WHERE SQB_ID=?", name + "-" + id, id);
+ }
+ }
+ }
+ }
+
private class TestDerbyRepositoryHandler extends DerbyRepositoryHandler {
protected long registerHdfsConnector(Connection conn) {
try {
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
index 595b1c8..0752923 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
@@ -76,7 +76,7 @@ public class TestJobHandling extends DerbyTestCase {
MJob firstJob = handler.findJob(1, derbyConnection);
assertNotNull(firstJob);
assertEquals(1, firstJob.getPersistenceId());
- assertEquals("JA", firstJob.getName());
+ assertEquals("JA0", firstJob.getName());
List<MConfig> configs;
@@ -114,13 +114,13 @@ public class TestJobHandling extends DerbyTestCase {
list = handler.findJobs(derbyConnection);
assertEquals(4, list.size());
- assertEquals("JA", list.get(0).getName());
+ assertEquals("JA0", list.get(0).getName());
- assertEquals("JB", list.get(1).getName());
+ assertEquals("JB0", list.get(1).getName());
- assertEquals("JC", list.get(2).getName());
+ assertEquals("JC0", list.get(2).getName());
- assertEquals("JD", list.get(3).getName());
+ assertEquals("JD0", list.get(3).getName());
}
@Test
@@ -193,6 +193,19 @@ public class TestJobHandling extends DerbyTestCase {
assertCountForTable("SQOOP.SQ_JOB_INPUT", 12);
}
+ @Test(expected=SqoopException.class)
+ public void testCreateDuplicateJob() throws Exception {
+ // Duplicate jobs
+ MJob job = getJob();
+ fillJob(job);
+ job.setName("test");
+ handler.createJob(job, getDerbyDatabaseConnection());
+ assertEquals(1, job.getPersistenceId());
+
+ job.setPersistenceId(MJob.PERSISTANCE_ID_DEFAULT);
+ handler.createJob(job, getDerbyDatabaseConnection());
+ }
+
@Test
public void testUpdateJob() throws Exception {
loadJobs();
http://git-wip-us.apache.org/repos/asf/sqoop/blob/9f8f5951/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
index 38e632a..bbfe5bb 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
@@ -147,6 +147,18 @@ public class TestLinkHandling extends DerbyTestCase {
assertCountForTable("SQOOP.SQ_LINK_INPUT", 4);
}
+ @Test(expected=SqoopException.class)
+ public void testCreateDuplicateLink() throws Exception {
+ MLink link = getLink();
+ fillLink(link);
+ link.setName("test");
+ handler.createLink(link, getDerbyDatabaseConnection());
+ assertEquals(1, link.getPersistenceId());
+
+ link.setPersistenceId(MLink.PERSISTANCE_ID_DEFAULT);
+ handler.createLink(link, getDerbyDatabaseConnection());
+ }
+
@Test
public void testInUseLink() throws Exception {
loadLinks();