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 2013/07/30 05:28:00 UTC
git commit: SQOOP-1075: Sqoop2: Persist Framework metadata version in
repository
Updated Branches:
refs/heads/sqoop2 69ecc93d4 -> a7d9b1b33
SQOOP-1075: Sqoop2: Persist Framework metadata version in repository
(Raghav Kumar Gautam 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/a7d9b1b3
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/a7d9b1b3
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/a7d9b1b3
Branch: refs/heads/sqoop2
Commit: a7d9b1b3389582215053490590163e24f8ba25d9
Parents: 69ecc93
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Mon Jul 29 20:27:16 2013 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Mon Jul 29 20:27:16 2013 -0700
----------------------------------------------------------------------
.../apache/sqoop/client/TestSqoopClient.java | 3 +-
.../org/apache/sqoop/json/FrameworkBean.java | 5 +-
.../sqoop/json/util/FormSerialization.java | 1 +
.../java/org/apache/sqoop/model/MConnector.java | 8 +--
.../java/org/apache/sqoop/model/MFramework.java | 24 +++++--
.../java/org/apache/sqoop/json/TestUtil.java | 2 +-
.../org/apache/sqoop/model/TestMFramework.java | 2 +-
.../sqoop/framework/FrameworkManager.java | 5 +-
.../sqoop/repository/TestJdbcRepository.java | 7 ++-
.../repository/derby/DerbyRepoConstants.java | 2 +
.../sqoop/repository/derby/DerbyRepoError.java | 1 +
.../derby/DerbyRepositoryHandler.java | 66 +++++++++++++++++++-
.../sqoop/repository/derby/DerbyTestCase.java | 6 +-
.../repository/derby/TestFrameworkHandling.java | 55 ++++++++++++++++
14 files changed, 165 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java b/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
index 1778cf1..3e0544a 100644
--- a/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
+++ b/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
@@ -184,7 +184,8 @@ public class TestSqoopClient {
}
private MFramework framework() {
- MFramework framework = new MFramework(new MConnectionForms(null), new LinkedList<MJobForms>());
+ MFramework framework = new MFramework(new MConnectionForms(null),
+ new LinkedList<MJobForms>(), "1");
framework.setPersistenceId(1);
return framework;
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/common/src/main/java/org/apache/sqoop/json/FrameworkBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/FrameworkBean.java b/common/src/main/java/org/apache/sqoop/json/FrameworkBean.java
index ad4753b..eb79f98 100644
--- a/common/src/main/java/org/apache/sqoop/json/FrameworkBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/FrameworkBean.java
@@ -75,6 +75,7 @@ public class FrameworkBean implements JsonBean {
JSONObject result = new JSONObject();
result.put(ID, framework.getPersistenceId());
+ result.put(FRAMEWORK_VERSION, framework.getVersion());
result.put(CON_FORMS, conForms);
result.put(JOB_FORMS, jobForms);
result.put(RESOURCES, extractResourceBundle(bundle));
@@ -85,6 +86,7 @@ public class FrameworkBean implements JsonBean {
@SuppressWarnings("unchecked")
public void restore(JSONObject jsonObject) {
long id = (Long) jsonObject.get(ID);
+ String frameworkVersion = (String) jsonObject.get(FRAMEWORK_VERSION);
List<MForm> connForms = restoreForms((JSONArray) jsonObject.get(CON_FORMS));
@@ -101,7 +103,8 @@ public class FrameworkBean implements JsonBean {
jobs.add(new MJobForms(type, job));
}
- framework = new MFramework(new MConnectionForms(connForms), jobs);
+ framework = new MFramework(new MConnectionForms(connForms), jobs,
+ frameworkVersion);
framework.setPersistenceId(id);
bundle = restoreResourceBundle((JSONObject) jsonObject.get(RESOURCES));
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
index 978789b..3daf8d2 100644
--- a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
+++ b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
@@ -44,6 +44,7 @@ public final class FormSerialization {
public static final String ID = "id";
public static final String NAME = "name";
public static final String VERSION = "version";
+ public static final String FRAMEWORK_VERSION = "framework-version";
public static final String CLASS = "class";
public static final String CREATED = "created";
public static final String UPDATED = "updated";
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/common/src/main/java/org/apache/sqoop/model/MConnector.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MConnector.java b/common/src/main/java/org/apache/sqoop/model/MConnector.java
index 1c2c422..43fad27 100644
--- a/common/src/main/java/org/apache/sqoop/model/MConnector.java
+++ b/common/src/main/java/org/apache/sqoop/model/MConnector.java
@@ -30,11 +30,10 @@ public final class MConnector extends MFramework {
private final String uniqueName;
private final String className;
- private final String version;
public MConnector(String uniqueName, String className, String version,
MConnectionForms connectionForms, List<MJobForms> jobForms) {
- super(connectionForms, jobForms);
+ super(connectionForms, jobForms, version);
if (uniqueName == null || className == null) {
throw new NullPointerException();
@@ -42,7 +41,6 @@ public final class MConnector extends MFramework {
this.uniqueName = uniqueName;
this.className = className;
- this.version = version;
}
public String getUniqueName() {
@@ -53,10 +51,6 @@ public final class MConnector extends MFramework {
return className;
}
- public String getVersion() {
- return version;
- }
-
@Override
public String toString() {
StringBuilder sb = new StringBuilder("connector-");
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/common/src/main/java/org/apache/sqoop/model/MFramework.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MFramework.java b/common/src/main/java/org/apache/sqoop/model/MFramework.java
index 694f022..c742459 100644
--- a/common/src/main/java/org/apache/sqoop/model/MFramework.java
+++ b/common/src/main/java/org/apache/sqoop/model/MFramework.java
@@ -32,8 +32,11 @@ public class MFramework extends MPersistableEntity implements MClonable {
private final MConnectionForms connectionForms;
private final Map<MJob.Type, MJobForms> jobs;
+ String version;
- public MFramework(MConnectionForms connectionForms, List<MJobForms> jobForms) {
+ public MFramework(MConnectionForms connectionForms, List<MJobForms> jobForms,
+ String version) {
+ this.version = version;
this.connectionForms = connectionForms;
this.jobs = new HashMap<MJob.Type, MJobForms>();
@@ -52,6 +55,7 @@ public class MFramework extends MPersistableEntity implements MClonable {
public String toString() {
StringBuilder sb = new StringBuilder("framework-");
sb.append(getPersistenceId()).append(":");
+ sb.append("version = " + version);
sb.append(", ").append(connectionForms.toString());
for(MJobForms entry: jobs.values()) {
sb.append(entry.toString());
@@ -71,7 +75,9 @@ public class MFramework extends MPersistableEntity implements MClonable {
}
MFramework mo = (MFramework) other;
- return connectionForms.equals(mo.connectionForms) && jobs.equals(mo.jobs);
+ return version.equals(mo.getVersion()) &&
+ connectionForms.equals(mo.connectionForms) &&
+ jobs.equals(mo.jobs);
}
@Override
@@ -81,7 +87,7 @@ public class MFramework extends MPersistableEntity implements MClonable {
for(MJobForms entry: jobs.values()) {
result = 31 * result + entry.hashCode();
}
-
+ result = 31 * result + version.hashCode();
return result;
}
@@ -108,9 +114,19 @@ public class MFramework extends MPersistableEntity implements MClonable {
copyJobForms.add(entry.clone(cloneWithValue));
}
}
- MFramework copy = new MFramework(this.getConnectionForms().clone(cloneWithValue), copyJobForms);
+ MFramework copy = new MFramework(this.getConnectionForms().clone(cloneWithValue),
+ copyJobForms, this.version);
copy.setPersistenceId(this.getPersistenceId());
return copy;
}
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/common/src/test/java/org/apache/sqoop/json/TestUtil.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestUtil.java b/common/src/test/java/org/apache/sqoop/json/TestUtil.java
index b88d7a4..69dcb66 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestUtil.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestUtil.java
@@ -44,7 +44,7 @@ public class TestUtil {
}
public static MFramework getFramework() {
- return new MFramework(getConnectionForms(), getAllJobForms());
+ return new MFramework(getConnectionForms(), getAllJobForms(), "1");
}
public static MConnection getConnection(String name) {
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/common/src/test/java/org/apache/sqoop/model/TestMFramework.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/model/TestMFramework.java b/common/src/test/java/org/apache/sqoop/model/TestMFramework.java
index a5366ca..15d9676 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestMFramework.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestMFramework.java
@@ -37,7 +37,7 @@ public class TestMFramework {
jobForms.add(new MJobForms(MJob.Type.IMPORT, new ArrayList<MForm>()));
try {
- new MFramework(connectionForms, jobForms);
+ new MFramework(connectionForms, jobForms, "1");
fail("We we're expecting exception for invalid usage");
} catch(Exception ex) {
// Expected case
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java b/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java
index ad6cd0f..424285c 100644
--- a/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java
+++ b/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java
@@ -111,6 +111,8 @@ public class FrameworkManager implements Reconfigurable {
*/
private static final boolean DEFAULT_AUTO_UPGRADE = false;
+ public static final String CURRENT_FRAMEWORK_VERSION = "1";
+
public Class getJobConfigurationClass(MJob.Type jobType) {
switch (jobType) {
case IMPORT:
@@ -134,7 +136,8 @@ public class FrameworkManager implements Reconfigurable {
FormUtils.toForms(getJobConfigurationClass(MJob.Type.IMPORT))));
jobForms.add(new MJobForms(MJob.Type.EXPORT,
FormUtils.toForms(getJobConfigurationClass(MJob.Type.EXPORT))));
- mFramework = new MFramework(connectionForms, jobForms);
+ mFramework = new MFramework(connectionForms, jobForms,
+ CURRENT_FRAMEWORK_VERSION);
// Build validator
validator = new FrameworkValidator();
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java b/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
index 247e165..40a6eca 100644
--- a/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
+++ b/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
@@ -924,7 +924,7 @@ public class TestJdbcRepository {
doNothing().when(repoHandler).updateFramework(any(MFramework.class), any(Connection.class));
doReturn(true).when(repoHandler).existsConnection(anyLong(), any(Connection.class));
doReturn(true).when(repoHandler).existsJob(anyLong(), any(Connection.class));
- doNothing().when(repoHandler).updateConnection(any(MConnection.class), any(Connection.class));;
+ doNothing().when(repoHandler).updateConnection(any(MConnection.class), any(Connection.class));
SqoopException exception = new SqoopException(RepositoryError.JDBCREPO_0000,
"update job error.");
@@ -969,13 +969,14 @@ public class TestJdbcRepository {
jobForms.add(new MJobForms(MJob.Type.IMPORT, FormUtils.toForms(ImportJobConfiguration.class)));
MFramework framework = new MFramework(new MConnectionForms(new LinkedList<MForm>()),
- jobForms);
+ jobForms, FrameworkManager.CURRENT_FRAMEWORK_VERSION);
framework.setPersistenceId(1);
return framework;
}
private MFramework anotherFramework() {
- MFramework framework = new MFramework(null, new LinkedList<MJobForms>());
+ MFramework framework = new MFramework(null, new LinkedList<MJobForms>(),
+ FrameworkManager.CURRENT_FRAMEWORK_VERSION);
framework.setPersistenceId(1);
return framework;
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java
index 607b8d5..bb01f03 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java
@@ -23,6 +23,8 @@ public final class DerbyRepoConstants {
public static final String SYSKEY_VERSION = "version";
+ public static final String SYSKEY_FRAMEWORK_VERSION = "framework.version";
+
/**
* Expected version of the repository structures.
*
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
index 455eb64..e4b30f9 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
@@ -178,6 +178,7 @@ public enum DerbyRepoError implements ErrorCode {
/** Can't enable/disable job **/
DERBYREPO_0043("Can't enable/disable job"),
+ DERBYREPO_0044("Update of framework failed"),
;
private final String message;
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/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 771673d..f025ee9 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
@@ -41,6 +41,7 @@ import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.apache.commons.lang.StringUtils;
import org.apache.sqoop.common.SqoopException;
+import org.apache.sqoop.framework.FrameworkManager;
import org.apache.sqoop.model.MBooleanInput;
import org.apache.sqoop.model.MConnection;
import org.apache.sqoop.model.MConnectionForms;
@@ -308,6 +309,59 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
}
}
+ /**
+ * Detect version of the framework
+ *
+ * @param conn Connection to metadata repository
+ * @return Version of the MFramework
+ */
+ private String detectFrameworkVersion (Connection conn) {
+ ResultSet rs = null;
+ PreparedStatement stmt = null;
+ try {
+ stmt = conn.prepareStatement(DerbySchemaQuery.STMT_SELECT_SYSTEM);
+ stmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
+ rs = stmt.executeQuery();
+ if(!rs.next()) {
+ return null;
+ }
+ return rs.getString(1);
+ } catch (SQLException e) {
+ LOG.info("Can't fetch framework version.", e);
+ return null;
+ } finally {
+ closeResultSets(rs);
+ closeStatements(stmt);
+ }
+ }
+
+ /**
+ * Create or update framework version
+ * @param conn Connection to the metadata repository
+ * @param mFramework
+ */
+ private void createOrUpdateFrameworkVersion(Connection conn,
+ MFramework mFramework) {
+ ResultSet rs = null;
+ PreparedStatement stmt = null;
+ try {
+ stmt = conn.prepareStatement(STMT_DELETE_SYSTEM);
+ stmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
+ stmt.executeUpdate();
+ closeStatements(stmt);
+
+ stmt = conn.prepareStatement(STMT_INSERT_SYSTEM);
+ stmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
+ stmt.setString(2, mFramework.getVersion());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ logException(e);
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0044, e);
+ } finally {
+ closeResultSets(rs);
+ closeStatements(stmt);
+ }
+ }
/**
* {@inheritDoc}
@@ -466,6 +520,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
} finally {
closeStatements(baseFormStmt, baseInputStmt);
}
+ createOrUpdateFrameworkVersion(conn, mf);
}
/**
@@ -493,7 +548,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
}
mf = new MFramework(new MConnectionForms(connectionForms),
- convertToJobList(jobForms));
+ convertToJobList(jobForms), detectFrameworkVersion(conn));
// We're using hardcoded value for framework metadata as they are
// represented as NULL in the database.
@@ -846,10 +901,11 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
} catch (SQLException e) {
logException(e, mFramework);
- throw new SqoopException(DerbyRepoError.DERBYREPO_0038, e);
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0044, e);
} finally {
closeStatements(deleteForm, deleteInput);
}
+ createOrUpdateFrameworkVersion(conn, mFramework);
insertFormsForFramework(mFramework, conn);
}
@@ -1975,6 +2031,9 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
* @param resultSets Result sets to close
*/
private void closeResultSets(ResultSet ... resultSets) {
+ if(resultSets == null) {
+ return;
+ }
for (ResultSet rs : resultSets) {
if(rs != null) {
try {
@@ -1994,6 +2053,9 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
* @param stmts Statements to close
*/
private void closeStatements(Statement... stmts) {
+ if(stmts == null) {
+ return;
+ }
for (Statement stmt : stmts) {
if(stmt != null) {
try {
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/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 b766b09..eac87b8 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
@@ -18,6 +18,7 @@
package org.apache.sqoop.repository.derby;
import junit.framework.TestCase;
+import org.apache.sqoop.framework.FrameworkManager;
import org.apache.sqoop.model.MConnection;
import org.apache.sqoop.model.MConnectionForms;
import org.apache.sqoop.model.MConnector;
@@ -102,6 +103,8 @@ abstract public class DerbyTestCase extends TestCase {
runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED);
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED);
runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '2')");
+ runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) " +
+ "VALUES('framework.version', '1')");
}
/**
@@ -303,7 +306,8 @@ abstract public class DerbyTestCase extends TestCase {
}
protected MFramework getFramework() {
- return new MFramework(getConnectionForms(), getJobForms());
+ return new MFramework(getConnectionForms(), getJobForms(),
+ FrameworkManager.CURRENT_FRAMEWORK_VERSION);
}
protected void fillConnection(MConnection connection) {
http://git-wip-us.apache.org/repos/asf/sqoop/blob/a7d9b1b3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java
index 66611d4..50d1235 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java
@@ -17,8 +17,13 @@
*/
package org.apache.sqoop.repository.derby;
+import org.apache.sqoop.framework.FrameworkManager;
import org.apache.sqoop.model.MFramework;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
/**
* Test framework methods on Derby repository.
*/
@@ -71,5 +76,55 @@ public class TestFrameworkHandling extends DerbyTestCase {
MFramework retrieved = handler.findFramework(getDerbyConnection());
assertNotNull(retrieved);
assertEquals(framework, retrieved);
+ assertEquals(framework.getVersion(), retrieved.getVersion());
+ }
+
+ private String getFrameworkVersion() throws Exception {
+ final String frameworkVersionQuery =
+ "SELECT SQM_VALUE FROM SQOOP.SQ_SYSTEM WHERE SQM_KEY=?";
+ String retVal = null;
+ PreparedStatement preparedStmt = null;
+ ResultSet resultSet = null;
+ try {
+ preparedStmt =
+ getDerbyConnection().prepareStatement(frameworkVersionQuery);
+ preparedStmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
+ resultSet = preparedStmt.executeQuery();
+ if(resultSet.next())
+ retVal = resultSet.getString(1);
+ return retVal;
+ } finally {
+ if(preparedStmt !=null) {
+ try {
+ preparedStmt.close();
+ } catch(SQLException e) {
+ }
+ }
+ if(resultSet != null) {
+ try {
+ resultSet.close();
+ } catch(SQLException e) {
+ }
+ }
+ }
}
+
+ public void testFrameworkVersion() throws Exception {
+ handler.registerFramework(getFramework(), getDerbyConnection());
+
+ final String lowerVersion = Integer.toString(
+ Integer.parseInt(FrameworkManager.CURRENT_FRAMEWORK_VERSION) - 1);
+ assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion());
+ runQuery("UPDATE SQOOP.SQ_SYSTEM SET SQM_VALUE='" + lowerVersion +
+ "' WHERE SQM_KEY = '" + DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION + "'");
+ assertEquals(lowerVersion, getFrameworkVersion());
+
+ MFramework framework = getFramework();
+ handler.updateFramework(framework, getDerbyConnection());
+
+ assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, framework.getVersion());
+
+ assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion());
+ }
+
}