You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ar...@apache.org on 2012/01/10 04:37:25 UTC
svn commit: r1229465 - in /incubator/sqoop/branches/sqoop2:
common/src/main/java/org/apache/sqoop/model/
connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/
connector/connector-mysql-jdbc/src/main/java/org/apache/sqoop/conne...
Author: arvind
Date: Tue Jan 10 03:37:24 2012
New Revision: 1229465
URL: http://svn.apache.org/viewvc?rev=1229465&view=rev
Log:
SQOOP-365. Ability to register and retrieve connector metadata.
Added:
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFormType.java (with props)
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInputType.java (with props)
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MPersistableEntity.java (with props)
incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/
incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/
incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java (with props)
Removed:
incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/spi/
Modified:
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MForm.java
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInput.java
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MMapInput.java
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MNamedElement.java
incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MStringInput.java
incubator/sqoop/branches/sqoop2/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcConnector.java
incubator/sqoop/branches/sqoop2/connector/connector-mysql-jdbc/src/main/java/org/apache/sqoop/connector/mysqljdbc/MySqlJdbcConnector.java
incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java
incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
incubator/sqoop/branches/sqoop2/server/src/main/webapp/WEB-INF/web.xml
Modified: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java (original)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java Tue Jan 10 03:37:24 2012
@@ -20,7 +20,7 @@ package org.apache.sqoop.model;
import java.util.ArrayList;
import java.util.List;
-public final class MConnector {
+public final class MConnector extends MPersistableEntity {
private final String uniqueName;
private final String className;
@@ -54,8 +54,8 @@ public final class MConnector {
@Override
public String toString() {
StringBuilder sb = new StringBuilder("connector-");
- sb.append(uniqueName).append(":").append(className);
- sb.append("; conn-forms:").append(connectionForms);
+ sb.append(uniqueName).append(":").append(getPersistenceId()).append(":");
+ sb.append(className).append("; conn-forms:").append(connectionForms);
sb.append("; job-forms:").append(jobForms);
return sb.toString();
@@ -72,8 +72,10 @@ public final class MConnector {
}
MConnector mc = (MConnector) other;
- return (uniqueName.equals(mc.uniqueName) &&
- className.equals(mc.className));
+ return (uniqueName.equals(mc.uniqueName)
+ && className.equals(mc.className))
+ && connectionForms.equals(mc.connectionForms)
+ && jobForms.equals(mc.jobForms);
}
@Override
@@ -81,6 +83,12 @@ public final class MConnector {
int result = 23;
result = 31 * result + uniqueName.hashCode();
result = 31 * result + className.hashCode();
+ for (MForm cmf : connectionForms) {
+ result = 31 * result + cmf.hashCode();
+ }
+ for (MForm jmf : jobForms) {
+ result = 31 * result + jmf.hashCode();
+ }
return result;
}
@@ -92,5 +100,4 @@ public final class MConnector {
public List<MForm> getJobForms() {
return jobForms;
}
-
}
Modified: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MForm.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MForm.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MForm.java (original)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MForm.java Tue Jan 10 03:37:24 2012
@@ -41,8 +41,34 @@ public final class MForm extends MNamedE
@Override
public String toString() {
StringBuilder sb = new StringBuilder("form-").append(getName());
- sb.append(":").append(inputs);
+ sb.append(":").append(getPersistenceId()).append(":").append(inputs);
return sb.toString();
}
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) {
+ return true;
+ }
+
+ if (!(other instanceof MForm)) {
+ return false;
+ }
+
+ MForm mf = (MForm) other;
+ return getName().equals(mf.getName())
+ && inputs.equals(mf.inputs);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = 17;
+ result = 31 * result + getName().hashCode();
+ for (MInput<?> mi : inputs) {
+ result = 31 * result + mi.hashCode();
+ }
+
+ return result;
+ }
}
Added: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFormType.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFormType.java?rev=1229465&view=auto
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFormType.java (added)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFormType.java Tue Jan 10 03:37:24 2012
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+package org.apache.sqoop.model;
+
+/**
+ * Represents the various form types supported by the system.
+ */
+public enum MFormType {
+
+ /** Unknown form type */
+ OTHER,
+
+ /** Connection form type */
+ CONNECTION,
+
+ /** Job form type */
+ JOB;
+
+}
Propchange: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFormType.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInput.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInput.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInput.java (original)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInput.java Tue Jan 10 03:37:24 2012
@@ -56,10 +56,46 @@ public abstract class MInput<T> extends
*/
public abstract void restoreFromUrlSafeValueString(String valueString);
+ public abstract MInputType getType();
+
+ /**
+ * @return <tt>true</tt> if this type maintains more state than what is
+ * stored in the <tt>MInput</tt> base class.
+ */
+ protected abstract boolean hasExtraInfo();
+
+ /**
+ * @return the string representation of state stored in this type if
+ * applicable or an empty string.
+ */
+ protected abstract String getExtraInfoToString();
+
+ /**
+ * All input types must override the <tt>equals()</tt> method such that the
+ * test for equality is based on static metadata only. As a result any
+ * set value, error message and other dynamic value data is not considered
+ * as part of the equality comparison.
+ */
+ @Override
+ public abstract boolean equals(Object other);
+
+ /**
+ * All input types must override the <tt>hashCode()</tt> method such that
+ * the hash code computation is solely based on static metadata. As a result
+ * any set value, error message and other dynamic value data is not
+ * considered as part of the hash code computation.
+ */
+ @Override
+ public abstract int hashCode();
+
@Override
public final String toString() {
- StringBuilder sb = new StringBuilder("input-");
- sb.append(getClass().getSimpleName()).append(":").append(getName());
+ StringBuilder sb = new StringBuilder("input-").append(getName());
+ sb.append(":").append(getPersistenceId()).append(":");
+ sb.append(getType());
+ if (hasExtraInfo()) {
+ sb.append(":").append(getExtraInfoToString());
+ }
return sb.toString();
}
Added: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInputType.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInputType.java?rev=1229465&view=auto
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInputType.java (added)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInputType.java Tue Jan 10 03:37:24 2012
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+package org.apache.sqoop.model;
+
+/**
+ * Represents the various input types supported by the system.
+ */
+public enum MInputType {
+
+ /** Unknown input type */
+ OTHER,
+
+ /** String input type */
+ STRING,
+
+ /** Map input type */
+ MAP;
+}
Propchange: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MInputType.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MMapInput.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MMapInput.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MMapInput.java (original)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MMapInput.java Tue Jan 10 03:37:24 2012
@@ -70,4 +70,38 @@ public final class MMapInput extends MIn
}
setValue(valueMap);
}
+
+ @Override
+ public MInputType getType() {
+ return MInputType.MAP;
+ }
+
+ @Override
+ protected boolean hasExtraInfo() {
+ return false;
+ }
+
+ @Override
+ protected String getExtraInfoToString() {
+ return "";
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) {
+ return true;
+ }
+
+ if (!(other instanceof MMapInput)) {
+ return false;
+ }
+
+ MMapInput mmi = (MMapInput) other;
+ return getName().equals(mmi.getName());
+ }
+
+ @Override
+ public int hashCode() {
+ return 23 + 31 * getName().hashCode();
+ }
}
Modified: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MNamedElement.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MNamedElement.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MNamedElement.java (original)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MNamedElement.java Tue Jan 10 03:37:24 2012
@@ -20,7 +20,7 @@ package org.apache.sqoop.model;
/**
* Represents an element of metadata used by the connector.
*/
-public abstract class MNamedElement {
+public abstract class MNamedElement extends MPersistableEntity {
private static final String LABEL_KEY_SUFFIX = "-label";
private static final String HELP_KEY_SUFFIX = "-help";
Added: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MPersistableEntity.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MPersistableEntity.java?rev=1229465&view=auto
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MPersistableEntity.java (added)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MPersistableEntity.java Tue Jan 10 03:37:24 2012
@@ -0,0 +1,41 @@
+/**
+ * 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.
+ */
+package org.apache.sqoop.model;
+
+/**
+ * Represents a persistable metadata entity.
+ */
+public abstract class MPersistableEntity {
+
+ private long persistenceId = -1L;
+
+ protected MPersistableEntity() {
+ // Default constructor
+ }
+
+ public void setPersistenceId(long persistenceId) {
+ this.persistenceId = persistenceId;
+ }
+
+ public long getPersistenceId() {
+ return persistenceId;
+ }
+
+ @Override
+ public abstract String toString();
+}
Propchange: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MPersistableEntity.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MStringInput.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MStringInput.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MStringInput.java (original)
+++ incubator/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MStringInput.java Tue Jan 10 03:37:24 2012
@@ -28,7 +28,7 @@ import org.apache.sqoop.utils.UrlSafeUti
public final class MStringInput extends MInput<String> {
private final boolean mask;
- private final int maxLength;
+ private final short maxLength;
/**
* @param name the parameter name
@@ -36,7 +36,7 @@ public final class MStringInput extends
* @param mask a flag indicating if the string should be masked
* @param maxLength the maximum length of the string
*/
- public MStringInput(String name, boolean mask, int maxLength) {
+ public MStringInput(String name, boolean mask, short maxLength) {
super(name);
this.mask = mask;
this.maxLength = maxLength;
@@ -53,7 +53,7 @@ public final class MStringInput extends
/**
* @return the maximum length of this string type
*/
- public int getMaxLength() {
+ public short getMaxLength() {
return maxLength;
}
@@ -66,4 +66,43 @@ public final class MStringInput extends
public void restoreFromUrlSafeValueString(String valueString) {
setValue(UrlSafeUtils.urlDecode(valueString));
}
+
+ @Override
+ public MInputType getType() {
+ return MInputType.STRING;
+ }
+
+ @Override
+ protected boolean hasExtraInfo() {
+ return true;
+ }
+
+ @Override
+ protected String getExtraInfoToString() {
+ return isMasked() + ":" + getMaxLength();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) {
+ return true;
+ }
+
+ if (!(other instanceof MStringInput)) {
+ return false;
+ }
+
+ MStringInput msi = (MStringInput) other;
+ return getName().equals(msi.getName())
+ && (mask == msi.mask)
+ && (maxLength == msi.maxLength);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = 23 + 31 * getName().hashCode();
+ result = 31 * result + (mask ? 1 : 0);
+ result = 31 * result + maxLength;
+ return result;
+ }
}
Modified: incubator/sqoop/branches/sqoop2/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcConnector.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcConnector.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcConnector.java (original)
+++ incubator/sqoop/branches/sqoop2/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcConnector.java Tue Jan 10 03:37:24 2012
@@ -26,30 +26,33 @@ import org.apache.sqoop.model.MForm;
import org.apache.sqoop.model.MInput;
import org.apache.sqoop.model.MMapInput;
import org.apache.sqoop.model.MStringInput;
-import org.apache.sqoop.spi.SqoopConnector;
+import org.apache.sqoop.connector.spi.SqoopConnector;
public class GenericJdbcConnector implements SqoopConnector {
private static final List<MForm> CONNECTION_FORMS = new ArrayList<MForm>();
+ private static final List<MForm> JOB_FORMS = new ArrayList<MForm>();
static {
// Build the connection form
List<MInput<?>> connFormInputs = new ArrayList<MInput<?>>();
MStringInput jdbcDriver = new MStringInput(
- GenericJdbcConnectorConstants.INPUT_CONN_JDBCDRIVER, false, 128);
+ GenericJdbcConnectorConstants.INPUT_CONN_JDBCDRIVER, false,
+ (short) 128);
connFormInputs.add(jdbcDriver);
MStringInput connectString = new MStringInput(
- GenericJdbcConnectorConstants.INPUT_CONN_CONNECTSTRING, false, 128);
+ GenericJdbcConnectorConstants.INPUT_CONN_CONNECTSTRING, false,
+ (short) 128);
connFormInputs.add(connectString);
MStringInput username = new MStringInput(
- GenericJdbcConnectorConstants.INPUT_CONN_USERNAME, false, 36);
+ GenericJdbcConnectorConstants.INPUT_CONN_USERNAME, false, (short) 36);
connFormInputs.add(username);
MStringInput password = new MStringInput(
- GenericJdbcConnectorConstants.INPUT_CONN_PASSWORD, true, 10);
+ GenericJdbcConnectorConstants.INPUT_CONN_PASSWORD, true, (short) 10);
connFormInputs.add(password);
MMapInput jdbcProperties = new MMapInput(
@@ -73,4 +76,9 @@ public class GenericJdbcConnector implem
return CONNECTION_FORMS;
}
+ @Override
+ public List<MForm> getJobForms() {
+ return JOB_FORMS;
+ }
+
}
Modified: incubator/sqoop/branches/sqoop2/connector/connector-mysql-jdbc/src/main/java/org/apache/sqoop/connector/mysqljdbc/MySqlJdbcConnector.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/connector/connector-mysql-jdbc/src/main/java/org/apache/sqoop/connector/mysqljdbc/MySqlJdbcConnector.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/connector/connector-mysql-jdbc/src/main/java/org/apache/sqoop/connector/mysqljdbc/MySqlJdbcConnector.java (original)
+++ incubator/sqoop/branches/sqoop2/connector/connector-mysql-jdbc/src/main/java/org/apache/sqoop/connector/mysqljdbc/MySqlJdbcConnector.java Tue Jan 10 03:37:24 2012
@@ -17,15 +17,19 @@
*/
package org.apache.sqoop.connector.mysqljdbc;
+import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import org.apache.sqoop.model.MForm;
-import org.apache.sqoop.spi.SqoopConnector;
+import org.apache.sqoop.connector.spi.SqoopConnector;
public class MySqlJdbcConnector implements SqoopConnector {
+ private static final List<MForm> CONNECTION_FORMS = new ArrayList<MForm>();
+ private static final List<MForm> JOB_FORMS = new ArrayList<MForm>();
+
@Override
public ResourceBundle getBundle(Locale locale) {
// TODO Auto-generated method stub
@@ -34,8 +38,12 @@ public class MySqlJdbcConnector implemen
@Override
public List<MForm> getConnectionForms() {
- // TODO Auto-generated method stub
- return null;
+ return CONNECTION_FORMS;
}
+ @Override
+ public List<MForm> getJobForms() {
+ // TODO Auto-generated method stub
+ return JOB_FORMS;
+ }
}
Modified: incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java (original)
+++ incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java Tue Jan 10 03:37:24 2012
@@ -27,7 +27,7 @@ import org.apache.sqoop.core.Configurati
import org.apache.sqoop.core.SqoopException;
import org.apache.sqoop.model.MConnector;
import org.apache.sqoop.model.MForm;
-import org.apache.sqoop.spi.SqoopConnector;
+import org.apache.sqoop.connector.spi.SqoopConnector;
public final class ConnectorHandler {
@@ -90,7 +90,7 @@ public final class ConnectorHandler {
// Initialize Metadata
mConnector = new MConnector(connectorUniqueName, connectorClassName,
- new ArrayList<MForm>(), new ArrayList<MForm>());
+ connector.getConnectionForms(), connector.getJobForms());
if (LOG.isInfoEnabled()) {
LOG.info("Connector [" + connectorClassName + "] initialized.");
Modified: incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java (original)
+++ incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java Tue Jan 10 03:37:24 2012
@@ -54,9 +54,12 @@ public class JdbcRepository implements R
Connection conn = tx.getConnection();
result = handler.findConnector(connectorUniqueName, conn);
if (result == null) {
- // Insert (Register) connector FIXME
-
-
+ handler.registerConnector(mConnector, conn);
+ } else {
+ if (!result.equals(mConnector)) {
+ throw new SqoopException(RepositoryError.JDBCREPO_0013,
+ "given[" + mConnector + "] found[" + result + "]");
+ }
}
tx.commit();
} catch (Exception ex) {
Modified: incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java (original)
+++ incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java Tue Jan 10 03:37:24 2012
@@ -27,6 +27,8 @@ public interface JdbcRepositoryHandler {
public MConnector findConnector(String shortName, Connection conn);
+ public void registerConnector(MConnector mc, Connection conn);
+
public boolean schemaExists();
public void createSchema();
Modified: incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java (original)
+++ incubator/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java Tue Jan 10 03:37:24 2012
@@ -74,7 +74,10 @@ public enum RepositoryError implements E
JDBCREPO_0011("Attempt to reinitialize JDBC repository context"),
/** The system was unable to register the connector in its repository. */
- JDBCREPO_0012("Failed to register connector in repository");
+ JDBCREPO_0012("Failed to register connector in repository"),
+
+ /** The system found a change in connector metadata that requires upgrade. */
+ JDBCREPO_0013("Connector metadata changed - upgrade may be required");
private final String message;
Modified: incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java (original)
+++ incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java Tue Jan 10 03:37:24 2012
@@ -31,7 +31,79 @@ public enum DerbyRepoError implements Er
DERBYREPO_0002("Unable to shutdown embedded Derby instance"),
/** The system was unable to run the specified query. */
- DERBYREPO_0003("Unable to run specified query");
+ DERBYREPO_0003("Unable to run specified query"),
+
+ /** The system was unable to query the repository for connector metadata. */
+ DERBYREPO_0004("Unable to retrieve connector metadata"),
+
+ /** The metadata repository contains more than one connector with same name */
+ DERBYREPO_0005("Invalid metadata state - multiple connectors with name"),
+
+ /** The system does not support the given input type.*/
+ DERBYREPO_0006("Unknown input type encountered"),
+
+ /** The system does not support the given form type.*/
+ DERBYREPO_0007("Unknown form type encountered"),
+
+ /** No input metadata was found for the given form. */
+ DERBYREPO_0008("The form contains no input metadata"),
+
+ /** The system could not load the form due to unexpected position of input.*/
+ DERBYREPO_0009("The form input retrieved does not match expected position"),
+
+ /**
+ * The system could not load the connector due to unexpected position
+ * of form.
+ */
+ DERBYREPO_0010("The form retrieved does not match expteced position"),
+
+ /**
+ * The system was not able to register connector metadata due to a
+ * pre-assigned persistence identifier.
+ */
+ DERBYREPO_0011("Connector metadata cannot have preassigned persistence id"),
+
+ /**
+ * The system was unable to register connector metadata due to an unexpected
+ * update count.
+ */
+ DERBYREPO_0012("Unexpected update count on connector registration"),
+
+ /**
+ * The system was unable to register connector metadata due to a failure to
+ * retrieve the generated identifier.
+ */
+ DERBYREPO_0013("Unable to retrieve generated identifier for new connector"),
+
+ /**
+ * The system was unable to register connector metadata due to a server
+ * error.
+ */
+ DERBYREPO_0014("Registration of connector metadata failed"),
+
+ /**
+ * The system was not able to register connector metadata due to an unexpected
+ * update count.
+ */
+ DERBYREPO_0015("Unexpected update count on form registration"),
+
+ /**
+ * The system was unable to register connector metadata due to a failure to
+ * retrieve the generated identifier for a form.
+ */
+ DERBYREPO_0016("Unable to retrieve generated identifier for form"),
+
+ /**
+ * The system was unable to register connector metadata due to an unexpected
+ * update count for form input registration.
+ */
+ DERBYREPO_0017("Unexpected update count for form input"),
+
+ /**
+ * The system was unable to register connector metadata due to a failure to
+ * retrieve the generated identifier for a form input.
+ */
+ DERBYREPO_0018("Unable to retrieve generated identifier for form input");
private final String message;
Modified: incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java (original)
+++ incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java Tue Jan 10 03:37:24 2012
@@ -18,18 +18,32 @@
package org.apache.sqoop.repository.derby;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.*;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_CREATE_TABLE_SQ_CONNECTOR;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_CREATE_TABLE_SQ_FORM;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_CREATE_TABLE_SQ_INPUT;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.STMT_FETCH_BASE_CONNECTOR;
+import static org.apache.sqoop.repository.derby.DerbySchemaQuery.STMT_FETCH_FORM;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.apache.sqoop.core.SqoopException;
import org.apache.sqoop.model.MConnector;
+import org.apache.sqoop.model.MForm;
+import org.apache.sqoop.model.MFormType;
+import org.apache.sqoop.model.MInput;
+import org.apache.sqoop.model.MInputType;
+import org.apache.sqoop.model.MMapInput;
+import org.apache.sqoop.model.MStringInput;
import org.apache.sqoop.repository.JdbcRepositoryContext;
import org.apache.sqoop.repository.JdbcRepositoryHandler;
import org.apache.sqoop.repository.JdbcRepositoryTransactionFactory;
@@ -54,6 +68,136 @@ public class DerbyRepositoryHandler impl
private JdbcRepositoryTransactionFactory txFactory;
@Override
+ public void registerConnector(MConnector mc, Connection conn) {
+ if (mc.getPersistenceId() != -1L) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0011,
+ mc.getUniqueName());
+ }
+
+ PreparedStatement baseConnectorStmt = null;
+ PreparedStatement baseFormStmt = null;
+ PreparedStatement baseInputStmt = null;
+ try {
+ baseConnectorStmt = conn.prepareStatement(STMT_INSERT_CONNECTOR_BASE,
+ Statement.RETURN_GENERATED_KEYS);
+ baseConnectorStmt.setString(1, mc.getUniqueName());
+ baseConnectorStmt.setString(2, mc.getClassName());
+
+ int baseConnectorCount = baseConnectorStmt.executeUpdate();
+ if (baseConnectorCount != 1) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0012,
+ new Integer(baseConnectorCount).toString());
+ }
+
+ ResultSet rsetConnectorId = baseConnectorStmt.getGeneratedKeys();
+
+ if (!rsetConnectorId.next()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0013);
+ }
+
+ long connectorId = rsetConnectorId.getLong(1);
+ mc.setPersistenceId(connectorId);
+
+ baseFormStmt = conn.prepareStatement(STMT_INSERT_FORM_BASE,
+ Statement.RETURN_GENERATED_KEYS);
+
+ baseInputStmt = conn.prepareStatement(STMT_INSERT_INPUT_BASE,
+ Statement.RETURN_GENERATED_KEYS);
+
+ // Insert connection forms
+ registerForms(connectorId, mc.getConnectionForms(),
+ MFormType.CONNECTION.name(), baseFormStmt, baseInputStmt);
+
+ registerForms(connectorId, mc.getJobForms(),
+ MFormType.JOB.name(), baseFormStmt, baseInputStmt);
+
+ } catch (SQLException ex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0014,
+ mc.toString(), ex);
+ } finally {
+ if (baseConnectorStmt != null) {
+ try {
+ baseConnectorStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close base connector statement", ex);
+ }
+ }
+ if (baseFormStmt != null) {
+ try {
+ baseFormStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close base form statement", ex);
+ }
+ }
+ if (baseInputStmt != null) {
+ try {
+ baseInputStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close base input statement", ex);
+ }
+ }
+ }
+ }
+
+ private void registerForms(long connectorId, List<MForm> forms, String type,
+ PreparedStatement baseFormStmt, PreparedStatement baseInputStmt)
+ throws SQLException {
+ short formIndex = 0;
+ for (MForm form : forms) {
+ baseFormStmt.setLong(1, connectorId);
+ baseFormStmt.setString(2, form.getName());
+ baseFormStmt.setString(3, type);
+ baseFormStmt.setShort(4, formIndex++);
+
+ int baseFormCount = baseFormStmt.executeUpdate();
+ if (baseFormCount != 1) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0015,
+ new Integer(baseFormCount).toString());
+ }
+ ResultSet rsetFormId = baseFormStmt.getGeneratedKeys();
+ if (!rsetFormId.next()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0016);
+ }
+
+ long formId = rsetFormId.getLong(1);
+ form.setPersistenceId(formId);
+
+ // Insert all the inputs
+ List<MInput<?>> inputs = form.getInputs();
+ registerFormInputs(formId, inputs, baseInputStmt);
+ }
+ }
+
+ private void registerFormInputs(long formId, List<MInput<?>> inputs,
+ PreparedStatement baseInputStmt) throws SQLException {
+ short inputIndex = 0;
+ for (MInput<?> input : inputs) {
+ baseInputStmt.setString(1, input.getName());
+ baseInputStmt.setLong(2, formId);
+ baseInputStmt.setShort(3, inputIndex++);
+ baseInputStmt.setString(4, input.getType().name());
+ if (input.getType().equals(MInputType.STRING)) {
+ MStringInput strInput = (MStringInput) input;
+ baseInputStmt.setBoolean(5, strInput.isMasked());
+ baseInputStmt.setShort(6, strInput.getMaxLength());
+ }
+ int baseInputCount = baseInputStmt.executeUpdate();
+ if (baseInputCount != 1) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0017,
+ new Integer(baseInputCount).toString());
+ }
+
+ ResultSet rsetInputId = baseInputStmt.getGeneratedKeys();
+ if (!rsetInputId.next()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0018);
+ }
+
+ long inputId = rsetInputId.getLong(1);
+ input.setPersistenceId(inputId);
+ }
+ }
+
+ @Override
public synchronized void initialize(JdbcRepositoryContext ctx) {
repoContext = ctx;
dataSource = repoContext.getDataSource();
@@ -199,7 +343,146 @@ public class DerbyRepositoryHandler impl
@Override
public MConnector findConnector(String shortName, Connection conn) {
- // FIXME Auto-generated method stub
- return null;
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Looking up connector: " + shortName);
+ }
+ MConnector mc = null;
+ PreparedStatement baseConnectorFetchStmt = null;
+ PreparedStatement formFetchStmt = null;
+ PreparedStatement inputFetchStmt = null;
+ try {
+ baseConnectorFetchStmt = conn.prepareStatement(STMT_FETCH_BASE_CONNECTOR);
+ baseConnectorFetchStmt.setString(1, shortName);
+ ResultSet rsetBaseConnector = baseConnectorFetchStmt.executeQuery();
+
+ if (!rsetBaseConnector.next()) {
+ LOG.debug("No connector found by name: " + shortName);
+ return null;
+ }
+
+ long connectorId = rsetBaseConnector.getLong(1);
+ String connectorName = rsetBaseConnector.getString(2);
+ String connectorClassName = rsetBaseConnector.getString(3);
+
+ List<MForm> connectionForms = new ArrayList<MForm>();
+ List<MForm> jobForms = new ArrayList<MForm>();
+
+ mc = new MConnector(connectorName, connectorClassName,
+ connectionForms, jobForms);
+ mc.setPersistenceId(connectorId);
+
+ if (rsetBaseConnector.next()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0005, shortName);
+ }
+
+ formFetchStmt = conn.prepareStatement(STMT_FETCH_FORM);
+ formFetchStmt.setLong(1, connectorId);
+
+ inputFetchStmt = conn.prepareStatement(STMT_FETCH_INPUT);
+
+ ResultSet rsetForm = formFetchStmt.executeQuery();
+ while (rsetForm.next()) {
+ long formId = rsetForm.getLong(1);
+ long formConnectorId = rsetForm.getLong(2);
+ String formName = rsetForm.getString(3);
+ String formType = rsetForm.getString(4);
+ int formIndex = rsetForm.getInt(5);
+ List<MInput<?>> formInputs = new ArrayList<MInput<?>>();
+
+ MForm mf = new MForm(formName, formInputs);
+ mf.setPersistenceId(formId);
+
+ inputFetchStmt.setLong(1, formId);
+
+ ResultSet rsetInput = inputFetchStmt.executeQuery();
+ while (rsetInput.next()) {
+ long inputId = rsetInput.getLong(1);
+ String inputName = rsetInput.getString(2);
+ long inputForm = rsetInput.getLong(3);
+ short inputIndex = rsetInput.getShort(4);
+ String inputType = rsetInput.getString(5);
+ boolean inputStrMask = rsetInput.getBoolean(6);
+ short inputStrLength = rsetInput.getShort(7);
+
+ MInputType mit = MInputType.valueOf(inputType);
+
+ MInput input = null;
+ switch (mit) {
+ case STRING:
+ input = new MStringInput(inputName, inputStrMask, inputStrLength);
+ break;
+ case MAP:
+ input = new MMapInput(inputName);
+ break;
+ default:
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0006,
+ "input-" + inputName + ":" + inputId + ":"
+ + "form-" + inputForm + ":" + mit.name());
+ }
+ input.setPersistenceId(inputId);
+
+ if (mf.getInputs().size() != inputIndex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0009,
+ "form: " + mf + "; input: " + input);
+ }
+
+ mf.getInputs().add(input);
+ }
+
+ if (mf.getInputs().size() == 0) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0008,
+ "connector-" + formConnectorId + ":" + mf);
+ }
+
+ MFormType mft = MFormType.valueOf(formType);
+ switch (mft) {
+ case CONNECTION:
+ if (mc.getConnectionForms().size() != formIndex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0010,
+ "connector: " + mc + "; form: " + mf);
+ }
+ mc.getConnectionForms().add(mf);
+ break;
+ case JOB:
+ if (mc.getConnectionForms().size() != formIndex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0010,
+ "connector: " + mc + "; form: " + mf);
+ }
+ mc.getJobForms().add(mf);
+ break;
+ default:
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0007,
+ "connector-" + formConnectorId + ":" + mf);
+ }
+ }
+ } catch (SQLException ex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0004, shortName, ex);
+ } finally {
+ if (baseConnectorFetchStmt != null) {
+ try {
+ baseConnectorFetchStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close base connector fetch statement", ex);
+ }
+ }
+ if (formFetchStmt != null) {
+ try {
+ formFetchStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close form fetch statement", ex);
+ }
+ }
+ if (inputFetchStmt != null) {
+ try {
+ inputFetchStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close input fetch statement", ex);
+ }
+ }
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Looking up connector: " + shortName + ", found: " + mc);
+ }
+ return mc;
}
}
Modified: incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java (original)
+++ incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java Tue Jan 10 03:37:24 2012
@@ -28,6 +28,8 @@ public final class DerbySchemaConstants
public static final String TABLE_SQ_CONNECTOR = SCHEMA_PREFIX
+ TABLE_SQ_CONNECTOR_NAME;
+ public static final String COLUMN_SQC_ID = "SQC_ID";
+
public static final String COLUMN_SQC_NAME = "SQC_NAME";
public static final String COLUMN_SQC_CLASS = "SQC_CLASS";
Modified: incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java (original)
+++ incubator/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java Tue Jan 10 03:37:24 2012
@@ -26,12 +26,13 @@ import static org.apache.sqoop.repositor
* <p>
* <strong>SQ_CONNECTOR</strong>: Connector registration.
* <pre>
- * +--------------------------+
- * | SQ_CONNECTOR |
- * +--------------------------+
- * | SQC_NAME: VARCHAR(64) PK |
- * | SQC_CLASS: VARCHAR(255) |
- * +--------------------------+
+ * +----------------------------+
+ * | SQ_CONNECTOR |
+ * +----------------------------+
+ * | SQC_ID: BIGINT PK AUTO-GEN |
+ * | SQC_NAME: VARCHAR(64) |
+ * | SQC_CLASS: VARCHAR(255) |
+ * +----------------------------+
* </pre>
* </p>
* <p>
@@ -41,7 +42,7 @@ import static org.apache.sqoop.repositor
* | SQ_FORM |
* +-----------------------------+
* | SQF_ID: BIGINT PK AUTO-GEN |
- * | SQF_CONNECTOR: VARCHAR(64) | FK SQ_CONNECTOR(SQC_NAME)
+ * | SQF_CONNECTOR: BIGINT | FK SQ_CONNECTOR(SQC_ID)
* | SQF_NAME: VARCHAR(64) |
* | SQF_TYPE: VARCHAR(32) | "CONNECTION"|"JOB"
* | SQF_INDEX: SMALLINT |
@@ -67,22 +68,29 @@ import static org.apache.sqoop.repositor
*/
public final class DerbySchemaQuery {
+ // DDL: Create schema
public static final String QUERY_CREATE_SCHEMA_SQOOP =
"CREATE SCHEMA " + SCHEMA_SQOOP;
+ // DDL: Create table SQ_CONNECTOR
public static final String QUERY_CREATE_TABLE_SQ_CONNECTOR =
- "CREATE TABLE " + TABLE_SQ_CONNECTOR + " (" + COLUMN_SQC_NAME
- + " VARCHAR(64) PRIMARY KEY, " + COLUMN_SQC_CLASS + " VARCHAR(255))";
+ "CREATE TABLE " + TABLE_SQ_CONNECTOR + " (" + COLUMN_SQC_ID
+ + " BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) "
+ + "PRIMARY KEY, " + COLUMN_SQC_NAME + " VARCHAR(64), " + COLUMN_SQC_CLASS
+ + " VARCHAR(255))";
+ // DDL: Create table SQ_FORM
public static final String QUERY_CREATE_TABLE_SQ_FORM =
"CREATE TABLE " + TABLE_SQ_FORM + " (" + COLUMN_SQF_ID
+ " BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) "
- + "PRIMARY KEY, " + COLUMN_SQF_CONNECTOR + " VARCHAR(64), "
+ + "PRIMARY KEY, " + COLUMN_SQF_CONNECTOR + " BIGINT, "
+ COLUMN_SQF_NAME + " VARCHAR(64), " + COLUMN_SQF_TYPE + " VARCHAR(32), "
+ COLUMN_SQF_INDEX + " SMALLINT, " + " FOREIGN KEY ("
+ COLUMN_SQF_CONNECTOR+ ") REFERENCES " + TABLE_SQ_CONNECTOR + " ("
- + COLUMN_SQC_NAME + "))";
+ + COLUMN_SQC_ID + "))";
+
+ // DDL: Create table SQ_INPUT
public static final String QUERY_CREATE_TABLE_SQ_INPUT =
"CREATE TABLE " + TABLE_SQ_INPUT + " (" + COLUMN_SQI_ID
+ " BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) "
@@ -92,6 +100,46 @@ public final class DerbySchemaQuery {
+ COLUMN_SQI_STRLENGTH + " SMALLINT, FOREIGN KEY (" + COLUMN_SQI_FORM
+ ") REFERENCES " + TABLE_SQ_FORM + " (" + COLUMN_SQF_ID + "))";
+ // DML: Fetch connector Given Name
+ public static final String STMT_FETCH_BASE_CONNECTOR =
+ "SELECT " + COLUMN_SQC_ID + ", " + COLUMN_SQC_NAME + ", "
+ + COLUMN_SQC_CLASS + " FROM " + TABLE_SQ_CONNECTOR + " WHERE "
+ + COLUMN_SQC_NAME + " = ?";
+
+
+ // DML: Fetch all forms for a given connector
+ public static final String STMT_FETCH_FORM =
+ "SELECT " + COLUMN_SQF_ID + ", " + COLUMN_SQF_CONNECTOR + ", "
+ + COLUMN_SQF_NAME + ", " + COLUMN_SQF_TYPE + ", " + COLUMN_SQF_INDEX
+ + " FROM " + TABLE_SQ_FORM + " WHERE " + COLUMN_SQF_CONNECTOR
+ + " = ? ORDER BY " + COLUMN_SQF_INDEX;
+
+ // DML: Fetch inputs for a given form
+ public static final String STMT_FETCH_INPUT =
+ "SELECT " + COLUMN_SQI_ID + ", " + COLUMN_SQI_NAME + ", "
+ + COLUMN_SQI_FORM + ", " + COLUMN_SQI_INDEX + ", " + COLUMN_SQI_TYPE
+ + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + " FROM "
+ + TABLE_SQ_INPUT + " WHERE " + COLUMN_SQI_FORM + " = ? ORDER BY "
+ + COLUMN_SQI_INDEX;
+
+ // DML: Insert connector base
+ public static final String STMT_INSERT_CONNECTOR_BASE =
+ "INSERT INTO " + TABLE_SQ_CONNECTOR + " (" + COLUMN_SQC_NAME
+ + ", " + COLUMN_SQC_CLASS + ") VALUES ( ?, ?)";
+
+ // DML: Insert form base
+ public static final String STMT_INSERT_FORM_BASE =
+ "INSERT INTO " + TABLE_SQ_FORM + " (" + COLUMN_SQF_CONNECTOR
+ + ", " + COLUMN_SQF_NAME + ", " + COLUMN_SQF_TYPE + ", "
+ + COLUMN_SQF_INDEX + ") VALUES ( ?, ?, ?, ?)";
+
+ // DML: Insert form input
+ public static final String STMT_INSERT_INPUT_BASE =
+ "INSERT INTO " + TABLE_SQ_INPUT + " (" + COLUMN_SQI_NAME + ", "
+ + COLUMN_SQI_FORM + ", " + COLUMN_SQI_INDEX + ", " + COLUMN_SQI_TYPE
+ + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + ") "
+ + "VALUES (?, ?, ?, ?, ?, ?)";
+
private DerbySchemaQuery() {
// Disable explicit object creation
}
Modified: incubator/sqoop/branches/sqoop2/server/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/server/src/main/webapp/WEB-INF/web.xml?rev=1229465&r1=1229464&r2=1229465&view=diff
==============================================================================
--- incubator/sqoop/branches/sqoop2/server/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/sqoop/branches/sqoop2/server/src/main/webapp/WEB-INF/web.xml Tue Jan 10 03:37:24 2012
@@ -29,7 +29,6 @@ limitations under the License.
<servlet>
<servlet-name>VersionServlet</servlet-name>
- <display-name>Version Servlet</display-name>
<servlet-class>org.apache.sqoop.server.VersionServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Added: incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java
URL: http://svn.apache.org/viewvc/incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java?rev=1229465&view=auto
==============================================================================
--- incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java (added)
+++ incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java Tue Jan 10 03:37:24 2012
@@ -0,0 +1,49 @@
+/**
+ * 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.
+ */
+package org.apache.sqoop.connector.spi;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.apache.sqoop.model.MForm;
+
+/**
+ * Service provider interface for Sqoop Connectors.
+ */
+public interface SqoopConnector {
+
+ /**
+ * @param locale
+ * @return the resource bundle associated with the given locale.
+ */
+ public ResourceBundle getBundle(Locale locale);
+
+ /**
+ * @return a list of <tt>MForm</tt> that provide metadata about input needed
+ * by Sqoop to create a connection object using this connector.
+ */
+ public List<MForm> getConnectionForms();
+
+
+ /**
+ * @return a list of <tt>MForm</tt> that provide metadata about input needed
+ * by Sqoop to create a job object using this connector.
+ */
+ public List<MForm> getJobForms();
+}
Propchange: incubator/sqoop/branches/sqoop2/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java
------------------------------------------------------------------------------
svn:eol-style = native