You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ab...@apache.org on 2014/10/29 20:35:06 UTC
git commit: SQOOP-1636: Sqoop2: Add unique constraint to the
SQI_INPUT name per type per config
Repository: sqoop
Updated Branches:
refs/heads/sqoop2 31f30cc27 -> a9bd172a9
SQOOP-1636: Sqoop2: Add unique constraint to the SQI_INPUT name per type per config
(Veena Basavaraj via Abraham Elmahrek)
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/a9bd172a
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/a9bd172a
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/a9bd172a
Branch: refs/heads/sqoop2
Commit: a9bd172a944ee747ab482d454887251580c4266d
Parents: 31f30cc
Author: Abraham Elmahrek <ab...@elmahrek.com>
Authored: Wed Oct 29 12:17:20 2014 -0700
Committer: Abraham Elmahrek <ab...@elmahrek.com>
Committed: Wed Oct 29 12:17:20 2014 -0700
----------------------------------------------------------------------
.../derby/DerbyRepositoryHandler.java | 4 +-
.../repository/derby/DerbySchemaConstants.java | 7 ++-
.../derby/DerbySchemaUpgradeQuery.java | 8 ++++
.../sqoop/repository/derby/DerbyTestCase.java | 48 ++++++++++++++++++--
.../derby/TestRespositorySchemaUpgrade.java | 20 ++++++++
5 files changed, 81 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a9bd172a/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 58d6a43..b996a0b 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
@@ -444,7 +444,9 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_UNIQUE_CONSTRAINT_NAME, conn);
runQuery(QUERY_UPGRADE_TABLE_SQ_LINK_ADD_UNIQUE_CONSTRAINT_NAME, conn);
runQuery(QUERY_UPGRADE_TABLE_SQ_CONFIGURABLE_ADD_UNIQUE_CONSTRAINT_NAME, conn);
- runQuery(QUERY_UPGRADE_TABLE_SQ_CONFIG_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIGURABLE_ID, conn);
+ runQuery(QUERY_UPGRADE_TABLE_SQ_CONFIG_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIGURABLE_ID,
+ conn);
+ runQuery(QUERY_UPGRADE_TABLE_SQ_INPUT_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIG_ID, conn);
}
// last step upgrade the repository version to the latest value in the code
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a9bd172a/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 41ca107..3d15e47 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
@@ -140,7 +140,7 @@ public final class DerbySchemaConstants {
public static final String CONSTRAINT_SQ_CFG_SQC_NAME = CONSTRAINT_PREFIX + "SQ_CFG_SQC";
public static final String CONSTRAINT_SQ_CFG_SQC = SCHEMA_PREFIX + CONSTRAINT_SQ_CFG_SQC_NAME;
- // unique name constraint
+ // uniqueness constraint
public static final String CONSTRAINT_SQ_CONFIG_UNIQUE_NAME_TYPE_CONFIGURABLE = CONSTRAINT_PREFIX + "SQ_CFG_NAME_TYPE_CONFIGURABLE_UNIQUE";
public static final String CONSTRAINT_SQ_CONFIG_UNIQUE = SCHEMA_PREFIX + CONSTRAINT_SQ_CONFIG_UNIQUE_NAME_TYPE_CONFIGURABLE;
@@ -201,6 +201,11 @@ public final class DerbySchemaConstants {
public static final String CONSTRAINT_SQI_SQ_CFG_NAME = CONSTRAINT_PREFIX + "SQI_SQ_CFG";
public static final String CONSTRAINT_SQI_SQ_CFG = SCHEMA_PREFIX + CONSTRAINT_SQI_SQ_CFG_NAME;
+ // uniqueness constraint
+ public static final String CONSTRAINT_SQ_INPUT_UNIQUE_NAME_TYPE_CONFIG = CONSTRAINT_PREFIX + "SQI_NAME_TYPE_CONFIG_UNIQUE";
+ public static final String CONSTRAINT_SQ_INPUT_UNIQUE = SCHEMA_PREFIX + CONSTRAINT_SQ_INPUT_UNIQUE_NAME_TYPE_CONFIG;
+
+ // SQ_LINK
@Deprecated // used only for upgrade
public static final String TABLE_SQ_CONNECTION_NAME = "SQ_CONNECTION";
public static final String TABLE_SQ_LINK_NAME = "SQ_LINK";
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a9bd172a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaUpgradeQuery.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaUpgradeQuery.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaUpgradeQuery.java
index 2abdfe5..80670dc 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaUpgradeQuery.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaUpgradeQuery.java
@@ -436,6 +436,14 @@ public final class DerbySchemaUpgradeQuery {
+ " UNIQUE ("
+ COLUMN_SQ_CFG_NAME + ", " + COLUMN_SQ_CFG_TYPE + ", " + COLUMN_SQ_CFG_CONFIGURABLE + ")";
+ // add unique constraint on the input table for name and type and configId
+ public static final String QUERY_UPGRADE_TABLE_SQ_INPUT_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIG_ID = "ALTER TABLE "
+ + TABLE_SQ_INPUT
+ + " ADD CONSTRAINT "
+ + CONSTRAINT_SQ_INPUT_UNIQUE
+ + " UNIQUE ("
+ + COLUMN_SQI_NAME + ", " + COLUMN_SQI_TYPE + ", " + COLUMN_SQI_CONFIG + ")";
+
private DerbySchemaUpgradeQuery() {
// Disable explicit object creation
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a9bd172a/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 8a1e346..a895320 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
@@ -20,7 +20,6 @@ package org.apache.sqoop.repository.derby;
import static org.apache.sqoop.repository.derby.DerbySchemaUpgradeQuery.*;
import static org.apache.sqoop.repository.derby.DerbySchemaCreateQuery.*;
import static org.apache.sqoop.repository.derby.DerbySchemaInsertUpdateDeleteSelectQuery.*;
-
import static org.junit.Assert.assertEquals;
import java.sql.Connection;
@@ -211,7 +210,10 @@ abstract public class DerbyTestCase {
renameConnectorToConfigurable();
// add the name constraint for configurable
runQuery(QUERY_UPGRADE_TABLE_SQ_CONFIGURABLE_ADD_UNIQUE_CONSTRAINT_NAME);
+ // add sq_config uniqueness constraint
runQuery(QUERY_UPGRADE_TABLE_SQ_CONFIG_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIGURABLE_ID);
+ // add sq_input uniqueness constraint
+ runQuery(QUERY_UPGRADE_TABLE_SQ_INPUT_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIG_ID);
}
// deprecated repository version
@@ -698,7 +700,7 @@ abstract public class DerbyTestCase {
}
/**
- * testing config with non unique nam/type objects into repository.
+ * testing config with non unique name/type objects into repository.
* @throws Exception
*/
public void loadNonUniqueConfigNameTypeInVersion4() throws Exception {
@@ -712,7 +714,24 @@ abstract public class DerbyTestCase {
}
/**
- * testing config with non unique nam/type objects into repository.
+ * testing input with non unique name/type objects into repository.
+ * @throws Exception
+ */
+ public void loadNonUniqueInputNameTypeInVersion4() throws Exception {
+
+ runInsertQuery("INSERT INTO SQOOP.SQ_CONFIG"
+ + "(SQ_CFG_CONFIGURABLE, SQ_CFG_NAME, SQ_CFG_TYPE, SQ_CFG_INDEX) "
+ + "VALUES(1, 'C1', 'LINK', 0)");
+ runInsertQuery("INSERT INTO SQOOP.SQ_INPUT"
+ + "(SQI_NAME, SQI_CONFIG, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)"
+ + " VALUES('I1', 1, 0, 'STRING', false, 30)");
+ runInsertQuery("INSERT INTO SQOOP.SQ_INPUT"
+ + "(SQI_NAME, SQI_CONFIG, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)"
+ + " VALUES('I1', 1, 0, 'STRING', false, 30)");
+ }
+
+ /**
+ * testing config with non unique name/type objects into repository.
* @throws Exception
*/
public void loadNonUniqueConfigNameButUniqueTypeInVersion4() throws Exception {
@@ -736,7 +755,28 @@ abstract public class DerbyTestCase {
+ "VALUES(1, 'C1', 'LINK', 0)");
runInsertQuery("INSERT INTO SQOOP.SQ_CONFIG"
+ "(SQ_CFG_CONFIGURABLE, SQ_CFG_NAME, SQ_CFG_TYPE, SQ_CFG_INDEX) "
- + "VALUES(2, 'C1', 'LINK', 0)");
+ + "VALUES(2, 'C1', 'LINK', 1)");
+ }
+
+ /**
+ * testing input with non unique name/type objects into repository.
+ * @throws Exception
+ */
+ public void loadNonUniqueInputNameAndTypeButUniqueConfigInVersion4() throws Exception {
+
+ runInsertQuery("INSERT INTO SQOOP.SQ_CONFIG"
+ + "(SQ_CFG_CONFIGURABLE, SQ_CFG_NAME, SQ_CFG_TYPE, SQ_CFG_INDEX) "
+ + "VALUES(1, 'C1', 'LINK', 0)");
+ runInsertQuery("INSERT INTO SQOOP.SQ_CONFIG"
+ + "(SQ_CFG_CONFIGURABLE, SQ_CFG_NAME, SQ_CFG_TYPE, SQ_CFG_INDEX) "
+ + "VALUES(2, 'C2', 'LINK', 0)");
+
+ runInsertQuery("INSERT INTO SQOOP.SQ_INPUT"
+ + "(SQI_NAME, SQI_CONFIG, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)"
+ + " VALUES('C1.A', 1, 0, 'STRING', false, 30)");
+ runInsertQuery("INSERT INTO SQOOP.SQ_INPUT"
+ + "(SQI_NAME, SQI_CONFIG, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)"
+ + " VALUES('C1.A', 2, 1, 'STRING', false, 30)");
}
public void loadJobsForLatestVersion() throws Exception {
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a9bd172a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java
index 8cbe811..c281901 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java
@@ -103,6 +103,26 @@ public class TestRespositorySchemaUpgrade extends DerbyTestCase {
super.loadNonUniqueConfigNameAndTypeButUniqueConfigurableInVersion4();
}
+ @Test(expected = SQLIntegrityConstraintViolationException.class)
+ public void testUpgradeVersion4WithNonUniqueInputNameAndTypeAdded() throws Exception {
+ super.createOrUpgradeSchema(4);
+ super.addConnectorB();
+ // try loading duplicate input name and type for a config in version 4 and it should throw an
+ // exception
+ super.loadNonUniqueInputNameTypeInVersion4();
+ }
+
+ @Test
+ public void testUpgradeVersion4WithNonUniqueInputNameAndTypeButUniqueConfig()
+ throws Exception {
+ super.createOrUpgradeSchema(4);
+ super.addConnectorA();
+ super.addConnectorB();
+ // try loading duplicate input names and type but unique config, hence
+ // no exception
+ super.loadNonUniqueInputNameAndTypeButUniqueConfigInVersion4();
+ }
+
@Test
public void testUpgradeRepoVersion2ToVersion4() throws Exception {
// in case of version 2 schema there is no unique job/ link constraint