From 05711d14118ab89861c45067b9680d0eaaeb52bb Mon Sep 17 00:00:00 2001 From: Abraham Elmahrek Date: Thu, 13 Nov 2014 14:57:06 -0800 Subject: [PATCH] SQOOP-1725: Sqoop2: Connector upgrade in 1.99.4 fails with delete configs (Veena Basavaraj via Abraham Elmahrek) --- .../repository/derby/DerbyRepositoryHandler.java | 7 ++++++- .../DerbySchemaInsertUpdateDeleteSelectQuery.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) 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 37766bf5..aa3a1e4b 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 @@ -1294,11 +1294,14 @@ public void upgradeConnectorAndConfigs(MConnector mConnector, Connection conn) { private void updateConnectorAndDeleteConfigs(MConnector mConnector, Connection conn) { PreparedStatement updateConnectorStatement = null; PreparedStatement deleteConfig = null; + PreparedStatement deleteConfigDirection = null; PreparedStatement deleteInput = null; try { updateConnectorStatement = conn.prepareStatement(STMT_UPDATE_CONFIGURABLE); deleteInput = conn.prepareStatement(STMT_DELETE_INPUTS_FOR_CONFIGURABLE); + deleteConfigDirection = conn.prepareStatement(STMT_DELETE_DIRECTIONS_FOR_CONFIGURABLE); deleteConfig = conn.prepareStatement(STMT_DELETE_CONFIGS_FOR_CONFIGURABLE); + updateConnectorStatement.setString(1, mConnector.getUniqueName()); updateConnectorStatement.setString(2, mConnector.getClassName()); updateConnectorStatement.setString(3, mConnector.getVersion()); @@ -1309,15 +1312,17 @@ private void updateConnectorAndDeleteConfigs(MConnector mConnector, Connection c throw new SqoopException(DerbyRepoError.DERBYREPO_0038); } deleteInput.setLong(1, mConnector.getPersistenceId()); + deleteConfigDirection.setLong(1, mConnector.getPersistenceId()); deleteConfig.setLong(1, mConnector.getPersistenceId()); deleteInput.executeUpdate(); + deleteConfigDirection.executeUpdate(); deleteConfig.executeUpdate(); } catch (SQLException e) { logException(e, mConnector); throw new SqoopException(DerbyRepoError.DERBYREPO_0038, e); } finally { - closeStatements(updateConnectorStatement, deleteConfig, deleteInput); + closeStatements(updateConnectorStatement, deleteConfig, deleteConfigDirection, deleteInput); } } diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaInsertUpdateDeleteSelectQuery.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaInsertUpdateDeleteSelectQuery.java index a50027c1..f349a757 100644 --- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaInsertUpdateDeleteSelectQuery.java +++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaInsertUpdateDeleteSelectQuery.java @@ -628,6 +628,18 @@ public final class DerbySchemaInsertUpdateDeleteSelectQuery { public static final String STMT_SELECT_SQ_CONFIG_DIRECTIONS = STMT_SELECT_SQ_CONFIG_DIRECTIONS_ALL + " WHERE " + COLUMN_SQ_CFG_DIR_CONFIG + " = ?"; + + // Delete the config directions for a connector + public static final String STMT_DELETE_DIRECTIONS_FOR_CONFIGURABLE = + "DELETE FROM " + TABLE_SQ_CONFIG_DIRECTIONS + + " WHERE " + + COLUMN_SQ_CFG_DIR_CONFIG + + " IN (SELECT " + + COLUMN_SQ_CFG_ID + + " FROM " + TABLE_SQ_CONFIG + + " WHERE " + + COLUMN_SQ_CFG_CONFIGURABLE + " = ?)"; + private DerbySchemaInsertUpdateDeleteSelectQuery() {