Author: shawkins
Date: 2009-03-12 17:48:48 -0400 (Thu, 12 Mar 2009)
New Revision: 551
Added:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/XAJDBCPropertyNames.java
Modified:
trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnector.java
trunk/connector-api/src/main/java/org/teiid/connector/internal/ConnectorPropertyNames.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCPropertyNames.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/access/AccessSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java
trunk/connectors/connector-jdbc/src/main/resources/connector-jdbc.xml
trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java
trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialSQLTranslator.java
trunk/engine/src/main/java/com/metamatrix/dqp/internal/datamgr/impl/ConnectorManager.java
trunk/engine/src/main/resources/com/metamatrix/dqp/i18n.properties
trunk/engine/src/test/java/com/metamatrix/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java
Log:
TEIID-352 TEIID-164 moving capabilities loading onto Translator, made use of the isxa
property, and the properties to configure default security.
Modified: trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnector.java
===================================================================
---
trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnector.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnector.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -2,18 +2,30 @@
import org.teiid.connector.DataPlugin;
import org.teiid.connector.api.Connector;
+import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ConnectorIdentity;
import org.teiid.connector.api.CredentialMap;
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.api.MappedUserIdentity;
import org.teiid.connector.api.SingleIdentity;
+import org.teiid.connector.internal.ConnectorPropertyNames;
+import com.metamatrix.common.util.PropertiesUtils;
+
public abstract class BasicConnector implements Connector {
private boolean useCredentialMap;
private boolean adminConnectionsAllowed = true;
private String connectorName;
+
+ @Override
+ public void start(ConnectorEnvironment environment)
+ throws ConnectorException {
+ this.connectorName = environment.getConnectorName();
+ this.adminConnectionsAllowed =
PropertiesUtils.getBooleanProperty(environment.getProperties(),
ConnectorPropertyNames.ADMIN_CONNECTIONS_ALLOWED, true);
+ this.useCredentialMap = PropertiesUtils.getBooleanProperty(environment.getProperties(),
ConnectorPropertyNames.USE_CREDENTIALS_MAP, false);
+ }
/* (non-Javadoc)
* @see
com.metamatrix.connector.api.Connector#createIdentity(com.metamatrix.connector.api.ExecutionContext)
Modified:
trunk/connector-api/src/main/java/org/teiid/connector/internal/ConnectorPropertyNames.java
===================================================================
---
trunk/connector-api/src/main/java/org/teiid/connector/internal/ConnectorPropertyNames.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connector-api/src/main/java/org/teiid/connector/internal/ConnectorPropertyNames.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -98,7 +98,7 @@
public static final String IS_XA = "IsXA"; //$NON-NLS-1$
- public static final String USE_CREDENTIALS_MAPS = "UseCredentialMaps";
//$NON-NLS-1$
+ public static final String USE_CREDENTIALS_MAP = "UseCredentialMap";
//$NON-NLS-1$
public static final String ADMIN_CONNECTIONS_ALLOWED =
"AdminConnectionsAllowed"; //$NON-NLS-1$
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -35,6 +35,7 @@
import org.teiid.connector.api.ConnectorLogger;
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.basic.BasicExecution;
+import org.teiid.connector.internal.ConnectorPropertyNames;
import org.teiid.connector.jdbc.translator.TranslatedCommand;
import org.teiid.connector.jdbc.translator.Translator;
import org.teiid.connector.language.ICommand;
@@ -59,6 +60,7 @@
// Derived from properties
protected boolean trimString;
protected int fetchSize;
+ protected int maxResultRows;
// Set during execution
protected Statement statement;
@@ -77,16 +79,16 @@
this.logger = logger;
this.context = context;
- String propStr = props.getProperty(JDBCPropertyNames.TRIM_STRINGS);
- if (propStr != null) {
- trimString = Boolean.valueOf(propStr).booleanValue();
- }
-
+ trimString = PropertiesUtils.getBooleanProperty(props,
JDBCPropertyNames.TRIM_STRINGS, false);
fetchSize = PropertiesUtils.getIntProperty(props, JDBCPropertyNames.FETCH_SIZE,
context.getBatchSize());
- int max = sqlTranslator.getMaxResultRows();
- if (max > 0) {
- fetchSize = Math.min(fetchSize, max);
+ maxResultRows = PropertiesUtils.getIntProperty(props,
ConnectorPropertyNames.MAX_RESULT_ROWS, -1);
+ //if the connector work needs to throw an excpetion, set the size plus 1
+ if (maxResultRows > 0 && PropertiesUtils.getBooleanProperty(props,
ConnectorPropertyNames.EXCEPTION_ON_MAX_ROWS, false)) {
+ maxResultRows++;
}
+ if (maxResultRows > 0) {
+ fetchSize = Math.min(fetchSize, maxResultRows);
+ }
}
//
===========================================================================================================================
@@ -134,8 +136,8 @@
}
protected void setSizeContraints(Statement statement) throws SQLException {
- if (sqlTranslator.getMaxResultRows() > 0) {
- statement.setMaxRows(sqlTranslator.getMaxResultRows());
+ if (maxResultRows > 0) {
+ statement.setMaxRows(maxResultRows);
}
statement.setFetchSize(fetchSize);
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -354,10 +354,6 @@
return false;
}
- public boolean supportsOrderByInInlineViews() {
- return false;
- }
-
/**
* @see
org.teiid.connector.api.ConnectorCapabilities#supportsQuantifiedCompareCriteriaSome()
*/
@@ -366,13 +362,6 @@
}
/**
- * @see org.teiid.connector.api.ConnectorCapabilities#supportsUnionOrderBy()
- */
- public boolean supportsUnionOrderBy() {
- return true;
- }
-
- /**
* @see
org.teiid.connector.basic.BasicConnectorCapabilities#supportsSetQueryOrderBy()
*/
@Override
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -46,8 +46,6 @@
import org.teiid.connector.basic.BasicConnector;
import org.teiid.connector.internal.ConnectorPropertyNames;
import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.jdbc.xa.JDBCSourceXAConnection;
-import org.teiid.connector.jdbc.xa.XAJDBCPropertyNames;
import org.teiid.connector.xa.api.TransactionContext;
import org.teiid.connector.xa.api.XAConnection;
import org.teiid.connector.xa.api.XAConnector;
@@ -95,13 +93,12 @@
@Override
public void start(ConnectorEnvironment environment)
throws ConnectorException {
+ super.start(environment);
logger = environment.getLogger();
this.environment = environment;
logger.logInfo(JDBCPlugin.Util.getString("JDBCConnector.JDBCConnector_initialized._1"));
//$NON-NLS-1$
- capabilities = createCapabilities(environment.getProperties(),
Thread.currentThread().getContextClassLoader());
-
Properties connectionProps = environment.getProperties();
// Get the JDBC properties ...
@@ -127,6 +124,8 @@
}
sqlTranslator.initialize(environment);
+ capabilities = sqlTranslator.getConnectorCapabilities();
+
createDataSources(dataSourceClassName, connectionProps);
if (areAdminConnectionsAllowed()) {
@@ -214,7 +213,7 @@
TransactionContext transactionContext) throws ConnectorException {
XADataSource xaDataSource = getXADataSource();
if (xaDataSource == null) {
- throw new UnsupportedOperationException("Connector is not XA capable");
+ throw new
UnsupportedOperationException(JDBCPlugin.Util.getString("JDBCConnector.non_xa_connection_source"));
//$NON-NLS-1$
}
javax.sql.XAConnection conn = null;
try {
@@ -223,6 +222,8 @@
} else if (context.getConnectorIdentity() instanceof MappedUserIdentity) {
MappedUserIdentity id = (MappedUserIdentity)context.getConnectorIdentity();
conn = xaDataSource.getXAConnection(id.getMappedUser(), id.getPassword());
+ } else {
+ throw new
ConnectorException(JDBCPlugin.Util.getString("JDBCConnector.unsupported_identity_type"));
//$NON-NLS-1$
}
java.sql.Connection c = conn.getConnection();
setDefaultTransactionIsolationLevel(c);
@@ -242,27 +243,6 @@
public ConnectorCapabilities getCapabilities() {
return capabilities;
}
-
- static ConnectorCapabilities createCapabilities(Properties p, ClassLoader loader)
- throws ConnectorException {
- //create Capabilities
- String className = p.getProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS,
JDBCCapabilities.class.getName());
- try {
- ConnectorCapabilities result =
(ConnectorCapabilities)ReflectionHelper.create(className, null, loader);
- if(result instanceof JDBCCapabilities) {
- String setCriteriaBatchSize =
p.getProperty(JDBCPropertyNames.SET_CRITERIA_BATCH_SIZE);
- if(setCriteriaBatchSize != null) {
- int maxInCriteriaSize = Integer.parseInt(setCriteriaBatchSize);
- if(maxInCriteriaSize > 0) {
- ((JDBCCapabilities)result).setMaxInCriteriaSize(maxInCriteriaSize);
- }
- }
- }
- return result;
- } catch (Exception e) {
- throw new ConnectorException(e);
- }
- }
protected void createDataSources(String dataSourceClassName, final Properties
connectionProps) throws ConnectorException {
// create data source
@@ -286,7 +266,7 @@
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
- if (method.getName().equals("getConnection")) {
+ if (method.getName().equals("getConnection")) { //$NON-NLS-1$
Properties p = new Properties();
String user = null;
String password = null;
@@ -298,14 +278,14 @@
password = connectionProps.getProperty(JDBCPropertyNames.PASSWORD);
}
if (user != null) {
- p.put("user", user);
+ p.put("user", user); //$NON-NLS-1$
}
if (password != null) {
- p.put("password", password);
+ p.put("password", password); //$NON-NLS-1$
}
return driver.connect(url, p);
}
- throw new UnsupportedOperationException("Driver DataSource proxy only
provides Connections");
+ throw new UnsupportedOperationException("Driver DataSource proxy only
provides Connections"); //$NON-NLS-1$
}
});
} else {
@@ -317,7 +297,7 @@
this.xaDs = (XADataSource)temp;
PropertiesUtils.setBeanProperties(this.xaDs, connectionProps, null);
} else {
- throw new ConnectorException("Specified class is not a XADataSource,
DataSource, or Driver " + dataSourceClassName);
+ throw new
ConnectorException(JDBCPlugin.Util.getString("JDBCConnector.invalid_source",
dataSourceClassName)); //$NON-NLS-1$
}
}
if (this.ds instanceof XADataSource) {
@@ -360,13 +340,13 @@
// Will be: [aHost], [aPort]
final String[] hostPort = protoHost[1].split(":"); //$NON-NLS-1$
- connectionProps.setProperty(XAJDBCPropertyNames.SERVER_NAME,
(String)hostPort[0]);
- connectionProps.setProperty(XAJDBCPropertyNames.PORT_NUMBER,
(String)hostPort[1]);
+ connectionProps.setProperty(XAJDBCPropertyNames.SERVER_NAME, hostPort[0]);
+ connectionProps.setProperty(XAJDBCPropertyNames.PORT_NUMBER, hostPort[1]);
// For "databaseName", "SID", and all optional props
//
(<propName1>=<propValue1>;<propName2>=<propValue2>;...)
for ( int i = 1; i < urlParts.length; i++ ) {
- final String nameVal = (String) urlParts[i];
+ final String nameVal = urlParts[i];
// Will be: [propName], [propVal]
final String[] aProp = nameVal.split("="); //$NON-NLS-1$
if ( aProp.length > 1) {
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCPropertyNames.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCPropertyNames.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCPropertyNames.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -23,7 +23,7 @@
package org.teiid.connector.jdbc;
public class JDBCPropertyNames {
- public static final String CONNECTION_SOURCE_CLASS = "Driver";
//$NON-NLS-1$
+ public static final String CONNECTION_SOURCE_CLASS = "ConnectionSource";
//$NON-NLS-1$
public static final String URL = "URL"; //$NON-NLS-1$
public static final String USERNAME = "User"; //$NON-NLS-1$
public static final String PASSWORD = "Password"; //$NON-NLS-1$
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -90,7 +90,7 @@
try {
this.physicalConnection.close();
} catch(SQLException e) {
- logger.logDetail("Exception during close: " + e.getMessage());
+ logger.logDetail("Exception during close: " + e.getMessage());
//$NON-NLS-1$
}
}
Copied:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java
(from rev 549,
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/xa/JDBCSourceXAConnection.java)
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java
(rev 0)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -0,0 +1,104 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+/*
+ */
+package org.teiid.connector.jdbc;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.ConnectionEvent;
+import javax.sql.ConnectionEventListener;
+import javax.transaction.xa.XAResource;
+
+import org.teiid.connector.api.ConnectorEnvironment;
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.translator.Translator;
+import org.teiid.connector.xa.api.XAConnection;
+
+
+public class JDBCSourceXAConnection extends JDBCSourceConnection implements XAConnection
{
+ private javax.sql.XAConnection xaConn;
+ private XAResource resource;
+ private boolean errorOccurred;
+
+ public JDBCSourceXAConnection(Connection conn, javax.sql.XAConnection xaConn,
ConnectorEnvironment environment, Translator sqlTranslator) throws ConnectorException,
SQLException {
+ super(conn, environment, sqlTranslator);
+ this.xaConn = xaConn;
+ this.xaConn.addConnectionEventListener(new ConnectionEventListener() {
+ @Override
+ public void connectionClosed(ConnectionEvent event) {
+
+ }
+ @Override
+ public void connectionErrorOccurred(ConnectionEvent event) {
+ errorOccurred = true;
+ }
+ });
+ this.resource = xaConn.getXAResource();
+ }
+
+ /**
+ * @see org.teiid.connector.xa.api.XAConnection#getXAResource()
+ */
+ public XAResource getXAResource() throws ConnectorException {
+ return resource;
+ }
+
+ @Override
+ public void close() {
+ super.close();
+
+ try {
+ this.xaConn.close();
+ } catch (SQLException e) {
+ this.environment.getLogger().logDetail("Exception while closing: " +
e.getMessage()); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * XAConnection Connections should be cycled to ensure proper cleanup after the
transaction.
+ */
+ @Override
+ public void closeCalled() {
+ closeSourceConnection();
+ try {
+ this.physicalConnection = this.xaConn.getConnection();
+ } catch (SQLException e) {
+ this.environment.getLogger().logDetail("Exception while cycling connection:
" + e.getMessage()); //$NON-NLS-1$
+ }
+ }
+
+ @Override
+ public boolean isAlive() {
+ if (errorOccurred) {
+ return false;
+ }
+ return super.isAlive();
+ }
+
+ public javax.sql.XAConnection getXAConnection() {
+ return this.xaConn;
+ }
+
+}
Property changes on:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/XAJDBCPropertyNames.java
(from rev 549,
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/xa/XAJDBCPropertyNames.java)
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/XAJDBCPropertyNames.java
(rev 0)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/XAJDBCPropertyNames.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+/*
+ * Date: Jan 23, 2003
+ * Time: 5:38:40 PM
+ */
+package org.teiid.connector.jdbc;
+
+/**
+ * XAJDBCPropertyNames.
+ */
+public class XAJDBCPropertyNames {
+
+ /** An XA Transaction-related property. The
<code>XADataSource</code>'s unique
+ * resource name for the underlying <code>ConnectionPoolDataSource</code>
object.
+ */
+ public static final String DATASOURCE_NAME = "dataSourceName";
//$NON-NLS-1$
+
+ public static final String PORT_NUMBER = "portNumber";//$NON-NLS-1$
+
+ public static final String SERVER_NAME = "serverName";//$NON-NLS-1$
+
+}
Property changes on:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/XAJDBCPropertyNames.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/access/AccessSQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/access/AccessSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/access/AccessSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -24,6 +24,7 @@
*/
package org.teiid.connector.jdbc.access;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.jdbc.sybase.SybaseSQLTranslator;
@@ -42,4 +43,9 @@
return false;
}
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return AccessCapabilities.class;
+ }
+
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -25,6 +25,7 @@
import java.util.Arrays;
import java.util.List;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ExecutionContext;
@@ -49,11 +50,11 @@
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new
DB2ConvertModifier(getLanguageFactory())); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.CHAR, new
AliasModifier("chr")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
AliasModifier("day")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("coalesce")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
AliasModifier("substr")); //$NON-NLS-1$ //$NON-NLS-2$
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new
DB2ConvertModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.CHAR, new
AliasModifier("chr")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
AliasModifier("day")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("coalesce")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
AliasModifier("substr")); //$NON-NLS-1$
}
@SuppressWarnings("unchecked")
@@ -85,6 +86,11 @@
@Override
public String getDefaultConnectionTestQuery() {
return "Select 'x' from sysibm.systables where 1 = 2"; //$NON-NLS-1$
+ }
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return DB2Capabilities.class;
}
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -22,6 +22,7 @@
package org.teiid.connector.jdbc.derby;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.SourceSystemFunctions;
@@ -39,14 +40,14 @@
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONCAT, new
EscapeSyntaxModifier()); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
AliasModifier("substr")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
AliasModifier("day")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new
EscapeSyntaxModifier()); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new
EscapeSyntaxModifier()); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new
DerbyConvertModifier(getLanguageFactory())); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("coalesce")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.COALESCE, new
AliasModifier("coalesce")); //$NON-NLS-1$ //$NON-NLS-2$
+ registerFunctionModifier(SourceSystemFunctions.CONCAT, new
EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
AliasModifier("substr")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
AliasModifier("day")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new
EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new
EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new
DerbyConvertModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("coalesce")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.COALESCE, new
AliasModifier("coalesce")); //$NON-NLS-1$
}
@Override
@@ -57,6 +58,11 @@
@Override
public String getDefaultConnectionTestQuery() {
return "Select 0 from sys.systables where 1 = 2"; //$NON-NLS-1$
+ }
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return DerbyCapabilities.class;
}
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -24,6 +24,7 @@
*/
package org.teiid.connector.jdbc.informix;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.SourceSystemFunctions;
@@ -38,12 +39,17 @@
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new DropFunctionModifier());
//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new
DropFunctionModifier());
}
@Override
public String getDefaultConnectionTestQuery() {
return "select 'x' from informix.sysusers where 1=0"; //$NON-NLS-1$
}
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return InformixCapabilities.class;
+ }
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -29,9 +29,11 @@
import java.sql.Time;
import java.sql.Timestamp;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.derby.DerbyCapabilities;
import org.teiid.connector.jdbc.translator.Translator;
@@ -44,7 +46,7 @@
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new
MySQLConvertModifier(getLanguageFactory())); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new
MySQLConvertModifier(getLanguageFactory()));
}
@Override
@@ -93,4 +95,9 @@
}
}
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return DerbyCapabilities.class;
+ }
+
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -33,6 +33,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ExecutionContext;
@@ -62,31 +63,31 @@
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CHAR, new
AliasModifier("chr")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LCASE, new
AliasModifier("lower")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.UCASE, new
AliasModifier("upper")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("nvl")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LOG, new
AliasModifier("ln")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.CEILING, new
AliasModifier("ceil")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LOG10, new
Log10FunctionModifier(getLanguageFactory())); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new
OracleConvertModifier(getLanguageFactory(), getEnvironment().getLogger())); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.CHAR, new
AliasModifier("chr")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LCASE, new
AliasModifier("lower")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.UCASE, new
AliasModifier("upper")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("nvl")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LOG, new
AliasModifier("ln")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.CEILING, new
AliasModifier("ceil")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LOG10, new
Log10FunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new
OracleConvertModifier(getLanguageFactory(), getEnvironment().getLogger()));
registerFunctionModifier(SourceSystemFunctions.HOUR, new
ExtractFunctionModifier("HOUR"));//$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.YEAR, new
ExtractFunctionModifier("YEAR"));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.MINUTE, new
ExtractFunctionModifier("MINUTE"));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.SECOND, new
ExtractFunctionModifier("SECOND"));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.MONTH, new
ExtractFunctionModifier("MONTH"));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
ExtractFunctionModifier("DAY"));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.MONTHNAME, new
MonthOrDayNameFunctionModifier(getLanguageFactory(), "Month"));//$NON-NLS-1$
//$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.DAYNAME, new
MonthOrDayNameFunctionModifier(getLanguageFactory(), "Day"));//$NON-NLS-1$
//$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.WEEK, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "WW"));//$NON-NLS-1$
//$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.QUARTER, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "Q"));//$NON-NLS-1$
//$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.DAYOFWEEK, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "D"));//$NON-NLS-1$
//$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.DAYOFYEAR, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "DDD"));//$NON-NLS-1$
//$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LOCATE, new
LocateFunctionModifier(getLanguageFactory()));//$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
AliasModifier("substr"));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LEFT, new
LeftOrRightFunctionModifier(getLanguageFactory()));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.RIGHT, new
LeftOrRightFunctionModifier(getLanguageFactory()));//$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.CONCAT, new
ConcatFunctionModifier(getLanguageFactory())); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.YEAR, new
ExtractFunctionModifier("YEAR"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.MINUTE, new
ExtractFunctionModifier("MINUTE"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.SECOND, new
ExtractFunctionModifier("SECOND"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.MONTH, new
ExtractFunctionModifier("MONTH"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
ExtractFunctionModifier("DAY"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.MONTHNAME, new
MonthOrDayNameFunctionModifier(getLanguageFactory(), "Month"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYNAME, new
MonthOrDayNameFunctionModifier(getLanguageFactory(), "Day"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.WEEK, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "WW"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.QUARTER, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "Q"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFWEEK, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "D"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFYEAR, new
DayWeekQuarterFunctionModifier(getLanguageFactory(), "DDD"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LOCATE, new
LocateFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
AliasModifier("substr"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LEFT, new
LeftOrRightFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.RIGHT, new
LeftOrRightFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.CONCAT, new
ConcatFunctionModifier(getLanguageFactory()));
}
@Override
@@ -159,18 +160,18 @@
queryCommand.setLimit(null);
List<Object> parts = new ArrayList<Object>();
if (limit.getRowOffset() > 0) {
- parts.add("SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (");
+ parts.add("SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (");
//$NON-NLS-1$
} else {
- parts.add("SELECT * FROM (");
+ parts.add("SELECT * FROM ("); //$NON-NLS-1$
}
parts.add(queryCommand);
if (limit.getRowOffset() > 0) {
- parts.add(") VIEW_FOR_LIMIT WHERE ROWNUM <= ");
+ parts.add(") VIEW_FOR_LIMIT WHERE ROWNUM <= "); //$NON-NLS-1$
parts.add(limit.getRowLimit() + limit.getRowOffset());
- parts.add(") WHERE ROWNUM_ > ");
+ parts.add(") WHERE ROWNUM_ > "); //$NON-NLS-1$
parts.add(limit.getRowOffset());
} else {
- parts.add(") WHERE ROWNUM <= ");
+ parts.add(") WHERE ROWNUM <= "); //$NON-NLS-1$
parts.add(limit.getRowLimit());
}
return parts;
@@ -261,7 +262,7 @@
Statement stmt = null;
try {
stmt = connection.createStatement();
- rs = stmt.executeQuery("select * from v$instance");
+ rs = stmt.executeQuery("select * from v$instance"); //$NON-NLS-1$
int columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
@@ -288,4 +289,9 @@
}
}
}
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return OracleCapabilities.class;
+ }
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -28,6 +28,7 @@
import java.util.Arrays;
import java.util.List;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ExecutionContext;
@@ -143,5 +144,10 @@
command.acceptVisitor(visitor);
return command;
}
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return PostgreSQLCapabilities.class;
+ }
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -24,6 +24,7 @@
*/
package org.teiid.connector.jdbc.sqlserver;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.SourceSystemFunctions;
@@ -38,13 +39,18 @@
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
//TEIID-31 remove mod modifier for SQL Server 2008
- registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
AliasModifier("day")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.REPEAT, new
AliasModifier("replicate")); //$NON-NLS-1$ //$NON-NLS-2$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new
AliasModifier("day")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.REPEAT, new
AliasModifier("replicate")); //$NON-NLS-1$
}
@Override
public String getLengthFunctionName() {
return "len"; //$NON-NLS-1$
}
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return SqlServerCapabilities.class;
+ }
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -37,7 +37,7 @@
/**
*/
-public class SybaseConvertModifier extends BasicFunctionModifier implements
FunctionModifier {
+public class SybaseConvertModifier extends BasicFunctionModifier {
private static DropFunctionModifier DROP_MODIFIER = new DropFunctionModifier();
static {
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -27,6 +27,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ExecutionContext;
@@ -49,14 +50,14 @@
*/
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.MOD, new
ModFunctionModifier(getLanguageFactory())); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.CONCAT, new
AliasModifier("+")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LCASE, new
AliasModifier("lower")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.LENGTH, new
AliasModifier(getLengthFunctionName())); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("isnull")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.UCASE, new
AliasModifier("upper")); //$NON-NLS-1$ //$NON-NLS-2$
- registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
SubstringFunctionModifier(getLanguageFactory(), "substring",
getLengthFunctionName())); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new
SybaseConvertModifier(getLanguageFactory())); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.MOD, new
ModFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.CONCAT, new
AliasModifier("+")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LCASE, new
AliasModifier("lower")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.LENGTH, new
AliasModifier(getLengthFunctionName()));
+ registerFunctionModifier(SourceSystemFunctions.IFNULL, new
AliasModifier("isnull")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.UCASE, new
AliasModifier("upper")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new
SubstringFunctionModifier(getLanguageFactory(), getLengthFunctionName()));
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new
SybaseConvertModifier(getLanguageFactory()));
}
public String getLengthFunctionName() {
@@ -87,16 +88,21 @@
queryCommand.setLimit(null);
queryCommand.setOrderBy(null);
List<Object> parts = new ArrayList<Object>(6);
- parts.add("SELECT TOP ");
+ parts.add("SELECT TOP "); //$NON-NLS-1$
parts.add(limit.getRowLimit());
- parts.add(" * FROM (");
+ parts.add(" * FROM ("); //$NON-NLS-1$
parts.add(queryCommand);
- parts.add(") AS X");
+ parts.add(") AS X"); //$NON-NLS-1$
if (orderBy != null) {
- parts.add(" ");
+ parts.add(" "); //$NON-NLS-1$
parts.add(orderBy);
}
return parts;
}
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return SybaseCapabilities.class;
+ }
+
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -94,7 +94,7 @@
* Subclass should override this method as needed.
* @see
org.teiid.connector.jdbc.translator.FunctionModifier#translate(org.teiid.connector.language.IFunction)
*/
- public List translate(IFunction function) {
+ public List<?> translate(IFunction function) {
return null;
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -38,7 +38,7 @@
private ILanguageFactory languageFactory;
private String length_function;
- public SubstringFunctionModifier(ILanguageFactory languageFactory, String
substring_function, String length_function) {
+ public SubstringFunctionModifier(ILanguageFactory languageFactory, String
length_function) {
this.languageFactory = languageFactory;
this.length_function = length_function;
}
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java
===================================================================
---
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -40,11 +40,12 @@
import java.util.Map;
import java.util.TimeZone;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.internal.ConnectorPropertyNames;
+import org.teiid.connector.jdbc.JDBCCapabilities;
import org.teiid.connector.jdbc.JDBCPlugin;
import org.teiid.connector.jdbc.JDBCPropertyNames;
import org.teiid.connector.language.ICommand;
@@ -57,6 +58,7 @@
import org.teiid.connector.language.IParameter.Direction;
import com.metamatrix.common.util.PropertiesUtils;
+import com.metamatrix.core.util.ReflectionHelper;
/**
* Base class for creating source SQL queries and retrieving results.
@@ -112,7 +114,6 @@
private boolean useComments;
private boolean usePreparedStatements;
- private int maxResultRows = 0;
private TypeFacility typeFacility;
private volatile boolean initialConnection;
@@ -142,23 +143,7 @@
this.useComments = PropertiesUtils.getBooleanProperty(env.getProperties(),
JDBCPropertyNames.USE_COMMENTS_SOURCE_QUERY, false);
this.usePreparedStatements =
PropertiesUtils.getBooleanProperty(env.getProperties(),
JDBCPropertyNames.USE_BIND_VARIABLES, false);
this.connectionTestQuery =
env.getProperties().getProperty(JDBCPropertyNames.CONNECTION_TEST_QUERY,
getDefaultConnectionTestQuery());
- this.isValidTimeout = PropertiesUtils.getIntProperty(env.getProperties(),
JDBCPropertyNames.IS_VALID_TIMEOUT, -1);
-
- String maxResultRowsString =
env.getProperties().getProperty(ConnectorPropertyNames.MAX_RESULT_ROWS);
- if ( maxResultRowsString != null && maxResultRowsString.trim().length()
> 0 ) {
- try {
- maxResultRows = Integer.parseInt(maxResultRowsString);
- String exceptionOnMaxRowsString = env.getProperties().getProperty(
- ConnectorPropertyNames.EXCEPTION_ON_MAX_ROWS);
- maxResultRows = Math.max(0, maxResultRows);
- //if the connector work needs to throw an excpetion, set the size plus 1
- if (maxResultRows > 0 &&
Boolean.valueOf(exceptionOnMaxRowsString).booleanValue()) {
- maxResultRows++;
- }
- } catch (NumberFormatException e) {
- //this will already be logged by the connector worker
- }
- }
+ this.isValidTimeout = PropertiesUtils.getIntProperty(env.getProperties(),
JDBCPropertyNames.IS_VALID_TIMEOUT, -1);
}
/**
@@ -538,6 +523,14 @@
stmt.setObject(i, param, type);
}
+ /**
+ * Execute a bulk insert on the given preparedstatement.
+ * @param conn
+ * @param stmt
+ * @param command
+ * @return
+ * @throws SQLException
+ */
public int executeStatementForBulkInsert(Connection conn, PreparedStatement stmt,
TranslatedCommand command) throws SQLException {
List rows = command.getPreparedValues();
int updateCount = 0;
@@ -558,17 +551,14 @@
return updateCount;
}
- public List modifyRow(List batch, ExecutionContext context, ICommand command) {
- return batch;
- }
-
- public int getMaxResultRows() {
- return maxResultRows;
- }
-
- /*
- * @see
com.metamatrix.connector.jdbc.extension.ValueRetriever#retrieveValue(java.sql.ResultSet,
int, java.lang.Class, java.util.Calendar)
- */
+ /**
+ * Retrieve the value on the current resultset row for the given column index.
+ * @param results
+ * @param columnIndex
+ * @param expectedType
+ * @return
+ * @throws SQLException
+ */
public Object retrieveValue(ResultSet results, int columnIndex, Class expectedType)
throws SQLException {
Integer code = TYPE_CODE_MAP.get(expectedType);
if(code != null) {
@@ -647,6 +637,14 @@
return results.getObject(columnIndex);
}
+ /**
+ * Retrieve the value for the given parameter index
+ * @param results
+ * @param parameterIndex
+ * @param expectedType
+ * @return
+ * @throws SQLException
+ */
public Object retrieveValue(CallableStatement results, int parameterIndex, Class
expectedType) throws SQLException{
Integer code = TYPE_CODE_MAP.get(expectedType);
if(code != null) {
@@ -719,7 +717,11 @@
// translation routines
return results.getObject(parameterIndex);
}
-
+
+ /**
+ * Called exactly once for this source.
+ * @param connection
+ */
protected void afterInitialConnectionCreation(Connection connection) {
// now dig some details about this driver/database for log.
try {
@@ -742,21 +744,82 @@
}
/**
+ * Provides a hook to call source specific logic when
+ * a connection is created.
+ *
* defect request 13979 & 13978
*/
public void afterConnectionCreation(Connection connection) {
if (initialConnection) {
- initialConnection = false;
- afterInitialConnectionCreation(connection);
+ synchronized (this) {
+ if (!initialConnection) {
+ return;
+ }
+ initialConnection = false;
+ afterInitialConnectionCreation(connection);
+ }
}
}
+ /**
+ * Returns a positive number if query testing should use the JDBC 4.0 isValid check.
+ * Can be set via the {@link JDBCPropertyNames#IS_VALID_TIMEOUT} property
+ * @return
+ */
public int getIsValidTimeout() {
return isValidTimeout;
}
+ /**
+ * Create the {@link SQLConversionVisitor} that will perform translation. Typical
custom
+ * JDBC connectors will not need to create custom conversion visitors, rather
implementors
+ * should override existing {@link Translator} methods.
+ * @return
+ */
public SQLConversionVisitor getSQLConversionVisitor() {
return new SQLConversionVisitor(this);
}
+ /**
+ * Get the default capabilities class. Will be used by {@link
#getConnectorCapabilities()} to
+ * return a capabilities instance.
+ * @return
+ */
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return JDBCCapabilities.class;
+ }
+
+ /**
+ * Get the capabilties for the source.
+ * @return
+ * @throws ConnectorException
+ */
+ public ConnectorCapabilities getConnectorCapabilities() throws ConnectorException {
+ // create Capabilities
+ String className =
this.environment.getProperties().getProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS);
+ try {
+ ConnectorCapabilities result = null;
+ if (className != null && className.length() > 0) {
+ result = (ConnectorCapabilities) ReflectionHelper.create(
+ className, null, Thread.currentThread().getContextClassLoader());
+ } else {
+ result = getDefaultCapabilities().newInstance();
+ }
+
+ if (result instanceof JDBCCapabilities) {
+ String setCriteriaBatchSize =
this.environment.getProperties().getProperty(JDBCPropertyNames.SET_CRITERIA_BATCH_SIZE);
+ if (setCriteriaBatchSize != null) {
+ int maxInCriteriaSize = Integer
+ .parseInt(setCriteriaBatchSize);
+ if (maxInCriteriaSize > 0) {
+ ((JDBCCapabilities) result).setMaxInCriteriaSize(maxInCriteriaSize);
+ }
+ }
+ }
+ return result;
+ } catch (Exception e) {
+ throw new ConnectorException(e);
+ }
+ }
+
}
Modified: trunk/connectors/connector-jdbc/src/main/resources/connector-jdbc.xml
===================================================================
--- trunk/connectors/connector-jdbc/src/main/resources/connector-jdbc.xml 2009-03-12
16:07:02 UTC (rev 550)
+++ trunk/connectors/connector-jdbc/src/main/resources/connector-jdbc.xml 2009-03-12
21:48:48 UTC (rev 551)
@@ -19,12 +19,12 @@
<ComponentType Name="Apache Derby Embedded Connector"
ComponentTypeCode="2" Deployable="true" Deprecated="false"
Monitorable="false" SuperComponentType="Connector"
ParentComponentType="Connectors" LastChangedBy="ConfigurationStartup"
LastChangedDate="2008-10-31T10:26:19.941-06:00"
CreatedBy="ConfigurationStartup"
CreationDate="2008-10-31T10:26:19.941-06:00">
<PropertyDefinition Name="ConnectionSource"
DisplayName="Connection Source Class" ShortDescription="Driver, DataSource,
or XADataSource class name"
DefaultValue="org.apache.derby.jdbc.EmbeddedDriver" Multiplicity="1"
IsConstrainedToAllowedValues="false" IsPreferred="true" />
<PropertyDefinition Name="URL" DisplayName="JDBC URL"
ShortDescription=""
DefaultValue="jdbc:derby:<databaseName>"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
- <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="com.metamatrix.connector.jdbc.derby.DerbySQLTranslator"
IsExpert="true" />
+ <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="org.teiid.connector.jdbc.derby.DerbySQLTranslator"
IsExpert="true" />
</ComponentType>
<ComponentType Name="Apache Derby Network Connector"
ComponentTypeCode="2" Deployable="true" Deprecated="false"
Monitorable="false" SuperComponentType="Connector"
ParentComponentType="Connectors" LastChangedBy="ConfigurationStartup"
LastChangedDate="2008-10-31T10:26:19.942-06:00"
CreatedBy="ConfigurationStartup"
CreationDate="2008-10-31T10:26:19.942-06:00">
<PropertyDefinition Name="ConnectionSource"
DisplayName="Connection Source Class" ShortDescription="Driver, DataSource,
or XADataSource class name"
DefaultValue="org.apache.derby.jdbc.ClientDriver" Multiplicity="1"
IsConstrainedToAllowedValues="false" IsPreferred="true" />
<PropertyDefinition Name="URL" DisplayName="JDBC URL"
ShortDescription=""
DefaultValue="jdbc:derby:<databaseName>"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
- <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="com.metamatrix.connector.jdbc.derby.DerbySQLTranslator"
IsExpert="true" />
+ <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="org.teiid.connector.jdbc.derby.DerbySQLTranslator"
IsExpert="true" />
</ComponentType>
<ComponentType Name="MS Access Connector"
ComponentTypeCode="2" Deployable="true" Deprecated="false"
Monitorable="false" SuperComponentType="JDBC Connector"
ParentComponentType="Connectors" LastChangedBy="ConfigurationStartup"
LastChangedDate="2008-10-31T10:26:19.954-06:00"
CreatedBy="ConfigurationStartup"
CreationDate="2008-10-31T10:26:19.954-06:00">
<PropertyDefinition Name="ConnectionSource"
DisplayName="Connection Source Class" ShortDescription="Driver, DataSource,
or XADataSource class name" DefaultValue="sun.jdbc.odbc.JdbcOdbcDriver"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
@@ -38,13 +38,13 @@
<ComponentType Name="MySQL 4 Connector"
ComponentTypeCode="2" Deployable="true" Deprecated="false"
Monitorable="false" SuperComponentType="JDBC Connector"
ParentComponentType="Connectors" LastChangedBy="ConfigurationStartup"
LastChangedDate="2008-10-31T10:26:19.938-06:00"
CreatedBy="ConfigurationStartup"
CreationDate="2008-10-31T10:26:19.938-06:00">
<PropertyDefinition Name="ConnectionSource"
DisplayName="Connection Source Class" ShortDescription="Driver, DataSource,
or XADataSource class name"
DefaultValue="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
<PropertyDefinition Name="URL" DisplayName="JDBC URL"
ShortDescription=""
DefaultValue="jdbc:mysql://<host>:3306/<databaseName>"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
- <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="com.metamatrix.connector.jdbc.mysql.MySQLTranslator"
IsExpert="true" />
+ <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="org.teiid.connector.jdbc.mysql.MySQLTranslator"
IsExpert="true" />
<PropertyDefinition Name="IsXA" DisplayName="Is XA"
ShortDescription="Is XA" DefaultValue="true"
Multiplicity="1" IsConstrainedToAllowedValues="true"
IsPreferred="true" />
</ComponentType>
<ComponentType Name="PostgreSQL 8 Connector"
ComponentTypeCode="2" Deployable="true" Deprecated="false"
Monitorable="false" SuperComponentType="JDBC Connector"
ParentComponentType="Connectors" LastChangedBy="ConfigurationStartup"
LastChangedDate="2008-10-31T10:26:19.940-06:00"
CreatedBy="ConfigurationStartup"
CreationDate="2008-10-31T10:26:19.940-06:00">
<PropertyDefinition Name="ConnectionSource"
DisplayName="Connection Source Class" ShortDescription="Driver, DataSource,
or XADataSource class name" DefaultValue="org.postgresql.xa.PGXADataSource"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
<PropertyDefinition Name="URL" DisplayName="JDBC URL"
ShortDescription=""
DefaultValue="jdbc:postgresql://<host>:5432;DatabaseName=/<databaseName>"
Multiplicity="1" IsConstrainedToAllowedValues="false"
IsPreferred="true" />
- <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="com.metamatrix.connector.jdbc.postgresql.PostgreSQLTranslator"
IsExpert="true" />
+ <PropertyDefinition Name="ExtensionTranslationClass"
DisplayName="Extension SQL Translation Class" ShortDescription=""
DefaultValue="org.teiid.connector.jdbc.postgresql.PostgreSQLTranslator"
IsExpert="true" />
<PropertyDefinition Name="IsXA" DisplayName="Is XA"
ShortDescription="Is XA" DefaultValue="true"
Multiplicity="1" IsConstrainedToAllowedValues="true"
IsPreferred="true" />
</ComponentType>
<ComponentType Name="MetaMatrix JDBC 6 Connector"
ComponentTypeCode="2" Deployable="true" Deprecated="false"
Monitorable="false" SuperComponentType="JDBC Connector"
ParentComponentType="Connectors" LastChangedBy="metamatrixadmin"
LastChangedDate="2005-07-26T14:34:20.960-06:00"
CreatedBy="metamatrixadmin"
CreationDate="2005-07-26T14:34:20.960-06:00">
Modified:
trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties
===================================================================
---
trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties 2009-03-12
21:48:48 UTC (rev 551)
@@ -43,6 +43,9 @@
JDBCConnector.JDBCConnector_stopped._3=JDBCConnector stopped.
JDBCConnector.JDBCConnector_started._4=JDBCConnector started.
JDBCConnector.JDBCConnector_is_not_started._5=JDBCConnector is not started.
+JDBCConnector.unsupported_identity_type=Unsupported identity type.
+JDBCConnector.non_xa_connection_source=Connection source does not support XA.
+JDBCConnector.invalid_source=Specified connection source {0} is not a XADataSource,
DataSource, or Driver
BlobValueReference.Unable_to_read_BLOB_data=Unable to read BLOB data from InputStream.
ClobValueReference.Unable_to_read_CLOB_data=Unable to read CLOB data from character
stream.
Modified:
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java
===================================================================
---
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -28,16 +28,20 @@
import org.junit.Test;
import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.jdbc.xa.XAJDBCPropertyNames;
+import org.teiid.connector.jdbc.translator.Translator;
+import com.metamatrix.cdk.api.EnvironmentUtility;
+
public class TestJDBCConnector {
public void helpTestMaxIn(int setting, int expected) throws Exception {
Properties connProps = new Properties();
connProps.setProperty(JDBCPropertyNames.SET_CRITERIA_BATCH_SIZE,
String.valueOf(setting));
- connProps.setProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS,
SimpleCapabilities.class.getName());
- ConnectorCapabilities caps = JDBCConnector.createCapabilities(connProps,
this.getClass().getClassLoader());
+ connProps.setProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS,
SimpleCapabilities.class.getName());
+ Translator t = new Translator();
+ t.initialize(EnvironmentUtility.createEnvironment(connProps));
+ ConnectorCapabilities caps = t.getConnectorCapabilities();
int maxIn = caps.getMaxInCriteriaSize();
assertEquals(expected, maxIn);
}
@@ -63,11 +67,11 @@
Properties props = new Properties();
JDBCConnector.parseURL(urlWithEmptyProp, props);
- assertEquals("aPort",
props.getProperty(XAJDBCPropertyNames.PORT_NUMBER));
- assertEquals("aHost",
props.getProperty(XAJDBCPropertyNames.SERVER_NAME));
- assertEquals("XADS_aHost_null",
props.getProperty(XAJDBCPropertyNames.DATASOURCE_NAME));
- assertEquals("aBogusProp", props.getProperty("bogusprop"));
- assertNull(props.getProperty("unemptyprop"));
+ assertEquals("aPort", props.getProperty(XAJDBCPropertyNames.PORT_NUMBER));
//$NON-NLS-1$
+ assertEquals("aHost", props.getProperty(XAJDBCPropertyNames.SERVER_NAME));
//$NON-NLS-1$
+ assertEquals("XADS_aHost_null",
props.getProperty(XAJDBCPropertyNames.DATASOURCE_NAME)); //$NON-NLS-1$
+ assertEquals("aBogusProp", props.getProperty("bogusprop"));
//$NON-NLS-1$ //$NON-NLS-2$
+ assertNull(props.getProperty("unemptyprop")); //$NON-NLS-1$
}
}
Modified:
trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialSQLTranslator.java
===================================================================
---
trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialSQLTranslator.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialSQLTranslator.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -26,6 +26,7 @@
import java.util.Iterator;
import java.util.List;
+import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.ExecutionContext;
@@ -134,5 +135,10 @@
}
return comment;
}
+
+ @Override
+ public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
+ return OracleSpatialCapabilities.class;
+ }
}
\ No newline at end of file
Modified:
trunk/engine/src/main/java/com/metamatrix/dqp/internal/datamgr/impl/ConnectorManager.java
===================================================================
---
trunk/engine/src/main/java/com/metamatrix/dqp/internal/datamgr/impl/ConnectorManager.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/engine/src/main/java/com/metamatrix/dqp/internal/datamgr/impl/ConnectorManager.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -336,7 +336,7 @@
this.synchWorkers = PropertiesUtils.getBooleanProperty(props,
ConnectorPropertyNames.SYNCH_WORKERS, true);
// Initialize and start the connector
- initStartConnector(connectorName, connectorEnv);
+ initStartConnector(connectorEnv);
this.started = true;
}
@@ -346,7 +346,7 @@
* @param env
* @throws ApplicationLifecycleException
*/
- private void initStartConnector(String connectorName, ConnectorEnvironment env)
throws ApplicationLifecycleException {
+ private void initStartConnector(ConnectorEnvironment env) throws
ApplicationLifecycleException {
String connectorClassName =
env.getProperties().getProperty(ConnectorPropertyNames.CONNECTOR_CLASS);
if(classloader == null){
classloader = getClass().getClassLoader();
@@ -363,12 +363,15 @@
} catch (MetaMatrixCoreException e) {
throw new ApplicationLifecycleException(e,
DQPPlugin.Util.getString("failed_find_Connector_class", connectorClassName));
//$NON-NLS-1$
}
- if(c instanceof XAConnector){
- this.isXa = true;
+ this.isXa = PropertiesUtils.getBooleanProperty(env.getProperties(),
ConnectorPropertyNames.IS_XA, false);
+ if (this.isXa) {
+ if(!(c instanceof XAConnector)){
+ throw new
ApplicationLifecycleException(DQPPlugin.Util.getString("non_xa_connector",
connectorName)); //$NON-NLS-1$
+ }
if (this.getTransactionService() == null) {
throw new
ApplicationLifecycleException(DQPPlugin.Util.getString("no_txn_manager",
connectorName)); //$NON-NLS-1$
}
- }
+ }
if (this.synchWorkers) {
SynchronousWorkers synchWorkerAnnotation = (SynchronousWorkers)
c.getClass().getAnnotation(SynchronousWorkers.class);
if (synchWorkerAnnotation != null) {
Modified: trunk/engine/src/main/resources/com/metamatrix/dqp/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/com/metamatrix/dqp/i18n.properties 2009-03-12 16:07:02
UTC (rev 550)
+++ trunk/engine/src/main/resources/com/metamatrix/dqp/i18n.properties 2009-03-12 21:48:48
UTC (rev 551)
@@ -57,6 +57,7 @@
ConnectorManager.cannot_restart=Cannot restart ConnectorManager
ConnectorManager.cannot_add_to_recovery=Connector ''{0}'' does not
support single identity connections, it cannot participate in recovery
ConnectorManager.asynch_worker_warning=Setting ''{0}'' to false with
pooling enabled is not recommended. If connector threads become exhausted normal
execution closure will not be possible.
+non_xa_connector=Connector \"{0}\" was configured to support XA transactions,
but the connector is not an XAConnector
no_txn_manager=No Transaction Manger found in the configuration, Failed to start
connector \"{0}\"
Connector_State_not_active=Connector request state is not active for request {0} in
Connector {1}
Missing_required_property=Connector is missing required property {0} or wrong value
supplied {1}
Modified:
trunk/engine/src/test/java/com/metamatrix/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java
===================================================================
---
trunk/engine/src/test/java/com/metamatrix/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java 2009-03-12
16:07:02 UTC (rev 550)
+++
trunk/engine/src/test/java/com/metamatrix/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java 2009-03-12
21:48:48 UTC (rev 551)
@@ -137,13 +137,22 @@
ConnectorManager cm = new ConnectorManager();
Properties props = new Properties();
props.setProperty(ConnectorPropertyNames.CONNECTOR_CLASS,
FakeConnector.class.getName());
+ props.setProperty(ConnectorPropertyNames.IS_XA, Boolean.TRUE.toString());
startConnectorManager(cm, props);
assertTrue(cm.isXa());
cm.stop();
- cm = new ConnectorManager();
+ }
+
+ public void testIsXA_Failure() throws Exception {
+ ConnectorManager cm = new ConnectorManager();
+ Properties props = new Properties();
props.setProperty(ConnectorPropertyNames.CONNECTOR_CLASS,
FakeSourceConnectionFactory.class.getName());
- startConnectorManager(cm, props);
- assertFalse(cm.isXa());
+ props.setProperty(ConnectorPropertyNames.IS_XA, Boolean.TRUE.toString());
+ try {
+ startConnectorManager(cm, props);
+ } catch (ApplicationLifecycleException e) {
+ assertEquals("Connector \"Unknown_Binding_Name<null>\" was
configured to support XA transactions, but the connector is not an XAConnector",
e.getMessage()); //$NON-NLS-1$
+ }
cm.stop();
}
@@ -151,7 +160,7 @@
ConnectorManager cm = new ConnectorManager();
Properties props = new Properties();
final String connectorName = FakeConnector.class.getName();
- props.setProperty(ConnectorPropertyNames.CONNECTOR_CLASS,
connectorName);//$NON-NLS-1$
+ props.setProperty(ConnectorPropertyNames.CONNECTOR_CLASS, connectorName);
URLClassLoader cl = new URLClassLoader(new URL[0]);
startConnectorManager(cm, props);
((FakeConnector)cm.getConnector().getActualConnector()).setClassloader(cl);