[teiid-commits] teiid SVN: r551 - in trunk: connector-api/src/main/java/org/teiid/connector/internal and 18 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Mar 12 17:48:48 EDT 2009


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:&lt;databaseName&gt;" 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:&lt;databaseName&gt;" 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://&lt;host&gt;:3306/&lt;databaseName&gt;" 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://&lt;host&gt;:5432;DatabaseName=/&lt;databaseName&gt;" 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);




More information about the teiid-commits mailing list